- Materials necessaris
- Funcionament del sensor de so
- Mesura de la freqüència d'àudio en oscil·loscopi
- Diagrama del circuit Arduino del detector de xiulets
- Mesurament de la freqüència amb Arduino
- Programació del vostre Arduino per detectar Whistle
- El detector de xiulets Arduino funciona
Quan era un nen, em fascinava un cotxe de música de joguina que es desencadenava quan palmeu les mans i, quan vaig créixer, em vaig preguntar si podem utilitzar el mateix per canviar llums i ventiladors a casa nostra. Estaria bé que només encengués els meus ventiladors i llums simplement picant de mans en lloc d’acostar el meu mandrós jo al tauler d’interruptors. Però sovint funcionaria malament, ja que aquest circuit respondrà a qualsevol soroll fort de l’entorn, com una ràdio forta o per al tallagespa del meu veí. Tot i que construir un interruptor de claus també és un projecte divertit.
Va ser llavors quan em vaig trobar amb aquest mètode de detecció de xiulets en què el circuit detectarà el xiulet. Un xiulet a diferència d'altres sons tindrà una freqüència uniforme durant una durada determinada i, per tant, es pot distingir de la parla o la música. Així doncs, en aquest tutorial aprendrem a detectar el so de xiulet mitjançant la interfície del sensor de so amb Arduino i quan es detecti un xiulet canviarem una làmpada de corrent altern a través d’un relé. Al llarg del camí també aprendrem com es reben els senyals de so pel micròfon i com es mesura la freqüència mitjançant Arduino. Sembla interessant, així que comencem amb el Projecte d’automatització domèstica basat en Arduino.
Materials necessaris
- Arduino UNO
- Mòdul de sensor de so
- Mòdul de relés
- Llum AC
- Connexió de cables
- Taula de pa
Funcionament del sensor de so
Abans d’endinsar-nos en la connexió i el codi de maquinari d’aquest projecte domòtic, donem una ullada al sensor de so. El sensor de so utilitzat en aquest mòdul es mostra a continuació. El principi de funcionament de la majoria de sensors de so disponibles al mercat és similar a aquest, tot i que l’aspecte pot canviar una mica.

Com sabem, el component primitiu d’un sensor de so és el micròfon. Un micròfon és un tipus de transductor que converteix les ones sonores (energia acústica) en energia elèctrica. Bàsicament, el diafragma a l’interior del micròfon vibra a les ones sonores de l’atmosfera que produeixen senyal elèctric al seu pin de sortida. Però aquests senyals seran de magnitud molt baixa (mV) i, per tant, no podran ser processats directament per un microcontrolador com Arduino. També els senyals de so per defecte són de naturalesa analògica, per tant, la sortida del micròfon serà una ona sinusoïdal amb freqüència variable, però els microcontroladors són dispositius digitals i, per tant, funcionen millor amb ona quadrada.

Per amplificar aquestes ones sinusoïdals de baix senyal i convertir-les en ones quadrades, el mòdul utilitza el mòdul comparador integrat LM393, tal com es mostra més amunt. La sortida d'àudio de baixa tensió del micròfon es subministra a un pin del comparador a través d'un transistor amplificador, mentre que es fixa una tensió de referència a l'altre pin mitjançant un circuit divisor de tensió que implica un potenciòmetre. Quan la tensió de sortida d'àudio del micròfon supera la tensió predeterminada, el comparador augmenta amb 5V (tensió de funcionament), en cas contrari el comparador es manté baix a 0V. D'aquesta manera, l'ona sinusoïdal de senyal baixa es pot convertir en ona quadrada d'alta tensió (5V). La instantània de l’oscil·loscopi següent mostra la mateixa on l’ona groga és l’ona sinusoïdal de senyal baix i el blau activat és l’ona quadrada de sortida. Ella sensibilitat es pot controlar variant el potenciòmetre del mòdul.

Mesura de la freqüència d'àudio en oscil·loscopi
Aquest mòdul de sensor de so convertirà les ones sonores de l’atmosfera en ones quadrades la freqüència de les quals serà igual a la freqüència de les ones sonores. Així, mesurant la freqüència de l’ona quadrada podem trobar la freqüència dels senyals sonors a l’atmosfera. Per assegurar-me que les coses funcionen tal com se suposa, he connectat el sensor de so al meu abast per provar el senyal de sortida tal com es mostra al vídeo següent.
Vaig activar el mode de mesura al meu abast per mesurar la freqüència i vaig utilitzar una aplicació d'Android (Generador de so de freqüència) de Play Store per generar senyals sonors de freqüència coneguda. Com podeu veure al GID anterior, l’abast era capaç de mesurar els senyals de so amb una precisió bastant decent, el valor de freqüència que es mostra a l’abast és molt proper a un que es mostra al meu telèfon. Ara, ja que sabem que el mòdul funciona, podem procedir a la interfície del sensor de so amb Arduino.
Diagrama del circuit Arduino del detector de xiulets
A continuació es mostra el diagrama complet del circuit del commutador del detector de xiulets Arduino mitjançant el sensor de so. El circuit es va dibuixar mitjançant el programari Fritzing.

El sensor de so i el mòdul de retransmissió s’alimenten del pin de 5 V de l’Arduino. El pin de sortida del sensor de so està connectat al pin digital 8 de l’Arduino, això es deu a la propietat del temporitzador d’aquest pin i en parlarem més a la secció de programació. El mòdul de retransmissió s’activa mitjançant el pin 13, que també està connectat al LED incorporat de la placa UNO.
Pel costat de l’alimentació de CA, el cable neutre està connectat directament al pin Common (C) del mòdul de relé mentre que la fase es connecta al pin normalment obert (NO) del relé a través de la càrrega de CA (bombeta). D'aquesta manera, quan s'activa el relé, el pin NO es connectarà amb el pin C i, per tant, la bombeta brillarà. En cas contrari, el gruix continuarà desactivat. Un cop fetes les connexions, el meu maquinari semblava així.

Advertència: treballar amb circuits de corrent altern pot ser perillós, tenir precaució mentre es manipulen cables actius i evitar curts circuits. Es recomana un interruptor automàtic o una supervisió per a adults per a persones que no tinguin experiència en electrònica. Has estat avisat!!
Mesurament de la freqüència amb Arduino
De manera similar al nostre abast que llegeix la freqüència de les ones quadrades entrants, hem de programar Arduino per calcular la freqüència. Ja hem après a fer-ho al nostre tutorial de comptador de freqüències mitjançant la funció de pulsació. Però en aquest tutorial utilitzarem la biblioteca Freqmeasure per mesurar la freqüència i obtenir resultats precisos. Aquesta biblioteca utilitza la interrupció del temporitzador intern al pin 8 per mesurar el temps que un pols roman activat. Un cop mesurat el temps, podem calcular la freqüència utilitzant les fórmules F = 1 / T. Tanmateix, com que utilitzem la biblioteca directament, no cal que entrem en els detalls del registre i les matemàtiques de com es mesura la freqüència. La biblioteca es pot descarregar des de l'enllaç següent:
- Biblioteca de mesures de freqüència de pjrc
L'enllaç anterior descarregarà un fitxer zip, i després podeu afegir aquest fitxer zip al vostre IDE d'Arduino seguint el camí Sketch -> Include Library -> Add.ZIP Library.
Nota: L'ús de la biblioteca desactivarà lafuncionalitat analogWrite al pin 9 i 10 a UNO, ja que el temporitzador estarà ocupat per aquesta biblioteca. Aquests passadors també canviaran si s’utilitzen altres taulers.
Programació del vostre Arduino per detectar Whistle
El programa complet amb un vídeo de demostració es troba a la part inferior d’aquesta pàgina. En aquest encapçalament explicaré el programa dividint-lo en petits fragments.
Com sempre, comencem el programa incloent les biblioteques necessàries i declarant les variables necessàries. Assegureu-vos que ja heu afegit la biblioteca FreqMeasure.h tal com s’explica a l’encapçalament anterior. L'estat variable representa l'estat del LED i les variables freqüència i continuïtat s'utilitzen per generar la freqüència mesurada i la seva continuïtat respectivament.
#incloure
Dins de la funció de configuració del buit , comencem el monitor sèrie a una velocitat de 9600 baud per a la depuració. A continuació, utilitzeu la funció FreqMeasure.begin () per inicialitzar el pin 8 per mesurar la freqüència. També declarem que la sortida del pin 13 (LED_BUILTIN).
configuració nul·la () { Serial.begin (9600); FreqMeasure.begin (); // Mides al pin 8 per defecte pinMode (LED_BUILTIN, OUTPUT); }
Dins del bucle infinit, seguim escoltant al pin 8 mitjançant la funció FreqMeasure.available (). Si hi ha un senyal entrant, mesurem la freqüència mitjançant FreqMeasure.read (). Per evitar errors a causa del soroll mesurem 100 mostres i en prenem una mitjana. A continuació es mostra el codi per fer el mateix.
if (FreqMeasure.available ()) { // mitjana de diverses lectures juntes suma = suma + FreqMeasure.read (); comptar = comptar + 1; if (recompte> 100) { freqüència = FreqMeasure.countToFrequency (suma / recompte); Serial.println (freqüència); suma = 0; recompte = 0; } }
Podeu utilitzar la funció Serial.println () aquí per comprovar el valor de la freqüència del vostre xiulet. En el meu cas, el valor rebut va ser de 1800Hz a 2000Hz. La freqüència de xiulets de la majoria de la gent caurà en aquest rang concret. Però fins i tot altres sons com la música o la veu podrien caure en aquesta freqüència, de manera que per distingir-los controlarem la continuïtat. Si la freqüència és contínua durant 3 vegades, confirmem que és un so de xiulet. Per tant, si la freqüència és entre 1800 i 2000, incrementem la variable anomenada continuïtat.
if (freqüència> 1800 && freqüència <2000) {continuïtat ++; Serial.print ("Continuïtat ->"); Serial.println (continuïtat); freqüència = 0;}
Si el valor de la continuïtat arriba o supera tres, llavors canviem l'estat del LED alternant la variable anomenada estat. Si l'estat ja és cert, el canviem a fals i viceversa.
if (continuïtat> = 3 && state == false) {state = true; continuïtat = 0; Serial.println ("Llum activada"); delay (1000);} if (continuïtat> = 3 && state == true) {state = false; continuïtat = 0; Serial.println ("Llum apagada"); retard (1000);}
El detector de xiulets Arduino funciona
Un cop el codi i el maquinari estiguin preparats, podem començar a provar-lo. Assegureu-vos que les connexions siguin correctes i engegueu el mòdul. Obriu el monitor de sèrie i comenceu a xiular; podeu notar que el valor de la continuïtat s’incrementa i, finalment, encén o apaga el llum. A continuació es mostra una mostra instantània del meu monitor sèrie.

Quan el monitor sèrie digui que la llum engegada del pin 13 es posarà en alt i el relé es dispararà per encendre el llum. De la mateixa manera, la llum s'apagarà quan el monitor sèrie digui que la llum està apagada . Un cop provat el funcionament, podeu alimentar la configuració mitjançant un adaptador de 12V i començar a controlar el vostre electrodomèstic de CA mitjançant el xiulet.

El funcionament complet d’aquest projecte es pot trobar al vídeo enllaçat a continuació. Espero que hàgiu entès el tutorial i us hagi agradat aprendre alguna cosa nova. Si teniu algun problema per fer funcionar les coses, deixeu-les a la secció de comentaris o utilitzeu el nostre fòrum per a altres consultes tècniques.
