INICIO /  APRENDE /  BLOG /  GUÍA
Guía9 min·

Botón pulsador: tipos y cómo conectarlo a Arduino

Un botón pulsador es un interruptor que cambia de estado mientras lo presionas. Se usa para encender un LED, iniciar un temporizador o dar una orden a un microcontrolador. Con Arduino lo conectas entre un pin y GND y activas la resistencia pull-up interna con INPUT_PULLUP. El rebote de los contactos se filtra con unas líneas de código, y la elección del modelo depende del montaje, de si necesitas bloqueo y de la humedad del lugar.

Qué es un botón pulsador y cómo funciona

Un pulsador abre o cierra un circuito al presionarlo. En un pulsador momentáneo el contacto se cierra solo mientras lo mantienes presionado y se abre al soltarlo. En uno con bloqueo el contacto queda enganchado en la posición presionada y vuelve a su estado inicial con la siguiente pulsación. SPST significa un polo, un tiro, o sea, un solo contacto que conecta o desconecta dos terminales. Los botones de panel de 12 mm que Zamper publica con ese formato son de este tipo, y la ficha de cada modelo indica si es momentáneo o con bloqueo.

Pulsador, interruptor y switch: qué los diferencia

En electrónica, switch es el nombre general de cualquier componente que abre o cierra un circuito, y en las tiendas lo verás junto a las palabras botón e interruptor. La diferencia práctica está en lo que pasa al soltar. El pulsador momentáneo vuelve solo a su posición, y por eso sirve para dar una señal puntual a un microcontrolador, un timbre o un reinicio. El interruptor conserva la posición en que lo dejaste y sirve para encender o apagar un equipo. El pulsador con bloqueo se parece al interruptor en su comportamiento, pero con un cuerpo de botón. Si lo que buscas es dejar algo encendido, mira los interruptores, como el KDC1-101, cuya ficha indica 10 A y 240 V como máximos. Si buscas dar una orden, elige un pulsador. En Zamper encuentras ambos en la categoría Switch y Botones.

Los tipos de pulsador que vas a encontrar

El pulsador de 6 x 6 mm con cuatro pines es el clásico para protoboard y circuito impreso. Para identificar qué pines son un mismo contacto, mide continuidad con el multímetro sin presionar el botón y después presionándolo. El pulsador de panel de 12 mm lleva una tuerca trasera, se monta en una perforación de la caja y viene en versión momentánea y con bloqueo. Las versiones DS-213 agregan una empaquetadura que, según su ficha, da resistencia a los líquidos. El R13-507 es de 16 mm, de dos pines, y su ficha indica 6 A a 125 VAC y 3 A a 250 VAC. La placa de pulsador de tres pines trae un botón con pull-up integrado y un header de pines soldado para GND, VCC y señal, y está pensada para protoboard.

Pulsadores de Zamper según el uso

Para un prototipo en protoboard, el pulsador de 4 pines de 6 x 6 mm, que se vende en alturas de 7 a 17 mm, y la placa de pulsador de tres pines. Para una caja de control, los pulsadores de panel de 12 mm, momentáneos o con bloqueo, y el pack de 5 unidades de recorrido corto. Para un ambiente con humedad, los modelos DS-213 con empaquetadura. Para un contacto más grande, el R13-507 de 16 mm. Para dejar un equipo encendido, el interruptor KDC1-101. La disponibilidad cambia, así que confírmala en la ficha de cada producto o desde Cotiza o consulta disponibilidad.

Cómo elegir el pulsador según el uso

Parte por el montaje. En un prototipo sobre protoboard sirve el de 6 x 6 mm o la placa de tres pines. En una caja o un tablero de control usa uno de panel, medido contra el diámetro de la perforación que puedes hacer. Después decide entre momentáneo y con bloqueo. Para entregar un pulso a un Arduino conviene el momentáneo, porque el programa decide qué hacer con cada pulsación. El bloqueo sirve cuando quieres que el propio botón recuerde la posición. Si el lugar tiene humedad, polvo o salpicaduras, elige un modelo con empaquetadura y revisa en la ficha qué protección declara. Por último, lee la corriente y el voltaje que soporta el contacto y no los superes.

Por qué una entrada necesita pull-up o pull-down

Según la documentación de Arduino, un pin configurado como INPUT sin nada conectado, o con un cable suelto, entrega cambios de estado que parecen aleatorios porque capta el ruido eléctrico del ambiente. Para que la entrada tenga un valor conocido cuando el botón está suelto se usa una resistencia que la lleve a +5 V, llamada pull-up, o a GND, llamada pull-down. Arduino indica que 10 kΩ es un buen valor para una resistencia externa de este tipo.

Conexión a Arduino con la pull-up interna

La forma más simple no usa ninguna resistencia externa. Conecta un terminal del botón al pin 2 y el otro a GND, y en el programa configura el pin con INPUT_PULLUP. La documentación de Arduino indica que los chips ATmega traen resistencias pull-up de 20 kΩ que se activan por software, y que en la mayoría de las placas con AVR el valor queda garantizado entre 20 kΩ y 50 kΩ. La lógica queda invertida. Con el botón suelto el pin lee HIGH, y al presionarlo lee LOW. Evita el pin 13 para este uso, porque la mayoría de las placas tienen ahí un LED con su resistencia, que baja el voltaje de la entrada y puede leer LOW aunque no presiones.

const int PIN_BOTON = 2;

void setup() {
  Serial.begin(115200);
  // pull-up interna, el botón va entre el pin y GND
  pinMode(PIN_BOTON, INPUT_PULLUP);
}

void loop() {
  if (digitalRead(PIN_BOTON) == LOW) {
    Serial.println("Presionado");
  }
  // delay solo para la demo; el antirrebote sin delay() está más abajo
  delay(100);
}

Conexión con una resistencia pull-down externa

El ejemplo Debounce de Arduino usa otro montaje. Un terminal del botón va a +5 V, el otro va al pin 2, y una resistencia de 10 kΩ une el pin 2 con GND. Con el botón suelto la entrada lee LOW y al presionarlo lee HIGH, que es la lógica más intuitiva. Cuesta un componente más y sirve en el pin 13 de las placas Arduino. En el resto de los casos, la pull-up interna ahorra cableado.

El rebote de los contactos y cómo filtrarlo

Arduino explica que los pulsadores suelen generar transiciones espurias de abierto y cerrado al presionarlos, por razones mecánicas, y que el programa puede leerlas como varias pulsaciones en un instante. Sin filtro, una sola pulsación puede producir resultados impredecibles. El antirrebote por software consiste en aceptar un cambio solo cuando la lectura se mantuvo estable un tiempo mínimo. El ejemplo oficial de Arduino usa 50 ms y comenta que hay que aumentarlo si la salida parpadea. El código siguiente adapta ese ejemplo a la pull-up interna y cambia el estado del LED de la placa en cada pulsación, sin usar delay().

const int PIN_BOTON = 2;
const int PIN_LED = LED_BUILTIN;
// valor del ejemplo de Arduino, súbelo si hay rebotes
const unsigned long TIEMPO_REBOTE = 50;

bool estadoLed = false;
int estadoEstable = HIGH;
int ultimaLectura = HIGH;
unsigned long ultimoCambio = 0;

void setup() {
  pinMode(PIN_BOTON, INPUT_PULLUP);
  pinMode(PIN_LED, OUTPUT);
}

void loop() {
  int lectura = digitalRead(PIN_BOTON);

  // si la lectura cambió, reinicia el contador
  if (lectura != ultimaLectura) {
    ultimoCambio = millis();
  }

  // la lectura lleva estable más que TIEMPO_REBOTE
  if ((millis() - ultimoCambio) > TIEMPO_REBOTE) {
    if (lectura != estadoEstable) {
      estadoEstable = lectura;
      // con pull-up, LOW significa botón presionado
      if (estadoEstable == LOW) {
        estadoLed = !estadoLed;
        digitalWrite(PIN_LED, estadoLed);
      }
    }
  }

  ultimaLectura = lectura;
}

Conexión a ESP32

El ESP32 trabaja con 3,3 V y el montaje es el mismo. El botón va entre un GPIO y GND, y el pin se configura con INPUT_PULLUP. La documentación de Arduino-ESP32 indica que la pull-up y la pull-down internas son de 45 kΩ. Antes de elegir el GPIO revisa el mapa de pines, que según la documentación de Espressif para el ESP32 clásico tiene varias reglas. Los GPIO 6 a 11 van conectados a la memoria flash del módulo y no se usan para otra cosa, y los 16 y 17 quedan ocupados en los módulos con PSRAM. Los GPIO 0, 2, 5, 12 y 15 son pines de arranque (strapping), y conviene evitarlos para un botón porque su nivel al encender influye en cómo arranca la placa. Los GPIO 34 a 39 son solo entrada y no tienen pull-up ni pull-down por software, así que con ellos necesitas una resistencia externa. Los demás GPIO de entrada y salida admiten la pull-up interna, como el 4 del ejemplo. En un ESP32-S3 o un ESP32-C3 el mapa de pines cambia, así que consulta el de tu chip. El antirrebote del apartado anterior funciona igual en el ESP32. Revisa el diagrama de pines de tu placa antes de elegir el GPIO, porque algunos se usan al arrancar.

// GPIO con pull-up interna, ESP32 clásico
const int PIN_BOTON = 4;

void setup() {
  Serial.begin(115200);
  pinMode(PIN_BOTON, INPUT_PULLUP);
}

void loop() {
  if (digitalRead(PIN_BOTON) == LOW) {
    Serial.println("Presionado");
  }
  delay(100);
}

La placa de pulsador de 3 pines

La ficha de Zamper indica que esta placa trae un pull-up integrado y que conectas GND, VCC y la señal. Eso significa que no necesitas resistencia externa. Alimenta la placa con el voltaje lógico de tu microcontrolador, 5 V en un Uno o 3,3 V en un ESP32, y comprueba con el monitor serie qué nivel entrega la señal en reposo y al presionar antes de escribir el programa. Aunque trae pull-up, el rebote del botón sigue ahí y el antirrebote sigue haciendo falta.

Bloqueo mecánico o alternancia por código

Con un pulsador con bloqueo, el botón mantiene su nivel mientras no lo vuelvas a presionar, y el programa solo lee ese nivel con digitalRead. Con un pulsador momentáneo, el código de alternancia de arriba cambia el estado en cada pulsación. La segunda opción permite agregar lógica, como apagar sola la salida a los diez minutos, y tiene el estado dentro del programa, que se pierde si se corta la energía. El bloqueo mecánico necesita menos código y deja a la vista la posición del botón.

Qué no debes conectar directo a un pulsador

Un pulsador de panel sirve para dar una señal a un microcontrolador. Para controlar un motor, una bomba o una carga de 220 V, el pulsador activa un relé o un relé de estado sólido, y el contacto de potencia lo maneja ese dispositivo. Si pasas corriente de carga por el botón, revisa que la ficha declare un voltaje y una corriente iguales o mayores a los de tu carga. En una instalación de red eléctrica, la conexión la hace un instalador eléctrico autorizado. La guía de relé de estado sólido de este blog explica cómo elegir ese dispositivo.

Errores comunes con los pulsadores

Los más repetidos son dejar la entrada sin pull-up, lo que produce lecturas aleatorias; olvidar que con INPUT_PULLUP la lógica está invertida; contar varias pulsaciones por no filtrar el rebote; usar el pin 13 con pull-up interna; usar un GPIO 34 a 39 del ESP32 con INPUT_PULLUP, que no funciona; y perforar la caja sin medir antes el cuerpo del botón.

Botones inalámbricos para IoT

Si el botón debe avisar a un sistema sin tender cables, por ejemplo un botón de llamado o aviso en una planta, existen botones inteligentes LoRaWAN, como el WS101 de Milesight o el PB01 de Dragino, que envían un mensaje por radio al presionarlos. Se registran en una red LoRaWAN, así que necesitas un gateway al alcance. La guía de LoRaWAN de este blog explica cómo funciona esa red.

¿Cómo conecto un botón pulsador a Arduino sin resistencia?

Conecta un terminal al pin y el otro a GND, y configura el pin con pinMode(pin, INPUT_PULLUP). La resistencia pull-up interna del chip hace el trabajo. El pin lee HIGH con el botón suelto y LOW al presionarlo.

¿Por qué mi pulsador cuenta varias pulsaciones?

Por el rebote de los contactos. Al cerrarse, el contacto abre y cierra varias veces en un instante, y el programa lo lee como varias pulsaciones. Se filtra con un antirrebote por software, como el del ejemplo de esta guía.

¿Qué diferencia hay entre un pulsador momentáneo y uno con bloqueo?

El momentáneo solo mantiene el contacto cerrado mientras lo presionas. El de bloqueo queda en la posición presionada hasta que lo vuelves a presionar. Para dar una señal a un microcontrolador se usa el momentáneo.

¿Puedo usar los pines 34 a 39 del ESP32 con un pulsador?

Sí, pero necesitas una resistencia pull-up o pull-down externa. Según la documentación de Espressif, esos pines son solo de entrada y no tienen resistencias internas por software.

¿Sirve un pulsador de panel para encender una carga de 220 V?

Solo si la ficha del modelo declara un voltaje y una corriente iguales o mayores a los de la carga. Lo habitual es usar el pulsador para activar un relé, y que el relé maneje la carga. La conexión a la red eléctrica la hace un instalador autorizado.

Fuentes técnicas

PRODUCTOS RELACIONADOS
Botón Pulsador DS-213 momentáneo 12mm SPST con empaquetaduraBotón Pulsador DS-213 con bloqueo 12mm SPST con empaquetaduraBotón Pulsador momentáneo metálico 12mm SPSTPack 5 unidades - Botón Pulsador momentáneo 12mm SPST cortoBotón Pulsador momentáneo 16mm R13-507Botón Pulsador variedad de tamañosPlaca Botón Pulsador 3 pines para protoboardSmart Button Milesight LoRaWAN WS101Botón inteligente LoRaWAN PB01Interruptor switch ON-OFF 10A KDC1-101Switch y BotonesRelé de estado sólido (SSR): cómo elegirloQué es LoRaWANBuzzer: activo vs pasivo y cómo usarlo con ArduinoCotiza o consulta disponibilidad
¿NECESITAS AYUDA?

Habla con un especialista IoT.

Contactar