Search Code

Somo la 78: Onyesha umbali kutoka VL53L0X kwenye LCD | Kozi ya Hatua kwa Hatua ya Arduino

Somo la 78: Onyesha umbali kutoka VL53L0X kwenye LCD | Kozi ya Hatua kwa Hatua ya Arduino

Mwongozo huu unaonyesha jinsi ya kujenga kipimo cha umbali cha laser sahihi kwa kutumia sensor ya VL53L0X ya muda wa kuruka na onyesho la LCD 16x2 na moduli ya I2C. Mradi huu ni bora kwa watengenezaji wanaotaka kuongeza kipimo sahihi cha umbali kisicho na mgusano kwenye ubunifu wao. VL53L0X hutumia laser kupima umbali, na kuifanya kuwa bora kwa matumizi ambapo sensor za ultrasonic zinaweza kushindwa, kama vile kupima kiwango cha kujaza kwenye tanki au kugundua nafasi halisi ya kitu kwenye mkanda wa conveyor.

Hapa kuna njia kadhaa za vitendo za kutumia mradi huu:

  • Mlishaji wa Wanyama wa Kiotomatiki: Pima kiwango cha chakula kwenye chombo ili kuanzisha kujaza tena au kutuma taarifa.
  • Pipa la Taka la Kisasa: Gundua jinsi pipa lilivyojaa na kukuarifu linapohitaji kutupwa.
  • Kipimo cha Urefu cha DIY: Unda chombo sahihi cha kupimia vitu vidogo au kufuatilia ukuaji wa mtoto.
  • Msaidizi wa Kuegesha: Jenga mfumo wa sensor kusaidia kuegesha kwa usahihi kwenye karakana au nafasi nyembamba.
  • Roboti: Itumie kwenye roboti kugundua vizuizi au kupima umbali hadi ukutani kwa urambazaji.
VL53L0x_pin_round_module

Vifaa Vinavyohitajika

  • Bodi ya Arduino (mfano, Uno)
  • Sensor ya Umbali ya Laser VL53L0X
  • Onyesho la LCD 1602 na Moduli ya I2C
  • Waya za Kurukia

Mwongozo wa Uunganishaji

Uunganishaji wa mradi huu ni rahisi, kutokana na itifaki ya I2C, ambayo inaruhusu onyesho la LCD na sensor kuwasiliana kupitia waya mbili zile zile. Sensor ya VL53L0X inahitaji usambazaji wa nguvu wa 5V, ambao hutolewa moja kwa moja kutoka kwenye pini ya 5V ya Arduino. Ili kuhakikisha sensor ina chanzo thabiti cha nguvu, pini ya ziada inatumiwa kama VCC ya pili. (kwenye video saa 00:27)

VL53L0X_LCD1602_wiring-3
VL53L0X_LCD1602_wiring-2
VL53L0X_LCD1602_wiring-1
VL53L0X_LCD1602_wiring-4

Hapa kuna mchoro wa uunganishaji:

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

Uunganishaji ni kama ifuatavyo:

  • VL53L0X VCC -> Arduino 5V na Pini 13 (Pini 13 imewekwa kama pato la dijiti kutoa utulivu wa ziada wa nguvu).
  • VL53L0X GND -> Arduino GND.
  • VL53L0X SCL -> Arduino SCL (A5).
  • VL53L0X SDA -> Arduino SDA (A4).
  • LCD I2C VCC -> Arduino 5V.
  • LCD I2C GND -> Arduino GND.
  • LCD I2C SCL -> Arduino SCL (A5).
  • LCD I2C SDA -> Arduino SDA (A4).

Ikiwa unatumia mfano tofauti wa Arduino, pini za I2C zinaweza kuwa mahali pengine. Pini za SDA na SCL mara nyingi huandikwa moja kwa moja kwenye bodi. (kwenye video saa 02:42)

Maelezo ya Msimbo

Msimbo umeundwa kuwa rahisi kusanidi. Sehemu kuu zinazoweza kusanidiwa na mtumiaji ziko juu kabisa ya sketch. (kwenye video saa 04:18)

Kwanza, tunafafanua mara kwa mara kwa pini ya ziada ya nguvu. Hii inatumiwa kutoa usambazaji safi wa 5V kwa sensor.

const int vcc2 = 13; // Pini ya ziada ya VCC kwa sensor ya VL53L0X

Ifuatayo, tunaunda mfano wa maktaba ya LCD na kufafanua anwani yake ya I2C. Unaweza kupata anwani hii kwa kuendesha sketch ya skana ya I2C, kama inavyoonyeshwa kwenye video. (kwenye video saa 03:26)

LiquidCrystal_I2C lcd(0x3F, 16, 2); // Weka anwani ya LCD kuwa 0x3F kwa onyesho la herufi 16 na mistari 2

Hatimaye, kuna kigezo kinachodhibiti kitengo cha kipimo. Unaweza kubadilisha thamani hii kuonyesha umbali kwa milimita au sentimita.

const int type = 1; // Weka 1 kwa milimita, 2 kwa sentimita

Katika kazi ya setup(), pini ya ziada ya VCC inasanidiwa kama pato na kuwekwa kwa HIGH kutoa nguvu kwa sensor. LCD kisha inaanzishwa.

Mantiki kuu katika kazi ya loop() inasoma umbali kutoka kwa sensor, inafuta LCD, na kuchapisha thamani pamoja na kitengo. Wakati type imewekwa kwa 2, umbali hubadilishwa kutoka milimita hadi thamani ya float kwa sentimita kwa usomaji sahihi zaidi. (kwenye video saa 06:47)

Maonyesho ya Mradi wa Moja kwa Moja

Katika maonyesho, sensor inajaribiwa dhidi ya rula kuthibitisha usahihi wake. Video inaonyesha kwamba sensor inatoa usomaji sahihi sana, na kupotoka kwa milimita chache tu. (kwenye video saa 08:32)

Ni muhimu kutambua kwamba sensor ina upeo wa juu wa takriban mita 1.2 katika hali ya kipimo cha kuendelea. Wakati lengo liko nje ya upeo, onyesho litaonyesha thamani ya 8190. (kwenye video saa 09:53)

Uchunguzi mwingine muhimu ni kwamba sensa inaweza kutoa usomaji usio sahihi kwenye nyuso zinazoakisi sana. Kuielekeza kwenye kitu chenye kung'aa kunaweza kusababisha makosa makubwa, huku kuielekeza kwenye uso usio na kung'aa kunatoa matokeo sahihi. (katika video saa 10:42)

Msimbo pia unaoendana na aina mbalimbali za moduli za VL53L0X na LCD kubwa zaidi, kama vile mfano wa 2004, bila mabadiliko yoyote kwenye wiring. (katika video saa 11:30)

Sura za Video

  • [00:05] Utangulizi wa mradi wa VL53L0X na LCD
  • [00:27] Mchoro wa wiring wa VL53L0X na LCD
  • [02:51] Wiring wa kina kwenye bodi halisi ya Arduino
  • [03:26] Kuchanganua anwani za I2C
  • [04:18] Maelezo ya msimbo na usanidi
  • [08:32] Onyesho la moja kwa moja la kipimo cha umbali
  • [09:53] Kujaribu upeo na mapungufu ya sensa
  • [10:42] Usahihi kwenye nyuso tofauti
  • [11:30] Kujaribu kwa moduli tofauti ya sensa na LCD kubwa zaidi

Bilder

VL53L0X 200cm range sensor-black
VL53L0X 200cm range sensor-black
VL53L0X 200cm range sensor-blue
VL53L0X 200cm range sensor-blue
LCD1602-I2C display module with 4 wires
LCD1602-I2C display module with 4 wires
Arduino wiring for VL53L0X and LCD1602 I2C (4 wires LCD)
Arduino wiring for VL53L0X and LCD1602 I2C (4 wires LCD)
VL53L0x_pin_module
VL53L0x_pin_module
VL53L0x_pin_round_module
VL53L0x_pin_round_module
VL53L0X_LCD1602_wiring-4
VL53L0X_LCD1602_wiring-4
VL53L0X_LCD1602_wiring-1
VL53L0X_LCD1602_wiring-1
VL53L0X_LCD1602_wiring-2
VL53L0X_LCD1602_wiring-2
VL53L0X_LCD1602_wiring-3
VL53L0X_LCD1602_wiring-3
641-Lesson 78: Using a VL53L0X Laser Distance Sensor with an LCD1602 or LCD2004 Display and Arduino
Språk: C++
/*
* Lesson 76-1: Using One single VL6180 Laser Distance Sensor with Arduino 
 * Adafruit code modified for this tutorial
 * by Ahmad Shamshiri at 22:22 on 
 * March 10-11, 2021 in Ajax, ON, Canada
 Please watch video instruction of this code: https://youtu.be/_H9D0czQpSI
 
View code for using two or more VL6180X sensors: https://robojax.com/course1/lecture76

  This video is part of Arduino Step by Step Course which starts here: https://youtu.be/-6qSrDUA5a8

 

If you found this tutorial helpful, please support me so I can continue creating 
content like this. 

or make a donation using PayPal http://robojax.com/L/?id=64
  
 * This code is "AS IS" without warranty or liability. Free to be used as long as you keep this note intact. * 
 * This code has been downloaded from Robojax.com
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <https://www.gnu.org/licenses/>. 
 */
#include <Wire.h>
#include "Adafruit_VL6180X.h"

Adafruit_VL6180X vl = Adafruit_VL6180X();

void setup() {
  Serial.begin(115200);

  // wait for serial port to open on native usb devices
  while (!Serial) {
    delay(1);
  }
  
  Serial.println("Adafruit VL6180x test!");
  if (! vl.begin()) {
    Serial.println("Failed to find sensor");
    while (1);
  }
  Serial.println("Sensor found!");
}

void loop() {

  uint8_t range = vl.readRange();
  uint8_t status = vl.readRangeStatus();

  if (status == VL6180X_ERROR_NONE) {
    Serial.print("Range: "); Serial.print(range);
    Serial.println("mm");
  }
//  if(range <=76)
//  {
//    //do something
//  }

  // Some error occurred, print it out!
  
  if  ((status >= VL6180X_ERROR_SYSERR_1) && (status <= VL6180X_ERROR_SYSERR_5)) {
    Serial.println("System error");
  }
  else if (status == VL6180X_ERROR_ECEFAIL) {
    Serial.println("ECE failure");
  }
  else if (status == VL6180X_ERROR_NOCONVERGE) {
    Serial.println("No convergence");
  }
  else if (status == VL6180X_ERROR_RANGEIGNORE) {
    Serial.println("Ignoring range");
  }
  else if (status == VL6180X_ERROR_SNR) {
    Serial.println("Signal/Noise error");
  }
  else if (status == VL6180X_ERROR_RAWUFLOW) {
    Serial.println("Raw reading underflow");
  }
  else if (status == VL6180X_ERROR_RAWOFLOW) {
    Serial.println("Raw reading overflow");
  }
  else if (status == VL6180X_ERROR_RANGEUFLOW) {
    Serial.println("Range reading underflow");
  }
  else if (status == VL6180X_ERROR_RANGEOFLOW) {
    Serial.println("Range reading overflow");
  }
  delay(50);
}

Tänker att du kanske behöver

Resurser och referenser

Filer📁

Fritzing-fil

  • Adafruit VL6180X Time of Flight Distance Sensor
    Fritzing 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.fzpz 0.02 MB