Skip to Content

Capteur de distance TFmini-S avec Arduino

Capteur de distance TFmini-S avec Arduino

Dans ce tutoriel, vous apprendrez à utiliser le capteur de distance laser TFmini-S avec un Arduino pour mesurer des distances.

Le TFmini-S 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-S avec Arduino.

Pièces requises

Vous aurez besoin d’un capteur TFmini-S (listé ci-dessous). Pour le microcontrôleur, j’ai utilisé un Arduino Uno pour ce projet, mais tout autre Arduino fonctionnera aussi. Nous utiliserons également un écran OLED pour afficher les distances mesurées par le TFmini-S.

Capteur de distance TFmini-S

Arduino

Arduino Uno

USB Data Sync cable Arduino

Câble USB pour Arduino UNO

Dupont wire set

Jeu de fils Dupont

Half_breadboard56a

Plaque d’essai (breadboard)

OLED display

É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-S

Le TFmini-S 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 lumineuses infrarouges, 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 Δφ :

ToF Principle
Principe ToF (source)

Le TFmini-S peut mesurer des distances de 0,1 à 12 mètres avec une précision de ±6 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 1 cm et la vitesse de mesure (fréquence d’images) est réglable entre 1 et 1000 Hz.

La portée et la précision dépendent de la réflectivité de l’objet et des conditions lumineuses. En général, la portée en extérieur est beaucoup plus courte qu’en intérieur. Pour plus de détails, consultez le manuel produit et la fiche technique du TFmini-S ci-dessous :

Brochage du TFmini-S

Le TFmini-S peut communiquer via UART ou I2C, selon la configuration logicielle. Nous allons utiliser le capteur avec l’UART. L’image suivante montre le brochage du TFmini-S avec son interface UART/I2C et les broches d’alimentation.

Pinout of TFmini-S
Brochage du TFmini-S

Les broches 3 et 4 fonctionnent soit comme RX et TX pour l’UART, soit comme SDA et SCL pour l’I2C. La broche 1 est la masse (GND) et la broche 2 est l’alimentation 5V±0,1V. Le courant moyen est ≤140mA avec un pic à 200mA.

TFmini-S vs TFmini

Pour info : Le TFmini-S est une version améliorée du TFmini. Ils se ressemblent beaucoup mais leurs performances diffèrent. Voir la comparaison ci-dessous :

Comparison TFmini vs TFmini-S

Si vous achetez un TFmini, assurez-vous qu’il s’agit du TFmini-S et non de l’ancienne version TFmini, car le TFMini-Plus Library que nous allons utiliser n’est pas compatible avec le TFmini (mais avec le TFmini-S et le TFmini Plus).

Connexion du TFmini-S à l’Arduino

Comme mentionné, nous allons utiliser l’interface UART du TFmini-S. Mais d’abord, connectons l’alimentation.

Connectez le fil noir (broche 1) du TFmini-S au GND de l’Arduino. Puis, connectez le fil rouge (broche 2) du TFmini-S à la sortie 5V de l’Arduino.

Pour l’UART, connectez le fil blanc (TX, broche 3) du TFmini-S à la broche 3 de l’Arduino. Enfin, connectez le fil vert (RX, broche 4) du TFmini-S à la broche 2 de l’Arduino. Voir le schéma de câblage complet ci-dessous :

Connecting TFmini-S to Arduino
Connexion TFmini-S à Arduino

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.

TX and RX wiring
Câblage TX et RX

Dans la section suivante, nous allons écrire un code simple pour tester le capteur.

Code pour mesurer les distances avec le TFmini-S

Pour mesurer les distances avec le TFmini-S, il est préférable d’utiliser une bibliothèque. J’en ai essayé plusieurs et j’ai aimé la TFMPlus library by Bud Ryerson. Malgré son nom, cette bibliothèque fonctionne avec le TFmini-S et le TFmini-Plus. Pour l’installer, ouvrez le Library Manager, cherchez « tfmini », trouvez la bibliothèque TFMPlus de Bud Ryerson et installez-la en cliquant sur le bouton « INSTALL ».

Install TFMPlus library
Installer TFMPlus library

Avec la bibliothèque installée, testons le capteur. Le code suivant lit les distances mesurées par le TFmini-S 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 sert à communiquer avec le capteur TFmini-S, 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 nommé tfmini sera utilisé pour interagir avec le capteur TFmini-S. 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-S. 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 mesure de distance, 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. La force du signal indique la quantité de lumière infrarouge réfléchie par l’objet détecté, et la température est la température interne du capteur, utilisée pour la compensation thermique.

Si vous téléversez et lancez le code, vous devriez voir les distances mesurées en centimètres s’afficher dans le moniteur série :

Distances measured with TFmini-S printed on Serial Monitor
Distances mesurées avec le TFmini-S affichées dans le moniteur série

Dans la section suivante, nous allons ajouter un écran OLED à notre circuit pour afficher les distances dessus, au lieu de les imprimer dans le moniteur série.

Ajouter un OLED pour afficher les données de distance du TFmini-S

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, nous pouvons partager les lignes d’alimentation. Connectez VCC au 5V et GND au GND. L’image ci-dessous montre le câblage complet :

Connecting OLED and TFmini-S with Arduino
Connexion OLED et TFmini-S avec Arduino

Notez que le TFmini-S ne fonctionne pas en 3,3V.

Code pour afficher les distances mesurées par le TFmini-S sur OLED

Le code suivant lit les mesures de distance du capteur TFmini-S et les affiche sur l’OLED. Ce code est une simple extension du code précédent. 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.setTextSize(2);
  oled.setTextColor(WHITE);
}

void display() {
  static char text[30];
  static int16_t dist, strength, temp;

  if (tfmini.getData(dist, strength, temp)) {
    sprintf(text, "%4d cm", dist);
    oled.clearDisplay();
    oled.setCursor(20, 25);
    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-S. La bibliothèque SoftwareSerial.h est utilisée pour créer la communication série et la bibliothèque 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 :

Adafruit_SSD1306 library installed in Library Manager
Bibliothèque Adafruit_SSD1306 installée dans le Library Manager

oled_initFonction setup

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, mais la vôtre peut être différente. Si vous ne voyez rien sur l’OLED, il a probablement une adresse I2C 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.

Fonction display

La fonction display() appelle tfmini.getData pour obtenir la lecture de distance du capteur TFmini-S. Elle efface ensuite l’affichage et imprime la distance. La fonction sprintf() est utilisée pour convertir la valeur de distance en texte formaté.

void display() {
  static char text[30];
  static int16_t dist, strength, temp;
  if (tfmini.getData(dist, strength, temp)) {
    sprintf(text, "%4d cm", dist);

    oled.clearDisplay();
    oled.setCursor(20, 25);
    oled.print(text);

    oled.display();
  }
}

Si vous placez un objet devant le capteur, l’écran devrait afficher la distance mesurée en centimètres. Voir l’exemple de sortie ci-dessous.

Measured Distance shown on OLED
Distance mesurée affichée sur OLED

Fonction setup

Dans la fonction setup(), nous appelons d’abord TFSerial.begin() pour initialiser la communication série UART, 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-S, vous pouvez mesurer des distances de 0,1 à 12 mètres.

Conclusions

Dans ce tutoriel, vous avez appris à utiliser le capteur de distance TFmini-S avec un Arduino pour mesurer des distances et les afficher sur un écran OLED.

Le TFmini-S est similaire au TF-Luna mais il est un peu plus grand et peut mesurer jusqu’à 12 mètres, tandis que le TF-Luna est limité à 8 mètres. Le TFmini-S est aussi un peu plus précis (et plus cher), mais les deux capteurs ont une résolution de 1 cm.

Si une portée plus courte vous convient mais que vous avez besoin d’une résolution au millimètre, regardez le VL53L0X, le VL53L1X, ou le TOF10120. Ils ont aussi l’avantage de fonctionner en 3,3V et sont beaucoup moins chers.

D’autres capteurs de distance infrarouges 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 ; )