Afstand meten met een lasermodule VL53L0X 6-pins en TM1637-display voor Arduino
In deze tutorial leren we hoe we afstand kunnen meten met de VL53L0X laserafstandssensor en de metingen kunnen weergeven op een TM1637 7-segmentdisplay. Dit project combineert beide componenten om een eenvoudig maar effectief afstandsmeetinstrument te creëren. De VL53L0X gebruikt lasertechnologie om nauwkeurige afstandsmetingen te leveren, terwijl het TM1637-display deze metingen op een gebruiksvriendelijke manier weergeeft.


We doorlopen de benodigde hardware, bedradingsinstructies en de code die nodig is om alles werkend te krijgen. Aan het einde van deze tutorial heb je een werkend afstandsmeetapparaat dat in verschillende toepassingen kan worden gebruikt. Voor een visuele handleiding, bekijk zeker de video (in video op 00:00).
Hardware Uitgelegd
De primaire componenten voor dit project zijn de VL53L0X laserafstandssensor en de TM1637 displaymodule. De VL53L0X is een time-of-flight-sensor die de afstand tot een object meet door een laserstraal uit te zenden en de tijd te berekenen die de reflectie nodig heeft om terug te keren. Het werkt op een spanningsbereik van 2,6V tot 3,5V, maar kan ook werken met 5V dankzij een geïntegreerde spanningsregelaar.
De TM1637 is een displaydriver die een 7-segment LED-display aanstuurt. Het communiceert via een eenvoudige 2-draadsinterface (CLK en DIO), waardoor het eenvoudig te verbinden is met een Arduino. Het display kan numerieke waarden weergeven en is perfect voor het visualiseren van de afstandsmetingen van de VL53L0X-sensor.
Datasheet Details
| Fabrikant | STMicroelectronics |
|---|---|
| Onderdeelnummer | VL53L0X |
| Logica/IO-spanning | 2,6 V - 3,5 V |
| Voedingsspanning | 2,6 V - 5 V |
| Bedrijfstemperatuur | -20 °C tot 70 °C |
| Meetbereik | 30 mm tot 2000 mm |
| I2C-frequentie | 400 kHz |
| Timeout-instelling | 500 ms |
| Behuizing | 6-pins module |
- Zorg voor een correcte voedingsspanning (5V is acceptabel).
- Verbind de XSHUT-pin om lekkage te voorkomen met een pull-upweerstand.
- Gebruik I2C voor communicatie; verbind SDA en SCL op de juiste manier.
- Behandel timeouts in de code om onverwacht gedrag te voorkomen.
- Wees alert op het bedrijfstemperatuurbereik voor nauwkeurigheid.
Bedradingsinstructies

Om de VL53L0X en het TM1637-display te bedraden, begin je met het verbinden van de VCC-pin van de VL53L0X met de 5V-pin op de Arduino en de GND-pin met een aardingspin op de Arduino. Verbind vervolgens de SDA-pin van de VL53L0X met de A4-pin op de Arduino, die doorgaans wordt gebruikt voor I2C-datacommunicatie. De SCL-pin moet worden verbonden met de A5-pin op de Arduino, die wordt gebruikt voor het kloksignaal.
Voor het TM1637-display verbind je de CLK-pin met digitale pin 2 op de Arduino en de DIO-pin met digitale pin 3. Verbind ten slotte de XSHUT-pin van de VL53L0X met digitale pin 12 op de Arduino. Zorg ervoor dat ongebruikte pinnen, zoals GPIO1 op de VL53L0X, niet worden aangesloten. Deze opstelling stelt de Arduino in staat om effectief te communiceren met zowel de sensor als het display.
Codevoorbeelden & Uitleg
De code initialiseert de sensor en het display, stelt de I2C-communicatie in en leest continu de afstandsmetingen. Hieronder staat een fragment dat de setup-functie toont waarin de pinnen worden geconfigureerd en de sensor wordt geïnitialiseerd:
void setup() {
pinMode(12, INPUT_PULLUP); // stel pin 12 in als invoer
digitalWrite(12, HIGH); // zet pin 12 hoog (5V)
Serial.begin(9600);
Wire.begin(); // I2C-communicatie geïnitialiseerd
sensor.init(); // afstandssensor is geïnitialiseerd
sensor.setTimeout(500); // timeout is ingesteld
sensor.startContinuous(); // type meting is ingesteld
}
In deze setup-functie wordt de pin voor XSHUT geconfigureerd als invoer met een pull-upweerstand, en wordt de sensor geïnitialiseerd voor continue afstandsmeting. De seriële monitor wordt ook ingesteld om de afstandsmetingen weer te geven.
Vervolgens leest de hoofdloop de afstand en werkt het display bij. Hier is een gericht fragment uit de loop-functie:
void loop() {
int distance = sensor.readRangeContinuousMillimeters(); // lees de afstand in mm
display.setSegments(clearLED); // verwijder vorige waarde van LED-display
display.showNumberDec(distance, false, 4, 0); // toon de afstand
Serial.print("Afstand: ");
Serial.print(distance); // print afstand op seriële monitor
}
Deze loop leest continu de afstand van de sensor en werkt het TM1637-display bij met de nieuwste meting. Het print ook de afstand naar de seriële monitor voor foutopsporing. Als je de volledige code wilt zien, wordt deze onder het artikel geladen.
Demonstratie / Wat te Verwachten
Na het voltooien van de setup en het uploaden van de code, zou je de afstand gemeten door de VL53L0X op de TM1637 moeten zien. Wanneer je een object dichterbij of verder weg van de sensor beweegt, zal de weergegeven waarde dienovereenkomstig veranderen. Als je onverwachte metingen ervaart, zorg er dan voor dat de sensor niet wordt geblokkeerd en dat het oppervlak van het object geschikt is voor laserreflectie (in video op 09:30).
Veelvoorkomende valkuilen zijn omgekeerde bedrading of het niet correct initialiseren van de sensor, wat kan leiden tot timeout-fouten. Zorg ervoor dat de juiste pinnen zijn aangesloten en dat de sensor voldoende wordt gevoed voor nauwkeurige afstandsmetingen.
/* 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);
}
Hulpmiddelen en referenties
Nog geen middelen.
Bestanden📁
Datasheet (pdf)
-
TM1637 Datasheet
/download/datasheet/robojax_TM1637_datasheet.pdf0.67 MB
Fritzing-bestand
-
TM1637 Seven Segment module
TM1637.fzpz0.01 MB -
TM1637 4 digit seven segment display
TM1637-1.fzpz0.01 MB -
Adafruit VL6180X Time of Flight Distance SensorFritzing part for the Adafruit VL6180X Time of Flight distance sensor. This sensor measures absolute distance up to 100mm and ambient light, communicating via I2C. Includes the sensor breakout board and pin connections for use in Fritzing projects.
Adafruit VL6180X Time of Flight Distance Sensor-1.fzpz0.02 MB
Gebruikershandleiding
-
TM1637 Display Handleiding
robojax-TM1637_display_manual.pdf0.31 MB
Andere bestanden
-
Polou VL53L0X bibliotheek
robojax-VL53L0X-polou-arduino-master.zip0.02 MB -
VL53L0X_Distance_sensor_purple
VL53L0X_Distance_sensor_purple.fzpz0.01 MB