Operácie

ToF senzor vzdialenosti: Rozdiel medzi revíziami

Zo stránky SensorWiki

Vytvorená stránka „{| |Autori: || '''Ján Mrkvička, Jozef Kuleha''' |- |Študijný odbor: || Aplikovaná mechatronika || 2. Ing. ('''2013''') |} == Zadanie == # Sem príde tex…“
 
Riadok 50: Riadok 50:
=== Algoritmus a program ===
=== Algoritmus a program ===


Uveďte stručný popis algoritmu, v akom jazyku a verzii vývojového prostredia ste ho vytvorili.  
Algoritmus je rozdelený do niekoľkých krokov.
Je vhodné nakresliť aspoň hrubú štruktúru programu napríklad vo forme vývojového diagramu.  
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.
Rozsiahly program pre lepšiu prehľadnosť rozdeľte do viacerých súborov.
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.


Vyberte podstatné časti zdrojového kódu, použite na to prostredie ''source'':
Pre lepšie pochopenie komunikačných kanálov uvádzame jednoduchý diagram.
[[Súbor:diagram.png]]
 
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.


<source lang="c">
<source lang="c">
/* A nezabudnite zdroják hojne komentovať  */


int main(void) {
VL53L1X sensor;                              // definovanie objektu senzora
      
 
     printf("Hello, World!\n");
void setup()
     return(0);   
{
  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
}
}
</source>
</source>


Nezabudnite však nahrať aj kompletné zdrojové kódy vášho programu!
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.


Zdrojový kód: [[Médiá:Serial.h|serial.h]] a [[Médiá:Pip.c|main.c]]
Z uvedeného uvádzame ukážku prevodu znakov na samotné číslo.
 
<source lang="c">
[[Médiá:MojProgram.c|program.c]]


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);
  }
}


</source>


Zdrojový kód: [[Médiá:program2.ino|tof_arduino.ino]] a [[Médiá:tof_distance.pde|tof_processing.pde]]


=== Overenie ===
=== Overenie ===

Verzia z 13:29, 1. máj 2019

Autori: Ján Mrkvička, Jozef Kuleha
Študijný odbor: Aplikovaná mechatronika 2. Ing. (2013)

Zadanie

  1. Sem príde text zadania...
  2. Druhy riadok

link title

Médiá:MojZdrojak.c


Literatúra:

  • Zoznam použitej literatúry, vrátane katalógových údajov (datasheet), internetových odkazov a pod.

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. Súbor:Diagram.png

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...