Sommario:
- Forniture
- Passaggio 1: progettazione del rilevatore
- Passaggio 2: configurazione del rilevatore
- Passaggio 3: costruzione del rilevatore
- Passaggio 4: inviare un messaggio alla radio
- Passaggio 5: fai da te
Video: Relè allarme congelatore: 5 passaggi
2024 Autore: John Day | [email protected]. Ultima modifica: 2024-01-30 10:01
Il nostro congelatore si trova in un ripostiglio isolato dal nostro spazio vitale. A volte la porta del congelatore non si chiude correttamente e l'allarme si attiva. Il problema è che non possiamo sentirlo se siamo nel nostro spazio vitale. Come riceviamo un messaggio che la porta del congelatore è aperta? Questo è un problema comune, abbiamo dispositivi nelle nostre case che ci parlano, ma cosa succede se non riusciamo a sentirli per qualsiasi motivo. Ho iniziato questo come un po' di divertimento, ma potrebbe essere utile in un'applicazione più seria.
Ci sono 2 parti in questo problema, abbiamo bisogno di un metodo per rilevare che l'allarme è scattato e un metodo per riferire questo fatto al nostro spazio vitale. Il progetto su cui ho deciso era di utilizzare un Raspberry Pi per ascoltare l'allarme del congelatore che si attivava e quindi inviare un messaggio di allarme acustico alla mia radio domestica abilitata per uPNP. Universal Plug and Play (UpnP) è uno standard per scoprire e interagire con i servizi offerti da vari dispositivi su una rete, inclusi server e lettori multimediali, anche se non credo che i congelatori fossero previsti quando lo standard è stato sviluppato. Il messaggio di avviso è stato reso forte e irritante e si ripete all'infinito finché la radio non viene spenta.
Ho scelto di rilevare l'allarme con un Raspberry Pi Zero W e Seeed ReSpeaker 2-Mics Pi HAT Il Raspberry PI Zero è una versione a basso costo del Raspberry Pi e l'opzione W ha il WiFi integrato, mentre il Seeed Pi HAT costa meno di $ 10, ha LED integrati e un pulsante utente. Pi HAT sono schede di estensione che si collegano direttamente al Raspberry Pi effettuando una procedura di assemblaggio molto semplice. Qualsiasi versione Pi sarebbe più che adatta per il lavoro e il microfono scelto può essere sostituito, anche se ho utilizzato i LED integrati in questa build.
È facile verificare se una radio o una TV funzionerebbero per te. Sarà più probabilmente descritto come "DLNA abilitato" o simile. Questo utilizza uPNP per comunicare. Su un PC Windows, seleziona un file mp3 e "Trasmetti su dispositivo". Se il tuo dispositivo viene visualizzato e puoi riprodurre il file, sei a posto.
Ho diviso il software in 2 script python, checkFreezer.py per verificare se è stato attivato un avviso di congelamento e raiseAlarm.py per attivare l'allarme. Questi script potrebbero essere sviluppati e testati separatamente e possono essere facilmente adattati o sostituiti per diversi metodi di attivazione dell'allarme dei microfoni.
Forniture
- Software -https://github.com/wapringle/freezer-alarm
- Lampone PI Zero W
- Seeed ReSpeaker 2-Mics Pi HAT
- Radio abilitata uPNP
Passaggio 1: progettazione del rilevatore
Quando la porta del congelatore viene lasciata aperta e la temperatura aumenta, il congelatore emette un segnale acustico "bip bip bip". In comune con la maggior parte dei segnali acustici elettronici, questa è una frequenza singola. L'idea è di campionare l'ingresso audio, eseguire una Fast Fourier Transform (FFT) che trasforma un segnale basato sul tempo in uno basato sulla frequenza, in altre parole scompone un segnale per visualizzare le diverse frequenze nel segnale. Guarda l'analizzatore di spettro Raspberry Pi Instructable con striscia LED RGB Possiamo cercare un picco alla frequenza del cicalino e attivare l'allarme quando il cicalino è stato attivo per un po' di tempo.
Questo rilevatore ha 2 requisiti
- Dovrebbe rilevare il cicalino, anche in presenza di rumore ambientale (eliminare i falsi negativi)
- Non dovrebbe essere attivato dal rumore ambientale (eliminare i falsi positivi)
Ho deciso che eseguire un aspirapolvere nel ripostiglio sarebbe stato un buon test. Non dovrebbe far scattare l'allarme e l'allarme dovrebbe essere attivato quando il cicalino del congelatore si spegne e l'Hoover è in funzione.
Passaggio 2: configurazione del rilevatore
Con il mio telefono ho prelevato campioni audio come file WAV del solo cicalino del congelatore, con uno sfondo rumoroso e con Hoover in funzione. Ho adattato il codice per eseguire la FFT dal post Reading Audio Stream for FFT (In caso di dubbio, plagarise) e ho usato lo script fourierTest.py per tracciare campioni grezzi e trasformati di Fourier del cicalino in sfondi silenziosi, rumorosi e molto rumorosi. Il picco di livello alla frequenza 645 è pronunciato nel primo grafico ed è ancora significativo con uno sfondo molto rumoroso.
Passaggio 3: costruzione del rilevatore
Assemblaggio del rilevatore
Molto semplice. Il Pi W è dotato di Wi-Fi integrato e l'HAT è collegato direttamente ai pin GPIO sul Pi. La configurazione del software richiede i passaggi
- Installa la distribuzione raspbian su Raspberry Pi. Ci sono un sacco di guide su questo che possono spiegarlo molto meglio di me.
- Imposta il Wifi (idem sopra)
- Ha bisogno del pacchetto alsa installato
$ sudo apt-get install libasound-dev
$ pip install pyalsaaudio
- Collega il CAPPELLO al PI. lampone
- Segui le istruzioni sul sito web del seed per installare i driver per HAT.
- Eseguire la diagnostica seed per verificare che l'HAT funzioni e sia configurato correttamente.
Il programma del rilevatore legge un blocco di dati come campione dal microfono, esegue l'FFT e decide se ha rilevato o meno il segnale acustico nel campione. Ho cercato di rendere il blocco il più lungo possibile diminuendo la frequenza di campionamento audio a 16kHz e utilizzando il buffer più grande che il lettore avrebbe accettato. Ero preoccupato che il calcolo FFT potesse causare la caduta dei frame, ma ciò non è accaduto.
Avere campioni preregistrati sul mio telefono ha reso la costruzione del rilevatore molto più semplice in quanto ho potuto fare la costruzione completa sul banco prima di testare in situ dal congelatore.
Addestrare il rilevatore
Il rilevatore è stato addestrato scansionando ogni campione quando la registrazione WAV del cicalino è stata riprodotta al rilevatore. Il programma emette la posizione nello spettro FFT con il livello di potenza più alto (la frequenza di picco), insieme al livello di quella frequenza di picco. Era semplice trovare la frequenza del cicalino e il livello di potenza che stava emettendo.
Ci sono 2 modi per rilevare se si è verificato un segnale acustico:-
- La frequenza del cicalino era la frequenza di picco nel campione?
- oppure il livello di potenza alla frequenza del cicalino era sopra una soglia?
Entrambi i metodi hanno funzionato in un campione silenzioso, ma il secondo era migliore con un campione rumoroso, quindi l'ho usato.
A volte un campione copriva un segnale acustico, a volte era tra i segnali acustici e dopo ogni 3 segnali acustici c'era una lunga pausa prima dei segnali acustici successivi. Per rilevare in modo affidabile che si è verificata una serie di segnali acustici, ogni campione ha avuto un voto positivo se è stato rilevato un segnale acustico e un voto negativo in caso contrario. Questi voti sono stati ponderati per impostare un conteggio che aumentasse con un segnale acustico e decadesse lentamente tra le volte. Una volta che il conteggio ha raggiunto una soglia, l'allarme potrebbe essere attivato. Se il rumore casuale fosse rilevato come un segnale acustico, il conteggio ritornerebbe a zero.
Abbiamo bisogno quindi dei pesi per l'upvote e il downvote insieme alla soglia. Questo l'ho fatto per tentativi ed errori su un numero di campioni. Non avevo bisogno di determinare l'effettiva frequenza del cicalino, ho solo cercato la frequenza di spicco nello spettro fft.
Passaggio 4: inviare un messaggio alla radio
Lanciare l'allarme è stato fatto con uno script separato. Il suo compito è accendere la radio se necessario, entrare in qualunque cosa la radio stia trasmettendo e ripetere il messaggio di allarme finché la radio non si spegne di nuovo. Ho dovuto decodificare il protocollo uPnP utilizzato poiché avevo grossi problemi a ottenere informazioni o esempi affidabili. Un paio di riferimenti che ho trovato utili sono stati
- www.electricmonk.nl/log/2016/07/05/exploring-upnp-with-python/ Questo ha una bella panoramica di come tutto si combina
- developer.sony.com/develop/audio-control-api/get-started/browse-dlna-file.
- stackoverflow.com/questions/28422609/how-to-send-setavtransporturi-using-upnp-c/35819973
Ho usato Wireshark in esecuzione su un PC Windows per deselezionare la sequenza di messaggi durante la riproduzione di un file di esempio dal mio PC sulla radio, e dopo un po' di armeggiare ho ottenuto una sequenza di comandi che ha funzionato. Questo è
- Avvia un server web popup per servire il messaggio di avviso quando la radio lo richiede
- Imposta il livello del volume su ALTO (il messaggio di avviso dovrebbe attirare l'attenzione di tutti)
- Passa l'uri del messaggio di avviso alla radio
- Interroga la radio fino a quando lo stato corrente è "STOPPED"
- Porta la radio a "PLAY" l'uri
- Ripetere gli ultimi 2 passaggi fino a quando lo stato corrente è "NESSUN MEDIA PRESENTE", il che significa che l'allarme è stato riconosciuto spegnendo la radio
- Infine chiudi il server web ed esci.
Questo è lo script raiseAlarm.py
Passaggio 5: fai da te
Il modello "rilevatore" e "genera allarme" non è solo per i congelatori, potrebbe essere utile ovunque sia necessario trasmettere un allarme automatico attraverso un altro supporto. Se questo fosse di interesse, sentiti libero di fare un tentativo.
Configurazione del PI Zero W, incluso il microfono
- Assemblare l'hardware come nel passaggio 3
- Scarica gli script di allarme freezer da questo Instructable o dal repository git che include alcune tracce bonus
$ git clone
È inoltre necessario installare il software per utilizzare i LED APA102 integrati. Ho incluso una copia di apa102.py nella directory di lavoro di git
Allena il tuo rilevatore
Ho aggiunto un'opzione di formazione allo script checkFreezer.py. Questo lo esegue autonomamente e stampa una diagnostica sulla riga di comando, ma prima è necessario registrare alcuni campioni dell'allarme in un ambiente silenzioso come file WAV e fare lo stesso in uno rumoroso. Per completare l'addestramento è necessario prima trovare la frequenza FFT con il livello più alto (la "frequenza di picco") e quindi un livello di soglia per quella frequenza per impostare un trigger. Per fare ciò, esegui lo script checkFreezer in modalità allenamento, con l'opzione '-t' e riproduci la registrazione dell'allarme.
$ python checkFreezer.py -t
Questo esegue lo script in modalità training. Stampa "pronto" quando il seed HAT è stato inizializzato e il LED diventa verde, quindi una riga per ogni rumore non banale che sente, ad es.
$ python checkFreezer.py -t
Pronto frequenza di picco 55 trigger livello 1 attivato? Falsa frequenza di picco 645 livello di trigger 484 attivato? Falsa frequenza di picco 645 livello di trigger 380 attivato? falso
La frequenza di picco è, in questo caso, 645 e quella diventa la frequenza di trigger. Ora per ottenere il livello di trigger, riesegui checkFreezer, impostando il trigger
$ python checkFreezer.py -t --trigger=645
Pronto frequenza di picco 645 livello di trigger 1273 attivato? Falsa frequenza di picco 645 livello di trigger 653 attivato? Falsa frequenza di picco 645 livello di trigger 641 attivato? Falsa frequenza di picco 645 livello di trigger 616 attivato? falso
Infine abbiamo bisogno di una soglia di attivazione che si attiva quando viene rilevato un segnale acustico, ma ignora il rumore, ad es
$ python checkFreezer.py -t --trigger=645 --threshold=500
Pronto frequenza di picco 645 livello di trigger 581 attivato? Vera frequenza di picco 645 livello di trigger 798 attivato? Vera frequenza di picco 645 livello di trigger 521 attivato? Vero
Prova questo contro un paio di campioni rumorosi e dovresti essere in grado di stabilire un valore di soglia che discrimina tra il suono del cicalino e il rumore ambientale. Dovresti anche vedere il LED diventare rosso quando il segnale acustico viene riprodotto per alcuni secondi. Se è troppo veloce/lento, modifica le impostazioni nello script
Collegamento alla radio
Per configurare gli script per la propria configurazione, è necessario trovare l'indirizzo IP e il numero di porta utilizzati dal dispositivo per i servizi UPnP. La configurazione della radio dovrebbe fornire questi. Il numero di porta predefinito è 8080 e sarebbe una sorpresa se fosse diverso.
Ho fornito un messaggio di allarme predefinito, freezer.mp3. Sentiti libero di sostituire con il tuo messaggio.
Modifica lo script con gli indirizzi IP appropriati ed esegui lo script.
$ python raiseAlarm.py
Se tutto va bene, il messaggio di allarme rumoroso e irritante esploderà dalla radio fino a quando la radio non si spegne, annullando l'allarme.
Mentre lo script è in esecuzione esegue un mini server web per servire l'mp3 di allarme alla radio, probabilmente un problema di sicurezza, ma è attivo solo durante la riproduzione del messaggio di allarme.
In diretta
Rimuovi il flag di addestramento "-t" ed esegui checkFreezer con i tuoi valori, ad es
$ python checkFreezer.py --trigger=645 --threshold=200
Per farlo partire al riavvio, aggiungi a /etc/rc.local, cd /home/pi/allarme-congelatore
(python checkFreezer.py --trigger=645 --threshold=200 > /tmp/freezer 2> /tmp/freezererror &) & exit 0
Il LED verde si accenderà e sarai pronto per l'azione. Riproduci la registrazione del tuo segnale acustico di allarme e dopo pochi secondi il LED diventerà rosso e il messaggio di allarme verrà riprodotto sulla tua radio.
Finalmente
Posizionare il PI in un luogo vicino al congelatore, fuori mano e vicino a un alimentatore. Accendere e il LED verde dovrebbe accendersi. Testare l'attivazione dell'allarme lasciando la porta aperta. La luce dovrebbe diventare rossa e il messaggio di allarme viene riprodotto sulla radio.
Successo !! L'hai fatto. Concedetevi un long drink con ghiaccio dal freezer, ma non dimenticate di chiudere la porta del freezer!
Consigliato:
Riparazione e aggiornamento del frigorifero/congelatore (Bosch KSV29630): 5 passaggi
Riparazione e aggiornamento del frigorifero/congelatore (Bosch KSV29630): riparazione e aggiornamento; Aggiorna anziché sostituire & Rebuy !Sintomi: quando il frigorifero cerca di accendere il compressore, a volte funziona, a volte fallisce con la spia verde della temperatura lampeggiante. Potrebbe riuscire ad avviare il compressore ma dopo
Allarme impianto allarme sete: 13 passaggi
Allarme sete per le piante: devo confessare: sono un orribile genitore vegetale. È bello togliermelo dal petto. Non riesco a capire se sta colpendo la fotosintesi un po 'troppo forte o sta andando leggero con il vecchio H2O. Sembra che niente di ciò che farò manterrà questi tizi
Tutorial: come attivare l'allarme della porta utilizzando l'allarme del sensore dell'interruttore magnetico MC-18: 3 passaggi
Tutorial: come creare un allarme porta utilizzando l'allarme del sensore dell'interruttore magnetico MC-18: Ciao ragazzi, sto per fare un tutorial sull'allarme del sensore dell'interruttore magnetico MC-18 che funziona in modalità normalmente chiusa. Ma prima, lasciate che vi spieghi in breve cosa si intende per normalmente vicino. Esistono due tipi di modalità, normalmente aperta e normalmente chiusa
Congelatore torcia: 11 passaggi
Congelatore torcia: un piccolo congelatore portatile realizzato con vecchie torce elettriche che manterrà le cose congelate come cubetti di ghiaccio e piccoli snack per uso portatile, può anche essere usato come impacco di ghiaccio
Allarme interruzione di corrente per il congelatore: 6 passaggi (con immagini)
Allarme interruzione di corrente per il congelatore: con un congelatore nel seminterrato e il rischio di carne marcia a causa di un fusibile bruciato mentre siamo via, ho progettato questo semplice circuito di allarme in modo che i nostri vicini vengano avvisati di riparare il fusibile. Come si può vedere nella foto il campanello della porta suona dal