Uno de los elementos más utilizados en muchos proyectos con Arduino son los botones pulsadores. Éstos elementos permiten abrir y cerrar el paso de corriente para controlar LED, relés, motores y casi cualquier otra cosa que se te ocurra. En este pequeño tutorial aprenderás a configurar botones y pulsadores en Arduino.
Características de los pulsadores
Los pulsadores están disponibles en el mercado en una gran cantidad de modelos distintos. Uno de los más conocidos son el interruptor tactil, que permite cerrar un circuito de forma momentánea. El modelo al que hacemos referencia lo puedes apreciar en la siguiente imagen:

Los pines a ambos lados del pulsador hacen contacto dentro de la carcasa. A su vez, el botón posee un trozo de conductor adherido. Cuando se presiona el botón hacia abajo, el circuito se cierra entre los pines de cada lado y la corriente puede fluir entre ellos:

Configurar un pulsador en Arduino
Para que aprendas de forma didáctica a configurar un pulsador en Arduino, vamos a realizar un montaje de un circuito para encender un LED cuando se presione.
Puedes usar este circuito para controlar cualquier dispositivo alimentado por una señal de 5 voltios.
A continuación la imagen muestra el montaje del circuito:

Puedes utilizar una resistencia de entre 200 y 1.000 ohmios.
Conecta el pulsador en un extremo al PIN de 5 voltios y el otro extremo al pin 7 del Arduino.
Al presionar el pulsador, la corriente fluye al pin 7. Usamos la función digitalRead()
para detectar cuando esto sucede.
Luego usamos la función digitalWrite()
para enviar una señal ALTA al pin 11, y de esta forma el LED se encienda.
Código para programar el pulsador en Arduino
El código siguien permite poner en funcionamiento el montaje anterior:
int buttonPin = 7;
int ledPin = 11;
void setup() {
pinMode(buttonPin, INPUT);
pinMode(ledPin, OUTPUT);
}
void loop() {
int buttonState = digitalRead(buttonPin);
digitalWrite(ledPin, buttonState);
}
Las primeras líneas del Sketch declaran dos variables pin. La primera variable denominada buttonPin
contiene el número del pin del Arduino al que se ha conectado el pulsador(pin 7).
Luego la variable ledPin
contendrá el número de pin del Arduino conectado al LED.
En el cuerpo de setup()
, usamos la función pinMode()
para configurar la entrada a buttonPin
.
Luego configuramos el ledPin
como salida.
En el cuerpo de loop()
, se declara una variable entera llamada buttonState
y iguala a digitalRead(buttonPin)
.
Cuando el pulsador esté abierto, el voltaje en buttonPin
será bajo, por lo que la función digitalRead()
devolverá un valor bajo. El valor bajo se almacena en la variable buttonState
.
Cuando se cierre el pulsador, el voltaje en buttonPin
será alto y se almacenará un valor alto en la variable buttonState
.
La función digitalWrite()
permite enviar la señal de voltaje al LED.
Pines flotantes
Muchas veces en montajes como el anterior es probable que el LED parpadee con solo acercar el dedo al pulsador.
El fenómeno anterior se debe a que muchas veces existen campos electromagnéticos débiles en nuestros dedos. Esto debido a que los pines de Arduino son sensibles y estos campos son detectados como una señal de voltaje. Luego son registrados como señales altas por la función digitalRead()
.
Al fenómeno en que los pines GPIO captan campos electromagnéticos perdidos, se le denominan pines flotantes.
Cuando se da este caso es necesario resolver el problema asegurándonos de que la función buttonPin
permanece baja cuando no se presiona el botón.
Resistencias PULL DOWN
La forma más fácil de lidiar con el fenómeno anterior es conectar una resistencia en el lado izquierdo del botón pulsador a tierra, como puedes apreciar en la siguiente imagen:

De esta forma la energía electromagnética perdida fluirá a tierra a través de la resistencia.
Cuando se presiona el botón, la resistencia limitará el flujo de corriente a tierra y la corriente fluirá al pin 7.
El valor de la resistencia pull down puede variar, pero generalmente es superior a 10.000 ohmios.
Resistencias Pull Up
Las resistencias pull up son más comunes que las resistencias pull down.
Éstas últimas están conectadas a una fuente de voltaje y mantienen el pin en un estado de voltaje alto:

El código para usar una resistencia pull up es el siguiente:
int buttonPin = 7;
int ledPin = 11;
void setup() {
pinMode(buttonPin, INPUT);
pinMode(ledPin, OUTPUT);
}
void loop() {
int buttonState = digitalRead(buttonPin);
if (buttonState == LOW) {
digitalWrite(ledPin, HIGH);
}
if (buttonState == HIGH) {
digitalWrite(ledPin, LOW);
}
}
Resistencia Pull Up interna en Arduino
Las resistencias pull up y pull down que hemos visto en este artículo son componentes de circuitos externos.
Arduino también ofrece una resistencia pull up interna que puedes usar para el mismo propósito anterior.
Para usar la resistencia pull-up interna de Arduino, use INPUT_PULLUP
como segundo argumento en la función pinMode()
para el buttonPin
de la siguiente forma:
int buttonPin = 7;
int ledPin = 11;
void setup() {
pinMode(buttonPin, INPUT_PULLUP);
pinMode(ledPin, OUTPUT);
}
void loop() {
int buttonState = digitalRead(buttonPin);
if (buttonState == LOW) {
digitalWrite(ledPin, HIGH);
}
if (buttonState == HIGH) {
digitalWrite(ledPin, LOW);
}
}
Ahora puede cablear el circuito sin la resistencia pull-up conectada a 5 voltios. La resistencia pull up interna usa un componente menos y hace que el circuito sea un poco más simple.
Esperamos que este artículo te haya ayudado a configurar botones y pulsadores en Arduino.