Guides · 11 min de lecture

Capteurs de distance Arduino : HC-SR04, IR, VL53L0X et LiDAR

Comparatif des capteurs de distance pour Arduino : HC-SR04, JSN-SR04T, Sharp IR, VL53L0X/VL53L1X, TF-Luna et TCRT5000 ; portée, précision, angle, surfaces.

Choisir parmi les capteurs de distance pour Arduino ressemble au premier abord à la question « lequel mesure le plus loin », mais ce qui décide vraiment, c'est la surface à mesurer, la précision nécessaire, la finesse du faisceau et les conditions ambiantes. Le même HC-SR04 qui mesure la distance d'un mur au centimètre près peut devenir instable face au tissu moelleux d'un canapé, et un capteur laser bon marché, précis au millimètre, peut perdre la moitié de sa portée au soleil. Dans ce guide, on met côte à côte les six capteurs les plus utilisés dans les projets Arduino.

Les capteurs comparés sont : l'ultrason HC-SR04 et son cousin étanche JSN-SR04T, le capteur infrarouge à triangulation Sharp GP2Y0A21, les capteurs laser à temps de vol (ToF) VL53L0X et VL53L1X, le petit LiDAR TF-Luna et le capteur de proximité à courte portée TCRT5000. Pour chacun, on explique le principe, la portée, la précision, l'angle du faisceau, la réaction aux surfaces et l'interface, avec un exemple de code compilé. À la fin, un tableau résume lequel choisir pour quel projet.

Capteur de distance à ultrasons HC-SR04
HC-SR04 : deux transducteurs à ultrasons, l'un émet le son, l'autre écoute l'écho ; le capteur de distance le plus répandu du monde Arduino.

Comment mesurent les capteurs de distance ? Trois principes

Presque tous les capteurs de distance utilisés avec Arduino reposent sur l'une de trois méthodes. Temps de vol : le capteur envoie une impulsion sonore ou lumineuse et mesure le temps que met le reflet à revenir ; la distance vaut la moitié du produit du temps par la vitesse. Les ultrasons le font avec le son, le VL53L0X et le TF-Luna avec la lumière. Comme la lumière est environ un million de fois plus rapide que le son, les capteurs ToF intègrent des puces spéciales qui chronomètrent à la picoseconde près. Triangulation : les capteurs Sharp IR envoient un faisceau infrarouge sur la cible et regardent où la lumière réfléchie tombe sur un détecteur sensible à la position (PSD) ; pour un objet proche, le point se déplace vers une extrémité, pour un objet lointain vers l'autre. Intensité de réflexion : des capteurs simples comme le TCRT5000 mesurent seulement la force de la lumière qui revient ; comme cela dépend beaucoup de la couleur de la surface, c'est de la détection de proximité plutôt qu'une vraie mesure de distance.

PrincipeCapteursAvantagesInconvénients
Temps de vol sonoreHC-SR04, JSN-SR04TBon marché, insensible à la couleur et à la lumièreFaisceau large, faible sur surfaces molles et inclinées, sensible à la température
Temps de vol lumineuxVL53L0X, VL53L1X, TF-LunaRapide, faisceau étroit, bonne précisionLe soleil et le verre posent problème
Triangulation infrarougeSharp GP2Y0A21Peu sensible à la couleur, sortie analogique simpleSortie non linéaire, plage étroite, trompeur sous 10 cm
Intensité de réflexionTCRT5000Très bon marché, très rapideSeulement quelques mm à cm, très dépendant de la couleur

Le grand tableau comparatif

Le tableau ci-dessous rassemble les valeurs typiques des modules. Les portées sont celles des fabricants ; dans un vrai projet, elles peuvent être plus courtes selon la surface et l'environnement. Les prix variant selon les pays, ils sont donnés de façon relative.

CapteurPortéePrécisionAngle du faisceauInterfaceAlimentationPrix relatif
HC-SR042–400 cmEnviron ±0,3–1 cmEnviron 15°Impulsion Trig/Echo5 V (HC-SR04P : 3,3–5 V)Très bon marché
JSN-SR04TEnviron 25–450 cmEnviron ±1 cmLarge (environ 45° ou plus)Trig/Echo, UART sur certaines versions5 VBon marché
Sharp GP2Y0A2110–80 cmBonne de près, faible de loinÉtroit (quelques degrés)Tension analogique4,5–5,5 VMoyen
VL53L0X3 cm – 2 m (par défaut ~1,2 m)Environ ±3 %25°I2C (0x29)Module 3,3–5 VBon marché
VL53L1X4 cm – 4 mEnviron ±3 %, résolution au mm27° (réductible à 15°)I2C (0x29)Module 3,3–5 VMoyen
TF-Luna0,2–8 m±6 cm (jusqu'à 3 m), ±2 % (3–8 m)2°UART ou I2C5 V, logique 3,3 VCher
TCRT5000Environ 0,2–15 mm (idéal à 2,5 mm)Pas de distance, présence/absenceÉtroitNumérique (DO) + analogique (AO)3,3–5 VTrès bon marché

HC-SR04 : le classique à ultrasons

Le HC-SR04 envoie huit impulsions sonores à 40 kHz et maintient sa broche ECHO à HIGH jusqu'au retour de l'écho. L'Arduino mesure la durée de cette impulsion en microsecondes avec pulseIn(). À 20 °C, le son parcourt environ 343 mètres par seconde, soit 0,0343 cm par microseconde ; comme il fait l'aller-retour, distance = durée × 0,0343 / 2. La vitesse du son varie avec la température (environ 331,3 + 0,606 × T m/s) : entre 0 °C et 35 °C, l'écart est d'environ 6 %, soit jusqu'à 12 cm d'erreur à 2 mètres. Le code ci-dessous applique cette correction et prend la médiane de cinq mesures pour écarter les échos parasites occasionnels.

C++ (Arduino IDE)
1const int TRIG_PIN = 9;
2const int ECHO_PIN = 10;
3const float SICAKLIK = 20.0;     // ortam sıcaklığı, °C / ambient temperature, °C
4float sesHizi;                   // cm/µs
5
6float mesafeOlc() {
7  digitalWrite(TRIG_PIN, LOW);
8  delayMicroseconds(2);
9  digitalWrite(TRIG_PIN, HIGH);  // 10 µs tetik darbesi / 10 µs trigger pulse
10  delayMicroseconds(10);
11  digitalWrite(TRIG_PIN, LOW);
12  unsigned long sure = pulseIn(ECHO_PIN, HIGH, 30000UL);   // 30 ms ≈ 5 m sınırı / ~5 m limit
13  if (sure == 0) return -1;      // yankı yok / no echo
14  return sure * sesHizi / 2.0;   // gidiş-dönüş / round trip
15}
16
17void setup() {
18  Serial.begin(9600);
19  pinMode(TRIG_PIN, OUTPUT);
20  pinMode(ECHO_PIN, INPUT);
21  sesHizi = (331.3 + 0.606 * SICAKLIK) / 10000.0;   // m/s -> cm/µs (20 °C: 0,0343)
22}
23
24void loop() {
25  float olcum[5];
26  for (int i = 0; i < 5; i++) {  // 5 ölçüm, aralarında 60 ms / 5 readings, 60 ms apart
27    olcum[i] = mesafeOlc();
28    delay(60);
29  }
30  for (int i = 1; i < 5; i++) {  // sırala / sort
31    float x = olcum[i];
32    int j = i - 1;
33    while (j >= 0 && olcum[j] > x) { olcum[j + 1] = olcum[j]; j--; }
34    olcum[j + 1] = x;
35  }
36  float d = olcum[2];            // ortanca / median
37  if (d < 0) Serial.println("Menzil disi / out of range");
38  else { Serial.print(d, 1); Serial.println(" cm"); }
39}
40
  • Attends au moins 60 ms entre deux mesures : si tu mesures pendant que les échos de l'impulsion précédente rebondissent encore dans la pièce, le résultat sera faux.
  • Surfaces molles et inclinées : tissu, mousse et rideaux absorbent le son ; une surface inclinée de plus de 45 degrés renvoie l'écho ailleurs que vers le capteur.
  • Faisceau large : le cône d'environ 15 degrés couvre une zone de près de 50 cm de diamètre à 2 mètres ; dans un couloir étroit, il peut voir aussi les murs latéraux.
  • Cartes 3,3 V : le HC-SR04 classique demande 5 V et sa sortie ECHO sort du 5 V ; sur l'ESP32 et le Pico, mets un pont diviseur sur ECHO ou utilise le HC-SR04P qui fonctionne en 3,3 V.
  • Plusieurs capteurs : deux HC-SR04 déclenchés en même temps entendent l'écho de l'autre ; déclenche-les l'un après l'autre.

Le câblage du HC-SR04 et son utilisation avec le moniteur série et un écran LCD sont détaillés dans l'article capteur de distance HC-SR04 ; ici, on se concentre sur la comparaison.

JSN-SR04T : l'ultrason étanche

Le JSN-SR04T fonctionne avec la même logique de déclenchement et d'écho que le HC-SR04, mais son transducteur est logé dans une capsule étanche au bout d'un câble, séparée de la carte électronique. C'est donc le choix pour les endroits humides : cuves d'eau, puits, récupérateurs d'eau de pluie, radars de recul en extérieur. Deux différences comptent : comme un seul transducteur émet et écoute, il existe une zone morte à courte distance (environ 20 à 25 cm), et son faisceau est plus large que celui du HC-SR04. Monte le capteur sur le couvercle de la cuve, au moins 25 cm au-dessus du niveau d'eau maximal. Le code ci-dessous convertit la distance en pourcentage de remplissage.

C++ (Arduino IDE)
1// JSN-SR04T ile su deposu doluluğu / water tank level with a JSN-SR04T
2const int TRIG_PIN = 9;
3const int ECHO_PIN = 10;
4const float SENSOR_BOSLUK = 25.0;  // sensörden en yüksek su seviyesine, cm (ölü bölge) / sensor to max level (blind zone)
5const float DEPO_DERINLIK = 120.0; // en yüksek seviyeden depo dibine, cm / max level to tank bottom
6
7float mesafeOlc() {
8  digitalWrite(TRIG_PIN, LOW);
9  delayMicroseconds(5);
10  digitalWrite(TRIG_PIN, HIGH);
11  delayMicroseconds(20);           // JSN-SR04T 10 µs'den uzun darbeyi sever / likes a longer pulse
12  digitalWrite(TRIG_PIN, LOW);
13  unsigned long sure = pulseIn(ECHO_PIN, HIGH, 40000UL);
14  if (sure == 0) return -1;
15  return sure * 0.0343 / 2.0;      // 20 °C ses hızı / speed of sound at 20 °C
16}
17
18void setup() {
19  Serial.begin(9600);
20  pinMode(TRIG_PIN, OUTPUT);
21  pinMode(ECHO_PIN, INPUT);
22}
23
24void loop() {
25  float d = mesafeOlc();
26  if (d < 0) {
27    Serial.println("Yanki yok / no echo");
28  } else {
29    float suYuksekligi = DEPO_DERINLIK - (d - SENSOR_BOSLUK);   // dipten su yüksekliği / water height
30    float yuzde = constrain(suYuksekligi / DEPO_DERINLIK * 100.0, 0, 100);
31    Serial.print("Mesafe / distance: ");
32    Serial.print(d, 1);
33    Serial.print(" cm  Doluluk / fill: %");
34    Serial.println(yuzde, 0);
35  }
36  delay(1000);                     // su yüzeyi dalgalanır, sık ölçme / water ripples, measure slowly
37}
38
Échelles, tuyaux ou flotteurs dans la cuve peuvent renvoyer des échos à cause du faisceau large ; place le capteur loin d'eux, près du centre de la cuve. Si des gouttes de condensation se forment sur le transducteur, la mesure se dégrade ; un montage légèrement incliné laisse les gouttes s'écouler. Si la surface de l'eau ondule, prends la médiane de plusieurs mesures.

Sharp GP2Y0A21 : l'infrarouge analogique

Le Sharp GP2Y0A21YK0F est un capteur infrarouge qui fonctionne entre 10 et 80 cm et délivre une tension analogique selon la distance. Comme il utilise la triangulation, il est moins sensible à la couleur de la cible que les capteurs basés sur l'intensité de réflexion. Sa sortie n'est pas linéaire : environ 2,3 V à 10 cm, 0,4 V à 80 cm, avec une courbe de puissance inverse entre les deux. Le code convertit cette courbe avec l'approximation distance = 29,988 × V^-1,173. Le piège principal se trouve sous 10 cm : quand la cible se rapproche, la tension rebaisse et un objet à 5 cm peut sembler être à 20 cm. Installe le capteur de sorte que la cible ne puisse jamais s'approcher à moins de 10 cm.

C++ (Arduino IDE)
1// Sharp GP2Y0A21YK0F (10–80 cm), analog / analog output
2const int SHARP_PIN = A0;
3
4float sharpCm() {
5  long toplam = 0;
6  for (int i = 0; i < 20; i++) {          // 20 okumanın ortalaması / average of 20 readings
7    toplam += analogRead(SHARP_PIN);
8    delay(2);
9  }
10  float volt = toplam / 20.0 * 5.0 / 1023.0;
11  if (volt < 0.35) return -1;             // 80 cm'den uzak / farther than 80 cm
12  float cm = 29.988 * pow(volt, -1.173);  // ters güç eğrisi / inverse power curve
13  if (cm > 80) return -1;
14  return cm;                              // 10 cm altı yanıltıcı / misleading below 10 cm
15}
16
17void setup() {
18  Serial.begin(9600);
19}
20
21void loop() {
22  float cm = sharpCm();
23  if (cm < 0) Serial.println("Menzil disi / out of range");
24  else { Serial.print(cm, 1); Serial.println(" cm"); }
25  delay(100);
26}
27

Les capteurs Sharp tirent de courtes pointes de courant pendant la mesure, ce qui crée du bruit sur l'alimentation. Un condensateur d'environ 10 µF près des broches VCC et GND du capteur calme nettement les lectures. La famille compte d'autres modèles : le GP2Y0A41SK0F fonctionne de 4 à 30 cm, le GP2Y0A02YK0F de 20 à 150 cm ; chacun a ses propres coefficients de courbe.

VL53L0X et VL53L1X : les capteurs laser ToF

Le VL53L0X et le VL53L1X sont de minuscules capteurs laser à temps de vol de STMicroelectronics. Ils envoient une impulsion laser invisible à 940 nm, mesurent le temps de retour du reflet avec des compteurs de photons et donnent le résultat directement en millimètres via I2C. Ils sont presque indépendants de la couleur, leur faisceau est plus étroit que celui d'un ultrason et une mesure dure 20 à 50 ms. Le VL53L0X mesure jusqu'à environ 1,2 mètre en mode par défaut et 2 mètres en mode longue portée ; le VL53L1X atteint 4 mètres et son champ de vision (ROI) se réduit par logiciel. Les deux ont l'adresse I2C par défaut 0x29. Le code utilise la bibliothèque VL53L0X de Pololu ; cherche « VL53L0X » dans le gestionnaire de bibliothèques et installe la version Pololu.

C++ (Arduino IDE)
1#include <Wire.h>
2#include <VL53L0X.h>              // Pololu VL53L0X kütüphanesi / library
3
4VL53L0X sensor;
5
6void setup() {
7  Serial.begin(9600);
8  Wire.begin();                    // Uno: SDA A4, SCL A5 / ESP32: SDA 21, SCL 22
9  sensor.setTimeout(500);
10  if (!sensor.init()) {
11    Serial.println("VL53L0X bulunamadi / not found");
12    while (true) {}
13  }
14  // Uzun menzil modu (2 m'ye kadar, daha gürültülü) / long range mode (up to 2 m, noisier):
15  // sensor.setSignalRateLimit(0.1);
16  // sensor.setVcselPulsePeriod(VL53L0X::VcselPeriodPreRange, 18);
17  // sensor.setVcselPulsePeriod(VL53L0X::VcselPeriodFinalRange, 14);
18  sensor.setMeasurementTimingBudget(50000);   // 50 ms: daha kararlı ölçüm / steadier reading
19  sensor.startContinuous();
20}
21
22void loop() {
23  uint16_t mm = sensor.readRangeContinuousMillimeters();
24  if (sensor.timeoutOccurred()) {
25    Serial.println("Zaman asimi / timeout");
26  } else if (mm >= 8190) {         // 8190-8191: hedef yok / no target
27    Serial.println("Menzil disi / out of range");
28  } else {
29    Serial.print(mm);
30    Serial.println(" mm");
31  }
32}
33

Le budget de temps de mesure (timing budget) règle l'équilibre entre précision et vitesse : 20 ms, c'est rapide mais bruité ; 200 ms, c'est lent mais stable. Le soleil et les sources infrarouges puissantes réduisent nettement la portée ; tiens-en compte pour les mesures en extérieur. Pour brancher deux VL53L0X sur le même bus I2C, comme ils ont tous deux l'adresse 0x29, tu en maintiens un éteint avec sa broche XSHUT et tu donnes une nouvelle adresse à l'autre (setAddress) ; les détails I2C sont dans l'article Qu'est-ce que l'I2C.

TF-Luna : 8 mètres avec un petit LiDAR

Le TF-Luna est le petit LiDAR monopoint de Benewake : il mesure le temps de vol en modulant une lumière infrarouge à 850 nm, fonctionne de 0,2 à 8 mètres avec un faisceau très étroit de seulement 2 degrés et peut faire jusqu'à 250 mesures par seconde. Par défaut, il envoie chaque mesure en UART à 115200 bauds dans un paquet de 9 octets : deux octets d'en-tête 0x59, la distance (cm), la force du signal, la température interne et une somme de contrôle. Si la force du signal est inférieure à 100 ou égale à 65535 (surexposition), la mesure est jugée peu fiable. Il s'alimente en 5 V mais son niveau logique UART est de 3,3 V ; il se branche donc directement sur un ESP32. Comme le SoftwareSerial de l'Uno n'est pas fiable à 115200 bauds, préfère une carte avec UART matériel comme l'ESP32 ou la Mega ; la logique de décodage des paquets UART est expliquée dans l'article liaison série UART.

C++ (Arduino IDE)
1// TF-Luna LiDAR, UART (115200), ESP32 Serial2
2// TF-Luna TX -> GPIO 16, RX -> GPIO 17, VCC 5V, GND
3const int RXD2 = 16, TXD2 = 17;
4
5uint8_t kare[9];                   // 0x59 0x59 DistL DistH AmpL AmpH TempL TempH Checksum
6int konum = 0;
7
8void setup() {
9  Serial.begin(115200);
10  Serial2.begin(115200, SERIAL_8N1, RXD2, TXD2);
11}
12
13void loop() {
14  while (Serial2.available()) {
15    uint8_t b = Serial2.read();
16    if (konum < 2) {               // iki 0x59 başlık baytını bekle / wait for two 0x59 header bytes
17      if (b == 0x59) kare[konum++] = b;
18      else konum = 0;
19      continue;
20    }
21    kare[konum++] = b;
22    if (konum < 9) continue;
23    konum = 0;
24
25    uint8_t toplam = 0;
26    for (int i = 0; i < 8; i++) toplam += kare[i];
27    if (toplam != kare[8]) continue;             // sağlama toplamı hatalı / bad checksum
28
29    uint16_t mesafe = kare[2] | (kare[3] << 8);  // cm
30    uint16_t guc = kare[4] | (kare[5] << 8);     // sinyal gücü / signal strength
31    float derece = (kare[6] | (kare[7] << 8)) / 8.0 - 256.0;
32
33    if (guc < 100 || guc == 65535) {             // zayıf ya da aşırı sinyal / weak or saturated
34      Serial.println("Guvenilmez / unreliable");
35    } else {
36      Serial.print(mesafe);
37      Serial.print(" cm  guc / amp: ");
38      Serial.print(guc);
39      Serial.print("  ic sicaklik / chip temp: ");
40      Serial.println(derece, 1);
41    }
42  }
43}
44

TCRT5000 : proximité et détection de ligne

Capteur infrarouge à réflexion TCRT5000
TCRT5000 : une LED infrarouge et un phototransistor côte à côte ; la carte du module porte un comparateur, un potentiomètre de seuil et des sorties numérique et analogique.

Le TCRT5000 n'est pas un télémètre mais un capteur à réflexion : la lumière de la LED infrarouge rebondit sur la surface et le phototransistor voisin mesure combien elle en renvoie. Il fonctionne au mieux à environ 2,5 mm et le signal faiblit vite au-delà de 1,5 cm. Comme le blanc réfléchit beaucoup et le noir très peu, il donne des valeurs complètement différentes selon la couleur, même à distance égale ; c'est pourquoi on l'utilise pour distinguer le noir du blanc dans les robots suiveurs de ligne, compter les trous d'un disque d'encodeur ou détecter des objets très proches. Le comparateur du module bascule la sortie numérique quand le seuil réglé au potentiomètre est franchi. Détails dans l'article capteur infrarouge TCRT5000.

C++ (Arduino IDE)
1// TCRT5000 modülü: DO dijital, AO analog / TCRT5000 module: DO digital, AO analog
2const int DO_PIN = 7;
3const int AO_PIN = A1;
4const int LED_PIN = 13;
5
6void setup() {
7  Serial.begin(9600);
8  pinMode(DO_PIN, INPUT);
9  pinMode(LED_PIN, OUTPUT);
10}
11
12void loop() {
13  bool nesneVar = (digitalRead(DO_PIN) == LOW);  // çoğu modülde LOW = yansıma var / LOW = reflection on most modules
14  int yansima = analogRead(AO_PIN);              // düşük değer = güçlü yansıma / low value = strong reflection
15  digitalWrite(LED_PIN, nesneVar);
16  Serial.print(nesneVar ? "Nesne VAR / object  " : "Nesne yok / none  ");
17  Serial.println(yansima);
18  delay(100);
19}
20

Effet de la surface et de l'environnement

La portée annoncée d'un capteur change dès qu'il rencontre la surface à mesurer. Les ultrasons excellent sur les surfaces dures qui renvoient le son, mais peinent face aux tissus qui l'absorbent ; les capteurs à lumière réagissent à la couleur, à la brillance et au soleil. Le tableau montre quel capteur reste fiable dans quelle situation au moment de concevoir ton projet.

Surface / environnementUltrasons (HC-SR04)Sharp IRLaser ToF (VL53, TF-Luna)TCRT5000
Mur dur et platTrès bienBienTrès bienBien (seulement de très près)
Tissu, mousse, rideauFaible (son absorbé)BienBienMoyen
Surface noire mateBienMoyenPortée réduiteTrès faible
Verre, miroir, métal brillantBien (le son rebondit)TrompeurTrompeur (la lumière traverse ou dévie)Trompeur
Surface inclinéeFaible (écho dévié)MoyenBienMoyen
Soleil, extérieurNon affectéAffectéPortée nettement réduiteAffecté
Surface de l'eauBien (mesure de cuve)FaibleVariableInadapté
Variations de températureLa vitesse du son change, correction nécessairePeu affectéPeu affectéPeu affecté

Résumé du câblage : Uno, ESP32 et Pico

CapteurArduino UnoESP32Raspberry Pi PicoRemarque
HC-SR04 / JSN-SR04TTRIG D9, ECHO D10, 5VTRIG 5, ECHO 18 (via pont diviseur), VIN 5VTRIG GP14, ECHO GP15 (via pont diviseur), VBUSECHO sort du 5 V
Sharp GP2Y0A21A0, 5VGPIO 34 (via pont diviseur), VIN 5VGP26 (via pont diviseur), VBUSLa sortie peut atteindre 3,1 V
VL53L0X / VL53L1XSDA A4, SCL A5SDA 21, SCL 22SDA GP4, SCL GP5Adresse 0x29
TF-LunaSoftwareSerial déconseilléTX → GPIO 16, RX → GPIO 17TX → GP1 (RX de uart0), RX → GP0Alimentation 5 V, logique 3,3 V
Module TCRT5000DO D7, AO A1DO 27, AO 34DO GP16, AO GP273,3–5 V
Quand tu relies les sorties de capteurs alimentés en 5 V (ECHO du HC-SR04, sortie analogique du Sharp) à un ESP32 ou un Pico, n'oublie pas le pont diviseur ; les broches de ces cartes ne tolèrent pas le 5 V. Comme la sortie du Sharp monte jusqu'à 3,1 V, elle pousse un ADC référencé à 3,3 V à sa limite ; il est plus sûr de mesurer à travers un pont comme 10 kΩ + 20 kΩ puis de multiplier le résultat par 1,5.

Mesure à ultrasons avec le Raspberry Pi Pico

En MicroPython, la durée d'une impulsion se mesure avec machine.time_pulse_us() ; elle fait le même travail que pulseIn() sur Arduino et renvoie une valeur négative en cas de dépassement de délai. Alimente le HC-SR04 depuis la broche VBUS (5 V de l'USB) du Pico et mets un pont 1 kΩ + 2 kΩ sur la ligne ECHO, ou utilise le HC-SR04P qui fonctionne directement en 3,3 V. Il existe aussi des pilotes MicroPython pour le VL53L0X et le TF-Luna ; le paquet UART du TF-Luna se décode facilement avec machine.UART en suivant la même logique que le code Arduino.

MicroPython
1from machine import Pin, time_pulse_us
2import time
3
4trig = Pin(14, Pin.OUT)
5echo = Pin(15, Pin.IN)             # 5 V ECHO için gerilim bölücü şart / divider required for a 5 V ECHO
6SES_HIZI = 0.0343                  # cm/µs, 20 °C
7
8def mesafe_olc():
9    trig.low()
10    time.sleep_us(2)
11    trig.high()
12    time.sleep_us(10)              # 10 µs tetik / 10 µs trigger
13    trig.low()
14    sure = time_pulse_us(echo, 1, 30000)   # zaman aşımında eksi döner / negative on timeout
15    if sure < 0:
16        return None
17    return sure * SES_HIZI / 2
18
19while True:
20    d = mesafe_olc()
21    print("Menzil disi" if d is None else "{:.1f} cm".format(d))
22    time.sleep_ms(100)
23

Quel capteur de distance pour quel projet ?

ProjetCapteur conseilléPourquoi ?
Robot évitant les obstaclesHC-SR04 (économique) ou VL53L0XLe faisceau large ne rate pas les obstacles ; le VL53L0X est plus rapide et plus petit
Niveau de cuve ou de puitsJSN-SR04TSonde étanche, voit bien la surface de l'eau
Radar de reculJSN-SR04T ou HC-SR04Résiste à l'extérieur, 2 à 3 m de portée suffisent
Robot suiveur de ligneTCRT5000Conçu pour distinguer le noir du blanc
Mini-sumo, mesure précise sur tableVL53L0X / VL53L1XRésolution au millimètre, faisceau étroit, petite taille
Radar Arduino (balayage par servo)HC-SR04 ou TF-LunaLe HC-SR04 est bon marché ; le faisceau de 2° du TF-Luna trace une carte bien plus nette
Toise, compteur de passageVL53L1X ou TF-LunaLongue portée et mesures stables
Drone, longue distanceTF-LunaPortée de 8 m, jusqu'à 250 Hz
Robinet sans contact, détection de mainSharp GP2Y0A21Plage de 10 à 80 cm et sortie analogique simple

Quelques idées de projets aussi : fais tourner un HC-SR04 sur un servo pour créer un écran de radar Arduino ; mets un HC-SR04 à l'avant et deux VL53L0X sur les côtés de ton robot évitant les obstacles ; ouvre le couvercle d'une poubelle intelligente à l'approche d'une main ; fabrique un mètre numérique portable avec un écran OLED, ou envoie sur ton téléphone le niveau de ta cuve via un ESP32 et un JSN-SR04T.

Erreurs fréquentes et solutions

SymptômeCause probableSolution
Le HC-SR04 affiche toujours 0 ou hors portéePas d'écho, problème de câblage ou d'alimentationVérifie le 5 V et les broches TRIG/ECHO, donne un délai maximal à pulseIn
Les mesures à ultrasons sautent de temps en tempsÉcho de l'impulsion précédente ou d'un mur latéralAttends 60 ms entre les mesures, utilise un filtre médian
Le JSN-SR04T ne mesure pas de prèsZone morte (20 à 25 cm)Monte le capteur à au moins 25 cm de la cible
Le Sharp donne une valeur grande et fausse de très prèsLa courbe s'inverse sous 10 cmEmpêche la cible de s'approcher à moins de 10 cm
Mesures du Sharp bruitéesLes pointes de courant perturbent l'alimentationCondensateur de 10 µF entre VCC et GND, moyenne des lectures
VL53L0X introuvableCâblage I2C ou conflit d'adresseVérifie SDA/SCL et l'adresse 0x29 avec un scanner I2C
Le capteur laser mesure trop court dehorsInfrarouge de la lumière du soleilAjoute un pare-soleil, augmente le timing budget ou passe aux ultrasons
Les données du TF-Luna sont incohérentesMauvais débit ou SoftwareSerial dépasséUtilise 115200 bauds et un UART matériel, vérifie la somme de contrôle
Avant de choisir un capteur, pense à la cible : pour une cible grande, dure et proche, un HC-SR04 suffit le plus souvent. S'il faut mesurer précisément une zone étroite ou voir des surfaces molles, passe au ToF ; pour l'humidité ou l'extérieur, au JSN-SR04T ; et s'il te faut plus de quelques mètres ou des mesures très rapides, au TF-Luna.

Les capteurs de distance sont le moyen le plus simple de donner à un projet Arduino la perception de son environnement, et choisir le bon fait toute la différence entre un projet qui tourne sereinement et un projet exaspérant. Les tableaux et les codes de ce comparatif t'aident à équilibrer budget et performances selon tes besoins. Dans l'application BlueGrays, tu trouveras des projets de mesure de distance avec HC-SR04, de radar de recul, de toise, de robot évitant les obstacles, de radar de recul avec ESP32 et de mesure de distance avec TCRT5000, pas à pas avec schéma et code.

Questions fréquentes

Quel est le meilleur capteur de distance pour Arduino ?

Il n'y a pas de meilleur capteur unique ; le choix dépend de la cible et de l'environnement. Le HC-SR04 convient aux usages généraux et économiques, le VL53L0X ou le VL53L1X à la précision millimétrique et au faisceau étroit, le JSN-SR04T aux endroits humides et le TF-Luna aux mesures rapides au-delà de quelques mètres.

Jusqu'à combien de mètres mesure le HC-SR04 ?

Le fabricant annonce de 2 cm à 4 mètres, mais en pratique les mesures fiables vont généralement jusqu'à 2 ou 3 mètres. On s'approche de la limite avec une cible grande, dure et perpendiculaire au capteur ; avec une cible molle, petite ou inclinée, la portée diminue nettement.

Quelle différence entre un capteur de distance à ultrasons et un capteur infrarouge ?

Le capteur à ultrasons mesure le temps d'écho d'une impulsion sonore ; il n'est pas gêné par la couleur ni la lumière, mais son faisceau est large et il peine sur les surfaces molles. Les capteurs infrarouges utilisent la lumière, ont un faisceau plus étroit et sont rapides, mais le soleil, le verre et certaines surfaces sombres peuvent fausser la mesure.

Quelle différence entre le VL53L0X et le VL53L1X ?

Ce sont deux capteurs laser ToF en I2C. Le VL53L0X mesure jusqu'à environ 2 mètres, tandis que le VL53L1X atteint 4 mètres, mesure plus vite et permet de réduire son champ de vision par logiciel. Le VL53L0X convient aux petits robots à courte portée, le VL53L1X aux mesures plus longues et plus précises.

Quel capteur de distance pour mesurer le niveau d'une cuve d'eau ?

Le JSN-SR04T et sa sonde étanche sont le choix le plus courant ; il se monte sur le couvercle de la cuve, au moins 25 cm au-dessus du niveau maximal. Le HC-SR04 fonctionne aussi dans une cuve sèche et fermée, mais l'humidité et la condensation peuvent vite l'abîmer.

Les capteurs de distance fonctionnent-ils avec l'ESP32 et le Raspberry Pi Pico ?

Oui, mais il faut ramener à 3,3 V avec un pont diviseur la sortie ECHO des HC-SR04 et JSN-SR04T alimentés en 5 V, ainsi que la sortie analogique du Sharp. Les modules VL53L0X et le TF-Luna utilisent déjà une logique compatible 3,3 V, et le HC-SR04P fonctionne directement en 3,3 V.

Voir tous les projets
HC-SR04 Mesure de la distance (affichage en série)
#27Débutant

HC-SR04 Mesure de la distance (affichage en série)

Le capteur HC-SR04 fonctionne comme une chauve-souris qui trouve son chemin dans le noir : il envoie un son que tu ne peux pas entendre, écoute l'écho et mesure à quelle distance se trouve l'objet dev

4.6(46)
71
Capteur de stationnement avec HC-SR04
#28Intermédiaire
Premium

Capteur de stationnement avec HC-SR04

Une version miniature du radar de recul des voitures : plus un objet s'approche, plus les bips s'accélèrent. Le capteur de distance mesure l'obstacle devant lui ; au-delà de 20 centimètres, la LED ver

4.8(64)
85
Projet de mesure de la taille
#33Intermédiaire
Premium

Projet de mesure de la taille

Une toise qui se fixe au cadre de la porte et te dit en centimètres la taille de la personne qui se tient dessous. D'abord, tu appuies sur le premier bouton sans personne en dessous et le capteur de d

4.5(25)
34
Robot évitant les obstacles
#81Avancé
Premium

Robot évitant les obstacles

Que diriez-vous de construire un véhicule intelligent qui trouve son propre chemin ? Le Robot Évitant les Obstacles scrute en permanence son environnement grâce au capteur ultrasonique situé devant lu

5.0(38)
49
ESP32 HC-SR04 Télémètre à ultrasons
#116Intermédiaire

ESP32 HC-SR04 Télémètre à ultrasons

Le capteur à ultrasons HC-SR04 calcule la distance en mesurant le temps de vol (Time of Flight) de l'onde sonore qu'il émet lorsqu'elle rebondit sur un objet. Dans ce projet, nous enverrons une impulsion de 10 microsecondes depuis l'ESP32 vers la broche TRIG du capteur et nous lirons la durée de l'écho provenant de la broche ECHO à l'aide de la fonction pulseIn(). Nous afficherons la distance calculée en cm sur un écran LCD I2C 16x2. Le capteur HC-SR04 fonctionnant en 5 V, un diviseur de ten

4.9(28)
45
Capteur de stationnement ESP32 (HC-SR04 + barre à 5 LED + buzzer + écran OLED)
#142Avancé
Premium

Capteur de stationnement ESP32 (HC-SR04 + barre à 5 LED + buzzer + écran OLED)

La version ESP32 du capteur de stationnement pour voiture ! Grâce au capteur à ultrasons HC-SR04, nous mesurons la distance par rapport à l'objet situé devant. À mesure que la distance diminue, la barre composée de 5 LED se remplit (vert → jaune → rouge) et l'intervalle entre les bips du buzzer se raccourcit. Lorsque l'objet est très proche (moins de 10 cm), l'alarme retentit en continu et toutes les LED s'allument. L'écran OLED SSD1306 affiche en gros caractères la valeur instantanée en cm, un

0.0(0)
14
Lecture de réflexion (proximité) avec TCRT5000
#77Intermédiaire
Premium

Lecture de réflexion (proximité) avec TCRT5000

Avec un petit capteur qui envoie une lumière invisible et mesure ce qui revient, tu détectes la surface placée devant lui. Plus un objet ou une surface claire s'approche, plus la lumière renvoyée est

4.6(33)
43
Mesure de la distance à l'aide d'un écran LCD
#31Avancé
Premium

Mesure de la distance à l'aide d'un écran LCD

Un appareil qui mesure les distances sans règle : avance et recule ta main devant le capteur et regarde le nombre changer. Le HC-SR04 envoie une onde sonore et écoute son écho, puis l'Arduino calcule

4.6(45)
59