Skip to Content

TOF10120 Capteur de distance avec Arduino

TOF10120 Capteur de distance avec Arduino

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

Le TOF10120 est un capteur de distance Time-of-Flight (ToF) très compact qui utilise une lumière laser infrarouge pour mesurer la distance jusqu’à un objet. Il envoie une impulsion lumineuse et mesure le temps nécessaire à son retour réfléchi. À partir de ce temps de vol, il calcule la proximité d’un objet avec une précision au millimètre près. Sa taille compacte et sa faible consommation en font un choix idéal pour de nombreux projets DIY, notamment en robotique, reconnaissance gestuelle et détection de proximité.

Pièces requises

Évidemment, vous aurez besoin d’un capteur de distance TOF10120. Pour le microcontrôleur, j’ai utilisé un Arduino Uno pour ce projet, mais tout autre Arduino ou ESP32/ESP8266 fonctionnera également très bien. Pour afficher les distances mesurées, j’ai choisi un écran OLED, mais vous pouvez aussi opter pour un LCD écran.

Capteur de distance TOF10120

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 TOF10120

Le capteur de distance Time-of-Flight TOF10120 est un capteur très petit (10 mm x 13 mm), haute précision, qui utilise la lumière infrarouge pour mesurer les distances.

Dimensions of TOF10120
Dimensions du TOF10120 (source)

Il est basé sur le principe Time-of-Flight (ToF), où le capteur émet des impulsions lumineuses et mesure le temps que met la lumière à revenir pour calculer la distance. Le TOF10120 a une portée allant jusqu’à 180 cm et fonctionne à une longueur d’onde de 940 nm. L’image ci-dessous montre le cône de la LED laser qui émet l’impulsion lumineuse et le cône de vue du détecteur qui enregistre la lumière réfléchie.

Working Principle of TOF10120
Principe de fonctionnement du TOF10120 (source)

Le TOF10120 fonctionne sous une tension de 3V à 5V, avec une consommation moyenne faible de seulement 35 mA. Voici un résumé de ses principales caractéristiques :

  • Plage de mesure : 100-1800 mm
  • Erreur de mesure : jusqu’à 5 %
  • Mesure rapide : max 30 ms
  • Interface de communication : UART / I2C
  • Paramètres de transmission UART : 9600 8n1
  • Longueur d’onde : 940 nm
  • Champ de vision : 25°
  • Immunité à la lumière ambiante : 50k lux
  • Plage de tension : 3V à 5V
  • Consommation moyenne : 35 mA

La spécification et la fiche technique indiquent que la distance minimale mesurable est de 100 mm. Cependant, j’ai constaté que l’on peut obtenir des mesures aussi proches que 10 mm et jusqu’à 2000 mm, mais en dessous de 30 mm les lectures deviennent très imprécises.

Le TOF10120 communique avec les microcontrôleurs via une interface I2C ou UART. L’image ci-dessous montre le brochage. SDA et SCL sont pour l’interface I2C, et RxD et TxD pour la communication UART.

Pinout of TOF10120
Brochage du TOF10120

Dans la section suivante, vous apprendrez comment connecter le TOF10120 à un Arduino.

Connexion du TOF10120

Nous allons utiliser l’interface I2C pour connecter le capteur TOF10120 à un Arduino. Commencez par connecter les broches SCL (6) et SDA (5) du module TOF10120 aux broches correspondantes de l’Arduino comme montré ci-dessous. Ensuite, connectez la masse à la broche 1 et le 3,3 V à la broche 2 du TOF10120.

Connecting TOF10120 with Arduino
Connexion du TOF10120 avec Arduino

Le capteur TOF10120 fonctionne sous 5V ou 3,3V et vous pouvez utiliser l’un ou l’autre pour VDD. Dans le câblage ci-dessus, j’utilise 3,3V pour VDD. Notez que les broches 3 et 4 (RxD, TxD) du TOF10120 ne sont pas connectées, car nous n’utilisons pas l’interface UART mais l’I2C.

Passons maintenant à l’écriture du code pour tester le fonctionnement du capteur TOF10120.

Code pour mesurer la distance avec TOF10120

Lire les données de distance du TOF10120 via I2C est assez simple. Le code suivant est une version raccourcie et épurée dérivée de la documentation du fournisseur pour le TOF10120.

int distance(int addr = 0x52) {
  unsigned short dist = 0;
  Wire.beginTransmission(addr);
  Wire.write(0);
  Wire.endTransmission();
  delay(1);
  Wire.requestFrom(addr, 2);
  if (Wire.available() != 2)
    return -1;
  dist = Wire.read() << 8;
  dist |= Wire.read();
  return dist;
}

Il commence par définir l’adresse de lecture où les données de distance sont lues via Wire.write(0). Ensuite, il lit deux octets consécutifs en appelant Wire.read(), construit la valeur de distance en combinant l’octet haut et l’octet bas, puis retourne cette valeur.

Notez que selon la fiche technique, l’adresse I2C 8 bits du capteur TOF10120 est 0xA4, mais comme la bibliothèque Wire utilise seulement les 7 bits de poids fort pour l’adresse I2C, vous devez utiliser l’adresse 7 bits correspondante 0x52. Notez aussi qu’il ne faut pas interroger le capteur plus vite que toutes les 30 ms.

Vous pouvez utiliser ce code tel quel, mais j’ai implémenté une petite TOF10120 library qui vous facilitera la vie.

Installer la bibliothèque TOF10120

Pour installer la bibliothèque TOF10120, allez dans le tof10120_arduino_lib repo ici et cliquez sur le bouton vert « Code ». Puis cliquez sur « Download Zip » comme montré ci-dessous :

Download TOF10120 library
Télécharger la bibliothèque TOF10120

Dans l’IDE Arduino, créez le code de test suivant :

#include "TOF10120.h"

TOF10120 sensor = TOF10120();

void setup() {
  Serial.begin(9600);
  sensor.init();
}

void loop() {
  Serial.print("distance:");
  Serial.println(sensor.distance());
  delay(100);
}

Ensuite, allez dans « Sketch » -> « Include Library » -> « Add .Zip Library.. » et sélectionnez le fichier « tof10120_arduino_lib-main.zip » que vous venez de télécharger :

Adding TOF10120 library to sketch
Ajout de la bibliothèque TOF10120 au sketch

Le code de test est très simple. Il inclut d’abord la bibliothèque TOF10120 et crée l’objet TOF10120 sensor. Dans la fonction setup(), le capteur est initialisé, et dans la fonction loop(), on appelle finalement sensor.distance() pour lire la distance mesurée par le capteur.

Si vous souhaitez connecter le capteur à des broches SDA et SCL différentes, vous pouvez les spécifier via sensor.begin(sda, scl) ; pour les cartes ESP32 et ESP8266.

Exécuter le code de test pour TOF10120 sensor

Si vous téléversez le code sur votre Arduino, vous devriez voir les valeurs de distance s’afficher dans le Moniteur Série. S’il n’y a pas d’objet devant le capteur, une distance de 2000 mm sera affichée.

Distances printed on Serial Monitor
Distances affichées dans le Moniteur Série

Si vous ouvrez le Traceur Série et placez votre main devant le capteur, en la rapprochant ou en l’éloignant, vous devriez voir un graphique similaire à celui montré ci-dessous.

Distances shown on Serial Plotter
Distances affichées dans le Traceur Série

Si vous rencontrez des problèmes et que le capteur ne semble pas fonctionner, assurez-vous que le câblage est correct et que les bonnes broches SDA et SCL sont utilisées. Vous pouvez aussi vérifier la diode laser du capteur en prenant une photo avec un appareil photo numérique (téléphone portable). Bien que la lumière IR soit invisible à l’œil nu, la caméra peut la détecter. L’image ci-dessous montre le TOF10120 avec la diode IR clairement allumée :

Illuminated IR Diode of TOF10120
Diode IR allumée du TOF10120

Dans la section suivante, nous allons ajouter un écran OLED à notre circuit.

Ajouter un OLED pour afficher les données du TOF10120

En général, on souhaite afficher la distance mesurée d’une manière ou d’une autre. Cela peut être une barre LED ou, dans ce cas, un écran OLED. Comme l’OLED est aussi un périphérique I2C, sa connexion est simple. Il suffit de connecter SDA et SCL aux mêmes broches que le capteur TOF10120. Et comme l’OLED fonctionne en 3,3 V, on peut aussi partager les lignes d’alimentation. L’image ci-dessous montre le câblage complet.

onnecting OLED and TOF10120 with Arduino
Connexion de l’OLED et du TOF10120 avec Arduino

Si vous avez des difficultés avec l’OLED, consultez le tutoriel How to Interface the SSD1306 I2C OLED Graphic Display With Arduino. L’image ci-dessous montre le câblage complet sur une vraie breadboard :

Wiring of OLED and TOF10120 with Arduino
Câblage de l’OLED et du TOF10120 avec Arduino

Code pour afficher les données du TOF10120 sur OLED

Dans cette section, nous écrivons le code pour afficher la distance mesurée par le capteur TOF10120 sur l’écran OLED. Pour écrire sur l’OLED, nous utiliserons la bibliothèque Adafruit_SSD1306. Vous pouvez l’installer via le gestionnaire de bibliothèques comme d’habitude :

Adafruit_SSD1306 library installed in Library Manager
Bibliothèque Adafruit_SSD1306 installée via le gestionnaire de bibliothèques

Le code ci-dessous lit les mesures du capteur TOF10120 et les affiche sur l’OLED. Regardez d’abord le code complet, puis nous en détaillerons les parties.

// Measure distance with TOF10120 sensor and show on OLED
// by Makerguides
#include "Adafruit_SSD1306.h"
#include "TOF10120.h"

Adafruit_SSD1306 oled(128, 64, &Wire, -1);
TOF10120 sensor = TOF10120();

void oled_init() {
  oled.begin(SSD1306_SWITCHCAPVCC, 0x3C);
  oled.clearDisplay();
  oled.setTextSize(2);
  oled.setTextColor(WHITE);
}

void display() {
  static char text[30];
  int dist = sensor.distance();
  sprintf(text, "%4d mm", dist);

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

  int w = map(dist, 0, 2000, 0, 120);
  oled.drawFastHLine(4, 45, w, WHITE);
  oled.display();
}

void setup() {
  sensor.init();
  oled_init();  
}

void loop() {
  display();
  delay(100);
}

Bibliothèques et initialisation de l’affichage

Nous commençons par inclure la bibliothèque TOF10120 Library et la Adafruit_SSD1306 Library pour l’écran OLED. Nous créons ensuite l’objet oled et l’objet sensor.

#include "Adafruit_SSD1306.h"
#include "TOF10120.h"

Adafruit_SSD1306 oled(128, 64, &Wire, -1);
TOF10120 sensor = TOF10120();

oled_initFonction

La fonction oled_init() initialise l’écran, 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 définie à 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, il est probable que l’adresse I2C soit 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 d’affichage

La fonction display() appelle sensor.distance() pour obtenir la lecture de distance du capteur TOF10120. Elle nettoie ensuite l’écran et affiche la distance. La fonction sprintf() est utilisée pour convertir la valeur de distance en texte formaté.

void display() {
  static char text[30];
  int dist = sensor.distance();
  sprintf(text, "%4d mm", dist);

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

  int w = map(dist, 0, 2000, 0, 120);
  oled.drawFastHLine(4, 45, w, WHITE);
  oled.display();
}

En plus de l’affichage du texte, la fonction display() trace une ligne horizontale sous le texte, dont la longueur est proportionnelle à la distance mesurée. S’il n’y a rien devant le capteur (ou plus loin que 2 m), l’écran affichera la distance maximale de 2000 mm et une ligne pleine.

Maximum Distance shown on OLED
Distance maximale affichée sur OLED

Si vous placez un objet devant le capteur, l’écran affichera la distance mesurée en millimètres et une ligne plus courte. Voici un exemple ci-dessous.

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

Si pour une raison quelconque le capteur ne peut pas obtenir une lecture de distance, la fonction distance() retourne -1 et cette valeur serait affichée sur l’OLED. Cependant, je n’ai jamais rencontré ce cas.

Fonction setup

Dans la fonction setup(), nous appelons d’abord sensor.init() pour initialiser le capteur TOF10120, puis oled_init(), qui initialise l’OLED.

void setup() {
  sensor.init();
  oled_init();  
}

Fonction loop

La fonction loop() appelle simplement la fonction display() toutes les 100 ms. Comme mentionné précédemment, il ne faut pas aller plus vite que 30 ms, mais vous pouvez utiliser un délai plus long.

void loop() {
  display();
  delay(100);
}

Et voilà. Vous avez maintenant votre propre outil de mesure de distance capable de mesurer avec précision entre 10 mm et 2000 mm.

Conclusions

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

Le capteur TOF10120 est un capteur très petit, rapide et haute précision qui utilise une lumière laser infrarouge pour mesurer les distances. Il mesure spécifiquement le temps de vol de l’impulsion laser réfléchie pour calculer la distance à un objet. Si vous cherchez une alternative : un capteur très similaire avec des spécifications comparables est le VL53L0X. Et si vous avez besoin d’un capteur avec une plus grande portée, regardez le TF Luna qui peut mesurer des distances jusqu’à 8 mètres.

Ces capteurs se distinguent des autres capteurs de distance infrarouges comme le GP2Y0A710K0F ou le GP2Y0A21YK0F, qui utilisent la triangulation pour déterminer la distance en fonction de l’angle de la lumière IR réfléchie. Mais le TOF10120 et le VL53L0X ont tous deux une portée plus longue et une meilleure précision comparés aux capteurs GP2Y0A710K0F et GP2Y0A21YK0F.

Les capteurs de distance IR peuvent être affectés par une forte lumière ambiante. Une alternative sont les capteurs à ultrasons comme le commun HC-SR04 qui utilisent des ondes sonores pour mesurer la distance. Cependant, les capteurs laser IR sont plus précis et ont tendance à avoir une plus grande portée que les capteurs à ultrasons, mais ils sont aussi un peu plus coûteux.

Si vous avez des questions, n’hésitez pas à les poser dans la section commentaires.

Bon bricolage ; )