Casi cualquier aparato electrónico hoy en día incluye una tecla, botón, pulsador o switch. Los proyectos con arduino no son la excepción y virtualmente cualquier idea que desarrollemos dispondrá de al menos un par de botones.

En este tutorial hablaremos sobre como se puede conectar un botón al arduino y como podemos hacer para procesar correctamente las señales que envían. Además veremos como realizar aplicaciones más avanzadas con botones, por ejemplo: como detectar pulsaciones largas, doble o triple clic, etc.

 

Materiales necesarios para las prácticas

Para completar los ejercicios propuestos en esta página recomendamos adquirir los siguiente materiales:

Utilizaremos el led en el pin 13 del arduino para realizar las prácticas sin la necesidad de conectar leds externos.

 

¿Cómo conectar un botón a arduino?

Para conectar un botón al arduino conviene tener en mente ciertos puntos:

  • Un botón puede conectarse a cualquier pin de arduino (digital o analógico, ya que los analógicos usualmente funcionan también como digitales).
  • Existen dos configuraciones posibles: con resistencia pull-up o resistencia pull-down.
  • Configuraremos el pin seleccionado como entrada digital.
  • Debemos tomar en cuenta los rebotes y el ruido eléctrico en el software.
  • Es necesario utilizar una resistencia pull-up o pull-down, ya sea interna o externa.

Las dos formas que existen para conectar un botón al arduino se visualizan en los siguientes diagramas:

Botón con resistencia pull-upBotón con resistencia pull-down

Visto en el protoboard quedaría como se muestra más abajo, siendo el botón colocado del lado izquierdo del protoboard el que está conectado con pull-up, mientras que el derecho esta conectado con una resistencia pull-down.

Boton configuración pull-up y pull-down

 

El valor de las resistencias en este caso no es crítico, pero debemos considerar que valores menores causarán que circule una corriente mayor cuando se oprime el botón, mientras que los valores mayores pueden permitir que el ruido se introduzca al pin de entrada.

Los valores típicos para resistencia pull-up o pull-down son de 1 a 10 KOhms.

 

¿Para que sirve una resistencia pull-up o pull-down?

La función primordial de las resistencias en el circuito del botón es mantener un estado lógico conocido cuando el botón no está siendo accionado.

Esto es necesario ya que las entradas del microcontrolador, si se dejan al aire, no poseen un estado determinado y pueden ir a cualquiera de dos estados posibles de forma aleatoria. Según la necesidad, se pueden colocar las resistencias en pines de entrada, obteniendo los siguientes efectos:

  • La resistencia pull-up mantiene un estado alto en el pin mientras el pulsador no es accionado, el estado activo del botón es BAJO (cuando se presiona).
  • La resistencia pull-down mantiene un estado bajo mientras el pulsador no es accionado, el estado activo del botón es ALTO (cuando se presiona).

El microcontrolador AVR incluido en el arduino UNO, posee en cada pin de entrada una resistencia pull-up que se puede activar bajo control de nuestro programa, evitándonos tener que colocar de forma externa este componente. Sin embargo, no todos los microcontroladores poseen esta característica y por esta razón es común encontrar este componente colocado de forma externa en la mayoría de los circuitos.

 

Armado del circuito para las prácticas con botón o pulsador

El circuito que armaremos en el protoboard para la realización de las prácticas que se proponen a continuación es el siguiente:

circuito boton practicas con arduino

Aprovecharemos el led que viene conectado por defecto en el pin 13 del arduino y por esta razón no necesitamos otro aditamento como dispositivo de salida. Estaremos utilizando ambos botones con resistencia pull-up externa.

 

Realizar la programación del botón o pulsador con arduino

El siguiente ejemplo muestra como encender un led con un pulsador y apagar con otro botón. Es un ejemplo muy sencillo pero que ilustra muy bien el uso de las funciones pinMode() y digitalRead(). Como en la mayoría de nuestros programas, hemos procurado comentar bastante para hacer que el código sea fácil de entender.

En este programa hemos leído el estado de los pines a variables intermedias, ya que lo usamos dentro de los cursos para que los estudiantes se familiaricen con el uso de las variables, pero puede saltarse este paso y colocar directamente la función digitalRead() dentro de las condiciones.

 

Eliminar rebotes y el ruido de un botón en arduino

El ruido eléctrico y el fenómeno conocido como rebote, son problemas que debemos tomar en cuenta al procesar la señal proveniente de un botón.

El fenómeno del rebote se da debido a las imperfecciones que existen en los contactos internos del pulsador. El problema es especialmente notorio cuando se atiende un botón mediante interrupciones, ya que el microcontrolador verá varios cambios de estado antes de que la señal se estabilice y tengamos un estado lógico definido en el pin de entrada.

La siguiente imagen nos muestra como se ve la señal típica proveniente de un pulsador.

senal de boton pulsador

El ruido eléctrico es otro de los problemas que debemos considerar al incorporar botones en nuestros proyectos. Una chispa en la cercanía de nuestro circuito, ruido en la red eléctrica, rayos, descargas electrostáticas o la manipulación directa del circuito electrónico (PCB) pueden causar que nuestro microcontrolador “vea” un estado activo en el pin de entrada por algunos instantes y realice la acción asignada a un botón, es decir, se pueden realizar activaciones falsas del botón debidas a perturbaciones externas.

Debido a la situación explicada anteriormente, es necesario elaborar el software para que funcione a pesar de las imperfecciones en la señal de entrada. El algoritmo más sencillo que hemos probado es el siguiente:

  1. Leer continuamente el estado del pin y detectar el flanco (descendente o ascendente) que indica que se ha pulsado un botón
  2. Esperar un tiempo prudente (alrededor de 10 a 100 mili segundos) hasta que se estabilice la señal
  3. Leer nuevamente el estado del pin y comprobar que se encuentre en el estado deseado
  4. Ejecutar la acción asignada al botón, una vez que nos aseguramos que efectivamente fue presionado.

Este algoritmo garantiza principalmente dos cosas:

  • Elimina las falsas activaciones del botón por ruido eléctrico
  • Se encarga de cualquier efecto de los rebotes.

Básicamente lo que hacemos es “muestrear” en dos momentos distintos la señal del botón y garantizar que el estado lógico que buscamos esta presente. Vamos ahora a mejorar un poco el programa anterior, incluyendo este algoritmo para la eliminación de rebotes y ruido eléctrico.

 

Programación de botón con eliminación de rebotes y ruido eléctrico

La siguiente programación es una mejora del ejercicio anterior en la cual se mejora la resistencia a ruido eléctrico, aplicando el algoritmo descrito en la sección anterior.

 

Programación avanzada de botones con arduino usando una librería

Para los ejemplos siguientes estaremos utilizando la librería GFButton que debe instalarse en nuestro IDE para poder compilar los ejemplos.

Realizaremos el ejercicio de prender un led con un botón y apagarlo con otro, pero ahora utilizaremos la librería para apoyarnos. Como podemos ver, hemos movido algo del código a la librería, quedando nuestro programa mucho más compacto.

Aprovechando que se simplifica el programa, podemos incluir sentencias para enviar datos al monitor serial y saber que está pasando en cada momento.

 

Detección de pulsaciones largas en un botón usando una librería

En este ejemplo vamos a aprender a detectar el tiempo que dura oprimido un botón, con esto podemos realizar acciones solamente si el botón permanece oprimido durante mas del tiempo programado.

En nuestro ejemplo a continuación, vamos a realizar la programación de dos botones: Uno encenderá un led si se mantiene oprimido más de 5 segundos y el otro apagará el led si se mantiene oprimido más de 5 segundos. Cualquier otra acción en los botones NO tendrá efecto en el estado de los leds.

 

Detección de doble y triple clic en un botón usando una librería

En algunas situaciones, puede ser necesario detectar cuando el usuario hace doble o triple clic en un botón. En este caso podemos hacer uso de las funcionalidades de programación mediante eventos que provee nuestra librería.

El siguiente ejemplo demuestra como hacer que se puedan encender o apagar un par de leds dando doble clic en el botón asociado a cada led. El programa ignorará las pulsaciones sencillas y solamente actuará cuando se oprima 2 veces seguidas el mismo botón en menos de un segundo.

 

Es necesario que cualquier pago sea realizado a la cuenta que la pagina muestra al crear una orden. No se aceptarán pagos a la cuenta anterior. Hasta nuevo aviso los pagos realizados vía PayPal no serán facturados. Ignorar