Пребарување код

Мерење растојание со ласерски VL53L0X 6-пински модул и LCD1602-I2C за Arduino

Мерење растојание со ласерски VL53L0X 6-пински модул и LCD1602-I2C за Arduino

Во ова упатство, ќе научиме како да мериме растојание со помош на ласерскиот сензор VL53L0X и да ги прикажеме резултатите на LCD1602 со I2C интерфејс. Овој проект ви овозможува да добиете прецизни мерења на растојание во милиметри или сантиметри, што го прави разновиден додаток на секој проект базиран на Arduino. До крајот на ова упатство, ќе имате целосно функционален систем за мерење растојание кој е лесен за поставување и користење.

VL53L0X 200cm range sensor

За да го постигнеме ова, ќе го користиме ласерскиот сензор за растојание VL53L0X, кој комуницира со Arduino преку I2C. LCD1602 екранот ќе обезбеди јасна визуелна претстава на измереното растојание. За јасност во процесот на кодирање, ве молиме погледнете го видеото на (во видеото на 00:00).

Објаснување на хардверот

Главните компоненти во оваа изработка се ласерскиот сензор за растојание VL53L0X и LCD1602 екранот. VL53L0X користи ласер за прецизно мерење на растојание, што го прави погоден за различни апликации, вклучувајќи роботика и автоматизација. Работи со I2C комуникација, што овозможува лесна интеграција со Arduino.

LCD1602 екранот е I2C-овозможен екран за знаци кој може да прикаже до 16 знаци на две линии. Го поедноставува процесот на прикажување податоци, бидејќи бара помалку пинови од традиционалните LCD екрани. Заедно, овие компоненти создаваат моќен и кориснички ориентиран систем за мерење растојание.

Детали од техничката документација

ПроизводителSTMicroelectronics
Број на делVL53L0X
Логички/IO напон1.8 V до 2.8 V
Напон на напојување2.6 V до 3.5 V
Излезна струја (по канал)
Врвна струја (по канал)
Насоки за PWM фреквенција
Влезни логички прагови
Пад на напон / RDS(on) / заситување
Термички граници
Пакет
Белешки / варијанти

  • Осигурете соодветен напон на напојување (2.6 V до 3.5 V).
  • Користете pull-up отпорници на SDA и SCL линиите ако е потребно.
  • Чувајте го сензорот подалеку од рефлектирачки површини за да избегнете погрешни читања.
  • Проверете ја I2C адресата (стандардна е 0x29 за VL53L0X).
  • Размислете за дисипација на топлина ако користите во средини со висока температура.

Инструкции за поврзување

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

За да го поврзете сензорот VL53L0X и LCD1602 екранот, започнете со поврзување на напојувањето и заземјувањето. Поврзете го VCC пинот на VL53L0X со 5V пинот на Arduino и GND пинот со заземјувањето на Arduino. За LCD1602, поврзете го неговиот VCC со истиот 5V и GND со заземјувањето исто така.

Следно, поврзете ги I2C комуникациските линии. SDA пинот на VL53L0X треба да се поврзе со A4 пинот на Arduino, а SCL пинот треба да оди на A5. XSHUT пинот може да се поврзе со D12 на Arduino, но може да се остави и неповрзан. За LCD1602, осигурете дека SDA и SCL се исто така поврзани со истите пинови како сензорот VL53L0X.

Примери на код и објаснување

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(); 
}

Во функцијата setup, ја иницијализираме сериската комуникација и I2C магистралата. sensor.init() го иницијализира сензорот VL53L0X, додека lcd.begin() го иницијализира LCD екранот. Позадинското осветлување на екранот се вклучува, овозможувајќи лесна видливост.

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

Во рамките на loop, континуирано го читаме растојанието користејќи sensor.readRangeContinuousMillimeters() и го печатиме на серискиот монитор. LCD екранот се ажурира со мерењето на растојанието, обезбедувајќи повратна информација во реално време. Доцнењето од 100 милисекунди осигурува дека читањата не се ажурираат премногу често, овозможувајќи лесно читање.

Демонстрација / Што да очекувате

Кога ќе се вклучи, системот континуирано ќе го мери растојанието и ќе ги прикажува резултатите на LCD екранот. Можете да очекувате да ги видите вредностите на растојанието како се менуваат додека движите предмети поблиску или подалеку од сензорот. Ако има какви било проблеми со сензорот, како грешки при истек на време, соодветни пораки ќе бидат испечатени на серискиот монитор (во видеото на 03:15).

Слики

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
Јазик: 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);
}

Работи што можеби ќе ви требаат

Ресурси и референци

Датотеки📁

Fritzing датотека

Други датотеки