Search Code

Kupima Umbali kwa Laser VL53L0X Moduli ya Pini 6 na LCD1602-I2C kwa Arduino

Kupima Umbali kwa Laser VL53L0X Moduli ya Pini 6 na LCD1602-I2C kwa Arduino

Katika mafunzo haya, tutajifunza jinsi ya kupima umbali kwa kutumia sensor ya laser ya VL53L0X na kuonyesha matokeo kwenye LCD1602 yenye kiolesura cha I2C. Mradi huu unakuruhusu kupata vipimo sahihi vya umbali kwa milimita au sentimita, na kuifanya kuwa nyongeza yenye matumizi mengi kwa mradi wowote unaotegemea Arduino. Kufikia mwisho wa mafunzo haya, utakuwa na mfumo kamili wa kupima umbali ambao ni rahisi kusanidi na kutumia.

VL53L0X 200cm range sensor

Ili kufikia hili, tutatumia sensor ya umbali ya laser ya VL53L0X, ambayo inawasiliana na Arduino kupitia I2C. Onyesho la LCD1602 litatoa uwakilishi wazi wa kuona wa umbali uliopimwa. Kwa uwazi zaidi kuhusu mchakato wa kuandika msimbo, tafadhali rejea video kwenye (katika video saa 00:00).

Vifaa Vimeelezwa

Vipengele vikuu katika mradi huu ni sensor ya umbali ya laser ya VL53L0X na onyesho la LCD1602. VL53L0X hutumia laser kupima umbali kwa usahihi, na kuifanya kufaa kwa matumizi mbalimbali, ikiwa ni pamoja na robotiki na otomatiki. Inafanya kazi kwa kutumia mawasiliano ya I2C, ambayo inaruhusu ujumuishaji rahisi na Arduino.

Onyesho la LCD1602 ni onyesho la herufi linalotumia I2C ambalo linaweza kuonyesha hadi herufi 16 kwenye mistari miwili. Inarahisisha mchakato wa kuonyesha data, kwani inahitaji pini chache kuliko LCD za kawaida. Kwa pamoja, vipengele hivi vinaunda mfumo wenye nguvu na rafiki kwa mtumiaji wa kupima umbali.

Maelezo ya Datasheet

MtengenezajiSTMicroelectronics
Nambari ya sehemuVL53L0X
Voltage ya mantiki/IO1.8 V hadi 2.8 V
Voltage ya usambazaji2.6 V hadi 3.5 V
Mkondo wa pato (kwa kila chaneli)
Mkondo wa kilele (kwa kila chaneli)
Mwongozo wa mzunguko wa PWM
Viwango vya mantiki ya kuingiza
Kushuka kwa voltage / RDS(on) / kueneza
Mipaka ya joto
Kifurushi
Vidokezo / lahaja

  • Hakikisha voltage sahihi ya usambazaji (2.6 V hadi 3.5 V).
  • Tumia resistors za kuvuta-juu kwenye mistari ya SDA na SCL ikihitajika.
  • Weka sensor mbali na nyuso zinazoakisi ili kuepuka usomaji usio sahihi.
  • Thibitisha anwani ya I2C (chaguo-msingi ni 0x29 kwa VL53L0X).
  • Zingatia utoaji wa joto ikiwa unatumia katika mazingira ya joto la juu.

Maagizo ya Uunganishaji wa Waya

Arduino wiring for VL53L0X and LCD1602 I2C (4 wires LCD)

Ili kuunganisha sensor ya VL53L0X na onyesho la LCD1602, anza kwa kuunganisha nguvu na ardhi. Unganisha pini ya VCC ya VL53L0X kwenye pini ya 5V kwenye Arduino na pini ya GND kwenye ardhi ya Arduino. Kwa LCD1602, unganisha VCC yake kwenye 5V sawa na GND kwenye ardhi pia.

Ifuatayo, unganisha mistari ya mawasiliano ya I2C. Pini ya SDA ya VL53L0X inapaswa kuunganishwa kwenye pini ya A4 kwenye Arduino, na pini ya SCL inapaswa kwenda kwenye A5. Pini ya XSHUT inaweza kuunganishwa kwenye D12 kwenye Arduino, lakini pia inaweza kuachwa bila kuunganishwa. Kwa LCD1602, hakikisha SDA na SCL pia zimeunganishwa kwenye pini sawa na sensor ya VL53L0X.

Mifano ya Msimbo na Maelezo

VL53L0X sensor;

#include 
LiquidCrystal_I2C lcd(0x27, 16, 2);

void setup() {
  Serial.begin(9600);
  Wire.begin();
  sensor.init();
  sensor.setTimeout(500);
  sensor.startContinuous();
  lcd.begin();
  lcd.backlight(); 
}

Katika kazi ya setup, tunaanzisha mawasiliano ya serial na basi ya I2C. sensor.init() inaanzisha sensor ya VL53L0X, wakati lcd.begin() inaanzisha onyesho la LCD. Mwangaza wa nyuma wa onyesho unawashwa, kuruhusu kuonekana kwa urahisi.

void loop() {
  int distance = sensor.readRangeContinuousMillimeters();
  Serial.print("Distance: ");
  lcd.clear();
  lcd.print("Robojax VL53L0X");
  lcd.setCursor(0,1); 
  lcd.print("Dist.: ");
  lcd.setCursor(7,1); 
  lcd.print(distance); 
  Serial.println();
  delay(100);
}

Ndani ya kitanzi, tunasoma umbali kila mara kwa kutumia sensor.readRangeContinuousMillimeters() na kuuchapisha kwenye mfuatiliaji wa serial. LCD inasasishwa na kipimo cha umbali, ikitoa maoni ya wakati halisi. Ucheleweshaji wa milisekunde 100 unahakikisha kwamba usomaji hausasishwi mara kwa mara sana, kuruhusu usomaji rahisi.

Maonyesho / Nini cha Kutarajia

Wakati imewashwa, mfumo utapima umbali kila mara na kuonyesha matokeo kwenye LCD. Unaweza kutarajia kuona maadili ya umbali yakibadilika unaposogeza vitu karibu au mbali zaidi na sensor. Ikiwa kuna matatizo yoyote na sensor, kama vile makosa ya muda, ujumbe unaofaa utachapishwa kwenye mfuatiliaji wa serial (katika video saa 03:15).

Bilder

VL53L0X 200cm range sensor
VL53L0X 200cm range sensor
Arduino wiring for VL53L0X and LCD1602 I2C (4 wires LCD)
Arduino wiring for VL53L0X and LCD1602 I2C (4 wires LCD)
113-Measure distance with a laser VL53L0X 6-pin module and an LCD1602-I2C for Arduino
Språk: C++
/* 

This is Arduino code to measure distance with VL53L0X and display it on LCD1602 with I2C module.
Distance is displayed in mm (millimeter) or cm (centimeter).

Original Laser Sensor source: https://github.com/adafruit/Adafruit_VL53L0X
Modified by Ahmad Shamshiri for RoboJax.com
Date modified: Jun 28, 2018 at 19:06 in Ajax, Ontario, Canada

Watch the video instruction for this code: https://youtu.be/t14ly7Y09oI
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)

LCD1602 Pin

*/


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

VL53L0X sensor;


#include <LiquidCrystal_I2C.h>
// Set the LCD address to 0x27 for a 16 chars and 2 line display
LiquidCrystal_I2C lcd(0x27, 16, 2);

const int type = 1;// 1=mm , 2= cm
String unit;// variable for unit, mm or cm
void setup()
{

  Serial.begin(9600);
  Wire.begin();

  sensor.init();
  sensor.setTimeout(500);

  // 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();
  
  // initialize the LCD, 
  lcd.begin();
  // Turn on the blacklight and print a message.
  lcd.backlight(); 
}

void loop()
{
  int distance =sensor.readRangeContinuousMillimeters();
  //int distance =sensor.startContinuous(100);

 //distance = distance;
  Serial.print("Distance: ");

  //start of loop Robojax code for LCD with I2C
  lcd.clear();
  lcd.print("Robojax VL53L0X");
  lcd.setCursor (0,1); // go to start of 2nd line
  lcd.print("Dist.: ");
  lcd.setCursor (7,1); // go to start of 2nd line
  if(type ==2){
    float distanceCM = (float) (distance/10.0);
      unit ="cm";
      lcd.print(distanceCM);
      Serial.print(distanceCM);
      Serial.print(unit);      
    }else{
    unit ="mm";
      lcd.print(distance);
      Serial.print(distance);
      Serial.print(unit);       
    }  

  lcd.print(unit);    
  
  if (sensor.timeoutOccurred()) { Serial.print(" TIMEOUT"); }

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

Tänker att du kanske behöver

Resurser och referenser

Filer📁

Fritzing-fil

Andra filer