Isi kandungan:

Cahaya Malam Kebisingan Putih: 11 Langkah (dengan Gambar)
Cahaya Malam Kebisingan Putih: 11 Langkah (dengan Gambar)

Video: Cahaya Malam Kebisingan Putih: 11 Langkah (dengan Gambar)

Video: Cahaya Malam Kebisingan Putih: 11 Langkah (dengan Gambar)
Video: pengantin pria terkejut saat pertama kali melihat wajah istrinya ‼️#pengantinviral #shorts 2024, November
Anonim
Cahaya Malam Kebisingan Putih
Cahaya Malam Kebisingan Putih
Cahaya Malam Kebisingan Putih
Cahaya Malam Kebisingan Putih

Ini adalah projek yang saya buat untuk anak saya yang berusia 1 tahun untuk Krismas. Sejujurnya, itu adalah hadiah kewarasan untuk saya dan isteri. Ini adalah mesin bunyi putih yang dapat memainkan pelbagai bunyi yang dipilih melalui antara muka web, dan juga menyertakan lampu yang berubah warna berdasarkan waktu (lampu merah bermaksud berada di tempat tidur, kuning bermaksud anda boleh bermain di bilik anda, dan hijau bermaksud tidak mengapa untuk mengaku). Oleh kerana anak saya terlalu muda untuk memberitahu masa, cahaya malam berasaskan warna kelihatan seperti idea yang sangat baik.

Ini adalah projek yang sangat mudah, dan kerana saya sudah menulis kodnya, ini mungkin 1 dari 5 pada skala kesukaran. Sekiranya anda mempunyai anak kecil yang mengganggu anda terlalu awal, anda pasti ingin membuatnya.

Langkah 1: Senarai Bahagian

Senarai Bahagian
Senarai Bahagian
Senarai Bahagian
Senarai Bahagian
Senarai Bahagian
Senarai Bahagian

1. Raspberry Pi Zero W

2. Sejenis kes (saya menggunakan ini dari Amazon)

3. Berkedip dari Pimoroni

4. Speaker Phat dari Pimoroni (Anda juga boleh menggunakan DAC lain dengan pembesar suara murah)

Anda perlu mempunyai beberapa kemahiran pematerian asas untuk mengumpulkan phat pembesar suara, ada pautan dengan arahan langkah demi langkah dari halaman produk, jadi anda tidak dapat mengacaukannya.

5. [PILIHAN] Panel pemasangan kabel USB mikro - dari Adafruit

6. beberapa wayar atau jumper penyambung

Itu sahaja!

Langkah 2: Bakar Raspbian dan Pasang Papan

Bakar Raspbian dan Pasang Papan
Bakar Raspbian dan Pasang Papan

Saya menggunakan Raspian Stretch lite untuk binaan ini. Oleh itu, bakar ke microSD dengan alat apa sahaja yang sesuai untuk anda, kemudian jalankan pi. Sekiranya anda memerlukan bantuan untuk mendapatkan pi tanpa kepala untuk menyambung ke wifi rumah anda dan mengaktifkan ssh, terdapat banyak tutorial dalam talian yang dapat menunjukkan cara melakukannya, tetapi anda perlu memastikan bahawa anda telah melakukannya selama ini bekerja.

Dengan menggunakan https://pinout.xyz anda boleh menarik kedua papan dan mendapatkan pinout mereka di laman web ini. Papan Blinkt hanya memerlukan 4 sambungan, dan Speaker Phat memerlukan 9.

Ia semestinya kelihatan seperti foto apabila selesai. Sekarang kita perlu menguji bahawa semuanya berjalan lancar.

Langkah 3: Memasang Perisian yang Diperlukan

Setelah kita berhubung, kita perlu memasang perisian yang diperlukan untuk menjalankan papan Blinkt dan Speaker Phat. SSH masuk ke pi, dan anda akan berada di direktori utama. Sila isikan:

curl https://get.pimoroni.com/blinkt | bash

dan setelah selesai, ini:

curl -sS https://get.pimoroni.com/speakerphat | bash

Itu akan memasang semua yang diperlukan untuk kedua-dua papan Pimoroni. Sekiranya anda memasukkan arahan ls, anda akan melihat direktori Pimoroni. Jadi sekarang mari tulis beberapa kod dan uji papan Blinkt.

Langkah 4: Menulis Beberapa Kod dan Mengujinya

Buat direktori yang disebut "skrip" dengan mengetik skrip mkdir dan kami akan menyimpan semua yang kami perlukan untuk dijalankan di sana. Jadi skrip cd untuk memasukkan diri anda ke folder itu.

Sekarang, yang kita mahukan adalah lampu redup merah untuk waktu malam, lampu redup kuning untuk waktu bermain yang tenang, dan lampu hijau yang sedikit lebih terang ketika keluar. Bagi saya, saya mahukan lampu merah dari jam 7:30 petang hingga 6:15 pagi, dan pada pukul 6:15 pagi mereka akan menjadi kuning selama satu jam, dan akhirnya hijau pada pukul 7:15 pagi. Saya juga mahu mereka dimatikan pada pukul 8:30 pagi ketika tidak ada orang yang berada di dalam bilik.

Terdapat dua cara untuk melakukan ini. Yang pertama (cara saya memilih untuk melakukannya) adalah dengan empat skrip yang berbeza, dijalankan dari pekerjaan cron. Cara lain untuk melakukannya, adalah satu skrip, yang merangkumi fungsi waktu yang dijalankan pada permulaan. Saya sebenarnya menulis skrip untuk melakukannya dengan cara pertama, tetapi nampaknya kurang cekap daripada melakukannya berdasarkan cron, jadi saya menukarnya. Sekiranya anda mahukan kaedah "satu skrip", beritahu saya dan saya boleh menghantarnya dalam komen.

Oleh itu, mari kita mulakan dengan skrip merah. Ketik sentuh red.py, kemudian nano red.py. Kemudian masukkan kod berikut.

#! / usr / bin / env python

import blinkt blinkt.set_clear_on_exit (False) blinkt.set_brightness (0.3) blinkt.set_pixel (3, 128, 0, 0) blinkt.set_pixel (4, 128, 0, 0) # set piksel 3 dan 4 ke blinkt.show merah ()

Lakukan perkara yang sama untuk yellow.py dan green.py.

kuning.py:

#! / usr / bin / env python

import blinkt blinkt.set_clear_on_exit (False) blinkt.set_brightness (0.2) blinkt.set_pixel (2, 128, 128, 0) blinkt.set_pixel (3, 128, 128, 0) blinkt.set_pixel (4, 128, 128, 0) blinkt.set_pixel (5, 128, 128, 0) # set piksel 2, 3, 4, dan 5 ke blinkt.show kuning ()

hijau.py:

#! / usr / bin / env python

import blinkt blinkt.set_clear_on_exit (False) blinkt.set_brightness (0.2) blinkt.set_all (0, 128, 0) # tetapkan semua piksel ke blinkt.show hijau ()

Dan akhirnya, kami mahu skrip untuk membersihkan Blinkt apabila tidak diperlukan (lightsout.py):

#! / usr / bin / env python

import blinkt blinkt.set_clear_on_exit (True) blinkt.set_brightness (0.1) blinkt.set_all (0, 0, 0) # tetapkan semua piksel untuk mematikan blinkt.show ()

Itu sahaja. Untuk menguji jenis python red.py dan melihat apakah kedua piksel tengah menyala merah. Kemudian ketik python lightsout.py untuk membersihkannya. Itu sahaja! Seterusnya kita harus menetapkannya di tab cron supaya mereka berjalan ketika kita mahu.

Langkah 5: Menambah Skrip tersebut ke Cron

Di terminal SSH jenis crontab -e

tatal ke hujung fail dan tambahkan baris berikut:

15 6 * * * python /home/pi/scripts/yellow.py15 7 * * * python /home/pi/scripts/green.py 30 8 * * * python /home/pi/scripts/lightsout.py 30 19 * * * python /home/pi/scripts/red.py

Itu menetapkan skrip untuk berjalan pada waktu yang dijelaskan pada langkah sebelumnya, teruskan dan sesuaikan ini agar sesuai dengan keperluan anda.

Itu sahaja untuk cahaya malam! Sangat mudah. Sekarang mari kita beralih ke penyediaan bahagian White Noise dari binaan ini.

Langkah 6: Menguji Speaker Phat

Cara termudah (menurut pendapat saya) untuk menguji Speaker Phat adalah dengan memasang sox dan menjalankan beberapa statik dari baris arahan.

sudo apt-get install sox

Setelah dipasang, kita boleh mencuba beberapa contoh arahan main. Yang ini mesti terdengar seperti ombak.

main -n synth brownnoise synth pinknoise mix synth 0 0 0 10 10 40 trapezium amod 0.1 30

Betapa santai! Ctrl + c akan menghentikannya. Tetapi, apa itu? Terdapat sekumpulan LED di seluruh muka Speaker Phat yang menyala, dan kita tidak boleh mengganggu lampu Blinkt kita. Oleh itu, mari kita matikan.

Untuk melakukan ini, kita perlu mengubah fail /etc/asound.conf dan mengeluarkan plugin meter VU, jadi ia tidak akan cuba menggerakkan LED di tempat pertama. Saya melakukan ini dengan hanya menamakannya. Ketik perintah ini mv /etc/asound.conf /etc/asound.conf.bak Saya dapati ini melalui sedikit Googling, jadi mungkin ada cara yang lebih baik.

Sox berfungsi, dan itu bagus, tetapi saya merancang untuk menggunakan beberapa MP3 yang boleh dilancarkan untuk bahagian bunyi putih pada mesin ini, jadi saya memerlukan pemain lain, lebih baik sesuatu yang sangat ringan. mpg123 adalah apa yang saya selesaikan. Pasang sekarang dengan sudo apt-get install mpg123

Ok, sekarang kita tahu Speaker Phat berfungsi seperti yang diharapkan, masa untuk membina antara muka dan skrip yang sesuai.

Langkah 7: Menyiapkan Pelayan Web Kecil dan Webapp

Flask adalah kerangka web mikro yang ditulis dalam Python. Ini menyediakan semua fungsi yang kita perlukan untuk pelayan laman web (yang akan bertindak sebagai aplikasi). Pasang dengan arahan berikut:

pip3 memasang kelalang

Itu akan memakan masa, jadi tunggu. Setelah selesai, kita perlu membina folder yang perlu kita tarik semasa laman web berjalan, dan folder ini mempunyai nama tertentu. Mari kita mulakan dengan tempat untuk menghoskan laman web. Dari direktori home, buat direktori baru yang disebut www dengan mkdir www. Sekarang cd www ke direktori itu. Di sini kita memerlukan dua lagi direktori, satu dipanggil statik dan satu lagi disebut templat.

Kami juga memerlukan tempat untuk meletakkan MP3 yang boleh dilingkari. Saya membuat direktori di direktori home yang disebut "suara" untuk ini. Saya menemui MP3 saya dengan mencari MP3 whitenoise loopable di Google. Banyak tempat percuma untuk menarik. Saya menggunakan WinSCP untuk memuat naik fail.

Anda mungkin ingin mengujinya dengan perintah omxplayer di bawah bermain dengan bahagian --vol - ### untuk mendail di tingkat kelantangan yang tepat untuk bilik anda. Sekali lagi Ctrl + C akan menghentikan pemain.

Sekarang kita mempunyai semua yang ada, mari kita menulis beberapa ular piton untuk berdiri di laman web apabila pi dimulakan. Kembali ke direktori www dan mulakan fail baru yang dipanggil webapp.py (nano webapp.py) dan masukkan kod berikut

webbapp.py:

#! / usr / bin / ular sawa

dari termos import Flask, render_template, request, redirect import os app = Flask (_ name_) @ app.route ('/') def index (): return render_template ('index.html') @ app.route ('/ rain'), kaedah = ['POST']) def rain (): os.system ("mpg123 -f 8000 --loop -1 ~ / scripts / sound / rain.mp3") pengalihan kembali ('/') @ app.route ('/ gelombang', kaedah = ['POST']) def gelombang (): os.system ("mpg123 -f 20500 --loop -1 ~ / skrip / suara / gelombang.mp3") pengalihan kembali ('/') @ app.route ('/ whitenoise', kaedah = ['POST']) def whitenoise (): os.system ("mpg123 --loop -1 ~ / scripts / sound / whitenoise.mp3") pengalihan kembali (' / ') @ app.route (' / stop ', models = [' POST ']) def stop (): os.system ("killall mpg123") return redirect (' / ') jika _name_ ==' _main_ ': app.run (debug = True, host = '0.0.0.0')

Seperti yang anda lihat webapp ini akan mempunyai 5 halaman, satu untuk indeks, 3 untuk 3 bunyi yang berbeza (gelombang, hujan dan keputihan) dan 1 lagi untuk berhenti. Semua 4 halaman bukan indeks mengarahkan kembali ke indeks ('/') setelah mereka menjalankan perintah yang dihantar ke omxplayer, jadi kami hanya perlu membuat satu index.html, dan tidak ada yang lain. Saya menggunakan killall di sini sebagai fungsi berhenti, kerana saya tidak dapat mencari cara yang lebih baik untuk menghantar perintah "berhenti" ke omxplayer. Sekiranya anda mengetahui cara yang lebih baik untuk melakukan ini, saya ingin mendengarnya!

Sekarang mari kita mengumpulkan index.html.

Langkah 8: Membina Laman Web

Membina Laman Web
Membina Laman Web
Membina Laman Web
Membina Laman Web
Membina Laman Web
Membina Laman Web
Membina Laman Web
Membina Laman Web

Ini adalah gambar yang saya gunakan untuk membina saya, tetapi jangan ragu untuk membuat gambar anda sendiri. Semuanya perlu disimpan dalam folder statik yang kita buat sebelumnya. Fail index.html yang akan kita buat di sini perlu ada di folder templat. Itu sangat penting, jika tidak, tidak ada yang akan berfungsi. Berikut adalah kod untuk index.html saya (sekali lagi, ini hanya html sederhana, jadi ubahlah dengan cara apa pun yang sesuai untuk anda).

Oleh kerana Instructables tidak akan membiarkan saya menghantar HTML mentah, berikut adalah pautan ke fail seperti yang terdapat di Dropbox saya:

www.dropbox.com/s/n5xf2btftk5sz9b/index.ht…

Tetapi sekiranya berlaku, fail HTML hanyalah CSS mewah, dan jadual 2x2 sederhana dengan 4 ikon itu sebagai butang dengan nilai pos seperti:

form action = "/ whitenoise" kaedah = "post"

masukan src = "/ static / whitenoise.png" value = "White Noise"

Semestinya cukup mudah untuk menjadikan diri anda satu.

Langkah terakhir adalah memastikan webapp.py berjalan pada permulaan, sekali lagi, saya melakukan ini dengan menambahkannya ke crontab. Oleh itu, sekali lagi ketik crontab -e dan tambahkan yang berikut hingga akhir:

@reboot python3 /home/pi/www/webapp.py

Kemudian reboot pi, arahkan penyemak imbas pada mesin lain (telefon anda) ke IP pi (paling baik jika anda dapat menjadikannya statik) dan lihat apakah ia berfungsi. Klik butang dan lihat apakah anda mendapat bunyi.

Pada telefon Android anda boleh menandai laman web ke skrin utama anda, itulah yang saya lakukan dengan ini agar ia kelihatan dan terasa seperti aplikasi. Sekiranya anda ingin membuatnya kelihatan "pro" cari atau buat fail.ico yang sesuai dan berikan laman web ikonnya sendiri yang akan muncul di skrin utama telefon anda dan kelihatan lebih seperti aplikasi. Banyak tutorial dalam talian mengenai cara menambahkan ikon (favicon) ke laman web.

Langkah 9: Selesaikan Segalanya untuk Kes

Selesaikan Semuanya ke dalam Kes
Selesaikan Semuanya ke dalam Kes
Selesaikan Semuanya ke dalam Kes
Selesaikan Semuanya ke dalam Kes
Selesaikan Semuanya ke dalam Kes
Selesaikan Semuanya ke dalam Kes

Sekarang semuanya telah diuji dan berfungsi, ada masanya untuk menyelesaikan semuanya.

Saya membina mountoff mount untuk Raspberry Pi Zero menggunakan beberapa plastik sisa yang saya ada di sekitar rumah. Saya kemudian menggerudi beberapa lubang untuk panel USB mikro, dan menggunakan beberapa fail perhiasan yang bersudut. Kabel pelekap panel agak kaku, jadi saya mungkin membeli penyesuai sudut tepat untuk port USB mikro pada Pi pada masa akan datang.

Saya memotong bukaan kecil di bahagian atas casing agar pembesar suara dapat dimainkan dengan menggerudi dua lubang dan menghubungkannya dengan Dremel. Kemudian gerudi lubang di penutup untuk memasang Speaker Phat. Untuk apa yang berharga, setelah mengambil gambar ini saya kembali dan membuat beberapa lubang lagi kerana bunyi itu benar-benar terperangkap di dalam casing itu. Saya memasang Blinkt menggunakan barang-barang dempul poster kerana benda itu tidak mempunyai lubang pemasangan, tetapi dempul itu kelihatan baik, jadi ia akan berjaya.

Langkah 10: Itu sahaja

Itu sahaja!
Itu sahaja!

Pasangkannya dan anda sudah selesai. Inilah tambang yang saya jalankan selepas jam 8 malam. LED hijau pada pi itu sendiri tidak begitu terang kerana foto ini muncul.

Beberapa suntingan kemudian saya buat:

Saya menambah 4 halaman lagi ke fail webapp.py dan index.html. Keempatnya adalah "merah", "kuning", "hijau", dan "mati". Cukup jelas. Saya mahukan kemampuan menukarnya dari hijau kembali ke kuning jika saya dan isteri berasa lebih letih dan tidak mahu diganggu.

@ app.route ('/ red', kaedah = ['POST']) def red (): os.system ("python ~ / scripts / red.py") pengalihan semula ('/')

Pada asasnya 4 kali, menjalankan 4 skrip yang berlainan, kemudian beberapa lagi butang dalam indeks yang memanggil halaman tersebut.

Perubahan yang lain sudah saya perhatikan, tetapi saya menggerudi lebih banyak lubang dan melebarkan bukaan yang ada di sekitar pembesar suara kerana bunyi tidak dapat keluar dari kandang dengan cukup baik.

Sekiranya saya membuat pengubahsuaian tambahan, saya pasti akan kembali ke sini dan menyenaraikannya.

Langkah 11: Tambahan

Setelah membina ini, saya menyedari bahawa saya dan isteri sering meninggalkan telefon kami di tingkat bawah ketika meletakkan anak itu untuk tidur atau tidur. Oleh itu, saya menambah butang tekan seketika ke pin fizikal 36, dan memasukkan kod berikut (saya memanggilnya button.py) untuk dijalankan pada permulaan di rc.local:

#! / usr / bin / env python

import RPi. GPIO sebagai GPIO import time import os import subprocess import re GPIO.setmode (GPIO. BOARD) # Gunakan butang Skema Penomboran Pin Fizikal = 36 # Butang disambungkan ke pin fizikal 16 GPIO.setup (butang, GPIO. IN, pull_up_down = GPIO. PUD_UP) # Buat butang sebagai input, Aktifkan Pull UP Resistor sementara Benar: jika GPIO.input (butang) == 0: # Tunggu butang tekan returnprocess = False # Pada mulanya ditetapkan untuk berbunyi tidak aktif s = subproses. Buka (["ps", "ax"], stdout = subprocess. PIPE) untuk x in s.stdout: if re.search ("mpg123", x): returnprocess = True if returnprocess == False: os.system ("mpg123 --loop -1 /home/pi/scripts/sounds/whitenoise.mp3 & ") os.system (" python /home/pi/scripts/red.py ") lain-lain: os.system (" killall mpg123 ") os.system ("python /home/pi/scripts/lightsout.py")

Seperti yang anda lihat, saya juga beralih ke mpg123 dari omxplayer kerana jauh lebih ringan dan mudah digunakan.

Walau bagaimanapun, atas sebab tertentu ketika saya meletakkan skrip ini di rc.local ia memang dijalankan semasa permulaan tanpa masalah. Tetapi audio benar-benar berombak. Semasa saya menjalankan skrip seperti biasa, dalam dempul, tidak ada masalah seperti itu. Saya mempunyai masa untuk menyelesaikan masalah ini, jadi jika ada yang mempunyai idea, beritahu saya! Terima kasih.

Disyorkan: