Componente · Sensor
Bump Switch
Microinterruptor mecánico con palanca que detecta colisiones directas. El sensor definitivo que nunca falla ante luz, reflejos ni ruido.
Qué es
Un microinterruptor de palanca —un interruptor de acción rápida en miniatura— es un contacto mecánico en un pequeño cuerpo de plástico del que sobresale una palanca metálica. Empujas la palanca y un muelle interno cierra el contacto de golpe; la sueltas y el muelle lo devuelve de golpe. Es uno de los componentes más antiguos de esta biblioteca y, en un robot, uno de los más útiles.
Lo que lo convierte en un componente de robótica es la acción rápida. El contacto no se cierra poco a poco según presionas: salta, en un punto repetible, con un clic audible. Eso te da una respuesta inequívoca de sí o no a partir de un mecanismo al que está empujando un robot en marcha, que es exactamente la situación en la que un sensor gradual te da tonterías.
Cómo funciona
Tres terminales: COM (común), NO (normalmente abierto) y NC (normalmente cerrado). Sin pulsar, COM está conectado a NC. Al pulsar, salta a NO. Usas dos de los tres e ignoras el tercero.
Para un paragolpes de robot, cablea COM a masa y NO al pin de entrada, con el pull-up interno del pin activado:
pinMode(BUMP_L, INPUT_PULLUP); // idle HIGH
bool pressed = digitalRead(BUMP_L) == LOW; // LOW means the bumper moved
Esa disposición falla de forma segura: un cable de paragolpes roto lee HIGH, que no es pulsado. Si lo cableas al revés, un hilo partido convence al robot de que está chocando permanentemente. Para una parada de emergencia usa NC en su lugar: ahí, un cable roto debe detener la máquina.
La palanca cambia fuerza por recorrido. El pulsador desnudo quiere alrededor de 1 N a lo largo de unos 1 mm; un brazo de palanca multiplica el movimiento de modo que una carcasa de paragolpes puede recorrer 3–5 mm y dispararse con un empuje mucho más suave. Un rodillo en el extremo reduce la fricción cuando algo desliza sobre él en lugar de presionarlo de frente.
Cuándo usarlo
Usa uno siempre que el robot necesite saber que ya ha entrado en contacto: paragolpes, finales de carrera en un brazo o en un carril, sensor de tapa o de cajón, o un detector de acoplamiento. Es la sensación de último recurso, y eso es un cumplido: detecta la pata negra de la silla, el panel de cristal y el obstáculo a la altura equivocada que se les escapa a todo sensor óptico y acústico.
También es lo único que necesita un robot de cobertura con rebote aleatorio. Dos de estos y un generador de números aleatorios cubrirán una habitación entera, que es una cantidad de comportamiento remarkable para dos piezas móviles.
Mira en otro sitio cuando lo que necesites sea evitar la colisión en lugar de detectarla: para eso está un sensor ultrasónico o de tiempo de vuelo. Usa ambos: el medidor de distancia esquiva la mayoría de los obstáculos, y el interruptor atrapa los que no puede ver.
Errores comunes
- Una pulsación son nueve flancos. Antirrebótalo y nunca cuelgues una interrupción que cuente: solo una que active una bandera o capture una marca de tiempo.
- El cuerpo del interruptor no es una pieza estructural. Dale a la carcasa del paragolpes un tope duro que absorba el impacto. Los cuerpos de plástico se agrietan; eso es lo que los mata mucho antes de que los contactos se desgasten.
- Su propio muelle no devolverá tu paragolpes. Un microinterruptor empuja con 50–100 g. Usa gomas elásticas o muelles de compresión ligeros para el retorno y deja que el interruptor solo detecte.
- Un paragolpes plano no ve los golpes oblicuos. Envuelve la carcasa al menos 45° a cada lado, con un interruptor detrás de cada mitad para que el código sepa hacia qué lado girar.
- Los cables largos captan el ruido de los motores. Mantén el recorrido corto, trenza el par y confía en la trayectoria de baja impedancia del pull-up cuando está cerrado.
- Las capacidades de los contactos son para red, no para lógica. Se le está pidiendo a un interruptor de 5 A a 125 V CA que deje pasar microamperios; esa cifra no te dice nada útil sobre su vida en este trabajo. El recorrido previo y la fuerza de actuación, sí.
Cableado
Dos de los tres terminales, y cuáles dos eligen decide cómo falla el robot.
| Uso | COM a | Señal desde | Estado en reposo | Un cable roto se lee como |
|---|---|---|---|---|
| Paragolpes | GND | NO, pin INPUT_PULLUP |
HIGH | No pulsado: seguro |
| Parada de emergencia | GND | NC, pin INPUT_PULLUP |
LOW | Pulsado: seguro |
| Cualquiera, con pull-up externo | GND | NO o NC, 10 kΩ a VCC | — | Igual que arriba |
La distinción importa. Un paragolpes cableado a NO falla de forma segura leyendo «sin colisión», lo cual es correcto: un robot con el cable del paragolpes roto debería seguir avanzando, no quedarse clavado. Una parada de emergencia cableada a NC falla de forma segura leyendo «detenido», que también es correcto, pero por el motivo opuesto.
Usa el pull-up interno. No cuesta nada, no necesita componentes y da un estado en reposo
definido. Un pin dejado como INPUT a secas con un interruptor encima flota cuando el
interruptor está abierto, y los pines flotantes leen el ruido eléctrico que haya cerca, que en
un robot lleno de motores es mucho.
Antirrebote, bien hecho
Una sola pulsación produce unas nueve transiciones en unos 4,7 ms mientras los contactos salen y rebotan. Un software que lee el pin a lo bruto ve nueve pulsaciones.
const int BUMP_L = 2, BUMP_R = 3;
const unsigned long DEBOUNCE_MS = 8; // longer than the ~5 ms bounce
struct Bumper {
uint8_t pin;
bool stable; // the debounced state
bool lastRead;
unsigned long changedAt;
};
Bumper left = {BUMP_L, true, true, 0};
Bumper right = {BUMP_R, true, true, 0};
// Returns true on the frame the bumper newly closes.
bool update(Bumper &b) {
bool now = digitalRead(b.pin); // HIGH = open, with INPUT_PULLUP
if (now != b.lastRead) {
b.lastRead = now;
b.changedAt = millis(); // restart the timer on any edge
return false;
}
if (millis() - b.changedAt >= DEBOUNCE_MS && b.stable != now) {
b.stable = now;
return (now == LOW); // newly pressed
}
return false;
}
void setup() {
pinMode(BUMP_L, INPUT_PULLUP);
pinMode(BUMP_R, INPUT_PULLUP);
}
void loop() {
if (update(left)) { backUp(); turnRight(); }
if (update(right)) { backUp(); turnLeft(); }
}
El detalle estructural importante es que el temporizador se reinicia en cada flanco, en lugar de muestrear una vez y esperar. Un muestreo fijo puede caer dentro del rebote y fijar el valor equivocado; reiniciar la ventana significa que el estado solo se acepta cuando el pin ha permanecido quieto durante todo el periodo.
Por qué no una interrupción
Las interrupciones en un interruptor de choque son una trampa, y concreta:
- Nunca cuelgues una interrupción que cuente. Nueve flancos se convierten en nueve cuentas, y
un antirrebote dentro de una ISR necesita
millis(), que no avanza dentro de una ISR en un AVR. - Una interrupción que solo activa una bandera está bien, si el antirrebote ocurre en el bucle principal. Pero sondear un interruptor a 100 Hz no cuesta nada, y el bucle de un robot ya está corriendo.
- Reserva D2 y D3 para los encoders en un Uno. Son los dos únicos pines de interrupción externa, y los encoders los necesitan de verdad. Un paragolpes no.
El único caso que justifica una interrupción es una parada de emergencia que deba cortar los motores aunque el bucle principal se haya quedado colgado, y eso se resuelve mejor cableando el interruptor a la línea de enable del controlador de motores, de forma que funcione sin software ninguno.
Montaje: la parte que decide de verdad si funciona
Todo lo de arriba es un problema resuelto. El diseño mecánico es donde los paragolpes triunfan o fracasan.
La carcasa recibe el impacto, no el interruptor. El cuerpo de un microinterruptor es plástico fino y se agrieta con un golpe directo. Construye una carcasa de paragolpes que gire o se deslice, dale un tope duro que reciba la fuerza y deja que el interruptor detecte un movimiento pequeño cerca del final de ese recorrido.
Envuelve la carcasa. Un paragolpes plano no ve nada golpeado en ángulo, y un robot que navega con sensores de distancia golpea casi siempre en ángulo, porque los obstáculos de frente ya estaban detectados. Envuelve al menos 45° a cada lado.
Dos interruptores, no uno. Uno a la izquierda y otro a la derecha, detrás de las dos mitades de la carcasa. Un interruptor te dice que has chocado con algo; dos te dicen hacia qué lado girar. La diferencia de comportamiento es dramática y el coste extra es de unos veinte céntimos.
| Interruptores | Lo que aprende el robot | Comportamiento posible |
|---|---|---|
| 1, centro | Que se ha chocado con algo | Retroceder y girar en una dirección aleatoria |
| 2, izquierdo y derecho | Qué lado se ha golpeado | Retroceder y alejarse del contacto |
| 3, añadiendo uno trasero | También que ha retrocedido contra algo | Salir de quedar encajado |
Devuelve el paragolpes con su propio muelle. El muelle interno de un microinterruptor empuja con solo 50–100 g, que no basta para reponer de forma fiable una carcasa con fricción en su pivote. Usa gomas elásticas o muelles de compresión ligeros y deja que el interruptor solo detecte.
Ajusta el recorrido previo para que la carcasa se mueva antes de que el interruptor toque fondo. El interruptor actúa entre 1 y 3 mm y tiene algo de sobre-recorrido más allá; el tope duro de la carcasa tiene que llegar dentro de ese sobre-recorrido, o el impacto lo recibe el mecanismo interno del interruptor.
Cómo elegir uno
| Tipo de palanca | Fuerza de actuación | Mejor para |
|---|---|---|
| Sin palanca (pulsador desnudo) | ~1 N a lo largo de ~1 mm | Finales de carrera donde el mecanismo es preciso |
| Palanca recta corta | 0.5–0.8 N | Paragolpes generales |
| Palanca recta larga | 0.2–0.5 N | Carcasas ligeras, contactos delicados |
| Palanca con rodillo | 0.5–1 N | Todo lo que deslice en lugar de presionar |
| Rodillo simulado (doblado) | 0.5–1 N | Alternativa más barata al rodillo |
La capacidad de los contactos es irrelevante aquí. Se le está pidiendo a un interruptor de 5 A a 125 V CA que deje pasar unos microamperios hacia un pull-up. Lo que importa es la especificación mecánica: fuerza de actuación, recorrido previo y vida mecánica nominal (10⁵–10⁷ operaciones). Un robot que choca cien veces por tanda llega a 10⁵ operaciones tras mil tandas, así que la vida mecánica es prácticamente ilimitada: el interruptor morirá por un cuerpo agrietado mucho antes.
Resolución de problemas
| Síntoma | Causa probable | Solución |
|---|---|---|
| Una pulsación dispara varias veces | Sin antirrebote | Usa el patrón de arriba con una ventana de 8 ms |
| Lee pulsado constantemente | Cableado a NC en lugar de a NO | Cambia al terminal NO |
| Lee al azar sin que nada lo toque | Pin flotante | INPUT_PULLUP, o un pull-up externo de 10 kΩ |
| Disparos falsos al girar los motores | Cables largos sin blindar que captan ruido | Acorta y trenza el par; añade un condensador de 100 nF en el pin |
| El paragolpes no vuelve | Depende del propio muelle del interruptor | Añade gomas elásticas o un muelle de retorno |
| El interruptor se agrieta tras unas pocas colisiones | El impacto pasa por el cuerpo del interruptor | Añade un tope duro que la carcasa golpee primero |
| No ve las colisiones oblicuas | Paragolpes plano | Envuelve la carcasa 45° a cada lado |
| El robot retrocede pero choca con lo mismo | Un interruptor, sin información de dirección | Dos interruptores, y aléjate del que saltó |
| Funciona en el banco, no en el robot | Geometría del paragolpes, no electrónica | Empuja la carcasa a mano desde varios ángulos y vigila el pin |
Por qué este componente barato se gana su sitio
Todos los demás sensores de un robot tienen superficies que no ven. Un sensor ultrasónico es ciego a las cortinas y a las paredes encontradas en ángulo cerrado. Un VL53L0X es ciego a las superficies negras mates, a los espejos y a cualquier cosa bajo el sol fuerte. Una cámara necesita luz.
Un microinterruptor no tiene esa lista. Si algo está tocando el paragolpes, el interruptor se cierra. Eso lo convierte en la sensación de último recurso, y en un robot que tiene que funcionar sin supervisión es la fiabilidad más barata disponible: dos interruptores, dos pines y unos cuarenta céntimos.
Es también, sorprendentemente, suficiente por sí solo. Un robot con dos interruptores de choque y un giro aleatorio al contacto cubrirá una habitación entera con tiempo suficiente, que es exactamente como funcionaba la primera generación de robots aspiradores, y conviene entenderlo antes de recurrir a nada más sofisticado.
Explora el grafo
Se usa en estos montajes
Proyectos, rutas de aprendizaje y simuladores que incluyen Bump Switch.
- ProyectoConstruye un plóter de dibujo: dos ejes paso a paso
- ProyectoConstruye un robot de cobertura de área para limpiar suelos
- ProyectoConstruye un robot pick and place con agarre verificado
- Ruta de aprendizajeAgarre y efectores finales: cómo sujetar piezas
- Ruta de aprendizajeMovimiento de precisión con motores paso a paso
- Ruta de aprendizajeNavegación reactiva: evasión de obstáculos en robótica
Preguntas
Preguntas frecuentes sobre Bump Switch
¿Para qué sirve un microinterruptor de palanca en un robot?
Es el sensor que hay detrás de un parachoques. Una carcasa con muelle a lo largo del frontal del robot pulsa el interruptor cuando el robot hace contacto, lo que da al código un bit inequívoco —he chocado con algo— que ningún sensor óptico o acústico puede proporcionar con la misma fiabilidad. Es lo que permite a un robot detectar la pata negra de una silla, un cristal o un obstáculo a una altura que su telémetro no cubre.
¿Conviene cablear el interruptor como normalmente abierto o normalmente cerrado?
Para un parachoques, normalmente abierto a masa con el pin en pull-up. Así, un cable roto se lee como no pulsado, y un hilo partido no puede convencer al robot de que está chocando todo el tiempo. Usa en cambio el contacto normalmente cerrado para una parada de emergencia, donde el fallo seguro es el contrario: un cable roto debe detener la máquina.
¿Por qué una sola pulsación se registra como varias?
Por el rebote de los contactos. El contacto metálico llega, se flexiona, se separa y vuelve a llegar varias veces durante los primeros milisegundos, y un microcontrolador que muestrea a megahercios ve cada una de esas veces como un flanco real. Un interruptor de palanca modelado produce nueve transiciones en unos 4.7 ms. Elimina el rebote por software con una ventana que ignore los cambios después de aceptar uno, y nunca le conectes una interrupción que cuente.
¿Qué hace realmente el brazo de palanca?
Cambia fuerza por recorrido. El pulsador desnudo necesita de 1 a 1.5 N a lo largo de aproximadamente 1 mm; una palanca multiplica el movimiento para que la carcasa pueda recorrer de 3 a 5 mm y accionarlo con un empujón mucho más ligero. Eso importa porque la carcasa de un parachoques tiene que moverse lo suficiente para ser fiable y con la suavidad suficiente para no ir empujando obstáculos pequeños antes de activarse.
¿Necesito una resistencia pull-up?
No: usa la pull-up interna del microcontrolador con INPUT_PULLUP. Es gratis, no necesita ninguna pieza extra en la esquina más castigada del robot, y el camino de baja impedancia a masa cuando el interruptor se cierra es lo que impide que un cable largo de parachoques capte ruido del driver de motores que tiene al lado.
Lecturas adicionales