- Materiali richiesti
- Sensore di suono funzionante
- Misurazione della frequenza audio sull'oscilloscopio
- Schema del circuito Arduino del rilevatore di fischietti
- Misurazione della frequenza con Arduino
- Programmare il tuo Arduino per rilevare Whistle
- Rilevatore di fischietti Arduino funzionante
Da bambino ero affascinato da un'auto musicale giocattolo che si attivava quando si battevano le mani, e poi crescendo mi sono chiesto se possiamo usare lo stesso per attivare luci e ventilatori nella nostra casa. Sarebbe bello accendere i miei fan e le luci semplicemente battendo le mani invece di camminare con me stesso pigro verso il quadro elettrico. Ma spesso funzionerebbe male poiché questo circuito risponderà a qualsiasi rumore forte nell'ambiente, come una radio ad alto volume o per il tosaerba del mio vicino. Anche se costruire un interruttore di applauso è anche un progetto divertente da fare.
È stato allora, quando mi sono imbattuto in questo metodo di rilevamento dei fischi in cui il circuito rileva i fischi. Un fischio a differenza di altri suoni avrà una frequenza uniforme per una durata particolare e quindi può essere distinto dal parlato o dalla musica. Quindi in questo tutorial impareremo come rilevare il suono del fischio interfacciando il sensore del suono con Arduino e quando viene rilevato un fischio attiveremo una lampada CA attraverso un relè. Lungo il percorso impareremo anche come i segnali sonori vengono ricevuti dal microfono e come misurare la frequenza utilizzando Arduino. Sembra interessante, quindi iniziamo con il progetto di automazione domestica basato su Arduino.
Materiali richiesti
- Arduino UNO
- Modulo sensore di suono
- Modulo relè
- Lampada AC
- Collegamento dei cavi
- Breadboard
Sensore di suono funzionante
Prima di immergerci nella connessione hardware e nel codice per questo progetto di automazione domestica, diamo un'occhiata al sensore del suono. Il sensore sonoro utilizzato in questo modulo è mostrato di seguito. Il principio di funzionamento della maggior parte dei sensori acustici disponibili sul mercato è simile a questo, anche se l'aspetto potrebbe cambiare leggermente.
Come sappiamo, il componente primitivo in un sensore di suono è il microfono. Un microfono è un tipo di trasduttore che converte le onde sonore (energia acustica) in energia elettrica. Fondamentalmente il diaframma all'interno del microfono vibra alle onde sonore nell'atmosfera che produce il segnale elettrico sul suo pin di uscita. Ma questi segnali saranno di magnitudine molto bassa (mV) e quindi non possono essere elaborati direttamente da un microcontrollore come Arduino. Inoltre, per impostazione predefinita, i segnali audio sono di natura analogica, quindi l'uscita dal microfono sarà un'onda sinusoidale con frequenza variabile, ma i microcontrollori sono dispositivi digitali e quindi funzionano meglio con l'onda quadra.
Per amplificare queste onde sinusoidali a basso segnale e convertirle in onde quadre, il modulo utilizza il modulo comparatore LM393 integrato come mostrato sopra. L'uscita audio a bassa tensione dal microfono viene fornita a un pin del comparatore tramite un transistor amplificatore mentre una tensione di riferimento viene impostata sull'altro pin utilizzando un circuito divisore di tensione che coinvolge un potenziometro. Quando la tensione di uscita audio dal microfono supera la tensione preimpostata, il comparatore aumenta con 5 V (tensione di esercizio), altrimenti il comparatore rimane basso a 0 V. In questo modo l'onda sinusoidale a basso segnale può essere convertita in onda quadra ad alta tensione (5V). L'istantanea dell'oscilloscopio di seguito mostra lo stesso in cui l'onda gialla è l'onda sinusoidale del segnale basso e quella blu è l'onda quadra di uscita. Illa sensibilità può essere controllata variando il potenziometro sul modulo.
Misurazione della frequenza audio sull'oscilloscopio
Questo modulo sensore sonoro convertirà le onde sonore nell'atmosfera in onde quadre la cui frequenza sarà uguale alla frequenza delle onde sonore. Quindi misurando la frequenza dell'onda quadra possiamo trovare la frequenza dei segnali sonori nell'atmosfera. Per assicurarmi che le cose funzionino come dovrebbero, ho collegato il sensore del suono al mio oscilloscopio per sondarne il segnale di uscita come mostrato nel video qui sotto.
Ho attivato la modalità di misurazione sul mio oscilloscopio per misurare la frequenza e ho utilizzato un'applicazione Android (Frequency Sound Generator) dal Play Store per generare segnali sonori di frequenza nota. Come puoi vedere nel GID sopra, l'oscilloscopio è stato in grado di misurare i segnali sonori con una precisione abbastanza decente, il valore della frequenza visualizzato nell'oscilloscopio è molto vicino a quello visualizzato sul mio telefono. Ora che sappiamo che il modulo sta funzionando, procediamo con l' interfacciamento del sensore del suono con Arduino.
Schema del circuito Arduino del rilevatore di fischietti
Di seguito è mostrato lo schema del circuito completo per il circuito dell'interruttore del rilevatore di fischi di Arduino utilizzando il sensore del suono. Il circuito è stato disegnato utilizzando il software Fritzing.
Il sensore del suono e il modulo relè sono alimentati dal pin 5V di Arduino. Il pin di uscita del sensore del suono è collegato al pin digitale 8 di Arduino, questo è a causa della proprietà timer di quel pin e ne discuteremo di più nella sezione di programmazione. Il modulo Relay viene attivato dal pin 13 che è anche collegato al LED integrato sulla scheda UNO.
Sul lato alimentazione AC il filo neutro è collegato direttamente al pin Comune (C) del modulo Relè mentre la Fase è collegata al pin Normalmente Aperto (NO) del relè attraverso il carico AC (lampadina). In questo modo quando il relè viene attivato, il pin NO sarà collegato al pin C e quindi la lampadina si accenderà. Altrimenti il blub rimarrà spento. Una volta effettuati i collegamenti, il mio hardware sembrava qualcosa di simile.
Avvertenza: lavorare con il circuito CA potrebbe diventare pericoloso, prestare attenzione quando si maneggiano cavi sotto tensione ed evitare cortocircuiti. Si consiglia un interruttore automatico o la supervisione di un adulto per le persone che non hanno esperienza con l'elettronica. Sei stato avvertito!!
Misurazione della frequenza con Arduino
Analogamente al nostro oscilloscopio che legge la frequenza delle onde quadre in arrivo, dobbiamo programmare Arduino per calcolare la frequenza. Abbiamo già imparato come farlo nel nostro tutorial sul contatore di frequenza utilizzando la funzione di impulso. Ma in questo tutorial useremo la libreria Freqmeasure per misurare la frequenza e ottenere risultati accurati. Questa libreria utilizza l'interrupt del timer interno sul pin 8 per misurare per quanto tempo un impulso rimane attivo. Una volta misurato il tempo, possiamo calcolare la frequenza utilizzando le formule F = 1 / T. Tuttavia, poiché stiamo utilizzando la libreria direttamente, non è necessario entrare nei dettagli del registro e nella matematica di come viene misurata la frequenza. La libreria può essere scaricata dal link sottostante:
- Libreria di misure di frequenza di pjrc
Il link sopra scaricherà un file zip, puoi quindi aggiungere questo file zip al tuo IDE Arduino seguendo il percorso Sketch -> Include Library -> Add.ZIP Library.
Nota: l' utilizzo della libreria disabiliterà lafunzionalità analogWrite sui pin 9 e 10 su UNO poiché il timer sarà occupato da questa libreria. Anche questi pin cambieranno se vengono utilizzate altre schede.
Programmare il tuo Arduino per rilevare Whistle
Il programma completo con un video dimostrativo si trova in fondo a questa pagina. In questa rubrica spiegherò il programma suddividendolo in piccoli frammenti.
Come sempre iniziamo il programma includendo le librerie richieste e dichiarando le variabili richieste. Assicurati di aver aggiunto la libreria FreqMeasure.h già come spiegato nell'intestazione precedente. La variabile state rappresenta lo stato del LED e le variabili frequency e continuity vengono utilizzate per emettere rispettivamente la frequenza misurata e la sua continuità.
#includere
All'interno della funzione di configurazione del vuoto , iniziamo il monitor seriale a 9600 baud rate per il debug. Quindi utilizzare la funzione FreqMeasure.begin () per inizializzare il pin 8 per misurare la frequenza. Dichiariamo anche che il pin 13 (LED_BUILTIN) è in uscita.
void setup () { Serial.begin (9600); FreqMeasure.begin (); // Misura sul pin 8 di default pinMode (LED_BUILTIN, OUTPUT); }
All'interno del loop infinito, continuiamo ad ascoltare sul pin 8 utilizzando la funzione FreqMeasure.available (). Se c'è un segnale in ingresso, misuriamo la frequenza utilizzando FreqMeasure.read (). Per evitare errori dovuti al rumore abbiamo misurato 100 campioni e ne abbiamo ricavato una media. Il codice per fare lo stesso è mostrato di seguito.
if (FreqMeasure.available ()) { // media più letture insieme sum = sum + FreqMeasure.read (); count = count + 1; if (count> 100) { frequency = FreqMeasure.countToFrequency (sum / count); Serial.println (frequenza); somma = 0; count = 0; } }
Puoi usare la funzione Serial.println () qui per controllare il valore della frequenza per il tuo fischio. Nel mio caso il valore ricevuto era compreso tra 1800Hz e 2000Hz. La frequenza dei fischi della maggior parte delle persone rientra in questo intervallo particolare. Ma anche altri suoni come la musica o la voce potrebbero rientrare in questa frequenza, quindi per distinguerli monitoreremo la continuità. Se la frequenza è continua per 3 volte, confermiamo che è un fischio. Quindi, se la frequenza è compresa tra 1800 e 2000, incrementiamo la variabile chiamata continuità.
if (frequenza> 1800 && frequenza <2000) {continuità ++; Serial.print ("Continuity ->"); Serial.println (continuità); frequenza = 0;}
Se il valore di continuità raggiunge o supera tre, allora cambiamo lo stato del LED commutando la variabile chiamata stato. Se lo stato è già vero, lo cambiamo in falso e viceversa.
if (continuità> = 3 && state == false) {state = true; continuità = 0; Serial.println ("Luce accesa"); ritardo (1000);} if (continuità> = 3 && state == true) {state = false; continuità = 0; Serial.println ("Luce spenta"); ritardo (1000);}
Rilevatore di fischietti Arduino funzionante
Una volta che il codice e l'hardware sono pronti, possiamo iniziare a testarli. Verificare che i collegamenti siano corretti e accendere il modulo. Apri il monitor seriale e inizia a fischiare, puoi notare che il valore di continuità aumenta e alla fine accendi o spegni la lampada. Di seguito è mostrata un'istantanea di esempio del mio monitor seriale.
Quando il monitor seriale dice che la luce è accesa, il pin 13 sarà alto e il relè verrà attivato per accendere la lampada. Allo stesso modo la lampada si spegnerà quando il monitor seriale dice Luce spenta . Una volta testato il funzionamento, è possibile alimentare il set-up utilizzando un adattatore da 12V e iniziare a controllare il proprio elettrodomestico AC tramite fischietto.
Il funzionamento completo di questo progetto può essere trovato al video collegato sotto. Spero che tu abbia capito il tutorial e ti sia piaciuto imparare qualcosa di nuovo. Se hai problemi a far funzionare le cose, lasciali nella sezione commenti o usa il nostro forum per altre domande tecniche.