- Potrebni materijali
- Senzor zvuka radi
- Mjerenje audio frekvencije na osciloskopu
- Shema kruga detektora zvižduka Arduino
- Mjerenje frekvencije s Arduinom
- Programiranje vašeg Arduina za otkrivanje zviždaljke
- Arduino detektor zviždaljki radi
Kao dijete bio sam fasciniran glazbenim automobilom koji se aktivira kad pljesnete rukama, a onda sam odrastao i pitao se možemo li isti koristiti za prebacivanje svjetla i ventilatora u našem domu. Bilo bi fora samo upaliti svoje ventilatore i svjetla samo pljeskajući rukama umjesto da lijeno odšetam do preklopne ploče. Ali često bi se pokvario jer će ovaj krug reagirati na bilo kakav glasan zvuk u okolini, poput glasnog radija ili kosilice mog susjeda. Iako je izgradnja pljeskalice također zabavan projekt.
Tada sam naišao na ovu metodu otkrivanja zviždaljki u kojoj će krug detektirati zvižduke. Zvižduk će za razliku od ostalih zvukova imati jednoliku frekvenciju za određeno trajanje i stoga se može razlikovati od govora ili glazbe. Dakle, u ovom uputstvu naučit ćemo kako otkriti zvuk zviždaljke povezivanjem senzora zvuka s Arduinom, a kada se detektira zvižduk, prebacivat ćemo AC lampu kroz relej. Usput ćemo također naučiti kako mikrofon prima zvučne signale i kako mjeriti frekvenciju pomoću Arduina. Zvuči zanimljivo, pa krenimo s Projektom automatizacije kuće zasnovan na Arduinu.
Potrebni materijali
- Arduino UNO
- Modul osjetnika zvuka
- Modul releja
- AC lampa
- Spajanje žica
- Breadboard
Senzor zvuka radi
Prije nego što zaronimo u hardversku vezu i kod za ovaj Projekt automatizacije kuće, pogledajmo senzor zvuka. Zvučni senzor korišten u ovom modulu prikazan je u nastavku. Princip rada većine zvučnih senzora dostupnih na tržištu sličan je ovome, iako bi se izgled mogao malo promijeniti.

Kao što znamo, primitivna komponenta senzora zvuka je mikrofon. Mikrofon je vrsta pretvarača koji pretvara zvučne valove (akustičnu energiju) u električnu energiju. U osnovi dijafragma unutar mikrofona vibrira prema zvučnim valovima u atmosferi koji proizvode električni signal na svom izlaznom pinu. Ali ti će signali biti vrlo male veličine (mV) i stoga ih mikrokontroler poput Arduina ne može izravno obraditi. Također su prema zadanim postavkama zvučni signali analogne prirode, stoga će izlaz iz mikrofona biti sinusni val s promjenjivom frekvencijom, ali mikrokontroleri su digitalni uređaji i stoga bolje rade s kvadratnim valom.

Da bi pojačao ove sinusne valove slabog signala i pretvorio ih u kvadratne valove, modul koristi ugrađeni modul za usporedbu LM393, kako je prikazano gore. Niskonaponski audio izlaz iz mikrofona napaja se na jedan pin komparatora preko pojačala tranzistora, dok se referentni napon postavlja na drugi pin pomoću kruga djelitelja napona koji uključuje potenciometar. Kada izlazni audio napon iz mikrofona premaši unaprijed zadani napon, komparator postaje visok s 5 V (radni napon), u suprotnom komparater ostaje nizak na 0 V. Na ovaj način sinusni val niskog signala može se pretvoriti u kvadratni val visokog napona (5V). Snimka osciloskopa ispod pokazuje isto gdje je žuti val sinusni val slabog signala, a plavi na izlaznom kvadratnom valu. Theosjetljivost se može kontrolirati promjenom potenciometra na modulu.

Mjerenje audio frekvencije na osciloskopu
Ovaj modul zvučnog senzora pretvorit će zvučne valove u atmosferi u kvadratne valove čija će frekvencija biti jednaka frekvenciji zvučnih valova. Dakle, mjerenjem frekvencije kvadratnog vala možemo pronaći frekvenciju zvučnih signala u atmosferi. Kako bih bio siguran da stvari funkcioniraju onako kako pretpostavljam, spojio sam senzor zvuka na svoj opseg kako bih sondirao njegov izlazni signal, kao što je prikazano u video ispod.
Uključio sam način mjerenja na svom opsegu za mjerenje frekvencije i koristio sam Android aplikaciju (Frekvencijski generator zvuka) iz Trgovine Play za generiranje zvučnih signala poznate frekvencije. Kao što možete vidjeti u gornjem GID-u, opseg je mogao izmjeriti zvučne signale s prilično pristojnom točnošću, vrijednost frekvencije prikazana u opsegu vrlo je blizu onoj koja se prikazuje na mom telefonu. Sad kad znamo da modul radi, nastavimo s povezivanjem zvučnog senzora s Arduinom.
Shema kruga detektora zvižduka Arduino
Kompletna shema sklopa sklopa prekidača detektora zviždaljki Arduino pomoću senzora zvuka prikazana je u nastavku. Krug je nacrtan pomoću softvera Fritzing.

Zvučni senzor i relejni modul napaja se 5V pinom Arduina. Izlazni zatik zvučnog senzora povezan je s digitalnim zatičem 8 Arduina, to je zbog svojstva tajmera tog pina, a o tome ćemo razgovarati više u odjeljku za programiranje. Modul releja aktivira se pinom 13 koji je također povezan s ugrađenom LED diodom na UNO ploči.
Na strani napajanja izmjeničnom strujom neutralna žica je izravno spojena na zajednički (C) zatik modula releja, dok je faza povezana s normalno otvorenim (NO) zatikom releja preko izmjeničnog opterećenja (žarulja). Na ovaj način, kada se relej aktivira, NO kontakt će biti povezan s C pinom i tako će žarulja svijetliti. Inače će blub ostati isključen. Nakon uspostavljanja veza, moj je hardver izgledao otprilike ovako.

Upozorenje: Rad s izmjeničnim krugom može postati opasan, budite oprezni dok rukujete žicama pod naponom i izbjegavajte kratke spojeve. Prekidač ili nadzor odraslih preporučuje se osobama koje nemaju iskustva s elektronikom. Upozoren si!!
Mjerenje frekvencije s Arduinom
Slično našem opsegu koji očitava frekvenciju dolaznih kvadratnih valova, i mi moramo programirati Arduino za izračunavanje frekvencije. Već smo naučili kako to učiniti u našem vodiču za brojač frekvencija koristeći puls u funkciji. Ali u ovom uputstvu koristit ćemo knjižnicu Freqmeasure za mjerenje učestalosti kako bismo dobili točne rezultate. Ova se knjižnica koristi internim prekidačem timera na pinu 8 da mjeri koliko dugo impuls ostaje UKLJUČEN. Jednom kada se izmjeri vrijeme, možemo izračunati frekvenciju pomoću formula F = 1 / T. Međutim, budući da knjižnicu koristimo izravno, ne moramo ulaziti u detalje registra i matematiku kako se mjeri frekvencija. Knjižnicu možete preuzeti s donje poveznice:
- Biblioteka mjerenja frekvencije pjrc
Gornja veza će preuzeti zip datoteku, a zatim možete dodati ovu zip datoteku u svoj Arduino IDE slijedeći put Skica -> Uključi biblioteku -> Dodaj.ZIP biblioteku.
Napomena: Korištenje knjižnice onemogućit ćefunkciju analogWrite na pinovima 9 i 10 na UNO-u, jer će tajmer zauzimati tajmer. Također će se ove pribadače promijeniti ako se koriste druge ploče.
Programiranje vašeg Arduina za otkrivanje zviždaljke
Kompletan program uz demonstraciju Video se može naći na dnu ove stranice. U ovom ću naslovu objasniti program razbijanjem u male isječke.
Kao i uvijek započinjemo program uključivanjem potrebnih knjižnica i deklariranjem potrebnih varijabli. Obavezno dodajte knjižnicu FreqMeasure.h kako je objašnjeno u gornjem naslovu. Promjenjivo stanje predstavlja stanje LED-a, a varijable frekvencija i kontinuitet koriste se za izlaz izmjerene frekvencije, odnosno njenog kontinuiteta.
#include
Unutar funkcije postavljanja praznina započinjemo serijski monitor brzinom od 9600 baud za uklanjanje pogrešaka. Zatim upotrijebite funkciju FreqMeasure.begin () za inicijalizaciju pina 8 za mjerenje frekvencije. Također izjavljujemo da je izlaz 13 (LED_BUILTIN).
void setup () { Serial.begin (9600); FreqMeasure.begin (); // Mjere na pin 8 prema zadanim postavkama pinMode (LED_BUILTIN, OUTPUT); }
Unutar beskonačne petlje i dalje slušamo pin 8 pomoću funkcije FreqMeasure.available (). Ako postoji dolazni signal, mjerimo frekvenciju pomoću FreqMeasure.read (). Da bismo izbjegli pogrešku zbog buke, izmjerili smo 100 uzoraka i uzeli prosjek toga. Kôd za isto je prikazan u nastavku.
if (FreqMeasure.available ()) { // prosječno nekoliko čitanja zajedno zbroj = zbroj + FreqMeasure.read (); brojati = brojati + 1; if (count> 100) { frekvencija = FreqMeasure.countToFrequency (zbroj / brojanje); Serial.println (frekvencija); zbroj = 0; broj = 0; } }
Ovdje možete koristiti funkciju Serial.println () da biste provjerili vrijednost frekvencije za vaš zvižduk. U mom slučaju primljena vrijednost bila je od 1800Hz do 2000Hz. Učestalost zviždanja većine ljudi pasti će upravo u ovom rasponu. Ali čak i drugi zvukovi poput glazbe ili glasa mogu pasti pod ovu frekvenciju, pa ćemo ih razlikovati nadgledati kontinuitet. Ako je frekvencija kontinuirana 3 puta, potvrđujemo da je to zvuk zvižduka. Dakle, ako je frekvencija između 1800 i 2000, tada povećavamo varijablu koja se naziva kontinuitet.
if (frekvencija> 1800 && frekvencija <2000) {kontinuitet ++; Serial.print ("Kontinuitet ->"); Serial.println (kontinuitet); frekvencija = 0;}
Ako vrijednost kontinuiteta dosegne ili premaši tri, tada mijenjamo stanje LED-a promjenom varijable koja se naziva stanje. Ako je stanje već točno, mijenjamo ga u lažno i obrnuto.
if (kontinuitet> = 3 && state == false) {state = true; kontinuitet = 0; Serial.println ("Svjetlo uključeno"); kašnjenje (1000);} if (kontinuitet> = 3 && state == true) {state = false; kontinuitet = 0; Serial.println ("Svjetlo isključeno"); kašnjenje (1000);}
Arduino detektor zviždaljki radi
Nakon što kod i hardver budu spremni, možemo ga početi testirati. Provjerite jesu li veze ispravne i uključite modul. Otvorite serijski monitor i počnite zviždati, možete primijetiti kako se povećava vrijednost kontinuiteta i konačno uključuje ili isključuje žarulju. Uzorak trenutnog snimka mog serijskog monitora prikazan je u nastavku.

Kad serijski monitor kaže da je svjetlo uključeno na pinu 13, postat će visoko, a relej će se aktivirati za uključivanje žarulje. Slično će se lampica isključiti kad serijski monitor kaže da je svjetlo isključeno . Nakon što testirate rad, možete napajati postavke pomoću 12V adaptera i započeti upravljanje AC uređajem za kućanstvo pomoću zviždaljke.

Potpuna radna ovog projekta može se naći na video vezom u nastavku. Nadam se da ste razumjeli tutorial i uživali ste naučiti nešto novo. Ako imate bilo kakvih problema s postizanjem rezultata, ostavite ih u odjeljku za komentare ili koristite naš forum za ostale tehničke upite.
