Serwomechanizm i Arduino

Jak podłączyć oraz sterować serwomechanizmem przy pomocy Arduino.

Wstęp

Serwomechanizm modelarski

Nadchodzi taki moment kiedy chcemy do naszego robota dodać obrotową głowę z czujnikiem bądź kamerą, albo chcemy go wyposażyć w chwytak. Do tego celu potrzebne nam będą oprócz odpowiedniego mocowania także serwomechanizmy. Cóż to takiego, ano serwomechanizm to nic innego jak silnik DC połączony z potencjometrem, którego pozycja odpowiada pozycji wyjściowej naszego trzpienia, do którego montowany jest orczyk. Dzięki impulsom o odpowiedniej długości jesteśmy w stanie ustawić nasz serwomechanizm w odpowiedniej pozycji. Budowę naszego układu wykonawczego najlepiej oddaje poniższy film.

Należy również wspomnieć, iż serwomechanizmy dzielą się na analogowe i cyfrowe. Różnią się one także wielkością (od micro po standard) i momentami obrotowymi. Zacznijmy od serw cyfrowych, które są głównie używane tam, gdzie zależy nam na dokładności. Mają one dużo większą dokładność, a także możliwość zaprogramowania pozycji neutralnej.

Co za tym idzie są droższe w stosunku do serw analogowych. Z tego względu w robotyce amatorskiej można się najczęściej spotkać z analogowymi. W ofercie sklepów tak jak wcześniej wspomniałem możemy się spotkać nie tylko z różnymi rozmiarami, ale także z różnymi momentami i zębatkami (plastikowe, metalowe lub wykonane z włókna węglowego). W zależności do czego będziemy wykorzystywali nasze serwo, będziemy musieli dobrać model z odpowiednim momentem obrotowym i zdecydować się czy chcemy mieć tryby plastikowe czy metalowe. Załóżmy że w specyfikacji serwa mamy napisane, że moment obrotowy wynosi 3kg cm. Oznacza to, że nasz orczyk o długości 1cm jest w stanie unieść 3kg. Co jeśli chcemy dać dłuższy orczyk? Otóż w tym przypadku kłania nam się wzór na moment M = F r, gdzie F to siła, a r to długość naszego ramienia. Jako, że moment obrotowy jest stały, to wydłużając nasze ramię trzykrotnie, siła nam zmaleje także trzykrotnie. W związku z tym na orczyku o długości 3cm będziemy w stanie podnieść ciężar o masie tylko 1kg.

Micro serwomechanizm

Jeśli zaś chodzi o różnicę pomiędzy trybami plastikowymi, a metalowymi to wniosek nasuwa się sam. Oczywiście warto wybrać serwo z metalowymi trybami, jest ono trochę droższe, ale zyskujemy na wytrzymałości i pewności, że nie dojdzie do uszkodzenia zębatki (zakładając, iż nie będziemy podnosić ciężarów większych niż te które jest w stanie unieść nasze serwo, w przypadku trybów metalowych szybciej uszkodzimy silnik lub sterownik niż tryby). W przypadku serw z plastikowymi trybami sytuacja jest trochę inna. Tu sporą rolę odgrywa producent. Jeśli mamy do wyboru serwo w miarę znanej firmy i typowego chińczyka no-name, warto kupić model znanego producenta. Zyskujemy po pierwsze pewność, że podczas pierwszego uruchomienia z serwa nie pójdzie dymek (chociaż czasem się tak może zdarzyć- wada produkcyjna), po drugie dostajemy gwarancję i po trzecie mamy wybór części zamiennych. W innym przypadku możemy się spotkać z uszkodzeniem zębatki nawet podczas normalnej pracy, nie mówiąc już o uszkodzeniu elektroniki.

Schemat

Do podłączenia jednego serwa wystarczy nam zasilanie z portu USB. Ważne, aby nie doprowadzić do blokady ramienia, dlaczego - o tym za chwilę. Serwomechanizm podłączamy zgodnie z poniższym schematem i jesteśmy gotowi do wgrania kodu.

Podłączenie serwomechanizmu do Arduino

Zanim jednak to się stanie wróćmy do zasilania z USB. Musimy pamiętać, że każde serwo w zależności od rozmiaru i momentu obrotowego może pobierać większy lub mniejszy prąd. W momencie kiedy ramie zostanie zablokowane, czy to przez nasz palec czy przez przeszkodę, pobór prądu znacznie wzrasta. Standardowo port USB może nam dać 500mA (USB 2.0) lub 900mA (USB 3.0). Tak jak wspomniałem pobór prądu przez serwo jest największy w chwili blokady. Zrobiliśmy pomiary dla 5 różnych serw. Poniżej przedstawiamy wyniki pomiarów.

Turnigy 1GY-9025MG

Tower Pro MG995

TG9e

Tower Pro MG90S

Tower Pro SG92R

Jak widać w serwie standardowym (Tower pro MG995) pobór prądu wzrósł aż do 1A w czasie blokady. W trybie normalnej pracy serwa pobierają do 160mA. Z tego wynika, że moglibyśmy użyć do 3 serw i zasilać nasze Arduino z portu USB. Co się stanie jeśli podłączymy więcej serw i zasilimy z USB? W najlepszym przypadku będą one chodzić niepoprawnie ze względu na spadki napięcia. Dlatego jeśli planujecie użycie serwomechanizmów w projekcie, warto pomyśleć nad oddzielnym zasilaniem dla nich (pamiętajcie o wspólnym połączeniu mas od zasilania).

Układ mierzący pobór prądu serwomechanizmu podczas normalnej pracy i w trybie blokady

Powyższy schemat pokazuje jak zostały podłączone testowane serwa, aby odczytać pobór prądu. Zachęcamy każdego, kto chce wykorzystać serwa u siebie do takiego pomiaru, zobaczycie ile prądu pobierają wasze serwa w czasie normalnej pracy i w czasie blokady.

Podsumowanie

W tym przypadku skorzystaliśmy ze standardowego przykładu dostarczonego z IDE. Otwieramy zakładkę Examples (Przykłady), szukamy Servo i wybieramy Sweep.

Przykładowy program do obsługi serwomechanizmu
#include <Servo.h>

Servo myservo;  // tworzy objekt servo do kontroli naszego serwa
                // na większości płytek można stworzyć takich obiektów 12

int pos = 0;    // zmienna do zapamiętania pozycji serwa

void setup()
{ 
  myservo.attach(9);  // zdefiniowanie do którego portu podłączone jest serwo
} 

void loop()
{ 
  for(pos = 0; pos <= 180; pos += 1) // obrót od 0 do 180 stopni 
  {                                  // w krokach co 1 stopień
    myservo.write(pos);              // przekazanie do serwa obrotu o tyle ile jest zapisane w zmiennej 'pos'
    delay(15);                       // poczekaj 15ms, aby serwo osiągnęło ustaloną pozycje
  } 
  for(pos = 180; pos>=0; pos-=1)     // obrót od 180 do 0 stopni 
  {                                
    myservo.write(pos);              // przekazanie do serwa obrotu o tyle ile jest zapisane w zmiennej 'pos'
    delay(15);                       // poczekaj 15ms, aby serwo osiągnęło ustaloną pozycje
  } 
}

Wnioski

Jak widać podłączenie i kontrolowanie serwomechanizmu nie jest trudne. Przy użyciu wbudowanej biblioteki możemy szybko sprawdzić czy nasz pomysł zadziała czy nie. Pamiętajcie jednak o poborze prądu. Niezależnie od tego ile serw chcecie użyć, lepiej nawet w czasie testów podłączyć zewnętrzne źródło zasilania w postaci baterii lub zasilacza.