Arduino 6: Modelářská serva

Díl 6 z 7 v seriálu Arduino

Modelářské servo je velice zajímavá součástka pokud máte v úmyslu tvořit pohyblivé věci. Servo je v podstatě elektromotor s převodovkou a elektronikou, která za vás vyřeší řízení motoru. Na rozdíl od elektromotoru se klasické servo neumí kontinuálně otáčet, ale zvládá pohyb v rozmezí 180 stupňů. Pro kontinuální rotační pohyb se musí servo upravit a nebo koupit již upravené. K tomu se dostaneme později.

Noname servo z Dealextreme a servo značky Hitec

Serva koupíte v modelářských obchodech a nebo stejně jako většinou součástek přes eBay či DealExtreme z Číny za pár korun. Pokud si servo objednáte tak dostanete přibližně to co vidíte na fotkách. Modul serva a nějaké příslušenství, které se používá k přenosu síly v modelařině typicky na pohyb křidélek na letadle a podobně.

Po elektrické stránce se servo ovládá pomocí impulsů 1ms – 2ms. Kdy impuls dlouhý 1ms znamená 0° natočení , 1.5ms 90° a 2ms 180°. Doporučená frekvence je 50Hz. Pro řízení pomocí arduina ovšem použijeme již připravenou knihovnu a ta tyto detaily pohlídá za nás.
Ze serva vedou tři dráty: červený kladné napájení, černý záporné napájení (na čínských servech může být i hnědý), žlutý řídící impulsy. Typicky se serva fungují na 5V napájení, ale vždy si dejte pozor na specifikace toho co koupíte. Některá serva s větší silou potřebují vyšší napětí, aby dosáhly udávané síly. Pokud začínáte s obyčejným malým servem tak jej můžete napojit přímo na arduino podle následujícího obrázku.

Schéma připojení serva k Arduinu

Pro ovládání budeme potřebovat již slíbenou knihovnu, která je teda součástí instalačního balíku arduina, ale použití knihoven jsem v návodech ještě neukazoval.
Je to poměrně jednoduché na začátku  přidáme knihovnu.

#include <Servo.h>

To bude fungovat pokud je knihovna Servo.h správně přidaná v adresáři “libraries”. Dále v definicích vytvoříme proměnou typu “Servo”.

Servo mojeServo;

Pak v sekci “setup” nadefinujeme ke kterému portu máme servo připojené.

mojeServo.attach(9);

Následně můžeme libovolně volat metodu “write” a říkat pod jakým úhlem má být servo natočeno(0-180).

mojeServo.write(uhel);

Dohromady by tedy mohl celý příklad vypadat takto:

/*
Program na ovládání serva
www.pistek.eu
*/

#include <Servo.h>

Servo mojeServo;

void setup(){
   mojeServo.attach(9);//definice portu připojení serva
}

void loop(){
   mojeServo.write(0);//nastav servo na uhel 0
   delay(500);//počkej 500ms
   mojeServo.write(30);//nastav servo na uhel 30
   delay(60*1000UL);//pockej 60*1000ms
}

A co to bude dělat. Nadefinujeme servo připojené na port 9, jednou za vteřinu přejde na 50ms do úhlu 0 a pak se zase vrátí na úhel 180. Ještě vás na příkaldu může zarazit “UL” u výpočtu dlouhé pauzy. UL znamená Unsigned Long, neboli typ 32 bitů kladné číslo. UL dává vědět překladači, že výsledek výpočtu může být až takhle velký.  A celá tato konstrukce může sloužit přeba jako pravidelná spoušť fotoaparátu pro tvorbu takzvaných timelapse snímků.

Ještě poslední věc a tou je slibovaná úprava na kontinuální rotační pohyb. Takto se serva předělávají na pohonné jednotky pro jednodušší roboty. Šířkou impulsu potom neřídíte úhel natočení, ale rychlost a směr otáčení. Stačí tedy následně ke dvěma upraveným servům připevnit kolečka a máte jednoduchého robotka na diferenciální ovládání. Samotná úprava serva je možná jenom u některých serv a vyžaduje jeho rozebrání. Vevnitř je potřeba ubrousit zarážku na posledním ozubeném kole tak aby se mohlo otáčet o celou otáčku. V elektronice je potřeba nahradit potenciometr, který slouží jako zpětná vazba s informací o úhlu natočení, dvěma odpory které jsou polovičního odporu než původní dráha potenciometru. V některých servech je možné servo jenom mechanicky odpojit a nastavit na střed. Sám jsem úpravu ještě neprováděl, takže vlastní fotky nemám. Možná dodám později, zatím se můžete podívat třeba na tento návod.

Další díly seriálu<< Arduino 5: cyklyArduino 7: časování s millis() a více činností najednou >>
Sdílení

One thought on “Arduino 6: Modelářská serva

Leave a Reply

Your email address will not be published. Required fields are marked *