Índice:

Relé de alarme do freezer: 5 etapas
Relé de alarme do freezer: 5 etapas

Vídeo: Relé de alarme do freezer: 5 etapas

Vídeo: Relé de alarme do freezer: 5 etapas
Vídeo: SCARED TO DEATH! But I didn’t understand A THING! 2024, Julho
Anonim
Relé de alarme de freezer
Relé de alarme de freezer

Nosso freezer fica em uma despensa, isolada de nossa área de estar. Ocasionalmente, a porta do freezer não fecha corretamente e o alarme dispara. O problema é que não podemos ouvir se estivermos em nosso espaço de vida. Como recebemos uma mensagem de que a porta do freezer está aberta? Este é um problema comum, temos dispositivos em nossas casas que falam conosco, mas o que acontece se não podemos ouvi-los por qualquer motivo. Comecei isso como um pouco divertido, mas pode ser útil em uma aplicação mais séria.

Este problema tem 2 partes. Precisamos de um método para detectar se o alarme disparou e de um método para retransmitir esse fato para o nosso espaço residencial. O projeto que decidi foi usar um Raspberry Pi para ouvir o alarme do freezer disparando e, em seguida, enviar uma mensagem de alarme sonoro para o meu rádio doméstico, que está habilitado para uPNP. Plug and Play universal (UpnP) é um padrão para descobrir e interagir com serviços oferecidos por vários dispositivos em uma rede, incluindo servidores de mídia e players, embora eu não ache que os freezers foram concebidos quando o padrão foi desenvolvido. A mensagem de advertência era alta e irritante e se repetia indefinidamente até que o rádio fosse desligado.

Escolhi detectar o alarme com um Raspberry Pi Zero W e Seeed ReSpeaker 2-Mics Pi HAT O Raspberry PI Zero é uma versão de baixo custo do Raspberry Pi e a opção W tem WiFi integrado, enquanto o Seeed Pi HAT é vendido por menos de $ 10, tem LEDs integrados e um botão de usuário. Pi HAT são placas de extensão que se conectam diretamente ao Raspberry Pi, tornando um procedimento de montagem muito simples. Qualquer versão Pi seria mais do que capaz para o trabalho, e o microfone escolhido pode ser substituído, embora eu tenha feito uso dos LEDs embutidos nesta construção.

É fácil verificar se um rádio ou TV funcionaria para você. É mais provável que seja descrito como "DLNA habilitado" ou semelhante. Isso usa uPNP para se comunicar. Em um PC com Windows, selecione um arquivo mp3 e “Cast to Device”. Se o seu dispositivo for exibido e você puder reproduzir o arquivo, está pronto para prosseguir.

Eu divido o software em 2 scripts python, checkFreezer.py para verificar se um alerta de freezer foi acionado e aumentoAlarm.py para disparar o alarme. Esses scripts podem ser desenvolvidos e testados separadamente e podem ser facilmente adaptados ou substituídos por diferentes métodos de acionamento de alarme de microfones.

Suprimentos

  • Software -https://github.com/wapringle/freezer-alarm
  • Framboesa PI Zero W
  • VI ReSpeaker 2-Mics Pi HAT
  • rádio habilitado para uPNP

Etapa 1: Projetando o Detector

Quando a porta do freezer é deixada aberta e a temperatura aumenta, o freezer emite um alarme sonoro de "bip, bip, bip". Em comum com a maioria dos bipes eletrônicos, esta é uma frequência única. A ideia é fazer uma amostra da entrada de áudio, realizar uma Fast Fourier Transform (FFT) que transforma um sinal baseado em tempo em um sinal baseado em freqüência, ou seja, quebra um sinal para mostrar as diferentes freqüências no sinal. Veja o Instructable Raspberry Pi Spectrum Analyzer com RGB LED Strip Podemos procurar um pico na frequência da campainha e disparar o alarme quando a campainha estiver ativa por algum tempo.

Este detector tem 2 requisitos

  • Deve detectar o buzzer, mesmo na presença de ruído ambiente (eliminar falso negativo)
  • Não deve ser acionado por ruído ambiente (elimine falsos positivos)

Decidi que rodar um aspirador na despensa seria um bom teste. Não deve disparar o alarme, e o alarme deve ser disparado quando a campainha do freezer toca e o Hoover está funcionando.

Etapa 2: Configurando o Detector

Configurando o Detector
Configurando o Detector
Configurando o Detector
Configurando o Detector
Configurando o Detector
Configurando o Detector

Com meu telefone, peguei amostras de áudio como arquivos WAV da campainha do freezer sozinho, com um fundo barulhento e com o Hoover funcionando. Adaptei o código para realizar o FFT do post Reading Audio Stream for FFT (Quando em dúvida, plagarise) e usei o script fourierTest.py para plotar amostras brutas e transformadas de Fourier da campainha em fundos silenciosos, barulhentos e muito barulhentos. O pico de nível na frequência 645 é pronunciado no primeiro gráfico e ainda é significativo com um fundo muito ruidoso.

Etapa 3: Construindo o Detector

Montagem do detector

Muito simples. O Pi W vem com Wifi integrado e o HAT é conectado diretamente aos pinos GPIO do Pi. A configuração do software requer as etapas

  • Instale a distro do raspbian no Raspberry Pi. Existem muitos guias sobre isso que podem explicar muito melhor do que eu.
  • Configure o Wifi (idem acima)
  • Necessita do pacote alsa instalado

$ sudo apt-get install libasound-dev

$ pip install pyalsaaudio

  • Conecte o HAT ao framboesa PI
  • Siga as instruções no site seeed para instalar os drivers para o HAT.
  • Execute o diagnóstico de semente para verificar se o HAT está funcionando e configurado corretamente.

O programa detector lê um bloco de dados como uma amostra do microfone, faz o FFT e decide se detectou ou não o buzzer na amostra. Tentei deixar o bloqueio o mais longo possível, diminuindo a taxa de amostragem de áudio para 16 kHz e usando o maior buffer que o leitor aceitaria. Eu estava preocupado que o cálculo FFT pudesse causar a perda de frames, mas isso não aconteceu.

Ter amostras pré-gravadas em meu telefone tornou a construção do detector muito mais fácil, pois eu poderia fazer a construção completa na bancada antes de testar no local pelo freezer.

Treinar o detector

O detector foi treinado pela varredura de cada amostra quando a gravação WAV da campainha foi tocada para o detector. O programa produz a posição no espectro FFT com o nível de potência mais alto (a frequência de pico), junto com o nível dessa frequência de pico. Foi simples encontrar a frequência da campainha e o nível de potência que ela estava emitindo.

Existem 2 maneiras de detectar se um bipe ocorreu: -

  1. A frequência da campainha era a frequência de pico na amostra?
  2. ou o nível de potência na frequência da campainha estava acima de um limite?

Qualquer um dos métodos funcionou em uma amostra silenciosa, mas o segundo foi melhor com uma amostra barulhenta, então usei-o.

Às vezes, uma amostra cobria um bipe, às vezes era entre bipes e, a cada 3 bipes, havia uma longa pausa antes dos próximos bipes. Para detectar com segurança que um conjunto de bipes ocorreu, cada amostra teve uma votação positiva se um bipe foi detectado e uma votação negativa se não. Esses votos foram ponderados para definir uma contagem que aumentaria com uma amostra de bipe e diminuiria lentamente entre os tempos. Assim que a contagem atingir um limite, o alarme pode ser disparado. Se um ruído aleatório fosse detectado como uma amostra de bipe, a contagem voltaria a zero.

Precisamos então dos pesos para a votação positiva e negativa junto com o limite. Fiz isso com tentativa e erro em várias amostras. Não precisei determinar a frequência real da campainha, apenas procurei a frequência de destaque no espectro fft.

Etapa 4: Enviando uma mensagem para o rádio

O acionamento do alarme foi feito com um script separado. Sua função é ligar o rádio se necessário, interromper o que quer que o rádio esteja tocando e repetir a mensagem de alarme até que o rádio seja desligado novamente. Tive de fazer a engenharia reversa do protocolo uPnP usado, pois tive grande dificuldade em obter informações ou exemplos confiáveis. Algumas referências que achei úteis foram

  • www.electricmonk.nl/log/2016/07/05/exploring-upnp-with-python/ Isso tem uma boa visão geral de como tudo se encaixa
  • developer.sony.com/develop/audio-control-api/get-started/browse-dlna-file.
  • stackoverflow.com/questions/28422609/how-to-send-setavtransporturi-using-upnp-c/35819973

Usei o Wireshark em execução em um PC com Windows para desmarcar a sequência de mensagens ao reproduzir um arquivo de amostra do meu PC no rádio e, depois de mexer um pouco, consegui uma sequência de comandos que funcionou. Isto é

  • Lance um servidor web popup para servir a mensagem de aviso quando o rádio pedir por isso
  • Defina o nível de volume para ALTO (a mensagem de aviso deve atrair a atenção de todos)
  • Passe o uri da mensagem de aviso para o rádio
  • Sondar o rádio até que o estado atual seja "PARADO"
  • Pegue o rádio para "TOCAR" o uri
  • Repita as 2 últimas etapas até que o estado atual seja "SEM MÍDIA PRESENTE", o que significa que o alarme foi confirmado desligando o rádio
  • Finalmente feche o servidor web e saia.

Este é o script raiseAlarm.py

Etapa 5: Faça você mesmo

Fazendo Você Mesmo
Fazendo Você Mesmo

O modelo de "detector" e "aumento de alarme" não é apenas para freezers, ele pode ser útil em qualquer lugar onde um alarme automatizado precise ser retransmitido por outro meio. Se for do seu interesse, sinta-se à vontade para experimentar.

Configurando o PI Zero W, incluindo o microfone

  • Monte o hardware como na etapa 3
  • Baixe os scripts de alarme de freezer deste Instructable ou do repositório git que inclui algumas faixas bônus

$ git clone

Você também precisa instalar o software para usar os LEDs APA102 integrados. Incluí uma cópia de apa102.py no diretório de trabalho git

Treinar seu detector

Eu adicionei uma opção de treinamento ao script checkFreezer.py. Isso o executa de forma autônoma e imprime um diagnóstico na linha de comando, mas primeiro você precisa registrar algumas amostras do alarme em um ambiente silencioso como arquivos WAV e fazer o mesmo em um ambiente barulhento. Para completar o treinamento, você precisa primeiro encontrar a frequência FFT com o nível mais alto (a "frequência de pico") e, em seguida, um nível de limite para essa frequência para definir um acionador. Para fazer isso, execute o script checkFreezer no modo de treinamento, com a opção ‘-t’ e reproduza a gravação do alarme.

$ python checkFreezer.py -t

Isso executa o script no modo de treinamento. Ele imprime "pronto" quando o HAT de origem foi inicializado e o LED fica verde, em seguida, uma linha para cada ruído não comum que ouve, por exemplo

$ python checkFreezer.py -t

O nível de disparo 1 da frequência de pico 55 foi disparado? Nível de disparo 484 de frequência de pico falso 645 disparado? Falsa frequência de pico 645 nível de disparo 380 disparado? Falso

A frequência de pico é, neste caso, 645 e isso se torna a frequência de disparo. Agora, para obter o nível do gatilho, execute novamente o checkFreezer, definindo o gatilho

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

Nível de disparo de frequência de pico 645 pronto 1273 disparado? Nível de disparo 653 de frequência de pico falso 645 disparado? Nível de disparo 641 de frequência de pico falso 645 disparado? Nível de disparo 616 de frequência de pico falso 645 disparado? Falso

Finalmente, precisamos de um limite de gatilho que dispara quando um bipe é detectado, mas ignora o ruído, por exemplo

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

O nível de disparo 581 da frequência de pico 645 foi disparado? Frequência de pico real 645 nível de disparo 798 disparado? Frequência de pico real 645 nível de disparo 521 disparado? Verdade

Teste isso com algumas amostras com ruído e você deve ser capaz de estabelecer um valor de limite que discrimina entre o som do bipe e o ruído ambiente. Você também deve ver o LED ficar vermelho quando a gravação do bipe for reproduzida por alguns segundos. Se for muito rápido / lento, edite as configurações no script

Conectando ao rádio

Para configurar os scripts para sua própria configuração, você precisa encontrar o endereço IP e o número da porta que seu dispositivo está usando para serviços UPnP. A configuração do rádio deve fornecer isso. O número da porta padrão é 8080 e seria uma surpresa se fosse diferente.

Eu forneci uma mensagem de alarme padrão, freezer.mp3. Sinta-se à vontade para substituir por sua própria mensagem.

Edite o script com os endereços IP apropriados e execute o script.

$ python raiseAlarm.py

Se tudo estiver bem, a mensagem de alarme alta e irritante vai explodir de seu rádio até que o rádio seja desligado, cancelando o alarme.

Enquanto o script está em execução, ele executa um minisservidor da web para enviar o mp3 do alarme para o rádio, possivelmente um problema de segurança, mas só fica ativo enquanto a mensagem de alarme é reproduzida.

Going Live

Remova o sinalizador de treinamento ‘-t’ e execute checkFreezer com seus próprios valores, por exemplo

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

Para fazer com que ele inicie na reinicialização, adicione ao arquivo /etc/rc.local, cd / home / pi / freezer-alarme

(python checkFreezer.py --trigger = 645 --threshold = 200> / tmp / freezer 2> / tmp / freezererror &) e saída 0

O LED verde acenderá e você estará pronto para a ação. Reproduza a gravação do seu bipe de alarme e, após alguns segundos, o LED ficará vermelho e a mensagem de alarme será reproduzida no seu rádio.

Finalmente

Posicione o PI em um local próximo ao freezer, fora do caminho e próximo a uma fonte de alimentação. Ligue e o LED verde deve acender. Teste o disparo do alarme deixando a porta aberta. A luz deve ficar vermelha e a mensagem de alarme tocar no rádio.

Sucesso !! Você conseguiu. Mime-se com uma longa bebida com gelo do congelador, mas não se esqueça de fechar a porta do congelador!

Recomendado: