Propaganda

É nessa época do ano novamente, quando é considerado socialmente aceitável aterrorizar crianças pequenas e dar-lhes doces. Oh alegria. Estou aqui para facilitar seu trabalho, mostrando como fazer uma caixa de som simples do Raspberry Pi Halloween com detecção de movimento. Aqui está uma demonstração:

Aqui está o que você precisa

Provavelmente, a única parte que você ainda não possui é o sensor de movimento, uma parte pequena e barata que você poderá encontrar no seu microcentro 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 a entrada de linha).
  • Cabo estéreo de 3,5 mm, macho para macho.

Quando terminar, você pode adicionar alguns efeitos de iluminação sincronizados Como sincronizar luzes domésticas e música para o HalloweenEsteja você organizando uma festa em casa no Dia das Bruxas ou queira a casa mais assombrada do bairro, é essencial fazer as luzes piscarem a tempo com música e efeitos sonoros. consulte Mais informação

também, mas neste tutorial, abordaremos apenas os sons assustadores!

Configurando

Estamos usando o Raspbian Jessie Lite e o Python 2.7, mas qualquer distribuição Linux executada no seu Pi deve funcionar. Eu o deixei com o nome de host padrão "raspberrypi.local". Portanto, inicie o login remotamente usando SSH (abra uma janela do Terminal se você estiver no Mac. Aqui está como fazer o mesmo no Windows 4 maneiras fáceis de usar SSH no WindowsO SSH é a solução de fato para acessar com segurança terminais remotos no Linux e outros sistemas UNIX. Se você tiver um servidor SSH remoto que deseja acessar, precisará baixar um cliente SSH ... consulte Mais informação ) - ou se você optou por usar um Raspbian completo com GUI de desktop, fique à vontade para pular a atualização.

ssh [email protected]. (digite raspberry como a senha) sudo apt-get update. O sudo apt-get instala o python-pip. O sudo pip instala o gpiozero. 

Isso instala uma biblioteca simples para trabalhar com os pinos GPIO no Python com muitos tipos de botões e sensores embutidos. 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 do Raspberry Pi GPIO
Crédito de imagem: raspberrypi.org

Felizmente, meu gabinete Pi 2 da Pimoroni possui um diagrama de pinagem gravado a laser diretamente nele.

Rotulado Raspberry Pi Case

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

nano motion.py. 

Colar em:

do gpiozero import MotionSensor pir = MotionSensor (4) enquanto True: se pir.motion_detected: print ("Movimento detectado!") else: print ("No motion")

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

python motion.py. 

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

Movimento detectado no terminal

Se a mensagem não mudar, você a errou.

Se você estiver interessado em aprender mais sobre esta biblioteca simples do GPIOZero, consulte este cheatsheet fantástico.

Tocando som

Conecte seu alto-falante portátil e garanta que ele seja alimentado, se necessário. Nós vamos usar o pygame biblioteca para reproduzir sons, então vá em frente e instale-o:

O sudo apt-get instala o python-pygame. 

Primeiro, precisamos de um arquivo de som para reproduzir. Se você estiver fazendo isso no ambiente de área de trabalho, faça o download de um WAV ou OGG arquivo de algum lugar (eu achei uma boa seleção de Halloween grátis soa aqui) e coloque-o no seu diretório pessoal. Sugiro reduzir a amostragem primeiro e convertendo para um formato OGG pequeno de qualquer forma.

Se você está se conectando remotamente e apenas usando a linha de comando, temos um pouco mais de dificuldade em alguns sites, pois o wget O comando pode não pegar o arquivo real. Em vez disso, podemos fazer o download localmente em nossa área de trabalho e usar o scp (cópia segura) para copiar na linha de comando. Você pode aprender mais sobre scp aqui, mas por enquanto, abra uma nova guia 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 inicial do usuário Pi.

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

import pygame.mixer. de pygame.mixer import Sound. 

Depois das declarações de importação existentes, repetiremos o mesmo som repetidamente para fins de teste. Deixe o restante do código do sensor de movimento como está por enquanto - ele não funcionará, pois ficará preso nesse loop de reprodução de som para sempre.

pygame.init () pygame.mixer.init () #load um arquivo de som, no diretório inicial do usuário Pi (sem mp3s) trovão = pygame.mixer. Som ("/ home / pi / thunder.ogg") enquanto True: thunder.play () sleep (10) thunder.stop ()

Observe que quando eu tentei esse processo originalmente, o som se recusou a tocar e apenas clicou. O tamanho do arquivo ou da taxa de bits era o culpado: tinha 24 bits e mais de 5 MB para um clipe de 15 segundos. Reduzir para 16 bits usando o conversor ao qual vinculei acima fez tudo funcionar bem, e o tamanho foi reduzido para apenas 260 KB!

Se você perceber um chiado desagradável nos alto-falantes quando o aplicativo Python estiver em execução, mas não o contrário, digite:

sudo nano /boot/config.txt. 

E adicione esta linha no final:

disable_audio_dither = 1. 

Reinicie para que as alterações tenham efeito. Ou não se preocupe, já que parecia uma chuva para mim.

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

enquanto True: se pir.motion_detected: print ("Movimento detectado!") thunder.play () # garante que a reprodução foi totalmente concluída antes de retomar a detecção de movimento, impede o envio de "spam" do sono em suspensão (15) thunder.stop () else: print ("No movimento")

Iniciar automaticamente

Provavelmente, queremos configurá-lo em algum lugar com uma bateria e sem conexão à Internet; portanto, o script precisa ser reiniciado sem ter que 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 CrontabA 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 for a primeira vez que executa este comando, ele começará perguntando qual editor usar. Eu escolhi a opção 2, para nano. Ele será inicializado no 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 o fará silenciosamente (para que qualquer saída do script seja ignorada). Reinicie para experimentar.

Se nada for reproduzido, apesar de haver movimento, ou você ouvir apenas um pequeno clique, talvez não tenha usado o caminho completo do arquivo, ou talvez seja necessário converter o arquivo para uma taxa de bits mais baixa e tamanho de arquivo menor.

Adicione mais sons

Tocar o mesmo efeito repetidamente é um pouco chato, então vamos adicionar um pouco de aleatoriedade a ele. Faça o download de mais sons do Dia das Bruxas, lembrando de reduzi-los a um tamanho razoável e taxa de bits e enviá-los ao seu Pi usando scp como antes. Eu adicionei três tipos diferentes de gritos.

Modifique o código para que, em vez de definir um único pygame.mixer. Som variável, na verdade estamos criando uma matriz de sons. Isso é simples no Python, apenas coloque uma lista separada por vírgulas entre colchetes, da seguinte forma:

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

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

importação aleatória. 

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

while True: se pir.motion_detected: print ("Movimento detectado!") playSound = random.choice (sons) playSound.play () # assegura que a reprodução tenha foi totalmente concluído antes de retomar a detecção de movimento, evita "spam" do sono em suspensão (15) playSound.stop () else: print ("No movimento")

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

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

pygame de importação. de pygame.mixer import Sound. do gpiozero import MotionSensor. desde o momento importar sono. importação aleatória pygame.init () pygame.mixer.init () #load um arquivo de som, o mesmo diretório que o script (sem mp3s) soa = [pygame.mixer. Som ("/ home / pi / thunder.ogg"), pygame.mixer. Som ("/ home / pi / scary_scream.ogg"), pygame.mixer. Som ("/ home / pi / girl_scream.ogg"), pygame.mixer. Som ("/ home / pi / psycho_scream.ogg")] pir = MotionSensor (4) while True: se pir.motion_detected: print ("Movimento detectado!") playSound = random.choice (sons) playSound.play () # assegura que a reprodução tenha foi totalmente concluído antes de retomar a detecção de movimento, evita "spam" do sono em suspensão (15) playSound.stop () else: print ("No movimento")

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

É isso aí! Esconda-o nos arbustos com alguns assustador LED monstro olhos Como fazer olhos brilhantes de Halloween assustadores por menos de US $ 5Quer apimentar suas decorações de Halloween este ano? Aprenda a fazer olhos de LED por menos de US $ 5 neste projeto de eletrônica para iniciantes. consulte Mais informação , e você poderá economizar alguns doces, pois todas as crianças fogem gritando antes mesmo de chegarem à porta. Ou vá se esconder no armário porque uma mãe com raiva está em busca de sangue depois que você fez o pequeno Johnny chorar.

Isenção de responsabilidade: MakeUseOf não é responsável por nenhum dano pessoal que possa resultar do uso deste projeto!

Você fará esta caixa de som ativada por movimento para assustar os doces ou travessuras locais? Você configurou efeitos assustadores com um Raspberry Pi neste Halloween? Informe-nos nos comentários abaixo!

James é bacharel em Inteligência Artificial e possui certificação CompTIA A + e Network +. Ele é o principal desenvolvedor do MakeUseOf e passa seu tempo livre jogando paintball e jogos de tabuleiro em VR. Ele está construindo PCs desde que era criança.