Mündəricat:
- Addım 1: Parça siyahısı
- Addım 2: Raspbian yandırın və lövhələri bağlayın
- Addım 3: Lazımi Proqramı Qurmaq
- Addım 4: Bəzi Kodlar Yazın və Test Edin
- Addım 5: Bu Skriptləri Cron -a əlavə edin
- Addım 6: Dinamik Phat -ı sınayın
- Addım 7: Kiçik bir Web Server və Webapp qurmaq
- Addım 8: Veb saytın qurulması
- Addım 9: Hər şeyi bir vəziyyətə yığın
- Addım 10: Budur
- Addım 11: Əlavə
Video: Ağ səs -küylü gecə işığı: 11 addım (şəkillərlə)
2024 Müəllif: John Day | [email protected]. Son dəyişdirildi: 2024-01-30 07:46
Bu, 1 yaşında uşaq üçün Milad üçün hazırladığım bir layihədir. Düzünü desəm, mənim və həyat yoldaşım üçün sağlam bir hədiyyə idi. Veb interfeysi vasitəsi ilə seçilmiş bir çox fərqli səsi səsləndirə bilən və eyni zamanda vaxta görə rəngini dəyişən işıqları özündə birləşdirən ağ səs -küylü maşındır (qırmızı işıqlar yataqda, sarı otaqda oynaya biləcəyiniz deməkdir, yaşıl isə yaxşı deməkdir) çıxmaq). Oğlum vaxt söyləmək üçün çox kiçik olduğundan rəngə əsaslanan gecə işığı həqiqətən yaxşı bir fikir kimi görünürdü.
Həqiqətən asan bir layihədir və kodu artıq yazdığım üçün, bəlkə də çətinlik miqyasında 5 -dən 1 -dir. Səhər tezdən sizi narahat edən körpələriniz varsa, bunları etmək istəyəcəksiniz.
Addım 1: Parça siyahısı
1. Raspberry Pi Zero W
2. Bir növ dava (bunu Amazondan istifadə etdim)
3. Pimoroni -dən Blinkt
4. Pimoroni -dən Dinamik Phat (Ucuz dinamiklərlə başqa bir DAC da istifadə edə bilərsiniz)
Dinamik phat-ı bir araya gətirmək üçün bəzi əsas lehimləmə bacarıqlarına sahib olmalısınız, məhsul səhifəsindəki addım-addım təlimatları olan bir əlaqə var, buna görə də onu yıxa bilməzsiniz.
5. [İSTEĞE BAĞLI] Panel montaj mikro USB kabeli - Adafruit -dən
6. bəzi birləşdirən tellər və ya atlayıcılar
Bu belədir!
Addım 2: Raspbian yandırın və lövhələri bağlayın
Bu quruluş üçün Raspian Stretch lite istifadə edirəm. Bunu sizin üçün işləyən hər hansı bir vasitə ilə microSD -yə yandırın, sonra pi -ni yandırın. Evinizin wifi -yə qoşulmaq və ssh -i aktivləşdirmək üçün başsız bir pi əldə etmək üçün yardıma ehtiyacınız varsa, bunu necə edəcəyinizi göstərə biləcək bir çox dərslik var, ancaq bunun qalan hissəsi üçün bunu etdiyinizə əmin olmalısınız. işləmək.
Http://pinout.xyz istifadə edərək hər iki lövhəni də qaldıra və bu saytda pinoutlarını əldə edə bilərsiniz. Blinkt lövhələri yalnız 4 əlaqə tələb edir və Dinamik Phat 9 -a ehtiyac duyur.
İş bitdikdə fotoşəkilə bənzəməlidir. İndi hər şeyin işlədiyini yoxlamaq lazımdır.
Addım 3: Lazımi Proqramı Qurmaq
Bağlandıqdan sonra Blinkt və Speaker Phat lövhələrini işə salmaq üçün lazım olan proqramı quraşdırmalıyıq. SSH -ni pi -yə daxil edin və özünüzü ev kataloqunda tapa bilərsiniz. Aşağıdakıları daxil edin:
əymək https://get.pimoroni.com/blinkt | bash
və sonra tamamlandıqdan sonra bu:
curl -sS https://get.pimoroni.com/speakerphat | bash
Bu həm Pimoroni lövhələri üçün lazım olan hər şeyi quraşdıracaq. Ls əmrini daxil etsəniz, bir Pimoroni kataloqunu görməlisiniz. İndi bir kod yazaq və Blinkt lövhəsini sınayaq.
Addım 4: Bəzi Kodlar Yazın və Test Edin
Mkdir skriptlərini yazaraq "skriptlər" adlı bir kataloq yaradın və orada çalışmaq üçün lazım olan hər şeyi saxlayacağıq. Özünüzü bu qovluğa daxil etmək üçün cd skriptləri.
İndi, istədiyimiz gecə üçün qırmızı sönük işıqlar, sakit oyun zamanı üçün sarı zəif işıqlar və çıxmaq yaxşı olanda biraz daha parlaq yaşıl işıqlardır. Mənim üçün axşam 19: 30 -dan səhər 6: 15 -ə qədər qırmızı işıqlar istəyirdim və səhər 6: 15 -də bir saat sarı, sonra isə nəhayət səhər 7: 15 -də yaşıl rəngə çevrilərdi. Otaqda kimsənin olmadığı ehtimal olunanda səhər 8.30 -da söndürmələrini də istəyirdim.
Bunun iki yolu var. Birincisi (bunu seçdiyim yol) cron işlərindən çalışan dörd fərqli skriptdir. Başqa bir yol, başlanğıcda işləyən bir zaman funksiyasını ehtiva edən bir skriptdir. Əslində ssenarini əvvəlcə bu şəkildə etmək üçün yazdım, amma bunu cron -a əsaslanmaqdan daha az təsirli görünürdü, buna görə də dəyişdirdim. "Bir skript" metodunu istəyirsinizsə, mənə bildirin və şərhlərdə yerləşdirə bilərəm.
Beləliklə, qırmızı ssenaridən başlayaq. Touch red.py, sonra nano red.py yazın. Sonra aşağıdakı kodu daxil edin.
#!/usr/bin/env python
idxal blinkt blinkt.set_clear_on_exit (Yanlış) blinkt.set_brightness (0.3) blinkt.set_pixel (3, 128, 0, 0) blinkt.set_pixel (4, 128, 0, 0) #3 və 4 pikselləri qırmızı blinkt.show ()
Yellow.py və green.py üçün də eyni şeyi edin.
sarı.py:
#!/usr/bin/env python
idxal 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) #2, 3, 4 və 5 pikselləri sarı blinkt.show () olaraq təyin edir
green.py:
#!/usr/bin/env python
idxal blinkt blinkt.set_clear_on_exit (Yanlış) blinkt.set_brightness (0.2) blinkt.set_all (0, 128, 0) #bütün pikselləri yaşıl blinkt.show () olaraq təyin edir
Və nəhayət, lazım olmadıqda Blinkt'i təmizləmək üçün bir skript istəyirik (lightsout.py):
#!/usr/bin/env python
idxal blinkt blinkt.set_clear_on_exit (True) blinkt.set_brightness (0.1) blinkt.set_all (0, 0, 0) #bütün pikselləri blinkt.show () söndürəcək
Bu belədir. Python red.py yazın və iki orta pikselin qırmızı rəngdə yandığını yoxlayın. Sonra təmizləmək üçün python lightsout.py yazın. Bu belədir! Sonra bunları cron sekmesinde qurmalıyıq ki, istədiyimiz anda işləsinlər.
Addım 5: Bu Skriptləri Cron -a əlavə edin
SSH terminalında crontab -e yazın
faylın sonuna gedin və aşağıdakı sətirləri əlavə edin:
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
Bu, skriptləri əvvəlki addımda təsvir olunan vaxtlarda işləməyə qurur, davam edin və bunları ehtiyaclarınıza uyğunlaşdırın.
Gecə işığı üçün budur! Super asan. İndi bu quruluşun Ağ Səs hissəsini qurmağa davam edək.
Addım 6: Dinamik Phat -ı sınayın
Speaker Phat -ı sınamağın ən asan yolu, sox quraşdırmaq və əmr satırından bir az statik işlətməkdir.
sudo apt-get sox quraşdırın
Quraşdırıldıqdan sonra bəzi nümunə oyun əmrlərini sınaya bilərik. Bu dalğalar kimi səslənməlidir.
play -n synth brownnoise synth pinknoise mix synth 0 0 0 10 10 40 trapezium amod 0.1 30
Nə qədər rahatdır! Ctrl+c onu dayandıracaq. Amma, bu nədir? Hoparlör Phat -ın qarşısında işıq saçan bir çox LED var və Blinkt işıqlarımıza müdaxilə edə bilmərik. Odur ki, bunları söndürək.
Bunu etmək üçün /etc/asound.conf faylını dəyişdirməliyik və VU sayğac plaginini çıxarmalıyıq, buna görə də LEDləri ilk növbədə idarə etməyə çalışmayacağıq. Sadəcə adını dəyişərək bunu etdim. Bu əmri yazın mv /etc/asound.conf /etc/asound.conf.bak Bunu bir az Googling vasitəsi ilə tapdım, buna görə daha yaxşı bir yol ola bilər.
Sox işləyir və bu əladır, amma bu maşının ağ səs-küy hissəsi üçün bir neçə döngəli MP3 istifadə etməyi planlaşdırdım, buna görə fərqli bir pleyerə, tercihen həqiqətən yüngül bir şeyə ehtiyacım var idi. mpg123 qərar verdiyim şeydir. Bunu indi sudo apt-get install mpg123 ilə quraşdırın
Tamam, indi Dinamik Phat'ın gözlənildiyi kimi işlədiyini bildiyimiz üçün, interfeysi və uyğun skriptləri qurmağın vaxtı gəldi.
Addım 7: Kiçik bir Web Server və Webapp qurmaq
Flask, Pythonda yazılmış bir mikro veb çərçivəsidir. Veb serveri üçün lazım olan bütün funksiyaları təmin edir (tətbiq kimi fəaliyyət göstərəcək). Aşağıdakı əmrlə quraşdırın:
pip3 qabı quraşdırın
Bu bir az vaxt aparacaq, buna görə gözləyin. Tamamlandıqdan sonra veb sayt işləyərkən çəkməli olduğumuz qovluqları qurmalıyıq və bu qovluqların xüsusi adları var. Veb saytı yerləşdirmək üçün bir yerdən başlayaq. Ev kataloqundan mkdir www ilə www adlı yeni bir kataloq yaradın. İndi cd www bu qovluğa daxil olun. Burada biri statik, digəri şablon adlanan daha iki qovluğa ehtiyacımız var.
Döngələnə bilən MP3 -lərimizi yerləşdirmək üçün bir yerə də ehtiyacımız var. Bunun üçün ev qovluğunda "səslər" adlı bir kataloq hazırladım. MP3 -lərimi Google -da dönə bilən ağardıcı MP3 -lər axtarıb tapdım. Çəkmək üçün bir çox pulsuz yer. Faylları yükləmək üçün WinSCP -dən istifadə etdim.
Otağınız üçün doğru səs səviyyəsini yığmaq üçün --vol -### hissəsi ilə oynayan aşağıdakı omxplayer əmri ilə onları sınamaq istəyə bilərsiniz. Yenə Ctrl+C oyunçunu dayandıracaq.
Hamısı yerində olduğunda, pi başladıqda veb serverini ayağa qaldırmaq üçün bir az python yazaq. Www qovluğuna qayıdın və webapp.py (nano webapp.py) adlı yeni bir fayl başladın və aşağıdakı kodu daxil edin.
webbapp.py:
#!/usr/bin/python
balon idxalından Şüşə, render_template, istək, id tətbiqini yönləndirmək os app = Flask (_ name_) @app.route ('/') def index (): return render_template ('index.html') @app.route ('/rain'), üsullar = ['POST']) def rain (): os.system ("mpg123 -f 8000 --loop -1 ~/scripts/sounds/rain.mp3") geri yönləndirmə ('/') @app.route ('/dalğalar', üsullar = ['POST']) def dalğaları (): os.system ("mpg123 -f 20500 --loop -1 ~/scripts/sounds/Dalgalar.mp3") geri yönləndirmə ('/') @app.route ('/whitenoise', üsullar = ['POST']) def whitenoise (): os.system ("mpg123 --loop -1 ~/scripts/sounds/whitenoise.mp3") geri yönləndirmə (' /') @app.route ('/stop ', üsullar = [' POST ']) def stop (): os.system ("killall mpg123") geri yönlendirme ('/') _name_ ==' _main_ 'olarsa: app.run (debug = Doğru, host = '0.0.0.0')
Gördüyünüz kimi, bu webappın 5 səhifəsi olacaq, biri indeks üçün, 3 fərqli səs üçün 3 (dalğa, yağış və ağardıcı) və 1 səhifəni dayandırmaq üçün. Bütün 4 indeks olmayan səhifələr, omxplayer-ə göndərilən əmri yerinə yetirdikdən sonra indeksə ('/') yönləndirirlər, buna görə yalnız bir index.html yaratmalıyıq, başqa heç nə. Burada killall -ı dayanma funksiyası kimi istifadə edirəm, çünki omxplayerə "stop" əmri göndərmək üçün daha yaxşı bir yol tapa bilmədim. Bunun daha yaxşı bir yolunu bilirsinizsə, eşitmək istərdim!
İndi index.html -ni bir araya gətirək.
Addım 8: Veb saytın qurulması
Bunlar qurmaq üçün istifadə etdiyim şəkillərdir, ancaq özünüz etməkdən çəkinməyin. Hamısını əvvəllər hazırladığımız statik qovluqda saxlamaq lazımdır. Burada hazırlayacağımız index.html faylının şablonlar qovluğunda olması lazımdır. Bu olduqca vacibdir, əks halda heç biri işləməyəcək. Budur index.html kodum (yenə də bu sadəcə html -dir, buna görə də sizin üçün işləyən şəkildə dəyişdirin).
Instructables, xam HTML göndərməyimə icazə vermədiyindən, Dropbox -da olduğu kimi burada faylın bir bağlantısı var:
www.dropbox.com/s/n5xf2btftk5sz9b/index.ht…
Ancaq heç bir halda ölməsə, HTML faylı bir az xülya CSS -dir və bu kimi işarələri olan düymələr kimi bu 4 nişanı olan sadə 2x2 cədvəldir:
forma hərəkəti = "/whitenoise" metodu = "yazı"
giriş src = "/static/whitenoise.png" value = "Ağ səs -küy"
Özünüzü etmək olduqca asan olmalıdır.
Son addım webapp.py -nin başlanğıcda işlədiyindən əmin olmaqdır, yenə də bunu crontab -a əlavə edərək etdim. Bir daha crontab -e yazın və sonuna aşağıdakıları əlavə edin:
@reboot python3 /home/pi/www/webapp.py
Sonra pi -ni yenidən başladın, başqa bir maşında (telefonunuzda) bir brauzeri pi -nin IP -yə göstərin (bunu statik edə bilsəniz yaxşı olar) və işlədiyinə baxın. Düymələri vurun və səs -küyün olub olmadığını görün.
Bir Android telefonda bir veb saytı ana ekranınıza əlavə edə bilərsiniz, bu da bir tətbiq kimi görünməsini və hiss olunmasını təmin etmək üçün etdiyim işdir. Həqiqətən "pro" kimi baxmaq istəyirsinizsə, uyğun bir.ico faylını tapın və ya yaradın və veb saytına telefonunuzun ana ekranında görünəcək və daha çox tətbiqə bənzəyən öz simvolunu verin. Bir veb saytına bir nişan (favicon) əlavə etmək üçün bir çox onlayn dərslər.
Addım 9: Hər şeyi bir vəziyyətə yığın
İndi hər şey sınaqdan keçirildiyindən və işlədiyindən, hər şeyi bir vəziyyətə salmağın vaxtı gəldi.
Evin ətrafındakı plastikdən istifadə edərək Raspberry Pi Zero üçün dayaq qurdum. Daha sonra panelə yerləşdirilən mikro USB üçün bir neçə deşik açdım və bəzi zərgər sənədlərindən istifadə edərək çuxurdan çıxardım. Panel montaj kabeli bir qədər sərtdir, buna görə də gələcəkdə Pi -dəki mikro USB portu üçün düz bucaqlı adapter ala bilərəm.
Kassanın yuxarısında iki delik açaraq Dremel ilə bağlayaraq dinamikin çıxış etməsi üçün kiçik bir açılış kəsdim. Daha sonra Dinamik Phat -ı quraşdırmaq üçün qapaqdakı deliklər qazıldı. Dəyərinə görə, bu fotoşəkili çəkdikdən sonra geri qayıtdım və bir neçə deşik açdım, çünki səs -küy həqiqətən də korpusun içərisində sıxışırdı. Blinkt -i o plakat macunu ilə istifadə etdim, çünki əşyanın heç bir montaj çuxuru yoxdur, amma macun yaxşı tutur, buna görə də belə olacaq.
Addım 10: Budur
Qoşun və bitirdiniz. Budur mənim işim yalnız axşam 8 -dən sonra. Pi üzərindəki yaşıl LED, bu fotoşəkildə göründüyü qədər parlaq deyil.
Sonradan düzəltdiklərim:
Webapp.py və index.html fayllarına daha 4 səhifə əlavə etdim. Bu 4 nəfər "qırmızı", "sarı", "yaşıl" və "sönmüş" olur. Olduqca özünü izah edən. Həyat yoldaşımla çox yorğun hiss etsək və narahat olmaq istəməsək, onu yaşıldan sarıya dəyişə bilmək istədim.
@app.route ('/red', üsullar = ['POST']) def red (): os.system ("python ~/scripts/red.py") geri yönləndirmə ('/')
Əsasən 4 dəfə, 4 fərqli skript işləyərək, o səhifələri çağıran indeksdəki bir neçə düymə.
Qeyd etdiyim digər dəyişiklik, amma səs -küyün kifayət qədər yaxşı çıxmadığı üçün daha bir neçə deşik açdım və dinamikin ətrafındakı mövcud açılışı genişləndirdim.
Əlavə dəyişikliklər etsəm, bura qayıdıb siyahıya salacağımdan əminəm.
Addım 11: Əlavə
Bu binanı qurduqdan sonra anladım ki, uşağımı yatağa və ya yatmağa qoyanda həyat yoldaşımla tez -tez telefonlarımızı aşağıya qoyuruq. Beləliklə, fiziki pin 36 -a bir anlıq düyməni əlavə etdim və rc.local -da işə salmaq üçün aşağıdakı kodu daxil etdim (buna button.py dedim):
#!/usr/bin/env python
RPi. GPIO -nu GPIO olaraq idxal edin idxal alt prosesini idxal edin GPIO.setmode (GPIO. BOARD) # Fiziki Pin Nömrələmə Sxemindən istifadə edin düyməsi = 36 # Düymə fiziki pin 16 GPIO.setup -a bağlıdır (düymə, GPIO. IN, pull_up_down = GPIO. PUD_UP) # Düyməni bir giriş halına gətirin, Doğru halda Çəkmə Direncini Aktiv edin: GPIO.input (düymə) == 0: # düyməni basıb saxlayın returnprocess = False # Başlanğıcda səssiz olaraq söndürüldü s = subprocess. Popen (s. --loop -1 /home/pi/scripts/sounds/whitenoise.mp3 & ") os.system (" python /home/pi/scripts/red.py ") başqa: os.system (" killall mpg123 ") os.sistem ("python /home/pi/scripts/lightsout.py")
Gördüyünüz kimi, omxplayer -dən mpg123 -ə keçdim, çünki daha yüngül və istifadəsi asandır.
Ancaq nədənsə bu skripti rc.local -a qoyduğumda, həqiqətən də heç bir problem olmadan başlanğıcda işləyir. Ancaq səs həqiqətən çox dalğalıdır. Ssenarini normal olaraq işlədərkən, macun içərisində belə bir problem yoxdur. Bu problemi həll etmək üçün vaxtım var, buna görə hər hansı bir fikir varsa, mənə bildirin! Təşəkkürlər.
Tövsiyə:
Gecə İşığı Hərəkəti və Qaranlıq Algılama - Mikro: 7 addım (şəkillərlə)
Gecə İşığı Hərəkəti və Qaranlıq Algılama - Mikro Yoxdur: Bu təlimat qaranlıq bir otaqda gəzərkən barmağınızı sancmağınızın qarşısını almaq üçündür. Gecələr ayağa qalxıb təhlükəsiz şəkildə qapıya çatmağa çalışsanız bunun öz təhlükəsizliyiniz üçün olduğunu söyləyə bilərsiniz. Əlbəttə ki, bir yataq lampası və ya əsas lampadan istifadə edə bilərsiniz
Pooh Bear & Friends Gecə İşığı: 5 addım (şəkillərlə)
Pooh Bear & Friends Gecə İşığı: Növbəti gecə işığı ATTiny85 quraşdırılmış səthdən istifadə etməklə yaradılmışdır. Biri açmaq və söndürmək üçün, digəri seçilmiş işıqlandırma ardıcıllığında dayandırmaq üçün iki düyməyə malikdir. Fasilə əsl bir fasilə deyil, sadəcə əlaqəni kəsir
Əl Gecə İşığı: 7 addım (şəkillərlə)
Əl Gecə İşığı: 5 yaşlı uşağım bizi gecələr oyandırırdı və ananın və atanın yuxuya getməsinə icazə verdiyini söyləyirdik, anladım ki, əslində yuxu vaxtı və ya oyun olub olmadığını müəyyən edə bilmir. time.Plus, işığı yandırmağımızı xahiş edərdi
ESP8266 ilə Avtomatik IoT Koridor Gecə İşığı: 4 Addım (Şəkillərlə)
ESP8266 ilə Avtomatik IoT Koridor Gecə İşığı: Bu proyektə başqa bir təlimat verən yazıdan bir pilləkən işığından ilham alaraq başladım. Dövrün beyni ESP8266 istifadə edir, yəni bir IoT cihazı gələcək
Steampunked Dream Guardian Gecə İşığı: 9 Addım (Şəkillərlə birlikdə)
Steampunked Dream Guardian Gecə İşığı: Hamıya salam Bir yaxın dostum bir neçə həftə əvvəl sevgilisi üçün nişan hədiyyəsi (əlbəttə üzükdən başqa!) Yaratmağımı istədi. Hər ikisi də mənim kimiyəm, könüllü yanğınsöndürənlərdir və Steampunk Objects -i sevirlər. Dostum bir məktəb haqqında düşündü