Mündəricat:

Ağ səs -küylü gecə işığı: 11 addım (şəkillərlə)
Ağ səs -küylü gecə işığı: 11 addım (şəkillərlə)

Video: Ağ səs -küylü gecə işığı: 11 addım (şəkillərlə)

Video: Ağ səs -küylü gecə işığı: 11 addım (şəkillərlə)
Video: DUFU TAHIR BIYABIRCILIQ 😱😱 2024, Iyul
Anonim
Ağ səs -küylü gecə işığı
Ağ səs -küylü gecə işığı
Ağ səs -küylü gecə işığı
Ağ səs -küylü gecə işığı

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ı

Parça siyahısı
Parça siyahısı
Parça siyahısı
Parça siyahısı
Parça siyahısı
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

Raspbian yandırın və lövhələri bağlayın
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ı

Veb saytın qurulması
Veb saytın qurulması
Veb saytın qurulması
Veb saytın qurulması
Veb saytın qurulması
Veb saytın qurulması
Veb saytın qurulması
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

Hər şeyi bir davaya yığın
Hər şeyi bir davaya yığın
Hər şeyi bir davaya yığın
Hər şeyi bir davaya yığın
Hər şeyi bir vəziyyətdə yığın
Hər şeyi bir vəziyyətdə 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

Bu belədir!
Bu belədir!

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ə: