Assustar Trick-or-Treaters com um Soundbox ativado por movimento de DIY

É aquela época do ano novamente quando é considerado socialmente aceitável aterrorizar crianças pequenas e dar-lhes doces. Oh alegria

É aquela época do ano novamente quando é considerado socialmente aceitável aterrorizar crianças pequenas e dar-lhes doces.  Oh alegria
Propaganda

É aquela época do ano novamente quando é considerado socialmente aceitável aterrorizar crianças pequenas e dar-lhes doces. Oh alegria Estou aqui para tornar seu trabalho mais fácil, mostrando a você como fazer uma simples caixa de ressonância sensível ao movimento Raspberry Pi Halloween. Aqui está uma demonstração:

Aqui está o que você precisa

Provavelmente, a única parte que você ainda não tem é o sensor de movimento, uma parte pequena e barata que você deve encontrar em seu Microcenter ou Maplin local.

  • Raspberry Pi (qualquer modelo serve).
  • Sensor de movimento (~ $ 3).
  • Fios de conexão.
  • Alto-falante com fio (a maioria dos alto-falantes Bluetooth terá a opção de usar entrada de linha).
  • Cabo estéreo de 3, 5 mm, macho para macho.

Quando estiver pronto, você pode querer adicionar alguns efeitos de iluminação sincronizados Como Sincronizar Luzes Início e Música para o Halloween Como Sincronizar Luzes Home e Música para o Halloween Se você está hospedando uma festa em casa de Halloween ou quer a mais legal casa assombrada no bairro, fazendo suas luzes piscarem no tempo de música e efeitos sonoros é essencial. Leia mais também, mas neste tutorial vamos abordar apenas os sons assustadores!

Configurando

Estamos usando o Raspbian Jessie Lite e o Python 2.7, mas qualquer distro Linux que rode no seu Pi deve ficar bem. Deixei-o no nome de host padrão "raspberrypi.local", então comece a fazer login remotamente usando SSH (abra uma janela do Terminal se estiver no Mac. Veja como fazer o mesmo no Windows 4 Easy Ways to Use SSH In Windows 4 Maneiras Fáceis de Usar o SSH No Windows O SSH é a solução de fato para acessar com segurança terminais remotos no Linux e em outros sistemas semelhantes ao UNIX.Se você tiver um servidor SSH remoto que deseja acessar, terá que baixar um cliente SSH .... Leia mais) - ou se você optou por usar um Raspbian completo com GUI para desktop, fique à vontade para pular para atualização.

ssh [email protected] (enter raspberry as the password) sudo apt-get update sudo apt-get install python-pip sudo pip install gpiozero 

Isso instala uma biblioteca simples para trabalhar com os pinos GPIO em Python com muitos tipos de sensores e botões integrados. Conecte seu sensor com o pino de sinal no GPIO4, o VCC conectado a 5V e o GND conectado ao GND. Isso pode variar de acordo com o modelo exato, portanto, confirme com um diagrama de pinagem.

Diagrama GPIO de framboesa Pi
Crédito de imagem: raspberrypi.org

Meu estojo de Pi 2 da Pimoroni tem um diagrama de pinagem gravado a laser diretamente sobre ele.

Raspberry Pi Labeled Case

Agora vamos fazer nosso script de detecção de movimento.

 nano motion.py 

Colar em:

 from gpiozero import MotionSensor pir = MotionSensor(4) while True: if pir.motion_detected: print("Motion detected!") else: print ("No motion") 

Pressione CTRL-X e Y para salvar e sair e, em seguida, execute com:

 python motion.py 

Você deve ver a mensagem "sem movimento" repetida na tela até acenar com a mão na frente do sensor, quando ele permanecerá no "Movimento detectado!"

Movimento detectado no terminal

Se a mensagem não mudar, você está errado.

Se você estiver interessado em aprender mais sobre esta simples biblioteca GPIOZero, dê uma olhada nesta fantástica planilha.

Tocando som

Conecte seu alto-falante portátil e verifique se ele está ligado, se necessário. Nós vamos usar a biblioteca pygame para tocar sons, então vá em frente e instale:

 sudo apt-get install python-pygame 

Primeiro, precisamos de um arquivo de som para tocar. Se você estiver fazendo isso de dentro do ambiente de desktop, vá em frente e faça o download de um arquivo WAV ou OGG de algum lugar (encontrei uma boa seleção de sons de Halloween gratuitos aqui) e coloque-o em seu diretório pessoal. Eu sugiro downsampling primeiro e convertendo para um pequeno formato OGG de qualquer maneira.

Se você está se conectando remotamente e usando apenas a linha de comando, temos um pouco mais de dificuldade com alguns sites, já que o comando wget pode não pegar o arquivo real. Em vez disso, podemos baixá-lo localmente para nossa área de trabalho e usar o comando scp (cópia segura) para copiar na linha de comando. Você pode aprender mais sobre scp aqui, mas por enquanto, abra uma nova aba Terminal e digite:

 scp thunder.ogg [email protected]: 

Renomeie thunder.ogg conforme apropriado, mas não esqueça que final : (o comando será concluído sem ele, mas não fará o que queremos). Por padrão, isso transferirá o arquivo para o diretório pessoal do usuário do Pi.

Agora vamos modificar o script para tocar um som. Comece importando alguns novos módulos:

 import pygame.mixer from pygame.mixer import Sound 

Em seguida, logo após as instruções de importação existentes, nós repetiremos o mesmo som repetidamente para fins de teste. Deixe o resto do seu código de detecção de movimento como está por enquanto - ele simplesmente não rodará, já que ele ficará preso nesse loop de reprodução de som para sempre.

 pygame.init() pygame.mixer.init() #load a sound file, in the home directory of Pi user (no mp3s) thunder = pygame.mixer.Sound("/home/pi/thunder.ogg") while True: thunder.play() sleep(10) thunder.stop() 

Note que quando eu originalmente tentei este processo, o som se recusou a tocar e apenas clicou. O tamanho do arquivo ou taxa de bits foi o culpado: foi de 24 bits e mais de 5 MB para um clipe de 15 segundos. Escalar isso para 16 bits usando o conversor que eu criei acima fez tudo funcionar bem, e o tamanho foi reduzido para apenas 260KB!

Se você notar um chiado desagradável nos alto-falantes quando o aplicativo Python estiver em execução, mas não de outra forma, digite:

 sudo nano /boot/config.txt 

E adicione esta linha no final:

 disable_audio_dither=1 

Reinicie para que as alterações entrem em vigor. Ou não se incomode, uma vez que soou como chuva para mim de qualquer maneira.

Finalmente, vamos modificar o loop principal de verificação de movimento para reproduzir o som quando o movimento for detectado. Usaremos um atraso de 15 segundos para que todo o loop possa ser reproduzido e atuar como um buffer de spam para quando houver muito movimento ininterrupto.

 while True: if pir.motion_detected: print("Motion detected!") thunder.play() # ensure playback has been fully completed before resuming motion detection, prevents "spamming" of sound sleep(15) thunder.stop() else: print ("No motion") 

Começar automaticamente

Provavelmente, queremos configurá-lo em algum lugar com uma bateria e sem conexão com a Internet, portanto, o script precisa ser executado na reinicialização sem a necessidade de abrir uma linha de comando. Para fazer isso, usaremos o método mais simples possível: o crontab Como Agendar Tarefas no Linux com Cron e Crontab Como Agendar Tarefas no Linux com Cron e Crontab A capacidade de automatizar tarefas é uma daquelas tecnologias futuristas que já estão aqui . Todo usuário do Linux pode se beneficiar do agendamento de tarefas do sistema e do usuário, graças ao cron, um serviço em segundo plano fácil de usar. Consulte Mais informação . Tipo:

 sudo crontab -e 

Se esta for a primeira vez que executar este comando, começará perguntando qual editor usar. Eu escolhi a opção 2, para nano. Ele irá inicializar no seu editor escolhido, então adicione a seguinte linha:

 @reboot python /home/pi/motion.py & 

Isso significa que seu script motion.py será executado em todas as inicializações e fará isso silenciosamente (portanto, qualquer saída do script será ignorada). Reinicie para experimentar.

Se nada funcionar apesar de haver movimento, ou se você ouvir apenas um pequeno clique, talvez não tenha usado o caminho completo do arquivo ou o arquivo pode precisar ser convertido para uma taxa de bits menor e um tamanho de arquivo menor.

Adicionar mais sons

Tocar o mesmo efeito repetidamente é um pouco entediante, então vamos adicionar alguma aleatoriedade a ele. Faça o download de mais alguns sons de Halloween, lembrando-se de reduzi-los a um tamanho e taxa de bits razoáveis ​​e, em seguida, envie-os para o seu Pi usando scp como antes. Eu adicionei três tipos diferentes de grito.

Modifique o código para que, em vez de definir uma única variável pygame.mixer.Sound, criemos uma matriz de sons. Isso é simples com o Python, apenas coloque uma lista separada por vírgula deles com colchetes, assim:

 sounds = [ pygame.mixer.Sound("/home/pi/thunder.ogg"), pygame.mixer.Sound("/home/pi/scary_scream.ogg"), pygame.mixer.Sound("/home/pi/girl_scream.ogg"), pygame.mixer.Sound("/home/pi/psycho_scream.ogg") ] 

Em seguida, importe a biblioteca aleatória para o seu arquivo, com:

 import random 

Agora modifique o loop principal de detecção de movimento da seguinte maneira:

 while True: if pir.motion_detected: print("Motion detected!") playSound = random.choice(sounds) playSound.play() # ensure playback has been fully completed before resuming motion detection, prevents "spamming" of sound sleep(15) playSound.stop() else: print ("No motion") 

Observe a pequena alteração: em vez de tocar a única variável Sound, estamos usando a função random.choice para escolher um som aleatório de nossa matriz de sons e, em seguida, reproduzi-lo.

Aqui está o código completo, caso você esteja com problemas:

 import pygame from pygame.mixer import Sound from gpiozero import MotionSensor from time import sleep import random pygame.init() pygame.mixer.init() #load a sound file, same directory as script (no mp3s) sounds = [ pygame.mixer.Sound("/home/pi/thunder.ogg"), pygame.mixer.Sound("/home/pi/scary_scream.ogg"), pygame.mixer.Sound("/home/pi/girl_scream.ogg"), pygame.mixer.Sound("/home/pi/psycho_scream.ogg") ] pir = MotionSensor(4) while True: if pir.motion_detected: print("Motion detected!") playSound = random.choice(sounds) playSound.play() # ensure playback has been fully completed before resuming motion detection, prevents "spamming" of sound sleep(15) playSound.stop() else: print ("No motion") 

Com apenas quatro amostras, há uma alta probabilidade de repetição a cada vez, mas você pode adicionar mais amostras se isso for irritante.

É isso aí! Escondê-lo nos arbustos com alguns olhos assustadores do monstro do diodo emissor de luz Como fazer olhos brilhantes do Dia das Bruxas assustador para menos de $ 5 Como fazer olhos brilhantes do Dia das Bruxas assustador para menos de $ 5 Quer apimentar suas decorações de Halloween este ano? Aprenda a fazer os olhos de LED por menos de US $ 5 no projeto de eletrônica deste iniciante. Leia mais, e você deve ser capaz de salvar alguns doces enquanto todos os garotos fogem gritando antes mesmo de chegarem à porta. Ou vá se esconder no armário porque uma mãe furiosa está sem sangue depois que você fez o pequeno Johnny chorar.

Disclaimer: MakeUseOf não é responsável por qualquer dano pessoal que possa resultar do seu uso deste projeto!

Você estará fazendo esta caixa de som ativada por movimento, a fim de assustar os truques ou treaters locais? Você criou algum efeito assustador com um Raspberry Pi neste Halloween? Por favor, deixe-nos saber sobre isso nos comentários abaixo!

In this article