Taula de continguts:

Relé d'alarma congelador: 5 passos
Relé d'alarma congelador: 5 passos

Vídeo: Relé d'alarma congelador: 5 passos

Vídeo: Relé d'alarma congelador: 5 passos
Vídeo: Carel PJ easy 3 rele - alarm E1 2024, Juliol
Anonim
Relé d'alarma congelador
Relé d'alarma congelador

El nostre congelador es troba en un safareig aïllat del nostre espai habitable. De vegades, la porta del congelador no es tanca correctament i l’alarma s’activa. El problema és que no el podem escoltar si som al nostre espai vital. Com rebem el missatge que la porta del congelador està oberta? Aquest és un problema habitual, tenim dispositius a casa que ens parlen, però què passa si no els sentim per qualsevol motiu. Vaig començar això com una mica de diversió, però pot ser útil en una aplicació més seriosa.

Hi ha dues parts d’aquest problema, necessitem un mètode per detectar l’alarma que hagi saltat i un mètode per transmetre aquest fet al nostre espai vital. El disseny en què em vaig decidir era utilitzar un Raspberry Pi per escoltar l’aparició de l’alarma del congelador i, després, enviar un missatge d’alarma sonora a la meva ràdio domèstica que està activada per uPNP. Universal Plug and Play (UpnP) és un estàndard per descobrir i interactuar amb els serveis oferts per diversos dispositius de la xarxa, inclosos els servidors i reproductors multimèdia, tot i que no crec que es contemplessin congeladors quan es va desenvolupar l’estàndard. El missatge d’advertència es va fer fort i irritant i es repeteix sense parar fins que la ràdio s’apaga.

Vaig triar detectar l’alarma amb un Raspberry Pi Zero W i Seeed ReSpeaker 2-Mics Pi HAT. El Raspberry PI Zero és una versió de baix cost del Raspberry Pi i l’opció W té WiFi integrat, mentre que el Seeed Pi HAT es ven per menys de 10 dòlars, té LED integrats i un botó d'usuari. Les Pi HAT són targetes d’extensió que es connecten directament al Raspberry Pi fent un procediment de muntatge molt senzill. Qualsevol versió Pi seria més que capaç per al treball i es pot substituir el micròfon escollit, tot i que he fet ús dels LED integrats en aquesta compilació.

És fàcil comprovar si us funcionaria una ràdio o un televisor. És més probable que es descrigui com a "DLNA activat" o similar. Això utilitza uPNP per comunicar-se. En un PC amb Windows, seleccioneu un fitxer mp3 i "Emet al dispositiu". Si el vostre dispositiu apareix i podeu reproduir el fitxer, esteu bé.

He dividit el programari en 2 scripts Python, checkFreezer.py per comprovar si s'ha activat una alerta de congelador i raiseAlarm.py per activar l'alarma. Aquests scripts es podrien desenvolupar i provar per separat i es poden adaptar o substituir fàcilment per diferents mètodes d’alarma de micròfons.

Subministraments

  • Programari -https://github.com/wapringle/freezer-alarm
  • Raspberry PI Zero W
  • Seeed ReSpeaker 2-Mics Pi HAT
  • ràdio habilitada per uPNP

Pas 1: dissenyar el detector

Quan la porta del congelador es deixa oberta i la temperatura augmenta, el congelador emet una alarma sonora de "pit de pit". Comú amb la majoria de sons sonors electrònics, es tracta d’una única freqüència. La idea és mostrar l’entrada d’àudio, realitzar una transformada ràpida de Fourier (FFT) que transforma un senyal basat en el temps en un de freqüència, és a dir, descompon un senyal per mostrar les diferents freqüències del senyal. Consulteu l’analitzador d’espectres Raspberry Pi instructiu amb tira LED RGB. Podem buscar un pic a la freqüència del timbre i activar l’alarma quan el timbre estigui actiu des de fa temps.

Aquest detector té 2 requisits

  • Ha de detectar el brunzidor, fins i tot en presència de soroll ambiental (eliminar falsos negatius)
  • No ha de ser provocat pel soroll ambiental (elimineu els falsos positius)

Vaig decidir que fer un Hoover al safareig seria una bona prova. No hauria de desencadenar l'alarma i l'alarma s'hauria de disparar quan s'activi el timbre del congelador i el Hoover en funcionament.

Pas 2: Configuració del detector

Configuració del detector
Configuració del detector
Configuració del detector
Configuració del detector
Configuració del detector
Configuració del detector

Amb el telèfon, vaig agafar mostres d’àudio només com a fitxers WAV del brumador del congelador, amb un fons sorollós i amb el Hoover en funcionament. Vaig adaptar el codi per realitzar el FFT des del post Reading Audio Stream per a FFT (en cas de dubte, plagarise) i vaig utilitzar el script fourierTest.py per traçar mostres en brut i transformades de Fourier del brunzidor en fons tranquils, sorollosos i molt sorollosos. La pujada de nivell a la freqüència 645 es pronuncia a la primera trama i encara és significativa amb un fons molt sorollós.

Pas 3: construcció del detector

Muntatge del detector

Molt simple. El Pi W inclou Wi-Fi integrat i el HAT es connecta directament als pins GPIO del Pi. La configuració del programari requereix els passos necessaris

  • Instal·leu la distribució raspbian al Raspberry Pi. Hi ha moltes guies sobre això que poden explicar-ho molt millor.
  • Configureu el Wifi (ídem més amunt)
  • Necessita el paquet alsa instal·lat

$ sudo apt-get install libasound-dev

$ pip install pyalsaaudio

  • Connecteu el HAT al gerd PI
  • Seguiu les instruccions del lloc web consultat per instal·lar els controladors del HAT.
  • Executeu els diagnòstics que es veuen per comprovar que HAT funciona i està configurat correctament.

El programa detector llegeix un bloc de dades com una mostra del micròfon, fa el FFT i decideix si ha detectat o no el brunzidor de la mostra. Vaig intentar fer el bloc el major temps possible reduint la freqüència de mostra d’àudio a 16 kHz i fent servir el buffer més gran que el lector acceptava. Em preocupava que el càlcul FFT pogués fer caure els fotogrames, però això no va passar.

Tenir mostres preenregistrades al telèfon va fer que la construcció del detector fos molt més senzilla, ja que podia fer la construcció completa al banc abans de provar in situ el congelador.

Entrenament del detector

El detector es va entrenar escanejant cada mostra quan es va reproduir la gravació WAV del brunzidor al detector. El programa emet la posició en l'espectre FFT amb el nivell de potència més alt (la freqüència de pic), juntament amb el nivell d'aquesta freqüència de pic. Era senzill trobar la freqüència del brunzidor i el nivell de potència que emetia.

Hi ha dues maneres de detectar si s'ha produït un pit: -

  1. La freqüència del brunzidor era la freqüència màxima de la mostra?
  2. o el nivell de potència de la freqüència del brunzidor era superior a un llindar?

Qualsevol dels dos mètodes funcionava en una mostra tranquil·la, però el segon era millor amb una mostra sorollosa, així que ho vaig fer servir.

De vegades, una mostra cobria un so, de vegades era entre so i, després de cada 3 sons, hi havia una llarga pausa abans dels següents sons. Per detectar de manera fiable que s’havia produït un conjunt de sons, cada mostra tenia un vot positiu si es detectava un so i un vot negatiu si no. Aquests vots es van ponderar per establir un recompte que xocaria amb una mostra de so i que decauria lentament entre els dos temps. Un cop el recompte hagi assolit un llindar, es podria activar l'alarma. Si es detectés soroll aleatori com a mostra de so, el recompte tornaria a zero.

Aleshores necessitem els pesos del vot positiu i negatiu juntament amb el llindar. Això ho vaig fer amb proves i errors en diverses mostres. No calia determinar la freqüència del brunzidor real, sinó que he buscat la freqüència destacada en l’espectre fft.

Pas 4: enviant un missatge a la ràdio

Posar l'alarma es va fer amb un guió separat. La seva feina és encendre la ràdio si és necessari, irrompre en allò que estigui reproduint la ràdio i repetir el missatge d'alarma fins que la ràdio es torni a apagar. Vaig haver de fer un enginy invers del protocol uPnP utilitzat, ja que tenia grans problemes per obtenir informació o exemples fiables. Un parell de referències que vaig trobar útils van ser

  • www.electricmonk.nl/log/2016/07/05/exploring-upnp-with-python/ Això té una bona visió general de com encaixa tot
  • developer.sony.com/develop/audio-control-api/get-started/browse-dlna-file.
  • stackoverflow.com/questions/28422609/how-to-send-setavtransporturi-using-upnp-c/35819973

Vaig fer servir Wireshark que s’executava en un PC amb Windows per desmuntar la seqüència de missatges en reproduir un fitxer de mostra del meu PC a la ràdio i, després d’haver jugat una mica, vaig obtenir una seqüència d’ordres que funcionava. Això és

  • Inicieu un servidor web emergent per mostrar el missatge d'advertència quan la ràdio ho demani
  • Estableix el nivell de volum a LOUD (el missatge d’advertència hauria d’atreure l’atenció de tots).
  • Passeu els uri del missatge d’advertència a la ràdio
  • Enquesteu la ràdio fins que l'estat actual estigui "PARAT"
  • Feu que la ràdio "REPRODUEIX" els uri
  • Repetiu els darrers 2 passos fins que l'estat actual sigui "SENSE MEDI PRESENT", el que significa que s'ha detectat l'alarma en apagar la ràdio
  • Finalment tanqueu el servidor web i sortiu.

Aquest és l'script raiseAlarm.py

Pas 5: Feu-ho vosaltres mateixos

Fent-ho tu mateix
Fent-ho tu mateix

El model de "detector" i "alarma de pujada" no és només per als congeladors, sinó que podria ser útil en qualsevol lloc on calgui retransmetre una alarma automàtica mitjançant un altre mitjà. Si això seria d’interès, no dubteu a provar-ho.

Configuració del PI Zero W, inclòs el micròfon

  • Munteu el maquinari com al pas 3
  • Descarregueu els scripts d'alarma congelador des d'aquest instructiu o des del dipòsit git que inclou algunes pistes addicionals

$ git clone

També heu d’instal·lar el programari per utilitzar els LED APA102 integrats. He inclòs una còpia de apa102.py al directori de treball git

Entrena el teu detector

He afegit una opció de formació a l'script checkFreezer.py. Això l'executa de manera autònoma i imprimeix un diagnòstic a la línia d'ordres, però primer heu de gravar algunes mostres de l'alarma en un entorn tranquil com a fitxers WAV i fer el mateix en un de sorollós. Per completar l'entrenament, primer heu de trobar la freqüència FFT amb el nivell més alt (la "freqüència màxima") i, a continuació, un nivell llindar perquè aquesta freqüència estableixi un activador. Per fer-ho, executeu el script checkFreezer en mode d’entrenament, amb l’opció ‘-t’ i reproduïu la gravació de l’alarma.

$ python checkFreezer.py -t

Això executa el guió en mode d'entrenament. Imprimeix "llest" quan s'ha inicialitzat el HAT vist i el LED es posa de color verd, després una línia per a cada soroll no trivial que sent, per exemple

$ python checkFreezer.py -t

Llest de freqüència de pic 55 activat nivell 1 activat? S'ha activat el nivell 484 d'activació de la freqüència màxima falsa 645? S'ha activat un fals nivell de desencadenament de freqüència màxima 645? Fals

La freqüència màxima és, en aquest cas, de 645 i es converteix en la freqüència de desencadenament. Ara per obtenir el nivell d'activació, torneu a executar checkFreezer, configurant el disparador

$ python checkFreezer.py -t --trigger = 645

Llest de freqüència de pic 645 activat nivell 1273 activat? S'ha activat un nivell de desencadenament de freqüència màxima falsa 645? S'ha activat el nivell 641 d'activació de la freqüència màxima falsa 645? S'ha activat el nivell de disparador 645 de freqüència màxima falsa? Fals

Finalment, necessitem un llindar d'activació que s'activi quan es detecti un so, però que ignora el soroll, per exemple

$ python checkFreezer.py -t --trigger = 645 --threshold = 500

Llest de freqüència de pic 645 activat nivell 581 activat? S'ha activat el nivell 798 d'activació de la freqüència màxima 645? S'ha activat la freqüència màxima veritable 645, nivell 521? És cert

Proveu-ho amb un parell de mostres sorolloses i hauríeu de poder establir un valor llindar que discrimini entre el so del pitidor i el soroll ambiental. També hauríeu de veure el LED que es posa vermell quan es reprodueix la gravació del so durant uns segons. Si vol entrar amb rapidesa / lentitud, editeu la configuració de l'script

Connexió a la ràdio

Per configurar els scripts per a la vostra configuració, heu de trobar l'adreça IP i el número de port que utilitza el dispositiu per als serveis UPnP. La configuració de la ràdio hauria de proporcionar-los. El número de port per defecte és 8080 i seria una sorpresa si fos diferent.

He proporcionat un missatge d'alarma per defecte, freezer.mp3. No dubteu a substituir-lo pel vostre propi missatge.

Editeu l'script amb les adreces IP adequades i executeu-lo.

$ python raiseAlarm.py

Si tot està bé, el missatge d’alarma fort i irritant sortirà de la vostra ràdio fins que la ràdio s’apagui i cancel·larà l’alarma.

Mentre s’executa l’escriptura, s’executa un mini servidor web per servir l’alarma mp3 a la ràdio, possiblement un problema de seguretat, però només està actiu mentre es reprodueix el missatge d’alarma.

En directe

Elimineu el senyal d'entrenament "-t" i executeu checkFreezer amb els vostres propis valors, per exemple

$ python checkFreezer.py --trigger = 645 --threshold = 200

Per fer que comenci en reiniciar-lo, afegiu-lo a /etc/rc.local, cd / home / pi / congelador-alarma

(python checkFreezer.py --trigger = 645 --threshold = 200> / tmp / freezer 2> / tmp / freezererror &) i sortida 0

El LED verd s’encendrà i estarà llest per a l’acció. Reprodueix l’enregistrament del bip d’alarma i, al cap d’uns segons, el LED es posarà en vermell i el missatge d’alarma es reproduirà a la ràdio.

Finalment

Col·loqueu el PI en un lloc proper al congelador, fora del camí i mitjançant una font d'alimentació. Enceneu-vos i s’hauria d’encendre el LED verd. Proveu l’activació de l’alarma deixant la porta oberta. El llum s’ha de posar de color vermell i el missatge d’alarma es reprodueix a la ràdio.

Èxit !! Ho has fet. Preneu-vos una beguda llarga amb gel del congelador, però no oblideu tancar la porta del congelador.

Recomanat: