- Materiale necesare
- Senzorul de sunet funcționează
- Măsurarea frecvenței audio pe osciloscop
- Diagrama circuitului Arduino cu detector de fluier
- Măsurarea frecvenței cu Arduino
- Programarea Arduino pentru detectarea Whistle
- Detector de fluier Arduino funcționează
În copilărie, am fost fascinat de o mașină de muzică de jucărie care se declanșează când bateți din palme și, atunci când am crescut, m-am întrebat dacă putem folosi același lucru pentru a comuta lumini și ventilatoare în casa noastră. Ar fi grozav să-mi aprind ventilatoarele și luminile, batând din palme în loc să mă duc pe leneș la tabloul de comutare. Dar de multe ori ar funcționa defect, deoarece acest circuit va răspunde la orice zgomot puternic din mediu, cum ar fi un radio puternic sau pentru mașina de tuns iarba a vecinului meu. Deși construirea unui clap switch este, de asemenea, un proiect distractiv de făcut.
Atunci am întâlnit această metodă de detectare a fluierului în care circuitul va detecta fluierul. Un fluier spre deosebire de alte sunete va avea o frecvență uniformă pentru o anumită durată și, prin urmare, se poate distinge de vorbire sau muzică. Deci, în acest tutorial vom învăța cum să detectăm sunetul fluierului interfațând senzorul de sunet cu Arduino și atunci când este detectat un fluier vom comuta o lampă de curent alternativ printr-un releu. Pe parcurs vom învăța, de asemenea, modul în care semnalele sonore sunt recepționate de microfon și cum să măsurăm frecvența folosind Arduino. Sună interesant, așa că hai să începem cu Arduino Home Automation Project.
Materiale necesare
- Arduino UNO
- Modul senzor sunet
- Modul releu
- Lampă AC
- Conectarea firelor
- Breadboard
Senzorul de sunet funcționează
Înainte de a ne arunca cu cap în conexiunea hardware și codul pentru acest proiect de automatizare la domiciliu, să aruncăm o privire asupra senzorului de sunet. Senzorul de sunet utilizat în acest modul este prezentat mai jos. Principiul de funcționare al majorității senzorilor de sunet disponibili pe piață este similar cu acesta, deși aspectul s-ar putea schimba puțin.
După cum știm, componenta primitivă într-un senzor de sunet este microfonul. Un microfon este un tip de traductor care transformă undele sonore (energie acustică) în energie electrică. Practic, diafragma din interiorul microfonului vibrează la undele sonore din atmosferă care produc semnal electric pe pinul său de ieșire. Dar aceste semnale vor avea o magnitudine foarte mică (mV) și, prin urmare, nu pot fi procesate direct de un microcontroler precum Arduino. De asemenea, în mod implicit, semnalele sonore sunt de natură analogică, prin urmare ieșirea de la microfon va fi o undă sinusoidală cu frecvență variabilă, dar microcontrolerele sunt dispozitive digitale și, prin urmare, funcționează mai bine cu undele pătrate.
Pentru a amplifica aceste unde sinusoidale de semnal scăzut și a le converti în unde pătrate, modulul folosește modulul de comparare LM393 de la bord, așa cum se arată mai sus. Ieșirea audio de joasă tensiune de la microfon este furnizată unui pin al comparatorului printr-un tranzistor amplificator în timp ce o tensiune de referință este setată pe celălalt pin folosind un circuit divizor de tensiune care implică un potențiometru. Când tensiunea de ieșire audio de la microfon depășește tensiunea prestabilită, comparatorul crește cu 5V (tensiune de funcționare), altfel comparatorul rămâne scăzut la 0V. În acest fel, unda sinusoidală de semnal redus poate fi convertită în undă pătrată de înaltă tensiune (5V). Instantaneul osciloscopului de mai jos arată același lucru în care unda galbenă este unda sinusoidală de semnal scăzut, iar albastrul este unda pătrată de ieșire. sensibilitatea poate fi controlată prin modificarea potențiometrului de pe modul.
Măsurarea frecvenței audio pe osciloscop
Acest modul senzor de sunet va converti undele sonore din atmosferă în unde pătrate, a căror frecvență va fi egală cu frecvența undelor sonore. Deci, măsurând frecvența undei pătrate putem găsi frecvența semnalelor sonore din atmosferă. Pentru a mă asigura că lucrurile funcționează așa cum se presupune, am conectat senzorul de sunet la obiectivul meu pentru a-i testa semnalul de ieșire așa cum se arată în videoclipul de mai jos.
Am activat modul de măsurare pe scopul meu pentru a măsura frecvența și am folosit o aplicație Android (Generator de sunet de frecvență) din Magazin Play pentru a genera semnale sonore de frecvență cunoscută. După cum puteți vedea în GID de mai sus, obiectivul a putut măsura semnalele sonore cu o precizie destul de decentă, valoarea frecvenței afișate în obiectiv este foarte apropiată de cea afișată pe telefonul meu. Acum, că știm că modulul funcționează, putem continua cu interfața senzorului de sunet cu Arduino.
Diagrama circuitului Arduino cu detector de fluier
Schema completă a circuitului pentru circuitul Arduino Whistle Detector Switch cu ajutorul senzorului sonor este prezentată mai jos. Circuitul a fost desenat folosind software-ul Fritzing.
Senzorul de sunet și modulul de releu sunt alimentate de pinul de 5V al Arduino. Pinul de ieșire al senzorului de sunet este conectat la pinul digital 8 al Arduino, acest lucru se datorează proprietății temporizatorului acelui pin și vom discuta mai multe despre acest lucru în secțiunea de programare. Modulul de releu este declanșat de pinul 13, care este, de asemenea, conectat la LED-ul încorporat de pe placa UNO.
Pe partea de alimentare cu curent alternativ, firul neutru este conectat direct la pinul comun (C) al modulului releului în timp ce faza este conectată la pinul normal deschis (NO) al releului prin sarcina alternativă (bec). În acest fel, atunci când releul este declanșat, pinul NO va fi conectat cu pinul C și astfel becul va străluci. În caz contrar, blub-ul va rămâne oprit. Odată realizate conexiunile, hardware-ul meu arăta cam așa.
Avertisment: Lucrul cu circuitul de curent alternativ poate deveni periculos, fiți precauți în timpul manipulării firelor sub tensiune și evitați scurtcircuitele. Se recomandă un întrerupător de circuit sau supravegherea adulților pentru persoanele care nu au experiență în domeniul electronicii. Ai fost avertizat!!
Măsurarea frecvenței cu Arduino
Similar cu scopul nostru care citește frecvența undelor pătrate, trebuie să programăm Arduino pentru a calcula frecvența. Am învățat deja cum să facem acest lucru în tutorialul nostru de contor de frecvență folosind funcția puls in. Dar în acest tutorial vom folosi biblioteca Freqmeasure pentru a măsura frecvența pentru a obține rezultate precise. Această bibliotecă utilizează întreruperea temporizatorului intern pe pinul 8 pentru a măsura cât timp un impuls rămâne PORNIT. Odată măsurat timpul putem calcula frecvența folosind formulele F = 1 / T. Cu toate acestea, din moment ce folosim direct biblioteca, nu trebuie să intrăm în detaliile registrului și în matematica modului în care este măsurată frecvența. Biblioteca poate fi descărcată de pe linkul de mai jos:
- Biblioteca de măsurare a frecvenței de către pjrc
Linkul de mai sus va descărca un fișier zip, apoi puteți adăuga acest fișier zip la IDE-ul dvs. Arduino urmând calea Sketch -> Include Library -> Add.ZIP Library.
Notă: Utilizarea bibliotecii va dezactivafuncționalitatea analogWrite pe pinul 9 și 10 pe UNO, deoarece temporizatorul va fi ocupat de această bibliotecă. De asemenea, acei pini se vor schimba dacă se utilizează alte plăci.
Programarea Arduino pentru detectarea Whistle
Programul complet cu un videoclip demonstrativ poate fi găsit în partea de jos a acestei pagini. În această rubrică voi explica programul împărțindu-l în fragmente mici.
Ca întotdeauna, începem programul prin includerea bibliotecilor necesare și declararea variabilelor necesare. Asigurați-vă că ați adăugat deja biblioteca FreqMeasure.h așa cum a fost explicat în rubrica de mai sus. Starea variabilă reprezintă starea LED-ului și variabilele frecvență și continuitate sunt utilizate pentru a transmite frecvența măsurată și, respectiv, continuitatea acesteia.
#include
În interiorul funcției de configurare nulă , începem monitorul serial la 9600 baud rate pentru depanare. Apoi utilizați funcția FreqMeasure.begin () pentru a inițializa pinul 8 pentru măsurarea frecvenței. De asemenea, declarăm că pinul 13 (LED_BUILTIN) este ieșit.
void setup () { Serial.begin (9600); FreqMeasure.begin (); // Măsură pe pinul 8 implicit pinMode (LED_BUILTIN, OUTPUT); }
În bucla infinită, ascultăm în continuare pe pinul 8 folosind funcția FreqMeasure.available (). Dacă există un semnal de intrare, măsurăm frecvența folosind FreqMeasure.read (). Pentru a evita erorile cauzate de zgomot, măsurăm 100 de probe și luăm o medie din acestea. Codul pentru a face același lucru este prezentat mai jos.
if (FreqMeasure.available ()) { // media mai multor lecturi împreună sum = sum + FreqMeasure.read (); număr = număr + 1; if (număr> 100) { frecvență = FreqMeasure.countToFrequency (sumă / numărare); Serial.println (frecvență); sumă = 0; număr = 0; } }
Puteți utiliza funcția Serial.println () aici pentru a verifica valoarea frecvenței pentru fluierul dvs. În cazul meu, valoarea primită a fost de la 1800Hz la 2000Hz. Frecvența fluierului celor mai mulți oameni va scădea în acest interval special. Dar chiar și alte sunete precum muzica sau vocea ar putea intra sub această frecvență, astfel încât să le distingem vom monitoriza continuitatea. Dacă frecvența este continuă de 3 ori, confirmăm că este un fluier. Deci, dacă frecvența este între 1800 și 2000, atunci incrementăm variabila numită continuitate.
if (frecvență> 1800 && frecvență <2000) {continuitate ++; Serial.print ("Continuitate ->"); Serial.println (continuitate); frecvență = 0;}
Dacă valoarea continuității atinge sau depășește trei, atunci schimbăm starea LED-ului prin comutarea variabilei numită stare. Dacă starea este deja adevărată, o schimbăm în fals și vice versa.
if (continuitate> = 3 && state == false) {state = true; continuitate = 0; Serial.println („Lumina activată”); delay (1000);} if (continuitate> = 3 && state == true) {state = false; continuitate = 0; Serial.println („Lumina oprită”); întârziere (1000);}
Detector de fluier Arduino funcționează
Odată ce codul și hardware-ul sunt gata, putem începe testarea acestuia. Asigurați-vă că conexiunile sunt corecte și porniți modulul. Deschideți monitorul serial și începeți să fluierați, puteți observa creșterea valorii continuității și, în cele din urmă, aprinderea sau oprirea lămpii. Un eșantion instantaneu al monitorului meu serial este prezentat mai jos.
Când monitorul serial spune că Lumina pornită pinul 13 va fi ridicată, iar releul va fi declanșat pentru a aprinde Lampa. În mod similar, lampa se va stinge atunci când monitorul serial spune că Lumina este stinsă . După ce ați testat funcționarea, puteți alimenta setarea utilizând un adaptor de 12V și puteți începe să controlați aparatul dvs. casnic AC utilizând fluier.
Funcționarea completă a acestui proiect poate fi găsită la videoclipul legat mai jos. Sper că ați înțeles tutorialul și v-a plăcut să învățați ceva nou. Dacă aveți vreo problemă în ceea ce privește funcționarea lucrurilor, lăsați-le în secțiunea de comentarii sau folosiți forumul nostru pentru alte întrebări tehnice.