Los interruptores y pulsadores mecánicos son los componentes de entrada más comunes en proyectos con Arduino, ESP8266 y ESP32. Aunque su principio físico es sencillo, abrir o cerrar un circuito conductor mediante presión mecánica, conectarlos directamente a un pin digital sin comprender la polarización de entrada puede generar lecturas erráticas continuas debido al estado de alta impedancia (pin flotante) o provocar múltiples disparos falsos debido al rebote elástico de los contactos metálicos (switch bouncing).
- Pulsadores momentáneos (Push buttons): conmutan únicamente mientras se mantiene la fuerza física sobre el actuador (normalmente abiertos NO o normalmente cerrados NC), volviendo a su estado de reposo por muelle elástico.
- Interruptores con enclavamiento (Latching switches): mantienen de forma biestable su posición eléctrica tras cada pulsación o deslizamiento (SPST, SPDT, DPST, DPDT) hasta una nueva actuación manual.

- Peligro de pines digitales en flotación (High-Z): nunca configures un pin como
INPUTsin conectar una resistencia pull-up o pull-down (interna o externa). Una entrada en alta impedancia actúa como una antena receptora que capta el zumbido de 50 Hz de la red y campos electrostáticos, alternando aleatoriamente entre 0 y 1. - Tolerancia de tensión en ESP32 / ESP8266: mientras que el Arduino Uno opera con lógica de 5 V, los microcontroladores ESP32 y ESP8266 son exclusivamente de 3,3 V (tensión máxima absoluta de 3,6 V). Si alimentas un circuito de pulsador externo desde la toma de 5 V y cierras el contacto contra un GPIO del ESP32, destruirás la etapa de entrada del microcontrolador. Alimenta siempre los contactos con la línea de 3,3 V.
- Falsos disparos en interrupciones por hardware (ISR): las láminas metálicas de un pulsador rebotan elásticamente durante un intervalo de entre 1 ms y 15 ms al cerrarse. Si asocias un botón a una interrupción externa (
attachInterruptcon flancoFALLINGoRISING) sin antirrebote por hardware (filtro RC) o software, una única pulsación disparará la rutina de servicio entre 5 y 20 veces consecutivas.
¿Cómo funcionan los interruptores?
Quizás se pregunte por qué el interruptor de cuatro pines tiene 4 patas. ¿Cómo conectamos el interruptor a otros componentes?
Si el interruptor de cuatro pines no está presionado, los pines A y C están conectados, así como los pines B y D. Si el interruptor está presionado, la conexión de los pines cambia y todos los pines están conectados entre sí. Por lo tanto, no hay diferencia si conecta el componente que desea encender al pin B o al pin D en el otro lado del botón.

Diferencia entre circuitos de resistencia pull-down y pull-up
Si desea conectar uno o más interruptores a su microcontrolador Arduino, ESP8266 o ESP32, debe usar un pin de E / S digital para leer el estado actual del interruptor o botón. Ahora la pregunta es ¿cómo conectar el segundo pin del interruptor? ¿Debería conectar el segundo pin a la alimentación oa tierra?
La respuesta a esta pregunta depende de su objetivo y también debe agregar una resistencia en el circuito. De lo contrario, cuando el interruptor está abierto, el pin digital no está conectado a GND o 5V y el estado del pin no estaría definido.
Hay dos configuraciones diferentes sobre cómo se agrega la resistencia al circuito y cómo se conecta el segundo pin del interruptor.
- Agregue una resistencia Pull-Down cuando la señal debería ser BAJA si el interruptor está abierto
- Agregue una resistencia pull-up si la señal debe ser ALTA si el interruptor está abierto.
La siguiente sección describe la diferencia entre resistencia pull-down y pull-up resistor y muestra cómo conectar todos los componentes con diferentes placas de microcontroladores Arduino, ESP8266 y ESP32.
Si crea un programa, ese programa es independiente de la diferencia en el circuito si usa una resistencia pull-down o pull-up.
Configuración de un circuito Pull-Down con resistencia externa
El siguiente circuito muestra el cableado de desenrollado entre un Arduino Uno, la resistencia y un botón. El botón está conectado a la fuente de alimentación y al pin digital. La resistencia está conectada al mismo pin digital y a la misma tierra.

Arduino Nano

Para obtener más información sobre Arduino Nano, visite el tutorial de Arduino Nano.
Arduino Pro Mini

Arduino Uno

Para obtener más información sobre Arduino Uno, visite el tutorial de Arduino Uno.
Arduino Mega

Para obtener más información sobre Arduino Mega, visite el tutorial de Arduino Mega.
ESP32 ESP-WROOM-32

ESP8266 NodeMCU

ESP8266 WeMos D1 Mini

Cuando no se presiona el botón, la resistencia Pull-Down permite que fluya una pequeña corriente entre el pin digital y GND. Por lo tanto, la entrada digital se reduce a LOW. Si se presiona el botón, el pin digital se conecta a la fuente de alimentación de 5V del Arduino Uno y por lo tanto la entrada digital es ALTA.
Configuración de un circuito Pull-Up con resistencia externa e interna
En el caso de un circuito de resistencia pull-up, la resistencia pull-up conecta el pin digital y 5V. Por lo tanto, la entrada digital se eleva a 5V. Solo si el interruptor está cerrado, el pin digital está conectado a GND.
Las siguientes imágenes muestran el diagrama de circuito del Arduino Uno con la resistencia pull-up y el cableado para varias placas de microcontroladores Arduino, ESP8266 y ESP32.

Arduino Nano

Para obtener más información sobre Arduino Nano, visite el tutorial de Arduino Nano.
Arduino Pro Mini

Arduino Uno

Para obtener más información sobre Arduino Uno, visite el tutorial de Arduino Uno.
Arduino Mega

Para obtener más información sobre Arduino Mega, visite el tutorial de Arduino Mega.
ESP32 ESP-WROOM-32


ESP8266 WeMos D1 Mini

Lectura de pulsador con circuito Pull-Down en Arduino y ESP32
En el siguiente ejemplo, queremos controlar un LED, que está conectado con un botón y una resistencia Pull-Down. El propósito del boceto es que el LED esté apagado, cuando no se presiona el botón, y el LED está encendido mientras se presiona el botón. Por supuesto, puede insertar el LED en el circuito del botón para obtener esta funcionalidad, pero en este artículo queremos leer el estado del botón para controlar el LED.
Las siguientes imágenes muestran el cableado entre todos los componentes en diferentes placas de microcontroladores Arduino, ESP8266 y ESP32 para el circuito de resistencia Pull-Down.
Arduino Nano

Para obtener más información sobre Arduino Nano, visite el tutorial de Arduino Nano.
Arduino Pro Mini

Arduino Uno

Para obtener más información sobre Arduino Uno, visite el tutorial de Arduino Uno.
Arduino Mega

Para obtener más información sobre Arduino Mega, visite el tutorial de Arduino Mega.
ESP32 ESP-WROOM-32

ESP8266 NodeMCU

ESP8266 WeMos D1 Mini

Después del cableado, podemos sumergirnos en el código del programa Arduino, que es muy fácil de entender y se presenta en el siguiente cuadro.
// for Arduino microcontroller
int button_pin = 7;
int LED_pin = 4;
// for Arduino microcontroller
//int button_pin = D6;
//int LED_pin = D7;
// for Arduino microcontroller
//int button_pin = 4;
//int LED_pin = 0;
void setup() {
Serial.begin(9600);
pinMode(LED_pin, OUTPUT);
pinMode(button_pin, INPUT);
}
void loop() {
int switchStatus = digitalRead(button_pin);
digitalWrite(LED_pin, switchStatus);
}
En la primera parte del código del programa tenemos que definir los pines conectados del microcontrolador. En este ejemplo tenemos el interruptor y el LED que están conectados al microcontrolador Arduino, ESP8266 o ESP32. Dado que el script se puede usar para placas de microcontroladores Arduino, ESP8266 y ESP32, debe seleccionar cada tercera sección del código del programa y comentar las otras dos secciones, como hice para el ESP8266 y el ESP32, o eliminar las secciones.
En la función de configuración establecemos la velocidad en baudios de la conexión USB serial a su PC a 9600 que debería ser la misma en el monitor serial de su Arduino IDE. También necesitamos declarar el pin del botón como entrada y el pin LED como pines de salida.
En la función de bucle, leemos el estado actual del botón en el circuito Pull-Down, es decir, ALTO si el botón está abajo y BAJO si el botón no está abajo y escribimos exactamente el mismo estado en el LED. Por lo tanto, si se presiona el botón, el estado del LED cambia de BAJO a ALTO y el LED se enciende.
El siguiente video muestra que el LED se enciende cuando presiono el botón.
Cambiar la funcionalidad del botón a un interruptor
Es posible modificar el boceto que el botón utilizado tiene la funcionalidad de un interruptor. El LED solo se enciende y apaga si se presiona el botón y mantiene su estado. Por lo tanto, los estados del LED y el interruptor deben almacenarse en variables para comparar el último estado con las entradas actuales. Si el botón se presiona continuamente, los estados no deben cambiarse.
El cableado no se cambia, pero las siguientes secciones muestran el código de programa que se cambia.
// for Arduino microcontroller
int switch_pin = 7;
int LED_pin = 4;
// for Arduino microcontroller
//int switch_pin = D6;
//int LED_pin = D7;
// for Arduino microcontroller
//int switch_pin = 4;
//int LED_pin = 0;
int switchStatusLast = LOW; // last status switch
int LEDStatus = LOW; // current status LED
void setup() {
Serial.begin(9600);
pinMode(LED_pin, OUTPUT);
pinMode(switch_pin, INPUT);
}
void loop() {
int switchStatus = digitalRead(switch_pin); // read status of switch
if (switchStatus != switchStatusLast) // if status of button has changed
{
// if switch is pressed than change the LED status
if (switchStatus == HIGH && switchStatusLast == LOW) LEDStatus = ! LEDStatus;
digitalWrite(LED_pin, LEDStatus); // turn the LED on or off
switchStatus = switchStatusLast;
}
}
La primera parte sigue siendo la misma, pero tenemos que definir dos nuevas variables con el estado inicial BAS que almacena el último estado del interruptor y el LED.
En la función de bucle, leemos el estado actual del botón. Si este estado es diferente al anterior, por ejemplo, se presiona el botón (señal digital de LOW a HIGH) o se suelta (señal digital de HIGH a LOW), ingresamos un segundo if request que solo es cierto si el botón está presionado (el último estado es BAJO y el estado actual es ALTO). En este caso, cambiamos el estado del LED. Si el LED estaba apagado (LOW), el estado del LED cambia a HIGH y si el LED estaba encendido (HIGH), cambiamos el estado a LOW. Este estado cambiado se escribe en la función digitalWrite para controlar el LED. El último paso es guardar el estado actual del conmutador como último estado antes de iniciar la función de bucle desde el principio.
El siguiente video muestra la función del interruptor en acción. En el video, también puede ver el problema común de eliminación de rebotes que resolvemos en los siguientes capítulos de este artículo.
Lectura de pulsador con circuito Pull-Up en Arduino y ESP32
Con la resistencia pull-up queremos que el LED esté encendido cuando no se presiona el botón y si presionamos el botón el LED debe apagarse. Básicamente, la funcionalidad es la opuesta al circuito Pull-Down y tiene la ventaja de que usted sabe directamente que puede haber un cable roto en el circuito si el LED está apagado y no presiona el botón. En un circuito de desplazamiento, sabes que hay un problema dentro del circuito solo hasta que presionas el botón. Si tiene circuitos críticos, debería preferir la resistencia pull-up.
La siguiente imagen muestra el cableado de la resistencia pull-up y el botón, así como el LED en combinación con diferentes placas de microcontroladores Arduino, ESP8266 y ESP32.
Arduino Nano

Para obtener más información sobre Arduino Nano, visite el tutorial de Arduino Nano.
Arduino Pro Mini

Arduino Uno

Para obtener más información sobre Arduino Uno, visite el tutorial de Arduino Uno.
Arduino Mega

Para obtener más información sobre Arduino Mega, visite el tutorial de Arduino Mega.
ESP32 ESP-WROOM-32

ESP8266 NodeMCU

ESP8266 WeMos D1 Mini

El código del programa no depende de su circuito y de si está utilizando una configuración desplegable o pull-up con su resistencia. Por lo tanto, estamos usando el mismo código de programa que se usó para la configuración desplegable.
// for Arduino microcontroller
int button_pin = 7;
int LED_pin = 4;
// for Arduino microcontroller
//int button_pin = D6;
//int LED_pin = D7;
// for Arduino microcontroller
//int button_pin = 4;
//int LED_pin = 0;
void setup() {
Serial.begin(9600);
pinMode(LED_pin, OUTPUT);
pinMode(button_pin, INPUT);
}
void loop() {
int switchStatus = digitalRead(button_pin);
digitalWrite(LED_pin, switchStatus);
}
El siguiente video muestra la configuración de dominadas con la resistencia. Verá que si no presiono el botón, el LED se enciende y si presiono el botón, el LED se apaga.
El problema del rebote mecánico de contactos (Switch Bouncing)
Cuando se presiona un interruptor o botón, los contactos de metal en los puntos de contacto pueden hacer que los puntos de contacto se toquen entre sí varias veces. Por lo tanto, el contacto rebota antes de hacer contacto permanente. Es posible que se pregunte qué problema podría surgir debido al rebote de los contactos. El problema es que la velocidad del reloj de Arduino es de 16 MHz, lo que resulta en 16 millones de operaciones por segundo. Por lo tanto, Arduino reconocerá que los contactos que rebotan han cerrado y abierto los contactos varias veces seguidas. La siguiente imagen muestra este comportamiento en el osciloscopio cuando presiona un botón.


En la primera imagen, puede ver claramente que cuando se presiona el botón, el voltaje solo alcanza alrededor de 1.8V en lugar de 5V. Este comportamiento da como resultado un LED que no responde cuando se presiona el interruptor o botón. Solo cuando se presiona el botón por segunda vez, los contactos internos se conectan y se alcanza la tensión de funcionamiento de 5 V y el LED permanece encendido.
Se puede mostrar el mismo comportamiento cuando intento apagar el LED en el segundo cuadro. El voltaje de trabajo es de 5V y presiono el botón. El voltaje cae dos veces a alrededor de 4V y vuelve a rebotar a 5V. La tercera vez, el voltaje cae a alrededor de 1 V pero también vuelve a bajar a 5 V. Solo cuando presiono el botón por cuarta vez, se suelta el interruptor y se apaga el LED.
Este comportamiento es un gran problema en la vida real porque desea presionar varias veces en un para encender o apagar una luz en su cocina? No creo.
Es bueno saber que hay dos soluciones de software y una solución de hardware para resolver este problema llamado problema de eliminación de rebotes.
Soluciones de software contra el rebote mecánico (Debouncing)
Hasta donde yo sé, hay dos soluciones de software contra el efecto antirrebote. En las siguientes secciones, explico ambas soluciones antes de mostrarte también una solución de hardware.
Antirrebote básico por retardo (delay)
La primera solución de software es bastante simple e inicia un retraso y luego lee el estado nuevamente. El tiempo entre las dos lecturas de entrada se define mediante un retraso. Si la demora es demasiado corta, el cambio aún se puede limitar.
// for Arduino microcontroller
int switch_pin = 7;
int LED_pin = 4;
// for Arduino microcontroller
//int switch_pin = D6;
//int LED_pin = D7;
// for Arduino microcontroller
//int switch_pin = 4;
//int LED_pin = 0;
int switchStatusLast = LOW; // last status switch
int LEDStatus = LOW; // current status LED
void setup() {
Serial.begin(9600);
pinMode(LED_pin, OUTPUT);
pinMode(switch_pin, INPUT);
}
void loop() {
int switchStatus = digitalRead(switch_pin); // read status of switch
if (switchStatus != switchStatusLast) // if status of button has changed
{
delay(50); // debounce time of 50 ms
switchStatus = digitalRead(switch_pin); // read the status of the switchPIN again
if (switchStatus != switchStatusLast) // if the status of the button has changed again
{
// if switch is pressed than change the LED status
if (switchStatus == HIGH && switchStatusLast == LOW) LEDStatus = ! LEDStatus;
digitalWrite(LED_pin, LEDStatus); // turn the LED on or off
switchStatus = switchStatusLast;
}
}
}
Puede ver en las siguientes imágenes del osciloscopio que la presión y el voltaje de liberación son más suaves que sin una solución de software. Esto da como resultado el comportamiento de que cuando se presiona el botón una vez, la luz indicadora se enciende o apaga. El siguiente video también muestra el resultado de la solución de software contra la eliminación de rebotes.
apurarse

Salida

Antirrebote robusto no bloqueante con millis()
Una segunda solución de software posible contra la eliminación de rebotes es continuar demorando hasta que no haya más cambios en el estado del interruptor al final del tiempo de eliminación de rebotes. Por lo tanto, el estado del interruptor debe almacenarse en tres momentos diferentes:
- Estado antes de la activación del interruptor (switchStatusLast)
- Estado durante el tiempo de antirrebote (switchStatusDebounce)
- Estado de la última pulsación del interruptor (switchStatus)
Si el estado ha cambiado y está presente durante más tiempo que el tiempo de antirrebote preestablecido, se puede cambiar el estado del LED. Para comparar el tiempo de supresión de rebotes con la última vez que se presionó el interruptor, debemos establecer la hora en que se presionó por última vez como sin firmar. variable porque el número entero tiene un límite superior de (2 ^ 15-1) ms o 33 segundos. El valor máximo largo sin signo es (2 ^ 32-1) ms o 50 días.
Pero también hay una solución mucho mejor que guardar el estado del interruptor 3 veces porque también es posible resolver el problema con el interruptor antirrebote con una solución de condensador de hardware.
Soluciones de hardware: Filtro pasivo RC y Schmitt Trigger
La posible solución de hardware para resolver el problema de antirrebote es utilizar un condensador en el interruptor. Mientras no se presione el interruptor, el capacitor se carga. Cuando se presiona el interruptor, el condensador se descarga mientras la señal del interruptor al Arduino es ALTA. Durante el rebote, la energía del condensador mantiene la señal de conmutación ALTA. Una combinación de resistencia-condensador recomendada es una resistencia pull-up de 10 kΩ y un condensador de 10 µF.
La velocidad a la que el capacitor se carga y descarga depende de la resistencia R y la capacitancia C. La ecuación del voltaje del capacitor después de t segundos
- la carga es V (1- ^ e (-t / RC)) y
- la descarga es V (e (-t / RC))
Por lo tanto, cuanto mayor sea el valor de RC, mayor será el tiempo de eliminación de rebotes. El retardo de supresión de rebotes se puede expresar en 0,693 * RC segundos. Con una combinación de una resistencia pull-down de 10 kΩ y un capacitor de 10 µF, el retardo antirrebote es de 69 ms. Aunque la combinación de resistencia y condensador es de libre elección, se debe usar una resistencia grande para minimizar la corriente a través de la resistencia.
Las siguientes imágenes muestran el cableado de varias placas de microcontroladores Arduino, ESP8266 y ESP32.
Arduino Nano

Para obtener más información sobre Arduino Nano, visite el tutorial de Arduino Nano.
Arduino Pro Mini

Arduino Uno

Para obtener más información sobre Arduino Uno, visite el tutorial de Arduino Uno.
Arduino Mega

Para obtener más información sobre Arduino Mega, visite el tutorial de Arduino Mega.
ESP32 ESP-WROOM-32

ESP8266 NodeMCU

ESP8266 WeMos D1 Mini

Debido a que no estamos agregando ninguna solución de software para el problema de la eliminación de rebotes, podemos usar el script de cambio estándar de Arduino que creamos en el capítulo anterior.
// for Arduino microcontroller
int switch_pin = 7;
int LED_pin = 4;
// for Arduino microcontroller
//int switch_pin = D6;
//int LED_pin = D7;
// for Arduino microcontroller
//int switch_pin = 4;
//int LED_pin = 0;
int switchStatusLast = LOW; // last status switch
int LEDStatus = LOW; // current status LED
void setup() {
Serial.begin(9600);
pinMode(LED_pin, OUTPUT);
pinMode(switch_pin, INPUT);
}
void loop() {
int switchStatus = digitalRead(switch_pin); // read status of switch
if (switchStatus != switchStatusLast) // if status of button has changed
{
// if switch is pressed than change the LED status
if (switchStatus == HIGH && switchStatusLast == LOW) LEDStatus = ! LEDStatus;
digitalWrite(LED_pin, LEDStatus); // turn the LED on or off
switchStatus = switchStatusLast;
}
}
Los siguientes dos videos muestran el impacto de la solución de hardware contra el antirrebote con un capacitor de 10 µF y 100 µF. En el video se puede ver que el capacitor de 100µF maneja el LED mucho más tiempo que el capacitor de 10µF si apago el LED con el botón.
Condensador = 10µF
Condensador = 100µF
En la siguiente imagen se ve el aumento de tensión cuando se presiona el botón. Es muy similar a la solución de software.

La siguiente imagen muestra la tensión durante las fases de compresión y liberación. Puede ver muy bien el impacto del condensador reduciendo el voltaje con el tiempo. La imagen muestra 4 ciclos.

Conclusión
En este artículo, aprenderá sobre los diferentes tipos de interruptores y resistencias pull-up y pull-down, cómo usarlos y las diferencias.
También aprendiste cuál es el problema con el antirrebote. Además, discutimos las soluciones de hardware y software contra el problema de supresión de rebotes.
Espero que hayas recomendado este artículo. ¿Tiene más preguntas sobre interruptores? Utilice la sección de comentarios a continuación para hacer sus preguntas.
Cómo verificar y depurar esta señal en el laboratorio con un osciloscopio
Ningún interruptor mecánico cierra el circuito de forma instantánea: al observar un pulsador o conmutador en un osciloscopio digital con disparo único (Single Trigger) y base de tiempos de 500 µs/div, verás entre 5 y 20 micro-impactos metálicos (rebotes de contacto o bouncing) durante 2 a 10 ms antes de estabilizarse la tensión, lo que explica por qué el microcontrolador cuenta múltiples pulsaciones si no aplicas filtrado RC o debouncing por software.
¿Buscas un instrumento para tu banco de trabajo? Consulta nuestra guía técnica: Cómo elegir un osciloscopio para proyectos con Arduino y ESP32 o compara los mejores osciloscopios digitales y osciloscopios USB para PC.
Visualización y diagnóstico del rebote de contactos con osciloscopio
El rebote de contactos (contact bounce) es un fenómeno mecánico inevitable: cuando dos piezas metálicas colisionan bajo fuerza elástica, rebotan microscópicamente varias veces antes de establecer una unión óhmica continua. Un microcontrolador ejecutando su bucle a 16 MHz (Arduino Uno) o 240 MHz (ESP32) es lo bastante rápido como para leer cada uno de estos micro-rebotes como pulsaciones independientes. La inspección con un osciloscopio digital en modo de disparo único (Single-Shot Trigger) permite medir la duración exacta del rebote y calibrar los filtros de eliminación:
- Captura del tren de rebotes transitorio: conecta la punta de la sonda del Canal 1 directamente a la patilla del pulsador que va al microcontrolador y la pinza de cocodrilo a GND. Configura la sonda en 10X, acoplamiento en DC, escala vertical en 1 V/div o 2 V/div y la base de tiempos en 1 ms/div o 2 ms/div.
- Configuración del Trigger (Disparo único): selecciona el disparo en flanco de bajada (Falling Edge) para un circuito Pull-Up con el umbral fijado a media tensión (2,5 V en Arduino o 1,65 V en ESP32). Pon el osciloscopio en modo Single. Al pulsar el botón táctil, la pantalla congelará un tren caótico de pulsos de onda cuadrada de amplitud variable que dura típicamente entre 2 ms y 15 ms antes de alcanzar el nivel lógico cero estable.
- Verificación del filtro RC pasivo por hardware: al conectar un condensador cerámico de 100 nF en paralelo con el pulsador (formando con la resistencia pull-up de 10 kΩ una constante de tiempo τ = R × C = 10 kΩ × 100 nF = 1 ms), el osciloscopio muestra cómo el tren caótico de rebotes desaparece, transformándose en una curva de descarga exponencial suave y continua.
- Eliminación de estados indeterminados con inversor Schmitt Trigger (74HC14): una descarga exponencial lenta (τ = 1 ms) puede provocar oscilaciones si permanece demasiado tiempo en la zona de conmutación indefinida (0,8 V < Vin < 2,0 V). Al hacer pasar la señal por un inversor con histéresis Schmitt Trigger (como el 74HC14), el osciloscopio evidencia una transición digital ultrarrápida (<15 ns) entre los dos umbrales limpios (VT+ ≈ 3,15 V y VT- ≈ 1,35 V), garantizando cero rebotes en interrupciones de hardware.
A continuación se comparan cuatro osciloscopios recomendados para análisis de transitorios mecánicos, tiempos de conmutación y verificación de buses de entrada en banco de pruebas:
| Modelo | Ancho de Banda | Canales | Muestreo | Profundidad Memoria | Capacidad de Disparo (Trigger) | Uso Recomendado en Banco |
|---|---|---|---|---|---|---|
| Rigol DS1054Z | 50 MHz (ampliable 100 MHz) | 4 Canales | 1 GSa/s | 24 Mpts | Single-shot, flanco, ancho de pulso, pendiente | Osciloscopio de referencia para laboratorio maker: su memoria de 24 Mpts permite registrar trenes de rebote de varios segundos manteniendo máxima tasa de muestreo. |
| Siglent SDS1104X-U | 100 MHz | 4 Canales | 1 GSa/s | 14 Mpts | Disparo por intervalo, caída (dropout) y runt pulse | Excelente velocidad de captura (400.000 wfm/s) para detectar anomalías transitorias en conmutadores rápidos y encoders rotativos. |
| FNIRSI 1014D | 100 MHz (ancho efectivo ~30 MHz) | 2 Canales | 1 GSa/s | 240 kpts | Flanco básico (Edge Trigger) | Opción económica de sobremesa para verificar si existe o no rebote mecánico antes de añadir código de retardo. |
| Hantek 2D72 | 70 MHz | 2 Canales + Multímetro | 250 MSa/s | 6 kpts | Flanco normal / simple | Instrumento portátil con batería recargable: ideal para inspeccionar finales de carrera y conmutadores en maquinaria o vehículos sin tomas de red. |
Especificaciones técnicas contrastadas con las hojas de datos oficiales de Rigol Technologies, Siglent Technologies y Hantek Instruments. Enlaces de consulta técnica bajo directrices de afiliación transparente.
Preguntas frecuentes sobre conmutadores y pulsadores en Arduino
¿Por qué debo activar INPUT_PULLUP al conectar un interruptor o pulsador a un microcontrolador?
Cuando un interruptor SPST está abierto, el pin digital del microcontrolador queda desconectado («flotando» en alta impedancia) y capta interferencias electromagnéticas ambientales que alternan aleatoriamente entre HIGH y LOW. Activando pinMode(PIN, INPUT_PULLUP) conectas internamente una resistencia de 20 kΩ a 50 kΩ hacia VCC: el pin lee HIGH en reposo y pasa limpiamente a LOW al cerrar el interruptor hacia GND.
¿Cuánto tiempo dura el rebote mecánico de un pulsador táctil y cómo eliminarlo por software?
En pulsadores táctiles pequeños de 4 patas (tact switches), el rebote mecánico oscila típicamente entre 2 ms y 10 ms (en interruptores de palanca grandes puede alcanzar hasta 20 ms). Por software, el método profesional no bloqueante consiste en registrar la marca de tiempo con millis(): cuando se detecta un cambio de estado, se ignora cualquier nueva lectura en ese pin hasta que hayan transcurrido al menos 20 ms o 50 ms de estabilidad.
¿Puedo utilizar las resistencias pull-up internas del ESP32 con pulsadores externos?
Sí. El ESP32 incorpora resistencias pull-up y pull-down configurables por software en la mayoría de sus GPIOs (con valores comprendidos entre 30 kΩ y 60 kΩ). Basta con configurar el pin mediante pinMode(PIN, INPUT_PULLUP) y conectar el contacto entre el pin y GND. Ten en cuenta que los pines GPIO 34, 35, 36 (VP) y 39 (VN) son exclusivamente de entrada y carecen de resistencias pull-up/pull-down internas, por lo que requieren obligatoriamente una resistencia física externa si se usan con pulsadores.