September discount week
Tento týden až 80% sleva na e-learning týkající se jazyka C
50 % bodů zdarma na online výuku díky naší Slevové akci!

Arduino - Infračervený senzor vzdálenosti VL53L0X

Vzdálenost jsme již pomocí Arduino měřili a to ultrazvukovým modulem HC-SR04. Dnes to zkusíme pomocí senzoru VL53L0X, který funguje na principu TOF (z anglického Time of Flight). Je založený na základě času letu světelného paprsku. V závěru článku si pak vysvětlíme výhody a nevýhody využití zvukové vlny vs. světelného paprsku.

Specifikace

Co udává výrobce?

Rozsah měřené vzdálenosti 50 mm - 1200 mm
Přesnost měření v závislosti na barvě povrchu 3 % - 12 %
Komunikace I2 C

Na přesnost měření vzdálenosti pomocí světelného paprsku má vliv:

  • Barva povrchu - Tmavší povrchy hůře odrážejí světlo a tím se zhoršují podmínky pro detekci odraženého paprsku.
  • Infračervené záření - Protože senzor vysílá světlo o vlnové délce 900 nm, více infračerveného světla způsobuje větší odchylku.
  • Doba měření - Defaultní nastavení pracuje s časem 33 ms. Softwarově můžeme měnit čas a tím zvýšit přenos na úkor frekvence měření.

Princip měření

Jak asi tušíte, světelný paprsek vyslaný ze senzoru se odrazí od nějaké překážky a vrátí se zpět k senzoru za určitý čas. Protože známe rychlost světla ve vzduchu, umíme vypočítat i vzdálenost. Světlo se šíří ve vakuu rychlostí 299 792 458 m/s, pro běžné podmínky doma můžeme rychlost aproximovat na hodnotu 300 000 000 m/s. Vzdálenost se vypočítá podle jednoduchého vztahu:

vzdálenost = rychlost x čas / 2

(dělíme 2, protože světelný paprsek projde vzdálenost dvakrát, tam a zpět). 1 metr tak světlo překoná přibližně za 3.33 nanosekund (9 řádů), proto je senzor vybaven přesným měřením času, řádově s přesností až na pikosekundy (12 řádů).

Zapojení senzoru

Tento výukový obsah pomáhají rozvíjet následující firmy, které dost možná hledají právě tebe!

Senzor komunikuje pomocí I2 C protokolu a stačí zapojit piny SCL (A5) a SDA (A4) a napájení. Napájecí pin VIN připojíme k 3-5 V na Arduinu a propojíme země (GND):

Zapojení senzoru vzdálenosti VL53L0X do Arduino

Zdroj: Adafruit

Výsledný projekt vypadá takto:

Senzor vzdálenosti VL53L0X a Arduino

Kód

Ke zprovoznění senzoru doporučuji stáhnout knihovnu Adafruit_VL53L0X.h od Adafruitu:

Inicializace

Nejprve načteme knihovnu a inicializujeme senzor:

#include "Adafruit_VL53L0X.h"

Adafruit_VL53L0X lox = Adafruit_VL53L0X();

setup()

V setup() provedeme inicializaci komunikace a počkáme na USB:

Serial.begin(115200);

while (!Serial) {
    delay(1);
}

Následně zahájíme komunikaci se senzorem. Funkce lox.begin() vrátí false pokud monitor sériového portu vypíše chybu:

if (!lox.begin()) {
    Serial.println(F("Failed to boot VL53L0X"));
    while(1);
}

loop()

V loop() smyčce máme pak měření ošetřené podmínkou, která vyhodnotí chybu v případě, že naměřená vzdálenost překročí povolený rozsah:

VL53L0X_RangingMeasurementData_t measure;

Serial.print("Reading a measurement...");
lox.rangingTest(&measure, false); // pro výpis debug informací předáme true

if (measure.RangeStatus != 4)  { // úspěch
    Serial.print("Distance (mm): ");
    Serial.println(measure.RangeMilliMeter);
}
else {
    Serial.println(" out of range ");
}

delay(100);

Celý kód pro zkopírování

Pro jistotu si nyní uveďme kompletní zdrojový kód:

#include "Adafruit_VL53L0X.h"

Adafruit_VL53L0X lox = Adafruit_VL53L0X();

void setup() {
  Serial.begin(115200);
  while (! Serial) {
    delay(1);
  }

  Serial.println("Adafruit VL53L0X test");
  if (!lox.begin()) {
    Serial.println(F("Failed to boot VL53L0X"));
    while(1);
  }
  Serial.println(F("VL53L0X API Simple Ranging example\n\n"));
}


void loop() {
  VL53L0X_RangingMeasurementData_t measure;

  Serial.print("Reading a measurement... ");
  lox.rangingTest(&measure, false); // pro výpis debug informací předáme true

  if (measure.RangeStatus != 4) {  // úspěch
    Serial.print("Distance (mm): ");
    Serial.println(measure.RangeMilliMeter);
  } else {
    Serial.println(" out of range ");
  }

  delay(100);
}

Měření

Pomocí Arduino Uno se mi podařilo naměřit hodnoty každých přibližně 40 ms (interval měření), což předurčuje senzor k využití v jednoduchých projektech jako je detekce překážky, pásové dopravníky apod. Odzkoušel jsem si měření vzdálenosti padající knihy ze stolu. K určení např. polohy a rychlosti je senzor vhodný, ale určení gravitačního zrychlení se mi nepodařilo realizovat. Z grafu je vidět, že na začátku byla kniha ve vzdálenosti 50 cm a pak padala přibližně 0.5 sekundy. Za tu dobu rychlost dosáhla maxima přibližně 2 m/s, měření jsem opakoval dvakrát.

Graf měření rychlosti s Arduino

Porovnání s ultrazvukovým senzorem HC-SR04

A jak je to tedy oproti ultrasonickému senzoru?

Ultrazvukový senzor využívá pro měření vzdálenosti zvukové vlny, které se odrazí od překážky zpět do senzoru. Nevýhodou tohoto senzoru je závislost rychlosti zvuku na teplotě vzduchu. Rychlost zvuku se mění s teplotou přibližně 0.6 m/s na 1°C. Tento nedostatek se samozřejmě dá upravit přidáním čidla teploty a softwarovou kalibrací, což je ale komplikace.

Výhody sonického senzoru

Ultrazvukový senzor má výhodu v tom, že přesnost měření neovlivňuje barva a druh překážky. Zvuk se odrazí stejně dobře od bílého či černého povrchu. U infračerveného senzoru se ve větších vzdálenostech projeví chyba měření více (3-12% z měřené vzdálenosti). Proto je ultrazvukový senzor vhodnější pro měření větších vzdáleností, jako je např. parkovací senzor u auta. Rozlišení je softwarově upravené, u ultrazvukového 1 cm (výrobce senzoru udává až 0.3 cm).

Výhody světelného senzoru

Infračervený senzor je velikostí o něco menší oproti ultrazvukovému. Hodí se pro měření vzdálenosti, např. pro výukové projekty s robotickými hračkami. Rozlišení infračerveného senzoru je 1 mm.

Cenově jsou oba senzory srovnatelné, cena za ultrazvukový senzor je přibližně 25 Kč, za infračervený 60 Kč.


 

Všechny články v sekci
Arduino
Článek pro vás napsal michal
Avatar
Jak se ti líbí článek?
Ještě nikdo nehodnotil, buď první!
Autor sa venuje vzdelávaniu a má rad novinky vo vzdelávani.
Aktivity (3)

 

 

Komentáře

Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zatím nikdo nevložil komentář - buď první!