- Material som krävs
- Ljudsensor fungerar
- Mätning av ljudfrekvens i oscilloskop
- Whistle Detector Arduino Circuit Diagram
- Mätfrekvens med Arduino
- Programmering av din Arduino för att upptäcka Whistle
- Arduino visselpipare fungerar
Som barn blev jag fascinerad av en leksaksmusikbil som utlöses när du klappar i händerna, och när jag växte upp undrade jag om vi kan använda samma för att växla lampor och fläktar i vårt hem. Det skulle vara coolt att bara sätta på mina fläktar och lampor genom att bara klappa händerna istället för att gå mitt lata jag till växelbrädet. Men ofta skulle det fungera då den här kretsen svarar på högt ljud i omgivningen, som en hög radio eller för min granns gräsklippare. Även om det är ett roligt projekt att bygga en klappbrytare.
Det var då, när jag kom över den här Whistle Detecting-metoden där kretsen kommer att upptäcka för visselpipa. En visselpipa till skillnad från andra ljud kommer att ha en enhetlig frekvens under en viss varaktighet och kan därför skiljas från tal eller musik. Så i den här handledningen lär vi oss att upptäcka visselpipeljud genom att koppla ihop ljudsensorn med Arduino och när en visselpipa upptäcks, växlar vi en AC-lampa genom ett relä. Längs vägen lär vi oss också hur ljudsignaler tas emot av mikrofonen och hur man mäter frekvens med Arduino. Låter intressant, så låt oss komma igång med Arduino-baserat hemautomationsprojekt.
Material som krävs
- Arduino UNO
- Ljudsensormodul
- Relämodul
- AC-lampa
- Anslutande ledningar
- Bakbord
Ljudsensor fungerar
Innan vi dyker in i hårdvaruanslutningen och koden för detta hemautomatiseringsprojekt, låt oss titta på ljudsensorn. Ljudsensorn som används i denna modul visas nedan. Arbetsprincipen för de flesta ljudsensorer som finns på marknaden liknar den här, även om utseendet kan förändras lite.
Som vi vet är den primitiva komponenten i en ljudsensor mikrofonen. En mikrofon är en typ av givare som omvandlar ljudvågor (akustisk energi) till elektrisk energi. I grund och botten vibrerar membranet inuti mikrofonen till ljudvågorna i atmosfären som producerar elektrisk signal på dess utgångsstift. Men dessa signaler kommer att vara av mycket låg storlek (mV) och kan därför inte behandlas direkt av en mikrokontroller som Arduino. Också som standard är ljudsignalerna analoga till sin karaktär, därför blir utgången från mikrofonen en sinusvåg med variabel frekvens, men mikrokontroller är digitala enheter och fungerar därför bättre med fyrkantvåg.
För att förstärka dessa sinusvågor med låg signal och omvandla dem till fyrkantiga vågor använder modulen den inbyggda LM393-komparatormodulen som visas ovan. Ljudutsignalen från lågspänningen från mikrofonen matas till en stift i komparatorn genom en förstärkartransistor medan en referensspänning ställs in på den andra stiftet med en spänningsdelarkrets som involverar en potentiometer. När ljudutgångsspänningen från mikrofonen överstiger den förinställda spänningen blir komparatorn hög med 5V (driftspänning), annars förblir komparatorn låg vid 0V. På så sätt kan sinusvåg med låg signal omvandlas till fyrkantig högspänning (5V). Oscilloskopets ögonblicksbild nedan visar detsamma där den gula vågen är sinusvåg med låg signal och den blå på är den fyrkantiga vågen. Dekänslighet kan regleras genom att variera potentiometern på modulen.
Mätning av ljudfrekvens i oscilloskop
Denna ljudsensormodul konverterar ljudvågorna i atmosfären till fyrkantiga vågor, vars frekvens är lika med frekvensen för ljudvågorna. Så genom att mäta frekvensen för fyrkantvågen kan vi hitta frekvensen för ljudsignalerna i atmosfären. För att se till att saker och ting fungerar som de antas anslöt jag ljudsensorn till mitt omfång för att sondra utsignalen som visas i videon nedan.
Jag aktiverade mätläget i mitt omfång för att mäta frekvensen och använde en Android-applikation (Frequency Sound Generator) från Play Store för att generera ljudsignaler med känd frekvens. Som du kan se i ovanstående GID kunde omfånget mäta ljudsignaler med en ganska anständig noggrannhet, värdet på frekvensen som visas i omfånget är mycket nära en som visas på min telefon. Nu när vi vet att modulen fungerar kan vi fortsätta med gränssnittsljudsensorn med Arduino.
Whistle Detector Arduino Circuit Diagram
Det fullständiga kretsschemat för Arduino Whistle Detector Switch-kretsen med hjälp av Ljudsensor visas nedan. Kretsen ritades med hjälp av Fritzing-programvaran.
Ljudsensorn och relämodulen drivs av 5V-stiftet på Arduino. Ljudsensorns utgångsstift är ansluten till Arduinos digitala stift 8, det här beror på stiftets timeregenskap och vi kommer att diskutera mer om detta i programmeringsavsnittet. Relämodulen utlöses av stift 13 som också är ansluten till den inbyggda lysdioden på UNO-kortet.
På växelströmsförsörjningssidan är neutralledningen direkt ansluten till den gemensamma (C) stiftet på relämodulen medan fasen är ansluten till det normala öppna (NO) stiftet på reläet via växelström (glödlampa). På det här sättet när reläet utlöses kommer NO-stiftet att anslutas till C-stiftet och därmed lyser glödlampan. Annars förblir blubben avstängd. När anslutningarna har gjorts såg min hårdvara ut så här.
Varning: Arbeta med växelströmskrets kan bli farligt, vara försiktig när du hanterar strömkablar och undvika kortslutning. En strömbrytare eller vuxenövervakning rekommenderas för personer som inte har erfarenhet av elektronik. Du har blivit varnad!!
Mätfrekvens med Arduino
I likhet med vårt omfång som läser frekvensen för inkommande fyrkantiga vågor, måste vi programmera Arduino för att beräkna frekvensen. Vi har redan lärt oss hur man gör detta i vår Frequency Counter-handledning med hjälp av pulsen i funktionen. Men i denna handledning kommer vi att använda Freqmeasure-biblioteket för att mäta frekvensen för att få exakta resultat. Detta bibliotek använder den interna timeravbrottet på stift 8 för att mäta hur länge en puls förblir PÅ. När tiden är mätt kan vi beräkna frekvensen med formlerna F = 1 / T. Men eftersom vi använder biblioteket direkt behöver vi inte komma in i registeruppgifterna och matematiken för hur frekvensen mäts. Biblioteket kan laddas ner från länken nedan:
- Frekvensmätbibliotek av pjrc
Ovanstående länk laddar ner en zip-fil, du kan sedan lägga till den här zip-filen i din Arduino IDE genom att följa sökvägen Skiss -> Inkludera bibliotek -> Lägg till.ZIP-bibliotek.
Obs! Användning av biblioteket inaktiverar den analoga skrivfunktionen på stift 9 och 10 på UNO eftersom timern kommer att upptas av detta bibliotek. Dessa stift kommer också att ändras om andra kort används.
Programmering av din Arduino för att upptäcka Whistle
Det kompletta programmet med en demonstrationsvideo finns längst ner på denna sida. I den här rubriken kommer jag att förklara programmet genom att dela upp det i små utdrag.
Som alltid börjar vi programmet med att inkludera de obligatoriska biblioteken och förklara de variabler som krävs. Se till att du redan har lagt till FreqMeasure.h- biblioteket som förklarats i rubriken ovan. Det variabla tillståndet representerar lysdioden och variablerna frekvens och kontinuitet används för att mata ut den uppmätta frekvensen respektive dess kontinuitet.
#omfatta
Inuti tomrumsinställningsfunktionen börjar vi den seriella bildskärmen med 9600 baudhastighet för felsökning. Använd sedan FreqMeasure.begin () funktion för att initiera tappen 8 för mätning av frekvensen. Vi förklarar också att stift 13 (LED_BUILTIN) matas ut.
ogiltig installation () { Serial.begin (9600); FreqMeasure.begin (); // Mått på stift 8 som standard pinMode (LED_BUILTIN, OUTPUT); }
Inuti den oändliga slingan fortsätter vi att lyssna på stift 8 med funktionen FreqMeasure.available (). Om det finns en inkommande signal mäter vi frekvensen med FreqMeasure.read (). För att undvika fel på grund av buller mäter vi 100 prover och tog ett genomsnitt av det. Koden för att göra detsamma visas nedan.
if (FreqMeasure.available ()) { // genomsnittligt antal läsning tillsammans summa = summa + FreqMeasure.read (); count = count + 1; if (count> 100) { frequency = FreqMeasure.countToFrequency (sum / count); Serial.println (frekvens); summa = 0; antal = 0; } }
Du kan använda funktionen Serial.println () här för att kontrollera värdet på frekvensen för din visselpipa. I mitt fall var värdet från 1800Hz till 2000Hz. Visselfrekvensen för de flesta kommer att falla inom detta speciella intervall. Men även andra ljud som musik eller röst kan falla under denna frekvens så för att skilja dem kommer vi att övervaka kontinuitet. Om frekvensen är kontinuerlig 3 gånger bekräftar vi att det är ett visselpipeljud. Så om frekvensen är mellan 1800 och 2000 ökar vi variabeln som kallas kontinuitet.
if (frekvens> 1800 && frekvens <2000) {kontinuitet ++; Serial.print ("Kontinuitet ->"); Serial.println (kontinuitet); frekvens = 0;}
Om kontinuitetsvärdet når eller överstiger tre ändrar vi statusen för lysdioden genom att växla mellan variabeln som kallas tillstånd. Om staten redan är sant ändrar vi det till falskt och vice versa.
om (kontinuitet> = 3 && tillstånd == falskt) {tillstånd = sant; kontinuitet = 0; Serial.println ("Ljus tänds"); fördröjning (1000);} om (kontinuitet> = 3 && tillstånd == sant) {tillstånd = falskt; kontinuitet = 0; Serial.println ("Ljus avstängd"); fördröjning (1000);}
Arduino visselpipare fungerar
När koden och hårdvaran är redo kan vi börja testa den. Se till att anslutningarna är korrekta och slå på modulen. Öppna den seriella bildskärmen och börja vissla, du kan märka att kontinuitetsvärdet ökar och slutligen tänder eller stänger av lampan. Ett exempel på en snapshot av min seriella bildskärm visas nedan.
När den seriella bildskärmen säger att ljus tänds kommer stift 13 att bli högt och reläet kommer att triggas för att tända lampan. På samma sätt stängs lampan av när den seriella bildskärmen säger att ljuset är avstängt . När du har testat arbetet kan du driva installationen med en 12V-adapter och börja styra din AC-hushållsapparat med visselpipa.
Det fullständiga arbetet med detta projekt finns i videon som länkas nedan. Hoppas att du förstod handledningen och tyckte om att lära dig något nytt. Om du har några problem att få saker att fungera, lämna dem i kommentarsektionen eller använd vårt forum för andra tekniska frågor.