Basic robot - Micro-mouse: Rozdiel medzi revíziami

Zo stránky 3D liga wiki
Prejsť na navigáciu Prejsť na vyhľadávanie
Sebastian (diskusia | príspevky)
Bez shrnutí editace
dBez shrnutí editace
 
(5 medziľahlých úprav od 2 ďalších používateľov nie je zobrazených)
Riadok 1: Riadok 1:
=== Manuál skladania myši v bludisku===
Ďalší robot, ktorého sme pre vás pripravili je Micro mouse (odvar z myši v bludisku).
Tento robotik po zlozeni bude vlozeny do bludiska, v ktorom sa bude moct pohybovat vdaka svojim trom laser distance senzorom primontovane na troch stranach. Pre to aby mys isla rovno zaistuje gyroskop a jednoduchy algoritmus na usmernenie robotika.
Dalej budeme musiet navrhnut algoritmus ako sa bude pohybovat.
Bude to narocnejsie na programovanie, ale za to sa viacej naucite nie len o stavebnici ale o tom co su algoritmi.
Samotny algoritmus bude vysvetleny v sekcii [[SW Setup]], ale najprv sa pustme do stavania.


Toto je manuál na to, aby ste si mohli jednoducho poskladať svoju robotickú myš v bludisku.
* [[Návod na poskladanie myši v bludisku |  Návod na skladanie myši v bludisku]]
Úplné základy montáže sú vysvetlené v sekcii [[3D models]], ale detaily budú vysvetlené v texte pod obrázkami.
Pôjdeme krok po kroku a postupne sa vaša myš bude formovať.
Pre začiatok si najprv prichystáme všetky komponenty a súčiastky, ktoré budeme potrebovať.
Okrem nich sa vám zíde aj menšie nástroje, napríklad kliešte a skrutkovač, na uťahovanie matíc na ťažšie dostupných miestach.
Neponáhľajte sa a pri každom kroku si najprv pozrite priložené obrázky – ušetríte si tak čas aj prípadné komplikácie.


<div style="display: flex; flex-wrap: wrap; gap: 16px; align-items: flex-start;">
Ak nájdete chyby v návode, prosíme napíšte nám.


<div style="flex: 2; min-width: 300px;">
=== Jednoduchý testovací program ===
== Vytlačené súčiastky ==
{| class="wikitable"
! Skupina !! Súčiastka !! Počet
|-
| Čierne || 2x1-U || 2
|-
| rowspan="7" | Biele || 1x2-1x2-L || 4
|-
| 3x1-3x1-L || 3
|-
| 2x1-2x1-L || 2
|-
| 1x2 || 2
|-
| 1x5 || 2
|-
| 1x7 || 1
|-
| Držiak na guličku || 1
|-
| Modré ||  Servo YZ1 || 2
|-
| rowspan="3" | Červené || Držiak káblov || 1
|-
| Držiak na laserový senzor || 3
|-
| Držiak na gyroskop || 1
|}
</div>


<div style="flex: 1; min-width: 220px;">
Bližšie informácie a nastavenia elektroniky nájdete v [[Electronics | manuále jednotlivej súčiastky ]]
== Mechanické súčiastky ==
{| class="wikitable"
! Súčiastka !! Počet
|-
| servo skrutka || 6
|-
| skrutka M3×8 (menšia) || ~20
|-
| skrutka M3×10 (väčšia) || ~20
|-
| matica M3 || ~40
|-
| Podporná gulička || 1
|-
| Hrebeň || 2x4
|-
| Kolesá s gumovou podrážkou || 2
|}
</div>


<div style="flex: 1; min-width: 220px;">
Na videu vidieť činnosť testovacieho programu - najskôr inicializuje všetky tri IR senzory a IMU senzor - ktorý sa pri štarte kalibruje, vtedy je potrebné robotom čo najviac pootáčať do všetkých smerov. Po úspešnej inicializácii senzorov vyskúša krátke jednoduché pohyby 360-stupňovými servami a napokon donekonečna zobrazuje aktuálne prečítané hodnoty zo senzorov: vzdialenosť vľavo, vpred a vpravo a orientácia robota: yaw - otočenie okolo zvislej osi, pitch - otočenie okolo vodorovnej osi pozdĺežnej v smere jazdy robota a roll - otočenie okolo vodorovnej osi kolmej na smer jazdy robota.


== Elektronika ==
<youtube width="390" height="700">6ydBQDTeRiM</youtube>
{| class="wikitable"
! Súčiastka !! Počet
|-
| 360° servo || 2
|-
| RP2350 || 1
|-
| Laserový senzor || 3
|-
| Gyroskop || 1
|-
| Napájanie batériek || 1
|-
| Krátke káble || 12x2
|}
</div>


</div>
=== Jednoduchý testovací program ===


[[File:MicroMouseManualImage1.jpg | 500px]]
Jednoduchý test na overenie, že obe servá, všetky tri laserové senzory a IMU senzor fungujú tak, ako majú. Ak adresa pre IMU 0x29 nefunguje, vyskúšajte 0x28. 
<br>


== Postup skladania: ==
<syntaxhighlight lang="C++">
#include <Servo.h>
#include <Adafruit_NeoPixel.h>
#include <Wire.h>
#include <VL53L0X.h>    //VL553L0X by Pololu  (testovane s verziou 1.3.1)
#include <Adafruit_BNO055.h>  // testovane s verziou 1.6.4


<div style="border: 2px solid #999; padding: 8px; margin-bottom: 12px;">
#define PIN        16     
=== Krok 1 ===
#define NUMPIXELS  1    
<div style="display: flex; flex-wrap: wrap; gap: 8px; padding: 8px;">
[[File:MicroMouseManualImage2.jpg | 300px]]
[[File:MicroMouseManualImage3.jpg | 300px]]
[[File:MicroMouseManualImage4.jpg | 300px]]
[[File:MicroMouseManualImage5.jpg | 300px]]
[[File:MicroMouseManualImage6.jpg | 300px]]
[[File:MicroMouseManualImage7.jpg | 300px]]
[[File:MicroMouseManualImage8.jpg | 300px]]
[[File:MicroMouseManualImage9.jpg | 300px]]
[[File:MicroMouseManualImage10.jpg | 300px]]
[[File:MicroMouseManualImage11.jpg | 300px]]
</div>


</div>
Adafruit_NeoPixel pixels(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);


<div style="border: 2px solid #999; padding: 8px; margin-bottom: 12px;">
// GPIO piny podla manualu
=== Krok 2 ===
const int PIN_SERVO_LAVE    = 1;
<div style="display: flex; flex-wrap: wrap; gap: 8px; padding: 8px;">
const int PIN_SERVO_PRAVE  = 2;
[[File:MicroMouseManualImage12.jpg | 300px]]
const int PIN_XSHUT_LAVY    = 8;
[[File:MicroMouseManualImage13.jpg | 300px]]
const int PIN_XSHUT_PRAVY  = 12;
[[File:MicroMouseManualImage14.jpg | 300px]]
const int PIN_XSHUT_PREDNY  = 13;
[[File:MicroMouseManualImage15.jpg | 300px]]
[[File:MicroMouseManualImage16.jpg | 300px]]
</div>


</div>
const int SERVO_STOP        = 93;


Servo servoLave;
Servo servoPrave;


<div style="border: 2px solid #999; padding: 8px; margin-bottom: 12px;">
VL53L0X meracLavy;
=== Krok 3 ===
VL53L0X meracPravy;
<div style="display: flex; flex-wrap: wrap; gap: 8px; padding: 8px;">
VL53L0X meracPredny;
[[File:MicroMouseManualImage17.jpg | 300px]]
[[File:MicroMouseManualImage19.jpg | 300px]]
[[File:MicroMouseManualImage18.jpg | 300px]]
[[File:MicroMouseManualImage20.jpg | 300px]]
[[File:MicroMouseManualImage21.jpg | 300px]]
[[File:MicroMouseManualImage22.jpg | 300px]]
</div>


</div>
const int ADRESA_LAVY = 0x34;
const int ADRESA_PRAVY = 0x36;
const int ADRESA_PREDNY = 0x38;


const int BNO055_ADRESA = 0x29;


Adafruit_BNO055 orientacia(55, BNO055_ADRESA, &Wire);


<div style="border: 2px solid #999; padding: 8px; margin-bottom: 12px;">
void zablikaj()
=== Krok 4 ===
{
<div style="display: flex; flex-wrap: wrap; gap: 8px; padding: 8px;">
  for (int i = 0; i < 7; i++)
[[File:MicroMouseManualImage23.jpg | 300px]]
  {
[[File:MicroMouseManualImage24.jpg | 300px]]
    pixels.setPixelColor(0, pixels.Color(30, 30, 30));
[[File:MicroMouseManualImage25.jpg | 300px]]
    pixels.show();  
[[File:MicroMouseManualImage26.jpg | 300px]]
    delay(500);
[[File:MicroMouseManualImage28.jpg | 300px]]
    pixels.setPixelColor(0, pixels.Color(0, 0, 0));
[[File:MicroMouseManualImage29.jpg | 300px]]
    pixels.show(); 
[[File:MicroMouseManualImage30.jpg | 300px]]
    delay(500);
[[File:MicroMouseManualImage31.jpg | 300px]]
  }
}
void setup() {
  pixels.begin();
  pixels.clear();
  Serial.begin(115200);


</div>
  pinMode(PIN_XSHUT_LAVY, OUTPUT);
  digitalWrite(PIN_XSHUT_LAVY, HIGH);  // zacneme konfigurovat lavy
  pinMode(PIN_XSHUT_PRAVY, OUTPUT);
  digitalWrite(PIN_XSHUT_PRAVY, LOW);
  pinMode(PIN_XSHUT_PREDNY, OUTPUT);
  digitalWrite(PIN_XSHUT_PREDNY, LOW);


</div>
  servoLave.attach(PIN_SERVO_LAVE, 540, 2400);
  servoPrave.attach(PIN_SERVO_PRAVE, 540, 2400);


  servoLave.write(SERVO_STOP);
  servoPrave.write(SERVO_STOP);


<div style="border: 2px solid #999; padding: 8px; margin-bottom: 12px;">
  zablikaj(); // pre istotu cakame na seriovy port v arduino IDE
=== Krok 5 ===
<div style="display: flex; flex-wrap: wrap; gap: 8px; padding: 8px;">
[[File:MicroMouseManualImage32.jpg | 300px]]
[[File:MicroMouseManualImage33.jpg | 300px]]
[[File:MicroMouseManualImage34.jpg | 300px]]
[[File:MicroMouseManualImage35.jpg | 300px]]
[[File:MicroMouseManualImage36.jpg | 300px]]
[[File:MicroMouseManualImage37.jpg | 300px]]
[[File:MicroMouseManualImage38.jpg | 300px]]
</div>


</div>
  Wire1.setSDA(6);  // pre istotu nastavenie default pinov I2C1
  Wire1.setSCL(7); 
  Wire1.begin();
 
  // inicializujeme prvy a nastavime mu adresu
  meracLavy.setBus(&Wire1);


<div style="border: 2px solid #999; padding: 8px; margin-bottom: 12px;">
  if (!meracLavy.init()) {
=== Krok 6 ===
    Serial.println("Lavy senzor nenajdeny!");
<div style="display: flex; flex-wrap: wrap; gap: 8px; padding: 8px;">
    while (1); // zastav program
[[File:MicroMouseManualImage39.jpg | 300px]]
  }
[[File:MicroMouseManualImage40.jpg | 300px]]
  meracLavy.setAddress(ADRESA_LAVY);
[[File:MicroMouseManualImage41.jpg | 300px]]
  meracLavy.setTimeout(500);
</div>
  Serial.println("Lavy OK");


</div>
  digitalWrite(PIN_XSHUT_PRAVY, HIGH);  // spristupnime pravy na konfiguraciu (lavy uz nekoliduje, je na inej adrese)
 
  // inicializujeme druhy a nastavime mu adresu
  meracPravy.setBus(&Wire1);
 
  if (!meracPravy.init()) {
    Serial.println("Pravy senzor nenajdeny!");
    while (1);  // zastav program
  }
  meracPravy.setAddress(ADRESA_PRAVY);
  meracPravy.setTimeout(500);
  Serial.println("Pravy OK");


  digitalWrite(PIN_XSHUT_PREDNY, HIGH);  // napokon spristupnime predny na konfiguraciu (ostatne dva uz nekoliduju)
  meracPredny.setBus(&Wire1);
  if (!meracPredny.init()) {
    Serial.println("Predny senzor nenajdeny!");
    while (1);  // zastav program
  }


<div style="border: 2px solid #999; padding: 8px; margin-bottom: 12px;">
  meracPredny.setAddress(ADRESA_PREDNY);
=== Krok 7 ===
  meracPredny.setTimeout(500);
<div style="display: flex; flex-wrap: wrap; gap: 8px; padding: 8px;">
  Serial.println("Predny OK");
[[File:MicroMouseManualImage42.jpg | 300px]]
[[File:MicroMouseManualImage43.jpg | 300px]]
[[File:MicroMouseManualImage44.jpg | 300px]]
[[File:MicroMouseManualImage45.jpg | 300px]]
[[File:MicroMouseManualImage46.jpg | 300px]]
[[File:MicroMouseManualImage47.jpg | 300px]]
[[File:MicroMouseManualImage48.jpg | 300px]]
</div>


</div>
  delay(100);
  // zacneme merat na vsetkych troch senzoroch
  meracLavy.startContinuous();
  meracPravy.startContinuous();
  meracPredny.startContinuous();


<div style="border: 2px solid #999; padding: 8px; margin-bottom: 12px;">
  Wire.setSDA(4);
=== Krok 8 ===
  Wire.setSCL(5);
<div style="display: flex; flex-wrap: wrap; gap: 8px; padding: 8px;">
  Wire.begin();
[[File:MicroMouseManualImage49.jpg | 300px]]
[[File:MicroMouseManualImage50.jpg | 300px]]
[[File:MicroMouseManualImage51.jpg | 300px]]
[[File:MicroMouseManualImage52.jpg | 300px]]
[[File:MicroMouseManualImage53.jpg | 300px]]
[[File:MicroMouseManualImage54.jpg | 300px]]
[[File:MicroMouseManualImage55.jpg | 300px]]
</div>


</div>
  if (!orientacia.begin())
  {
    Serial.println("Nepodarilo sa inicializovat IMU senzor.");
    while (1);
  }


  uint8_t system, gyro, accel, mag;
  do {
    orientacia.getCalibration(&system, &gyro, &accel, &mag);
    if (system < 1) {
      Serial.println("Kalibracia IMU...");
      delay(100);
    }
  } while (system != 3);


<div style="border: 2px solid #999; padding: 8px; margin-bottom: 12px;">
  Serial.println("Senzory inicializovane, poloz robota, spustam test motorov...");
=== Krok 8 ===
  delay(5000);
<div style="display: flex; flex-wrap: wrap; gap: 8px; padding: 8px;">
}
[[File:MicroMouseManualImage56.jpg | 300px]]
[[File:MicroMouseManualImage57.jpg | 300px]]
[[File:MicroMouseManualImage58.jpg | 300px]]
[[File:MicroMouseManualImage59.jpg | 300px]]
[[File:MicroMouseManualImage60.jpg | 300px]]
</div>


</div>
void fwd()
{
  servoLave.write(SERVO_STOP + 30);
  servoPrave.write(SERVO_STOP - 30);
}
 
void bwd()
{
  servoLave.write(SERVO_STOP - 30);
  servoPrave.write(SERVO_STOP + 30);
}
 
void stop()
{
  servoLave.write(SERVO_STOP);
  servoPrave.write(SERVO_STOP);
}
 
void right()
{
  servoLave.write(SERVO_STOP + 30);
  servoPrave.write(SERVO_STOP + 30); 
}
 
void left()
{
  servoLave.write(SERVO_STOP - 30);
  servoPrave.write(SERVO_STOP - 30); 
}
 
int x = 0;
 
void loop()
{
  fwd();
  delay(700);
  bwd();
  delay(700);
  left();
  delay(500);
  right();
  delay(500);
  stop();
 
  while (1)
  {
      Serial.print(x++);
      Serial.print(": ");
      Serial.print(meracLavy.readRangeContinuousMillimeters());
      if (meracLavy.timeoutOccurred()) Serial.print("TIMEOUT");
      Serial.print(" ");
      Serial.print(meracPredny.readRangeContinuousMillimeters());
      if (meracPredny.timeoutOccurred()) Serial.print("TIMEOUT");
      Serial.print(" ");
      Serial.print(meracPravy.readRangeContinuousMillimeters());
      if (meracPravy.timeoutOccurred()) Serial.print("TIMEOUT");     
     
      imu::Vector<3> euler = orientacia.getVector(Adafruit_BNO055::VECTOR_EULER);
      Serial.print(",  yaw: "); Serial.print(euler.x());
      Serial.print(", pitch: "); Serial.print(euler.y());
      Serial.print(", roll: "); Serial.println(euler.z());
      delay(100);
  }
}
</syntaxhighlight>

Aktuálna revízia z 07:53, 6. september 2026

Ďalší robot, ktorého sme pre vás pripravili je Micro mouse (odvar z myši v bludisku). Tento robotik po zlozeni bude vlozeny do bludiska, v ktorom sa bude moct pohybovat vdaka svojim trom laser distance senzorom primontovane na troch stranach. Pre to aby mys isla rovno zaistuje gyroskop a jednoduchy algoritmus na usmernenie robotika. Dalej budeme musiet navrhnut algoritmus ako sa bude pohybovat. Bude to narocnejsie na programovanie, ale za to sa viacej naucite nie len o stavebnici ale o tom co su algoritmi. Samotny algoritmus bude vysvetleny v sekcii SW Setup, ale najprv sa pustme do stavania.

Ak nájdete chyby v návode, prosíme napíšte nám.

Jednoduchý testovací program

Bližšie informácie a nastavenia elektroniky nájdete v manuále jednotlivej súčiastky

Na videu vidieť činnosť testovacieho programu - najskôr inicializuje všetky tri IR senzory a IMU senzor - ktorý sa pri štarte kalibruje, vtedy je potrebné robotom čo najviac pootáčať do všetkých smerov. Po úspešnej inicializácii senzorov vyskúša krátke jednoduché pohyby 360-stupňovými servami a napokon donekonečna zobrazuje aktuálne prečítané hodnoty zo senzorov: vzdialenosť vľavo, vpred a vpravo a orientácia robota: yaw - otočenie okolo zvislej osi, pitch - otočenie okolo vodorovnej osi pozdĺežnej v smere jazdy robota a roll - otočenie okolo vodorovnej osi kolmej na smer jazdy robota.

Jednoduchý testovací program

Jednoduchý test na overenie, že obe servá, všetky tri laserové senzory a IMU senzor fungujú tak, ako majú. Ak adresa pre IMU 0x29 nefunguje, vyskúšajte 0x28.

#include <Servo.h>
#include <Adafruit_NeoPixel.h>
#include <Wire.h>
#include <VL53L0X.h>    //VL553L0X by Pololu   (testovane s verziou 1.3.1)
#include <Adafruit_BNO055.h>  // testovane s verziou 1.6.4

#define PIN        16       
#define NUMPIXELS  1      

Adafruit_NeoPixel pixels(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);

// GPIO piny podla manualu 
const int PIN_SERVO_LAVE    = 1;
const int PIN_SERVO_PRAVE   = 2;
const int PIN_XSHUT_LAVY    = 8;
const int PIN_XSHUT_PRAVY   = 12;
const int PIN_XSHUT_PREDNY  = 13;

const int SERVO_STOP        = 93;

Servo servoLave;
Servo servoPrave;

VL53L0X meracLavy;
VL53L0X meracPravy;
VL53L0X meracPredny;

const int ADRESA_LAVY = 0x34;
const int ADRESA_PRAVY = 0x36;
const int ADRESA_PREDNY = 0x38;

const int BNO055_ADRESA = 0x29;

Adafruit_BNO055 orientacia(55, BNO055_ADRESA, &Wire);

void zablikaj()
{
  for (int i = 0; i < 7; i++)
  {
    pixels.setPixelColor(0, pixels.Color(30, 30, 30));
    pixels.show();   
    delay(500);
    pixels.setPixelColor(0, pixels.Color(0, 0, 0));
    pixels.show();   
    delay(500);
  }
}
void setup() {
  pixels.begin(); 
  pixels.clear(); 
  Serial.begin(115200);

  pinMode(PIN_XSHUT_LAVY, OUTPUT);
  digitalWrite(PIN_XSHUT_LAVY, HIGH);  // zacneme konfigurovat lavy
  pinMode(PIN_XSHUT_PRAVY, OUTPUT);
  digitalWrite(PIN_XSHUT_PRAVY, LOW);
  pinMode(PIN_XSHUT_PREDNY, OUTPUT);
  digitalWrite(PIN_XSHUT_PREDNY, LOW);

  servoLave.attach(PIN_SERVO_LAVE, 540, 2400);
  servoPrave.attach(PIN_SERVO_PRAVE, 540, 2400);

  servoLave.write(SERVO_STOP);
  servoPrave.write(SERVO_STOP);

  zablikaj();  // pre istotu cakame na seriovy port v arduino IDE

  Wire1.setSDA(6);  // pre istotu nastavenie default pinov I2C1
  Wire1.setSCL(7);  
  Wire1.begin();
  
  // inicializujeme prvy a nastavime mu adresu
  meracLavy.setBus(&Wire1);

  if (!meracLavy.init()) {
    Serial.println("Lavy senzor nenajdeny!");
    while (1);  // zastav program
  }
  meracLavy.setAddress(ADRESA_LAVY);
  meracLavy.setTimeout(500);
  Serial.println("Lavy OK");

  digitalWrite(PIN_XSHUT_PRAVY, HIGH);   // spristupnime pravy na konfiguraciu (lavy uz nekoliduje, je na inej adrese)
  
  // inicializujeme druhy a nastavime mu adresu
  meracPravy.setBus(&Wire1);
  
  if (!meracPravy.init()) {
    Serial.println("Pravy senzor nenajdeny!");
    while (1);  // zastav program
  }
  meracPravy.setAddress(ADRESA_PRAVY);
  meracPravy.setTimeout(500);
  Serial.println("Pravy OK");

  digitalWrite(PIN_XSHUT_PREDNY, HIGH);   // napokon spristupnime predny na konfiguraciu (ostatne dva uz nekoliduju)
  meracPredny.setBus(&Wire1);
  if (!meracPredny.init()) {
    Serial.println("Predny senzor nenajdeny!");
    while (1);  // zastav program
  }

  meracPredny.setAddress(ADRESA_PREDNY);
  meracPredny.setTimeout(500);
  Serial.println("Predny OK");

  delay(100);
  // zacneme merat na vsetkych troch senzoroch
  meracLavy.startContinuous();
  meracPravy.startContinuous();
  meracPredny.startContinuous();

  Wire.setSDA(4);
  Wire.setSCL(5);
  Wire.begin();

  if (!orientacia.begin())
  {
    Serial.println("Nepodarilo sa inicializovat IMU senzor.");
    while (1);
  }

  uint8_t system, gyro, accel, mag;
  do {
    orientacia.getCalibration(&system, &gyro, &accel, &mag);
    if (system < 1) {
      Serial.println("Kalibracia IMU...");
      delay(100);
    }
  } while (system != 3);

  Serial.println("Senzory inicializovane, poloz robota, spustam test motorov...");
  delay(5000);
}

void fwd()
{
  servoLave.write(SERVO_STOP + 30);
  servoPrave.write(SERVO_STOP - 30);
}

void bwd()
{
  servoLave.write(SERVO_STOP - 30);
  servoPrave.write(SERVO_STOP + 30);
}

void stop()
{
  servoLave.write(SERVO_STOP);
  servoPrave.write(SERVO_STOP);
}

void right()
{
  servoLave.write(SERVO_STOP + 30);
  servoPrave.write(SERVO_STOP + 30);  
}

void left()
{
  servoLave.write(SERVO_STOP - 30);
  servoPrave.write(SERVO_STOP - 30);  
}

int x = 0;

void loop() 
{
  fwd();
  delay(700);
  bwd();
  delay(700);
  left();
  delay(500);
  right();
  delay(500);
  stop();

  while (1)
  {
      Serial.print(x++);
      Serial.print(": ");
      Serial.print(meracLavy.readRangeContinuousMillimeters());
      if (meracLavy.timeoutOccurred()) Serial.print("TIMEOUT");
      Serial.print(" ");
      Serial.print(meracPredny.readRangeContinuousMillimeters());
      if (meracPredny.timeoutOccurred()) Serial.print("TIMEOUT");
      Serial.print(" ");
      Serial.print(meracPravy.readRangeContinuousMillimeters());
      if (meracPravy.timeoutOccurred()) Serial.print("TIMEOUT");      
      
      imu::Vector<3> euler = orientacia.getVector(Adafruit_BNO055::VECTOR_EULER);
      Serial.print(",   yaw: "); Serial.print(euler.x());
      Serial.print(", pitch: "); Serial.print(euler.y());
      Serial.print(", roll: "); Serial.println(euler.z());
      delay(100);
  } 
}