Code zoeken

Afstand meten met een lasermodule VL53L0X 6-pins en TM1637-display voor Arduino

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.

VL53L0X 200cm range sensor
TM1637 4 digit display module

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

FabrikantSTMicroelectronics
OnderdeelnummerVL53L0X
Logica/IO-spanning2,6 V - 3,5 V
Voedingsspanning2,6 V - 5 V
Bedrijfstemperatuur-20 °C tot 70 °C
Meetbereik30 mm tot 2000 mm
I2C-frequentie400 kHz
Timeout-instelling500 ms
Behuizing6-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

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

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.

Afbeeldingen

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
Taal: 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);
}

Hulpmiddelen en referenties

Nog geen middelen.

Bestanden📁

Datasheet (pdf)

Fritzing-bestand

Gebruikershandleiding

Andere bestanden