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:
- Servo motor
- Dva rezistory (velikost dle naměřených hodnot)
- Arduino (na otestování)
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.
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.
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:
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Ω).
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.
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.
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ů.
- Jak hacknout servo motor - 16.7.2016
Marcel Polacek
15.11.2016 at 10:45Nevim 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:28To je dobrý nápad 🙂
Miroslav Kubín
22.10.2016 at 22:11Ahoj, 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:09Zkusila 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:38Dí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:51Nulová 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:40i 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:59Není zač,
bohužel i ta odchylka 1% udělá neplechu.
Vojtěch Hudec
16.7.2016 at 18:22Mož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:23Geniální nápad