Кодты іздеу

Арқашықтықты лазерлік VL53L0X 6-пиндік модулі және Arduino үшін LCD1602-I2C көмегімен өлшеу

Арқашықтықты лазерлік VL53L0X 6-пиндік модулі және Arduino үшін LCD1602-I2C көмегімен өлшеу

Бұл оқулықта біз VL53L0X лазерлік сенсорының көмегімен қашықтықты өлшеуді және нәтижелерді I2C интерфейсі бар LCD1602 дисплейінде көрсетуді үйренеміз. Бұл жоба миллиметр немесе сантиметрмен дәл қашықтық өлшеулерін алуға мүмкіндік береді, бұл оны Arduino негізіндегі кез келген жобаға әмбебап қосымша етеді. Осы оқулықтың соңында сізде орнатуға және пайдалануға оңай толық функционалды қашықтықты өлшеу жүйесі болады.

VL53L0X 200cm range sensor

Бұған қол жеткізу үшін біз Arduino-мен I2C арқылы байланысатын VL53L0X лазерлік қашықтық сенсорын қолданамыз. LCD1602 дисплейі өлшенген қашықтықтың анық визуалды көрінісін қамтамасыз етеді. Кодтау процесін түсіну үшін бейнені қараңыз (бейнеде 00:00).

Аппараттық құрал түсіндірмесі

Бұл құрылымдағы негізгі компоненттер - VL53L0X лазерлік қашықтық сенсоры және LCD1602 дисплейі. VL53L0X қашықтықты дәл өлшеу үшін лазерді пайдаланады, бұл оны робототехника мен автоматтандыруды қоса алғанда, әртүрлі қолданбаларға жарамды етеді. Ол Arduino-мен оңай интеграциялауға мүмкіндік беретін I2C байланысын пайдаланып жұмыс істейді.

LCD1602 дисплейі - екі жолда 16 таңбаға дейін көрсете алатын I2C қолдауы бар таңба дисплейі. Ол дәстүрлі LCD-ге қарағанда аз түйреуіштерді қажет ететіндіктен, деректерді көрсету процесін жеңілдетеді. Бірге бұл компоненттер қуатты және пайдаланушыға ыңғайлы қашықтықты өлшеу жүйесін жасайды.

Деректер парағының мәліметтері

ӨндірушіSTMicroelectronics
Бөлшек нөміріVL53L0X
Логика/IO кернеуі1.8 В - 2.8 В
Қоректендіру кернеуі2.6 В - 3.5 В
Шығыс тогы (арнаға)
Ең жоғары ток (арнаға)
PWM жиілігі бойынша нұсқаулық
Кіріс логикалық шектері
Кернеудің төмендеуі / RDS(on) / қанығу
Жылулық шектеулер
Қаптама
Ескертулер / нұсқалар

  • Тиісті қоректендіру кернеуін қамтамасыз етіңіз (2.6 В - 3.5 В).
  • Қажет болса, SDA және SCL желілерінде жоғары тарту резисторларын қолданыңыз.
  • Қате көрсеткіштерді болдырмау үшін сенсорды шағылыстыратын беттерден алыс ұстаңыз.
  • I2C мекенжайын тексеріңіз (VL53L0X үшін әдепкі мән 0x29).
  • Жоғары температуралы ортада қолдансаңыз, жылудың таралуын ескеріңіз.

Сым қосу нұсқаулары

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

VL53L0X сенсоры мен LCD1602 дисплейін қосу үшін алдымен қуат пен жерді қосыңыз. VL53L0X сенсорының VCC түйреуішін Arduino-дағы 5V түйреуішіне және GND түйреуішін Arduino-ның жеріне қосыңыз. LCD1602 үшін оның VCC түйреуішін сол 5V және GND түйреуішін жерге қосыңыз.

Әрі қарай, I2C байланыс желілерін қосыңыз. VL53L0X сенсорының SDA түйреуіші Arduino-дағы A4 түйреуішіне, ал SCL түйреуіші A5 түйреуішіне қосылуы керек. XSHUT түйреуіші Arduino-дағы D12 түйреуішіне қосылуы мүмкін, бірақ оны қоспай да қалдыруға болады. 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(); 
}

Орнату функциясында біз сериялық байланыс пен 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);
}

Цикл ішінде біз 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 файлы

Басқа файлдар