01 · Punto de partida
Un nuevo bloque: distancia y movimiento
Con el taller de la luz nocturna terminó el bloque de luz y color. Empieza el de la distancia y el movimiento: saber a qué distancia está un objeto, si se acerca, si hay alguien en la habitación, cómo se inclina un dispositivo. A diferencia de la temperatura o la luz, la distancia no es una propiedad que se pueda medir «en el lugar»: hay que enviar algo hasta el objeto y ver qué vuelve. Todos los sensores de este bloque se basan en alguna forma de eco: sonido, luz infrarroja o láser.
Ya vimos de pasada al HC-SR04 en el tema 3, como ejemplo de una salida codificada en el ancho de un pulso, y en el tema 1 como parte de la cadena de medición. Ahora lo estudiamos a fondo, porque es el sensor de distancia más usado en proyectos educativos y robótica básica, y porque ilustra todo lo que puede salir mal con una medición «por eco».
02 · Principio
El tiempo de vuelo
Un transductor emite una ráfaga corta de ultrasonido (sonido de una frecuencia por encima de lo audible; en estos sensores, 40 kHz). La ráfaga viaja hasta un objeto, se refleja y vuelve a un receptor. El sensor mide el tiempo t entre la emisión y el regreso, el tiempo de vuelo (time of flight). Como el sonido recorre el camino de ida y vuelta, la distancia es la mitad de lo que habría recorrido:
donde v es la velocidad del sonido en el aire. En condiciones normales vale unos 343 m/s, es decir, 0,0343 cm por microsegundo. La distancia en centímetros es entonces d = t(µs) × 0,0343 / 2 ≈ t / 58,3. Un objeto a 1 m devuelve el eco a los 5,8 ms; uno a 4 m, a los 23 ms. El sensor entrega ese tiempo como el ancho de un pulso (tema 3), y el programa solo tiene que medirlo.
El detalle que no se puede ignorar es que la velocidad del sonido no es una constante. En el aire depende sobre todo de la temperatura:
| Temperatura | Velocidad del sonido | Microsegundos por cada centímetro de distancia |
|---|---|---|
| −10 °C | 325,2 m/s | 61,5 µs |
| 0 °C | 331,3 m/s | 60,4 µs |
| 20 °C | 343,4 m/s | 58,2 µs |
| 30 °C | 349,5 m/s | 57,2 µs |
| 40 °C | 355,5 m/s | 56,3 µs |
Un cambio de 10 °C modifica la velocidad un 1,8 %: a 1 m, casi 2 cm. Si el programa supone 343 m/s y el aire está a 0 °C, un objeto a 100 cm se leerá a 103,7 cm. Para aplicaciones donde ±3 cm no importan (esquivar obstáculos), se ignora; para mediciones de ±1 cm, se compensa (sección 06). La humedad y la presión influyen mucho menos y se desprecian.
03 · El sensor
El HC-SR04
El módulo HC-SR04 tiene dos cilindros metálicos: un emisor y un receptor piezoeléctricos de 40 kHz. Una pequeña placa genera la ráfaga, amplifica el eco y mide el tiempo. Tiene cuatro pines: Vcc (5 V), Trig, Echo y GND. Sus datos principales (de las hojas de datos habituales; las unidades varían entre fabricantes):
- Alcance: de 2 a 400 cm. Por debajo de 2 cm, el transductor sigue vibrando después de emitir (ringing) y no puede oír el eco: es la zona ciega.
- Alimentación: 5 V y unos 15 mA.
- Disparo: un pulso de al menos 10 µs en el pin Trig.
- Salida: un pulso en el pin Echo cuyo ancho es el tiempo de vuelo. El pin entrega 5 V: un microcontrolador de 3,3 V necesita un divisor o un conversor de niveles (tema 3).
- Ángulo de medición: unos 15° según el fabricante; en la práctica el haz es más ancho y asimétrico.
- Período entre mediciones: al menos 60 ms, para que los ecos de la medición anterior se extingan.
La secuencia es: el programa baja Trig, lo sube 10 µs y lo vuelve a bajar; el módulo emite 8 ciclos de 40 kHz; Echo sube cuando termina la emisión y baja cuando llega el eco; el programa mide cuánto tiempo estuvo Echo alto. Si no vuelve ningún eco, el módulo deja Echo alto durante unos 38 ms y luego lo baja: una lectura «sin objeto» que equivale a más de 6 m y debe interpretarse como tal.
04 · Programa
Leer el pulso de eco
Hay dos maneras de medir el ancho de Echo. La más simple usa pulseIn, que espera a que el pin cambie y mide cuánto dura el nivel:
const uint8_t TRIG = 9, ECHO = 10;
void setup() {
pinMode(TRIG, OUTPUT);
pinMode(ECHO, INPUT);
}
// Versión simple y bloqueante: tarda hasta el tiempo de espera máximo
float distanciaCm(float tempC) {
digitalWrite(TRIG, LOW); delayMicroseconds(2);
digitalWrite(TRIG, HIGH); delayMicroseconds(10);
digitalWrite(TRIG, LOW);
unsigned long eco = pulseIn(ECHO, HIGH, 30000UL); // tiempo máximo: 30 ms (≈ 5 m)
if (eco == 0) return NAN; // no volvió ningún eco
float v = 331.3 + 0.606 * tempC; // velocidad del sonido (m/s)
return eco * v / 20000.0; // cm = µs × m/s / 2 × 1e-4
}
Es cómoda, pero bloquea el programa mientras espera: si el objeto está a 3 m, son 17 ms sin hacer nada más, y si no hay objeto, los 30 ms completos. Para un robot que además debe leer otros sensores y mover motores es demasiado. Además, mientras espera no atiende nada más, y su exactitud se degrada si hay otras interrupciones frecuentes. La alternativa es medir el pulso con una interrupción en el pin Echo, que anota el instante de subida y de bajada con micros(), mientras el bucle principal sigue trabajando:
const uint8_t PIN_ECHO = 2; // pin con interrupción externa (INT0)
volatile uint32_t tSubida = 0, anchoEco = 0;
volatile bool ecoListo = false;
void alCambiarEco() {
if (digitalRead(PIN_ECHO)) tSubida = micros();
else { anchoEco = micros() - tSubida; ecoListo = true; }
}
void setup() {
pinMode(TRIG, OUTPUT);
pinMode(PIN_ECHO, INPUT);
attachInterrupt(digitalPinToInterrupt(PIN_ECHO), alCambiarEco, CHANGE);
}
uint32_t tMedida = 0;
bool esperando = false;
void loop() {
uint32_t ahora = millis();
if (!esperando && ahora - tMedida >= 60) { // una medición cada 60 ms como mínimo
tMedida = ahora;
ecoListo = false;
esperando = true;
digitalWrite(TRIG, HIGH); delayMicroseconds(10); digitalWrite(TRIG, LOW);
}
if (esperando && ecoListo) {
noInterrupts();
uint32_t ancho = anchoEco; // copia atómica de un dato de 32 bits
interrupts();
esperando = false;
procesarEco(ancho);
} else if (esperando && ahora - tMedida > 40) { // ni siquiera el módulo devolvió el pulso
esperando = false;
procesarEco(0); // sin eco
}
// ... el resto del programa corre sin esperas
}
La estructura es la que conocemos del curso: un temporizador (millis()) decide cuándo disparar, una interrupción mide, y el bucle recoge el resultado y lo procesa. Dos detalles de robustez: la copia de anchoEco se hace con las interrupciones desactivadas, porque una variable de 32 bits en un AVR de 8 bits no se lee de forma atómica (tema 21 del curso de Microcontroladores); y se agrega un tiempo máximo propio, para que una falla del sensor (cable cortado) no deje al programa esperando para siempre.
05 · Los límites
Qué mide en realidad
El sensor no mide «la distancia al objeto»: mide el tiempo hasta el primer eco suficientemente fuerte. Esa frase encierra casi todos los problemas del HC-SR04:
- Zona ciega. Por debajo de 2 cm no se distingue el eco de la vibración residual del transductor. Montado detrás de una carcasa o con un objeto muy cerca, entrega lecturas absurdas o constantes de unos 2 cm.
- Cono de detección. El haz tiene un ángulo de unos 15° nominales y lóbulos laterales. A 3 m, el haz cubre un círculo de unos 80 cm de diámetro: el eco puede venir de un mueble lateral y no del objeto de interés. Para esquivar obstáculos conviene un sensor apuntando al frente; para un objeto pequeño, una cuidadosa orientación.
- Superficies. Las superficies duras, lisas y perpendiculares al haz devuelven un buen eco. Las inclinadas lo desvían lejos del receptor (un muro a 45° puede no devolver nada), las blandas (tela, espuma, cortinas, ropa) lo absorben, y los objetos pequeños o finos (una varilla) devuelven un eco débil.
- Reflexiones múltiples. En espacios cerrados, el eco puede rebotar en dos superficies y llegar con un retardo de más. El resultado es una distancia mayor que la real, o un eco que llega durante la medición siguiente.
- Ruido acústico. Algunas fuentes (aire comprimido, motores, frenos) emiten ultrasonido que el receptor capta como un eco falso.
- Interferencia entre sensores. Dos HC-SR04 que miden al mismo tiempo se escuchan entre sí. Con varios sensores se los dispara en secuencia, esperando que cada eco se extinga, nunca simultáneamente.
- Falsos positivos de temperatura y viento. Un gradiente fuerte de temperatura (un calefactor entre el sensor y el objeto) curva el haz, y el viento lateral lo desvía.
| Objeto | Alcance efectivo típico | Por qué |
|---|---|---|
| Pared plana y dura, perpendicular | hasta ≈ 400 cm | Eco fuerte hacia el receptor |
| Superficie dura inclinada 30° | ≈ 250 cm | Parte del eco se desvía |
| Superficie dura inclinada 45° | ≈ 60 cm | El eco se aleja del receptor |
| Tela, espuma, cortinas | ≈ 120 cm | Absorben el sonido |
| Poste o varilla fina | ≈ 150 cm | Poca superficie reflectante |
06 · Mejorar la exactitud
Compensar la temperatura
La compensación consiste en calcular la velocidad del sonido con la temperatura real del aire en lugar de usar una constante. Cuesta una línea de código y un sensor de temperatura (un DS18B20 o un SHT31 del tema 12), y reduce el error que vimos en la tabla:
| Temperatura real | Eco | Distancia calculada con 343,4 m/s | Error |
|---|---|---|---|
| −10 °C | 6149 µs | 105,6 cm | +5,6 cm |
| 0 °C | 6037 µs | 103,7 cm | +3,7 cm |
| 20 °C | 5824 µs | 100,0 cm | 0,0 cm |
| 30 °C | 5723 µs | 98,3 cm | −1,7 cm |
| 35 °C | 5674 µs | 97,4 cm | −2,6 cm |
El error es proporcional a la distancia: a 4 m, los 5,6 cm se convierten en 22 cm. Si el sensor está al aire libre o en una nave con grandes variaciones de temperatura, la compensación es imprescindible. Si se mide en interiores con temperatura casi constante, alcanza con fijar una constante para la temperatura media de la instalación. Con dos precauciones: el sensor de temperatura debe medir el aire del recorrido del sonido y no el calor de la placa, y la temperatura se actualiza cada varios segundos, no en cada medición.
07 · Datos confiables
Filtrar las lecturas
Una serie de lecturas de un HC-SR04 sobre un objeto fijo parece tener dos clases de errores. El primero es un ruido pequeño de ±0,3 a ±1 cm por diferencias de temperatura, electrónica y cuantización. El segundo es más grave: de vez en cuando aparece una lectura completamente equivocada: un 0 (sin eco), un valor doble (reflexión múltiple) o un valor mucho menor (un insecto, una ráfaga de ruido). Un promedio simple de esas lecturas se contamina con los valores atípicos; la herramienta adecuada es la mediana (tema 5):
const uint8_t N = 5;
float lecturas[N];
uint8_t cantidad = 0, indice = 0;
float medianaN(const float *datos, uint8_t n) { // copia y ordena (n es pequeño)
float copia[N];
for (uint8_t i = 0; i < n; i++) copia[i] = datos[i];
for (uint8_t i = 1; i < n; i++) {
float x = copia[i]; int8_t j = i - 1;
while (j >= 0 && copia[j] > x) { copia[j + 1] = copia[j]; j--; }
copia[j + 1] = x;
}
return copia[n / 2];
}
void procesarEco(uint32_t ancho) {
if (ancho == 0) return; // sin eco: no entra al historial
float cm = ancho * velocidadSonido / 20000.0;
if (cm < 2 || cm > 400) return; // fuera del rango del sensor
lecturas[indice] = cm;
indice = (indice + 1) % N;
if (cantidad < N) cantidad++;
distanciaFiltrada = medianaN(lecturas, cantidad);
}
El filtro de mediana de cinco muestras descarta hasta dos lecturas atípicas sin dejar rastro. Reglas complementarias:
- Descartar lo imposible antes de filtrar: ceros, valores fuera de 2 a 400 cm, saltos que implican velocidades absurdas (un objeto que se mueve 3 m en 60 ms).
- Distinguir «sin eco» de «lejos». Un cero repetido puede significar que el objeto salió del alcance o que se desconectó el sensor. Un contador de ceros consecutivos permite declarar «sin objeto» o «falla» según la política de la aplicación (tema 44).
- Aplicar un suavizado exponencial (tema 5) sobre la mediana si se necesita una salida estable, aceptando el retardo.
- Usar histéresis en las decisiones por umbral (tema 7): «obstáculo a menos de 30 cm» con una banda de 5 cm evita que el robot dude.
08 · Alcances y alternativas
Resolución y alternativas
La resolución de la medición depende del reloj con que se mide el pulso. Con pulseIn o micros() en un Arduino de 16 MHz, el temporizador cuenta de a 4 µs. Con un temporizador en modo captura (tema 24 del curso de Microcontroladores), la resolución llega a 1 µs o menos:
| Resolución del reloj | Distancia por cuenta | Comentario |
|---|---|---|
4 µs (micros() en AVR de 16 MHz) | ≈ 0,069 cm | Más fina que el ruido del sensor |
| 1 µs (captura) | ≈ 0,017 cm | Más fina todavía; el límite lo pone el sensor |
Como el ruido real del HC-SR04 es de ±0,3 cm o más, la resolución del reloj no es el factor limitante: afinar el temporizador no mejora la medición. La exactitud práctica es de ±1 cm en las mejores condiciones y se degrada con la temperatura sin compensar y con superficies difíciles. Cuando el HC-SR04 no alcanza, las alternativas son:
| Sensor | Principio | Ventaja | Limitación |
|---|---|---|---|
| JSN-SR04T (sonda impermeable) | Ultrasonido, transductor sellado | Resiste agua y polvo; para tanques y exteriores | Zona ciega mayor (≈ 20–25 cm) |
| Ultrasónicos industriales (MaxBotix y otros) | Ultrasonido, con salida analógica, serie o PWM | Haz más estrecho, compensación de temperatura incluida | Más caros |
| Sharp GP2Y0A (infrarrojo) | Triangulación óptica | Rápido, haz muy angosto | Rango corto, salida no lineal (tema 18) |
| VL53L0X (láser, tiempo de vuelo) | Tiempo de vuelo de luz infrarroja | Haz estrecho, exacto a pocos milímetros | Alcance de 1 a 2 m; afectado por la luz solar (tema 18) |
La regla de elección: el ultrasonido es robusto frente al color y la transparencia del objeto (un vidrio o un objeto negro lo reflejan igual que uno blanco), y funciona en oscuridad y con humo; sufre con las superficies blandas e inclinadas. La luz (infrarroja, láser) es precisa y de haz fino, pero depende del color y de la luz ambiente. Se complementan.
09 · Analogía con programación
Temperatura, resolución y ráfagas de lecturas
Probemos tres piezas de lógica: la dependencia de la velocidad del sonido con la temperatura (y el error si se la ignora), la conversión del ancho del pulso a distancia con distinta resolución del reloj, y el filtrado de una ráfaga de lecturas con valores atípicos usando la media, la mediana y una media que descarta los ceros.
Python en tu navegador. Los bloques son editables: cambiá los valores y presioná «Ejecutar Python». La primera vez tarda unos segundos en cargar.
def velocidad(temp_c):
"""Velocidad del sonido en el aire (m/s)."""
return 331.3 + 0.606 * temp_c
def eco_us(distancia_cm, temp_c):
"""Tiempo de vuelo que mediría el sensor."""
return 2 * distancia_cm / velocidad(temp_c) * 1e4
def distancia_cm(eco, temp_c):
return eco * velocidad(temp_c) / 20000
print("T (°C) v (m/s) µs por cm")
for t in (-10, 0, 20, 30, 40):
print(f"{t:6d} {velocidad(t):7.1f} {2e4 / velocidad(t):9.2f}")
print()
print("Objeto a 100 cm; el programa supone siempre 20 °C:")
for t in (30, 0):
eco = eco_us(100, t)
calculada = distancia_cm(eco, 20)
print(f" aire a {t:2d} °C: eco {eco:6.0f} µs -> {calculada:6.2f} cm (error {calculada - 100:+.2f} cm)")
print()
print("Resolución del reloj (a 20 °C):")
for resolucion in (4, 1):
print(f" {resolucion} µs por cuenta -> {distancia_cm(resolucion, 20):.3f} cm por cuenta")
# ---- Una ráfaga de lecturas con dos ceros (sin eco) ----
lecturas = [100.4, 99.8, 100.9, 0, 100.2, 0, 99.7, 100.1, 100.6]
ordenadas = sorted(lecturas)
media = sum(lecturas) / len(lecturas)
mediana = ordenadas[len(ordenadas) // 2]
validas = [x for x in lecturas if x > 0]
print()
print(f"Media simple: {media:7.2f} cm")
print(f"Mediana: {mediana:7.2f} cm")
print(f"Media sin los ceros: {sum(validas) / len(validas):7.2f} cm")
Resultado: la velocidad del sonido pasa de 325,2 m/s a −10 °C a 355,5 m/s a 40 °C. Un objeto a 100 cm con el aire a 30 °C se lee 98,27 cm (−1,73 cm) y con el aire a 0 °C, 103,66 cm (+3,66 cm), si el programa supone 20 °C. Una cuenta de 4 µs equivale a 0,069 cm, y de 1 µs, 0,017 cm. En la ráfaga, la media simple da 77,97 cm (arrastrada por los ceros), la mediana 100,10 cm y la media sin ceros 100,24 cm. Probá reemplazar un cero por 201,5 (un eco doble): la mediana casi no se mueve y la media sin ceros sí.
El ejemplo muestra por qué la mediana es el filtro natural de este sensor: no necesita saber qué tipo de error ocurrió. Su límite es que, con solo la mitad de las lecturas buenas o menos, también falla; en ese caso hay que detectar la falla (tema 44).
10 · Exploración interactiva
Un eco con sus límites y una ráfaga de lecturas
El primer instrumento simula una medición: elegí la distancia real, el tipo de superficie, la temperatura del aire y si el programa compensa la temperatura, y mirá el ancho del eco, la distancia calculada y el error. El segundo repite la medición nueve veces con ruido y lecturas espurias, y compara la media con la mediana. Los alcances por superficie son los de la tabla de la sección 05, un modelo ilustrativo.
Instrumento 1: una medición con el HC-SR04
Instrumento 2: una ráfaga de 9 lecturas sobre el mismo objeto
Recorrido guiado
- Con una pared a 100 cm, 20 °C, velocidad fija y reloj de 4 µs: el eco dura unos 5824 µs y la distancia calculada es 100,0 cm (con un error de décimas por la cuantización del reloj). Cada cuenta equivale a 0,069 cm.
- Bajá la temperatura a 0 °C: el eco dura unos 6036 µs y el programa, que supone 20 °C, calcula 103,7 cm. Cambiá a «velocidad compensada»: el error desaparece.
- Subí la distancia a 400 cm con aire a 30 °C y velocidad fija: el error ya es de unos 7 cm. El error de la temperatura crece con la distancia.
- Llevá el objeto a 1 cm: aparece la zona ciega y la lectura deja de ser confiable. Pasá a 450 cm: no hay eco (fuera del rango del sensor).
- Cambiá la superficie a «Tela o espuma» y alejá el objeto a 150 cm: ya no hay eco, aunque estés dentro del alcance nominal del sensor. Con «Dura inclinada 45°» ocurre pasados los 60 cm.
- Con el reloj de 16 µs, cada cuenta equivale a 0,27 cm: ya es comparable al ruido del sensor. Un bucle lento degrada la medición.
- En el instrumento 2, con ruido de 0,3 cm y sin lecturas espurias: media y mediana coinciden. Subí la probabilidad de espurias al 30 % y medí varias veces: la media se aleja del valor real, mientras que la mediana casi no cambia.
Desafío: el robot en una bodega fría
Un robot mide distancias con el HC-SR04 y su programa supone 20 °C, pero opera en una cámara frigorífica a −10 °C. Con el instrumento 1 comprobá el error a 50, 100 y 200 cm: unos +2,8; +5,6 y +11,2 cm. El robot cree que los obstáculos están más lejos de lo real. Si su distancia de frenado se calcula con el valor medido, ¿qué consecuencia tiene? Frena tarde. La solución más barata es una constante de compensación para esa temperatura, o un sensor de temperatura en el robot. Un error sistemático conocido es un error corregible.
11 · Método de trabajo
Cómo elegir y conectar un sensor ultrasónico
- Definí el alcance y la exactitud necesarios. De 2 a 400 cm y ±1 cm es lo mejor que ofrece un HC-SR04; si hace falta más, otro sensor.
- Analizá el objeto: material, forma, orientación respecto del haz. Probá con el objeto real, no con la pared del escritorio.
- Alimentá a 5 V con desacople y, si el microcontrolador es de 3,3 V, adaptá el nivel del pin Echo.
- Elegí el método de lectura:
pulseInpara pruebas; interrupción o captura cuando el programa hace otras cosas. - Respetá el período mínimo de 60 ms y dispará varios sensores en secuencia, nunca a la vez.
- Compensá la temperatura si el error de ±3 % de la distancia es excesivo.
- Filtrá con una mediana de 3 a 5 lecturas y tratá los ceros como «sin eco», no como una distancia.
- Decidí con histéresis y prevé la falla del sensor (cable cortado: Echo siempre en alto o en bajo).
- Montalo con cuidado: sin objetos a menos de unos 5 cm, con el eje perpendicular al plano a medir, y sin vibraciones que lo muevan.
Si un HC-SR04 da siempre cero, revisá primero la alimentación (5 V), el pulso de disparo (10 µs) y el cableado de Trig y Echo; si da valores erráticos, el entorno (superficie, ángulo, ruido) y el período de repetición.
12 · Comprensión
Confusiones frecuentes
«El HC-SR04 mide con exactitud milimétrica»
Su resolución de reloj sí lo permitiría, pero el ruido, la temperatura y la geometría limitan la exactitud práctica a ±1 cm o peor.
«La velocidad del sonido es 343 m/s»
Es el valor a 20 °C. Cambia unos 0,6 m/s por grado: a 0 °C es 331 m/s y a 40 °C, 355 m/s.
«Un cero en la lectura significa distancia cero»
Significa que no volvió ningún eco (objeto lejano, absorbente o inclinado) o que el sensor falló. Hay que tratarlo como «sin dato».
«Con dos sensores puedo medir al mismo tiempo»
Se interfieren: cada uno recibe el eco del otro. Hay que dispararlos en secuencia, esperando que cada eco se extinga.
«Si no detecta un objeto, el sensor está roto»
Lo más frecuente es que la superficie absorba o desvíe el sonido (tela, ángulo, objeto fino). Una pared plana a 50 cm es la prueba básica.
«Un promedio de varias lecturas elimina los errores»
Si hay lecturas completamente erróneas (ceros, ecos dobles), el promedio se contamina. La mediana las ignora.
13 · Práctica guiada
Predecí antes de comprobar
1. Del eco a la distancia
El pin Echo permanece en alto 5830 µs con el aire a 20 °C. ¿A qué distancia está el objeto?
Ver solución
d = 5830 × 343,4 / 20 000 ≈ 100,1 cm. Con la regla aproximada de 58,3 µs por cm da 100,0 cm.
2. Error por temperatura
Un objeto está a 2 m y el aire está a 35 °C, pero el programa supone 20 °C. ¿Qué distancia calcula y qué error comete?
Ver solución
Con v = 352,5 m/s a 35 °C el eco dura 2 × 200 / 352,5 × 104 ≈ 11 347 µs. El programa, con 343,4 m/s, calcula 11 347 × 343,4 / 20 000 ≈ 194,8 cm: un error de −5,2 cm (−2,6 %).
3. Tiempo máximo de espera
Se quiere medir hasta 4 m con aire a 20 °C. ¿Cuánto tarda el eco más lejano? Si se usa pulseIn con un tiempo de espera de 25 000 µs, ¿hasta dónde se mide?
Ver solución
Eco a 4 m: 2 × 400 / 343,4 × 104 ≈ 23 300 µs. Con un tiempo de espera de 25 ms se mide hasta 25 × 10−3 × 343,4 / 2 ≈ 4,29 m. Con 30 ms (≈ 5,1 m) hay más margen, a costa de bloquear más tiempo cuando no hay objeto.
4. Resolución
¿Cuántos centímetros equivale una cuenta de 4 µs (con micros()) y una de 1 µs? ¿Tiene sentido afinar el reloj si el ruido del sensor es de 0,3 cm?
Ver solución
4 µs → 4 × 343,4 / 20 000 ≈ 0,069 cm; 1 µs → 0,017 cm. Ambas son mucho menores que 0,3 cm: no tiene sentido afinar el reloj; el límite lo pone el sensor.
5. El cono del haz
Con un semiángulo de haz de 7,5°, ¿qué radio cubre el haz a 3 m? ¿Qué implica para medir un objeto pequeño a esa distancia?
Ver solución
Radio = 3 m × tan 7,5° ≈ 0,39 m, o sea un círculo de unos 79 cm de diámetro. Cualquier objeto dentro del cono, no solo el de interés, puede devolver el primer eco. Para un objeto pequeño hay que despejar el entorno o usar un sensor de haz más angosto (tema 18).
6. Elegir el sensor
Elegí HC-SR04, sonda impermeable o sensor de otro tipo para: (a) un robot que esquiva obstáculos en interiores entre 5 y 200 cm; (b) medir el nivel de agua de un tanque de 3 m, al aire libre; (c) medir el espesor de una pieza con ±0,1 mm.
Ver solución
(a) HC-SR04, con filtro de mediana y compensación opcional. (b) Sonda impermeable (JSN-SR04T o similar), montada por encima del tanque, con su zona ciega (≈ 25 cm) y compensación de temperatura. (c) Ninguno de los ultrasónicos: la exactitud necesaria es 100 veces mejor; hace falta un calibre, un sensor láser o un comparador mecánico.
14 · Síntesis
Ideas para recordar
- Un sensor ultrasónico mide el tiempo de vuelo de un eco; la distancia es d = v·t/2, con v ≈ 343 m/s a 20 °C (0,0343 cm/µs, unos 58,3 µs por cm).
- La velocidad del sonido cambia con la temperatura: v ≈ 331,3 + 0,606·T m/s. Ignorarlo da errores de unos 0,17 % por cada grado, que crecen con la distancia.
- El HC-SR04 mide de 2 a 400 cm, se dispara con un pulso de 10 µs y entrega el tiempo de vuelo como el ancho del pulso en Echo (5 V).
pulseInes simple pero bloquea; una interrupción en Echo conmicros()permite medir sin bloquear, con una copia atómica del resultado.- El período entre mediciones debe ser de al menos 60 ms, y varios sensores se disparan en secuencia.
- Mide el primer eco suficientemente fuerte: tiene zona ciega, un cono ancho y falla con superficies blandas, inclinadas o muy finas.
- Un cero significa «sin eco», no «distancia cero»; las lecturas espurias se filtran con una mediana y no con un promedio.
- La resolución del reloj (0,069 cm con 4 µs) es mejor que el ruido del sensor (≈ 0,3 cm): la exactitud práctica es de ±1 cm.
- El ultrasonido es insensible al color y la transparencia; la luz (tema 18) es más precisa pero depende del objeto y de la luz ambiente.
¿Listo para el tema 18?
Antes de avanzar, convertí un eco de 3500 µs en centímetros a 20 °C, estimá el error que produce suponer 20 °C cuando el aire está a 0 °C a 150 cm, y explicá por qué la mediana de cinco lecturas es mejor que su promedio cuando hay ecos perdidos. Si podés justificar las tres respuestas, ya sabés medir distancias con ultrasonido.
En el próximo tema estudiamos los sensores infrarrojos y de tiempo de vuelo láser: los Sharp GP2Y0A y el VL53L0X, con su triangulación óptica, sus curvas no lineales y su sensibilidad a las superficies reflectantes.