Utilizar Push Button con Arduino

Una de las maneras más comunes para realizar control es por medio de un botón, controlando desde un simple LED hasta una secuencia de movimientos articulados. En este capítulo aprenderás a utilizar un botón pulsador (push button) con Arduino.

¿Qué es un push button?

Un botón pulsador es básicamente un interruptor que podemos accionar pulsando sobre él, mientras lo mantenemos pulsado el interruptor estará cerrado, generando continuidad; cuando lo soltemos, el interruptor se abrirá.

Botón pulsador.
Botón pulsador.
Diagrama de un botón pulsador.
Diagrama de un botón pulsador.

El botón cuenta (normalmente) con cuatro terminales. De acuerdo a la imagen anterior, los pines 1 y 2 están unidos internamente, así como los pines 3 y 4. Cuando pulsamos el botón, se realiza una conexión entre ellos como se muestra a continuación:

Si observas con detenimiento, podrás observar por la parte inferior del botón, una ranura que cruza de lado a lado, esta muesca la puedes utilizar de referencia para saber cuáles pines están separados y cuales unidos internamente.

Entradas digitales en Arduino

Nuestra placa Arduino tiene varios pines de entrada digitales, los cuales pueden detectar voltajes de corriente directa e interpretarlos como una señal digital. Un valor entre 2.6 y 5 volts lo detectará como estado HIGH, y uno entre 0 y 2.5 volts como LOW. Nosotros estratégicamente utilizaremos este tipo de señales como una orden para el Arduino.

Es importante mencionar que no debemos de sobrepasar de los 5V en los pines de entrada de nuestra placa, o los podremos dañar. Si necesitamos enviarle señales de más de 5V, es obligatorio utilizar un divisor de tensión.

Conectar un pulsador a nuestra placa Arduino

Para conectar el botón, es necesario utilizar una resistencia eléctrica. Aunque nuestras placas Arduino tienen resistencias internas que se activan mediante código para realizar la conexión de botones externos, yo siempre les recomiendo utilizar resistencias externas para evitar errores.

Existen dos esquemas para realizar la conexión de un pulsador a nuestro Arduino: con resistencia pull-up y con resistencia pull-down. Las conexiones de cada una de ellas se muestran en el diagrama siguiente:

Diagrama de conexiones pull-up y pull-down.
Diagrama de conexiones pull-up y pull-down.

El valor de la resistencia utilizada no es crítico; sin embargo, te recomiendo valores de 1 a 10 KΩ. Al utilizar entradas digitales es importante asegurarnos que los posibles valores de entrada sean lo mas estables posible. Es aquí cuando las resistencias pull-up o pull-down nos brindan apoyo.

La resistencia pull-up mantiene una señal de 5V (HIGH) en el pin digital mientras que el botón no se pulsa. Una vez que es pulsado, el pin digital recibe una señal de 0V (LOW).

La resistencia pull-down mantiene una señal de 0V (LOW) en el pin digital mientras que el botón no se pulsa. Una vez que es pulsado, el pin digital recibe una señal de 5V (HIGH).

Si en nuestro Arduino dejamos al “aire” los pines declarados como entradas digitales, el valor recibido por nuestra placa será indefinido, y tendrá valores aleatorios como señal de entrada.

Controlando un LED con push-button

Para poner manos a la obra (lo que más nos gusta), utilizaremos el siguiente diagrama. Controlaremos el encendido y apagado de un LED utilizando un botón pulsador, utilizaremos la conexión pull-down.

Diagrama push-button con LED.
Diagrama push-button con LED.

Una vez realizadas las conexiones, procedemos a escribir nuestro código. Puedes guiarte con el código utilizado en ejemplos anteriores.

Como puedes observar, hemos creado varias variables. La variable pinLED será para indicarle qué pin del Arduino será nuestra salida, en este caso conectaremos un LED. La variable pinBoton será utilizada para indicar cuál será el pin de entrada, en este caso nuestro botón. Ambas variables son del tipo int o entero, ya que serán utilizadas con números enteros. La siguiente variable es boton que será del tipo bool, estas variables solo pueden obtener dos posibles valores: HIGH o LOW; es decir 1 o 0. Nosotros la utilizaremos para almacenar el estado de nuestro botón.

En la función de configuración, utilizando la función pinMode, indicaremos cuales serán los pines de entrada y salida. Nuestro código principal estará basado primeramente en leer nuestra entrada digital, el botón. Lo haremos por medio de la función digitalRead(pin), donde en el parámetro de entrada indicamos el pin físico a leer. En nuestro caso está direccionado a la variable pinBoton. El resultado será almacenado en la variable de tipo bool llamada boton. Posteriormente, utilizando un bloque condicional if revisaremos cuál es el estado de nuestra variable boton. Utilizando el comprador == indicamos que compare si boton es igual a HIGH, si este resultado es verdadero, se ejecutará la línea que enciende el LED. Si no, se ejecutará la línea que apaga el LED.

Si quieres aprender de manera más profunda a utilizar los bloques condicionales if déjamelos saber en los comentarios.

Verificamos nuestro código y lo cargamos a nuestra placa Arduino UNO. Deberás poder encender el LED mientras tengas oprimido el botón. Con este simple código ya podemos controlar cuándo se encenderá y apagará el LED.

Eliminar rebotes al utilizar push-button

Cuando utilizamos un pulsador como entrada digital, algunas veces obtendremos rebotes. El fenómeno de rebote se refiere a que al cerrar (pulsar), o al abrir (dejar de pulsar) el interruptor, pueden suceder cambios no deseados. Observa la siguiente imagen de un osciloscopio, podemos observar que al pulsar el botón la señal incrementa (de 0V a 5V); cuando lo soltamos, esperaríamos ver que la señal vuelve a ser de 0V; sin embargo, la señal se observa que rebota (sube y baja) una vez antes de quedarse en 0V.

Rebote de la señal de un botón.
Rebote de la señal de un botón.

Este efecto es altamente no deseado, ya que en la práctica el LED enciende y apaga de manera muy rápida antes de quedarse totalmente apagado, aún cuando nosotros sólo queríamos que se apagara de una vez. Quizá para un LED esto no es crítico, pero habrá aplicaciones donde sí lo será.

¿Quieres aprender a visualizar señales en un osciloscopio? Solicita en tus comentarios un capítulo sobre esto.

Los rebotes pueden ocurrir tanto en los cambios de 0 a 5V como en los cambios de 5 a 0V; es decir, pueden ocurrir tanto de subida como de bajada. ¿Qué podemos hacer para evitarlos?

¿Te está gustando este artículo?

Te invito a descargar totalmente gratis la Guía de Inicio en Arduino

Encontrarás mucha información extra, conceptos y sobre todo podrás llevarla contigo en todo momento

Como eliminar los rebotes causados por un botón

Para eliminar los molestos rebotes existen dos maneras. La primera es mediante hardware; es decir, de manera externa. Esto se logra agregando un capacitor en paralelo con el botón. La segunda manera es mediante software, utilizando un mejor código.

Eliminar rebotes agregando un retardo

Una manera muy efectiva, pero no perfecta, es utilizar retardos en nuestro código. Agregando una pausa en el Arduino, nos aseguramos que el programa espere una determinada cantidad de tiempo antes de que vuelva a revisar el estado del botón, con esto podemos prevenir que los efectos de rebote sean capturados.

Si te fijas en el código anterior, agregamos una línea de retardo con la función delay(50), la cual hará una pausa de 50 milisegundos antes de volver a verificar el estado del botón. Con esto estamos haciendo una doble verificación del botón, asegurándonos de que sigue pulsado. Al soltarlo, realizamos algo similar.

Una pausa de 50 milisegundos suele ser suficiente para evitar los rebotes; sin embargo, no es perfecta.

Eliminar rebotes utilizando una biblioteca

Como ya te he mencionado en otras ocaciones, Arduino es libre, por lo que cualquier puede ofrecer mejoras, así como código a reutilizar. Por lo que muchas personas desarrollan bibliotecas de código (library) que podemos utilizar sin ningún problema.

Para este ejemplo, utilizaremos la biblioteca desarrollada por GeekFactory llamada GFButton. Como es una biblioteca que no tenemos instalada, procederemos a ello. Primero en el IDE Arduino, daremos click en Herramientas->Administrar Bibliotecas. En el recuadro que aparece, escribirás GFButton en el espacio para buscar.

Instalar biblioteca.
Instalar biblioteca.

Una vez que la instalemos, le daremos cerrar al recuadro y utilizaremos el código siguiente:

Al utilizar bibliotecas (o librerías, como lo traducen algunos), tenemos que indicarle en el código que añada la librería específica. Por lo cual utilizamos #include "nombreDeLibreria.h", en nuestro caso la librería se llama GFButton.h. Muy fácil. Sólo recuerda, el programa lo deberás guardar en la misma carpeta principal, donde se instalan las librerías. La carpeta por defecto es la que indicaste al instalar el IDE, que suele ser llamada Arduino, y se encuentra en la carpeta de Documentos principales.

Esta biblioteca trae algunas funciones creadas, las cuales las podemos utilizar directamente. Para ello, tenemos que crear un objeto del tipo GFButton. En este ejemplo GFButton boton1(pinBoton), indicándole que el nombre del objeto será boton1, y el pin donde se conectará es el pinTono. Posteriormente utilizaremos la función llamada isPressed(), que revisará si el botón fue presionado o si está siendo presionado, si esto se cumple, la función entregará un valor de TRUE. Para utilizarlo hay que hacerlo por medio del objeto creado anteriormente es por eso que resulta en boton1.isPressed(). Este resultado lo insertamos en el parámetro de condición del bloque condicional if, anteponiéndole la palabra reservada not, la cual nos negará el resultado; es decir, lo invertirá. Lo invertimos ya que la biblioteca fue creada con una lógica de resistencia pull-up.

Con el uso de la biblioteca, evitaremos siempre los rebotes. Te recomiendo siempre utilizar una biblioteca para este fin.

Encender LED al pulsar un botón y apagar al pulsar otro botón

En el último ejemplo, utilizaremos un botón de encendido y un botón para el apagado del LED. Recuerda que el LED puede ser reemplazado (con sus debidos ajustes), por cualquier tipo de sistema de actuador. Por ejemplo un motor de corriente directa, una lámpara, entre muchos otros casos. Si quieres un ejemplo específico déjame tus comentarios y te haré un tutoría sobre eso.

Por lo tanto, agregaremos otro botón:

Diagrama dos botones.
Diagrama dos botones.

Utilizaremos la entrada digital 4 para el botón de apagado. Programamos el siguiente código.

Observa que creamos dos objetos utilizando la biblioteca GFButton, uno para el botón para encender y otro para el botón para apagar. El código principal estará basado en dos bloques if, separados. Uno revisará si el botón para encender fue presionado; y el otro, para revisar si el botón para apagar fue presionado.

Con lo anterior, al pulsar el botón para encender, el LED se encenderá y permanecerá así. Una vez que se pulsa el botón para apagar, el LED se apagará y permanecerá así hasta que se vuelva a presionar el botón de encendido. Esto es muy utilizado para generar un sistema de arranque y paro, por ejemplo: el arranque y paro de una banda transportadora, de una bomba para riego, entre muchos otros ejemplos.


¿Qué te ha parecido el capítulo de hoy? Déjame tus comentarios, sugerencias y porqué no, también tus quejas. Recuerda suscribirte al boletín de noticias y compartir con quien tu prefieras. ¡Gracias por tu visita!

Recuerda visitar nuestras redes sociales

Deja un comentario