Operácie

ToF senzor vzdialenosti: Rozdiel medzi revíziami

Zo stránky SensorWiki

Riadok 46: Riadok 46:




# '''Time of Flight VL53L1X'''
2. '''Time of Flight VL53L1X'''


VL53L1X je najmodernejším laserovým snímačom, ktorý vylepšuje produktovú radu ST FlightSense ™. Je to najrýchlejší miniatúrny senzor Time of Flight na trhu s presným dosahom do 4 m a rýchlou frekvenciou do 50 Hz.Na rozdiel od bežných IR snímačov využíva najnovšiu technológiu ToF od spoločnosti ST Microelectronics, ktorá umožňuje meranie absolútnej vzdialenosti bez ohľadu na cieľovú farbu a odrazivosť.
VL53L1X je najmodernejším laserovým snímačom, ktorý vylepšuje produktovú radu ST FlightSense ™. Je to najrýchlejší miniatúrny senzor Time of Flight na trhu s presným dosahom do 4 m a rýchlou frekvenciou do 50 Hz.Na rozdiel od bežných IR snímačov využíva najnovšiu technológiu ToF od spoločnosti ST Microelectronics, ktorá umožňuje meranie absolútnej vzdialenosti bez ohľadu na cieľovú farbu a odrazivosť.

Verzia z 14:22, 5. máj 2019

Autori: Matúš Hutár , Matej Kubala
Študijný odbor: Aplikovaná mechatronika 1. Ing. Letný semester (2019)

Zadanie

  • Úlohou je naštudovať princíp senzora ToF ( Time of Flight), presnejšie senzor VL53L1X.
  • Vyčítať z neho potrebné dáta na určenie vzdialenosti a následne vytvoriť vizualizačnú aplikáciu.

Hardware

  1. Arduino UNO PLUS
  • Mikrokontrolér vyvinutý a vyrobený firmou Waveshare, využívajúci ATMEGA328P-AU.
  • Výhody oproti klasickému Arduinu UNO sú, že dokáže využívať 5V aj 3V3 logiku.
  • Využíva Micro USB konektor namiesto USB B.

Obr. 1: Arduino UNO PLUS
  1. ATMEGA328P-AU
  2. AMS1117-3.3 : 3.3V voltage regulator
  3. NCP1117ST50T3G : 5V voltage regulator
  4. FT232RL : USB to UART convertor
  5. Arduino interface
  6. ICSP interface
  7. MICRO USB connector
  8. Power output header
  9. FT232 pins
  10. DC input : 7V ~ 12V
  11. Reset button
  12. Power indicator
  13. Serial port Rx/Tx indicator
  14. User LED
  15. 500mA fast self-recovery fuse
  16. Power configuration
  17. Bootloader selection switch


  • Rozloženie pinov


2. Time of Flight VL53L1X

VL53L1X je najmodernejším laserovým snímačom, ktorý vylepšuje produktovú radu ST FlightSense ™. Je to najrýchlejší miniatúrny senzor Time of Flight na trhu s presným dosahom do 4 m a rýchlou frekvenciou do 50 Hz.Na rozdiel od bežných IR snímačov využíva najnovšiu technológiu ToF od spoločnosti ST Microelectronics, ktorá umožňuje meranie absolútnej vzdialenosti bez ohľadu na cieľovú farbu a odrazivosť.

  • Využitie TOF senzorov:

ToF kamery sa používajú v asistenčných a bezpečnostných funkciách pre pokročilé automobilové aplikácie, ako je aktívna bezpečnosť chodcov, detekcia kolízií. Kamery poskytujú obraz vzdialenosti v reálnom čase a preto je ľahké sledovať pohyby ľudí. To umožňuje nové interakcie so spotrebiteľskými zariadeniami, ako sú televízory, konzoly ako Xbox a Playstastion. Ďalším použitím týchto kamier je oblasť robotiky: Mobilné roboty môžu veľmi rýchlo vybudovať mapu svojho okolia, čo im umožní vyhnúť sa prekážkam alebo sledovať vedúcu osobu. Keďže výpočet vzdialenosti je jednoduchý, používa sa len malý výpočtový výkon.


Literatúra:

Analýza

V tejto časti popíšete ako idete daný problém riešiť. Uvediete sem aj všetky potrebné technické údaje, ktoré sú potrebné na úspešné vyriešenie projektu. Napríklad:

  • popis komunikačnej zbernice (i2c, 1-wire, RS-232 a pod.)
  • obrázok zapojenia vývodov použitej súčiastky
  • odkaz na katalógový list
  • priebehy dôležitých signálov
  • este jedna polozka

Popis riešenia

Sem opíšete ako konkrétne ste problém vyriešili. Začnite popisom pripojenia k procesoru (nezabudnite na schému zapojenia!) a zdôraznite ktoré jeho periférie ste pritom využili.

Schéma zapojenia snímača

Súbor:Example.jpg

Pozn.: Názov obrázku musí byť jedinečný, uvedomte si, že Obr1.jpg už pred vami skúsilo nahrať už aspoň 10 študentov.

Algoritmus a program

Algoritmus je rozdelený do niekoľkých krokov. V prvom rade je nutné vyčítať hodnoty vzdialenosti z ToF senzoru a následne ich posielať do počítača po sériovej linke. Táto časť je realizovaná v Arduino, pričom na programovanie sme využili jazyk Wiring v programovacom prostredí Arduino IDE verzie 1.8.8. Druhá časť spočíva v čítaní prichádzajúcich údajov zo sériovej linky a adekvátne zobrazovanie týchto údajov. Táto časť je realizovaná v počítači, pročom na programovanie sme využili jazyk Processing a programovacie prostredie Processing 3.5.3.

Pre lepšie pochopenie komunikačných kanálov uvádzame jednoduchý diagram.

Samtotný program pre Adruino sa skladá z inicializácie objektu senzora a nastavenie potrebných parametrov pre tento objekt a tiež inicializácie I2C a sériovej komunikácie. V nekonečnom cykle sa nachádza vyčítanie hodnoty vzdialenosti zo senzora a posielanie tejto hodnoty po sériovej linke.

VL53L1X sensor;                               // definovanie objektu senzora

void setup()
{
  Serial.begin(115200);                      //inicializacia seriovej komunikacie
  Wire.begin();                              // inicializacia I2C komunikacie
  Wire.setClock(400000);                     // nastavenie frekvencie 400 kHz pre I2C

  if (!sensor.init())                        // inicializacia senzora
  {
    // neuspesna inicializacia sa prejavy chybovym hlasenim
    Serial.println("Failed to detect and initialize sensor!");
    while (1);
  }
  
  sensor.setDistanceMode(VL53L1X::Long);     // nastavenie modu "rozsahu merania"
  sensor.setMeasurementTimingBudget(50000);  // nastavenie casoveho rozostupu merani
  sensor.setAddress(0x29);                   // nastavenie I2C adresy senzora
  sensor.startContinuous(50);                // zacatie merania v intervale kazdych 50 ms
}

void loop()
{
  int x = sensor.read();                    // inicializacia premennej pre uchovanie vycitanej hodnoty (int)
  Serial.println(x);                        // posielanie vycitanej hodnoty cez seriovu linku
}

Programová časť pre zobrazovanie údajov v počítači pozostáva z definovania obrazovky na vykresľovanie a inicializácie sériového portu. Vo funkcii 'serialEvent' sa nachádzajú príkazy, ktoré sa vykonajú vždy, keď sa objaví nová hodnota na sériovom porte. Sú tu príkazy na rozpoznanie prichádzajúcich znakov a prevod týchto znakov na číslo, ktoré reprezentuje prečítanú vzdialenosť zo senzora. Nakoniec sa vo funkcii 'draw' vykresluje aktuálne číslo, teda vzdialenosť, ako aj jeho grafická reprezentácia v podobe polohy bieleho obdĺžnika.

Z uvedeného uvádzame ukážku prevodu znakov na samotné číslo.

void serialEvent(Serial port) {
  count++;                                                  // zvysenie pomocnej hodnoty o 1
  myChar = port.readChar();                                 // vycitanie aktualneho znaku zo serioveho portu
  x=Character.getNumericValue(myChar);                      // zmena char -> int aktualneho znaku
  if (x == -1){                                             // ak prichadzajuci znak nie je ciselna hodnota  (je to napr "/n")
    count = 0;                                              // resetovanie pomocnej premennej
    println(cislo);                                         // vypis cisla do konzoly
    cislo = 0;                                              // vynulovanie cisla
  }
  
  // v tejto podmienke sa z jednotlivych cifier cisla stane samotne cislo
  
  if (count != 0) {
      cislo = cislo+x;
      cislo = cislo*10;
  }
  
  //  v tejto podmienke sa zmapuje aktualna hodnota cisla do intervali 0-1
  //  na nasledne graficke zobrazenie
  
  if ((cislo != 0) && (count == 0)){
    x_maped=map(cislo,0,2200,0,1);
  }
}

Zdrojový kód: tof_arduino.ino a tof_processing.pde

Overenie

Nezabudnite napísať čosi ako užívateľský návod. Z neho by malo byť jasné čo program robí, ako sa prejavuje a aké má užívateľské rozhranie (čo treba stlačiť, čo sa kde zobrazuje). Ak ste namerali nejaké signály, sem s nimi. Ak je výsledkom nejaký údaj na displeji, odfotografujte ho.

Kľúčové slová 'Category', ktoré sú na konci stránky nemeňte.


Späť na zoznam projektov...