Skip to Content

How To Use A Push Button With Arduino

How To Use A Push Button With Arduino

Verás pulsadores por todas partes. Sólo tienes que mirar a tu alrededor. El mando de la televisión, el horno-microondas, la lavadora, los ordenadores portátiles, las calculadoras y mucho más. 

Este tutorial le mostrará cómo interconectar los pulsadores con Arduino. Aprenderá a utilizar los interruptores táctiles y el funcionamiento de los pulsadores.

Al final de este tutorial, estarás seguro de conectar los pulsadores (también conocidos como interruptores momentáneos) a Arduino.

Voy a dar una guía paso a paso para conectar y leer el estado de los pulsadores.

Obtendrá ejemplos de trabajo de Arduino para leer el estado del botón en el Arduino utilizando el método de sondeo, métodos de interrupción, y más.

Empecemos.

Componentes necesarios para utilizar el plotter de serie Arduino

Componentes de hardware 

Software

Makerguides.com is a participant in the Amazon Services LLC Associates Program, an affiliate advertising program designed to provide a means for sites to earn advertising fees by advertising and linking to products on Amazon.com. As an Amazon Associate we earn from qualifying purchases.

Consejo rápido: Compra los interruptores de botón, que vienen en estilo PCB de agujero pasante. El estilo de orificio pasante te ayuda a conectarlos fácilmente en la protoboard.

¿Qué es un pulsador?

Los pulsadores, también conocidos como interruptores momentáneos, realizan o interrumpen una conexión. Puedes utilizar los pulsadores fácilmente con Arduino. 

Los pulsadores contienen un mecanismo de resorte en su interior. Este mecanismo permite que el botón vuelva al estado anterior una vez que se deja de pulsar.

  • Estado abierto - Cuando no se presiona el pulsador
  • Estado cerrado - Cuando se pulsa el botón

Los pulsadores están disponibles en varios tamaños y colores. 

Los pulsadores están disponibles en varios tamaños y colores
Fuente de la imagen: www.amazon.com

El funcionamiento básico se ilustra en la siguiente imagen.

El funcionamiento básico
Fuente de la imagen: ciplearningstore.com

Al pulsar el interruptor, se ponen en contacto dos clavijas, cerrando así un circuito.

Supongamos que has conectado un pin del interruptor al pin de entrada del microcontrolador y el otro pin a tierra.

Entonces, al cerrar el interruptor, llevas el pin del microcontrolador a tierra. Un pin del microcontrolador con un pullup interno activado puede detectar esto y tomar una acción preprogramada.

La configuración común de un pulsador es la que se muestra a continuación.

La configuración común de un pulsador
Fuente de la imagen: https://docs.wokwi.com

Como puede ver, puede utilizar el lado izquierdo o el derecho del interruptor para la operación. Las filas superior e inferior están cortocircuitadas internamente, como se muestra en la imagen.

Hay varios tipos de interruptores con los que te puedes encontrar. Cada pulsador tiene sus propias aplicaciones. A continuación he enumerado los pulsadores más comunes.

  1. Interruptor de pulsación - Es el tipo de interruptor más utilizado. El pulsador pone en contacto dos pines cuando se pulsa. Muy utilizado para reiniciar un microcontrolador, timbres, encender la luz momentáneamente, etc.
  1. Interruptor de pulsar para romper - Cuando se pulsa este tipo de brujas, se rompe una conexión. Este tipo de interruptor se utiliza cuando hay que romper una conexión de circuito momentáneamente.
  1. Interruptores táctiles - Son interruptores de tamaño miniatura que se utilizan principalmente para montar en las placas de circuito impreso. Me decantaré por estos interruptores cuando la altura del botón tenga que ser mínima.
  1. Interruptores montados en panel: puede montar este tipo de interruptores en el panel, como el tablón de anuncios, el panel frontal del equipo, etc.

Daré algunos parámetros críticos de un interruptor que debes conocer antes de elegir uno para tu próximo proyecto.

  1. Corriente nominal - La corriente máxima que puede manejar el interruptor. El valor nominal de la corriente es importante en las aplicaciones que accionan LEDs de alta potencia en serie con un botón. Los valores nominales de CA y CC serán diferentes.
  1. Tensión nominal - Es la tensión máxima que se puede aplicar al accionar el interruptor. La corriente alterna y la corriente continua tienen diferentes valores nominales.
  1. Temperatura de funcionamiento - Esta es una característica común para cualquier pieza que elija para su próximo proyecto. Cada interruptor tendrá una resistencia en serie equivalente, y una vez que la corriente fluya a través de él, se producirá la disipación de energía en forma de calor.
  1. Vida mecánica - Número de empujones que puede tolerar antes de que el interruptor pueda fallar. El fallo puede ser permanente o intermitente.

Instrucciones paso a paso para conectar un pulsador a Arduino

Las siguientes secciones le mostrarán cómo conectar los pulsadores con varias configuraciones de entrada con un Arduino.

Proyecto 1: Cómo conectar un pulsador activo-bajo a un Arduino

¿Qué es una configuración activa-baja?

La configuración activa-baja consiste en que cuando se presiona el pulsador, se cortocircuita el pin de entrada a tierra directamente o a través de una resistencia de muy bajo valor.

Arduino leerá el estado del pin como cero (lógica LOW).

Este es el diagrama de conexión fundamental que puedes construir para completar el proyecto con un interruptor en configuración activo-bajo.

Wiring of button and LED to Arduino
Wiring of button and LED to Arduino

1) Conecta un LED al pin 4 de Arduino

Estoy utilizando un LED para verificar que nuestro código es correcto, y podemos detectar fácilmente el estado del pulsador.

El lado plano de un LED es el cátodo (negativo) y la patilla doblada del LED indica la patilla del ánodo (positivo).

Conecta un LED al pin 4 de Arduino
LED pinout

Utilice siempre un valor pequeño de la resistencia en serie con el LED para proteger los componentes de la caída de tensión debido a la sobrecorriente.

2) Conecta el interruptor al Arduino

Conecte un pin del Interruptor al pin GND y el otro pin al pin número 8.

Asegúrese de que su conexión tiene el aspecto que se muestra en la siguiente imagen.

Button Wiring
Button Wiring

3) Programe el Arduino con el ejemplo de código de pulsador que aparece a continuación

#define LED_PIN 2
#define BUTTON_PIN 8
 
unsigned int button_status = 0;
 
void setup() {
  // initialize digital pin LED_BUILTIN as an output.
  pinMode(LED_PIN, OUTPUT);
  pinMode(BUTTON_PIN, INPUT_PULLUP);
}
 
void loop() {
  button_status = digitalRead(BUTTON_PIN);
 
  if (button_status == 0) {
    digitalWrite(LED_PIN, HIGH);
  } else {
    digitalWrite(LED_PIN, LOW);
  }
}

Describiré lo que hace cada línea de código y su significado. 

pinMode(BUTTON_PIN, INPUT_PULLUP);

BUTTON_PIN es una constante, y el valor es 8. La función pinMode configura el pin #8 como entrada y habilita el pull-up interno.

El pull-up interno asegura que el pin de Arduino estará ligado a 5 V (Logic HIGH) internamente a través de una resistencia.

Se utiliza el pullup o pulldown interno cuando se quiere que el pin de entrada esté en una fase definida (cuando se suelta el pulsador)

button_status = digitalRead(BUTTON_PIN);

La función digitalRead devuelve un 1 o un 0 que se almacenará en la variable button_status.

Se utiliza el estado del botón para encender o apagar el LED. Ayuda a verificar tanto las conexiones como la lógica.

4) Simulación de Arduino para el ejemplo del pulsador activo-bajo

Simulación de Arduino para el ejemplo del pulsador activo-bajo
Fuente de simulación: Simulador Arduino Wokwi

¡Enhorabuena! Esto completa el primer ejemplo de conexión del pulsador a un Arduino. Si tienes problemas, vuelve a comprobar las conexiones y el código.

Si tienes dudas, no dudes en dejar un comentario, estaré encantado de ayudarte.

Se utilizará el pullup interno cuando la señal externa sea baja cuando esté activa. Ejemplos de este tipo de pines son las Señales de Reset activas bajas, las líneas de selección de chip, etc.

Debes terminar estas líneas con una resistencia pullup (interna o externa). El uso de una resistencia interna para el pullup ahorra espacio en la PCB y reduce el número de componentes en 1.

Proyecto 2: Cómo conectar un pulsador activo-alto a un Arduino

¿Qué es una configuración active-high?

La configuración activa alta es cuando se presiona el pulsador, se cortocircuita el pin de entrada los 5 V directamente o a través de una resistencia de muy bajo valor.

Arduino leerá el estado del pin como un HIGH lógico.

A continuación puedes ver el esquema de conexión para completar el proyecto con un interruptor en configuración activo-alto.

Wiring of button and LED with Arduino
Wiring of button and LED with Arduino

Tienes que usar una resistencia (normalmente de 10 kOhms a 100 kOhms) para tirar de la línea de entrada a la tierra cuando el interruptor está inactivo.

1) Realiza las conexiones como se muestra en la imagen anterior

Sigue los pasos similares a los del proyecto anterior. Fíjate en que tienes que utilizar una resistencia pull-down de un valor específico. Puedes utilizar cualquier valor entre 10 kOhms y 100 kOhms.

El interruptor está conectado al pin de 5 V en lugar del pin GND como en el proyecto anterior.

2) Programar el Arduino

Puedes reutilizar el código de Arduino que usaste en el proyecto anterior. Puedes notar que la lógica está ahora invertida.

Al pulsar el botón, el LED se apaga y viceversa.

Sigue los pasos similares a los del proyecto anterior. Fíjate en que tienes que utilizar una resistencia pull-down de un valor específico. Puedes utilizar cualquier valor entre 10 kOhms y 100 kOhms.

3) Simulación de Arduino para el ejemplo del pulsador activo-alto

Simulación de Arduino para el ejemplo del pulsador activo-alto
Fuente de simulación: Simulador Arduino Wokwi

Las aplicaciones de la configuración pulldown se encuentran cuando un interruptor, al cerrarse, proporciona un ALTO lógico.

Arduino no tiene una opción de pulldown interno.

Proyecto 3: Cómo leer el estado del pulsador utilizando métodos de sondeo e interrupción

Ya vimos un par de ejemplos en los que leíamos el estado de los pulsadores. Usamos una instrucción particular, digitalRead, para leer el estado del pulsador.

button_status = digitalRead(BUTTON_PIN);

Usted estaba leyendo repetidamente el estado del BUTTON_PIN en la función loop(). El método de sondeo es sencillo de utilizar.

El uso del método de sondeo tiene una desventaja. El mecanismo de sondeo le será menos útil cuando:

  1. Hay que leer el estado del botón en cuanto cambia
  2. Tienes que leer el estado del botón mientras estás en medio de otra tarea

Si hay otras diez tareas, el método de sondeo le hace esperar a que las diez tareas se completen antes de poder comprobar de nuevo el estado del pin del botón. En determinados escenarios, esto no será aceptable.

Por ejemplo: cuando las pulsaciones de los botones son de corta duración.

¿Cuál es el método de interrupción para leer el estado de los pulsadores?

Le mostraré un procedimiento paso a paso para configurar el Arduino para leer el estado del botón en el método de interrupción. En este ejemplo, vamos a parpadear el LED de la placa conectado al pin #13 del Arduino.

Los pines #2 y #3 de Arduino UNO soportan interrupciones externas. Puedes conectar pulsadores con cualquiera de esos pines.

Los pines #2 y #3 de Arduino UNO soportan interrupciones externas

1) Empezar con un nuevo boceto

Conecta el interruptor entre el pin #2 de Arduino y el pin GND .

Empezar con un nuevo boceto

2) Copiar el siguiente código en un nuevo sketch y programar el Arduino

const byte ledPin = 13;
const byte interruptPin = 2;
volatile byte state = LOW;
 
void setup() {
  pinMode(ledPin, OUTPUT);
  pinMode(interruptPin, INPUT_PULLUP);
  attachInterrupt(digitalPinToInterrupt(interruptPin), blink, CHANGE);
}
 
void loop() {
  digitalWrite(ledPin, state);
}
 
void blink() {
  state = !state;
}

3) Pulsador de interrupción Desglose del código y explicación

En el ejemplo, defino una función con el nombre de blink(). Esta función será invocada cada vez que haya un cambio en el estado del pulsador.

Simplemente alternamos el valor de la variable estado entre 1 y 0 cada vez que se llama a la función de interrupción.

void blink() {
  state = !state;
}

¿Cómo se le dice al Arduino que llame a la función de interrupción? Se hace en esta línea particular de abajo.

attachInterrupt(digitalPinToInterrupt(interruptPin), blink, CHANGE);

La función attachInterrupt toma tres argumentos:

  1. El pin de interrupción la asociación que se hará con
  2. La función debe ser llamada cuando hay un evento
  3. El tipo de evento para el que se debe llamar a esta función

Elevento en nuestro ejemplo es CHANGE. La función será llamada siempre que haya un cambio en el estado de la interrupción de 1 a 0 y de 0 a 1.

Las opciones para el tipo de evento son las siguientes:

  1. LOW para activar la interrupción siempre que el pin esté bajo,
  2. CHANGE para activar la interrupción cada vez que el pin cambie de valor
  3. RISING para disparar cuando el pin pasa de bajo a alto,
  4. FALLING para cuando el pin pasa de alto a bajo.

4) Una comparación entre el modo de interrupción y el modo de sondeo

En esta tabla, enumero las principales diferencias entre los dos métodos que hemos analizado.

MODO DE INTERRUPCIÓNMODO DE VOTACIÓN
El evento será independiente de la tarea en la que esté trabajando la CPU (asíncrono)Sincronizado con las tareas de la UC. Se produce a intervalos regulares
Muy eficaz para gestionar las tareas menos frecuentesMenos eficiente
Adecuado para aplicaciones alimentadas por bateríaNo es adecuado para aplicaciones de batería, ya que el sondeo requiere muchos ciclos de CPU
Necesita más código para la configuración única Fácil de configurar

5) Pulsador en la simulación del modo de interrupción

Observe que el estado del LED cambia al pulsar el interruptor y vuelve a cambiar al soltar la tecla.

El tipo de evento se definió como CAMBIO; de ahí que se vea este comportamiento.

Pulsador en la simulación del modo de interrupción

Proyecto 4: ¿Qué es el problema del rebote y cómo evitarlo en Arduino?

Todos los interruptores tienen un mecanismo de resorte, por lo que habrá muchas conexiones de apertura y cierre cuando se pase de un estado a otro.

La siguiente imagen le muestra el efecto de rebote del botón de forma sencilla.

Qué es el problema del rebote y cómo evitarlo en Arduino
Fuente de la imagen: allaboutcircuits.com
  • Al cerrar el interruptor, el circuito real se cerrará y abrirá varias veces durante unos ms antes de cerrarse por completo. 
  • Este comportamiento no deseado puede desencadenar múltiples interrupciones en su proyecto para una sola pulsación causando recuentos erróneos.
  • Existen métodos de hardware y software para evitar el problema.
  • La eliminación de la carga por software no necesita hardware externo y es fácil de implementar.

En este proyecto, te daré un ejemplo de librería de rebote que resuelve el problema.

La biblioteca se llama ezButton y es muy fácil de usar.

1) Empezar con un nuevo boceto

Para utilizar la librería ezButton, tienes que copiar los dos archivos fuente en el mismo directorio en el que has almacenado el sketch de Arduino.

  1. ezButton.h
  2. ezButton.cpp

O

Puede instalar la biblioteca ezButton. Te ayudará a ahorrar mucho tiempo. Además, te asegura que emplearás bibliotecas actualizadas todo el tiempo.

2) Instalar la biblioteca ezButton

Siga los siguientes pasos para instalar fácilmente la biblioteca ezButton.

1. Haga clic en la opción Herramientas

2. Seleccione Gestionar Bibliotecas

Instalar la biblioteca ezButton

3. Busque la biblioteca ezButton y haga clic en instalar

Buscar la biblioteca ezButton

3) Copia el siguiente código en tu boceto de Arduino

/*
 * Created by ArduinoGetStarted.com
 *
 * This example code is in the public domain
 *
 * Tutorial page: https://arduinogetstarted.com/tutorials/arduino-button-library
 *
 * This example reads the state of a button with debounce and print it to Serial Monitor.
 */
 
#include"ezButton.h"
 
ezButton button(7);  // create ezButton object that attach to pin 7;
 
void setup() {
  Serial.begin(9600);
  button.setDebounceTime(50); // set debounce time to 50 milliseconds
}
 
void loop() {
  button.loop(); // MUST call the loop() function first
 
  if(button.isPressed())
    Serial.println("The button is pressed");
 
  if(button.isReleased())
    Serial.println("The button is released");
}

Una vez que ejecute el código en un Arduino, verá los mensajes en el terminal cuando se produzca el evento de pulsar/liberar la tecla.

Puedes ver que el código es mucho más sencillo de usar una vez que utilizas la biblioteca. Hay varias otras funciones útiles además de la lógica de desbordamiento, tales como:

  • comprobar el estado del botón
  • Soporta múltiples botones
  • Proporcionar eventos de tiempo para las acciones de los botones
  • Opción programable de pulsación larga y corta, etc.

Conclusión

En este artículo hemos visto cómo conectar un pulsador a un Arduino. He mostrado las conexiones necesarias y el código de Arduino que debes utilizar. Los pulsadores siempre son prácticos.

Espero que ahora puedas utilizar con confianza los pulsadores en otros proyectos. He utilizado los pulsadores para controlar la velocidad del ventilador y los patrones de luz en proyectos recientes. 

Me encantaría conocer su opinión. ¿Le ha resultado útil este artículo? ¿Tiene algún comentario para que este artículo sea más útil?

Por favor, comparta su opinión en la sección de comentarios. Estaré encantado de responder a todos sus comentarios.

No dudes en compartir los proyectos que hayas construido con los pulsadores. Estaré encantado de saber más al respecto.

Ahora te toca a ti sugerir un tema sobre el que te gustaría aprender a continuación.

No olvides compartir el artículo con tus amigos.