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, Studeni
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 suprugu. To je stroj za bijelu buku koji 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 jako 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, htjet ćete je napraviti.

Korak 1: Popis dijelova

Popis dijelova
Popis dijelova
Popis dijelova
Popis dijelova
Popis dijelova
Popis dijelova

1. Malina Pi Zero W

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

3. Blinkt iz Pimoronija

4. Zvučnik Phat iz Pimoronija (Također biste mogli koristiti neki drugi DAC s 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. [DODATNO] Mikro USB kabel za montiranje na ploču - iz Adafruit -a

6. neke spojne žice ili kratkospojnike

To je to!

Korak 2: Zapalite Raspbian i spojite ploče

Spalite Raspbian i spojite ploče
Spalite Raspbian i spojite ploče

Za ovu gradnju 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 s WiFi -jem vašeg doma i omogućavanjem 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 isječke na ovoj web stranici. Blinkt ploče zahtijevaju samo 4 veze, a zvučniku Phat 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 ploča Blinkt i Speaker Phat. SSH u pi, i naći ćete se u kućnom imeniku. Unesite sljedeće:

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

i onda kad 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: Napišite neki kod i isprobajte ga

Napravite direktorij pod nazivom "scripts" upisivanjem mkdir scripts i tamo ćemo zadržati sve što nam je potrebno za pokretanje. Dakle, cd skripte za ulazak 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 sati, a u 6:15 ujutro bi žutili sat vremena, a zatim konačno zeleno u 7:15 ujutro. Također sam želio da se isključe u 8:30 ujutro kada vjerojatno nitko 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 za to je jedna skripta koja uključuje vremensku funkciju koja se pokreće pri pokretanju. Zapravo sam i napisao scenarij da to učinim na taj način, ali djelovao je manje učinkovito nego raditi na temelju crona, pa sam ga uključio. Ako želite metodu "one script", javite mi 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

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

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

yellow.py:

#!/usr/bin/env python

uvoz 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 potreban (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. Za testiranje unesite python red.py i provjerite svijetle li dva srednja piksela 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 svjetlo! Super lako. Pređimo sada na postavljanje dijela bijele buke ove gradnje.

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 naredbenog retka.

sudo apt-get install sox

Nakon što je to instalirano, možemo isprobati neke uzorke naredbi za reprodukciju. Ovaj bi trebao zvučati poput valova.

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. No, što je to? Postoji hrpa LED dioda na prednjoj strani zvučnika Phat koja svijetli i ne možemo dopustiti da to ometa naša svjetla Blinkt. Pa isključimo ih.

Da bismo to učinili, morat ćemo izmijeniti datoteku /etc/asound.conf i ukloniti dodatak za mjerenje VU, tako da uopće neće 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 pronašao kroz malo googlanja pa bi mogao biti bolji način.

Sox radi, i to je sjajno, ali planirao sam upotrijebiti neke MP3-e koji se mogu osloboditi za dio bijele buke ovog stroja, pa mi je trebao drugi player, po mogućnosti nešto stvarno 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 tikvicu

To će potrajati, pa pričekajte. Nakon što dovrši, morat ćemo izgraditi mape koje ćemo morati povući kada se web stranica pokrene, a te mape imaju određene nazive. Počnimo s mjestom za hostiranje web stranice. Iz matičnog imenika napravite novi direktorij zvan www s mkdir www. Sada cd www u taj direktorij. Ovdje nam trebaju 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 to sam napravio direktorij u kućnom direktoriju pod nazivom "zvukovi". Svoje MP3 datoteke pronašao sam tražeći MP3 s bijelom šumom koji se može otkriti na Googleu. Mnogo slobodnih mjesta za povlačenje. Koristio sam WinSCP za postavljanje datoteka.

Možda biste ih htjeli testirati pomoću naredbe omxplayer ispod igrajući se s --vol -### dijelom za biranje odgovarajuće razine glasnoće za vašu sobu. Ponovno Ctrl+C zaustavit će igrača.

Sad kad imamo sve to na mjestu, napisimo neki python koji će ustati web poslužitelj kad 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

from 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š jednu za zaustavljanje. Sve 4 stranice koje nisu indeksirane preusmjeravaju natrag na index ('/') nakon što izvrše naredbu poslanu omxplayeru, stoga moramo 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 i 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 objavljivanje neobrađenog HTML -a, 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 = "Bijeli šum"

Trebalo bi biti prilično lako napraviti sebe takvim.

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

@ponovno pokrenite python3 /home/pi/www/webapp.py

Zatim ponovno pokrenite pi, usmjerite preglednik na drugom stroju (vašem telefonu) prema IP -u 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 stranicu oznakom početnog zaslona, što sam i učinio s njom kako bi izgledala i osjećala se kao aplikacija. Ako zaista želite da izgleda "profesionalno", pronađite ili izradite odgovarajuću.ico datoteku i web stranici dajte vlastitu ikonu koja će se pojaviti na početnom zaslonu vašeg telefona i puno više nalikovati na aplikaciju. Puno internetskih vodiča o tome kako dodati ikonu (favicon) na web stranicu.

Korak 9: Sve spojite u futrolu

Jam Everything in a Case
Jam Everything in a Case
Jam Everything in a Case
Jam Everything in a Case
Jam Everything in a Case
Jam Everything in a Case

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 ostatke plastike koju sam imao po kući. Zatim sam izbušio neke rupe za mikro USB priključak za montažu na ploču i pomoću nekih datoteka za draguljare 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 probiti 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 doista zaglavila u kućištu. Montirao sam Blinkt pomoću tog materijala za lijepljenje postera jer na njemu nema rupa za pričvršćivanje, ali čini se da se 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. Želio sam mogućnost prebacivanja sa zelenog na žuto ako smo se supruga i ja osjećali dodatno umorno i ne želimo biti uznemireni.

@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.

Druga promjena koju 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čki pin 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 os uvoz potprocesa uvoz ponovni način rada GPIO.set (GPIO. BOARD) # Upotrijebi gumb Shema numeriranja numeričkih PIN -ova = 36 # Gumb je spojen na fizički pin 16 GPIO.setup (gumb, GPIO. IN, pull_up_down = GPIO. PUD_UP) # Učinite tipku ulazom, Aktivirajte pull -up otpornik dok je True: ako je GPIO.input (gumb) == 0: # Pričekajte da gumb pritisne returnprocess = False # U početku je zvuk isključen s = podproces. Otvorite (["ps", "sjekira"], 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đer sam prešao na mpg123 s omxplayera jer je mnogo lakši i jednostavniji za upotrebu.

U svakom slučaju, iz nekog razloga kad stavim ovu skriptu u rc.local, ona se doista pokreće pri pokretanju bez ikakvih problema. No, zvuk je stvarno jako isprekidan. Kad pokrenem skriptu kao normalno, u kitu, nema takvih problema. Imam vremena za rješavanje problema, pa ako netko ima bilo kakvu ideju, neka mi se javi! Hvala.

Preporučeni: