Operácie

ToF senzor vzdialenosti: Rozdiel medzi revíziami

Zo stránky SensorWiki

Bez shrnutí editace
Balogh (diskusia | príspevky)
Bez shrnutí editace
 
(39 medziľahlých úprav od jedného ďalšieho používateľa nie je zobrazených)
Riadok 1: Riadok 1:
Balogh: zbytocne sa rozpisujete o Arduine a i2c zbernici, potom mate malo casu na senzor samotny
        v softverovej casti chyba informacia o parametroch ktore nastavujete - napr. co znamena
        time budget 50000 a ako to potom suvisi s hlavnou sluckou?         
{|
{|
|Autori:      || '''Matúš Hutár , Matej Kubala'''  
|Autori:      || '''Matúš Hutár , Matej Kubala'''  
Riadok 4: Riadok 8:
|Študijný odbor:  || Aplikovaná mechatronika || 1. Ing. Letný semester  ('''2019''')  
|Študijný odbor:  || Aplikovaná mechatronika || 1. Ing. Letný semester  ('''2019''')  
|}
|}
__TOC__


== Zadanie ==
== Zadanie ==
Riadok 9: Riadok 15:
* Úlohou je naštudovať princíp senzora ToF ( Time of Flight), presnejšie senzor VL53L1X.
* Ú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.
* Vyčítať z neho potrebné dáta na určenie vzdialenosti a následne vytvoriť vizualizačnú aplikáciu.
== Hardware ==
# '''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.
[[Image:UNO-PLUS-intro.jpg]]
:::::::::::::'''Obr. 1: Arduino UNO PLUS'''
# ATMEGA328P-AU
# AMS1117-3.3 : 3.3V voltage regulator
# NCP1117ST50T3G : 5V voltage regulator
# FT232RL : USB to UART convertor
# Arduino interface
# ICSP interface
# MICRO USB connector
# Power output header
# FT232 pins
# DC input : 7V ~ 12V
# Reset button
# Power indicator
# Serial port Rx/Tx indicator
# User LED
# 500mA fast self-recovery fuse
# Power configuration
# Bootloader selection switch
* Rozloženie pinov
[[Image:UNO-PLUS-PIN.jpg]]
::::::::::::::'''Obr. 2: Arduino UNO PLUS pinout'''
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.
[[Image:En.VL53L1X web.jpg |left | 200px]]
[[Image:TOF1.jpg | center | 350px]]
::::::::::::::::::::::::::::::'''Obr. 3: ToF VL53L1X'''
* Rozloženie pinov a ich vlastnosti
[[Image:Pinout.jpg | left]]
[[Image:Pin description.jpg | center| 600px]]
:::::'''Obr. 4: Pinout ToF VL53L1X'''
* základné informácie o senzore:
[[Image:111.jpg | center | 700px]]
::::::::::::::::::::::::::::::::::::::'''Obr. 5: VL53L1X Informácie'''
* Minimálna meracia vzdialenosť je 4cm. Senzor vie merať aj pod touto hodnotou avšak vzdialenosť nebude presná.
* Senzor dokáže pracovať v 3 základných meracích módoch :
[[Image:Vzdialenosti.jpg]]
::* Režim Long dokáže merať objekty až do vzdialenosti 4m, avšak táto vzdialenosť je vo veľkej miere ovplyvňovaná okolitým svetlom.
::* Režim Short je odolnejší voči okolitému svetlu, ale jeho maximálna vzdialenosť je zvyčajne obmedzená na 1,3 m.




'''Literatúra:'''  
'''Literatúra:'''  
* Zoznam použitej literatúry, vrátane katalógových údajov (datasheet), internetových odkazov a pod.
* [https://www.st.com/resource/en/datasheet/vl53l1x.pdf Datasheet senzora VL53L1X]
* [https://www.waveshare.com/w/upload/9/93/ATmega328P_datasheet_Complete.pdf Datasheet ATmega328P]
 
== Analýza ==
 
 
 
Aby sme boli schopný vôbec získať nejaké informácie zo senzora ToF, musíme poznať princíp fungovania I2C zbernice. I2C je dvojvodičová obojsmerná sériová zbernica, vytvorená firmou PHILIPS SEMICONDUCTORS, určená pre komunikáciu jednočipových procesorov s podriadenými obvodmi (SLAVE). Využíva 2 vodiče  SDA a SLC
 
'''SDA''' – slúži pre prenos sériových dát.
 
'''SLC''' – slúži pre prenos hodinového signálu (takty).
 
Obe linky musia byť pripojené na kladný pól napájacieho napätia prostredníctvom tzv. pull-up rezistorov (jedná sa vlastne o výstup typu otvorený kolektor). Tým je zabezpečená práca liniek SDA a SLC v obidvoch smeroch.
 
'''Prenos bitov''' – V priebehu jedného hodinového cyklu SLC je prenesený práve jeden dátový bit (obr. 6). Dáta privedené na linku SDA musia zostať nemenné po celú dobu taktovania kladného impulzu hodín SLC. Pri SLC=1 sú totiž zmeny SDA chápané ako riadiaci signál.
 


__TOC__
* Data transfer protocol senzora VL53L1X :
 
[[Image:Data protocol.jpg]]
::::::::::::::'''Obr. 6: Data Protocol '''
 
* Adresa senzora 0x52:
 
[[Image:Device address.jpg]]
:::::'''Obr. 7: Adresa senzora'''


== Analýza ==
* Schéma zapojenia senzora a jeho vývodov:


V tejto časti popíšete ako idete daný problém riešiť. Uvediete sem aj všetky potrebné technické údaje,
[[Image:Senzor1111.jpg]]
ktoré sú potrebné na úspešné vyriešenie projektu. Napríklad:
::::::::::::::'''Obr. 8: Celková schéma zapojenia'''


* 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
* Výstup zo senzora je hodnota vzdialenosti v [mm]
(nezabudnite na schému zapojenia!) a zdôraznite ktoré jeho periférie ste pritom využili.


== Popis riešenia ==
Po naštudovaní I2C zbernice sme zapojili ToF senzor podľa obrázku č.9 . Kedže senzor už obsahoval na svojej doske pull up rezistory pre SDA a SCL, mohli sme s pokojom na duši prepojiť tieto piny medzi mikrokontrolérom arduino UNO PLUS a senzorom VL53X1L. Napájanie samotného senzora je v rozpätí medzi 2,5V až 3,5 V, práve preto sme aj používali Arduino UNO PLUS kde sa dá prestaviť 5V logika na 3V3 logiku. Pri bližšom skúmaní sme zistili že senzor má na svojej DPS aj napätoví regulátor na 3V3, čo znamená, že sme mohli použiť aj klasické Arduino UNO. Po zapojení snimača sme už mohli získavať hodnotu zo senzora v mm. Ďalej  túto hodnotu sme posielali cez sériovú komunikáciu do PC, kde pomocou programu Processing sme vizualizovali túto hodnotu.
'''Schéma zapojenia snímača'''
'''Schéma zapojenia snímača'''
[[Súbor:Zapojenie.png]]


[[Súbor:Example.jpg]]
[[Image:Zapojenie moje 1.jpg| center]]
::::::::::::::::::::::::::::::::::'''Obr. 9: Prepojenie Arduina a ToF senzora'''


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


[[Súbor:MojObrazok.jpg|center|250px]]


=== Algoritmus a program ===
=== Algoritmus a program ===
Riadok 50: Riadok 139:
Pre lepšie pochopenie komunikačných kanálov uvádzame jednoduchý diagram.
Pre lepšie pochopenie komunikačných kanálov uvádzame jednoduchý diagram.
[[Súbor:Diagram_vyvjovy_tof.png]]
[[Súbor:Diagram_vyvjovy_tof.png]]
:::::::::::::::::::::::::::::::::::::'''Obr. 10: Diagram zapojenia'''


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.
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.
Riadok 120: Riadok 210:
=== Overenie ===
=== Overenie ===


Nezabudnite napísať čosi ako užívateľský návod. Z neho by malo byť jasné čo program robí,  
* Pre zostrojenie identického merača vzdialenosti stačí pozapájať senzor s arduinom podľa priloženej schémy zapojenia a nahrať kódy do arduina a do programu Processing, po spustení tlačidla Play v Processingu by sa Vám malo otvoriť okienko s obdlžníkom a meranou vzdialenosťou.
ako sa prejavuje a aké má užívateľské rozhranie (čo treba stlačiť, čo sa kde zobrazuje).
* Výstupom celého nášho projektu je zmeraná vzdialenosť objektu od senzora, ktorú následne vizualizujeme pomocou bieleho obdlžničku, ktorý sa pohybuje zľava doprava na základe zmeranej vzdialenosti. Taktiež vypisujeme aj zmeranú hodnotu nad týmto obdlžničkom.
Ak ste namerali nejaké signály, sem s nimi. Ak je výsledkom nejaký údaj na displeji,
[[Image:Vystup senzor ToF.JPG | 800px]]
odfotografujte ho.  
::::::'''Obr. 11: Kontrola meranej vzdialenosti polokrajčírskym metrom z Hornbachu'''
 
[[Image:Vystup procesing.png]]
::::::::::::::'''Obr. 12: Vizualizácia nameranej vzdialenosti'''
 


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





Aktuálna revízia z 08:14, 16. máj 2019

Balogh: zbytocne sa rozpisujete o Arduine a i2c zbernici, potom mate malo casu na senzor samotny
        v softverovej casti chyba informacia o parametroch ktore nastavujete - napr. co znamena
        time budget 50000 a ako to potom suvisi s hlavnou sluckou?          
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

Obr. 2: Arduino UNO PLUS pinout


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.

Obr. 3: ToF VL53L1X
  • Rozloženie pinov a ich vlastnosti
Obr. 4: Pinout ToF VL53L1X
  • základné informácie o senzore:


Obr. 5: VL53L1X Informácie
  • Minimálna meracia vzdialenosť je 4cm. Senzor vie merať aj pod touto hodnotou avšak vzdialenosť nebude presná.
  • Senzor dokáže pracovať v 3 základných meracích módoch :

  • Režim Long dokáže merať objekty až do vzdialenosti 4m, avšak táto vzdialenosť je vo veľkej miere ovplyvňovaná okolitým svetlom.
  • Režim Short je odolnejší voči okolitému svetlu, ale jeho maximálna vzdialenosť je zvyčajne obmedzená na 1,3 m.


Literatúra:

Analýza

Aby sme boli schopný vôbec získať nejaké informácie zo senzora ToF, musíme poznať princíp fungovania I2C zbernice. I2C je dvojvodičová obojsmerná sériová zbernica, vytvorená firmou PHILIPS SEMICONDUCTORS, určená pre komunikáciu jednočipových procesorov s podriadenými obvodmi (SLAVE). Využíva 2 vodiče SDA a SLC

SDA – slúži pre prenos sériových dát.

SLC – slúži pre prenos hodinového signálu (takty).

Obe linky musia byť pripojené na kladný pól napájacieho napätia prostredníctvom tzv. pull-up rezistorov (jedná sa vlastne o výstup typu otvorený kolektor). Tým je zabezpečená práca liniek SDA a SLC v obidvoch smeroch.

Prenos bitov – V priebehu jedného hodinového cyklu SLC je prenesený práve jeden dátový bit (obr. 6). Dáta privedené na linku SDA musia zostať nemenné po celú dobu taktovania kladného impulzu hodín SLC. Pri SLC=1 sú totiž zmeny SDA chápané ako riadiaci signál.


  • Data transfer protocol senzora VL53L1X :

Obr. 6: Data Protocol
  • Adresa senzora 0x52:

Obr. 7: Adresa senzora
  • Schéma zapojenia senzora a jeho vývodov:

Obr. 8: Celková schéma zapojenia


  • Výstup zo senzora je hodnota vzdialenosti v [mm]

Popis riešenia

Po naštudovaní I2C zbernice sme zapojili ToF senzor podľa obrázku č.9 . Kedže senzor už obsahoval na svojej doske pull up rezistory pre SDA a SCL, mohli sme s pokojom na duši prepojiť tieto piny medzi mikrokontrolérom arduino UNO PLUS a senzorom VL53X1L. Napájanie samotného senzora je v rozpätí medzi 2,5V až 3,5 V, práve preto sme aj používali Arduino UNO PLUS kde sa dá prestaviť 5V logika na 3V3 logiku. Pri bližšom skúmaní sme zistili že senzor má na svojej DPS aj napätoví regulátor na 3V3, čo znamená, že sme mohli použiť aj klasické Arduino UNO. Po zapojení snimača sme už mohli získavať hodnotu zo senzora v mm. Ďalej túto hodnotu sme posielali cez sériovú komunikáciu do PC, kde pomocou programu Processing sme vizualizovali túto hodnotu.

Schéma zapojenia snímača

Obr. 9: Prepojenie Arduina a ToF senzora


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.

Obr. 10: Diagram zapojenia

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

  • Pre zostrojenie identického merača vzdialenosti stačí pozapájať senzor s arduinom podľa priloženej schémy zapojenia a nahrať kódy do arduina a do programu Processing, po spustení tlačidla Play v Processingu by sa Vám malo otvoriť okienko s obdlžníkom a meranou vzdialenosťou.
  • Výstupom celého nášho projektu je zmeraná vzdialenosť objektu od senzora, ktorú následne vizualizujeme pomocou bieleho obdlžničku, ktorý sa pohybuje zľava doprava na základe zmeranej vzdialenosti. Taktiež vypisujeme aj zmeranú hodnotu nad týmto obdlžničkom.

Obr. 11: Kontrola meranej vzdialenosti polokrajčírskym metrom z Hornbachu

Obr. 12: Vizualizácia nameranej vzdialenosti



Späť na zoznam projektov...