Asustar el truco o trato con una caja de sonido activada por movimiento DIY

Asustar el truco o trato con una caja de sonido activada por movimiento DIY / Bricolaje

Es esa época del año otra vez cuando se considera socialmente aceptable aterrorizar a los niños pequeños y darles dulces. Oh Alegría. Estoy aquí para hacer su trabajo más fácil, mostrándole cómo hacer una caja de sonido de Halloween Raspberry Pi con detección de movimiento simple. Aquí hay una demostración:

Esto es lo que necesitarás

Probablemente, la única parte que aún no tiene es el sensor de movimiento, una parte pequeña y económica que debería poder encontrar en su Microcentro o Maplin local..

  • Raspberry Pi (cualquier modelo servirá).
  • Sensor de movimiento (~ $ 3).
  • Cables de conexión.
  • Altavoz con cable (la mayoría de los altavoces Bluetooth tendrán la opción de usar la entrada de línea).
  • Cable estéreo de 3,5 mm, macho a macho.

Una vez que hayas terminado, es posible que desees agregar algunos efectos de iluminación sincronizados Cómo sincronizar las luces y la música del hogar para Halloween Cómo sincronizar las luces y la música del hogar para Halloween Ya sea que estés organizando una fiesta en la casa de Halloween o quieras la casa embrujada más cool del mundo. Barrio, hacer que tus luces parpadeen a tiempo para la música y efectos de sonido es esencial. Lee más también, pero en este tutorial solo cubriremos los bits de sonidos de miedo!

Configurando

Estamos usando Raspbian Jessie Lite y Python 2.7, pero cualquier distribución de Linux que se ejecute en tu Pi debería estar bien. Lo he dejado en el nombre de host estándar “raspberrypi.local”, así que comience por iniciar sesión de forma remota usando SSH (abra una ventana de Terminal si está en Mac. Aquí encontrará cómo hacer lo mismo en Windows 4. Formas sencillas de usar SSH en Windows 4 Maneras sencillas de usar SSH En Windows SSH es la solución de facto para acceder de forma segura a terminales remotos en Linux y otros sistemas similares a UNIX. Si tiene un servidor SSH remoto al que desea acceder, deberá descargar un cliente SSH ... Leer más) - o si ha optado por usar un Raspbian completo Con la GUI de escritorio, siéntase libre de saltar a la actualización.

ssh [email protected] (ingrese raspberry como contraseña) sudo apt-get update sudo apt-get install python-pip sudo pip install gpiozero 

Esto instala una biblioteca simple para trabajar con los pines GPIO en Python con muchos tipos de sensores y botones incorporados. Conecte su sensor con el pin de señal en GPIO4, el VCC conectado a 5V y el GND conectado a GND. Esto puede variar según su modelo exacto, así que confirme con un diagrama de pines.

Crédito de la imagen: raspberrypi.org

Como ayuda, mi estuche Pi 2 de Pimoroni tiene un diagrama de pinout grabado con láser directamente sobre él.

Ahora vamos a hacer nuestro script de detección de movimiento.

nano motion.py 

Pegar en

desde gpiozero import MotionSensor pir = MotionSensor (4) mientras True: if pir.motion_detected: print ("Motion detect!") else: print ("No motion") 

Presione CTRL-X, luego Y para guardar y salir, luego ejecute con:

python motion.py 

Deberías ver el “Sin movimiento” mensaje repetido en la pantalla hasta que mueva su mano frente al sensor, cuando se detenga en el “Movimiento detectado!”

Si el mensaje no cambia en absoluto, lo has conectado mal.

Si está interesado en aprender más sobre esta sencilla biblioteca de GPIOZero, eche un vistazo a esta fantástica hoja de trucos.

Jugando sonido

Conecte su altavoz portátil y asegúrese de que esté encendido si es necesario. Usaremos el pygame biblioteca para reproducir sonidos, así que adelante e instálala:

sudo apt-get install python-pygame 

Primero, necesitamos un archivo de sonido para jugar. Si está haciendo esto desde el entorno de escritorio, siga adelante y descargue un WAV o OGG desde algún lugar (encontré una buena selección de sonidos de Halloween gratis aquí), y póngalo en su directorio personal. Yo sugeriría reducir el muestreo primero y convertir a un pequeño formato OGG de todos modos.

Si se está conectando de forma remota y solo está utilizando la línea de comandos, tenemos un poco más de dificultad con algunos sitios, ya que wget comando no puede agarrar el archivo real. En su lugar, podemos descargarlo localmente en nuestro escritorio y usar el scp (copia segura) comando para copiar sobre la línea de comandos. Puede obtener más información sobre scp aquí, pero por ahora, abra una nueva pestaña de Terminal y escriba:

scp thunder.ogg [email protected]: 

Renombra thunder.ogg según corresponda, pero no olvides la final : (el comando se completará sin él, pero no hará lo que queremos que haga). De forma predeterminada, esto transferirá el archivo al directorio principal del usuario Pi.

Ahora vamos a modificar el script para reproducir un sonido. Comience importando algunos nuevos módulos:

importar pygame.mixer desde pygame.mixer import Sound 

Luego, justo después de las declaraciones de importación existentes, realizaremos el mismo sonido una y otra vez para realizar pruebas. Deje el resto de su código de detección de movimiento tal como está por ahora, simplemente no se ejecutará, ya que estará atrapado en este bucle de reproducción de sonido para siempre.

pygame.init () pygame.mixer.init () # cargue un archivo de sonido, en el directorio de inicio del usuario Pi (no mp3s) thunder = pygame.mixer.Sound ("/ home / pi / thunder.ogg") mientras True : thunder.play () sleep (10) thunder.stop () 

Tenga en cuenta que cuando intenté este proceso originalmente, el sonido se negó a reproducirse y simplemente hice clic en su lugar. El tamaño del archivo o la tasa de bits fue el culpable: era de 24 bits y más de 5 MB para un clip de 15 segundos. Al escalar hasta 16 bits con el convertidor al que estaba vinculado, todo funcionó bien y el tamaño se redujo a solo 260 KB.!

Si notas un silbido desagradable en tus altavoces cuando tu aplicación Python se está ejecutando, pero no de otra manera, escribe:

sudo nano /boot/config.txt 

Y añada esta línea al final:

disable_audio_dither = 1 

Reinicie para que los cambios surtan efecto. O no te molestes, ya que de alguna manera me sonaba a lluvia.

Finalmente, modifiquemos el bucle principal de control de movimiento para reproducir el sonido cuando se detecta movimiento. Usaremos un retraso de 15 segundos para que se pueda reproducir todo el bucle y para que actúe como un búfer de correo no deseado para cuando haya gran cantidad de movimientos sin parar..

a la vez que Verdadero: si pir.motion_detected: imprime ("¡Se detectó movimiento!") thunder.play () # asegúrese de que la reproducción se haya completado por completo antes de reanudar la detección de movimiento, evita el "spamming" del sonido del sonido (15) thunder.stop () else: imprimir ("Sin movimiento") 

Iniciar automáticamente

Probablemente queremos configurar esto en algún lugar con una batería y sin conexión a Internet, por lo que la secuencia de comandos debe ejecutarse en el reinicio sin tener que abrir una línea de comandos. Para hacer esto, usaremos el método más simple posible: crontab Cómo programar tareas en Linux con Cron y Crontab Cómo programar tareas en Linux con Cron y Crontab La capacidad de automatizar tareas es una de esas tecnologías futuristas que ya está aquí. . Cada usuario de Linux puede beneficiarse de la programación de tareas del sistema y del usuario, gracias a cron, un servicio en segundo plano fácil de usar. Lee mas . Tipo:

sudo crontab -e 

Si esta es la primera vez que ejecuta este comando, comenzará preguntándole qué editor usar. Elegí la opción 2, para nano. Se iniciará en el editor elegido, así que agregue la siguiente línea:

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

Esto significa que su secuencia de comandos motion.py se ejecutará en cada inicio y lo hará de manera silenciosa (por lo que se ignorará cualquier resultado de la secuencia de comandos). Reinicia para probarlo.

Si no se reproduce nada a pesar de que hay movimiento, o si escucha solo un pequeño clic, es posible que no haya utilizado la ruta completa del archivo, o que su archivo necesite una conversión a una tasa de bits inferior y un tamaño de archivo menor..

Añadir más sonidos

Reproducir el mismo efecto una y otra vez es un poco aburrido, así que vamos a agregarle algo de aleatoriedad. Descargue algunos sonidos de Halloween más, recuerde reducirlos a un tamaño y velocidad de bits razonables, luego envíelos a su Pi usando scp como antes. He añadido tres tipos diferentes de gritos..

Modifique el código para que en lugar de definir un solo pygame.mixer.Sound variable, en realidad estamos creando una formación de sonidos. Esto es simple con Python, simplemente rodee una lista separada por comas con corchetes, así:

sonidos = [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 ")] 

A continuación, importe la biblioteca aleatoria a su archivo, con:

importar al azar 

Ahora modifique el bucle principal de detección de movimiento de la siguiente manera:

mientras es Verdadero: si pir.motion_detected: imprime ("¡Se detectó movimiento!") playSound = random.choice (sonidos) playSound.play () # asegúrese de que la reproducción se haya completado por completo antes de reanudar la detección de movimientos, evita que el sonido se escuche como spam (15 ) playSound.stop () else: print ("No motion") 

Note el cambio menor: en lugar de reproducir la única variable de sonido, estamos usando el elección al azar función para elegir un sonido aleatorio de nuestra matriz de sonidos, y luego reproducir ese.

Aquí está el código completo en caso de que tenga problemas:

importar pygame desde pygame.mixer importar sonido desde gpiozero importar MotionSensor desde el momento importar dormir importar aleatoriamente pygame.init () pygame.mixer.init () # cargar un archivo de sonido, el mismo directorio que el script (no mp3s) suena = [pygame.mixer .Sonido ("/ 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) con True: if pir.motion_detected: print ("Motion detect!") playSound = random.choice (sonidos) playSound .play () # asegura que la reproducción se haya completado por completo antes de reanudar la detección de movimiento, evita el "envío de correo no deseado" del sonido de reposo (15) playSound.stop () else: print ("No motion") 

Con solo cuatro muestras, hay una alta probabilidad de repetición cada vez, pero puedes agregar más muestras si eso es molesto.

¡Eso es! Escóndalo en los arbustos con unos ojos de monstruos LED que dan miedo Cómo hacer que los ojos brillantes de Halloween fantasmagóricos cuesten menos de $ 5 Cómo hacer los ojos brillantes de Halloween fantasmagóricos por menos de $ 5 ¿Quiere darle sabor a sus decoraciones de Halloween este año? Aprende a hacer ojos LED por menos de $ 5 en este proyecto de electrónica para principiantes. Lee más, y deberías poder ahorrarte algunos dulces mientras todos los niños huyen gritando antes de que lleguen a la puerta. O escóndete en el armario porque una mamá enojada busca sangre después de que hiciste llorar al pequeño Johnny.

Descargo de responsabilidad: MakeUseOf no es responsable de ninguna lesión personal que pueda resultar de su uso de este proyecto!

¿Hará esta caja de sonido activada por movimiento para asustar a los curanderos locales? ¿Has configurado algún efecto aterrador con una Raspberry Pi este Halloween? Por favor, háganoslo saber en los comentarios a continuación.!

.