Code de recherche

Mesurer la distance avec un module laser VL53L0X à 6 broches et un afficheur TM1637 pour Arduino

Mesurer la distance avec un module laser VL53L0X à 6 broches et un afficheur TM1637 pour Arduino


Dans ce tutoriel, nous allons apprendre comment mesurer la distance à l'aide du capteur de distance laser VL53L0X et afficher les mesures sur un afficheur à 7 segments TM1637. Ce projet combine les deux composants pour créer un outil de mesure de distance simple mais efficace. Le VL53L0X utilise la technologie laser pour fournir des mesures de distance précises, tandis que l'afficheur TM1637 présente ces mesures dans un format convivial.

VL53L0X 200cm range sensor
TM1637 4 digit display module

Nous passerons en revue le matériel requis, les instructions de câblage et le code nécessaires pour tout mettre en marche. À la fin de ce tutoriel, vous disposerez d'un appareil de mesure de distance fonctionnel pouvant être utilisé dans diverses applications. Pour un guide visuel, consultez la vidéo (voir à 00:00).

Le matériel expliqué

Les composants principaux de ce projet sont le capteur de distance laser VL53L0X et le module d'affichage TM1637. Le VL53L0X est un capteur à temps de vol (ToF) qui mesure la distance d'un objet en émettant un faisceau laser et en calculant le temps que met le signal réfléchi à revenir. Il fonctionne sur une plage de tensions de 2,6 V à 3,5 V mais peut aussi fonctionner sous 5 V grâce à un régulateur de tension intégré.

Le TM1637 est un pilote d'affichage qui contrôle un afficheur LED à 7 segments. Il communique via une interface simple à 2 fils (CLK et DIO), ce qui le rend facile à connecter à un Arduino. L'afficheur peut afficher des valeurs numériques et est parfait pour visualiser les mesures de distance du capteur VL53L0X.

Détails de la fiche technique

FabricantSTMicroelectronics
Numéro de pièceVL53L0X
Tension logique / E/S2,6 V - 3,5 V
Tension d'alimentation2,6 V à 5 V
Température de fonctionnementde -20 °C à 70 °C
Plage de mesurede 30 mm à 2000 mm
Fréquence I2C400 kHz
Paramètre du délai d'attente500 ms
Paquetmodule à 6 broches

  • Assurez-vous d'une alimentation appropriée (5 V est acceptable).
  • Connectez la broche XSHUT à une résistance de pull-up pour éviter les fuites de courant.
  • Utilisez l'I2C pour la communication ; connectez correctement SDA et SCL.
  • Gérez les délais d'attente dans le code pour éviter des comportements inattendus.
  • Veillez à respecter la plage de température de fonctionnement pour garantir la précision.

Instructions de câblage

Arduino wiring for VL53L0X with TM1637 4 digit dispaly
Arduino wiring for VL53L0X with TM1637 4 digit dispaly

Pour câbler le VL53L0X et l'afficheur TM1637, commencez par connecter la broche VCC du VL53L0X à la broche 5V de l'Arduino et la broche GND à une broche de masse de l'Arduino. Ensuite, connectez la broche SDA du VL53L0X à la broche A4 de l'Arduino, qui est généralement utilisée pour la communication de données I2C. La broche SCL doit être connectée à la broche A5 de l'Arduino, utilisée pour le signal d'horloge.

Pour l'afficheur TM1637, connectez la broche CLK à la broche numérique 2 de l'Arduino et la broche DIO à la broche numérique 3. Enfin, connectez la broche XSHUT du VL53L0X à la broche numérique 12 de l'Arduino. Assurez-vous que les broches inutilisées, telles que GPIO1 sur le VL53L0X, restent non connectées. Cette configuration permettra à l'Arduino de communiquer efficacement avec le capteur et l'afficheur.

Exemples de code et tutoriel pas à pas

Le code initialise le capteur et l'écran, configure la communication I2C et lit en continu les mesures de distance. Ci-dessous se trouve un extrait montrant la fonction setup où les broches sont configurées et le capteur est initialisé :

void setup() {
  pinMode(12, INPUT_PULLUP); // set pin 12 for input
  digitalWrite(12, HIGH); // set pin 12 high (5V)
  Serial.begin(9600);
  Wire.begin(); // I2C communication initialized
  sensor.init(); // distance sensor is initialized
  sensor.setTimeout(500); // time out is set
  sensor.startContinuous(); // type of measurement is set
}

Dans cette fonction setup, la broche XSHUT est configurée en entrée avec une résistance pull-up, et le capteur est initialisé pour des mesures de portée en continu. Le moniteur série est également configuré pour afficher les relevés de distance.

Ensuite, la boucle principale lit la distance et met à jour l'affichage. Voici un extrait ciblé de la fonction loop :

void loop() {
  int distance = sensor.readRangeContinuousMillimeters(); // read the distance in mm
  display.setSegments(clearLED); // remove previous value from LED display
  display.showNumberDec(distance, false, 4, 0); // display the distance
  Serial.print("Distance: ");
  Serial.print(distance); // print distance on serial monitor
}

Cette boucle lit en continu la distance fournie par le capteur et met à jour l'afficheur TM1637 avec la dernière mesure. Elle affiche également la distance sur le moniteur série à des fins de débogage. Si vous souhaitez voir le code complet, il sera affiché sous l'article.

Démonstration / À quoi s'attendre

Après avoir terminé la configuration et téléversé le code, vous devriez voir la distance mesurée par le VL53L0X affichée sur le TM1637. Lorsque vous approchez ou éloignez un objet du capteur, la valeur affichée changera en conséquence. Si vous obtenez des mesures inattendues, vérifiez que le capteur n'est pas obstrué et que la surface de l'objet convient à la réflexion du laser (dans la vidéo à 09:30).

Les pièges courants incluent un câblage inversé ou une initialisation incorrecte du capteur, ce qui peut entraîner des erreurs de dépassement de délai. Assurez-vous que les bonnes broches sont connectées et que le capteur est alimenté correctement pour des mesures de distance précises.

Images

VL53L0X 200cm range sensor
VL53L0X 200cm range sensor
TM1637 4 digit display module
TM1637 4 digit display module
Arduino wiring for VL53L0X with TM1637 4 digit dispaly
Arduino wiring for VL53L0X with TM1637 4 digit dispaly
104-Measure distance with a Laser VL53L0X 6-pin module and a TM1637 LED display for Arduino
Langue: C++
/* This example shows how to use continuous mode to take readings.

This is Arduino code to measure distance with VL53L0X and display it on a TM1637 LED 7-segment display.

Original Laser Sensor source: https://github.com/adafruit/Adafruit_VL53L0X
Modified by Ahmad Shamshiri for RoboJax.com
Date modified: May 31, 2018 at 19:25 in Ajax, Ontario, Canada
You have to watch 1 video before using this code:
1- Watch VL53L0X video and get code https://youtu.be/1n9eJ9HaYpE
2- Watch TM1637 video and get code https://robojax.com?vid=robojax-TM1637
You can get this code from Robojax.com

Pin connection

VL53L0X Pin  Arduino Pin
VCC         5V
GND         GND
SDA         A4 or SDA if available
SCL         A5 or SCL if available
GPIO1       leave it unconnected
XSHUT       D12 (digital 12 or pin 12)
*/


#include <Wire.h>
#include <VL53L0X.h>

VL53L0X sensor;

/////// start of TM1637 Display
#include <Arduino.h>
#include <TM1637Display.h> 
#define CLK 2
#define DIO 3
#define TEST_DELAY   500
TM1637Display display(CLK, DIO);
uint8_t clearLED[] = { 0x0, 0x0, 0x0, 0x0 }; // value for clearing the LEDs
////// End of TM1637 Display 


void setup()
{
  pinMode(12,INPUT_PULLUP);// set pin 12 for input
  digitalWrite(12,HIGH);// set pin 12 high (5V)
  Serial.begin(9600);
  Wire.begin();// I2C communication initialized

  sensor.init();// distance sensor is initialized
  sensor.setTimeout(500); // time out is set

  // Start continuous back-to-back mode (take readings as
  // fast as possible).  To use continuous timed mode
  // instead, provide a desired inter-measurement period in
  // ms (e.g. sensor.startContinuous(100)).
  sensor.startContinuous();// type of measurement is set
    Serial.println("VL53L0X with MAX6675 test");
    delay(500);
    display.setBrightness(0x0f);// set brightness for display
}

void loop()
{
  int distance =sensor.readRangeContinuousMillimeters();// read the distance in mm
  display.setSegments(clearLED);// remove previous value from LED display
  display.showNumberDec(distance, false, 4, 0);// display the distance

  
 //distance = distance;
  Serial.print("Distance: ");
  Serial.print(distance);// print distance on serial monitor
  Serial.print("mm");
  if (sensor.timeoutOccurred()) { Serial.print(" TIMEOUT"); }

  Serial.println();
  delay(100);
}

Ressources et références

Aucune ressource pour le moment.

Fichiers📁

Fiche technique (pdf)

Fichier Fritzing

Manuel de l'Utilisateur

Autres fichiers