Approved Reseller
Approved Reseller
En este pequeño tutorial veremos cómo conectar un push button o botón pulsador a una tarjeta Raspberry Pi, también encontrarás códigos de programación para tus primeras pruebas.
Un push button es un componente eléctrico compuesto, en su mayoría, por 2 terminales o pines, estas terminales pueden estar o no en contacto eléctrico dependiendo de si el botón esta siendo presionado o no, en este sentido los push button pueden clasificarse en:
En este ejemplo utilizaremos un push button normalmente abierto.
Para conectar un push button a una tarjeta de desarrollo es necesario una resistencia auxiliar para conseguir un arreglo en pull-up o pull-down. En este caso utilizaremos la resistencia en un arreglo de pull-up, es decir, uno de los pines del botón estará conectado a tierra y el segundo pin que será el pin de la señal tendrá conectado el pin de una resistencia de 10 kohms mientras que el segundo pin de dicha resistencia estará conectado a 3.3V. De esta manera cuando el botón no este siendo presionado el pin de la señal tendrá un valor de 3.3V y cuando esté siendo presionado tendrá un valor de 0V.
Un push button es un sensor digital de entrada, es decir, su funcionamiento consiste en entregar la información correspondiente si es presionado o no a través del voltaje en su pin de señal, la tarjeta Raspberry Pi a su vez recibe la señal y la lee con uno de sus pines digitales de entrada.
Copiamos el siguiente código a un script de Python y lo ejecutamos con Python3. Oprimimos el botón para observar como el LED se enciende/apaga al mismo tiempo que observamos el mensaje correspondiente en la terminal.
import RPi.GPIO as GPIO #Importamos el paquete RPi.GPIO y en el código nos refiriremos a el como GPIO import time #Importamos el paquete time pin_led = 17 #Variable que contiene el pin(GPIO.BCM) al cual conectamos la señal del LED pin_btn = 10 #Variable que contiene el pin(GPIO.BCM) al cual conectamos la señal del botón GPIO.setmode( GPIO.BCM ) #Establecemos el modo según el cual nos refiriremos a los GPIO de nuestra RPi GPIO.setup( pin_btn , GPIO.IN , pull_up_down=GPIO.PUD_UP ) #Configuramos el pin del botón como Entrada y habilitamos una resistencia de pull_up interna, por lo que podríamos presindir de la resistencia de pull_up física ennuestro circuito GPIO.setup( pin_led , GPIO.OUT) #Configuramos el pin del led como una salida estado_led = False #Variable que guardará el estado del led #Contenemos el código principal en un aestructura try para limpiar los GPIO al terminar o presentarse un error try: while 1: #Implementamos un loop infinito if GPIO.input( pin_btn ) == GPIO.LOW: #Si la lectura al pin del botón resulta 0/GPIO.LOW ejecutamos el código del if estado_led = not estado_led #Invertimos el estado actual del led GPIO.output( pin_led , estado_led ) #Escribimos el estado del led en el pin del led print("Boton presionado") #Hacemos una impresión en consola print("Estado " + str(estado_led) + "\n") time.sleep(0.3) #Nos mantenemos en esta línea por 0.3 segundos para dar tiempo a que el botón se libere y el estado del led no cambie varias veces en un solo botonazo except KeyboardInterrupt: # CTRL+C print("\nInterrupcion por teclado") except: print("Otra interrupcion") finally: GPIO.cleanup() print("GPIO.cleanup() ejecutado")
Copiamos el siguiente código a un script de Python y lo ejecutamos con Python3. Oprimimos el botón para observar como el LED se enciende/apaga al mismo tiempo que observamos el mensaje correspondiente en la terminal.
import RPi.GPIO as GPIO #Importamos el paquete RPi.GPIO y en el código nos refiriremos a el como GPIO import time #Importamos el paquete time pin_led = 17 #Variable que contiene el pin(GPIO.BCM) al cual conectamos la señal del LED pin_btn = 10 #Variable que contiene el pin(GPIO.BCM) al cual conectamos la señal del botón estado_led = False #Variable que guardará el estado del led #Creamos la función que se ejecutará cuando se presente lainterrupciónexterna def button_callback(channel): global estado_led #declaramos la variable global que modificaremos dentro de la función estado_led = not estado_led #Invertimos el estado actual del led GPIO.output( pin_led , estado_led ) #Escribimos el estado del led en el pin del led print("Boton presionado") #Hacemos una impresión en consola print("Estado " + str(estado_led) + "\n") GPIO.setmode( GPIO.BCM ) #Establecemos el modo según el cual nos refiriremos a los GPIO de nuestra RPi GPIO.setup( pin_btn , GPIO.IN , pull_up_down=GPIO.PUD_UP ) #Configuramos el pin del botón como Entrada y habilitamos una resistencia de pull_up interna, por lo que podríamos presindir de la resistencia de pull_up física ennuestro circuito GPIO.add_event_detect( pin_btn , GPIO.FALLING, callback=button_callback, bouncetime = 300) #Agregamos una interrupción externa de tipo Falling en el pin del botón GPIO.setup( pin_led , GPIO.OUT) #Configuramos el pin del led como una salida #Contenemos el código principal en un aestructura try para limpiar los GPIO al terminar o presentarse un error try: while 1: #Implementamos un loop infinito time.sleep(1) #Toda la funcionalidad se realiza en el código de la función que atiende la interrupción except KeyboardInterrupt: # CTRL+C print("\nInterrupcion por teclado") except: print("Otra interrupcion") finally: GPIO.cleanup() print("GPIO.cleanup() ejecutado")
Referencias:
https://raspberrypihq.com/use-a-push-button-with-raspberry-pi-gpio/
Para seguir leyendo…