Cuprins:

Lumina albă de zgomot alb: 11 pași (cu imagini)
Lumina albă de zgomot alb: 11 pași (cu imagini)

Video: Lumina albă de zgomot alb: 11 pași (cu imagini)

Video: Lumina albă de zgomot alb: 11 pași (cu imagini)
Video: Sunetul care te va speria fara sa-ti dai seama 2024, Iulie
Anonim
Lumina albă de zgomot
Lumina albă de zgomot
Lumina albă de zgomot
Lumina albă de zgomot

Acesta este un proiect pe care l-am făcut pentru copilul meu de 1 an de Crăciun. Sincer, totuși, a fost un cadou sănătos pentru mine și soția mea. Este un aparat de zgomot alb care poate reda mai multe sunete diferite selectate printr-o interfață web și, de asemenea, încorporează lumini care își schimbă culoarea în funcție de timp (luminile roșii înseamnă că sunt în pat, galbenul înseamnă că puteți juca în camera dvs., iar verde înseamnă că este ok a ieși afara). Întrucât fiul meu este prea tânăr pentru a-și spune timpul, o lumină de noapte bazată pe culori mi s-a părut o idee foarte bună.

Este un proiect foarte ușor și, din moment ce am scris deja codul, este poate un 1 din 5 pe scara de dificultate. Dacă aveți copii mici care vă deranjează demult prea devreme, veți dori să faceți unul.

Pasul 1: Lista pieselor

Lista de componente
Lista de componente
Lista de componente
Lista de componente
Lista de componente
Lista de componente

1. Raspberry Pi Zero W

2. Un fel de caz (l-am folosit pe acesta de la Amazon)

3. Blinkt din Pimoroni

4. Speaker Phat de la Pimoroni (Ați putea folosi și un alt DAC cu difuzoare ieftine)

Va trebui să aveți câteva abilități de lipire de bază pentru a pune împreună difuzorul, există un link cu instrucțiuni pas cu pas din pagina produsului, astfel încât să nu îl puteți descurca.

5. [OPȚIONAL] Cablu micro USB pentru montare pe panou - de la Adafruit

6. unele fire de conectare sau jumperi

Asta e!

Pasul 2: Ardeți Raspbian și conectați panourile

Ardeți Raspbian și conectați panourile
Ardeți Raspbian și conectați panourile

Folosesc Raspian Stretch lite pentru această versiune. Deci, ardeți asta pe un microSD cu orice instrument funcționează pentru dvs., apoi trageți pi. Dacă aveți nevoie de ajutor pentru a obține un pi fără cap pentru a vă conecta la wifi-ul casei dvs. și pentru a activa ssh, există o mulțime de tutoriale online care vă pot arăta cum să faceți acest lucru, dar va trebui să vă asigurați că ați făcut acest lucru pentru restul a munci.

Folosind https://pinout.xyz puteți extrage ambele plăci și puteți obține pinouturile lor pe acest site. Plăcile Blinkt necesită doar 4 conexiuni, iar Speaker Phat are nevoie de 9.

Ar trebui să arate ca fotografia la final. Acum trebuie să testăm că totul funcționează.

Pasul 3: Instalarea software-ului necesar

Acum că suntem conectați, va trebui să instalăm software-ul necesar pentru a rula plăcile Blinkt și Speaker Phat. SSH în pi, și vă veți găsi în directorul principal. Introduceți următoarele:

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

și apoi, odată ce acest lucru este complet, acesta este:

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

Aceasta va instala tot ce este necesar atât pentru plăcile Pimoroni. Dacă introduceți comanda ls, ar trebui să vedeți un director Pimoroni. Deci, acum să scriem un cod și să testăm placa Blinkt.

Pasul 4: Scrierea unor coduri și testarea acestuia

Creați un director numit „scripturi” tastând scripturile mkdir și vom păstra acolo tot ce avem nevoie pentru a rula. Deci, scripturi CD pentru a intra în acel folder.

Acum, ceea ce ne dorim sunt luminile roșii slabe pentru noapte, luminile galbene slabe pentru timpul de joacă liniștit și luminile verzi ușor mai strălucitoare atunci când este bine să ieșiți. Pentru mine, am vrut lumini roșii de la 19:30 până la 6:15 dimineața, iar la 6:15 am să devină galbene timp de o oră, apoi în cele din urmă verzi la 7:15 dimineața. De asemenea, am vrut să se oprească la 8:30, când nimeni nu era probabil în cameră.

Există două modalități de a face acest lucru. Primul (modul în care am ales să îl fac) este cu patru scripturi diferite, rulate de la joburi cron. Cealaltă modalitate de a face acest lucru este un script, care include o funcție de timp care se execută la pornire. De fapt, am scris scenariul pentru a face acest lucru mai întâi, dar mi s-a părut mai puțin eficient decât să-l fac pe baza cronului, așa că l-am schimbat. Dacă doriți metoda „un singur script”, anunțați-mă și o pot posta în comentarii.

Deci, să începem cu scriptul roșu. Tastați touch red.py, apoi nano red.py. Apoi introduceți următorul cod.

#! / usr / bin / env python

import blinkt blinkt.set_clear_on_exit (Fals) blinkt.set_brightness (0.3) blinkt.set_pixel (3, 128, 0, 0) blinkt.set_pixel (4, 128, 0, 0) #sets pixeli 3 și 4 la roșu blinkt.show ()

Faceți același lucru pentru yellow.py și green.py.

yellow.py:

#! / usr / bin / env python

import blinkt blinkt.set_clear_on_exit (Fals) 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) # setează pixeli 2, 3, 4 și 5 în galben blinkt.show ()

green.py:

#! / usr / bin / env python

import blinkt blinkt.set_clear_on_exit (Fals) blinkt.set_brightness (0.2) blinkt.set_all (0, 128, 0) # setează toți pixelii pe verde blinkt.show ()

Și, în cele din urmă, dorim un script pentru a șterge Blinkt atunci când nu este necesar (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) # setează toți pixelii pe off blinkt.show ()

Asta e. Pentru a testa tastați python red.py și vedeți dacă cei doi pixeli din mijloc se aprind în roșu. Apoi tastați python lightsout.py pentru a-l șterge. Asta e! Apoi va trebui să le setăm pe cele din fila cron, astfel încât acestea să ruleze când vrem.

Pasul 5: Adăugarea acelor scripturi la Cron

În terminalul SSH tastați crontab -e

derulați până la sfârșitul fișierului și adăugați următoarele linii:

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

Aceasta setează scripturile pentru a rula la orele descrise în pasul anterior, continuați și reglați-le pentru a se potrivi nevoilor dvs.

Gata pentru lumina nopții! Super ușor. Acum să trecem la configurarea porțiunii White Noise din această versiune.

Pasul 6: Testarea difuzorului Phat

Cea mai ușoară modalitate (după părerea mea) de a testa Speaker Phat este prin instalarea sox și rularea unor elemente statice de pe linia de comandă.

sudo apt-get install sox

Odată ce este instalat, putem încerca câteva exemple de comenzi de redare. Acesta ar trebui să sune ca undele.

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

Ce relaxant! Ctrl + c îl va opri. Dar ce este asta? Există o grămadă de LED-uri pe fața difuzorului Phat care se aprind și nu putem interfera cu luminile noastre Blinkt. Deci, să le oprim.

Pentru a face acest lucru, va trebui să modificăm fișierul /etc/asound.conf și să eliminăm plugin-ul VU meter, așa că nu va încerca chiar să conducă LED-urile în primul rând. Am făcut acest lucru pur și simplu redenumindu-l. Tastați această comandă mv /etc/asound.conf /etc/asound.conf.bak Am găsit asta printr-un pic de Google, deci ar putea exista o modalitate mai bună.

Sox funcționează, și asta e minunat, dar am planificat să folosesc câteva MP3-uri buclabile pentru partea cu zgomot alb al acestei mașini, așa că am nevoie de un alt player, de preferință ceva foarte ușor. mpg123 este ceea ce m-am stabilit. Instalați-l acum cu sudo apt-get install mpg123

Ok, acum că știm că Speaker Phat funcționează așa cum era de așteptat, este timpul să construim interfața și scripturile corespunzătoare.

Pasul 7: Configurarea unui Webserver mic și a unei aplicații Web

Flask este un micro framework web scris în Python. Oferă toate funcționalitățile de care avem nevoie pentru serverul web (care va acționa ca o aplicație). Instalați-l cu următoarea comandă:

pip3 instalați balonul

Va dura ceva timp, așa că așteaptă-l. Odată ce este complet, va trebui să construim folderele pe care va trebui să le extragem atunci când rulează site-ul web, iar aceste foldere au nume specifice. Să începem cu un loc unde să găzduim site-ul web. Din directorul de start, creați un nou director numit www cu mkdir www. Acum cd www în acel director. Aici avem nevoie de încă două directoare, unul numit static și altul numit șabloane.

Avem nevoie, de asemenea, de un loc unde să punem MP3-urile noastre buclabile. Am făcut un director în directorul de acasă numit „sunete” pentru asta. Mi-am găsit fișierele MP3 căutând pe Google fișiere MP3 buclabile cu buclă. O mulțime de locuri libere din care să te tragi. Am folosit WinSCP pentru a încărca fișierele.

S-ar putea să doriți să le testați cu comanda omxplayer de mai jos jucând cu partea --vol - ### pentru a forma nivelul de volum potrivit pentru camera dvs. Din nou, Ctrl + C va opri jucătorul.

Acum, că îi avem pe toți la locul lor, să scriem niște python pentru a ridica serverul web atunci când pi pornește. Reveniți la directorul www și începeți un nou fișier numit webapp.py (nano webapp.py) și introduceți următorul cod

webbapp.py:

#! / usr / bin / python

din flask import Flask, render_template, request, redirect import os app = Flask (_ name_) @ app.route ('/') def index (): return render_template ('index.html') @ app.route ('/ rain'), metode = ['POST']) def rain (): os.system ("mpg123 -f 8000 --loop -1 ~ / scripts / sounds / rain.mp3") return redirect ('/') @ app.route ('/ onde', metode = ['POST']) def unde (): 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") returnează redirecționarea (' / ') dacă _name_ ==' _main_ ': app.run (depanare = Adevărat, gazdă = '0.0.0.0')

După cum puteți vedea, această aplicație web va avea 5 pagini, una pentru index, 3 pentru 3 sunete diferite (val, ploaie și alb) și încă 1 pentru a opri. Toate cele 4 pagini non-index redirecționează înapoi la index ('/') după ce execută comanda trimisă către omxplayer, deci trebuie doar să creăm un index.html și nimic altceva. Folosesc killall aici ca funcție de oprire, pentru că nu am găsit o modalitate mai bună de a trimite o comandă „oprire” către omxplayer. Dacă știți un mod mai bun de a face acest lucru, mi-ar plăcea să-l aud!

Acum, să punem împreună index.html.

Pasul 8: Construirea site-ului web

Construirea site-ului web
Construirea site-ului web
Construirea site-ului web
Construirea site-ului web
Construirea site-ului web
Construirea site-ului web
Construirea site-ului web
Construirea site-ului web

Acestea sunt imaginile pe care le-am folosit pentru construcția mea, dar simțiți-vă liber să le creați. Toate trebuie salvate în folderul static pe care l-am creat mai devreme. Fișierul index.html pe care îl vom crea aici trebuie să fie în folderul șabloane. Asta este destul de important, altfel, nimic nu va funcționa. Iată codul pentru index.html (din nou, acesta este doar html simplu, deci modificați-l în orice mod funcționează pentru dvs.).

Deoarece Instructables nu mă lasă să postez cod HTML brut, iată un link către fișier, așa cum există în Dropbox:

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

Dar, în caz că moare vreodată, fișierul HTML este doar niște CSS fanteziste și un simplu tabel 2x2 cu acele 4 pictograme ca butoane cu valori de postare așa:

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

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

Ar trebui să fie destul de ușor să te faci unul singur.

Ultimul pas este să mă asigur că webapp.py rulează la pornire, din nou, am făcut acest lucru adăugându-l la crontab. Deci, din nou, tastați crontab -e și adăugați următoarele la final:

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

Apoi reporniți pi, îndreptați un browser pe o altă mașină (telefonul dvs.) către IP-ul pi (cel mai bine dacă puteți face acest static) și vedeți dacă a funcționat. Faceți clic pe butoane și vedeți dacă aveți zgomot.

Pe un telefon Android puteți marca un site web pe ecranul de pornire, ceea ce am făcut cu asta pentru a-l face să arate și să se simtă ca o aplicație. Dacă doriți să faceți să pară „pro” cu adevărat, găsiți sau creați un fișier.ico adecvat și dați site-ului web propria pictogramă care va apărea pe ecranul de pornire al telefonului dvs. și va arăta mult mai mult ca o aplicație. O mulțime de tutoriale online despre cum să adăugați o pictogramă (favicon) la un site web.

Pasul 9: Blocați totul într-un caz

Blocați totul într-un caz
Blocați totul într-un caz
Blocați totul într-un caz
Blocați totul într-un caz
Blocați totul într-un caz
Blocați totul într-un caz

Acum, că totul a fost testat și funcționează, este timpul să le aranjăm totul într-un caz.

Am construit un suport pentru Raspberry Pi Zero folosind resturi de plastic pe care le aveam prin casă. Apoi am forat câteva găuri pentru montarea pe panou a micro USB și, folosind niște fișiere de bijuterii, pătrate de gaură. Cablul de montare a panoului este puțin rigid, așa că aș putea cumpăra un adaptor cu unghi drept pentru portul micro USB de pe Pi, în viitor.

Am tăiat o mică deschidere în partea superioară a carcasei pentru ca difuzorul să poată juca prin găurirea a două găuri și conectarea lor cu un Dremel. Apoi, găuriți capacul pentru a monta difuzorul Phat. Pentru ceea ce merită, după ce am făcut această fotografie, m-am întors și am mai făcut câteva găuri, deoarece zgomotul era cu adevărat prins în interiorul carcasei. Am montat Blinkt folosind chestii de chit cu afiș, deoarece lucrul nu are găuri de montare, dar chitul pare să se țină bine, așa că va merge.

Pasul 10: Asta e

Asta e!
Asta e!

Conectați-l și ați terminat. Iată-l pe al meu care rulează imediat după ora 20:00. LED-ul verde de pe pi în sine nu este la fel de luminos pe cât o face această fotografie.

Am făcut câteva modificări ulterioare:

Am adăugat încă 4 pagini în fișierele webapp.py și index.html. Cele 4 fiind „roșii”, „galbene”, „verzi” și „dezactivate”. Destul de auto-explicativ. Mi-am dorit capacitatea de a-l schimba de la verde la galben, dacă eu și soția ne simțeam foarte obosiți și nu doream să fim deranjați.

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

Practic de 4 ori, rulând cele 4 scripturi diferite, apoi încă câteva butoane din index care apelează acele pagini.

Cealaltă modificare am observat-o deja, dar am mai făcut câteva găuri și am lărgit deschiderea existentă în jurul difuzorului, deoarece zgomotul nu scăpa suficient de bine din incintă.

Dacă fac modificări suplimentare, voi fi sigur că revin aici și le voi lista.

Pasul 11: Addendum

După ce am construit acest lucru, mi-am dat seama că amândoi, soția mea, ne lăsăm frecvent telefoanele jos când punem copilul la culcare sau la pui de somn. Așa că am adăugat un buton momentan la pinul fizic 36 și am inclus următorul cod (l-am numit button.py) pentru a rula la pornire în rc.local:

#! / usr / bin / env python

import RPi. GPIO ca timp de import GPIO import import subproces import re GPIO.setmode (GPIO. BOARD) # Utilizați butonul Schemă de numerotare a pinului fizic = 36 # Butonul este conectat la pinul fizic 16 GPIO.setup (buton, GPIO. IN, pull_up_down = GPIO. PUD_UP) # Faceți butonul o intrare, activați rezistența Pull UP în timp ce este adevărat: dacă GPIO.input (buton) == 0: # Așteptați butonul apăsați returnprocess = False # Setați inițial să sune dezactivat s = subproces. Popen (["ps", "ax"], stdout = subprocess. PIPE) pentru x în 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 ") else: os.system (" killall mpg123 ") os.system („python /home/pi/scripts/lightsout.py”)

După cum puteți vedea, am trecut și la mpg123 de la omxplayer, deoarece este mult mai ușor și mai simplu de utilizat.

Oricum, dintr-un anumit motiv, când am pus acest script în rc.local, acesta rulează într-adevăr la pornire fără probleme. Dar sunetul este într-adevăr foarte agitat. Când rulez scriptul în mod normal, în chit, nu există astfel de probleme. Am o problemă de depanare, așa că, dacă cineva are idei, vă rog să-mi spuneți! Mulțumiri.

Recomandat: