- Potrebni materiali
- Zvočni senzor deluje
- Merjenje zvočne frekvence na osciloskopu
- Shema vezja detektorja piščal Arduino
- Merjenje frekvence z Arduinom
- Programiranje vašega Arduina za zaznavanje piščalke
- Deluje detektor Arduino Whistle
Kot otrok sem bil navdušen nad glasbenim avtomobilom, ki se sproži, ko ploskaš z rokami, nato pa, ko sem odraščal, sem se vprašal, ali lahko z istim preklopimo luči in ventilatorje v našem domu. Bilo bi v redu, če bi samo vklopili ventilatorje in lučke, tako da bi samo ploskali z rokami, namesto da bi se lenobni sprehodil do stikalne plošče. Toda pogosto bi prišlo do okvare, saj se bo to vezje odzvalo na vse močne hrupe v okolju, kot je močan radio ali kosilnica mojega soseda. Čeprav je izdelava stikala za ploskanje tudi zabaven projekt.
Takrat sem naletel na to metodo zaznavanja piščal, pri kateri bo vezje zaznalo piščalke. Piščalka bo za razliko od drugih zvokov za določen čas imela enakomerno frekvenco in jo je zato mogoče razlikovati od govora ali glasbe. V tej vadnici se bomo torej naučili, kako zaznati zvok piščalke tako, da povežemo zvočni senzor z Arduinom, in ko zaznamo piščalko, bomo prek releja preklopili AC žarnico. Med potjo bomo tudi izvedeli, kako mikrofon sprejema zvočne signale in kako meriti frekvenco z uporabo Arduina. Sliši se zanimivo, zato začnimo s projektom Home Automation, ki temelji na Arduinu.
Potrebni materiali
- Arduino UNO
- Modul zvočnega senzorja
- Relejni modul
- AC žarnica
- Povezovanje žic
- Breadboard
Zvočni senzor deluje
Preden se poglobimo v povezavo strojne opreme in kodo tega projekta avtomatizacije domov, si oglejmo zvočni senzor. Zvočni senzor, uporabljen v tem modulu, je prikazan spodaj. Načelo delovanja večine zvočnih senzorjev, ki so na voljo na trgu, je podobno temu, čeprav se lahko videz nekoliko spremeni.
Kot vemo, je primitivna komponenta zvočnega senzorja mikrofon. Mikrofon je vrsta pretvornika, ki pretvori zvočne valove (zvočno energijo) v električno energijo. V bistvu membrana v mikrofonu vibrira proti zvočnim valovom v ozračju, ki proizvaja električni signal na izhodnem zatiču. Toda ti signali bodo zelo majhne (mV) in jih zato mikrokrmilnik, kot je Arduino, ne more neposredno obdelati. Tudi privzeto so zvočni signali analogne narave, zato bo izhod iz mikrofona sinusni val s spremenljivo frekvenco, vendar so mikrokrmilniki digitalne naprave in zato bolje delujejo s kvadratnimi valovi.
Za ojačanje teh sinusnih valov z nizkim signalom in njihovo pretvorbo v kvadratne valove modul uporablja vgrajeni primerjalni modul LM393, kot je prikazano zgoraj. Nizkonapetostni zvočni izhod iz mikrofona se prek ojačevalnega tranzistorja napaja na en zatič primerjalnika, medtem ko se z drugim napetostnim delilnikom, ki vključuje potenciometer, nastavi referenčna napetost na drugi zatič. Ko izhodna zvočna napetost mikrofona preseže prednastavljeno napetost, se primerjalnik zviša s 5 V (delovna napetost), sicer pa primerjalnik ostane nizek pri 0 V. Na ta način lahko sinusni signal nizkega signala pretvori v visokonapetostni (5V) kvadratni val. Posnetek osciloskopa spodaj prikazuje enako, kjer je rumeni val sinusni val nizkega signala, modri vklop pa izhodni kvadratni val. Theobčutljivost lahko nadzirate s spreminjanjem potenciometra na modulu.
Merjenje zvočne frekvence na osciloskopu
Ta modul zvočnega senzorja bo zvočne valove v ozračju pretvoril v kvadratne valove, katerih frekvenca bo enaka frekvenci zvočnih valov. Torej z merjenjem frekvence kvadratnega vala lahko najdemo frekvenco zvočnih signalov v ozračju. Da bi zagotovil, da stvari delujejo, kot naj bi, sem na svoj obseg priključil zvočni senzor, da bi izmeril njegov izhodni signal, kot je prikazano v spodnjem videu.
Vklopil sem način merjenja na svojem obsegu za merjenje frekvence in uporabil aplikacijo Android (Frequency Sound Generator) iz Trgovine Play za ustvarjanje zvočnih signalov znane frekvence. Kot lahko vidite v zgornjem GID, je obseg lahko meril zvočne signale s precej spodobno natančnostjo, vrednost frekvence, prikazane v obsegu, pa je zelo blizu vrednosti, prikazane na mojem telefonu. Zdaj, ko vemo, da modul deluje, lahko nadaljujemo s povezovanjem zvočnega senzorja z Arduinom.
Shema vezja detektorja piščal Arduino
Popoln diagram vezja stikala detektorja piščal Arduino z uporabo zvočnega senzorja je prikazan spodaj. Vezje je bilo narisano s pomočjo programske opreme Fritzing.
Zvočni senzor in modul releja napajata 5V zatič Arduino. Izhodni zatič zvočnega senzorja je povezan z digitalnim zatičem 8 Arduina, to je zaradi lastnosti časovnika tega zatiča, o čemer bomo več razpravljali v poglavju o programiranju. Relejni modul sproži zatič 13, ki je prav tako povezan z vgrajeno LED na plošči UNO.
Na strani napajanja z izmeničnim tokom je nevtralna žica neposredno priključena na skupni (C) zatič relejskega modula, medtem ko je faza priključena na normalno odprt (NO) zatič releja preko AC obremenitve (žarnice). Na ta način bo sprožen rele NO zatič povezan s C zatičem in tako bo žarnica svetila. V nasprotnem primeru bo blub ostal izklopljen. Ko so vzpostavljene povezave, je bila moja strojna oprema videti nekako takole.
Opozorilo: Delo z izmeničnim krogom lahko postane nevarno, bodite previdni pri ravnanju z žicami pod napetostjo in se izogibajte kratkim stikom. Odklopnik ali nadzor odraslih je priporočljiv za ljudi, ki nimajo izkušenj z elektroniko. Bili ste opozorjeni!!
Merjenje frekvence z Arduinom
Podobno kot pri obsegu branja frekvence dohodnih kvadratnih valov moramo za izračun frekvence programirati Arduino. Kako to storiti, smo se že naučili v naši vadnici o števcu frekvenc z uporabo pulza v funkciji. Toda v tej vadnici bomo uporabili knjižnico Freqmeasure za merjenje frekvence, da dobimo natančne rezultate. Ta knjižnica uporablja interni prekinitev časovnika na zatiču 8, da izmeri, kako dolgo impulz ostane vklopljen. Ko izmerimo čas, lahko izračunamo frekvenco s pomočjo formul F = 1 / T. Ker pa knjižnico uporabljamo neposredno, nam ni treba vstopati v podrobnosti registra in matematiko merjenja frekvence. Knjižnico lahko prenesete s spodnje povezave:
- Knjižnica za merjenje frekvence pjrc
Zgornja povezava bo prenesla zip datoteko, nato pa jo lahko dodate v svoj Arduino IDE, tako da sledite poti Skica -> Vključi knjižnico -> Dodaj.ZIP knjižnico.
Opomba: Uporaba knjižnice bo onemogočilafunkcijo analogWrite na nogah 9 in 10 na UNO, saj bo ta knjižnica zasedla časovnik. Tudi ti zatiči se bodo spremenili, če boste uporabili druge plošče.
Programiranje vašega Arduina za zaznavanje piščalke
Celoten program z Demonstration Video je mogoče najti na dnu te strani. V tem naslovu bom razložil program tako, da ga razbijem na majhne delčke.
Kot vedno začnemo program tako, da vključimo zahtevane knjižnice in prijavimo zahtevane spremenljivke. Prepričajte se, da ste že dodali knjižnico FreqMeasure.h, kot je razloženo v zgornjem naslovu. Spremenljivo stanje predstavlja stanje LED, spremenljivki frekvenca in kontinuiteta pa se uporabljata za prikaz izmerjene frekvence oziroma njene kontinuitete.
#include
Znotraj funkcije nastavitve praznine začnemo serijski monitor s hitrostjo 9600 baudov za odpravljanje napak. Nato s funkcijo FreqMeasure.begin () inicializirajte zatič 8 za merjenje frekvence. Izjavljamo tudi, da je izhod pin 13 (LED_BUILTIN).
void setup () { Serial.begin (9600); FreqMeasure.begin (); // Privzeto meri na zatiču 8 pinMode (LED_BUILTIN, IZHOD); }
Znotraj neskončne zanke ves čas poslušamo pin 8 s pomočjo funkcije FreqMeasure.available (). Če pride dohodni signal, frekvenco izmerimo s pomočjo FreqMeasure.read (). Da bi se izognili napakam zaradi hrupa, smo izmerili 100 vzorcev in vzeli povprečje tega. Koda za enako dejanje je prikazana spodaj.
if (FreqMeasure.available ()) { // povprečno več branja skupaj vsota = vsota + FreqMeasure.read (); štetje = štetje + 1; if (count> 100) { frekvenca = FreqMeasure.countToFrequency (vsota / štetje); Serial.println (frekvenca); vsota = 0; štetje = 0; } }
Tu lahko uporabite funkcijo Serial.println (), da preverite vrednost frekvence za piščalko. V mojem primeru je bila prejeta vrednost od 1800Hz do 2000Hz. Pogostost piščal večine ljudi bo padla prav v tem območju. Toda tudi drugi zvoki, kot sta glasba ali glas, lahko spadajo pod to frekvenco, zato jih bomo spremljali glede na njihovo kontinuiteto. Če je frekvenca trikrat neprekinjena, potrdimo, da gre za piščalko. Torej, če je frekvenca med 1800 in 2000, povečamo spremenljivko, imenovano kontinuiteta.
če (frekvenca> 1800 && frekvenca <2000) {kontinuiteta ++; Serial.print ("Neprekinjenost ->"); Serial.println (kontinuiteta); frekvenca = 0;}
Če vrednost kontinuitete doseže ali preseže tri, potem spremenimo stanje LED tako, da spremenimo spremenljivko, ki se imenuje stanje. Če je stanje že res, ga spremenimo v napačno in obratno.
if (kontinuiteta> = 3 && state == false) {state = true; kontinuiteta = 0; Serial.println ("Luč vklopljena"); zamuda (1000);} if (kontinuiteta> = 3 && state == true) {state = false; kontinuiteta = 0; Serial.println ("Luč izklopljena"); zamuda (1000);}
Deluje detektor Arduino Whistle
Ko sta koda in strojna oprema pripravljeni, jo lahko začnemo preizkušati. Prepričajte se, da so povezave pravilne, in vklopite modul. Odprite serijski monitor in začnite piskati, opazite, kako se vrednost kontinuitete povečuje in končno vklopi ali izklopi žarnico. Vzorčni posnetek mojega serijskega monitorja je prikazan spodaj.
Ko serijski monitor reče, da je lučka vklopljena na zatiču 13, bo dvignjena, rele pa se bo sprožil, da vklopi žarnico. Podobno se lučka ugasne, ko na serijskem monitorju piše, da je luč izklopljena . Ko preizkusite delovanje, lahko nastavitev napajate z 12V adapterjem in začnete krmiliti vaš gospodinjski aparat AC s piščalko.
Popolno delovanje tega projekta lahko najdete na video s povezavo spodaj. Upam, da ste razumeli vadnico in uživali v učenju česa novega. Če imate kakršne koli težave pri pridobivanju stvari, jih pustite v oddelku za komentarje ali uporabite naš forum za druge tehnične poizvedbe.