El primer reto con el que nos encontramos es la comunicación con el propio sensor, que ya viene configurado de fábrica para proporcionar la medida por los pines de comunicación serie (TX y RX, cables amarillo y blanco respectivamente en mi modelo). Esta comunicación puede realizarse utilizando un escudo FTDI y un programa como CoolTerm, lo hice bajo Windows en este caso, pero se podría hacer en Linux. Recordar conectar la salida RX del TOF10120 con la entrada RX del módulo FDTI, lo mismo para la salida TX…
Con CoolTerm se establece la comunicación serie con el puerto deseado y, desde el principio debería mostrar continuamente la medida de la distancia en pantalla. Pero esto es usando comunicación serie y con el módulo puesto en modo automático… Nosotros deseamos medir solo algunas veces y no usando protocolo serie, sino I2C.
Hay varios comandos útiles que puedes extraerse de la hoja de datos, por ejemplo:
- s2-1000# : ajusta el tiempo de muestreo a 1000ms y no a los 100ms que estaban por defecto y que eran muy rápidos (más consumo).
- s4-500# : ajusta la máxima distancia medible a 500mm (50cm). Muy útil para restringir el rango de medidas fiables.
- s5-1# : ajusta el modo de funcionamiento a pasivo, en lugar de activo. Fundamental para nuestro uso vía protocolo I2C y para disminuir el consumo.
- s7-3# : cambia la dirección I2C del dispositivo a la 0x03. Necesario si se desean usar varios módulos iguales en los mismos puertos I2C.
Estos comandos, y otros interesantes se envían desde CoolTerm a través de Connection -> Send String.
Una vez configurado el dispositivo con la dirección I2C deseada, puede utilizarse un código similar al del ejemplo de github. para conseguir medidas con precisión de milímetros y a bastante alta frecuencia (varias por segundo, no lo he medido con exactitud).
Para el código del ejemplo, ya se usan los dos cables para la comunicación I2C (SDA y SCL, colores azul y verde en nuestro modelo) en lugar de los cables para la comunicación serie, que van conectados a los pines dedicados a la comunicación I2C de la placa que desarrollo que se use (A4 y A5 para Arduino Uno, GPIO21 y GPIO22 para ESP32).