Sadržaj:

Noćno svjetlo s bijelom bukom: 11 koraka (sa slikama)
Noćno svjetlo s bijelom bukom: 11 koraka (sa slikama)

Video: Noćno svjetlo s bijelom bukom: 11 koraka (sa slikama)

Video: Noćno svjetlo s bijelom bukom: 11 koraka (sa slikama)
Video: Ako imate iPhone, OVO MORATE ISPROBATI! 2024, Novembar
Anonim
Noćno svjetlo s bijelom bukom
Noćno svjetlo s bijelom bukom
Noćno svjetlo s bijelom bukom
Noćno svjetlo s bijelom bukom

Ovo je projekt koji sam napravio za svoje jednogodišnje dijete za Božić. Iskreno, to je bio zdrav razum za mene i moju ženu. To je mašina za bijelu buku koja može reproducirati više različitih zvukova odabranih putem web sučelja, a također uključuje svjetla koja mijenjaju boju ovisno o vremenu (crveno svjetlo znači biti u krevetu, žuto znači da se možete igrati u svojoj sobi, a zeleno znači da je u redu izaći). Budući da je moj sin premlad da bi mjerio vrijeme, noćno svjetlo u boji činilo se kao zaista dobra ideja.

To je zaista jednostavan projekt, a budući da sam već napisao kod, možda je 1 od 5 na ljestvici težine. Ako imate malu djecu koja vam smetaju prerano ujutro, poželjet ćete je napraviti.

Korak 1: Lista dijelova

Lista delova
Lista delova
Lista delova
Lista delova
Lista delova
Lista delova

1. Raspberry Pi Zero W

2. Neka vrsta futrole (koristila sam ovu sa Amazona)

3. Blinkt iz Pimoronija

4. Zvučnik Phat iz Pimoronija (Možete koristiti i neki drugi DAC sa jeftinim zvučnicima)

Morat ćete imati neke osnovne vještine lemljenja za sastavljanje zvučnika, postoji veza sa korak-po-korak uputama sa stranice proizvoda, tako da to ne možete zeznuti.

5. [OPCIONALNO] Mikro USB kabl za montiranje na ploču - od Adafruit -a

6. neke spojne žice ili kratkospojnike

To je to!

Korak 2: Zapalite Raspbian i spojite ploče

Zapalite Raspbian i spojite ploče
Zapalite Raspbian i spojite ploče

Za ovu verziju koristim Raspian Stretch lite. Pa narežite to na microSD s bilo kojim alatom koji vam odgovara, a zatim pokrenite pi. Ako vam je potrebna pomoć pri povezivanju pi bez glave za povezivanje na WiFi vaše kuće i omogućavanje ssh -a, na internetu postoji mnogo vodiča koji vam mogu pokazati kako to učiniti, ali to ćete morati učiniti do kraja ovoga raditi.

Korištenjem https://pinout.xyz možete povući obje ploče i dobiti njihove ispise na ovoj web stranici. Blinkt ploče zahtijevaju samo 4 veze, a zvučniku Phat potrebno je 9.

Kada završi, trebala bi izgledati kao fotografija. Sada moramo provjeriti radi li sve.

Korak 3: Instaliranje potrebnog softvera

Sada kada smo povezani, morat ćemo instalirati softver potreban za pokretanje Blinkt i Speaker Phat ploča. SSH u pi, i naći ćete se u kućnom direktoriju. Unesite sljedeće:

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

i onda kada to završi, ovo:

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

To će instalirati sve potrebno za obje Pimoronijeve ploče. Ako unesete naredbu ls, trebali biste vidjeti Pimoronijev direktorij. Pa sada napišimo neki kod i testirajmo Blinkt ploču.

Korak 4: Pisanje nekog koda i njegovo testiranje

Napravite direktorij pod nazivom "scripts" upisivanjem mkdir scripts i tamo ćemo zadržati sve što nam je potrebno za pokretanje. Dakle, cd skripte da biste ušli u tu mapu.

Ono što želimo su crvena prigušena svjetla za noćno vrijeme, žuta prigušena svjetla za tiho vrijeme igranja i nešto svjetlija zelena svjetla kada je u redu izaći. Za mene sam želio crvena svjetla od 19:30 do 6:15 ujutro, a u 6:15 ujutro bi požutjeli sat vremena, a zatim konačno zeleni u 7:15 ujutro. Također sam želio da se isključe u 8:30 ujutro kada niko vjerojatno neće biti u prostoriji.

Postoje dva načina za to. Prvi (način na koji sam ja to odlučio) je s četiri različite skripte, pokrenute od cron poslova. Drugi način da to učinite je jedna skripta koja uključuje vremensku funkciju koja se pokreće pri pokretanju. Zapravo sam napisao scenarij da to prvo uradim na taj način, ali djelovao je manje efikasno nego raditi na bazi crona, pa sam ga uključio. Ako želite metodu "one script", obavijestite me i mogu je objaviti u komentarima.

Dakle, počnimo s crvenim pismom. Upišite touch red.py, zatim nano red.py. Zatim unesite sljedeći kôd.

#!/usr/bin/env python

uvoz 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) #postavlja piksele 3 i 4 u crveno blinkt.show ())

Učinite isto za yellow.py i green.py.

yellow.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) #postavlja piksele 2, 3, 4 i 5 u žuto blinkt.show ()

green.py:

#!/usr/bin/env python

import blinkt blinkt.set_clear_on_exit (False) blinkt.set_brightness (0.2) blinkt.set_all (0, 128, 0) #postavlja sve piksele na zeleno blinkt.show ()

I na kraju, želimo da skripta očisti Blinkt kada nije potrebna (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) #postavlja sve piksele na isključeno blinkt.show ()

To je to. Da biste testirali tip python red.py i provjerite da li dva srednja piksela svijetle crveno. Zatim upišite python lightsout.py da biste ga očistili. To je to! Zatim ćemo ih morati postaviti na cron karticu tako da rade kad želimo.

Korak 5: Dodavanje tih skripti u Cron

U SSH terminalu unesite crontab -e

pomaknite se do kraja datoteke i dodajte sljedeće retke:

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

To postavlja skripte za izvođenje u vrijeme opisano u prethodnom koraku, nastavite i prilagodite ih svojim potrebama.

To je to za noćno svetlo! Super lako. Pređimo sada na postavljanje dijela bijele buke ove verzije.

Korak 6: Testiranje zvučnika Phat

Najlakši način (po mom mišljenju) da isprobate Speaker Phat je instaliranjem sox -a i pokretanjem neke statičke datoteke iz komandne linije.

sudo apt-get install sox

Kada se to instalira, možemo isprobati neke primjere naredbi za reprodukciju. Ovaj bi trebao zvučati kao valovi.

play -n synth brownnoise synth pinknoise mix synth 0 0 0 10 10 40 trapez amod 0,1 30

Kako opuštajuće! Ctrl+c će ga zaustaviti. Ali, šta je to? Postoji gomila LED dioda na prednjoj strani zvučnika Phat koja svijetli i ne možemo to ometati naša svjetla Blinkt. Pa isključimo ih.

Da bismo to učinili, morat ćemo izmijeniti /etc/asound.conf datoteku i ukloniti dodatak VU mjerača, tako da uopće neće ni pokušati pokrenuti LED diode. To sam učinio jednostavnim preimenovanjem. Upišite ovu naredbu mv /etc/asound.conf /etc/asound.conf.bak Ovo sam otkrio kroz malo Googlanja, pa bi moglo biti boljeg načina.

Sox radi, i to je sjajno, ali planirao sam koristiti neke MP3-e koji se mogu lopirati za dio bijele buke ove mašine, pa mi je trebao drugi player, po mogućnosti nešto zaista lagano. mpg123 je ono na čemu sam se odlučio. Instalirajte to sada pomoću sudo apt-get install mpg123

U redu, sada kada znamo da zvučnik Phat radi kako se očekuje, vrijeme je za izgradnju sučelja i odgovarajućih skripti.

Korak 7: Postavljanje malog web poslužitelja i Webappa

Flask je mikro web okvir napisan na Pythonu. Pruža svu funkcionalnost koja nam je potrebna za web poslužitelj (koji će djelovati kao aplikacija). Instalirajte ga sljedećom naredbom:

pip3 instalirajte bocu

To će potrajati, pa pričekajte. Kada završi, morat ćemo izgraditi mape koje ćemo morati povući kada se web stranica pokrene, a te mape imaju određena imena. Počnimo s mjestom za hostovanje web stranice. Od matičnog direktorija napravite novi direktorij zvan www s mkdir www. Sada cd www u taj direktorij. Ovdje su nam potrebna još dva direktorija, jedan koji se zove statički, a drugi se naziva predlošci.

Također nam je potrebno mjesto za stavljanje naših MP3 zapisa koji se mogu pretraživati. Za ovo sam napravio direktorij u kućnom direktoriju pod nazivom "zvukovi". Pronašao sam svoje MP3 -ove pretragom MP3 -a sa bijelom šumom koji se mogu otkriti na Google -u. Mnogo slobodnih mjesta za povlačenje. Koristio sam WinSCP za postavljanje datoteka.

Možda ćete ih htjeti testirati pomoću naredbe omxplayer ispod igrajući se sa --vol -### dijelom za biranje odgovarajućeg nivoa glasnoće za vašu sobu. Ponovo će Ctrl+C zaustaviti igrača.

Sada kada smo sve to postavili, dozvolite da napišemo neki python da ustane web server kada se pi pokrene. Vratite se u direktorij www i pokrenite novu datoteku pod nazivom webapp.py (nano webapp.py) i umetnite sljedeći kod

webbapp.py:

#!/usr/bin/python

iz flask import Flask, render_template, request, redirect import os app = Flask (_ name_) @app.route ('/') def index (): return render_template ('index.html') @app.route ('/rain'), methods = ['POST']) def rain (): os.system ("mpg123 -f 8000 --loop -1 ~/scripts/sounds/rain.mp3") return redirect ('/') @app.route ('/waves', methods = ['POST']) def waves (): os.system ("mpg123 -f 20500 --loop -1 ~/scripts/sounds/waves.mp3") return redirect ('/') @app.route ('/whitenoise', methods = ['POST']) def whitenoise (): os.system ("mpg123 --loop -1 ~/scripts/sounds/whitenoise.mp3") return redirect (' /') @app.route ('/stop ', methods = [' POST ']) def stop (): os.system ("killall mpg123") return redirect ('/') if _name_ ==' _main_ ': app.run (debug = True, host = '0.0.0.0')

Kao što vidite, ovaj webapp će imati 5 stranica, jednu za indeks, 3 za 3 različita zvuka (val, kiša i bijela buka) i još 1 za zaustavljanje. Sve 4 stranice bez indeksa preusmjeravaju nazad na index ('/') nakon što izvrše naredbu poslanu omxplayeru, tako da trebamo stvoriti samo jedan index.html, i ništa drugo. Ovdje koristim killall kao stop funkciju, jer nisam mogao pronaći bolji način za slanje naredbe "stop" omxplayeru. Ako znate za bolji način da to učinite, volio bih to čuti!

Sada sastavimo index.html.

Korak 8: Izrada web stranice

Izrada web stranice
Izrada web stranice
Izrada web stranice
Izrada web stranice
Izrada web stranice
Izrada web stranice
Izrada web stranice
Izrada web stranice

Ovo su slike koje sam koristio za izradu, ali slobodno ih napravite sami. Sve ih je potrebno spremiti u statičku mapu koju smo ranije napravili. Datoteka index.html koju ćemo ovdje napraviti mora biti u mapi predlošci. To je prilično važno, inače ništa od toga neće uspjeti. Evo koda za moj index.html (opet, ovo je samo jednostavan html, pa ga izmijenite na bilo koji način koji vam odgovara).

Budući da mi Instructables ne dopuštaju da objavljujem neobrađeni HTML, evo veze do datoteke koja postoji na mom Dropboxu:

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

Ali u slučaju da to ikada umre, HTML datoteka je samo neki otmjeni CSS, i jednostavna 2x2 tablica s te 4 ikone kao gumbi s vrijednostima posta ovako:

form action = "/whitenoise" method = "post"

input src = "/static/whitenoise.png" value = "Bijela buka"

Trebalo bi biti prilično lako napraviti sebe.

Zadnji korak je provjeriti da li se webapp.py pokreće pri pokretanju. Ponovo sam to učinio dodavši ga u crontab. Zato još jednom upišite crontab -e i na kraj dodajte sljedeće:

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

Zatim ponovno pokrenite pi, usmjerite preglednik na drugoj mašini (vašem telefonu) na IP pi (najbolje je ako ovo učinite statičnim) i provjerite radi li. Pritisnite gumbe i provjerite čujete li buku.

Na Android telefonu možete označiti web lokaciju na početni ekran, što sam i učinio s ovim kako bi izgledala i osjećala se kao aplikacija. Ako zaista želite da izgleda "profesionalno", pronađite ili stvorite odgovarajuću.ico datoteku i web stranici dajte vlastitu ikonu koja će se pojaviti na početnom ekranu vašeg telefona i više ličiti na aplikaciju. Mnogo vodiča na mreži o tome kako dodati ikonu (favicon) na web stranicu.

Korak 9: Sve spojite u futrolu

Zaglavite sve u futrolu
Zaglavite sve u futrolu
Zaglavite sve u futrolu
Zaglavite sve u futrolu
Zaglavite sve u futrolu
Zaglavite sve u futrolu

Sada kada je sve testirano i radi, vrijeme je da sve to stavite u futrolu.

Napravio sam nosivi nosač za Raspberry Pi Zero koristeći malo preostale plastike koju sam imao po kući. Zatim sam izbušio neke rupe za mikro USB priključak za montiranje na ploču i pomoću nekih draguljarskih datoteka izravnao rupu. Kabel za montažu na ploču je malo krut, pa ću u budućnosti možda kupiti adapter za pravi kut za mikro USB priključak na Pi -u.

Izrezao sam mali otvor na vrhu kućišta kako bi se zvučnik mogao reproducirati tako da izbuši dvije rupe i poveže ih s Dremelom. Zatim izbušite rupe na poklopcu za postavljanje zvučnika Phat. Koliko god vrijedilo, nakon što sam snimio ovu fotografiju vratio sam se i napravio još nekoliko rupa jer se buka zaista zaglavila u kućištu. Montirao sam Blinkt pomoću tog materijala za lepljenje postera jer na njemu nema rupa za pričvršćivanje, ali čini se da kit dobro drži, pa će tako i biti.

Korak 10: To je to

To je to!
To je to!

Uključite ga i gotovi ste. Evo moje trči nešto iza 20 sati. Zelena LED dioda na pi nije tako sjajna kao što izgleda na ovoj fotografiji.

Neka kasnija uređivanja koja sam napravio:

Dodao sam još 4 stranice u datoteke webapp.py i index.html. Ta 4 su "crvena", "žuta", "zelena" i "isključena". Prilično samo po sebi razumljivo. Želeo sam mogućnost da ga prebacim sa zelenog na žuto ako se supruga i ja osećamo dodatno umorno i ne želimo da nas gnjave.

@app.route ('/red', methods = ['POST']) def red (): os.system ("python ~/scripts/red.py") return redirect ('/')

U osnovi to 4 puta, pokretanje 4 različite skripte, zatim još neki gumbi u indeksu koji pozivaju te stranice.

Drugu promjenu sam već primijetio, ali izbušio sam još nekoliko rupa i proširio postojeći otvor oko zvučnika jer buka nije dovoljno dobro izlazila iz kućišta.

Ako napravim dodatne izmjene, svakako ću se vratiti ovdje i navesti ih.

Korak 11: Dodatak

Nakon što sam ovo izgradio, shvatio sam da i moja supruga i ja često ostavljamo telefone dolje kada stavljamo dijete na spavanje ili drijemanje. Tako sam dodao fizičko dugme 36 na trenutak i uključio sljedeći kod (nazvao sam ga button.py) za pokretanje pri pokretanju u rc.local:

#!/usr/bin/env python

uvoz RPi. GPIO kao GPIO Vrijeme uvoza uvoz ili uvoz uvoznog potprocesa u GPIO.setmode (GPIO. BOARD) # Koristi dugme Fizička numerička oznaka kontakata dugme = 36 # Dugme je povezano sa fizičkim pinom 16 GPIO.setup (dugme, GPIO. IN, pull_up_down = GPIO. PUD_UP) # Napravite dugme za unos, Aktivirajte otpor za povlačenje dok je True: ako je GPIO.input (dugme) == 0: # Sačekajte da taster pritisne returnprocess = False # Prvotno podešeno da zvuk bude isključen s = potproces. Popen (["ps", "ax"], stdout = podproces. PIPE) za x u s.stdout: if re.search ("mpg123", x): returnprocess = True ako returnprocess == False: os.system ("mpg123 --loop -1 /home/pi/scripts/sounds/whitenoise.mp3 & ") os.system (" python /home/pi/scripts/red.py ") else: os.system (" killall mpg123 ") os.system ("python /home/pi/scripts/lightsout.py")

Kao što vidite, takođe sam prešao na mpg123 sa omxplayera jer je mnogo lakši i jednostavniji za upotrebu.

U svakom slučaju, iz nekog razloga kada stavim ovu skriptu u rc.local, ona se zaista pokreće pri pokretanju bez ikakvih problema. Ali zvuk je zaista vrlo isprekidan. Kad pokrenem skriptu kao normalno, u kitu, nema takvih problema. Imam problema u rješavanju ovog problema, pa ako neko ima bilo kakvu ideju, neka mi se javi! Hvala.

Preporučuje se: