El robot se detiene a medio corredor. El monitor serial imprime 0 cm, después 1234 cm, después otra vez 0. El HC-SR04 parpadea el LED de power, el cable del ECHO está bien “al tacto”, y igual el código miente. En un colegio o en un taller de cualquier ciudad, esa escena se repite cada semana: el ultrasónico no “falla de fábrica”; falla por timing, superficie, alimentación o niveles de voltaje que el tutorial de cinco minutos no menciona.
Esta guía te lleva por la familia SR04 con calma de taller: el clásico de cuatro pines (HC-SR04) y los módulos impermeables de la misma lógica de pulso (AJ-SR04M / JSN-SR04T). El protocolo es el mismo; el envase y el montaje no. Vas a salir con pinout claro, código con pulseIn y timeout, una checklist de errores, y criterio para elegir ultrasónico frente a IR o radar.
1. Qué mide un ultrasónico SR04 y qué no te va a dar
Un módulo tipo HC-SR04 / AJ-SR04M emite un tren ultrasónico (alrededor de 40 kHz), espera el eco y convierte el tiempo de ida y vuelta en distancia. Con velocidad del sonido en aire seco cercana a 340 m/s a ~20 °C (valor típico de taller, no de laboratorio metrológico):
distancia (cm) ≈ (tiempo_µs × 0,0343) / 2
El ÷ 2 existe porque el sonido va y vuelve. Si olvidas el divisor, el serial te va a “ver” el doble de lo real y vas a calibrar basura.
Sirve bien para:
- Distancia a un blanco opaco y relativamente plano (caja, pared, objeto rígido).
- Nivel de tanque o bidón si el sensor está sellado y el eco vuelve del espejo de agua (mejor con carcasa IP).
- Obstáculo frontal en robot lento/medio, con filtrado en software.
- Tope de máquina casera o parking de juguete donde un error de 1–2 cm no mata a nadie.
No sirve (o sirve mal) cuando:
- La superficie es tela, espuma, algodón, pelo, hierba densa: absorben o dispersan el eco.
- El ángulo es muy oblicuo: el eco se va a otro lado y
pulseInse va a timeout. - Hay vapor, lluvia fuerte o gradientes de temperatura grandes (cambia la velocidad del sonido y el SNR).
- quieres “presencia humana a través de una pared”: eso no es ultrasonido de 40 kHz en aire; mira radar o PIR según el caso.
Idea clave: el HC-SR04 de protoboard y el AJ-SR04M impermeable no son el mismo envase, pero si respetas TRIG ≥ 10 µs y mides el ancho de ECHO, el sketch de Arduino es casi intercambiable. Lo que cambia es montaje, IP, alimentación limpia y si el sensor vive a la intemperie.
En el catálogo de Tecnoelite vas a encontrar sobre todo la familia sellada de campo: AJ-SR04M IP66 y JSN-SR04T / AJ-SR04M con base atornillable. Si en el lab usas un HC-SR04 abierto de kit, el sketch casi no cambia: lo que cambia es el envase y si el sensor va a vivir a la intemperie.
2. Lo que necesitas en la mesa
| Pieza | Rol | Nota de taller |
|---|---|---|
| Sensor familia SR04 | Medición | Laboratorio: HC-SR04 4 pines. Campo/agua: AJ-SR04M IP66 o base atornillable |
| Arduino Nano/Uno (o compatible 5 V) | Control | 5 V simplifica niveles en ECHO |
| Protoboard + jumpers cortos | Cableado | prefiere 10–15 cm; cables de 40 cm suman ruido y caídas |
| Fuente 5 V estable | Alimentación | USB del PC vale para prueba en aire; robot → regulador aparte |
Opcional útil: LED o buzzer para feedback sin mirar el serial, y un “blanco de prueba” (cartón rígido) a distancia conocida con regla.
Si comparas tecnologías de presencia (movimiento humano, pared, exterior), el post RCWL-0516 vs PIR te deja claro cuándo no forzar ultrasonido.
3. Pinout y cableado: la tabla que evita el 80 % de “no anda”
HC-SR04 clásico (laboratorio)
| Pin módulo | Señal | A Arduino 5 V (ej. D9/D10) | Regla |
|---|---|---|---|
| VCC | +5 V | 5V | No 12 V / 24 V de fuente industrial |
| GND | Tierra | GND | GND común con la placa sí o sí |
| TRIG | Disparo (salida MCU) | D9 OUTPUT | Pulso HIGH ≥ 10 µs |
| ECHO | Eco (entrada MCU) | D10 INPUT |
Variantes impermeables (AJ-SR04M / JSN-SR04T)
Suelen compartir la idea VCC / GND / TRIG / ECHO. Algunos módulos ofrecen modo UART y entonces la serigrafía puede decir RX/TX: no copies un diagrama de cuatro pines a ciegas. Lee la cara del módulo que tienes en la mano. Si el vendedor te mandó un “modo serial por jumper”, el código de pulseIn ya no aplica igual.
Esquema mental Arduino 5 V
- VCC del sensor → 5 V de la placa o de un regulador compartiendo GND.
- GND → GND.
- TRIG → pin digital OUTPUT.
- ECHO → pin digital INPUT.
ESP32 y placas 3,3 V: el daño diferido
Muchos ESP32 son 3,3 V en GPIO. El ECHO del HC-SR04 clásico suele salir cerca de 5 V. Meter 5 V en un pin de 3,3 V es una forma elegante de matar el MCU… a veces no al primer día.
Soluciones de taller:
- Divisor resistivo en ECHO (típico 1 kΩ / 2 kΩ o 2k2 / 3k3: el GPIO ve ~1/3 del 5 V).
- Módulo level shifter.
- O prototipar en Arduino 5 V y dejar el ESP para WiFi cuando el sensor ya esté validado.
Alimenta el ultrasónico a 5 V si el datasheet/módulo lo pide; no asumas que “todo a 3,3 V” porque el ESP “anda a 3,3”.
4. Temporización y código con pulseIn (sin librería mágica)
Protocolo mínimo que sí funciona:
- TRIG en LOW unos microsegundos (limpieza).
- TRIG HIGH ≥ 10 µs.
- TRIG LOW.
- Medir con
pulseInel tiempo que ECHO está en HIGH. - Convertir a cm.
- Esperar un tiempo muerto (30–60 ms típico) antes del siguiente disparo para no saturar de ecos fantasma.
Por qué el timeout importa: sin el tercer argumento, pulseIn puede bloquear hasta el default del core (orden de un segundo en algunos entornos). En un robot, un segundo colgado es chocar contra la pared con estilo.
Filtro simple de taller (media de 3 lecturas válidas): si una de tres da timeout, descartala; no promedies −1 con 42 cm. Para nivel de tanque, un promedio móvil de 5–10 muestras válidas reduce el “salto” por ondas en el agua.
5. Superficies, ángulos y falsas lecturas (física de banco, no marketing)
| Situación | Qué suele pasar en serial | Qué hacer |
|---|---|---|
| Cartón plano a 90° | Lectura estable ±1–2 cm | Calibra tu “regla de oro” con cinta métrica |
| Tela / espuma | Timeout o valores locos | Cambia de sensor o pon un reflector rígido |
| Ángulo > ~30–40° | Eco se pierde | Apunta de frente; no “dispares de costado” |
| Dos sensores a la vez | Crosstalk (uno oye al otro) | Alterna disparos + tiempo muerto mayor, o separa en el tiempo |
| Motores en la misma 5 V | Lecturas que “bailan” | Cap cerca del sensor, GND estrella, fuente aparte |
| Distancia < ~2 cm |
Crosstalk multi-sensor: en un robot con sensor frontal + lateral, si disparas los dos en el mismo milisegundo, un eco ajeno ensucia la medida. Dispara en serie: frontal → espera → lateral → espera.
Compensación de temperatura (opcional, avanzado): la velocidad del sonido sube con la temperatura (~0,6 m/s por °C, orden de magnitud típico). Para un robot de feria no hace falta. Para un tanque al sol en el patio, un DHT al lado y una fórmula v = 331 + 0.6*T mejora el sesgo… después de que el hardware ya mida estable.
6. Errores que “queman” el proyecto (y a veces el módulo)
- TRIG y ECHO intercambiados. Compila, imprime basura o ceros, el módulo no se funde: solo te enloquece. Verifica serigrafía con lupa.
- Sin GND común entre sensor y Arduino. El “5 V” del USB y el “5 V” del buck no son magia si las tierras no se tocan.
- 12 V al VCC porque “el robot es de 12 V”. El módulo es de lógica 5 V. Regula.
- ECHO 5 V directo a ESP32. Daño diferido. Divisor.
- Disparar cada 1 ms “para más resolución”. Saturas de ecos y de CPU; 20 Hz de muestreo suele sobrar.
- Cables de 1 m sin par trenzado / sin GND en un chasis metálico con PWM de motores. Ruido.
- Asumir pinout idéntico en un AJ-SR04M en modo UART. Lee el modo.
- Calibrar con un soft target (almohada) y después culpar al código.
Alimentación limpia: un LM2596 bien regulado a 5 V (mide antes de conectar el sensor) saca del juego muchas lecturas locas cuando el motor arranca. Si vas a bajar de 12 V de batería, el módulo LM2596 step-down es el hermano de banco del boost MT3608; no mezcles polaridad ni ajustes a ciegas — ver también cómo regular el MT3608 sin quemarlo por el hábito de medir antes de la carga.
7. Ultrasónico vs infrarrojo vs radar: cuándo elegir cada uno
| Tecnología | Qué “ve” | Fortaleza | Debilidad típica |
|---|---|---|---|
| Ultrasónico SR04 | Distancia por eco acústico | Barato, rango útil decenas de cm a ~3–4 m típicos de módulo | Superficies blandas, ángulo, viento/vapor |
| IR de proximidad / ToF barato | Reflexión IR | Rápido, compacto | Color/reflectividad del blanco, sol fuerte |
| PIR | Cambio de IR térmico de cuerpos | Presencia humana en habitación | No da distancia métrica; ciegos a objetos fríos |
Regla práctica de estudiante:
- ¿Necesito centímetros a un obstáculo rígido? Ultrasónico o ToF.
- ¿Solo “hay alguien en la sala”? PIR (interior) o RCWL si el montaje lo pide.
- ¿Pared de yeso / no quiero ventana óptica? No es trabajo del HC-SR04.
Para el detalle de falsos positivos de movimiento, usa el artículo hermano radar RCWL vs PIR.
8. Proyecto mínimo de validación (30 minutos de banco)
- Cablea solo sensor + Arduino, sin motores.
- Sube el sketch de la sección 4.
- Pon un cartón a 20 cm medidos con regla; anota el serial.
- Repite a 50 cm y 100 cm.
- Si a 20 cm lees ~40 cm, olvidaste el /2 o tienes la constante mal.
- Si siempre timeout: cable ECHO, VCC, o el sensor apunta al techo.
- Recién ahí montas el sensor en el chasis del robot.
Cuando pases a tanque de agua, cambió el envase: prefiere el AJ-SR04M IP66 o el módulo con base atornillable, sella el cable, y no sumerjas lo que el IP no autoriza (IP66 es chorro/polvo, no “sumergible a 2 m” por magia de marketing).
9. Del serial al robot: filtrado mínimo que sí cambia la vida
Cuando el sensor ya mide bien a cartón fijo, el chasis en movimiento mete vibración, ángulo y eco de suelo. Tres trucos de estudiante que no requieren librería:
- Descartar fuera de banda: si esperas 10–120 cm en un pasillo, cualquier cosa < 5 cm o > 200 cm es basura de esa muestra.
- Mediana de 3: ordena tres lecturas válidas y quédate con la del medio; resiste mejor un outlier que el promedio.
- No gires y dispares a la vez: en un servo-radar, espera 50–80 ms tras mover el servo antes del TRIG; el eco anterior y la vibración ensucian.
Eso no compite con un filtro de Kalman de tesis; compite con el robot que se detiene por un 0 fantasma.
10. Checklist final antes de culpar al código
- VCC ~5 V medido en el módulo, no solo en la salida del USB.
- GND común.
- TRIG = OUTPUT, ECHO = INPUT, no al revés.
- Pulso ≥ 10 µs.
-
pulseIncon timeout. - Dead-time ≥ 30 ms entre disparos.
- Blanco de prueba rígido y de frente.
- En ESP32: divisor en ECHO.
- Motores apagados en la primera prueba.
Si pasas todas las casillas y sigue mal, recién ahí sospecha módulo dañado o modo UART distinto.
Preguntas frecuentes
¿El HC-SR04 y el AJ-SR04M usan el mismo código?
En la mayoría de los casos de modo trigger/echo, sí: mismo TRIG ≥ 10 µs y misma conversión de ancho de ECHO. Cambia el hardware (sellado, conector, a veces modos extra). Si tu unidad está en UART, el sketch de pulseIn no aplica.
¿Cuál es el rango real útil?
Los módulos de esta familia suelen publicitar del orden de ~2 cm a ~3–4 m en aire con buen blanco (valores típicos de ficha, no metrología). En la práctica de robot escolar, trabaja cómodo entre 10 cm y 150 cm y filtra outliers.
¿Puedo alimentar el sensor desde el pin 5V del Arduino?
Para un sensor solo, sí en la mayoría de clones decentes. Si sumas servos, tiras LED o motores al mismo USB, el 5 V se cae y el ultrasónico “enloquece”. Separa potencias.
¿Por qué a veces leo 0 cm y a veces un número gigante?
0 de pulseIn con timeout = sin eco. Números enormes = eco tarde, rebote raro, o constante mal aplicada. Mira la superficie reflectante y el tiempo muerto antes de reescribir todo el programa.
¿Hace falta librería NewPing?
No es obligatoria. NewPing aporta timers y multi-sensor más limpios; el sketch mínimo de arriba enseña el protocolo. Si tu proyecto crece a varios sensores, evalúa una librería o timers por hardware.
¿Ultrasónico o IR para un robot evitador de obstáculos?
Si el suelo es irregular y hay objetos de colores raros, el ultrasónico suele ser más predecible en distancia. Si necesitas muy corto alcance y respuesta rápida, un IR/ToF puede complementar. Muchos robots serios combinan; un estudiante puede empezar solo con SR04 bien montado de frente.
En resumen: el ultrasónico de la familia SR04 es un instrumento de tiempo de vuelo acústico, no un oráculo. Respeta pinout, timeout, tiempo muerto y el blanco. Cuando el proyecto salga del aula al tanque o a la intemperie, pasa al módulo IP66 o al JSN-SR04T / AJ-SR04M atornillable y deja de improvisar con PCB abierta junto al agua.













