Close

Jak hacknout servo motor

Jak hacknout servo motor

Co si vlastně pod pojmem hacknutí servo motoru představit? V principu nejde o nic složitého, jedná se o úpravu servo motoru tak, aby se bez omezení dokázal otáčet kolem své osy. Hlavní výhodou je získání motoru s převodovkou, který lze řídit přímo pomocí Arduina. Upravený motor se otáčí na základě přijímaného signálu. Ukažme si to na na konkrétních příkladech servo řízení. Pokud nahrajeme do Arduina zdrojový kód obsahující příkaz: servo.write(0), znamená to plný chod motoru vpřed. Příkaz servo.write(90), zajistí zastavení motoru a při použití příkazu servo.write(180), se bude motor otáčet plným chodem vzad. Mimo těchto konkrétních čísel lze využít celý rozsah hodnot 0-180, které zajišťují kontrolu nad rychlostí otáčení motoru.

POTŘEBNÝ HW:

POSTUP

Začneme tím, že odšroubujeme spodní stranu servo motoru. Po vyjmutí šroubků nám půjde snadno sundat i vrchní část. Následně odstraníme povrchová ozubená kola. Nyní se zaměříme na jedno z těchto kol, většinou se jedná o kolečko, které kouká ven ze servo motoru. Nachází se na něm malá zarážka, která brání servo motoru v otočení o více než 180°. Tuto zarážku budeme muset odstranit, někdy je třeba použít trochu „hrubé“ síly.

Rezebrání servo motoru na jednotlivé komponenty.
Rozebrání servo motoru.

Nyní se přesuneme na spodní stranu, musíme vyndat řídící destičku, pod kterou je schovaný trimr. Z naší destičky k němu vedou tři červené kabely. Trimr udává servo motoru v jaké poloze se nachází. Tyto kabely musíme odstřihnout.

Odstřihnutí trimru od plošného obvodu servo motoru.
Odstřihnutí trimru od servo motoru.

Dalším krokem je změření odporu trimru. Pomocí multimetru zjistíme odpor mezi prostřední a oběma krajními kolíky. V našem případě nám vyšlo R1 = 2.64 kΩ a R2 = 2.53 kΩ. Ze vzorce:

vzorec

lze jednoduše vypočítat hodnotu rezistorů, které použijeme. V našem případě nám vyšlo R = 2.58 kΩ. Na místa kam na destičce vedly kabely napájíme dva rezistory přibližně této hodnoty (my zvolili menší rezistory o velikosti 2 kΩ).

Změření potřebné velikosti odporů a jejich napájení na plošný obvod servo motoru.
Změření potřebné velikosti odporů a jejich napájení na plošný obvod servo motoru.

Nyní už jen stačí přelepit odpory izolační páskou a sešroubovat servo motor zpátky dohromady. Finálním krokem je otestování správné funkčnosti hacknutého servo motoru.

Závěrečná kompletace motoru a otestování jeho funkčnosti.
Závěrečná kompletace servo motoru.

Na obrázku níže je možné vidět ukázku servo řízení pomocí Arduina a zapojení servo motoru k Arduinu. Pro motor je v našem případě potřeba napětí v rozsahu 6-7 V. Datový kabel ze servo motoru jsme připojili na PWM pin č. 9.

Schématické zapojení servo motoru k Arduinu
Zapojení servo motoru.

Do Arduina jsme nahráli následující zdrojový kód, který zajišťuje roztočení servo motoru na plný chod.

#include <Servo.h>        // Importování knihovny pro servo motor

Servo mojeServo;          // Vytvoření proměnné mojeServo

void setup(){

   mojeServo.attach(9);       // Připojení k pinu 9

}

void loop(){

   mojeServo.write(0);    // Roztočení serva na plný chod

}

Tento článek jsme vytvořili spolu s Honzou Czapkem. Doufáme, že bude návod nápomocný a přejeme Vám mnoho projektů s využitím “hacknutých” servo motorů.

Markéta Jedličková
Latest posts by Markéta Jedličková (see all)

10 Comments on “Jak hacknout servo motor

Marcel Polacek
15.11.2016 at 10:45

Nevim nebylo by lepsi misto odporu dat tam trimr a nastavit ho tak aby pri nastaveni 90 stupnu motor stal?

Markéta Jedličková
15.11.2016 at 13:28
Miroslav Kubín
22.10.2016 at 22:11

Ahoj, chci se zeptat udělal jsem tuto úpravu a když do UNA nahraju váš prográmek, tak mi to otáčí motorem ve směru hodinových ručiček na plný plyn, to je v pořádku, ale když chci otáčení otočit a místo té ,,0″ nahraju 180 potažmo jakékoliv jiné číslo tak se to pořád otáčí do prava na plný plyn, nevíte kde by mohla být chyba? Třeba jsem tam dal špatné rezistory jsem ve fázi experimentování.

Markéta Jedličková
24.10.2016 at 17:09

Zkusila bych změřit multimetrem výstup z pinu č.9. Já naměřila hodnoty: mojeServo.write(0) –> 0.13V, mojeServo.write(90) –> 0.36V, mojeServo.write(180) –> 0.6V, /výstup z Arduina, který běží datovým kabelem do servo motoru), samozřejmě by bylo lepší použít osciloskop, ale lze to ověřit i multimetrem (vyšší hodnoty jsou zapříčiněny zprůměrováním delších pwm pulsů). Pokud máte podobné hodnoty můžete vyloučit SW chybu, nebo HW chybu Arduina a budete vědět jistě že jde o chybu servo motoru. Jaký servo motor byl použit?

posjirka
16.7.2016 at 23:38

Díky za návod. Už bylo unavné prohledávat internet a dávat odkazy do for.
Je možná ještě nějáká úprava pro stabilizaci „nulové“ polohy -> aby se motor zastavil při 90st.

Honza Czapek
17.7.2016 at 11:51

Nulová poloha se pohybuje podle přesnosti rezistoru. Pokud by jste použil rezistory s 1% odchylkou, budete mít největší pravděpodobnost, že 90st bude „nula“. Jiná úprava už bohužel nejde.

posjirka
18.7.2016 at 14:40

i tak se mi ovšem pomalu servo otáčí jedním směrem. Kdysi jsem viděl nějákou úpravu na internetu a nemůžu jí najít… U analogu by to mohlo jít úpravou komparátoru, ale sežeňte dnes analogové servo 🙁
Každopádně díky za reakci.

Honza Czapek
18.7.2016 at 15:59

Není zač,
bohužel i ta odchylka 1% udělá neplechu.

Vojtěch Hudec
16.7.2016 at 18:22

Možná jsem našel maličkou chybku v kódu. v setup() by mělo být mojeServo.attach(9);

Matěj Suchánek
16.7.2016 at 11:23

Napsat komentář