Măsurarea distanței cu un modul laser VL53L0X cu 6 pini și afișaj TM1637 pentru Arduino
În acest tutorial, vom învăța cum să măsurăm distanța folosind senzorul laser de distanță VL53L0X și să afișăm citirile pe un afișaj cu 7 segmente TM1637. Acest proiect combină ambele componente pentru a crea un instrument de măsurare a distanței simplu, dar eficient. VL53L0X utilizează tehnologia laser pentru a oferi citiri precise ale distanței, în timp ce afișajul TM1637 prezintă aceste citiri într-un format ușor de utilizat.


Vom parcurge hardware-ul necesar, instrucțiunile de cablare și codul necesar pentru a pune totul în funcțiune. Până la sfârșitul acestui tutorial, veți avea un dispozitiv funcțional de măsurare a distanței care poate fi utilizat în diverse aplicații. Pentru un ghid vizual, asigurați-vă că urmăriți videoclipul (în videoclip la 00:00).
Hardware Explicat
Componentele principale pentru acest proiect sunt senzorul laser de distanță VL53L0X și modulul de afișaj TM1637. VL53L0X este un senzor cu timp de zbor care măsoară distanța până la un obiect prin emiterea unui fascicul laser și calcularea timpului necesar pentru ca reflexia să revină. Funcționează pe o gamă de tensiune de 2,6V la 3,5V, dar poate funcționa și cu 5V datorită unui regulator de tensiune integrat.
TM1637 este un driver de afișaj care controlează un afișaj LED cu 7 segmente. Comunică printr-o interfață simplă cu 2 fire (CLK și DIO), ceea ce face ușoară conectarea la un Arduino. Afișajul poate afișa valori numerice și este perfect pentru vizualizarea măsurătorilor de distanță de la senzorul VL53L0X.
Detalii din Fișa Tehnică
| Producător | STMicroelectronics |
|---|---|
| Număr de piesă | VL53L0X |
| Tensiune logică/IO | 2,6 V - 3,5 V |
| Tensiune de alimentare | 2,6 V - 5 V |
| Temperatură de operare | -20 °C până la 70 °C |
| Gamă de măsurare | 30 mm până la 2000 mm |
| Frecvență I2C | 400 kHz |
| Setare timeout | 500 ms |
| Pachet | Modul cu 6 pini |
- Asigurați o alimentare adecvată (5V este acceptabil).
- Conectați pinul XSHUT pentru a evita scurgerile cu un rezistor pull-up.
- Utilizați I2C pentru comunicare; conectați SDA și SCL corespunzător.
- Gestionați timeout-urile în cod pentru a evita comportamente neașteptate.
- Fiți atenți la gama de temperatură de operare pentru precizie.
Instrucțiuni de Cablare

Pentru a cabla VL53L0X și afișajul TM1637, începeți prin conectarea pinului VCC al VL53L0X la pinul de 5V de pe Arduino și a pinului GND la un pin de masă de pe Arduino. Apoi, conectați pinul SDA al VL53L0X la pinul A4 de pe Arduino, care este utilizat de obicei pentru comunicarea datelor I2C. Pinul SCL ar trebui conectat la pinul A5 de pe Arduino, utilizat pentru semnalul de ceas.
Pentru afișajul TM1637, conectați pinul CLK la pinul digital 2 de pe Arduino și pinul DIO la pinul digital 3. În final, conectați pinul XSHUT al VL53L0X la pinul digital 12 de pe Arduino. Asigurați-vă că orice pini neutilizați, cum ar fi GPIO1 pe VL53L0X, rămân neconectați. Această configurare va permite Arduino să comunice eficient atât cu senzorul, cât și cu afișajul.
Exemple de Cod și Explicații
Codul inițializează senzorul și afișajul, configurează comunicarea I2C și citește continuu măsurătorile de distanță. Mai jos este un fragment care arată funcția de configurare unde pinii sunt configurați și senzorul este inițializat:
void setup() {
pinMode(12, INPUT_PULLUP); // setează pinul 12 pentru intrare
digitalWrite(12, HIGH); // setează pinul 12 la nivel înalt (5V)
Serial.begin(9600);
Wire.begin(); // comunicarea I2C este inițializată
sensor.init(); // senzorul de distanță este inițializat
sensor.setTimeout(500); // timeout-ul este setat
sensor.startContinuous(); // tipul de măsurare este setat
}
În această funcție de configurare, pinul pentru XSHUT este configurat ca intrare cu un rezistor pull-up, iar senzorul este inițializat pentru măsurarea continuă a distanței. Monitorul serial este, de asemenea, configurat pentru a afișa citirile de distanță.
Apoi, bucla principală citește distanța și actualizează afișajul. Iată un extras concentrat din funcția loop:
void loop() {
int distance = sensor.readRangeContinuousMillimeters(); // citește distanța în mm
display.setSegments(clearLED); // elimină valoarea anterioară de pe afișajul LED
display.showNumberDec(distance, false, 4, 0); // afișează distanța
Serial.print("Distance: ");
Serial.print(distance); // afișează distanța pe monitorul serial
}
Această buclă citește continuu distanța de la senzor și actualizează afișajul TM1637 cu cea mai recentă măsurătoare. De asemenea, afișează distanța pe monitorul serial pentru depanare. Dacă doriți să vedeți codul complet, acesta se va încărca mai jos în articol.
Demonstrație / Ce Să Vă Așteptați
După finalizarea configurației și încărcarea codului, ar trebui să vedeți distanța măsurată de VL53L0X afișată pe TM1637. Pe măsură ce mutați un obiect mai aproape sau mai departe de senzor, valoarea afișată se va schimba corespunzător. Dacă întâmpinați citiri neașteptate, asigurați-vă că senzorul nu este obstrucționat și că suprafața obiectului este potrivită pentru reflexia laserului (în videoclip la 09:30).
Capcanele comune includ cablarea inversată sau inițializarea incorectă a senzorului, ceea ce poate duce la erori de timeout. Asigurați-vă că pinii corecți sunt conectați și că senzorul este alimentat adecvat pentru măsurători precise ale distanței.
/* 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);
}
Resurse și referințe
Încă nu sunt resurse.
Fișiere📁
Fișă tehnică (pdf)
-
Foaie de date TM1637
/download/datasheet/robojax_TM1637_datasheet.pdf0.67 MB
Fișier Fritzing
-
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
Manualul utilizatorului
-
Manual de utilizare TM1637
robojax-TM1637_display_manual.pdf0.31 MB
Alte fișiere
-
Biblioteca Polou VL53L0X
robojax-VL53L0X-polou-arduino-master.zip0.02 MB -
VL53L0X_Distance_sensor_purple
VL53L0X_Distance_sensor_purple.fzpz0.01 MB