Pomiar odległości za pomocą laserowego czujnika czasu przelotu VL53L0X z użyciem Arduino
W tym samouczku dowiemy się, jak mierzyć odległości za pomocą czujnika laserowego czasu przelotu VL53L0X z Arduino. Ten czujnik umożliwia precyzyjne pomiary odległości i może być zintegrowany z różnymi projektami, takimi jak robotyka czy systemy automatyki. Po ukończeniu tego samouczka będziesz w stanie skonfigurować czujnik, prawidłowo go podłączyć oraz napisać niezbędny kod do uzyskiwania odczytów odległości.
Omówimy wymagane komponenty sprzętowe, instrukcje podłączenia oraz szczegółowe wyjaśnienie kodu obsługującego czujnik VL53L0X. Aby uzyskać bardziej wizualną reprezentację procesu, koniecznie obejrzyj powiązane wideo (na wideo w 00:15).
Omówienie sprzętu
Głównym elementem tego projektu jest czujnik VL53L0X. Jest to czujnik odległości działający na zasadzie czasu przelotu, który emituje wiązkę lasera i mierzy czas potrzebny na powrót odbitego światła do czujnika. Zapewnia pomiary odległości w milimetrach i jest w stanie pracować w zakresie odległości, co czyni go odpowiednim do różnych zastosowań.
Oprócz VL53L0X potrzebujesz płytki Arduino do przetwarzania danych z czujnika. Arduino będzie komunikować się z czujnikiem za pomocą protokołu I2C, co umożliwia łatwą integrację i kontrolę. Będziesz również potrzebować przewodów połączeniowych, aby nawiązać połączenia między czujnikiem a Arduino.
Szczegóły z karty katalogowej
| Producent | STMicroelectronics |
|---|---|
| Numer części | VL53L0X |
| Napięcie logiczne/IO | 1,8 V do 3,6 V |
| Napięcie zasilania | 2,6 V do 3,6 V |
| Prąd wyjściowy (na kanał) | … |
| Prąd szczytowy (na kanał) | … |
| Zalecenia dotyczące częstotliwości PWM | … |
| Progi logiczne wejściowe | … |
| Spadek napięcia / RDS(on) / nasycenie | … |
| Limity termiczne | -40 °C do 85 °C |
| Obudowa | QFN-16 |
| Uwagi / warianty | Czujnik czasu przelotu, interfejs I2C |
- Zapewnij odpowiednie poziomy napięcia, aby uniknąć uszkodzenia czujnika.
- W razie potrzeby użyj rezystorów podciągających na liniach I2C.
- Utrzymuj czujnik w czystości i bez przeszkód, aby uzyskać dokładne odczyty.
- Kalibruj czujnik dla konkretnych środowisk, aby poprawić dokładność.
- Sprawdź błędy limitu czasu w kodzie, aby obsłużyć problemy z pomiarem.
Instrukcje podłączenia
Aby podłączyć czujnik VL53L0X do Arduino, zacznij od połączenia pinu VCC na czujniku z pinem 5V na Arduino. Jest to bezpieczne, ponieważ czujnik ma wewnętrzny regulator, który umożliwia pracę przy zasilaniu 5V, jednocześnie działając na poziomach 3,3V. Następnie podłącz pin GND na czujniku do pinu masy na Arduino.
Teraz podłącz pin SDA na czujniku do pinu A4 na Arduino, który jest domyślną linią danych I2C. Następnie podłącz pin SCL na czujniku do pinu A5 na Arduino, który jest domyślną linią zegara I2C. W przypadku innych modeli Arduino piny SDA i SCL mogą się różnić; na przykład w Arduino Mega użyj odpowiednio pinów 20 i 21. Upewnij się, że wszystkie połączenia są pewne przed włączeniem systemu.
Przykłady kodu i omówienie
W kodzie Arduino zaczynamy od dołączenia niezbędnych bibliotek i inicjalizacji czujnika VL53L0X. W funkcji setup() konfigurujemy komunikację szeregową i inicjalizujemy czujnik:
void setup() {
Serial.begin(9600);
Wire.begin();
sensor.init();
sensor.setTimeout(500);
sensor.startContinuous();
}
Ten fragment inicjalizuje czujnik i uruchamia tryb ciągłego pomiaru. Funkcja setTimeout(500) zapewnia, że czujnik nie zawiesi się w nieskończoność, jeśli nie uda mu się odczytać odległości.
W funkcji loop() odczytujemy odległość i wypisujemy ją na monitorze szeregowym:
void loop() {
int distance = sensor.readRangeContinuousMillimeters();
distance = distance - 55; // Kompensacja błędu
Serial.print("Odległość: ");
Serial.print(distance);
Serial.print("mm");
if (sensor.timeoutOccurred()) { Serial.print(" LIMIT CZASU"); }
Serial.println();
}
Ta sekcja kodu pobiera pomiar odległości i kompensuje wszelkie błędy systematyczne, odejmując stałą wartość. Sprawdza również limity czasu na wypadek, gdyby czujnik nie zdołał uzyskać odczytu.
Demonstracja / Czego się spodziewać
Po uruchomieniu programu powinieneś zobaczyć ciągłe aktualizacje odległości mierzonej przez czujnik VL53L0X na monitorze szeregowym. Odczyty będą wyświetlane w milimetrach. Jeśli przesuniesz obiekt bliżej lub dalej od czujnika, wartości odległości będą się odpowiednio zmieniać. Jeśli wystąpi limit czasu, zobaczysz komunikat "LIMIT CZASU" wskazujący, że czujnik nie zdołał odczytać odległości (na wideo w 05:30).
Znaczniki czasu wideo
- 00:00 - Wprowadzenie
- 00:15 - Przegląd komponentów
- 01:00 - Instrukcje podłączenia
- 02:30 - Omówienie kodu
- 05:30 - Demonstracja
/* This example shows how to use continuous mode to take
range measurements with the VL53L0X. It is based on
vl53l0x_ContinuousRanging_Example.c from the VL53L0X API.
The range readings are in units of mm.
Original source: https://github.com/pololu/vl53l0x-arduino
Modified by Ahmad Shamshiri for RoboJax.com
Date modified: Sep 26, 2017
*/
#include <Wire.h>
#include <VL53L0X.h>
VL53L0X sensor;
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();
}
void loop()
{
int distance =sensor.readRangeContinuousMillimeters();
distance = distance -55;// -55 is to compensate for error. Change or set it to zero to make it work for your sensor
Serial.print("Distance: ");
Serial.print(distance);
Serial.print("mm");
if (sensor.timeoutOccurred()) { Serial.print(" TIMEOUT"); }
Serial.println();
}
++
/* This example shows how to use continuous mode to take
range measurements with two VL53L0X sensors. It is based on
vl53l0x_ContinuousRanging_Example.c from the VL53L0X API.
The range readings are in units of mm.
Original source: https://github.com/pololu/vl53l0x-arduino
Modified by Ahmad Shamshiri for RoboJax.com
Date modified: June 06, 2018
Dennis from YouTube requested this code on June 06, 2018
*/
#include <Wire.h>
#include <VL53L0X.h>
VL53L0X sensor1;// define object for sensor 1
VL53L0X sensor2;// define object for sensor 2
void setup()
{
Serial.begin(9600);
Wire.begin();
sensor1.init();// initialize sensor 1
sensor1.setTimeout(500);// set time out for sensor 1
sensor2.init();// initialize sensor 2
sensor2.setTimeout(500);// set time out for sensor 2
// 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)).
sensor1.startContinuous();// measure continuously for sensor 1
sensor2.startContinuous();// measure continuously for sensor 2
}
void loop()
{
int distance1 =sensor1.readRangeContinuousMillimeters();// get distance for sensor 1
int distance2 =sensor2.readRangeContinuousMillimeters();// get distance for sensor 2
distance1 = distance1 -55;// -55 is to compensate for error. Change or set it to zero to make it work for your sensor
distance2 = distance2 -34;// -35 is to compensate for error. Change or set it to zero to make it work for your sensor
Serial.print("Distance 1: ");
Serial.print(distance1);// print distance from sensor 1
Serial.print("mm Distance 2: ");
Serial.print(distance2);// print distance from sensor 2
Serial.print("mm");
if (sensor1.timeoutOccurred()) { Serial.print(" TIMEOUT 1"); }
if (sensor2.timeoutOccurred()) { Serial.print(" TIMEOUT 2"); }
Serial.println();
}
Zasoby i odniesienia
Brak zasobów.
Pliki📁
Plik Fritzing
-
Adafruit VL6180X Time of Flight Distance SensorFritzing 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.fzpz0.02 MB -
Adafruit VL6180X Time of Flight Distance SensorFritzing part file for the Adafruit VL6180X Time of Flight distance sensor. This module measures absolute distance up to 100mm and ambient light, communicating over I2C. Includes the sensor breakout board with pins for power, ground, SDA, SCL, and interrupt.
Adafruit VL6180X Time of Flight Distance Sensor.fzpz0.02 MB
Inne pliki
-
Biblioteka Polou VL53L0X
robojax-VL53L0X-polou-arduino-master.zip0.02 MB