Search Code

Măsurarea distanței cu un modul laser VL53L0X cu 6 pini și afișaj TM1637 pentru Arduino

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.

VL53L0X 200cm range sensor
TM1637 4 digit display module

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ătorSTMicroelectronics
Număr de piesăVL53L0X
Tensiune logică/IO2,6 V - 3,5 V
Tensiune de alimentare2,6 V - 5 V
Temperatură de operare-20 °C până la 70 °C
Gamă de măsurare30 mm până la 2000 mm
Frecvență I2C400 kHz
Setare timeout500 ms
PachetModul 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

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

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.

Imagini

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

Resurse și referințe

Încă nu sunt resurse.

Fișiere📁

Fișă tehnică (pdf)

Fișier Fritzing

Manualul utilizatorului

Alte fișiere