- Nødvendige materialer
- Lydsensor fungerer
- Måling af lydfrekvens på oscilloskop
- Fløjtdetektor Arduino kredsløbsdiagram
- Måling af frekvens med Arduino
- Programmering af din Arduino til detektering af fløjte
- Arduino fløjtdetektor arbejder
Som barn blev jeg fascineret af en legetøjsmusikbil, der udløses, når du klapper i hænderne, og da jeg voksede op spekulerede jeg på, om vi kan bruge det samme til at skifte lys og ventilatorer i vores hjem. Det ville være sejt at bare tænde for mine fans og lys ved bare at klappe i hænderne i stedet for at gå mit dovne selv hen til omstillingsbordet. Men ofte fungerer det ikke, da dette kredsløb reagerer på enhver støj i miljøet, som f.eks. En høj radio eller til min nabos græsslåmaskine. Selvom det også er et sjovt projekt at lave en klappeafbryder.
Det var da, da jeg stødte på denne Whistle Detecting-metode, hvor kredsløbet vil detektere for fløjte. En fløjte i modsætning til andre lyde vil have en ensartet frekvens i en bestemt varighed og kan derfor skelnes fra tale eller musik. Så i denne vejledning lærer vi, hvordan man detekterer fløjtelyd ved at interfacere lydsensoren med Arduino, og når en fløjte detekteres, skifter vi en AC-lampe gennem et relæ. Undervejs lærer vi også, hvordan lydsignaler modtages af mikrofonen, og hvordan man måler frekvens ved hjælp af Arduino. Lyder interessant lige så lad os komme i gang med Arduino-baseret Home Automation Project.
Nødvendige materialer
- Arduino UNO
- Lydsensormodul
- Relæmodul
- AC-lampe
- Tilslutning af ledninger
- Brødbræt
Lydsensor fungerer
Før vi dykker ned i hardwareforbindelsen og koden til dette Home Automation Project, skal vi se på lydsensoren. Lydsensoren, der anvendes i dette modul, er vist nedenfor. Arbejdsprincippet for de fleste lydsensorer, der er tilgængelige på markedet, ligner dette, selvom udseendet måske ændrer sig lidt.
Som vi ved er den primitive komponent i en lydsensor mikrofonen. En mikrofon er en transducertype, der konverterer lydbølger (akustisk energi) til elektrisk energi. Dybest set vibrerer membranen inde i mikrofonen til lydbølgerne i atmosfæren, der producerer elektrisk signal på dens udgangsstift. Men disse signaler vil have meget lav styrke (mV) og kan derfor ikke behandles direkte af en mikrocontroller som Arduino. Også som standard er lydsignaler analoge i naturen, og derfor vil output fra mikrofonen være en sinusbølge med variabel frekvens, men mikrokontroller er digitale enheder og fungerer derfor bedre med firkantbølge.
For at forstærke disse sinusbølger med lavt signal og konvertere dem til firkantede bølger bruger modulet det indbyggede LM393-komparatormodul som vist ovenfor. Lavspændingslydoutputtet fra mikrofonen leveres til en pin i komparatoren gennem en forstærkertransistor, mens en referencespænding indstilles på den anden pin ved hjælp af et spændingskredsløb, der involverer et potentiometer. Når lydudgangsspændingen fra mikrofonen overstiger den forudindstillede spænding, går komparatoren højt med 5V (driftsspænding), ellers forbliver komparatoren lav ved 0V. På denne måde kan sinusbølge med lavt signal være konverter til firspændingsbølge med høj spænding (5V). Oscilloskop-snapshotet nedenfor viser det samme, hvor den gule bølge er sinusbølgen med lavt signal og den blå tændt er den firkantede udgangsbølge. Detfølsomhed kan styres ved at variere potentiometeret på modulet.
Måling af lydfrekvens på oscilloskop
Dette lydsensormodul konverterer lydbølgerne i atmosfæren til firkantede bølger, hvis frekvens vil være lig med frekvensen af lydbølgerne. Så ved at måle firkantbølgefrekvensen kan vi finde frekvensen af lydsignalerne i atmosfæren. For at sikre, at tingene fungerer som de skal, tilsluttede jeg lydføleren til mit omfang for at undersøge dens udgangssignal som vist i videoen nedenfor.
Jeg aktiverede målemetoden i mit omfang for at måle frekvensen og brugte en Android-applikation (Frequency Sound Generator) fra Play Store til at generere lydsignaler med kendt frekvens. Som du kan se i ovenstående GID var omfanget i stand til at måle lydsignaler med en ret anstændig nøjagtighed, værdien af frekvensen, der vises i omfanget, er meget tæt på den, der vises på min telefon. Nu, da vi ved, at modulet fungerer, kan vi fortsætte med grænsefladen mellem lydsensoren og Arduino.
Fløjtdetektor Arduino kredsløbsdiagram
Det komplette kredsløbsdiagram for Arduino Whistle Detector Switch kredsløb ved hjælp af lydsensor er vist nedenfor. Kredsløbet blev tegnet ved hjælp af Fritzing-software.
Lydsensoren og relæmodulet drives af 5V-stiften på Arduino. Udgangsstiften på lydsensoren er tilsluttet den digitale pin 8 på Arduino, dette er på grund af timeregenskaben for den pin, og vi vil diskutere mere om dette i programmeringsafsnittet. Relæmodulet udløses af pin 13, som også er forbundet til den indbyggede LED på UNO-kortet.
På vekselstrømsforsyningssiden er den neutrale ledning direkte tilsluttet Common (C) -stiften på relæmodulet, mens fasen er forbundet til den normalt åbne (NO) stift på relæet gennem AC-belastningen (pære). På denne måde, når relæet udløses, forbindes NO-stiften med C-stift, og dermed lyser pæren. Ellers forbliver sløret slukket. Når forbindelserne er oprettet, så min hardware noget ud som dette.
Advarsel: Arbejde med vekselstrømskredsløb kan blive farligt, være forsigtig ved håndtering af strømførende ledninger og undgå kortslutning. En afbryder eller voksenovervågning anbefales til personer, der ikke har erfaring med elektronik. Du er blevet advaret!!
Måling af frekvens med Arduino
I lighed med vores omfang, der læser frekvensen af de indgående firkantbølger, er vi nødt til at programmere Arduino til at beregne frekvensen. Vi har allerede lært, hvordan man gør dette i vores Frequency Counter tutorial ved hjælp af pulsen i funktion. Men i denne vejledning bruger vi Freqmeasure-biblioteket til at måle frekvensen for at få nøjagtige resultater. Dette bibliotek bruger den interne timer-afbrydelse på pin 8 til at måle, hvor længe en puls forbliver TIL. Når tiden er målt, kan vi beregne frekvensen ved hjælp af formlerne F = 1 / T. Men da vi bruger biblioteket direkte, behøver vi ikke komme ind i registeroplysningerne og matematikken for, hvordan frekvensen måles. Biblioteket kan downloades fra nedenstående link:
- Frekvensmålbibliotek af pjrc
Ovenstående link downloader en zip-fil, du kan derefter tilføje denne zip-fil til din Arduino IDE ved at følge stien Skitse -> Inkluder bibliotek -> Tilføj.ZIP-bibliotek.
Bemærk: Brug af biblioteket deaktiverer den analoge skrivefunktionalitet på pin 9 og 10 på UNO, da timeren er optaget af dette bibliotek. Disse ben ændres også, hvis andre kort bruges.
Programmering af din Arduino til detektering af fløjte
Det komplette program med en demonstrationsvideo findes nederst på denne side. I denne overskrift vil jeg forklare programmet ved at opdele det i små uddrag.
Som altid starter vi programmet med at inkludere de krævede biblioteker og erklære de krævede variabler. Sørg for, at du allerede har tilføjet FreqMeasure.h- biblioteket som forklaret i overskriften ovenfor. Den variable tilstand repræsenterer LED-tilstanden, og variablerne frekvens og kontinuitet bruges til at afgive henholdsvis den målte frekvens og dens kontinuitet.
#omfatte
Inden for tomrumsopsætningsfunktionen begynder vi den serielle skærm ved 9600 baudhastighed til debugging. Brug derefter funktionen FreqMeasure.begin () til at initialisere pin 8 til måling af frekvensen. Vi erklærer også, at pin 13 (LED_BUILTIN) er output.
ugyldig opsætning () { Serial.begin (9600); FreqMeasure.begin (); // Mål på pin 8 som standard pinMode (LED_BUILTIN, OUTPUT); }
Inde i den uendelige løkke fortsætter vi med at lytte på pin 8 ved hjælp af funktionen FreqMeasure.available (). Hvis der er et indgående signal, måler vi frekvensen ved hjælp af FreqMeasure.read (). For at undgå fejl på grund af støj måler vi 100 prøver og tog et gennemsnit af det. Koden til at gøre det samme vises nedenfor.
hvis (FreqMeasure.available ()) { // gennemsnit af flere læsninger sammen sum = sum + FreqMeasure.read (); count = count + 1; hvis (optælling> 100) { frekvens = FreqMeasure.countToFrequency (sum / count); Serial.println (frekvens); sum = 0; tælle = 0; } }
Du kan bruge funktionen Serial.println () her til at kontrollere værdien af frekvensen for din fløjte. I mit tilfælde var den modtagne værdi fra 1800Hz til 2000Hz. Fløjtes frekvens for de fleste mennesker falder inden for dette særlige interval. Men selv andre lyde som musik eller stemme kan falde ind under denne frekvens, så vi skelner for kontinuitet for at skelne mellem dem. Hvis frekvensen er kontinuerlig i 3 gange, bekræfter vi, at det er en fløjtelyd. Så hvis frekvensen er mellem 1800 og 2000, øges vi variablen kaldet kontinuitet.
hvis (frekvens> 1800 && frekvens <2000) {kontinuitet ++; Serial.print ("Kontinuitet ->"); Serial.println (kontinuitet); frekvens = 0;}
Hvis kontinuitetsværdien når eller overstiger tre, ændrer vi LED-tilstanden ved at skifte variablen kaldet tilstand. Hvis staten allerede er sand, ændrer vi den til falsk og omvendt.
hvis (kontinuitet> = 3 && tilstand == falsk) {tilstand = sand; kontinuitet = 0; Serial.println ("Lys tændt"); forsinkelse (1000);} hvis (kontinuitet> = 3 && tilstand == sand) {tilstand = falsk; kontinuitet = 0; Serial.println ("Lys slukket"); forsinkelse (1000);}
Arduino fløjtdetektor arbejder
Når koden og hardwaren er klar, kan vi begynde at teste den. Sørg for, at forbindelserne er korrekte, og tænd for modulet. Åbn den serielle skærm og start fløjten, du kan bemærke værdien af kontinuitet, der øges og endelig tænde eller slukke for lampen. Et eksempel på et snapshot af min serielle skærm er vist nedenfor.
Når den serielle skærm siger, at lyset er tændt, bliver stiften 13 høj, og relæet udløses for at tænde lampen. På samme måde slukkes lampen, når den serielle skærm siger, at lyset er slukket . Når du har testet arbejdet, kan du tænde opsætningen ved hjælp af en 12V adapter og begynde at styre dit AC-husholdningsapparat ved hjælp af fløjte.
Den komplette bearbejdning af dette projekt kan findes i nedenstående video. Håber du forstod vejledningen og nød at lære noget nyt. Hvis du har problemer med at få tingene til at fungere, skal du lade dem være i kommentarsektionen eller bruge vores forum til andre tekniske krav.