Vianoce v ITnetwork sú tu! Dobí si teraz kredity a získaj až 80 % extra kreditov na e-learningové kurzy ZADARMO. Zisti viac.
Hľadáme nové posily do ITnetwork tímu. Pozri sa na voľné pozície a pridaj sa k najagilnejšej firme na trhu - Viac informácií.

Arduino - Infračervený senzor vzdialenosti VL53L0X

V minulej lekcii, Arduino a práca s tlačidlami - Knižnica , sme vytvorili OOP knižnicu pre prácu s tlačidlom pre pohodlné znovu-používaní kódu v Arduino projektoch.

Vzdialenosť sme už pomocou Arduino merali a to ultrazvukovým modulom HC-SR04. Dnes to skúsime pomocou senzora VL53L0X, ktorý funguje na princípe TOF (z anglického Time of Flight). Je založený na základe času letu svetelného lúča. V závere článku si potom vysvetlíme výhody a nevýhody využitia zvukové vlny vs. svetelného lúča.

Špecifikácia

Čo udáva výrobca?

Rozsah meranej vzdialenosti 50 mm - 1200 mm
Presnosť merania v závislosti na farbe povrchu 3% - 12%
komunikácia Aj 2 C
Na presnosť merania vzdialenosti pomocou svetelného lúča má vplyv:
  • Farba povrchu - Tmavšie povrchy horšie odrážajú svetlo a tým sa zhoršujú podmienky pre detekciu odrazeného lúča.
  • Infračervené žiarenie - Pretože senzor vysiela svetlo s vlnovou dĺžkou 900 nm, viac infračerveného svetla spôsobuje väčšie odchýlku.
  • Doba merania - Defaultný nastavenie pracuje s časom 33 ms. Softvérovo môžeme meniť čas a tým zvýšiť prenos na úkor frekvencie meraní.

Princíp merania

Ako asi tušíte, svetelný lúč vyslaný zo senzora sa odrazí od nejakej prekážky a vráti sa späť k senzoru za určitý čas. Pretože poznáme rýchlosť svetla vo vzduchu, vieme vypočítať aj vzdialenosť. Svetlo sa šíri vo vákuu rýchlosťou 299 792 458 m / s, pre bežné podmienky doma môžeme rýchlosť približne určiť na hodnotu 300 000 000 m / s. Vzdialenosť sa vypočíta podľa jednoduchého vzťahu:

vzdialenosť = rýchlosť x čas / 2

(Delíme 2, pretože svetelný lúč prejde vzdialenosť dvakrát, tam a späť). 1 meter tak svetlo prekoná približne za 3.33 nanosekúnd (9 poriadkov), preto je senzor vybavený presným meraním času, rádovo s presnosťou až na pikosekundy (12 poriadkov).

Zapojenie senzora

Senzor komunikuje pomocou I 2 C protokolu a stačí zapojiť piny SCL (A5) a SDA (A4) a napájanie. Napájacie pin VIN pripojíme k 3-5 V na Arduino a prepojíme zeme (GND):

Zapojenie senzora vzdialenosti VL53L0X do Arduino - Arduino

Zdroj: Adafruit

Výsledný projekt vyzerá takto:

Senzor vzdialenosti VL53L0X a Arduino - Arduino

Kód

Ku sprevádzkovanie senzora odporúčam stiahnuť knižnicu Adafruit_VL53L0X.h od Adafruitu:

Inicializácia

Najprv načítame knižnicu a inicializujeme senzor:

#include "Adafruit_VL53L0X.h"

Adafruit_VL53L0X lox = Adafruit_VL53L0X();

setup()

V setup() vykonáme inicializáciu komunikácie a počkáme na USB:

Serial.begin(115200);

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

Následne zahájime komunikáciu so senzorom. Funkcia lox.begin() vráti false ak monitor sériového portu vypíše chybu:

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

loop()

V loop() slučke máme potom meranie ošetrené podmienkou, ktorá vyhodnotí chybu v prípade, že nameraná vzdialenosť prekročí 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 pre skopírovanie

Pre istotu si teraz 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);
}

Meranie

Pomocou Arduino Uno sa mi podarilo namerať hodnoty každých približne 40 ms (interval merania), čo predurčuje senzor na využitie v jednoduchých projektoch ako je detekcia prekážky, pásové dopravníky a pod. Odskúšal som si meranie vzdialenosti padajúce knihy zo stola. Na určenie napr. Polohy a rýchlosti je senzor vhodný, ale určenie gravitačného zrýchlenia sa mi nepodarilo realizovať. Z grafu je vidieť, že na začiatku bola kniha vo vzdialenosti 50 cm a potom padala približne 0.5 sekundy. Za tú dobu rýchlosť dosiahla maximum približne 2 m / s, meranie som opakoval dvakrát.

Graf meranie rýchlosti s Arduino - Arduino

Porovnaní s ultrazvukovým senzorom HC-SR04

A ako je to teda oproti ultrasonickému senzora?

Ultrazvukový senzor využíva pre meranie vzdialenosti zvukové vlny, ktoré sa odrazí od prekážky späť do senzora. Nevýhodou tohto senzora je závislosť rýchlosti zvuku na teplote vzduchu. Rýchlosť zvuku sa mení s teplotou približne 0.6 m / s na 1 ° C. Tento nedostatok sa samozrejme dá upraviť pridaním snímače teploty a softvérovú kalibráciou, čo je ale komplikácie.

Výhody sonického senzora

Ultrazvukový senzor má výhodu v tom, že presnosť merania neovplyvňuje farba a druh prekážky. Zvuk sa odrazí rovnako dobre od bieleho či čierneho povrchu. U infračerveného senzora sa vo väčších vzdialenostiach prejaví chyba merania viac (3-12% z meranej vzdialenosti). Preto je ultrazvukový senzor vhodnejšie pre meranie väčších vzdialeností, ako je napr. Parkovací senzor pri aute. Rozlíšenie je softvérovo upravené, u ultrazvukového 1 cm (výrobca senzora udáva až 0.3 cm).

Výhody svetelného senzora

Infračervený senzor je veľkosťou o niečo menšia oproti ultrazvukovému. Hodí sa na meranie vzdialenosti, napr. Pre výukové projekty s robotickými hračkami. Rozlíšenie infračerveného senzora je 1 mm.

Cenovo sú obaja senzory porovnateľné, cena za ultrazvukový senzor je približne 25 Sk, za infračervený 60 Sk.


 

Predchádzajúci článok
Arduino a práca s tlačidlami - Knižnica
Všetky články v sekcii
Arduino
Článok pre vás napísal michal
Avatar
Užívateľské hodnotenie:
Ešte nikto nehodnotil, buď prvý!
Autor sa venuje vzdelávaniu a má rad novinky vo vzdelávani.
Aktivity