Anuncio
Es en esa época del año nuevamente cuando se considera socialmente aceptable aterrorizar a los niños pequeños y darles dulces. Oh Alegría. Estoy aquí para facilitar tu trabajo, mostrándote cómo hacer una caja de sonido de Raspberry Pi para Halloween con detección de movimiento. 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 lo hará).
- Sensor de movimiento (~ $ 3).
- Conexión de cables.
- 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 haya terminado, es posible que desee agregar algunos efectos de iluminación sincronizados Cómo sincronizar las luces del hogar y la música para HalloweenYa sea que organice una fiesta de Halloween o quiera la casa embrujada más genial del vecindario, es esencial que sus luces parpadeen al ritmo de la música y los efectos de sonido. Lee mas
también, ¡pero en este tutorial solo cubriremos los sonidos de miedo!Configurando
Estamos usando Raspbian Jessie Lite y Python 2.7, pero cualquier distribución de Linux que se ejecute en su Pi debería estar bien. Lo dejé en el nombre de host estándar "raspberrypi.local", así que comience iniciando sesión de forma remota con SSH (abra una ventana de Terminal si está en Mac. Aqui esta como hacer lo mismo en Windows 4 maneras fáciles de usar SSH en WindowsSSH es la solución de facto para acceder de forma segura a terminales remotas en Linux y otros sistemas similares a UNIX. Si tiene un servidor SSH remoto al que desea acceder, deberá descargar un cliente SSH ... Lee mas ) - o si ha optado por usar un Raspbian completo con GUI de escritorio, no dude en pasar 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 pinout.

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

Ahora hagamos nuestro script de detección de movimiento.
nano motion.py.
Pegar en:
desde gpiozero import MotionSensor pir = MotionSensor (4) while True: if pir.motion_detected: print ("¡Movimiento detectado!") else: print ("Sin movimiento")
Presione CTRL-X, luego Y para guardar y salir, luego ejecute con:
python motion.py.
Debería ver el mensaje "sin movimiento" repetido en la pantalla hasta que mueva su mano frente al sensor, cuando se detendrá en "¡Detección de movimiento!"

Si el mensaje no cambia en absoluto, lo ha cableado incorrectamente.
Si está interesado en aprender más sobre esta sencilla biblioteca GPIOZero, eche un vistazo a esta fantástica hoja de trucos.
Jugando sonido
Conecte su altavoz portátil y asegúrese de que esté alimentado si es necesario. Usaremos el pygame biblioteca para reproducir sonidos, así que adelante e instálela:
sudo apt-get install python-pygame.
Primero, necesitamos un archivo de sonido para jugar. Si está haciendo esto desde el entorno de escritorio, continúe y descargue un WAV o OGG archivo de algún lugar (encontré una buena selección de sonidos de Halloween gratis aquí) y colóquelo en su directorio de inicio. Sugeriría una disminución de la resolución primero y convertir a un pequeño formato OGG de todas formas.
Si se conecta de forma remota y solo usa la línea de comando, tenemos algunos problemas más con algunos sitios, ya que wget El comando no puede tomar el archivo real. En cambio, podemos descargarlo localmente en nuestro escritorio y usar el scp (copia segura) para copiar sobre la línea de comando. Puedes aprender más acerca de scp aquí, pero por ahora, abra una nueva pestaña Terminal y escriba:
scp thunder.ogg [email protected]:
Cambie el nombre de thunder.ogg según corresponda, pero no olvide el final. : (el comando se completará sin él, pero no hará lo que queremos que haga). De forma predeterminada, esto transferirá el archivo al directorio de inicio del usuario de Pi.
Ahora modifiquemos el guión para reproducir un sonido. Comience importando algunos módulos nuevos:
importar pygame.mixer. desde pygame.mixer import Sound.
Luego, justo después de las declaraciones de importación existentes, repetiremos el mismo sonido una y otra vez para fines de prueba. Deje el resto de su código de detección de movimiento como está por ahora: simplemente no se ejecutará, ya que se quedará atascado en este bucle de reproducción de sonido para siempre.
pygame.init () pygame.mixer.init () # cargar un archivo de sonido, en el directorio de inicio del usuario de Pi (sin mp3) trueno = pygame.mixer. Sonido ("/ home / pi / thunder.ogg") mientras verdadero: thunder.play () sleep (10) thunder.stop ()
Tenga en cuenta que cuando intenté originalmente este proceso, el sonido se negó a reproducirse y simplemente hizo 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. Reducir eso a 16 bits usando el convertidor al que he vinculado anteriormente hizo que todo funcionara bien, ¡y el tamaño se redujo a solo 260 KB!
Si nota un desagradable silbido de sus altavoces cuando su aplicación Python se está ejecutando, pero no de otra manera, escriba:
sudo nano /boot/config.txt.
Y agregue esta línea al final:
disable_audio_dither = 1.
Reinicie para que los cambios surtan efecto. O no te molestes, ya que de todos modos me sonó como lluvia.
Finalmente, modifiquemos el bucle principal de verificación de movimiento para reproducir el sonido cuando se detecte movimiento. Utilizaremos un retraso de 15 segundos para que se pueda reproducir todo el bucle y actuar como un búfer de correo no deseado para cuando haya mucho movimiento continuo.
while True: if pir.motion_detected: print ("¡Movimiento detectado!") thunder.play () # asegura que la reproducción ha sido completa completado antes de reanudar la detección de movimiento, evita el "envío de correo no deseado" del sonido sleep (15) thunder.stop () más: print ("No movimiento")
Comience automáticamente
Probablemente queremos configurar esto en algún lugar con una batería y sin conexión a Internet, por lo que el script debe ejecutarse al reiniciar sin tener que abrir una línea de comando. Para hacer esto, utilizaremos el método más simple posible: el crontab Cómo programar tareas en Linux con Cron y CrontabLa capacidad de automatizar tareas es una de esas tecnologías futuristas que ya está aquí. Cada usuario de Linux puede beneficiarse del sistema de programación y las tareas del usuario, gracias a cron, un servicio en segundo plano fácil de usar. Lee mas . Tipo:
sudo crontab -e.
Si 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 script motion.py se ejecutará en cada inicio y lo hará en silencio (por lo que se ignorará cualquier salida del script). 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 tasa de bits más baja y un tamaño de archivo más pequeño.
Agregar más sonidos
Jugar el mismo efecto una y otra vez es un poco aburrido, así que agreguemos algo de aleatoriedad. Descargue algunos sonidos de Halloween más, recordando reducirlos a un tamaño razonable y una tasa de bits, luego envíelos a su Pi usando scp como antes. Agregué tres tipos diferentes de gritos.
Modifique el código para que en lugar de definir un solo pygame.mixer. Sonido variable, en realidad estamos creando un formación de sonidos Esto es simple con Python, solo encierre una lista separada por comas con corchetes, de esta manera:
sonidos = [pygame.mixer. Sonido ("/ home / pi / thunder.ogg"), pygame.mixer. Sonido ("/ home / pi / scary_scream.ogg"), pygame.mixer. Sonido ("/ home / pi / girl_scream.ogg"), pygame.mixer. Sonido ("/ home / pi / psycho_scream.ogg")]
A continuación, importe la biblioteca aleatoria en su archivo, con:
Importar al azar.
Ahora modifique el bucle principal de detección de movimiento de la siguiente manera:
while True: if pir.motion_detected: print ("¡Movimiento detectado!") playSound = random.choice (sonidos) playSound.play () # asegura que la reproducción tenga se ha completado por completo antes de reanudar la detección de movimiento, evita el "envío de correo no deseado" del sonido en suspensión (15) playSound.stop () más: print ("No movimiento")
Tenga en cuenta el cambio menor: en lugar de reproducir la única variable de sonido, estamos utilizando el random.choice función para elegir un sonido aleatorio de nuestra matriz de sonidos y luego reproducirlo.
Aquí está el código completo en caso de que tenga problemas:
Importar Pygame. desde pygame.mixer import Sound. desde gpiozero importa MotionSensor. desde el momento importamos el sueño. import random pygame.init () pygame.mixer.init () # cargar un archivo de sonido, el mismo directorio que el script (sin mp3) suena = [pygame.mixer. Sonido ("/ home / pi / thunder.ogg"), pygame.mixer. Sonido ("/ home / pi / scary_scream.ogg"), pygame.mixer. Sonido ("/ home / pi / girl_scream.ogg"), pygame.mixer. Sonido ("/ home / pi / psycho_scream.ogg")] pir = MotionSensor (4) while True: if pir.motion_detected: print ("¡Movimiento detectado!") playSound = random.choice (sonidos) playSound.play () # asegura que la reproducción tenga se ha completado por completo antes de reanudar la detección de movimiento, evita el "envío de correo no deseado" del sonido en suspensión (15) playSound.stop () más: print ("No movimiento")
Con solo cuatro muestras, hay una alta probabilidad de repetición cada vez, pero puede agregar más muestras si eso es molesto.
¡Eso es! Escóndelo en los arbustos con un poco ojos monstruosos LED de miedo Cómo hacer espeluznantes ojos brillantes de Halloween por menos de $ 5¿Quieres darle vida a tus decoraciones de Halloween este año? Aprenda a hacer ojos LED por menos de $ 5 en este proyecto electrónico para principiantes. Lee mas , y deberías poder ahorrarte algunos dulces ya que todos los niños huyen gritando antes de llegar a la puerta. O esconderse en el armario porque una mamá enojada está buscando 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 del uso de este proyecto.
¿Harás esta caja de sonido activada por movimiento para asustar a los trucos o tratadores locales? ¿Has configurado algún efecto aterrador con una Raspberry Pi este Halloween? ¡Háganos saber al respecto en los comentarios a continuación!
James tiene una licenciatura en Inteligencia Artificial y está certificado por CompTIA A + y Network +. Es el desarrollador principal de MakeUseOf, y pasa su tiempo libre jugando VR paintball y juegos de mesa. Ha estado construyendo computadoras desde que era un niño.