ToF senzor vzdialenosti: Rozdiel medzi revíziami
Zo stránky SensorWiki
Riadok 85: | Riadok 85: | ||
* priebehy dôležitých signálov | * priebehy dôležitých signálov | ||
* este jedna polozka | * este jedna polozka | ||
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. 2). 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. | |||
== Popis riešenia == | == Popis riešenia == |
Verzia z 14:49, 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
- 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
- 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
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.
- Rozloženie pinou a ich vlastnosti
- základné informácie o senzore:
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
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. 2). 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.
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.
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.