01 · Punto de partida
Qué distancia estamos midiendo
En el tema anterior distinguimos percepción propia y percepción del entorno. Un sensor de distancia es una observación exteroceptiva: informa sobre una superficie que devuelve una señal dentro de su región de detección.
No entrega necesariamente «la distancia al obstáculo más cercano al robot». Una pata de silla puede quedar fuera del campo, una pared inclinada puede devolver poca señal y el paragolpes puede estar por delante del punto desde donde mide el sensor.
Vamos a estudiar principios y ejemplos concretos. Los alcances publicados pertenecen a modelos y condiciones particulares; no se trasladan a toda una tecnología ni garantizan detectar cualquier objeto.
02 · Tiempo de vuelo acústico
Ultrasonido: escuchar el eco
El emisor produce una ráfaga de sonido y el receptor detecta su retorno. El tiempo incluye el viaje hacia el objeto y el regreso, por eso dividimos por dos:
dcm = cm/s · tµs / 20000
Con una velocidad de sonido aproximada de 343 m/s, un eco de 2000 µs corresponde a 343 × 2000 / 20000 = 34,3 cm. No confundas microsegundos con milisegundos: introducir 2 en lugar de 2000 cambia el resultado mil veces.
Como ejemplo, la ficha del módulo HC-SR04 de ElecFreaks describe disparo de al menos 10 µs, salida de eco por ancho de pulso, alimentación de 5 V y rango nominal de 2 a 400 cm. También recomienda separar mediciones más de 60 ms. Hay variantes y clones: comprobá la documentación de tu módulo.
El sonido depende del aire y de su temperatura. Para los cálculos didácticos usaremos:
Es una aproximación para aire en condiciones habituales. Humedad, corrientes de aire y geometría también pueden influir. Si calculás siempre con 343 m/s mientras cambia la velocidad real del sonido, introducís un error de escala.
Los tejidos blandos pueden absorber sonido; las superficies inclinadas pueden reflejarlo lejos del receptor. Con varios sensores ultrasónicos, sus ráfagas pueden interferirse: coordiná las adquisiciones y verificá tiempos de separación.
03 · Geometría óptica
Infrarrojos por triangulación
Un emisor infrarrojo ilumina el objeto y una óptica proyecta la reflexión sobre un detector. La posición de esa imagen cambia con la distancia. La electrónica convierte esa geometría en una salida, que puede ser analógica.
No es lo mismo que un módulo reflectivo que solo compara cuánta luz vuelve con un umbral. Tampoco todo sensor infrarrojo mide distancia por tiempo de vuelo: infrarrojo describe la radiación, no el método de cálculo.
El Sharp GP2Y0A21YK0F es un ejemplo de sensor con detector sensible a la posición, emisor infrarrojo y salida analógica; su rango especificado es de 10 a 80 cm. La relación entre tensión y distancia no es una recta.
Para usarlo necesitás convertir lecturas del ADC a distancia mediante una curva o tabla calibrada. No sirve hacer map(lectura, 0, 1023, 0, 80) suponiendo una relación lineal. Por debajo del rango mínimo puede haber respuestas ambiguas: una señal numérica no demuestra que el objeto esté lejos.
04 · Tiempo de vuelo óptico
Medir el viaje de la luz
Un sensor ToF óptico emite luz y estima su tiempo de retorno mediante electrónica especializada. La idea de ida y vuelta es parecida a la ultrasónica, pero la velocidad de propagación es muchísimo mayor: un viaje de un metro hasta un objeto y vuelta tarda unos 6,7 ns. No se mide con un pulseIn() corriente.
Un ejemplo es el VL53L0X de STMicroelectronics: usa un emisor de 940 nm, comunica resultados mediante I²C y anuncia alcance de hasta 2 m. Su ficha presenta condiciones de reflectancia, luz ambiente y presupuesto temporal para evaluar el rendimiento.
El cálculo no se basa únicamente en la intensidad reflejada, pero eso no lo vuelve inmune al entorno. Un retorno débil o mucha luz ambiente pueden reducir el alcance útil o aumentar medidas inválidas. También importan la ventana protectora, la suciedad y la interferencia óptica del montaje.
Leé el estado de validez que entrega la biblioteca o API, no solo el campo de distancia. El tiempo de adquisición puede ser configurable y condiciona cuánto tarda en estar disponible una medida nueva.
Distinguí el componente de su placa adaptadora: un módulo puede incluir regulador y adaptación de niveles que el sensor suelto no tiene. Revisá qué tensiones admite cada conexión del producto que vas a usar.
05 · Decisión de diseño
Elegir según el entorno
| Principio | Dato habitual | Qué conviene observar | Qué probar especialmente |
|---|---|---|---|
| Ultrasonido | Ancho de pulso o dato digital | Eco y espera máxima | Textiles, inclinación, objetos pequeños y otros emisores |
| Triangulación infrarroja | Tensión o dato convertido | Curva distancia-salida | Rango mínimo, luz, material y orientación |
| ToF óptico | Distancia y estado digital | Validez y tiempo de adquisición | Luz ambiente, retorno débil, ventana y campo de visión |
Para una prueba inicial interior con una pared amplia, el ultrasonido permite estudiar la conversión de tiempo a distancia de forma directa. Para una integración compacta puede interesar un ToF óptico. Si ya existe un sensor analógico de triangulación, su calibración es parte del trabajo.
La selección final necesita una lista de objetos y condiciones: paredes, patas de muebles, telas, vidrio, superficies oscuras, exterior o interior. No atribuyas a una tecnología una garantía de detección que solo comprobaste con una cartulina frente al sensor.
06 · Qué espacio se observa
Alcance, campo y zonas ciegas
El rango útil está limitado por una distancia mínima y una máxima. Cerca del sensor puede existir una zona donde no se distingue bien el retorno. Lejos, la señal puede dejar de ser suficiente. El campo de visión o detección describe una región angular, pero no es una frontera perfecta independiente del objeto.
Una lectura válida puede corresponder a otro objeto del campo o a una reflexión indirecta. El número no identifica por sí solo qué superficie generó la respuesta. Si el robot gira, comparar distancias sucesivas puede significar comparar objetos diferentes.
Ubicá el sensor para que la región observada sea relevante para el volumen del robot. Un punto central frontal no cubre automáticamente las esquinas ni un hueco en el suelo. Es posible necesitar sensores adicionales o limitar el entorno de uso.
07 · Información con plazo
Tiempo de espera y antigüedad
A 343 m/s, un objeto a 4 m devuelve su eco tras unos 23,3 ms de ida y vuelta. Si la función de lectura espera hasta 25 ms, esa espera entra en el presupuesto del lazo, incluso cuando no llega un eco utilizable.
La espera máxima limita el bloqueo, pero no es la frecuencia de muestreo. Si disparás cada 70 ms, seguís teniendo lecturas separadas por ese intervalo aunque un eco cercano tarde muy poco. Y si el programa tiene más trabajo, el intervalo real puede crecer.
Guardá estado y tiempo junto al valor. Al intentar una nueva medida que falla, no presentes el último número bueno como si fuera actual. Podés conservarlo para diagnóstico, con su fecha original y un estado explícito de fallo de la nueva adquisición.
Al diseñar la distancia de frenado, incluí el peor intervalo hasta observar el obstáculo, la adquisición, el procesamiento y la actuación. No reduzcas todo el retardo a la duración del pulso de eco.
08 · Código para la placa
Lectura ultrasónica con espera acotada
Esta prueba usa un Arduino UNO R3 y un HC-SR04 convencional de 5 V. Con la alimentación desconectada, conectá VCC a 5 V, GND a GND, TRIG a D7 y ECHO a D8. No conectes motores. En una placa con entradas de 3,3 V hace falta adaptar ECHO según sus límites: Adafruit explica esa diferencia de niveles.
const byte PIN_TRIG = 7;
const byte PIN_ECHO = 8;
const unsigned long PERIODO_MS = 70;
const unsigned long TIMEOUT_US = 25000;
unsigned long ultimoIntento = 0;
struct Medida {
float cm;
bool valida;
unsigned long instanteMs;
};
Medida leerDistancia() {
// Fecha conservadora: el dato ya envejece durante la adquisición.
const unsigned long inicio = millis();
digitalWrite(PIN_TRIG, LOW);
delayMicroseconds(2);
digitalWrite(PIN_TRIG, HIGH);
delayMicroseconds(10);
digitalWrite(PIN_TRIG, LOW);
const unsigned long eco = pulseIn(PIN_ECHO, HIGH, TIMEOUT_US);
if (eco == 0) return {0.0f, false, inicio};
const float cm = eco * 343.0f / 20000.0f;
return {cm, cm >= 2.0f && cm <= 400.0f, inicio};
}
void setup() {
pinMode(PIN_TRIG, OUTPUT);
digitalWrite(PIN_TRIG, LOW);
pinMode(PIN_ECHO, INPUT);
Serial.begin(115200);
}
void loop() {
const unsigned long ahora = millis();
if (ahora - ultimoIntento < PERIODO_MS) return;
ultimoIntento = ahora;
const Medida medida = leerDistancia();
const unsigned long edad = millis() - medida.instanteMs;
const bool usable = medida.valida && edad <= 100;
if (!usable) {
Serial.println("Lectura no utilizable: solicitar parada");
return;
}
Serial.print(medida.cm, 1);
Serial.println(medida.cm <= 20 ? " cm: solicitar parada"
: " cm: fuera del umbral");
}
La referencia de pulseIn() describe la lectura del ancho de pulso y el retorno cero cuando no se obtiene el pulso dentro del tiempo de espera. Aquí ese cero produce un estado inválido, no una distancia física de cero.
Este código es una prueba bloqueante y no activa salidas de motor. Aunque la espera esté acotada, puede ocupar una parte importante del ciclo. Para lazos más exigentes se puede capturar el eco con periféricos o interrupciones y organizar la adquisición sin esperar activamente.
Los límites 2–400 cm y 100 ms son validaciones del ejemplo. Un pulso dentro del rango puede seguir siendo un eco incorrecto. El umbral de 20 cm tampoco reemplaza el cálculo de frenado del tema 1.
09 · Código ejecutable
Ruido, mediana y reacción
La mediana de cinco números ordena los valores y elige el central. Puede rechazar un pico aislado, pero también retrasar la detección de un cambio real. El promedio es sensible a valores extremos; ninguno de los dos resuelve automáticamente la validez o la antigüedad.
Probalo en el navegador. El ejemplo es editable. Python se descarga con Pyodide la primera vez y requiere conexión. No lee un sensor real.
from statistics import mean, median
casos = {
"estable": [60, 61, 59, 60, 62],
"pico lejano": [60, 61, 180, 59, 60],
"obstáculo nuevo": [60, 61, 59, 60, 18],
"sin respuesta": [60, 61, 59, 60, None],
}
for nombre, ventana in casos.items():
ultima = ventana[-1]
if ultima is None:
print(f"{nombre}: lectura inválida; solicitar parada")
continue
promedio = mean(ventana)
central = median(ventana)
parar_solo_mediana = central <= 20
# Regla didáctica conservadora: no ignorar un dato cercano reciente.
solicitar_parada = ultima <= 20 or parar_solo_mediana
print(f"{nombre}: media={promedio:.1f}; mediana={central:.1f}; "
f"parada solo mediana={parar_solo_mediana}; "
f"solicitud final={solicitar_parada}")En el pico lejano, el promedio sube a 84 cm y la mediana queda en 60 cm. Cuando aparece el obstáculo a 18 cm, la mediana todavía vale 60 cm y el promedio 51,6 cm. La regla adicional solicita parada por la lectura cercana más reciente.
Con lecturas cada 70 ms, la ventana de cinco abarca 280 ms entre la primera y la última muestra. Ante un cambio sostenido, una mediana puede necesitar varias muestras para reflejarlo. La regla del ejemplo prioriza reaccionar a una lectura cercana, a cambio de posibles paradas falsas.
El código supone que todos los valores numéricos ya pasaron controles de rango y tiempo; solo representa un timeout en la última muestra. En el sistema completo deben validarse todas las muestras y definirse qué hacer con huecos, datos viejos y recuperación del movimiento.
10 · Exploración interactiva
Laboratorio: del eco a la decisión
Este modelo genera un tiempo de eco desde una distancia conocida y la temperatura del aire. Después lo convierte usando 343 m/s fijos o la velocidad compensada del modelo. Permite introducir falta de retorno, un eco tardío y una lectura vencida.
Tiempo, rango y validez
Reglas: rango aceptado 2–400 cm, edad máxima 100 ms y umbral de parada 20 cm.
Ajustá los controles para explorar la adquisición.
| Dato | Valor |
|---|---|
| Velocidad real del sonido en el modelo | — |
| Velocidad usada para convertir | — |
| Estado de la adquisición | — |
Es un modelo estático, sin ruido aleatorio ni movimiento. Asume que no se obtiene retorno directo fuera del intervalo real de 2–400 cm; un sensor físico puede producir ecos espurios y respuestas ambiguas. La edad es una entrada independiente y no calcula el tiempo total de una adquisición. No hay simulación de frenado.
Recorrido guiado
- Con 100 cm, 20 °C y conversión fija, el eco ronda 5824 µs y el resultado es aproximadamente 99,9 cm. La pequeña diferencia se debe a usar 343 en vez de 343,42 m/s.
- Bajá la temperatura a −10 °C: con velocidad fija, la lectura sube a unos 105,5 cm. Activá la compensación ideal y vuelve a unos 100 cm.
- Restablecé y elegí espera de 5000 µs: el eco de 100 cm llega tarde para esa espera. Se solicita parada por falta de medida, no porque la distancia se haya vuelto cero.
- Restablecé y bajá la distancia a 15 cm: solicita parada por obstáculo. Bajala a 1 cm: pasa a no disponer de un eco válido en el modelo de zona próxima.
- Restablecé y probá objeto fuera del campo: aunque el modelo conoce su distancia, el sensor no aporta una observación utilizable.
- Con 15 cm y reflexión tardía, el tiempo extra produce una lectura de unos 49,3 cm y la regla permite continuar. Una lectura numérica plausible puede ocultar un obstáculo.
- Volvé a eco normal y seleccioná edad de 250 ms: el dato se descarta por vencido, aunque el pulso y la conversión sean correctos.
11 · Método de trabajo
Calibrar y probar antes de mover
- Fijá la referencia: medí desde el plano indicado para el sensor y anotá su posición respecto del robot.
- Ensayá distancias conocidas: incluí puntos cercanos, medios y próximos a los límites.
- Repetí por material y orientación: superficie clara, oscura, blanda, brillante y en ángulo, según el entorno real.
- Registrá fallos: porcentaje de medidas válidas, lecturas espurias, dispersión y sesgo. No borres timeouts para mejorar artificialmente el promedio.
- Medí tiempos: adquisición normal, timeout, frecuencia real y edad al decidir.
- Probá el montaje: verificá carcasas, ventanas, vibración, motores y otros emisores.
- Recién después integrá movimiento: a baja velocidad, con márgenes y parada accesible como vimos en los temas anteriores.
Una fila de registro útil contiene tiempo, referencia, lectura, estado, duración, temperatura, material, ángulo. Compará datos de distintas condiciones antes de elegir umbral, filtro y período.
No uses como objetivo conseguir un número estable a cualquier costo. Un sensor que repite la última lectura frente a un fallo parece estable, pero dejó de observar el entorno.
12 · Comprensión
Confusiones frecuentes
«El alcance máximo vale para cualquier superficie»
Las especificaciones dependen de condiciones de blanco, luz, geometría y tiempo de medida. El alcance útil en tu robot puede ser menor. Probalo con los objetos relevantes.
«Todo infrarrojo calcula distancia igual»
Hay sensores por intensidad, triangulación y tiempo de vuelo, entre otros. El tipo de radiación no define por sí solo el principio de medida ni la conversión necesaria.
«Timeout significa que la pared está más lejos»
Puede indicar falta de retorno, interferencia o falla. No permite asignar una distancia concreta. Conservá un estado inválido separado del valor numérico.
«Si leo el registro más rápido, obtengo más medidas»
Podés estar repitiendo el mismo resultado. Revisá cuándo ocurre una adquisición nueva, cuánto tarda y qué intervalo exige el dispositivo.
«La mediana elimina los errores sin consecuencias»
Puede rechazar valores aislados, pero también retrasar un cambio verdadero. Evaluá el retardo y la respuesta a un obstáculo que aparece de golpe.
«Un número dentro del rango garantiza una detección correcta»
Un eco indirecto puede tener un tiempo plausible; una lectura óptica puede corresponder a otra superficie. El rango es una comprobación necesaria del ejemplo, no una validación completa del mundo.
13 · Práctica guiada
Predecí antes de comprobar
1. Convertir un eco
Con velocidad de sonido de 343 m/s, el pulso dura 3000 µs. ¿Qué distancia corresponde? ¿Por qué se divide por dos?
Ver solución
d = 343 × 3000 / 20000 = 51,45 cm. El tiempo incluye ida y vuelta; sin dividir por dos estaríamos contando el recorrido completo de la señal.
2. Elegir la espera
Querés observar hasta 200 cm con c = 343 m/s. ¿Qué tiempo de vuelo corresponde? ¿Alcanza un timeout de 5000 µs?
Ver solución
t = 20000 × 200 / 343 ≈ 11662 µs. 5000 µs no alcanza para ese viaje. Hay que considerar además el comportamiento y tiempos propios del módulo al configurar la espera.
3. Error por temperatura
A −10 °C, el modelo usa c ≈ 325,24 m/s. El objeto está a 100 cm, pero calculás con 343 m/s. ¿La lectura queda por encima o por debajo?
Ver solución
El sonido tarda más y usar una velocidad mayor sobreestima la distancia: 100 × 343 / 325,24 ≈ 105,5 cm. Es un error de escala del modelo de conversión.
4. Mediana ante un cambio
La ventana es 60, 60, 60, 18, 18 cm. ¿Qué devuelve la mediana? Si solo frenás al bajar la mediana de 20 cm, ¿ya reaccionaste?
Ver solución
La mediana todavía es 60 cm, así que esa regla no frenó. Con una tercera lectura cercana, la ventana puede pasar a 60, 60, 18, 18, 18 y la mediana a 18. Es un retardo que debe entrar en el diseño.
5. Posición del sensor
El sensor está 4 cm detrás del frente del robot y mide 12 cm hacia una pared frontal. ¿Qué separación aproximada queda desde el frente?
Ver solución
12 − 4 = 8 cm, bajo esa geometría alineada. El umbral debe referirse al punto físico correcto del robot.
6. Dato válido pero viejo
Un sensor informó 30 cm hace 200 ms y el robot avanza a 50 cm/s. ¿Por qué no alcanza con verificar que 30 cm está dentro del rango?
Ver solución
El robot podría haber avanzado 50 × 0,2 = 10 cm desde la adquisición. Rango y antigüedad son verificaciones independientes; todavía faltan otros retardos y la distancia de frenado.
14 · Síntesis
Ideas para recordar
- Ultrasonido y ToF óptico estiman viajes de ida y vuelta; la triangulación usa geometría óptica.
- Infrarrojo no identifica un único método de medición.
- Rango, campo de detección, superficie y montaje determinan qué puede observarse.
- Un timeout es un estado de adquisición, no una distancia que se deba inventar.
- La temperatura puede afectar la conversión ultrasónica; la luz y el retorno afectan sensores ópticos.
- Distancia, validez y antigüedad deben viajar juntas hacia el controlador.
- Los filtros cambian la reacción temporal y no garantizan rechazar solo errores.
- Probá materiales, ángulos, límites y tiempos antes de confiar el movimiento a una lectura.
¿Listo para el tema 7?
Antes de avanzar, calculá el tiempo de eco para 50 cm, explicá qué haría tu robot ante un timeout y diseñá una prueba que pueda revelar un objeto fuera del campo del sensor.
En el próximo tema estudiamos sensores de línea y de contacto: reflectivos infrarrojos, finales de carrera y bumpers para observar el suelo y los límites físicos.