- Reikalingos medžiagos
- Veikia garso jutiklis
- Garso dažnio matavimas osciloskopu
- Švilpuko detektoriaus „Arduino“ grandinės schema
- Dažnio matavimas naudojant „Arduino“
- „Arduino“ programavimas švilpuko aptikimui
- „Arduino“ švilpukų detektorius veikia
Vaikystėje mane sužavėjo žaislinis muzikos automobilis, kuris suveikia, kai plojate rankomis, o tada, kai užaugau, pagalvojau, ar galime tą patį naudoti norėdami perjungti žibintus ir gerbėjus savo namuose. Būtų šaunu tiesiog įjungti savo ventiliatorius ir žibintus tiesiog plojant rankomis, užuot ėjusį tingų save prie komutatoriaus. Tačiau dažnai tai sugenda, nes ši grandinė reaguoja į bet kokį garsų triukšmą aplinkoje, pavyzdžiui, garsų radiją ar mano kaimyno vejapjovę. Nors „clap“ jungiklio sukūrimas taip pat yra įdomus projektas.
Tada, kai susidūriau su šiuo švilpuko aptikimo metodu, kai grandinė aptiks švilpimą. Švilpukas, skirtingai nuo kitų garsų, turės vienodą tam tikros trukmės dažnį, todėl jį galima atskirti nuo kalbos ar muzikos. Taigi šioje pamokoje sužinosime, kaip aptikti švilpuko garsą, susiejant garso jutiklį su „Arduino“, o aptikus švilpuką perjungsime kintamosios srovės lempą per relę. Kelyje taip pat sužinosime, kaip garso signalus priima mikrofonas ir kaip išmatuoti dažnį naudojant „Arduino“. Skamba įdomiai, todėl pradėkime nuo „ Arduino“ pagrįsto namų automatikos projekto.
Reikalingos medžiagos
- „Arduino UNO“
- Garso jutiklio modulis
- Relės modulis
- AC lempa
- Laidų sujungimas
- Bandomoji Lenta
Veikia garso jutiklis
Prieš pasinerdami į šio namų automatikos projekto aparatinę jungtį ir kodą, pažvelkime į garso jutiklį. Šiame modulyje naudojamas garso jutiklis parodytas žemiau. Daugelio rinkoje esančių garso jutiklių veikimo principas yra panašus į šį, nors išvaizda gali šiek tiek pasikeisti.
Kaip žinome, pirminis garso jutiklio komponentas yra mikrofonas. Mikrofonas yra keitiklio tipas, kuris garso bangas (akustinę energiją) paverčia elektros energija. Iš esmės mikrofono viduje esanti diafragma vibruoja atmosferos garso bangomis, kurios ant jo išvesties kaiščio sukuria elektrinį signalą. Tačiau šie signalai bus labai mažo stiprumo (mV), todėl mikrokontroleris, pvz., „Arduino“, negali jų tiesiogiai apdoroti. Taip pat pagal numatytuosius nustatymus garso signalai yra analogiški, todėl mikrofono išvestis bus sinuso banga su kintamu dažniu, tačiau mikrovaldikliai yra skaitmeniniai įrenginiai, todėl geriau veikia su kvadratinėmis bangomis.
Norėdami sustiprinti šias žemo signalo sinusines bangas ir paversti jas kvadratinėmis bangomis, modulis naudoja laive esantį „LM393 Comparator“ modulį, kaip parodyta aukščiau. Žemos įtampos garso išėjimas iš mikrofono per stiprintuvo tranzistorių tiekiamas į vieną komparatoriaus kaištį, o kitam kaiščiui nustatoma etaloninė įtampa, naudojant įtampos daliklio grandinę su potenciometru. Kai garso išėjimo įtampa iš mikrofono viršija nustatytą įtampą, lygintuvas pakyla aukštai, kai 5 V (darbinė įtampa), kitu atveju palygintuvas išlieka žemas, esant 0 V. Tokiu būdu žemo signalo sinusinė banga gali būti konvertuojama į aukštos įtampos (5 V) kvadratinę bangą. Žemiau pateiktas osciloskopo momentinis vaizdas rodo tą patį, kur geltona banga yra žemo signalo sinuso banga, o mėlyna įjungta - išėjimo kvadratinė banga. jautrumą galima valdyti keičiant modulio potenciometrą.
Garso dažnio matavimas osciloskopu
Šis garso jutiklio modulis atmosferos garso bangas pavers kvadratinėmis bangomis, kurių dažnis bus lygus garso bangų dažniui. Taigi, matuodami kvadratinės bangos dažnį, galime rasti garso signalų dažnį atmosferoje. Norėdami įsitikinti, kad viskas veikia taip, kaip manoma, aš prijungiau garso jutiklį prie savo srities, kad galėčiau ištirti jo išvesties signalą, kaip parodyta toliau pateiktame vaizdo įraše.
Įjungiau matavimo režimą savo srityje, kad galėčiau išmatuoti dažnį, ir naudodama „ Android“ programą („Frequency Sound Generator“) iš „Play Store“ sugeneravau žinomo dažnio garso signalus. Kaip matote pirmiau pateiktame GID, taikymo sritis sugebėjo išmatuoti garso signalus gana tinkamu tikslumu, diapazone rodomo dažnio vertė yra labai artima mano telefone rodomai. Dabar, kai žinome, kad modulis veikia, galima tęsti garso jutiklio sąsają su „Arduino“.
Švilpuko detektoriaus „Arduino“ grandinės schema
Visa „ Arduino“ švilpuko detektoriaus jungiklio grandinės, naudojančios garso jutiklį, schema parodyta žemiau. Grandinė buvo nupiešta naudojant „Fritzing“ programinę įrangą.
Garso jutiklį ir relės modulį maitina „Arduino“ 5 V kaištis. Garso jutiklio išvesties kaištis yra prijungtas prie „Arduino“ skaitmeninio kaiščio 8, taip yra dėl to kaiščio laikmačio savybės, ir mes apie tai daugiau aptarsime programavimo skyriuje. Relės modulį suveikia kaištis 13, kuris taip pat yra prijungtas prie įmontuoto UNO plokštės šviesos diodo.
Kintamosios srovės tiekimo pusėje neutralus laidas yra tiesiogiai sujungtas su relės modulio bendruoju (C) kaiščiu, o fazė per kintamosios srovės apkrovą (lemputę) yra prijungta prie relės normaliai atidaryto (NE) kaiščio. Tokiu būdu įjungus relę, NO kaištis bus sujungtas su C kaiščiu ir lemputė švytės. Kitu atveju blubas liks išjungtas. Atlikus ryšius, mano aparatūra atrodė maždaug taip.
Įspėjimas: darbas su kintamosios srovės grandine gali būti pavojingas, elkitės atsargiai dirbdami su įtampos laidais ir išvenkite trumpojo jungimo. Grandinės pertraukiklį ar suaugusiųjų priežiūrą rekomenduojama tiems, kurie nėra patyrę su elektronika. Tu buvai ispetaS!!
Dažnio matavimas naudojant „Arduino“
Panašiai, kaip mes skaitome gaunamų kvadratinių bangų dažnį, turime užprogramuoti „Arduino“, kad apskaičiuotume dažnį. Mes jau sužinojome, kaip tai padaryti mūsų dažnių skaitiklio pamokoje, naudojant pulso funkciją. Tačiau šioje pamokoje mes naudosime „ Freqmeasure“ biblioteką dažniui matuoti, kad gautume tikslius rezultatus. Ši biblioteka naudoja vidinį laikmačio pertraukimą 8 kaištyje, kad matuotų, kiek laiko impulsas lieka ĮJUNGTAS. Kai laikas bus matuojamas, mes galime apskaičiuoti dažnį pagal formules F = 1 / T. Tačiau kadangi mes tiesiogiai naudojame biblioteką, mums nereikia patekti į registro duomenis ir matematiką, kaip matuojamas dažnis. Biblioteką galima atsisiųsti iš šios nuorodos:
- Pjrc dažnio matavimo biblioteka
Pirmiau pateikta nuoroda atsisiųs ZIP failą, tada galėsite pridėti šį ZIP failą prie „Arduino IDE“, eidami kelią Eskizas -> Įtraukti biblioteką -> Pridėti.ZIP biblioteką.
Pastaba: Naudojant biblioteką bus išjungta „ analogWrite“ funkcija UNO 9 ir 10 kaiščiuose, nes laikmatį užims ši biblioteka. Šie kaiščiai pasikeis, jei bus naudojamos kitos lentos.
„Arduino“ programavimas švilpuko aptikimui
Visa programa su demonstracijoje Video galima rasti šio puslapio apačioje. Šioje antraštėje aš paaiškinsiu programą suskaidydamas ją į mažus fragmentus.
Kaip visada, programą pradedame įtraukdami reikalingas bibliotekas ir deklaruodami reikalingus kintamuosius. Įsitikinkite, kad jau pridėjote biblioteką „ FreqMeasure.h“, kaip paaiškinta aukščiau esančioje antraštėje. Kintama būsena reiškia šviesos diodo būseną, o kintamieji dažnis ir tęstinumas naudojami atitinkamai išmatuotam dažniui ir jo tęstinumui išgauti.
# įtraukti
Tuščios sąrankos funkcijos viduje mes pradedame nuoseklųjį monitorių 9600 baudos greičiu derinti. Tada naudokite funkciją FreqMeasure.begin (), kad inicializuotumėte kaištį 8 dažniui matuoti. Mes taip pat pareiškiame, kad yra išvestas kaištis 13 (LED_BUILTIN).
negaliojanti sąranka () { Serial.begin (9600); FreqMeasure.begin (); // Pagal numatytuosius nustatymus 8 kaištelio „pinMode“ (LED_BUILTIN, OUTPUT); }
Begalinėje kilpoje mes nuolat klausomės 8 kaiščio, naudodami funkciją FreqMeasure.available (). Jei yra gaunamas signalas, mes išmatuojame dažnį naudodami FreqMeasure.read (). Kad išvengtume klaidos dėl triukšmo, mes išmatuojame 100 mėginių ir paėmėme jų vidurkį. Tą patį darantis kodas parodytas žemiau.
if (FreqMeasure.available ()) { // vidutiniškai keli skaitymai kartu suma = suma + FreqMeasure.read (); skaičius = skaičius + 1; if (skaičius> 100) { dažnis = FreqMeasure.countToFrequency (suma / skaičius); Serial.println (dažnis); suma = 0; skaičius = 0; } }
Čia galite naudoti funkciją „ Serial.println ()“, kad patikrintumėte švilpuko dažnio vertę. Mano atveju gauta vertė buvo nuo 1800Hz iki 2000Hz. Daugumos žmonių švilpuko dažnis kris būtent šiame diapazone. Tačiau net ir kiti garsai, pavyzdžiui, muzika ar balsas, gali patekti į šį dažnį, todėl norėdami juos atskirti, mes stebėsime tęstinumą. Jei dažnis yra nepertraukiamas 3 kartus, mes patvirtiname, kad tai yra švilpimo garsas. Taigi, jei dažnis yra nuo 1800 iki 2000, mes didiname kintamąjį, vadinamą tęstinumu.
jei (dažnis> 1800 && dažnis <2000) {tęstinumas ++; Serial.print („Tęstinumas ->“); Serial.println (tęstinumas); dažnis = 0;}
Jei tęstinumo vertė pasiekia arba viršija tris, tada mes keičiame šviesos diodo būseną perjungdami kintamąjį, vadinamą būsena. Jei valstybė jau teisinga, mes ją pakeičiame į netikrą ir atvirkščiai.
jei (tęstinumas> = 3 && būsena == klaidinga) {būsena = tiesa; tęstinumas = 0; Serial.println („Šviesa įjungta“); delsimas (1000);} jei (tęstinumas> = 3 && būsena == tiesa) {būsena = klaidinga; tęstinumas = 0; Serial.println („Šviesa išjungta“); vėlavimas (1000);}
„Arduino“ švilpukų detektorius veikia
Kai kodas ir aparatinė įranga bus paruošti, galėsime jį išbandyti. Įsitikinkite, kad jungtys yra teisingos, ir įjunkite modulį. Atidarykite nuoseklųjį monitorių ir pradėkite švilpti, galite pastebėti, kad tęstinumo vertė didėja ir galiausiai įjungia arba išjungia lempą. Toliau parodytas serijinio monitoriaus momentinio kadro pavyzdys.
Kai serijinis monitorius sako, kad šviesa įjungta kaiščiu 13 bus padaryta aukšta, o relė bus įjungta, kad įjungtų lempą. Panašiai lempa bus išjungta, kai nuosekliame monitoriuje sakoma, kad šviesa išjungta . Išbandę veikimą, galite įjungti maitinimą naudodami 12 V adapterį ir pradėti valdyti kintamosios srovės namų aparatą naudodami švilpuką.
Visą šio projekto darbą galite rasti žemiau esančiame vaizdo įraše. Tikiuosi, kad supratote pamoką ir patiko mokytis kažko naujo. Jei turite kokių nors problemų dirbant, palikite juos komentarų skiltyje arba naudokitės mūsų forumu kitoms techninėms problemoms spręsti.