En este tutorial aprenderás a usar el sensor de distancia láser TFmini Plus con un Arduino para medir distancias.
El TFmini Plus es un pequeño sensor LiDAR/de proximidad que puede medir distancias de hasta 12 metros. Utiliza luz láser infrarroja y el principio de Tiempo de Vuelo (ToF). Midiendo el tiempo que tarda la luz en reflejarse en un objeto, puede calcular distancias con alta precisión y rapidez.
En esta guía cubriremos la configuración, el cableado y la programación necesarios para poner en marcha tu TFmini Plus con Arduino.
Piezas necesarias
Necesitarás un sensor TFmini Plus (listado abajo). Para el microcontrolador, usé un Arduino Uno para este proyecto, pero cualquier otro Arduino también funcionará. Además, usaremos un OLED para mostrar las distancias y otra información que devuelve el TFmini Plus en una pequeña pantalla.

Sensor de distancia TFmini Plus

Arduino Uno

Cable USB para Arduino UNO

Juego de cables Dupont

Protoboard

Pantalla OLED
Makerguides is a participant in affiliate advertising programs designed to provide a means for sites to earn advertising fees by linking to Amazon, AliExpress, Elecrow, and other sites. As an Affiliate we may earn from qualifying purchases.
Características del TFmini Plus
El TFmini Plus es un sensor de distancia láser infrarrojo que usa el principio ToF (tiempo de vuelo) para medir distancias. El sensor emite pulsos de luz infrarroja periódicamente, que se reflejan al contactar con un objeto. El tiempo de vuelo se mide calculando la diferencia de fase de ida y vuelta Δφ:

El TFmini Plus puede medir distancias desde 0.1 hasta 12 metros con una precisión de ±5 cm para 0.1-6 m y ±1% para el rango de 6-12 m. La zona ciega del sensor es de 10 cm. La resolución es de 5 mm y la velocidad de medición (frecuencia de cuadros) es ajustable entre 1 y 1000 Hz.
El rango de detección del TFmini Plus también depende de la reflectividad y el tamaño del objeto a detectar. El siguiente diagrama ilustra esto:

① Zona ciega de detección de 0-10 cm, dentro de la cual los datos de salida no son fiables.
② Rango operativo para detectar un objetivo negro con 10% de reflectividad, 0.1-5 m.
③ Rango operativo para detectar un objetivo blanco con 90% de reflectividad, 0.1-12 m.
Curiosamente, cuanto más reflectante y más grande es el objeto, mayor es el rango en el que puede ser detectado. Para más detalles consulta la hoja de datos y el manual del producto del TFmini Plus enlazados abajo:
Pinout del TFmini Plus
El TFmini Plus puede comunicarse vía UART, I2C o IO, dependiendo de la configuración del software. La siguiente imagen muestra el pinout del TFmini Plus:

El TFmini Plus tiene clasificación IP65 y por ello usa un cable sellado con conector GH1.25-4P al final. Por suerte, normalmente viene con un adaptador de cable Dupont que permite conectarlo fácilmente a un Arduino o a una protoboard. Aquí tienes una tabla con los pines del conector, sus colores de cable y funciones:
| Número de Pin | Color del Cable | Función |
|---|---|---|
| 1 | Rojo | +5V |
| 2 | Blanco | RX/SDA |
| 3 | Verde/Azul | TX/SCL/IO |
| 4 | Negro | Masa |
El pin 1 es masa (GND) y el pin 2 es la alimentación de 5V±0.5V. La corriente media es ≤110mA y la corriente pico puede llegar hasta 500mA. Los pines 3 y 4 funcionan como RX y TX para UART, o como SDA y SCL para I2C. Nota que el cable TX/SCL puede ser verde o azul. Mi modelo del TFmini Plus tiene el cable verde para TX/SCL.
TFmini-S vs TFmini Plus
Existen TFmini, un TFmini-S y el TFmini Plus. Puede ser un poco confuso. El TFmini ya no se produce y el TFmini-S es una versión mejorada del TFmini. El TFmini Plus es una mejora adicional, con menor consumo, mejor carcasa y mejor rendimiento bajo luz ambiental fuerte (por ejemplo, al aire libre). La siguiente tabla compara las características principales del TFmini-S y el TFmini Plus:

En este tutorial usaremos el TFmini Plus. Pero también podrías usar el TFmini-S, ya que el software y el cableado son esencialmente idénticos.
Conectando el TFmini Plus al Arduino
Vamos a usar la interfaz UART del TFmini Plus. Pero primero conectemos la alimentación.
Conecta el cable negro (pin 4) del TFmini Plus al GND del Arduino. Luego conecta el cable rojo (pin 1) del TFmini Plus a la salida de 5V del Arduino.
Para UART, conecta el cable blanco (TX, pin 2) del TFmini Plus al pin 3 del Arduino. Finalmente, conecta el cable verde (RX, pin 3) del TFmini Plus al pin 2 del Arduino. Mira el diagrama completo de cableado abajo:

Ten en cuenta que los pines TX y RX del TFmini y los pines TX y RX usados por el Arduino están invertidos porque así debe ser el cableado para la comunicación serial. No te confundas con esto.

En la siguiente sección escribiremos un código simple para probar el sensor.
Código para medir distancias con TFmini Plus
Para medir distancias con el TFmini Plus, es mejor usar una librería. Yo usé la TFMPlus library by Bud Ryerson, que funciona para el TFmini Plus y el TFmini-S. Para instalarla, abre el Library Manager, busca «tfmini», encuentra la librería TFMPlus de Bud Ryerson y presiona el botón «INSTALL» para instalarla.

Con la librería instalada, probemos el sensor. El siguiente código lee las distancias medidas por el sensor TFmini Plus y las imprime en el monitor serial.
#include "TFMPlus.h"
#include "SoftwareSerial.h"
TFMPlus tfmini;
SoftwareSerial TFSerial(2, 3);
void setup() {
Serial.begin(9600);
TFSerial.begin(115200);
tfmini.begin(&TFSerial);
}
void loop() {
int16_t dist = 0;
int16_t strength = 0;
int16_t temp = 0;
if (tfmini.getData(dist, strength, temp)) {
Serial.print("Distance ");
Serial.print(dist);
Serial.println(" cm");
delay(200);
}
}
Vamos a desglosar el código para entender sus componentes en detalle.
Inclusión de librerías
Comenzamos incluyendo las librerías necesarias para nuestro proyecto. La librería TFMPlus.h se usa para comunicarse con el sensor TFmini Plus, mientras que la librería SoftwareSerial.h permite crear una comunicación serial en pines digitales distintos a los pines hardware por defecto.
#include "TFMPlus.h" #include "SoftwareSerial.h"
Creación de objetos
Luego, creamos instancias de las clases necesarias. El objeto TFMPlus tfmini se usará para interactuar con el sensor TFmini Plus. También creamos un objeto SoftwareSerial llamado TFSerial que se comunicará con el sensor usando los pines digitales 2 (RX) y 3 (TX).
TFMPlus tfmini; SoftwareSerial TFSerial(2, 3);
Función setup
En la función setup() inicializamos la comunicación serial. El comando Serial.begin(9600) configura el puerto serial por defecto a 9600 bps para imprimir en el Monitor Serial. El comando TFSerial.begin(115200) inicializa el puerto serial por software a una velocidad mayor de 115200 bps, requerida por el sensor TFmini Plus. Finalmente, llamamos a tfmini.begin(&TFSerial) para inicializar el sensor con el puerto serial por software.
void setup() {
Serial.begin(9600);
TFSerial.begin(115200);
tfmini.begin(&TFSerial);
}
Función loop
En la función loop() declaramos tres variables enteras: dist, strength y temp. Estas almacenarán la distancia medida, la intensidad de la señal y la temperatura del sensor, respectivamente.
Luego comprobamos si el sensor recupera datos con éxito usando el método tfmini.getData(dist, strength, temp). Si los datos están disponibles, imprimimos la distancia en el Monitor Serial usando Serial.print(). La distancia se muestra en centímetros. Después de imprimir los datos, introducimos un retardo de 200 milisegundos antes de la siguiente lectura.
void loop() {
int16_t dist = 0;
int16_t strength = 0;
int16_t temp = 0;
if (tfmini.getData(dist, strength, temp)) {
Serial.print("Distance ");
Serial.print(dist);
Serial.println(" cm");
delay(200);
}
}
En este ejemplo solo imprimimos la distancia, pero también podrías imprimir la intensidad de la señal y la temperatura, y lo haremos cuando conectemos el OLED. Por ahora, solo imprimimos la distancia y deberías verla en centímetros en el Monitor Serial:

En la siguiente sección añadiremos un OLED a nuestro circuito.
Añadiendo un OLED para mostrar los datos de distancia del TFmini Plus
Añadir un OLED es sencillo. Simplemente conecta SDA y SCL del OLED a los pines correspondientes del Arduino. En cuanto a la alimentación: como el OLED puede funcionar a 5V, podemos compartir las líneas de alimentación. Conecta VCC a 5V y GND a GND. La imagen abajo muestra el cableado completo:

Ten en cuenta que el TFmini Plus no funciona con 3.3V.
Código para mostrar distancias medidas por TFmini Plus en OLED
El siguiente código lee las mediciones de distancia, intensidad y temperatura del sensor TFmini Plus y las muestra en el OLED. Echa un vistazo rápido al código completo primero, luego discutiremos sus detalles.
#include "TFMPlus.h"
#include "SoftwareSerial.h"
#include "Adafruit_SSD1306.h"
TFMPlus tfmini;
SoftwareSerial TFSerial(2, 3);
Adafruit_SSD1306 oled(128, 64, &Wire, -1);
void oled_init() {
oled.begin(SSD1306_SWITCHCAPVCC, 0x3C);
oled.setTextColor(WHITE);
}
void display() {
static char text[30];
static int16_t dist, strength, temp;
if (tfmini.getData(dist, strength, temp)) {
oled.clearDisplay();
sprintf(text, " %d cm ", dist);
oled.setTextSize(2);
oled.setCursor(20, 15);
oled.print(text);
sprintf(text, " %d ", strength);
oled.setTextSize(1);
oled.setCursor(50, 40);
oled.print(text);
sprintf(text, " %d C ", temp);
oled.setTextSize(1);
oled.setCursor(50, 50);
oled.print(text);
oled.display();
}
}
void setup() {
TFSerial.begin(115200);
tfmini.begin(&TFSerial);
oled_init();
}
void loop() {
display();
delay(20);
}
Librerías e inicialización del display
Comenzamos incluyendo la librería TFMPlus.h para comunicarnos con el sensor TFmini Plus. La librería SoftwareSerial.h se usa para crear la comunicación serial y la Adafruit_SSD1306 Library es para el display OLED.
Luego creamos el objeto sensor tfmini, el objeto TFSerial y el objeto oled para el display:
#include "TFMPlus.h" #include "SoftwareSerial.h" #include "Adafruit_SSD1306.h" TFMPlus tfmini; SoftwareSerial TFSerial(2, 3); Adafruit_SSD1306 oled(128, 64, &Wire, -1);
Si aún no has instalado la Adafruit_SSD1306 Library, tendrás que hacerlo. Solo instálala vía el Library Manager como siempre:

Función oled_init
La función oled_init() inicializa el display, lo limpia, establece el tamaño y color del texto.
void oled_init() {
oled.begin(SSD1306_SWITCHCAPVCC, 0x3C);
oled.clearDisplay();
oled.setTextSize(2);
oled.setTextColor(WHITE);
}
Ten en cuenta que la dirección I2C para el display OLED está configurada a 0x3C en oled.begin(). La mayoría de estos pequeños OLED usan esta dirección (or 0x27) pero la tuya podría ser diferente. Si no ves nada en el OLED, probablemente tenga una dirección I2C distinta y tendrás que cambiarla.
Si no sabes la dirección I2C, echa un vistazo al tutorial How to Interface the SSD1306 I2C OLED Graphic Display With Arduino para encontrarla. También el tutorial Use SSD1306 I2C OLED Display With Arduino te enseñará más sobre cómo usar un OLED.
Función display
La función display() llama a tfmini.getData para obtener los valores medidos de distancia, intensidad y temperatura del sensor TFmini Plus. Luego limpia el display e imprime los diferentes valores con distintos tamaños de fuente. La función sprintf() se usa para convertir los valores en texto formateado.
void display() {
static char text[30];
static int16_t dist, strength, temp;
if (tfmini.getData(dist, strength, temp)) {
oled.clearDisplay();
sprintf(text, " %d cm ", dist);
oled.setTextSize(2);
oled.setCursor(20, 15);
oled.print(text);
sprintf(text, " %d ", strength);
oled.setTextSize(1);
oled.setCursor(50, 40);
oled.print(text);
sprintf(text, " %d C ", temp);
oled.setTextSize(1);
oled.setCursor(50, 50);
oled.print(text);
oled.display();
}
}
Si colocas un objeto frente al sensor, deberías ver la distancia, intensidad y temperatura mostradas en el OLED:

La distancia se muestra en centímetros. Si no se detecta ningún objeto, se mostrará un valor de 0.
La intensidad de la señal (0-65535) indica cuánto de la señal infrarroja se refleja en el objeto detectado. Cuando la intensidad es menor a 100 o igual a 65535, la detección no es fiable y el TFmini Plus establecerá la distancia a 0.
Finalmente, se muestra la temperatura interna del chip del TFmini Plus en grados centígrados. Es normal que el sensor se caliente bastante después de un rato (70 °C).
Función setup
En la función setup() primero llamamos a TFSerial.begin() para inicializar la comunicación serial UART, luego a tfmini.begin() para inicializar el sensor, y finalmente a oled_init() para inicializar el OLED.
void setup() {
TFSerial.begin(115200);
tfmini.begin(&TFSerial);
oled_init();
}
Función loop
La función loop() simplemente llama a la función display() cada 20 ms.
void loop() {
display();
delay(20);
}
Y eso es todo. Con este código y el TFmini Plus puedes medir distancias de hasta 12 metros.
Conclusiones
En este tutorial aprendiste a usar el sensor de distancia TFmini Plus con un Arduino para medir distancias y mostrarlas en un OLED.
El TFmini-Plus es muy similar al TFmini-S. Ambos funcionan a 5V, pueden medir distancias de hasta 12 metros y se controlan con el mismo software. Sin embargo, el TFmini-Plus viene en una carcasa IP65, funciona mejor al aire libre y por ello es más caro. Si no necesitas el rango completo, una alternativa más económica a ambos sensores es el TF-Luna, que es más pequeño y tiene un rango de 8 metros.
Si necesitas resolución en milímetros, echa un vistazo al VL53L0X, al VL53L1X o al TOF10120. También tienen la ventaja de poder funcionar a 3.3V. Sin embargo, sus rangos son mucho más cortos.
Otros sensores comunes de distancia infrarrojos como el GP2Y0A710K0F o el GP2Y0A21YK0F son similares en tamaño pero usan triangulación para determinar la distancia basándose en el ángulo de la luz IR reflejada. Son aún más baratos pero también tienen un rango aún más corto.
Si tienes alguna pregunta, no dudes en dejarla en la sección de comentarios.
¡Feliz bricolaje ; )

