- Vereiste materialen
- Geluidssensor werkt
- Audiofrequentie meten op oscilloscoop
- Fluitdetector Arduino schakelschema
- Frequentie meten met Arduino
- Programmeer uw Arduino voor het detecteren van Whistle
- Arduino fluitdetector werkt
Als kind was ik gefascineerd door een speelgoedmuziekauto die wordt geactiveerd als je in je handen klapt, en toen ik opgroeide, vroeg ik me af of we die ook kunnen gebruiken om lampen en ventilatoren in ons huis aan te zetten. Het zou gaaf zijn om gewoon mijn fans en lichten aan te zetten door gewoon in de handen te klappen in plaats van met mijn luie zelf naar het schakelbord te lopen. Maar vaak zou het defect raken omdat dit circuit zal reageren op elk hard geluid in de omgeving, zoals een luide radio of voor de grasmaaier van mijn buurman. Hoewel het bouwen van een klapschakelaar ook een leuk project is om te doen.
Het was toen, toen ik deze Whistle Detecting-methode tegenkwam waarbij het circuit fluit zal detecteren. Een fluitje heeft in tegenstelling tot andere geluiden een uniforme frequentie voor een bepaalde duur en kan daarom worden onderscheiden van spraak of muziek. Dus in deze tutorial zullen we leren hoe we fluitgeluid kunnen detecteren door Sound Sensor te koppelen aan Arduino en wanneer een fluitje wordt gedetecteerd, schakelen we een AC-lamp door een relais. Onderweg zullen we ook leren hoe geluidssignalen worden ontvangen door de microfoon en hoe we de frequentie kunnen meten met Arduino. Klinkt interessant, dus laten we aan de slag gaan met een op Arduino gebaseerd Home Automation Project.
Vereiste materialen
- Arduino UNO
- Geluidssensormodule
- Relaismodule
- Wisselstroomlamp
- Verbindingsdraden
- Breadboard
Geluidssensor werkt
Voordat we ingaan op de hardwareverbinding en -code voor dit huisautomatiseringsproject, laten we de geluidssensor eens bekijken. De geluidssensor die in deze module wordt gebruikt, wordt hieronder weergegeven. Het werkingsprincipe van de meeste geluidssensoren die op de markt verkrijgbaar zijn, is vergelijkbaar, hoewel het uiterlijk een beetje kan veranderen.
Zoals we weten, is het primitieve onderdeel van een geluidssensor de microfoon. Een microfoon is een soort transducer die geluidsgolven (akoestische energie) omzet in elektrische energie. In wezen trilt het diafragma in de microfoon met de geluidsgolven in de atmosfeer die een elektrisch signaal produceren op de uitgangspen. Maar deze signalen hebben een zeer lage magnitude (mV) en kunnen daarom niet rechtstreeks worden verwerkt door een microcontroller zoals Arduino. Ook zijn geluidssignalen standaard analoog van aard, vandaar dat de uitvoer van de microfoon een sinusgolf met variabele frequentie zal zijn, maar microcontrollers zijn digitale apparaten en werken daarom beter met blokgolf.
Om deze lage signaalsinusgolven te versterken en om te zetten in blokgolven, gebruikt de module de ingebouwde LM393 Comparator-module zoals hierboven weergegeven. De laagspanningsaudio-uitvoer van de microfoon wordt geleverd aan een pin van de comparator via een versterkertransistor, terwijl een referentiespanning wordt ingesteld op de andere pin met behulp van een spanningsdelercircuit met een potentiometer. Wanneer de audio-uitgangsspanning van de microfoon de vooraf ingestelde spanning overschrijdt, gaat de comparator hoog met 5V (bedrijfsspanning), anders blijft de comparator laag op 0V. Op deze manier kan een sinusgolf met een laag signaal worden omgezet in een hoogspanning (5V) blokgolf. De onderstaande momentopname van de oscilloscoop toont hetzelfde waarbij de gele golf de lage signaalsinusgolf is en de blauwe golf de uitgangsgolf. Degevoeligheid kan worden geregeld door de potentiometer op de module te variëren.
Audiofrequentie meten op oscilloscoop
Deze geluidssensormodule zet de geluidsgolven in de atmosfeer om in blokgolven waarvan de frequentie gelijk zal zijn aan de frequentie van de geluidsgolven. Dus door de frequentie van de blokgolf te meten, kunnen we de frequentie van de geluidssignalen in de atmosfeer vinden. Om er zeker van te zijn dat alles naar behoren werkt, heb ik de geluidssensor op mijn scoop aangesloten om het uitgangssignaal te onderzoeken, zoals in de onderstaande video wordt getoond.
Ik heb de meetmodus op mijn scoop ingeschakeld om de frequentie te meten en heb een Android-applicatie (Frequency Sound Generator) uit de Play Store gebruikt om geluidssignalen met een bekende frequentie te genereren. Zoals je in de bovenstaande GID kunt zien, was de scoop in staat om geluidssignalen met een behoorlijk behoorlijke nauwkeurigheid te meten, de waarde van de frequentie die in de scoop wordt weergegeven, komt heel dicht in de buurt van die op mijn telefoon. Nu we weten dat de module werkt, gaan we door met het koppelen van de geluidssensor met Arduino.
Fluitdetector Arduino schakelschema
Het volledige schakelschema voor het Arduino Whistle Detector Switch-circuit met behulp van geluidssensor wordt hieronder weergegeven. Het circuit is getekend met behulp van Fritzing-software.
De geluidssensor en de relaismodule worden gevoed door de 5V-pin van de Arduino. De output pin van de Sound sensor is verbonden met de digitale pin 8 van de Arduino, dit komt door de timer eigenschap van die pin en we zullen hier meer over bespreken in het programmeergedeelte. De relaismodule wordt geactiveerd door pin 13 die ook is verbonden met de ingebouwde LED op het UNO-bord.
Aan de AC-voedingszijde is de neutrale draad rechtstreeks verbonden met de gemeenschappelijke (C) -pin van de relaismodule, terwijl de fase is verbonden met de normaal open (NO) -pin van het relais via de AC-belasting (gloeilamp). Op deze manier wordt, wanneer het relais wordt geactiveerd, de NO-pin verbonden met de C-pin en gaat de lamp branden. Anders blijft de blub uitgeschakeld. Nadat de verbindingen zijn gemaakt, zag mijn hardware er ongeveer zo uit.
Waarschuwing: Werken met een wisselstroomcircuit kan gevaarlijk worden, wees voorzichtig bij het hanteren van onder spanning staande draden en vermijd kortsluiting. Een stroomonderbreker of toezicht van een volwassene wordt aanbevolen voor mensen die geen ervaring hebben met elektronica. Je bent gewaarschuwd!!
Frequentie meten met Arduino
Net als onze scope die de frequentie van de inkomende blokgolven leest, moeten we Arduino programmeren om de frequentie te berekenen. We hebben al geleerd hoe je dit moet doen in onze Frequency Counter-tutorial met behulp van de pulse in-functie. Maar in deze tutorial zullen we de Freqmeasure-bibliotheek gebruiken om de frequentie te meten om nauwkeurige resultaten te krijgen. Deze bibliotheek gebruikt de interne timeronderbreking op pin 8 om te meten hoe lang een puls AAN blijft. Als de tijd eenmaal is gemeten, kunnen we de frequentie berekenen met behulp van de formules F = 1 / T. Omdat we de bibliotheek echter rechtstreeks gebruiken, hoeven we niet in te gaan op de registerdetails en de wiskunde van hoe de frequentie wordt gemeten. Bibliotheek kan worden gedownload via de onderstaande link:
- Frequency Measure Library door pjrc
De bovenstaande link zal een zip-bestand downloaden, je kunt dit zip-bestand vervolgens toevoegen aan je Arduino IDE door het pad Sketch -> Inclusief bibliotheek -> Add.ZIP Library te volgen.
Opmerking: als u de bibliotheek gebruikt, wordt de analogWrite- functionaliteit op pin 9 en 10 op UNOuitgeschakeld,aangezien de timer door deze bibliotheek wordt bezet. Ook deze pinnen zullen veranderen als andere boards worden gebruikt.
Programmeer uw Arduino voor het detecteren van Whistle
Het volledige programma met een demonstratievideo vindt u onderaan deze pagina. In deze titel zal ik het programma uitleggen door het op te splitsen in kleine fragmenten.
Zoals altijd beginnen we het programma door de vereiste bibliotheken op te nemen en de vereiste variabelen te declareren. Zorg ervoor dat u de FreqMeasure.h- bibliotheek al hebt toegevoegd, zoals uitgelegd in de bovenstaande kop. De variabele toestand vertegenwoordigt de toestand van de LED en de variabelen frequentie en continuïteit worden gebruikt om respectievelijk de gemeten frequentie en de continuïteit uit te voeren.
# omvatten
Binnen de ongeldige setup- functie beginnen we de seriële monitor op 9600 baudrate voor foutopsporing. Gebruik vervolgens de functie FreqMeasure.begin () om pin 8 voor het meten van de frequentie te initialiseren. We verklaren ook dat pin 13 (LED_BUILTIN) wordt uitgevoerd.
void setup () { Serial.begin (9600); FreqMeasure.begin (); // Maatregelen op pin 8 standaard pinMode (LED_BUILTIN, OUTPUT); }
Binnen de oneindige lus blijven we luisteren op pin 8 met behulp van de functie FreqMeasure.available (). Als er een inkomend signaal is, meten we de frequentie met behulp van de FreqMeasure.read (). Om fouten door ruis te voorkomen, meten we 100 samples en nemen daarvan een gemiddelde. De code om hetzelfde te doen, wordt hieronder weergegeven.
if (FreqMeasure.available ()) { // gemiddelde van meerdere metingen samen sum = som + FreqMeasure.read (); count = count + 1; if (count> 100) { frequentie = FreqMeasure.countToFrequency (som / aantal); Serial.println (frequentie); som = 0; count = 0; } }
U kunt hier de functie Serial.println () gebruiken om de waarde van de frequentie voor uw fluitje te controleren. In mijn geval was de ontvangen waarde van 1800Hz tot 2000Hz. De fluitfrequentie van de meeste mensen zal binnen dit specifieke bereik vallen. Maar zelfs andere geluiden zoals muziek of stem kunnen onder deze frequentie vallen, dus om ze te onderscheiden zullen we controleren op continuïteit. Als de frequentie 3 keer continu is, bevestigen we dat het een fluitgeluid is. Dus als de frequentie tussen 1800 en 2000 ligt, verhogen we de variabele continuïteit.
if (frequentie> 1800 && frequentie <2000) {continuïteit ++; Serial.print ("Continuïteit ->"); Serial.println (continuïteit); frequentie = 0;}
Als de waarde van continuïteit drie bereikt of overschrijdt, veranderen we de status van de LED door de variabele genaamd status om te schakelen. Als de toestand al waar is, veranderen we deze in onwaar en vice versa.
if (continuïteit> = 3 && state == false) {state = true; continuïteit = 0; Serial.println ("Licht ingeschakeld"); delay (1000);} if (continuïteit> = 3 && state == true) {state = false; continuïteit = 0; Serial.println ("Licht uitgeschakeld"); vertraging (1000);}
Arduino fluitdetector werkt
Zodra de code en de hardware klaar zijn, kunnen we beginnen met het testen ervan. Zorg ervoor dat de aansluitingen correct zijn en schakel de module in. Open de seriële monitor en begin te fluiten, u kunt zien dat de waarde van de continuïteit wordt verhoogd en uiteindelijk de lamp in- of uitschakelen. Een voorbeeld van een snapshot van mijn seriële monitor wordt hieronder weergegeven.
Wanneer de seriële monitor zegt: Licht ingeschakeld, wordt pin 13 hoog gemaakt en wordt het relais geactiveerd om de lamp in te schakelen. Evenzo wordt de lamp uitgeschakeld wanneer de seriële monitor zegt: Licht uitgeschakeld . Nadat u de werking heeft getest, kunt u de installatie van stroom voorzien met een 12V-adapter en uw AC Home Appliance met een fluitje gaan bedienen.
De volledige werking van dit project is te vinden op de onderstaande video. Ik hoop dat je de tutorial hebt begrepen en het leuk vond om iets nieuws te leren. Als je problemen hebt om dingen te laten werken, laat ze dan achter in het commentaargedeelte of gebruik ons forum voor andere technische vragen.