Dans ce tutoriel, vous apprendrez à utiliser le capteur de distance laser TFmini Plus avec un Arduino pour mesurer des distances.
Le TFmini Plus est un petit capteur LiDAR/de proximité capable de mesurer des distances jusqu’à 12 mètres. Il utilise une lumière laser infrarouge et le principe du temps de vol (ToF). En mesurant le temps que met la lumière à être réfléchie par un objet, il peut calculer des distances avec une grande précision et rapidité.
Dans ce guide, nous verrons la configuration, le câblage et le codage nécessaires pour faire fonctionner votre TFmini Plus avec Arduino.
Pièces requises
Vous aurez besoin d’un capteur TFmini Plus (listé ci-dessous). Pour le microcontrôleur, j’ai utilisé un Arduino Uno pour ce projet, mais tout autre Arduino fonctionnera également. Nous utiliserons aussi un écran OLED pour afficher les distances et autres informations renvoyées par le TFmini Plus.

Capteur de distance TFmini Plus

Arduino Uno

Câble USB pour Arduino UNO

Jeu de fils Dupont

Plaque d’essai (breadboard)

Écran 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.
Caractéristiques du TFmini Plus
Le TFmini Plus est un capteur de distance laser infrarouge qui utilise le principe ToF (temps de vol) pour mesurer les distances. Le capteur émet périodiquement des impulsions de lumière infrarouge, qui sont réfléchies lorsqu’elles rencontrent un objet. Le temps de vol est mesuré en calculant la différence de phase aller-retour Δφ :

Le TFmini Plus peut mesurer des distances de 0,1 à 12 mètres avec une précision de ±5 cm pour 0,1-6 m et ±1 % pour la plage 6-12 m. La zone aveugle du capteur est de 10 cm. La résolution est de 5 mm et la vitesse de mesure (fréquence d’images) est réglable entre 1 et 1000 Hz.
La portée de détection du TFmini Plus dépend aussi de la réflectivité et de la taille de l’objet détecté. Le schéma suivant illustre cela :

① Zone aveugle de détection de 0-10 cm, dans laquelle les données de sortie ne sont pas fiables.
② Plage de fonctionnement pour détecter une cible noire avec 10 % de réflectivité, 0,1-5 m.
③ Plage de fonctionnement pour détecter une cible blanche avec 90 % de réflectivité, 0,1-12 m.
Notez qu’étonnamment, plus l’objet est réfléchissant et grand, plus la portée de détection est étendue. Pour plus de détails, consultez la fiche technique et le manuel du produit TFmini Plus ci-dessous :
Brochage du TFmini Plus
Le TFmini Plus peut communiquer via UART, I2C ou IO, selon la configuration logicielle. L’image suivante montre le brochage du TFmini Plus :

Le TFmini Plus est certifié IP65 et utilise donc un câble étanche avec un connecteur GH1.25-4P à son extrémité. Heureusement, il est généralement livré avec un adaptateur câble Dupont qui permet de le connecter facilement à un Arduino ou une breadboard. Voici un tableau avec les broches du connecteur, leurs couleurs de fils et leurs fonctions :
| Numéro de broche | Couleur du fil | Fonction |
|---|---|---|
| 1 | Rouge | +5V |
| 2 | Blanc | RX/SDA |
| 3 | Vert/Bleu | TX/SCL/IO |
| 4 | Noir | Masse |
La broche 1 est la masse (GND) et la broche 2 est l’alimentation 5V±0,5V. Le courant moyen est ≤110mA et le courant de pointe peut atteindre 500mA. Les broches 3 et 4 fonctionnent soit comme RX et TX pour UART, soit comme SDA et SCL pour I2C. Notez que le fil TX/SCL peut être vert ou bleu. Mon modèle de TFmini Plus a un fil vert pour TX/SCL.
TFmini-S vs TFmini Plus
Il existe un TFmini, un TFmini-S et le TFmini Plus. Cela peut prêter à confusion. Le TFmini n’est plus produit, le TFmini-S est une version améliorée du TFmini. Le TFmini Plus est une amélioration supplémentaire, avec une consommation d’énergie plus faible, un boîtier amélioré et de meilleures performances en lumière ambiante forte (par exemple en extérieur). Le tableau suivant compare les principales caractéristiques du TFmini-S et du TFmini Plus:

Dans ce tutoriel, nous allons utiliser le TFmini Plus. Mais vous pouvez aussi utiliser le TFmini-S, car le logiciel et le câblage sont essentiellement identiques.
Connexion du TFmini Plus à l’Arduino
Nous allons utiliser l’interface UART du TFmini Plus. Mais d’abord, connectons l’alimentation.
Connectez le fil noir (broche 4) du TFmini Plus au GND de l’Arduino. Puis, connectez le fil rouge (broche 1 du TFmini Plus) à la sortie 5V de l’Arduino.
Pour l’UART, connectez le fil blanc (TX, broche 2) du TFmini Plus à la broche 3 de l’Arduino. Enfin, connectez le fil vert (RX, broche 3) du TFmini Plus à la broche 2 de l’Arduino. Voir le schéma de câblage complet ci-dessous :

Notez que les broches TX et RX du TFmini et celles utilisées par l’Arduino sont inversées car c’est ainsi que la communication série doit être câblée. Ne vous laissez pas confondre.

Dans la section suivante, nous allons écrire un code simple pour tester le capteur.
Code pour mesurer les distances avec le TFmini Plus
Pour mesurer les distances avec le TFmini Plus, il est préférable d’utiliser une bibliothèque. J’ai utilisé la TFMPlus library by Bud Ryerson, qui fonctionne pour le TFmini Plus et le TFmini-S. Pour l’installer, ouvrez le Library Manager, cherchez « tfmini », trouvez la bibliothèque TFMPlus de Bud Ryerson et installez-la en appuyant sur le bouton « INSTALL ».

Une fois la bibliothèque installée, testons le capteur. Le code suivant lit les distances mesurées par le capteur TFmini Plus et les affiche dans le moniteur série.
#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);
}
}
Décomposons le code pour comprendre ses composants en détail.
Inclusions de bibliothèques
Nous commençons par inclure les bibliothèques nécessaires à notre projet. La bibliothèque TFMPlus.h est utilisée pour communiquer avec le capteur TFmini Plus, tandis que la bibliothèque SoftwareSerial.h permet de créer une communication série sur d’autres broches numériques que celles matérielles par défaut.
#include "TFMPlus.h" #include "SoftwareSerial.h"
Création d’objets
Ensuite, nous créons des instances des classes requises. L’objet TFMPlus tfmini sera utilisé pour interagir avec le capteur TFmini Plus. Nous créons aussi un objet SoftwareSerial nommé TFSerial qui communiquera avec le capteur via les broches numériques 2 (RX) et 3 (TX).
TFMPlus tfmini; SoftwareSerial TFSerial(2, 3);
Fonction setup
Dans la fonction setup(), nous initialisons la communication série. La commande Serial.begin(9600) configure le port série par défaut à 9600 bps pour l’affichage dans le moniteur série. La commande TFSerial.begin(115200) initialise le port série logiciel à un débit plus élevé de 115200 bps, requis par le capteur TFmini Plus. Enfin, nous appelons tfmini.begin(&TFSerial) pour initialiser le capteur avec le port série logiciel.
void setup() {
Serial.begin(9600);
TFSerial.begin(115200);
tfmini.begin(&TFSerial);
}
Fonction loop
Dans la fonction loop(), nous déclarons trois variables entières : dist, strength, et temp. Elles stockeront respectivement la distance mesurée, la force du signal et la température du capteur.
Nous vérifions ensuite si le capteur récupère les données avec succès via la méthode tfmini.getData(dist, strength, temp). Si les données sont disponibles, nous affichons la distance dans le moniteur série avec Serial.print(). La distance est affichée en centimètres. Après l’affichage, nous introduisons un délai de 200 millisecondes avant la prochaine lecture.
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);
}
}
Dans cet exemple, nous affichons uniquement la distance, mais vous pouvez aussi afficher la force du signal et la température, ce que nous ferons en connectant l’OLED. Pour l’instant, nous affichons juste la distance, que vous devriez voir en centimètres dans le moniteur série :

Dans la section suivante, nous allons ajouter un écran OLED à notre circuit.
Ajouter un OLED pour afficher les données de distance du TFmini Plus
Ajouter un OLED est simple. Il suffit de connecter SDA et SCL de l’OLED aux broches correspondantes de l’Arduino. Pour l’alimentation : comme l’OLED peut fonctionner en 5V, on peut partager les lignes d’alimentation. Connectez VCC à 5V et GND à GND. L’image ci-dessous montre le câblage complet :

Notez que le TFmini Plus ne fonctionne pas en 3,3V.
Code pour afficher les distances mesurées par le TFmini Plus sur OLED
Le code suivant lit les mesures de distance, de force et de température du capteur TFmini Plus et les affiche sur l’OLED. Jetez d’abord un œil au code complet, puis nous en discuterons les détails.
#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);
}
Bibliothèques et initialisation de l’affichage
Nous commençons par inclure la bibliothèque TFMPlus.h pour communiquer avec le capteur TFmini Plus. La bibliothèque SoftwareSerial.h est utilisée pour créer la communication série et la Adafruit_SSD1306 Library sert pour l’affichage OLED.
Nous créons ensuite l’objet capteur tfmini, l’objet TFSerial, et l’objet oled pour l’affichage :
#include "TFMPlus.h" #include "SoftwareSerial.h" #include "Adafruit_SSD1306.h" TFMPlus tfmini; SoftwareSerial TFSerial(2, 3); Adafruit_SSD1306 oled(128, 64, &Wire, -1);
Si vous n’avez pas encore installé la bibliothèque Adafruit_SSD1306 Library, vous devrez le faire. Installez-la via le Library Manager comme d’habitude :

Fonction oled_init
La fonction oled_init() initialise l’affichage, le nettoie, définit la taille du texte et la couleur.
void oled_init() {
oled.begin(SSD1306_SWITCHCAPVCC, 0x3C);
oled.clearDisplay();
oled.setTextSize(2);
oled.setTextColor(WHITE);
}
Notez que l’adresse I2C de l’écran OLED est réglée sur 0x3C dans oled.begin(). La plupart de ces petits OLED utilisent cette adresse (or 0x27) mais la vôtre peut être différente. Si vous ne voyez rien sur l’OLED, c’est probablement que l’adresse I2C est différente et vous devrez la modifier.
Si vous ne connaissez pas l’adresse I2C, consultez le tutoriel How to Interface the SSD1306 I2C OLED Graphic Display With Arduino pour la trouver. Le tutoriel Use SSD1306 I2C OLED Display With Arduino vous expliquera aussi comment utiliser un OLED.
Fonction display
La fonction display() appelle tfmini.getData pour obtenir les valeurs mesurées de distance, force et température du capteur TFmini Plus. Elle nettoie ensuite l’affichage et imprime les différentes valeurs avec des tailles de police différentes. La fonction sprintf() est utilisée pour formater les valeurs en texte.
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 vous placez un objet devant le capteur, vous devriez voir la distance, la force et la température affichées sur l’OLED :

La distance est affichée en centimètres. Si aucun objet n’est détecté, la valeur affichée sera 0.
La force du signal (0-65535) indique la quantité de signal infrarouge réfléchie par l’objet détecté. Lorsque la force du signal est inférieure à 100 ou égale à 65535, la détection est peu fiable, et le TFmini Plus met la distance à 0.
Enfin, la température interne de la puce du TFmini Plus est affichée en degrés Celsius. Il est normal que le capteur chauffe assez après un certain temps (70°C).
Fonction setup
Dans la fonction setup(), nous appelons d’abord TFSerial.begin() pour initialiser la communication UART série, puis tfmini.begin() pour initialiser le capteur, et enfin oled_init() pour initialiser l’OLED.
void setup() {
TFSerial.begin(115200);
tfmini.begin(&TFSerial);
oled_init();
}
Fonction loop
La fonction loop() appelle simplement la fonction display() toutes les 20 ms.
void loop() {
display();
delay(20);
}
Et voilà. Avec ce code et le TFmini Plus, vous pouvez mesurer des distances jusqu’à 12 mètres.
Conclusions
Dans ce tutoriel, vous avez appris à utiliser le capteur de distance TFmini Plus avec un Arduino pour mesurer des distances et les afficher sur un OLED.
Le TFmini-Plus est très similaire au TFmini-S. Les deux fonctionnent en 5V, peuvent mesurer des distances jusqu’à 12 mètres, et sont contrôlables par le même logiciel. Cependant, le TFmini-Plus est dans un boîtier IP65, fonctionne mieux en extérieur et est donc plus cher. Si vous n’avez pas besoin de toute la portée, une alternative moins chère aux deux capteurs est le TF-Luna, qui est plus petit et a une portée de 8 mètres.
Si vous avez besoin d’une résolution au millimètre, regardez le VL53L0X, le VL53L1X, ou le TOF10120. Ils ont aussi l’avantage de pouvoir fonctionner en 3,3V. Cependant, leurs portées sont beaucoup plus courtes.
D’autres capteurs de distance infrarouge courants comme le GP2Y0A710K0F ou le GP2Y0A21YK0F sont de taille similaire mais utilisent la triangulation pour déterminer la distance en fonction de l’angle de la lumière IR réfléchie. Ils sont encore moins chers mais ont une portée encore plus courte.
Si vous avez des questions, n’hésitez pas à les poser dans la section commentaires.
Bon bricolage ; )

