1. Vývojové prostředí 2. Dálkové ovládání 3. Nový projekt 4. První program 5. Formátování kódu 6. Komentáře 7. Proměnná 8. Větvení 9. Cyklus 10. Funkce 11. LEDky 12. LED pásek 13. Sériová linka 14. Koncová tlačítka 15. Práce s tlačítky 16. Ultrazvuk 17. IR senzor 18. Motory 19. Monitorování robotky 20. Serva (hloupá) Motivace Práce se servy 21. Úpravy dálkového ovládání Dokumentace Příklady

Serva (hloupá)

Motivace

V situacích, kdy má robot s něčím pohybovat, například s klepety pro úchop předmětů, je možné využít serva. Serva jsou speciálním typem motoru, který umožňuje poměrně přesné otáčen i o malé úhly. Oproti klasickým motorům jsou limitovány úhlem, ve kterém se mohou otáčet. Výhodou serv je, že se snaží udržet si daný úhel i když se ho snaží něco pootočit.

Práce se servy

  • rkServosSetPosition - Nastaví pozici serva na novou. Očekává číslo serva a nový úhel, jako parametry. Číslo serva je hodnota od 1 do 4. Úhel je možné nastavit v rozsahu -90° - 90°
  • rkServosGetPosition - Vrací naposledy navrácenou pozici serva (hodnotu, která byla nastavena posledním voláním funkce rkServosSetPosition). Vyžaduje číslo serva jako parametr, v rozmezí 1 - 4. Funkce vrací hodnotu v rozsahu -90 až 90 (stupňů).
  • rkServosDisable - Jakmile není zapotřebí, aby servo drželo svoji pozici, například není zapotřebí nic uchopit, je možné použít touto funkci, která je vypne. Tato funkce vyžaduje jeden parametr a to číslo serva 1 - 4, které má být odpojeno. Tato funkce nevrací žádnou hodnotu.
Úkázka pootočení serva do nové pozice
1
2
3
4
5
6
7
8
#include "robotka.h"

void setup() {
    rkConfig cfg;
    rkSetup(cfg);
   
    rkServosSetPosition(1, 50); // nastav hodnotu serva 1 na 50 stupnu
}

Předchozí ukzka pootočí servem na úhel 50 stupňů. Následující ukázka ukazuje, jak pohybovat servem od jednoho krajního úhlu k druhému.

Úkázka pootočení serva do nové pozice
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include "robotka.h"

void setup() {
    rkConfig cfg;
    rkSetup(cfg);

    while(true){
        for(int uhel = -90; uhel <= 90; uhel++ ){   // otacej servem od -90 do 90
            rkServosSetPosition(1, 50);
        }

        for(int uhel = 90; uhel >= -90; uhel-- ){   // otacej servem od 90 do -90
           rkServosSetPosition(1, 50);
        }
    }
    rkServosDisable(1);
}

Předchozí ukázka pohybuje servem opakovaně od -90° do 90° a poté od 90° do -90°. Nakonec deaktivuje servo