- Tarvittavat materiaalit
- Äänianturi toimii
- Äänitaajuuden mittaaminen oskilloskoopilla
- Pilliilmaisin Arduino-piirikaavio
- Taajuuden mittaaminen Arduinolla
- Arduinon ohjelmointi pillin havaitsemiseksi
- Arduino-pilli-ilmaisin toimii
Lapsena minua kiehtoi lelumusiikkiauto, joka laukaisee, kun taputat kätesi, ja sitten varttuessani mietin, voimmeko käyttää samaa vaihtaaksemme valoja ja tuulettimia kodissamme. Olisi hienoa kytkeä tuulettimet ja valot päälle vain taputtamalla käsiä sen sijaan, että kävisin laiska itseni kytkinkortille. Mutta usein se ei toimi oikein, koska tämä piiri reagoi mihin tahansa kovaan meluun ympäristössä, kuten kovaan radioon tai naapurini ruohonleikkuriin. Vaikka taputuskytkimen rakentaminen on myös hauska projekti.
Silloin, kun törmäsin tähän pillinhavaitsemismenetelmään, jossa piiri havaitsee pillin. Pillillä, toisin kuin muilla äänillä, on tasainen taajuus tietyn keston ajan, joten se voidaan erottaa puheesta tai musiikista. Joten tässä opetusohjelmassa opitaan, kuinka havaita pilliääni yhdistämällä äänianturi Arduinoon ja kun pilli havaitaan, vaihdamme AC-lampun releen kautta. Matkan varrella opimme myös, kuinka äänisignaalit vastaanotetaan mikrofonilla ja kuinka mitata taajuutta Arduinolla. Kuulostaa mielenkiintoiselta, joten aloitetaan Arduino-pohjainen koti-automaatioprojekti.
Tarvittavat materiaalit
- Arduino UNO
- Äänianturimoduuli
- Releyksikkö
- AC-lamppu
- Johtojen liittäminen
- Leipälauta
Äänianturi toimii
Ennen kuin sukellamme tämän kodin automaatioprojektin laitteistoyhteyteen ja koodiin, katsotaanpa äänianturi. Tässä moduulissa käytetty äänianturi on esitetty alla. Useimpien markkinoilla olevien ääniantureiden toimintaperiaate on samanlainen kuin tässä, vaikka ulkonäkö saattaa muuttua hieman.
Kuten tiedämme, äänianturin alkukomponentti on mikrofoni. Mikrofoni on anturityyppi, joka muuntaa ääniaallot (akustinen energia) sähköenergiaksi. Pohjimmiltaan mikrofonin sisällä oleva kalvo värähtelee ilmakehän ääniaalloille, joka tuottaa sähköistä signaalia lähtönippaansa. Mutta nämä signaalit ovat erittäin pienikokoisia (mV), joten niitä ei voida käsitellä suoraan mikro-ohjaimella, kuten Arduino. Myös oletusarvoisesti äänisignaalit ovat luonteeltaan analogisia, joten mikrofonin lähtö on siniaalto, jolla on vaihteleva taajuus, mutta mikro-ohjaimet ovat digitaalisia laitteita ja toimivat siten paremmin neliöaallon kanssa.
Näiden matalien signaalien siniaaltojen vahvistamiseksi ja muuntamiseksi neliöaaloiksi moduuli käyttää sisäistä LM393-vertailumoduulia, kuten yllä on esitetty. Mikrofonin matalajännitteinen audiolähtö syötetään komparaattorin yhteen nastaan vahvistintransistorin kautta, kun taas vertailujännite asetetaan toiselle nastalle käyttämällä potentiometriä sisältävää jännitteenjakajan piiriä. Kun mikrofonin äänilähtöjännite ylittää ennalta asetetun jännitteen, komparaattori nousee korkealle 5 V: lla (käyttöjännite), muuten vertailija pysyy matalalla 0 V: lla. Tällä tavalla matalan signaalin siniaalto voidaan muuntaa suurjännitteiseksi (5 V) neliöaalloksi. Alla oleva oskilloskoopin tilannekuva näyttää saman, missä keltainen aalto on matalan signaalin siniaalto ja sininen päällä on ulostulon neliön aalto. herkkyyttä voidaan säätää vaihtelemalla moduulin potentiometriä.
Äänitaajuuden mittaaminen oskilloskoopilla
Tämä äänianturimoduuli muuntaa ilmakehän ääniaallot neliöaaloiksi, joiden taajuus on yhtä suuri kuin ääniaaltojen taajuus. Joten mittaamalla neliöaallon taajuus voimme löytää äänisignaalien taajuuden ilmakehässä. Varmistaaksesi, että asiat toimivat odotetusti, kytkin äänianturin alueeseeni tutkiakseen sen lähtösignaalin alla olevan videon mukaisesti.
Kytkin mittausalueen päälle mittausalueen mittaamaan taajuutta ja käytin Play Kaupan Android-sovellusta (Frequency Sound Generator) tunnetun taajuuden äänisignaalien luomiseen. Kuten yllä olevasta GID: stä näet, laajuus pystyi mittaamaan äänisignaalit melko kohtuullisella tarkkuudella, laajuudessa näkyvän taajuuden arvo on hyvin lähellä puhelimessani näytettyä arvoa. Nyt, kun tiedämme, että moduuli toimii, voidaan jatkaa äänianturin liittämistä Arduinoon.
Pilliilmaisin Arduino-piirikaavio
Äänianturia käyttävän Arduino Whistle Detector Switch -piirin täydellinen kytkentäkaavio on alla. Piiri piirrettiin Fritzing-ohjelmistolla.
Äänianturi ja relemoduuli saavat virtansa Arduinon 5 V: n nastasta. Äänianturin lähtötappi on kytketty Arduinon digitaaliseen nastaan 8, tämä johtuu kyseisen nastan ajastinominaisuudesta, ja keskustelemme tästä lisää ohjelmointiosassa. Relay-moduuli laukaistaan tapilla 13, joka on myös kytketty UNO-kortin sisäänrakennettuun LEDiin.
Verkkovirran puolella nollajohdin on kytketty suoraan relemoduulin Common (C) -tappiin, kun taas vaihe on kytketty releen normaalisti auki olevaan (NO) napaan vaihtovirran kuorman (hehkulamppu) kautta. Tällä tavalla, kun rele laukaistaan, NO-tappi liitetään C-napaan ja siten hehkulamppu hehkuu. Muuten blub pysyy pois päältä. Kun liitännät on tehty, laitteistoni näytti tältä.
Varoitus: Työskentely vaihtovirtapiirin kanssa voi olla vaarallista, olla varovainen jännitteisten johtojen käsittelyssä ja välttää oikosulkuja. Katkaisijaa tai aikuisten valvontaa suositellaan ihmisille, joilla ei ole kokemusta elektroniikasta. Sinua on varoitettu!!
Taajuuden mittaaminen Arduinolla
Samanlainen kuin soveltamisala, jolla luemme tulevien neliöaaltojen taajuuden, meidän on ohjelmoitava Arduino taajuuden laskemiseksi. Olemme jo oppineet, miten tämä tehdään Taajuuslaskuri-opetusohjelmassa käyttämällä pulssi toiminnassa. Mutta tässä opetusohjelmassa käytämme Freqmeasure-kirjastoa taajuuden mittaamiseen tarkkojen tulosten saamiseksi. Tämä kirjasto käyttää tapin 8 sisäistä ajastimen keskeytystä mittaamaan, kuinka kauan pulssi pysyy PÄÄLLÄ. Kun aika on mitattu, voimme laskea taajuuden kaavoilla F = 1 / T. Koska käytämme kirjastoa suoraan, meidän ei kuitenkaan tarvitse päästä rekisteritietoihin ja matematiikkaan taajuuden mittaamisesta. Kirjaston voi ladata alla olevasta linkistä:
- Taajuusmittauskirjasto pjrc
Yllä oleva linkki lataa zip-tiedoston, jonka jälkeen voit lisätä tämän zip-tiedoston Arduino IDE -laitteeseesi seuraamalla polkua Luonnos -> Sisällytä kirjasto -> Lisää.ZIP-kirjasto.
Huomaa: Kirjaston käyttö poistaa analogWrite- toiminnonkäytöstä nastoissa 9 ja 10 UNO: ssa, koska ajastin on tämän kirjaston käytössä. Myös nämä tapit muuttuvat, jos käytetään muita levyjä.
Arduinon ohjelmointi pillin havaitsemiseksi
Täydellinen ohjelma, jossa on esittelyvideo löytyy alareunassa tällä sivulla. Tässä otsikossa selitän ohjelmaa jakamalla sen pieniksi katkelmiksi.
Kuten aina, aloitamme ohjelman sisällyttämällä vaaditut kirjastot ja ilmoittamalla vaaditut muuttujat. Varmista, että olet lisännyt FreqMeasure.h- kirjaston jo yllä olevan otsikon mukaisesti. Muuttuva tila edustaa LED: n tilaa ja muuttujia taajuutta ja jatkuvuutta käytetään vastaavasti mitatun taajuuden ja sen jatkuvuuden tuottamiseen.
#sisältää
Void-asetustoiminnon sisällä aloitamme sarjamonitorin 9600 baudinopeudella virheenkorjausta varten. Käynnistä sitten FreqMeasure.begin () -toiminto alustamaan nasta 8 taajuuden mittaamiseksi. Vakuutamme myös, että nasta 13 (LED_BUILTIN) on lähtö.
void setup () { Sarja.alku (9600); FreqMeasure.begin (); // Mittaa tapin 8 oletusarvoisesti pinMode (LED_BUILTIN, OUTPUT); }
Äärettömän silmukan sisällä kuuntelemme edelleen nastaa 8 käyttämällä toimintoa FreqMeasure.available (). Jos on saapuva signaali, mitataan taajuus käyttämällä FreqMeasure.read (). Melun aiheuttamien virheiden välttämiseksi mitataan 100 näytettä ja otamme siitä keskiarvon. Sama tekevä koodi näkyy alla.
jos (FreqMeasure.available ()) { // keskiarvo useiden lukemien kesken summa = summa + FreqMeasure.read (); laskea = laskea + 1; if (määrä> 100) { taajuus = FreqMeasure.countToFrequency (summa / määrä); Serial.println (taajuus); summa = 0; määrä = 0; } }
Voit käyttää Serial.println () -toimintoa tarkistaaksesi pillisi taajuuden arvon. Minun tapauksessani vastaanotettu arvo oli välillä 1800 Hz - 2000 Hz. Useimpien ihmisten pillitaajuus laskee tällä alueella. Mutta jopa muut äänet, kuten musiikki tai ääni, saattavat kuulua tämän taajuuden alle, joten niiden erottamiseksi seuraamme jatkuvuutta. Jos taajuus on jatkuva 3 kertaa, vahvistamme sen olevan viheltävä ääni. Joten, jos taajuus on välillä 1800 - 2000, lisäämme muuttujaa, jota kutsutaan jatkuvuudeksi.
if (taajuus> 1800 && taajuus <2000) {jatkuvuus ++; Serial.print ("Jatkuvuus ->"); Sarja.println (jatkuvuus); taajuus = 0;}
Jos jatkuvuuden arvo saavuttaa tai ylittää kolme, muutamme LED-valon tilaa vaihtamalla tilaksi kutsuttu muuttuja. Jos tila on jo totta, vaihdamme sen vääräksi ja päinvastoin.
jos (jatkuvuus> = 3 && tila == väärä) {tila = tosi; jatkuvuus = 0; Serial.println ("Valo palaa"); delay (1000);} if (jatkuvuus> = 3 && state == true) {state = false; jatkuvuus = 0; Serial.println ("valo sammutettu"); viive (1000);}
Arduino-pilli-ilmaisin toimii
Kun koodi ja laitteisto ovat valmiita, voimme aloittaa sen testaamisen. Varmista, että liitännät ovat oikein ja käynnistä moduuli. Avaa sarjamonitori ja aloita viheltämistä. Voit huomata jatkuvuuden arvon kasvavan ja lopulta sammuttavan tai sammuttavan lampun. Alla on esimerkki sarjakuvan näytöstä.
Kun sarjavalvonta kertoo , että tappi 13 kytketty valo kytketään korkeaksi ja rele käynnistyy kytkemään lamppu päälle. Vastaavasti lamppu sammuu, kun sarjavalvojan mukaan valo sammuu . Kun olet testannut toimivuuden, voit kytkeä virran 12 V: n sovittimella ja aloittaa AC-kodinkoneesi ohjaamisen pillillä.
Täydellinen työ Projektin löytyy videon alla olevan linkin. Toivottavasti ymmärrät opetusohjelman ja nautit oppimasta jotain uutta. Jos sinulla on ongelmia saada asiat toimimaan, jätä ne kommenttiosioon tai käytä foorumiamme muihin teknisiin kysymyksiin.