Code de recherche

Leçon 78 : Afficher la distance du VL53L0X sur un écran LCD | Cours Arduino Pas à Pas

Leçon 78 : Afficher la distance du VL53L0X sur un écran LCD | Cours Arduino Pas à Pas

VL53L0X 200cm range sensor-blue

Ce guide montre comment construire un télémètre laser précis à l'aide du capteur de temps de vol VL53L0X et d'un écran LCD 16x2 avec module I2C. Ce projet est parfait pour les makers qui souhaitent ajouter une mesure de distance précise et sans contact à leurs créations. Le VL53L0X utilise un laser pour mesurer la distance, ce qui le rend idéal pour les applications où les capteurs ultrasoniques pourraient rencontrer des difficultés, comme mesurer le niveau de remplissage d'un réservoir ou détecter la position exacte d'un objet sur un tapis roulant.

Voici quelques façons pratiques d'utiliser ce projet :

  • Distributeur de nourriture automatique pour animaux : Mesurez le niveau de nourriture dans un récipient pour déclencher un remplissage ou envoyer une notification.
  • Poubelle intelligente : Détectez le niveau de remplissage de la poubelle et soyez alerté lorsqu'elle doit être vidée.
  • Toise DIY : Créez un outil de mesure précis pour de petits objets ou pour suivre la croissance d'un enfant.
  • Assistant de stationnement : Construisez un système de capteurs pour faciliter un stationnement précis dans un garage ou un espace restreint.
  • Robotique : Utilisez-le dans un robot pour détecter des obstacles ou mesurer la distance à un mur pour la navigation.
Module rond avec broches VL53L0x

Matériel requis

  • Carte Arduino (par exemple, Uno)
  • Capteur de distance laser VL53L0X
  • Écran LCD 1602 avec module I2C
  • Fils de connexion (jumper wires)

Guide de câblage

Le câblage de ce projet est simple, grâce au protocole I2C, qui permet à l'écran LCD et au capteur de communiquer sur les deux mêmes fils. Le capteur VL53L0X nécessite une alimentation de 5V, qui est directement prélevée sur la broche 5V de l'Arduino. Pour garantir une source d'alimentation stable au capteur, une broche supplémentaire est utilisée comme VCC secondaire. (dans la vidéo à 00:27)

Câblage VL53L0X_LCD1602-3
Câblage VL53L0X_LCD1602-2
Câblage VL53L0X_LCD1602-1
Câblage VL53L0X_LCD1602-4

Voici le schéma de connexion :

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

Les connexions sont les suivantes :

  • VL53L0X VCC -> Arduino 5V et broche 13 (la broche 13 est configurée comme sortie numérique pour fournir une stabilité d'alimentation supplémentaire).
  • 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).

Si vous utilisez un autre modèle d'Arduino, les broches I2C peuvent se trouver ailleurs. Les broches SDA et SCL sont souvent étiquetées directement sur la carte. (dans la vidéo à 02:42)

Explication du code

Le code est conçu pour être simple à configurer. Les principales parties configurables par l'utilisateur se trouvent tout en haut du sketch. (dans la vidéo à 04:18)

Tout d'abord, nous définissons une constante pour la broche d'alimentation supplémentaire. Celle-ci est utilisée pour fournir une alimentation propre de 5V au capteur.

const int vcc2 = 13; // Broche VCC supplémentaire pour le capteur VL53L0X

Ensuite, nous créons une instance de la bibliothèque LCD et définissons son adresse I2C. Vous pouvez trouver cette adresse en exécutant un sketch de scan I2C, comme montré dans la vidéo. (dans la vidéo à 03:26)

LiquidCrystal_I2C lcd(0x3F, 16, 2); // Définit l'adresse LCD à 0x3F pour un affichage de 16 caractères et 2 lignes

Enfin, il y a une variable qui contrôle l'unité de mesure. Vous pouvez modifier cette valeur pour afficher la distance en millimètres ou en centimètres.

const int type = 1; // Mettre à 1 pour les millimètres, 2 pour les centimètres

Dans la fonction setup(), la broche VCC supplémentaire est configurée comme sortie et mise à HIGH pour fournir l'alimentation au capteur. L'écran LCD est ensuite initialisé.

La logique principale dans la fonction loop() lit la distance du capteur, efface l'écran LCD et affiche la valeur avec l'unité. Lorsque type est défini sur 2, la distance est convertie de millimètres en une valeur flottante en centimètres pour une lecture plus précise. (dans la vidéo à 06:47)

Démonstration en direct du projet

Dans la démonstration, le capteur est testé contre une règle pour vérifier sa précision. La vidéo montre que le capteur fournit des lectures très précises, avec seulement quelques millimètres d'écart. (dans la vidéo à 08:32)

Il est important de noter que le capteur a une portée maximale d'environ 1,2 mètre en mode de mesure continue. Lorsque la cible est hors de portée, l'écran affichera une valeur de 8190. (dans la vidéo à 09:53)

Une autre observation clé est que le capteur peut donner des lectures inexactes sur des surfaces très réfléchissantes. Le pointer vers un objet brillant peut provoquer des erreurs importantes, tandis que le pointer vers une surface mate donne des résultats précis. (dans la vidéo à 10:42)

Le code est également compatible avec différentes variantes du module VL53L0X et des écrans LCD plus grands, comme le modèle 2004, sans aucune modification du câblage. (dans la vidéo à 11:30)

Chapitres de la vidéo

  • [00:05] Introduction au projet VL53L0X et LCD
  • [00:27] Schéma de câblage pour le VL53L0X et le LCD
  • [02:51] Câblage détaillé sur une carte Arduino réelle
  • [03:26] Recherche des adresses I2C
  • [04:18] Explication du code et configuration
  • [08:32] Démonstration en direct de la mesure de distance
  • [09:53] Test de la portée et des limites du capteur
  • [10:42] Précision sur différentes surfaces
  • [11:30] Test avec un module de capteur différent et un écran LCD plus grand

Images

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

Ce dont vous pourriez avoir besoin

Ressources et références

Fichiers📁

Fichier Fritzing

  • 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