¿Alguna vez quisiste llegar a casa con una bienvenida personal? En este simple proyecto de Raspberry Pi usaremos un interruptor Reed para activar una melodía cuando se abre una puerta.
Necesitará
- Una Raspberry Pi .
- 1 x resistencia de 220 ohmios
- 1 x 1K Ohm resistor.
- Resistencia de 3 x 10K Ohm.
- 1 x Interruptor de lengüeta magnético.
- 1 x LED.
- 2 x interruptor de botón.
- Tablero de circuitos.
- Cables de conexión.
- Altavoz de computadora o similar.
El LED está conectado al pin 7 en nuestro pi. Los dos interruptores de botón están conectados a los pines 11 y 13, y el interruptor de láminas se conecta al pin 15. Nuestra potencia va al pin 1 (3v3) y al pin 6 (Gnd).
Asegúrese de verificar que todo esté exactamente en el lugar correcto.
Mientras prueba este proyecto, puede ser útil mantener el interruptor de láminas frente a usted para poder activarlo o desactivarlo fácilmente. En este caso, el interruptor de láminas ya estaba instalado encima de la puerta. Una vez que su proyecto esté en funcionamiento, puede conectar temporalmente el interruptor a su puerta con cinta o, si tiene más confianza, puede colocarlo de manera más permanente para utilizarlo en futuros proyectos.
Conecte la salida jack de 3.5 mm de su Pi a su sistema de altavoces. Una vez que todo se ha unido, debería verse más o menos así:
Ahora enciende tu Pi y accede usando SSH para que podamos acceder a la terminal. Si no está seguro de cómo hacerlo, esta guía Configuración de su Raspberry Pi para uso sin cabeza con SSH Configuración de su Raspberry Pi para uso sin cabeza con SSH La Raspberry Pi puede aceptar comandos SSH cuando está conectado a una red local (ya sea por Ethernet o Wi-Fi), lo que le permite configurarlo fácilmente. Los beneficios de SSH van más allá de alterar el examen diario … Read More puede ayudarlo. Si está utilizando su Raspberry Pi con un monitor, mouse y teclado, omita este paso y abra la terminal.
Antes de comenzar, vale la pena verificar si está actualizado. Escriba sudo apt-get update
en la terminal.
Probando nuestra configuración
Para comenzar, revisemos nuestro circuito con un programa simple. Si confías en que has conectado todo bien hasta el momento, puedes omitir este paso, aunque lo recomendaría ya que puede ahorrarte dolores de cabeza más adelante.
En la terminal, crea una nueva secuencia de comandos:
nano test.py
Una vez abierto, agregue este código al archivo y presione Ctrl-C para salir, siguiendo el diálogo de guardar:
#This code was written for an article on www.MakeUseOf.com by Ian Buckley. import RPi.GPIO as GPIO import time GPIO.setwarnings(False) GPIO.setmode(GPIO.BOARD) GPIO.setup(7, GPIO.OUT) GPIO.setup(11, GPIO.IN) GPIO.setup(13, GPIO.IN) GPIO.setup(15, GPIO.IN) while True: GPIO.output(7, GPIO.HIGH) if (GPIO.input(11)==1): print("Button on GPIO 11") time.sleep(1) if (GPIO.input(13)==1): print("Button on GPIO 13") time.sleep(1) if (GPIO.input(15)==1): print("Button on GPIO 15") time.sleep(1) GPIO.cleanup()
Este código lee el valor de los botones e imprime en la pantalla cuando cambian. Los dos botones tienen resistencias desplegables, por lo que informan HIGH cuando se presionan. El interruptor magnético de lengüeta informa ALTO cuando el imán que lo acompaña está cerca.
Ejecuta el programa:
python test.py
Debería ver que el LED se enciende y un informe en la pantalla cuando presiona los dos botones y retira el imán del interruptor de láminas. Si no recibe retroalimentación cuando presiona los botones, revise los circuitos nuevamente y asegúrese de que todo esté conectado como debería. Cuando termine de probar, presione CTRL-C para detener el programa.
Ahora podemos armar un programa simple para configurar, activar y restablecer nuestro sensor de puerta. Repasaremos el código en partes y explicaremos brevemente qué hace cada parte, aunque si desea ver el código completo desplácese hacia abajo para verlo en su totalidad.
Necesitamos comenzar importando algunos módulos:
import Rpi.GPIO as GPIO import pygame.mixer import time
Utilizaremos el módulo Pygame para reproducir nuestra música. Viene de serie con Raspbian Jessie, y es una gran biblioteca para todo lo que necesitas para hacer juegos de Python y muchos otros proyectos increíbles.
Vamos a usar una variable llamada activa para decidir si nuestro sistema está activo o no. Vamos a definir un par de funciones que harán esto por nosotros:
def activeSetup(): global active active=0 print("Currently Not Active") def activeState(): global active if active==1: active=0 GPIO.output(7, GPIO.LOW) print("Currently Not Active") elif active==0: print ("Activating in 10 seconds") for x in range(0, 10): GPIO.output(7, GPIO.HIGH) time.sleep(0.5) GPIO.output(7, GPIO.LOW) time.sleep(0.5) active=1 GPIO.output(7, GPIO.HIGH) print("Currently Active") else: return
La primera función aquí crea una variable llamada activa, y la establece en 0. Dar al estado activo un valor numérico significa que si planea escalar posteriormente su programa para tener diferentes estados activos, puede numerarlos según corresponda. Si bien puede que no sea la mejor programación de Python en el mundo, será más que suficiente para este proyecto.
La segunda función cuando se llama comprueba si el sistema está activo (o activo == 1 ). Si es así, configura el sistema como no activo ( activo == 0 ), apaga el LED e imprime en la consola. Si no es así, le da una cuenta atrás de 10 segundos para salir de la habitación en la que parpadea el LED, antes de permanecer encendido para mostrar que el sistema está activo.
Ahora podemos definir una función que mirará nuestro interruptor de imán reed:
def watchDoor(): global playing playing = False while True: if active==1 and GPIO.input(15)==1 and playing == False: playing=True pygame.mixer.music.play() if GPIO.input(13)==1: print("Stop button pressed: Exiting") pygame.mixer.music.stop() break if GPIO.input(11)==1: activeState() time.sleep(0.5)
Creamos aquí otra variable llamada reproducción, que está ahí simplemente para detener el programa que intenta comenzar a tocar repetidamente cuando se activa el interruptor.
Dentro del ciclo while, la primera instrucción if inicia la música (que todavía no tenemos, pero no hay que preocuparse, ya viene). Solo permite que la música se inicie si el sistema está activo, el interruptor de láminas está abierto y no se está reproduciendo.
La segunda instrucción if es para nuestro botón de salida. Si se presiona este botón, la música se detiene y el programa sale.
La tercera instrucción if es para alternar si el sistema está activo o no. La función time.sleep aquí es para evitar lecturas múltiples de botones cuando se presiona.
Ahora es el momento de configurar los pins de Pi.
GPIO.setmode(GPIO.BOARD) GPIO.setup(7, GPIO.OUT, initial=GPIO.LOW) GPIO.setup(11, GPIO.IN) GPIO.setup(13, GPIO.IN) GPIO.setup(15, GPIO.IN)
Si has hecho alguna prueba con el Pi antes de que esto te sea familiar. El argumento inicial = GPIO.LOW en la configuración del pin 7 lo pone a bajo tan pronto como se inicializa.
Ahora podemos llamar a nuestra función que configurará el sistema para que no esté activo cuando se inicie el programa.
activeSetup()
En este punto, deberíamos comenzar a pensar en la música para jugar. Puede elegir cualquier archivo de música que desee, pero debemos elegir algo disponible para todos por el momento.
De vuelta en nuestro código, tenemos que iniciar el mezclador de Pygame y cargar nuestra canción.
pygame.mixer.init(44100, -16, 2, 1024) pygame.mixer.music.set_volume(1.0) name = "One-eyed Maestro.mp3" pygame.mixer.music.load(name) print("Loaded track - "+ str(name))
La primera línea de este bloque inicia el mezclador Pygame . El último argumento en los paréntesis es el búfer que controla la latencia en la que se reproduce el sonido. Si experimenta una reproducción entrecortada más adelante cuando se reproduce su música, intente aumentar este número a 4096. La configuración, ya que funcionan sin problemas en un Pi 3.
Si descargó su archivo de música en un directorio diferente a su programa door.py, deberá proporcionar la ruta completa dentro de los corchetes cuando defina la variable de nombre.
Ahora todo lo que queda por hacer es configurar un ciclo que nos permita configurar el programa o salir de él.
while True: if(GPIO.input(13)==1): print("Stop button pressed: Exiting") pygame.mixer.music.stop() break if(GPIO.input(11)==1): activeState() time.sleep(0.5) if(active==1): watchDoor() break GPIO.cleanup()
Este ciclo while espera una entrada de cualquiera de los botones, y lo cierra o cambia el estado a activo de acuerdo con esto. Si el estado de activo se convierte en 1, entonces se llama a la función watchDoor que definimos anteriormente y la próxima vez que se abra la puerta se reproducirá nuestra melodía. También llamamos a GPIO.cleanup () para restablecer nuestros pines al salir, lo que generalmente es una buena práctica para toda la programación en el Raspberry Pi.
Eso es todo lo que tenemos que hacer para poner en marcha este proyecto, aquí está el código completo:
import RPi.GPIO as GPIO import pygame.mixer import time def activeSetup(): global active active=0 print("Currently Not Active") def activeState(): global active if active==1: active=0 GPIO.output(7, GPIO.LOW) print("Currently Not Active") elif active==0: print ("Activating in 10 seconds") for x in range(0, 10): GPIO.output(7, GPIO.HIGH) time.sleep(0.5) GPIO.output(7, GPIO.LOW) time.sleep(0.5) active=1 GPIO.output(7, GPIO.HIGH) print("Currently Active") else: return def watchDoor(): global playing playing = False while True: if active==1 and GPIO.input(15)==1 and playing == False: playing=True pygame.mixer.music.play() if GPIO.input(13)==1: print("Stop button pressed: Exiting") pygame.mixer.music.stop() break if GPIO.input(11)==1: activeState() time.sleep(0.5) GPIO.setmode(GPIO.BOARD) GPIO.setup(7, GPIO.OUT, initial=GPIO.LOW) GPIO.setup(11, GPIO.IN) GPIO.setup(13, GPIO.IN) GPIO.setup(15, GPIO.IN) activeSetup() pygame.mixer.init(44100, -16, 2, 1024) pygame.mixer.music.set_volume(1.0) name = "One-eyed Maestro.mp3" pygame.mixer.music.load(name) print("Loaded track - "+ str(name)) while True: if(GPIO.input(13)==1): print("Stop button pressed: Exiting") pygame.mixer.music.stop() break if(GPIO.input(11)==1): activeState() time.sleep(0.5) if(active==1): watchDoor() break GPIO.cleanup()
Ten en cuenta que aún necesitarás descargar la música en tu Pi para que funcione.
-
Infrarojo seguidor de linea¡Oferta!
$3.50$1.75 -
Kit Raspberry – Sensor de lluvia FR-04¡Oferta!
$97.00$92.50 -
Case para Raspberry Pi 3¡Oferta!
$10.00$6.99