01 · Punto de partida
Distancia con luz
En el tema 17 medimos distancias con el eco del sonido. Funcionaba bien con superficies duras y a bastantes metros, pero tenía tres limitaciones que molestan en muchos proyectos: un haz ancho (un cono de 15° o más), una zona ciega de 2 cm y una respuesta lenta (60 ms entre mediciones, con la velocidad del sonido como límite físico). La luz no tiene esos problemas: se concentra en un haz fino, viaja un millón de veces más rápido y permite sensores pequeños con respuesta de decenas de milisegundos o menos. Su costo es otro: el resultado depende de cuánta luz refleja el objeto y de cuánta luz ajena hay en el ambiente.
El tema recorre las dos técnicas ópticas más comunes. La triangulación (Sharp GP2Y0A) mide el ángulo con que vuelve un haz infrarrojo y lo convierte en una tensión analógica de curva no lineal. El tiempo de vuelo (VL53L0X) mide directamente el tiempo que tarda un pulso láser en ir y volver, y entrega la distancia en milímetros por I2C.
02 · Principio
La triangulación del Sharp
Un sensor Sharp GP2Y0A tiene un LED infrarrojo que emite un haz angosto, una lente y un detector sensible a la posición (PSD) a una distancia fija del emisor, llamada base B. El haz sale paralelo, rebota en el objeto y vuelve en un ángulo que depende de la distancia: cuanto más lejos el objeto, más paralelo regresa y más cerca del eje cae el punto luminoso sobre el detector. Por geometría simple de triángulos semejantes, la posición x del punto en el detector es:
donde f es la distancia focal de la lente y d la distancia al objeto. La posición del punto es inversamente proporcional a la distancia. El circuito interno convierte esa posición en una tensión, de modo que la salida del sensor es, aproximadamente, V ≈ a / (d + b) + c: una hipérbola, no una recta. Las hojas de datos de Sharp lo grafican como una recta contra el inverso de la distancia, que es la forma de linealizarlo.
Las propiedades principales de un GP2Y0A21YK0F, el modelo más conocido (los otros de la familia cambian el rango):
- Rango útil: de 10 a 80 cm. Otros modelos: GP2Y0A41 (4 a 30 cm), GP2Y0A02 (20 a 150 cm), GP2Y0A710 (100 a 550 cm).
- Salida: tensión analógica de unos 2,7 V a 10 cm hasta unos 0,4 V a 80 cm, que se lee con el ADC.
- Alimentación: 4,5 a 5,5 V, con un consumo de unos 30 mA y picos al emitir.
- Período de actualización: unos 38 ms (±10 ms): la salida se actualiza a esa cadencia, no más rápido.
- Haz angosto: mucho más fino que el de un ultrasónico, ideal para detectar un objeto concreto.
03 · Del voltaje a los centímetros
Leer y linealizar un Sharp
Usaremos un modelo ilustrativo de la curva de un GP2Y0A21, de la forma que sugiere su hoja de datos: V = 0,1 + 27,5 / (d + 0,42) para d de 10 a 80 cm. Los valores son aproximados; la curva real de tu ejemplar hay que medirla (tema 5). Invirtiéndola:
| Distancia real | Tensión | Cuentas | Distancia calculada | Resolución local |
|---|---|---|---|---|
| 10 cm | 2,74 V | 560 | 10,0 cm | 0,02 cm por cuenta |
| 20 cm | 1,45 V | 296 | 20,0 cm | 0,07 cm por cuenta |
| 40 cm | 0,78 V | 160 | 39,9 cm | 0,29 cm por cuenta |
| 60 cm | 0,56 V | 114 | 59,7 cm | 0,65 cm por cuenta |
| 80 cm | 0,44 V | 90 | 80,5 cm | 1,15 cm por cuenta |
La última columna es la consecuencia práctica de la forma hiperbólica: la resolución es muy buena cerca y empeora con el cuadrado de la distancia. Derivando la fórmula, un paso del ADC (4,9 mV) equivale a (d + 0,42)² / 27,5 × 0,00489 cm. A 80 cm, un solo escalón del ADC vale más de un centímetro, y el ruido de unos milivolts de la salida se traduce en un par de centímetros de incertidumbre. Un Sharp es excelente para distancias cortas y mediocre al final de su rango.
// Modelo ilustrativo del GP2Y0A21: sustituir A, B y C por los de la curva medida del ejemplar
const float A = 27.5, B = 0.42, C = 0.1; // d = A / (V - C) - B
float distanciaSharp() {
int cuentas = analogRead(A0);
float volts = cuentas * 5.0 / 1023.0;
if (volts <= C + 0.2) return NAN; // casi sin señal: más allá de 80 cm
float d = A / (volts - C) - B;
if (d > 80.0) return NAN; // fuera del rango útil
if (d < 10.0) return NAN; // por debajo del mínimo la curva se invierte: no se confía
return d;
}
El código rechaza lo que cae fuera de 10 a 80 cm, pero no puede detectar el objeto a 5 cm que se hace pasar por uno a 20 cm; eso es un problema de montaje. Para usar el sensor con comodidad hay tres cuidados prácticos:
- Desacople fuerte: el sensor consume pulsos de corriente al emitir. Un capacitor de 10 µF entre Vcc y GND junto al sensor evita que el ruido de la alimentación llegue a la salida.
- Filtrado: la salida tiene ruido de decenas de milivolts. Una mediana de 3 a 5 lecturas y un filtro exponencial (tema 5) la estabilizan. No tiene sentido leer más de una vez cada 38 ms.
- Referencia del ADC estable: como la salida es absoluta (no ratiométrica), una alimentación que varía altera la lectura. Se usa una referencia propia (tema 10).
04 · Contar el tiempo de la luz
El tiempo de vuelo láser
Los sensores de tiempo de vuelo (time of flight, ToF) emiten un pulso de luz y miden cuánto tarda en volver: la misma idea del ultrasonido, con luz. La diferencia es de escala. La luz viaja a 299 792 458 m/s, de modo que un objeto a 1,2 m devuelve el pulso en solo 8 ns. Y para resolver 1 mm hay que distinguir diferencias de 6,7 picosegundos (2 mm de recorrido de ida y vuelta / velocidad de la luz). Ningún microcontrolador cronometra eso; lo hace el propio sensor con un circuito dedicado.
El VL53L0X de STMicroelectronics integra todo en un encapsulado de 4,4 × 2,4 mm: un láser de emisión vertical (VCSEL) de 940 nm, una matriz de detectores de fotones individuales (SPAD), la electrónica de cronometraje y un procesador que calcula la distancia a partir de la distribución de los fotones recibidos. Entrega el resultado por I2C. Sus datos principales, de la hoja del fabricante:
| Característica | Valor |
|---|---|
| Alcance | Unos 30 mm de mínimo; hasta ≈ 2 m en condiciones ideales (entorno oscuro, blanco), ≈ 1,2 m en modo normal con luz ambiente |
| Resolución | 1 mm |
| Exactitud | Del orden de ±3 % bajo buenas condiciones; empeora con superficies oscuras y mucha luz |
| Campo de visión | Unos 25° (más angosto que un ultrasónico) |
| Tiempo de medición | Programable: unos 20 ms (alta velocidad) a 200 ms (alta precisión); 33 ms por defecto |
| Interfaz | I2C, dirección 0x29 por defecto; pines XSHUT (reinicio) y GPIO1 (interrupción) |
| Alimentación | 2,6 a 3,5 V en el chip; los módulos económicos incluyen un regulador y admiten 5 V |
| Longitud de onda | 940 nm, invisible, de clase 1 (seguro para los ojos) |
Una familia relacionada, el VL53L1X, llega a unos 4 m y permite elegir la zona del detector que se usa (region of interest) para estrechar el haz. El principio y la programación son similares.
05 · Programa
Programar el VL53L0X
El protocolo de bajo nivel del VL53L0X es complejo (cientos de registros de calibración que se cargan al iniciar), por lo que se lo usa casi siempre con una biblioteca del fabricante o de terceros, como la de Pololu. La lectura en modo continuo, sin bloquear el programa más de lo necesario, tiene esta forma:
#include <Wire.h>
#include <VL53L0X.h>
VL53L0X sensor;
void setup() {
Wire.begin();
sensor.setTimeout(500); // para no quedar esperando si el sensor no contesta
if (!sensor.init()) {
// el sensor no respondió: cableado, dirección o alimentación
}
sensor.startContinuous(33); // una medición cada 33 ms
}
void loop() {
uint16_t mm = sensor.readRangeContinuousMillimeters();
if (sensor.timeoutOccurred()) {
// el sensor dejó de responder: tratar como falla
} else if (mm >= 8190) {
// «sin objeto»: el sensor devuelve 8190 o 8191 cuando no hay blanco válido
} else {
// mm es una distancia en milímetros
}
}
Observá los tres resultados posibles, que el programa debe distinguir: una distancia válida, un valor de fuera de rango (8190 mm o similar: no hay objeto o está demasiado lejos o es demasiado oscuro) y un tiempo de espera agotado (el sensor ni siquiera contesta). Confundirlos es el error más común: tratar 8190 como una distancia de 8 metros o el cero de un fallo del bus como un objeto pegado.
Perfiles de medición
El tiempo de medición se negocia con el alcance y la precisión. La biblioteca permite ajustar el presupuesto de tiempo (más tiempo, más fotones, menos ruido) y los períodos del pulso láser:
| Perfil | Tiempo de medición | Alcance | Ruido |
|---|---|---|---|
| Por defecto | ≈ 30 ms | ≈ 1,2 m | Moderado |
| Alta velocidad | ≈ 20 ms | Menor | Mayor |
| Alta precisión | ≈ 200 ms | ≈ 1,2 m | Bajo (±1 a ±2 mm) |
| Largo alcance | ≈ 33 ms | Hasta ≈ 2 m (en interior) | Mayor; sensible a la luz |
En la biblioteca de Pololu se cambian con setMeasurementTimingBudget(...) (en microsegundos), setSignalRateLimit(...) y setVcselPulsePeriod(...). El criterio de elección es el de siempre: más tiempo y más fotones reducen el ruido; más velocidad lo aumentan.
Varios sensores en el mismo bus
Todos los VL53L0X salen de fábrica con la misma dirección (0x29), así que dos en el mismo bus chocarían. La solución es el pin XSHUT, que reinicia cada sensor: se los mantiene todos en reinicio, se libera uno, se le asigna una dirección nueva por software y se sigue con el siguiente.
const uint8_t XSHUT[2] = {4, 5};
VL53L0X sensores[2];
void iniciarSensores() {
for (uint8_t i = 0; i < 2; i++) { // todos en reinicio: ninguno responde en 0x29
pinMode(XSHUT[i], OUTPUT);
digitalWrite(XSHUT[i], LOW);
}
for (uint8_t i = 0; i < 2; i++) {
pinMode(XSHUT[i], INPUT); // se libera el reinicio del sensor i (el módulo tiene pull-up)
delay(10);
sensores[i].setTimeout(500);
sensores[i].init();
sensores[i].setAddress(0x30 + i); // dirección propia; los demás siguen en reinicio
sensores[i].startContinuous(50);
}
}
La dirección se pierde al apagarse el sensor: el procedimiento se repite en cada arranque. Es una idea general: cuando varios dispositivos idénticos comparten un bus, se los habilita de a uno en el arranque para asignarles identidades distintas.
06 · Lo que la luz no perdona
Superficies, luz y geometría
Los sensores ópticos reciben una cantidad de luz que depende del objeto, y de esa cantidad depende la medición:
- Reflectividad. Un blanco devuelve la mayor parte de la luz (alrededor del 90 %); un gris, la mitad; un negro mate, solo el 5 a 10 %. En un ToF el alcance cae de forma notable con el color: un objeto negro puede medirse a la mitad de la distancia, o menos, que uno blanco. En un Sharp, la lectura cambia algo con el color (el fabricante indica una dispersión de pocos centímetros), pero mucho menos que en otros sensores ópticos.
- Superficies brillantes y espejos. Una superficie especular refleja el haz en una sola dirección: si no es perpendicular, el haz se aleja y no regresa. El vidrio transparente se atraviesa y mide lo que hay detrás.
- Luz ambiente. El sol y las lámparas incandescentes emiten mucho infrarrojo cercano que ocupa los detectores y reduce el alcance de un ToF a una fracción de su valor en interior. Al aire libre el VL53L0X pierde buena parte de su alcance.
- Cubierta del sensor. Si el sensor está detrás de una ventana, parte de la luz se refleja en ella y llega al detector como un objeto «a cero distancia» (diafonía, crosstalk). Los ToF incluyen una calibración para compensarlo, pero la ventana debe estar muy cerca del sensor, limpia y ser transparente al infrarrojo.
- Campo de visión. A 1 m, un cono de 25° cubre un círculo de unos 44 cm. Un objeto pequeño en un fondo más lejano puede promediarse con él y entregar una distancia intermedia que no corresponde a nada.
- Interferencia entre sensores. Dos ToF que apuntan al mismo lugar pueden interferirse; se los dispara por separado o se los orienta de modo que no se vean.
Frente a esto, el ultrasonido tiene las debilidades opuestas: el color y la transparencia no le importan, pero sí la blandura y la inclinación. En las aplicaciones difíciles se combinan los dos.
07 · Elegir
Comparación y elección
| Característica | HC-SR04 (ultrasonido) | Sharp GP2Y0A21 | VL53L0X (ToF láser) |
|---|---|---|---|
| Rango | 2 a 400 cm | 10 a 80 cm | 3 a 120 cm (hasta 200) |
| Haz | Ancho (≈ 15° o más) | Angosto | Angosto (≈ 25°) |
| Salida | Ancho de pulso | Tensión analógica no lineal | I2C, milímetros |
| Velocidad | ≥ 60 ms | ≈ 38 ms | 20 a 200 ms |
| Resolución | ≈ 0,3 cm | Empeora con d² (0,03 a 1,2 cm) | 1 mm |
| Depende del color | No | Poco | Mucho |
| Depende de la luz ambiente | No | Poco | Mucho |
| Depende de la temperatura | Sí (velocidad del sonido) | Poco | No |
| Problema típico | Superficies blandas e inclinadas; zona ciega de 2 cm | Ambigüedad bajo el mínimo; ruido a distancia | Fuera de rango (8190); luz solar; objetos oscuros |
| Costo | Muy bajo | Medio | Medio |
Criterios prácticos: HC-SR04 para alcances largos y objetos de color cualquiera en interiores; VL53L0X para distancias de pocos metros con alta resolución y un haz fino, en ambientes con luz controlada; Sharp cuando se quiere una respuesta analógica rápida a distancias cortas, a costa de linealizar y proteger el mínimo. Un robot serio suele combinar un ultrasónico (largo alcance, robusto al color) con ToF (detalle cercano).
08 · Analogía con programación
La curva del Sharp y los tiempos de la luz
Probemos tres piezas de lógica. Primero, el modelo ilustrativo del Sharp con su inversión, la ambigüedad bajo 10 cm y cómo crece el escalón de distancia con el cuadrado de la distancia. Segundo, los tiempos de la luz: cuánto tarda el pulso en ir y volver y qué resolución temporal hace falta para un milímetro. Tercero, la interpretación de los resultados posibles de un ToF (válido, fuera de rango y falla).
Python en tu navegador. Los bloques son editables: cambiá los valores y presioná «Ejecutar Python». La primera vez tarda unos segundos en cargar.
def sharp_v(d):
"""Modelo ilustrativo de un GP2Y0A21: V = 0,1 + 27,5 / (d + 0,42) a partir de 10 cm."""
if d >= 10:
return 0.1 + 27.5 / (d + 0.42)
return sharp_v(10) * d / 10 # bajo el mínimo la tensión baja en vez de subir
def sharp_d(v):
return 27.5 / (v - 0.1) - 0.42
print("real tensión cuentas calculada error")
for d in (5, 10, 15, 20, 40, 60, 80):
v = sharp_v(d)
cuentas = round(v / 5 * 1023)
calculada = sharp_d(cuentas * 5 / 1023)
print(f"{d:4d} {v:6.3f} {cuentas:7d} {calculada:9.1f} {calculada - d:+6.1f}")
print()
for d in (20, 40, 80):
escalon = (d + 0.42) ** 2 / 27.5 * 5 / 1023
print(f"resolución a {d:2d} cm: {escalon:.3f} cm por cuenta del ADC")
# ---- Tiempo de vuelo de la luz ----
C = 299_792_458
print()
for d in (0.1, 1.2, 2.0):
print(f"objeto a {d:3.1f} m: ida y vuelta en {2 * d / C * 1e9:6.3f} ns")
print(f"1 mm de distancia = {2e-3 / C * 1e12:.2f} ps de tiempo de vuelo")
def interpretar(mm, tiempo_agotado=False):
if tiempo_agotado:
return "FALLA: el sensor no responde"
if mm >= 8190:
return "sin objeto en el alcance"
return f"distancia válida: {mm} mm"
print()
for caso in ((350, False), (8190, False), (0, True)):
print(interpretar(*caso))
Resultado: el modelo se invierte bien de 10 a 80 cm (errores de 0,5 cm como máximo a 80 cm). Un objeto a 5 cm entrega 1,37 V y el programa calcula 21,3 cm: un error de +16 cm, el punto ciego engañoso. El escalón del ADC vale 0,07 cm a 20 cm, 0,29 cm a 40 cm y 1,15 cm a 80 cm. El pulso de luz tarda 8,0 ns en recorrer 1,2 m (ida y vuelta) y 1 mm equivale a 6,67 ps. Probá cambiar el 27.5 de la curva y mirá cómo se desplazan las distancias calculadas.
El modelo del Sharp es una aproximación; lo importante es la forma de las conclusiones: la resolución se degrada con la distancia y la curva es ambigua bajo el mínimo.
09 · Exploración interactiva
Un Sharp con su curva y un VL53L0X con su alcance
El primer instrumento simula el Sharp con el modelo de la sección 03: elegí la distancia y activá el ruido para ver la tensión, las cuentas, la distancia calculada y el error, incluida la ambigüedad bajo 10 cm. El segundo simula un VL53L0X: elegí el objeto (blanco, gris o negro), la luz ambiente y el perfil de medición, y mirá la lectura, su ruido y el alcance máximo. Los alcances y ruidos del segundo son un modelo ilustrativo, no datos del fabricante.
Instrumento 1: Sharp GP2Y0A21 (modelo ilustrativo)
Instrumento 2: VL53L0X (modelo ilustrativo)
Recorrido guiado
- Con el Sharp a 20 cm: 1,45 V, 296 cuentas, 20,0 cm calculados. La resolución local es de 0,07 cm por cuenta. Subí a 80 cm: 0,44 V y 1,15 cm por cuenta. La resolución se degrada con el cuadrado de la distancia.
- Activá el ruido de 20 mV y medí varias veces a 20 cm (error de pocos milímetros) y a 80 cm (error de varios centímetros). El mismo ruido eléctrico pesa mucho más lejos.
- Bajá la distancia a 5 cm: el programa calcula unos 21 cm y el estado avisa de que se está por debajo del mínimo. Es la lectura engañosa: un obstáculo inminente que parece lejano.
- Subí a 95 cm: la tensión llega casi al piso (0,4 V) y el programa lo trata como fuera de rango.
- En el instrumento 2, con un blanco a 500 mm, luz de interior y perfil por defecto: la lectura es de unos 500 mm, con ruido de pocos milímetros.
- Cambiá el objeto a negro mate y subí la distancia hasta que el sensor devuelva 8190: el alcance se reduce a menos de la mitad. Pasá a «Sol directo»: se reduce todavía más.
- Con el objeto negro a la distancia límite, cambiá al perfil «Largo alcance»: vuelve a medir, con más ruido. Con «Alta precisión» el ruido baja, pero tarda 200 ms por medición y el alcance es el normal.
- Llevá la distancia a 10 mm: aparece el estado «bajo el mínimo»; el sensor no mide con confianza por debajo de unos 30 mm.
Desafío: un robot en la puerta de un depósito
Un robot mide la distancia a una pared con un VL53L0X. Dentro del depósito (luz de interior, pared blanca) mide bien hasta más de un metro. Al salir al patio, con sol directo y una pared oscura, a 60 cm ya devuelve 8190 y el robot cree que no hay nada. ¿Qué cambio de programa evita un choque? Tratar 8190 como «sin dato» y no como «libre», frenar o reducir la velocidad cuando el dato falta durante varias lecturas y, si es posible, combinar con un ultrasónico que no depende de la luz ni del color. Un sensor que dice «no veo nada» no es lo mismo que uno que dice «no hay nada».
10 · Método de trabajo
Cómo elegir y usar un sensor óptico de distancia
- Definí el rango, la exactitud y la velocidad, y el tipo de objeto: tamaño, color, brillo.
- Evaluá el entorno de luz: interior, ventana, exterior. Si hay sol, un ToF es poco fiable.
- Elegí el sensor: Sharp para respuesta analógica rápida y corta; VL53L0X para milímetros a pocos metros; un ultrasónico si el color o la luz son problemas.
- Protegé el mínimo: en un Sharp, que ningún objeto pueda acercarse por debajo de la distancia mínima; en un ToF, respetá los 30 mm.
- Linealizá y calibrá con la curva medida de tu ejemplar (tema 5), no con una de otro.
- Filtrá con una mediana y usá histéresis en las decisiones por umbral.
- Distinguí siempre tres resultados: distancia válida, sin objeto en el alcance y falla del sensor.
- Probá con el peor objeto: el más oscuro, el más brillante, bajo la luz más fuerte que habrá en la instalación.
- Si usás varios ToF, asigná direcciones con XSHUT en cada arranque.
Si las lecturas se disparan al aire libre o con un objeto oscuro, sospechá de la reflectividad y de la luz ambiente; si un Sharp «dice lejos» cuando el objeto está cerca, de la zona bajo el mínimo.
11 · Comprensión
Confusiones frecuentes
«La salida del Sharp es proporcional a la distancia»
Es inversamente proporcional, aproximadamente a 1/(d + b). La curva no es una recta y la resolución empeora con la distancia.
«Un Sharp mide cualquier distancia dentro de su rango, incluso muy cerca»
Por debajo de la distancia mínima la tensión baja, y el objeto cercano parece estar lejos.
«8190 mm es la distancia al fondo de la habitación»
Es el valor de «sin blanco válido»: el sensor no recibió suficiente luz. Puede ser un objeto muy lejano, muy oscuro o bajo mucha luz ambiente.
«El ToF mide igual en cualquier ambiente»
La luz ambiente y la reflectividad del objeto reducen el alcance y aumentan el ruido. Los datos de la hoja valen para un blanco en interior.
«Con 1 mm de resolución, tengo 1 mm de exactitud»
La resolución es el escalón de la salida. La exactitud, del orden de ±3 % bajo buenas condiciones, es mucho peor: a 1 m son ±3 cm.
«Puedo conectar dos VL53L0X al mismo bus sin hacer nada»
Ambos responden en 0x29. Hay que asignar direcciones distintas con el pin XSHUT al arrancar.
12 · Práctica guiada
Predecí antes de comprobar
1. De la tensión a la distancia
Con el modelo d = 27,5/(V − 0,1) − 0,42, un Sharp entrega 1,45 V. ¿A qué distancia está el objeto?
Ver solución
d = 27,5 / (1,45 − 0,1) − 0,42 = 27,5 / 1,35 − 0,42 ≈ 19,95 cm, es decir, unos 20 cm.
2. Resolución al final del rango
¿Cuántos centímetros equivale un paso del ADC (4,89 mV) a 60 cm con el mismo modelo?
Ver solución
(d + 0,42)² / 27,5 × 0,00489 = (60,42)² / 27,5 × 0,00489 ≈ 0,65 cm por cuenta. A 20 cm era 0,07 cm: nueve veces peor.
3. La ambigüedad del mínimo
Un Sharp entrega 1,45 V, la misma tensión que a 20 cm. Con el modelo (por debajo de 10 cm, V = 2,74 × d / 10), ¿a qué otra distancia podría estar el objeto? ¿Cómo se evita la confusión?
Ver solución
d = 1,45 / 2,74 × 10 ≈ 5,3 cm. Se evita con el montaje: que ningún objeto pueda acercarse a menos de 10 cm (un tope), o combinando con un sensor adicional. El programa por sí solo no puede distinguir los dos casos con una lectura aislada.
4. Tiempos de la luz
¿Cuánto tarda el pulso de luz en ir y volver de un objeto a 1,2 m? ¿Qué resolución de tiempo se necesita para distinguir 1 mm?
Ver solución
t = 2 × 1,2 / 299 792 458 ≈ 8,0 ns. Para 1 mm: 2 × 0,001 / 299 792 458 ≈ 6,7 ps. Por eso el cronometraje lo hace el propio sensor y no el microcontrolador.
5. Dos sensores, una dirección
Dos VL53L0X comparten el bus I2C. Describí los pasos del arranque para asignarles las direcciones 0x30 y 0x31.
Ver solución
1) Poner los dos pines XSHUT en bajo (ambos en reinicio). 2) Liberar el XSHUT del primero, iniciarlo y cambiar su dirección a 0x30. 3) Liberar el XSHUT del segundo, iniciarlo y cambiar su dirección a 0x31 (o dejarlo en 0x29). Se repite en cada arranque, porque la dirección se pierde al apagar.
6. Elegir el sensor
Elegí Sharp, VL53L0X o HC-SR04 para: (a) un robot en exteriores que debe detectar paredes de cualquier color entre 20 y 300 cm; (b) medir la altura de hasta 40 cm de una pila de hojas blancas con ±2 mm, en interior; (c) detectar rápidamente (cada 40 ms) una mano a 10–30 cm con salida analógica.
Ver solución
(a) HC-SR04 (o ultrasónico industrial): el color y la luz solar no le afectan. (b) VL53L0X en perfil de alta precisión: milímetros, blanco, interior. (c) Sharp: salida analógica, 38 ms de actualización y rango corto; con un tope para que no se acerque a menos de 10 cm.
13 · Síntesis
Ideas para recordar
- La triangulación mide el ángulo de regreso de un haz infrarrojo; la posición del punto en el detector es x = f·B/d, inversamente proporcional a la distancia.
- La salida del Sharp es una hipérbola (V ≈ a/(d + b) + c); se linealiza con d = a/(V − c) − b y la curva real de cada ejemplar se mide.
- La resolución de un Sharp empeora con el cuadrado de la distancia: excelente cerca, mediocre al final del rango.
- Por debajo de la distancia mínima la tensión del Sharp baja: un objeto muy cercano parece lejano. Se evita con el montaje.
- Un Sharp se actualiza cada ≈ 38 ms, consume pulsos de corriente y exige desacople y filtrado.
- El tiempo de vuelo láser mide ida y vuelta de la luz: 8 ns a 1,2 m; 1 mm equivale a 6,7 ps. El cronometraje lo hace el sensor.
- El VL53L0X entrega milímetros por I2C, con perfiles que cambian tiempo, ruido y alcance; 8190 significa «sin objeto», no una distancia.
- El alcance de un ToF cae con el color oscuro y con la luz ambiente; el ultrasonido tiene las debilidades opuestas.
- Hay que distinguir siempre distancia válida, sin objeto y falla del sensor; varios VL53L0X se distinguen con XSHUT y direcciones nuevas en cada arranque.
¿Listo para el tema 19?
Antes de avanzar, calculá la distancia de un Sharp que entrega 0,78 V con el modelo del tema, explicá por qué un objeto a 5 cm puede parecer lejano y decidí cómo tratarías un resultado de 8190 mm de un VL53L0X. Si podés justificar las tres respuestas, tenés los criterios para medir distancias con luz.
En el próximo tema pasamos a la detección de presencia: los sensores PIR y de microondas, con sus tiempos de retardo y sus falsos positivos.