Suchcode

Verwendung eines VL53L1X Laser-Abstandssensors zur Messung von Entfernungen bis zu 4 Metern

Verwendung eines VL53L1X Laser-Abstandssensors zur Messung von Entfernungen bis zu 4 Metern

Der VL53L1X ist ein Zeit-of-Flight-Laser-Distanzsensor, der in der Lage ist, Distanzen von bis zu 4 Metern mit hoher Genauigkeit zu messen. Dieser Sensor kommuniziert über I2C und ist vielseitig für verschiedene Anwendungen, wie Robotik und Automatisierung. In diesem Tutorial werden wir erkunden, wie man den VL53L1X-Sensor mit einem Arduino einrichtet und Distanzwerte effektiv ausliest.

VL53L1X_Modul

Der Sensor wird entweder mit 3,3 V oder 5 V betrieben und verfügt über mehrere Pins für die I2C-Kommunikation, einschließlich SDA und SCL. Der Sensor kann Entfernungen mit einer Frequenz von 50 Hz messen, was schnelle Distanzmessungen ermöglicht. Dieses Tutorial führt Sie durch den Verkabelungsprozess und den Code, der erforderlich ist, um den Sensor reibungslos zu betreiben. Für weitere Erläuterungen können Sie das Video (im Video bei 00:00) ansehen.

Hardware erklärt

Die Hauptkomponente dieses Projekts ist der VL53L1X Laser-Distanzsensor, der eine Technologie namens Zeitflug (ToF) nutzt, um Entfernungen zu messen. Das bedeutet, dass er die Entfernung zu einem Objekt berechnet, indem er die Zeit misst, die ein Laserpuls benötigt, um zurückzukehren, nachdem er ein Objekt getroffen hat. Der Sensor verfügt über eine I2C-Kommunikation, die eine einfache Integration mit Mikrocontrollern wie Arduino ermöglicht. Neben dem Sensor benötigen Sie eine Arduino-Platine zur Verarbeitung. Der Arduino übernimmt die Kommunikation mit dem VL53L1X und zeigt die gemessenen Entfernungen an. Die Einrichtung ist unkompliziert, da der Sensor direkt von den Ausgangspins des Arduinos mit Strom versorgt werden kann.

Datenblattdetails

Hersteller STMicroelectronics
Teilenummer VL53L1X
Logik-/IO-Spannung 3,3 - 5 V
Versorgungsspannung 2,6 - 5,5 V
Ausgangsstrom (pro Kanal) Nicht zutreffend
Spitzenstrom (pro Kanal) Nicht zutreffend
PWM-Frequenzrichtlinien Nicht zutreffend
Eingangslogikschwellen 0,3 × VCC (niedrig), 0,7 × VCC (hoch)
Spannungsabfall / RDS(on)/ Sättigung Nicht zutreffend
Thermische Grenzen 0 bis 85 °C
Paket 4,9 x 2,5 x 1,6 mm
Hinweise / Varianten Langstrecken-Zeitflug-Sensor

  • Versorgen Sie den Sensor mit 3,3 V oder 5 V, je nach Bedarf.
  • Verwenden Sie die I2C-Pins, SDA und SCL, für die Kommunikation.
  • Stellen Sie den Entfernungsmodus entsprechend Ihren Bedürfnissen ein (kurz, mittel, lang).
  • Stellen Sie sicher, dass der Sensor kalibriert ist, um genaue Abstandslesungen zu gewährleisten.
  • Gehen Sie mit den Bedingungen des Umgebungslichts vorsichtig um, da sie die Messungen beeinflussen können.

Verdrahtungsanweisungen

VL53L1X_wiring

Um den VL53L1X-Sensor mit einem Arduino zu verbinden, schließen Sie den VCC-Pin des Sensors mit einem roten Draht an den 5V-Pin des Arduino an. Verbinden Sie den Ground-Pin (GND) des Sensors mit dem GND des Arduino mit einem braunen Draht. Für die I2C-Kommunikation verbinden Sie den SDA-Pin des Sensors mit dem A4-Pin des Arduino mit einem gelben Draht und den SCL-Pin mit dem A5-Pin mit einem grünen Draht. Wenn Sie die optionalen Interrupt- und Shutdown-Pins verwenden möchten, schließen Sie den Shutdown-Pin an den digitalen Pin 2 und den Interrupt-Pin an den digitalen Pin 3 an, diese sind jedoch für den grundlegenden Betrieb nicht erforderlich.

Codebeispiele und Anleitung

Im Code binden wir zunächst die erforderlichen Bibliotheken ein und definieren die Pins für den Sensor. Wir erstellen eine Instanz des Sensors mit der Zeile:

SFEVL53L1X distanceSensor;

Diese Zeile initialisiert den Sensor, wodurch wir später im Programm seine Methoden aufrufen können. Als Nächstes richten wir die I2C-Kommunikation ein und initialisieren den Sensor:

void setup(void)
{
  Wire.begin();
  Serial.begin(9600);
  Serial.println("VL53L1X Qwiic Test");

  if (distanceSensor.begin() == 0) //Begin returns 0 on a good init
  {
    Serial.println("Sensor online!");
  }
}

In diesem Auszug beginnen wir die I2C-Kommunikation mitWire.begin()und überprüfen, ob der Sensor erfolgreich initialisiert wurde. Schließlich verwenden wir im Loop den folgenden Code, um die Entfernung zu messen:

void loop(void)
{
  int distance = distanceSensor.getDistance(); // Get distance
  Serial.print("Distance: ");
  Serial.println(distance);
}

Dieser Code ruft die Abstandsmessung ab und gibt sie auf dem seriellen Monitor aus. Die Schleife liest kontinuierlich den Abstand und ermöglicht Echtzeitaktualisierungen. Für ein vollständiges Codebeispiel siehe den vollständigen Code, der unterhalb des Artikels geladen ist.

Demonstration / Was Sie erwarten können

Wenn der Sensor korrekt eingerichtet ist, können Sie erwarten, dass er bis zu 4 Meter genaue Abstands-messungen liefert. Sie können leichte Schwankungen bei den Messwerten beobachten, insbesondere bei unterschiedlichen Lichtverhältnissen (im Video um 10:30). Es ist wichtig, sicherzustellen, dass der Sensor sauber und ungehindert ist, um präzise Ergebnisse zu erzielen. Wenn Sie ungewöhnliche Messwerte feststellen, überprüfen Sie, ob der Sensor korrekt mit Strom versorgt wird und ob die I2C-Verbindungen sicher sind. Die Leistung des Sensors kann durch die Umgebung beeinflusst werden, insbesondere bei hellem Licht oder reflektierenden Oberflächen.

Video-Zeiten

  • 00:00 Start
  • 00:40 Einführung
  • 03:42 Datenblatt besucht
  • 06:48 Soldat Pin-Anschlüsse
  • 08:22 Verdrahtung erklärt
  • 09:06 Code erklärt
  • 11:53 Demonstration
  • 16:03 Demonstration in vollständiger Dunkelheit

Bilder

VL53L1X Distance Sensor
VL53L1X Distance Sensor
VL53L1X_module
VL53L1X_module
VL53L1X_wiring
VL53L1X_wiring
259-code example using the VL53L1X Laser Range Sensor
Sprache: C++
/*

 * This is a code example using the VL53L1X Laser Range Sensor from STMicroelectronics
 * Using a library from SparkFun (see below)
 * 
 * Watch a video instruction for this code: https://youtu.be/Sc_iVfeocvg
 * A wiring diagram is available at https://robojax.com/RJT232


 * Updated by Ahmad Shamshiri on November 4, 2019
 * in Ajax, Ontario, Canada. www.robojax.com
 * 

 * Get this code and other Arduino codes from Robojax.com.
Learn Arduino step by step in a structured course with all materials, wiring diagrams and libraries
all in one place. 

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

 * 
 * https://www.st.com/content/ccc/resource/technical/document/user_manual/group0/98/0d/38/38/5d/84/49/1f/DM00474730/files/DM00474730.pdf/jcr:content/translations/en.DM00474730.pdf
 * https://www.st.com/resource/en/datasheet/vl53l1x.pdf
 * 
  Reading distance from the laser-based VL53L1X
  By: Nathan Seidle
  Revised by: Andy England
  SparkFun Electronics
  Date: April 4th, 2018
  License: This code is public domain but you buy me a beer if you use this and we meet someday (Beerware license).

  SparkFun labored with love to create this code. Feel like supporting open-source hardware? 
  Buy a board from SparkFun! https://www.sparkfun.com/products/14667

  This example prints the distance to an object.

  Are you getting weird readings? Be sure the vacuum tape has been removed from the sensor.

 *  * 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/>.

    
   Copyright (c) 2015, Majenko Technologies
   All rights reserved.

   Redistribution and use in source and binary forms, with or without modification,
   are permitted provided that the following conditions are met:

 * * Redistributions of source code must retain the above copyright notice, this
     list of conditions and the following disclaimer.

 * * Redistributions in binary form must reproduce the above copyright notice, this
     list of conditions and the following disclaimer in the documentation and/or
     other materials provided with the distribution.

 * * Neither the name of Majenko Technologies nor the names of its
     contributors may be used to endorse or promote products derived from
     this software without specific prior written permission.

   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
   ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
   WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
   DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
   ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
   (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
   LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
   ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
   SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/

#include <Wire.h>
#include "SparkFun_VL53L1X.h"

//Optional interrupt and shutdown pins.
#define SHUTDOWN_PIN 2
#define INTERRUPT_PIN 3

SFEVL53L1X distanceSensor;
//Uncomment the following line to use the optional shutdown and interrupt pins.
//SFEVL53L1X distanceSensor(Wire, SHUTDOWN_PIN, INTERRUPT_PIN);

void setup(void)
{
  Wire.begin();

  Serial.begin(9600);
  Serial.println("VL53L1X Qwiic Test");

  if (distanceSensor.begin() == 0) //Begin returns 0 on a good init
  {
    Serial.println("Sensor online Robojax Says!");
  }
  Serial.print("I2C Address of VL53L1X:");
  Serial.println(distanceSensor.getI2CAddress()); 

// set distance mode to Short or long
  distanceSensor.setDistanceModeShort();
  //distanceSensor.setDistanceModeLong();

}

Ressourcen & Referenzen

Dateien📁

Keine Dateien verfügbar.