Serwomechanizm (Serwo)

Serwomechanizm

Serwomechanizm to po prostu silnik na napięcie stałe zawierający najczęściej mechaniczną przekładnię oraz sterownik. Serwomechanizm najczęściej wykorzystywany jest wszędzie tam gdzie potrzebne są elementy wykonujące precyzyjne ruchy np. w modelarstwie, robotyce, przemyśle, automatyce itp., a sam ruch serwo odbywa się po podaniu odpowiedniego sygnału najczęściej sygnału PWM.

Parametry modułu

Parametry serwomechanizmu przedstawiam na przykładzie SG90 najpopularniejszego i najtańszego serwomechanizmu, który jest najczęściej stosowany w projektach Arduino:

  • Rozmiar modułu: 23 x 12,2 x 29 mm

  • Sterowanie: 1 pin PWM

  • Szybkość obrotu: 0,3s/60°

  • Moment obrotowy: 1.5kg/cm

  • Napięcie zasilania: 4,2V-6V

  • Długość przewodów: 250 mm

  • Temperatura pracy: 0-55° C

Opis działania serwomechanizmu

Serwomechanizm działa na zasadzie układu ze sprzężeniem zwrotnym gdzie po podaniu odpowiedniego sygnału serwo obraca się na zadane położenie. Serwomechanizmy analogowe najczęściej wyposażone są w generator pracujący z częstotliwością 50 Hz co wymusza próbkowanie sygnału co 20 ms. Zwykle neutralna pozycja wału ustalana jest impulsem o szerokości 1,5 ms, a jego obrót w którąkolwiek stronę wymuszony jest przez różnicę próbkowanego sygnału względem położenia neutralnego. Serwomechanizmy najczęściej mają zakres ruchu (obrotu) o 180° chociaż bywają też serwomechanizmy, które mają zakres obrotu 360° albo kręcą się beż ograniczeń w lewą bądź prawą stronę podobnie jak zwykły silnik ale w tym przypadku ruch będzie bardzo precyzyjny. Bywają również serwomechanizmy, które zamiast obracać się zamieniają za pomocą odpowiedniej przekładni obrót na ruch posuwisty przy czym zasada sterowania pozostaje zawsze ta sama. Po podaniu impulsu o szerokości 1ms serwo przekręca się na swoją skrajnie lewą pozycję czyli w pozycję 0°, po podaniu impulsu o szerokości 2ms serwo przekręca się na swoją skrajnie prawą pozycję czyli w pozycję 180°, a impuls o szerokości 1,5ms ustawia serwo w pozycji neutralnej 9.

Sposób podłączenia modułu

Do podłączenia serwomechanizmu potrzebujemy 2 piny zasilania +5V i GND oraz 1 pin w mikrokontrolerze - co ciekawe nie musi to być pin z funkcją PWM może to być praktycznie każdy pin Arduino, a wygenerowaniem odpowiedniego sygnału zajmuje się biblioteka "Servo.h". W przypadku najpopularniejszego serwomechanizmu SG90 ma on wyprowadzone trzy przewody brązowy (GND), czerwony (+5V) oraz żółty (sygnał PWM). W różnych modelach serwomechanizmów kolory przewodów mogą się różnić. Do Arduino UNO możemy podłączyć jednocześnie więcej niż jeden serwomechanizm - teoretycznie maksymalnie dwanaście bo tyle może obsłużyć standardowa biblioteka - ale praktycznie po podłączeniu więcej niż dwóch sztuk serwomechanizmów bezpośrednio do Arduino może się okazać, że moduł Arduino nie jest w stanie dostarczyć wystarczającej ilości prądu co będzie powodowało zawieszanie lub resetowanie się całego układu, a jeśli jeszcze dodatkowo podłączymy jakieś elementy typu ekran LCD czy nawet diodę LED to nawet przy jednym podłączonym serwomechanizmie zauważymy przygasanie diody LED czy podświetlenia ekranu w momencie wykonywania ruchu serwomechanizmu.

Problem ten można obejść zasilając serwomechanizmy z dodatkowego źródła zasilania o wystarczającej mocy prądowej pamiętając o tym aby podłączyć masę tego dodatkowego źródła zasilania z masą (GND) w Arduino.

Przykładowy program Arduino IDE

Aby obsłużyć serwomechanizm w swoim projekcie najłatwiej wykorzystać bibliotekę standardową o nazwie Servo.h, którą należy dołączyć do programu w Arduino IDE. Biblioteka ta obsługuje jednocześnie do dwunastu serwomechanizmów podłączonych do jednego mikrokontrolera.

Aby w swoim programie sterować serwomechanizmem należy na początku dołączyć do programu odpowiednią bibliotekę poleceniem include:

Następnie musimy utworzyć obiekt typu Servo zdefiniowanego w powyższej bibliotece. W dalszej części programu aby wysłać sygnał do serwomechanizmu będziemy operować na odpowiednim obiekcie. W przykładzie obiekt Servo został nazwany myservo ale nazwa ta może być zmieniona na dowolną inną. Jeśli w programie będziemy sterować większą ilością serwomechanizmów musimy utworzyć dla każdego serwomechanizmu osobny obiekt Servo każdy o innej nazwie np. myservo1, myservo2 itd.:

Następnie w funkcji setup() musimy wskazać do jakiego pinu mikrokontrolera został podłączony serwomechanizm - tutaj w przykładzie mój serwomechanizm podłączyłem do pinu 3:

Poniżej znajduję się cały przykładowy program do obsługi serwomechanizmu bardzo podobnego do najprostszego programu do migania diodą LED, który obraca serwomechanizm w pozycję 0° następnie czeka jedną sekundę i obraca serwomechanizm w pozycję 180°, znowu czeka jedną sekundę i tak powtarza w kółko co w rezultacie będzie widoczne jako ciągłe przekręcanie się co sekundę serwomechanizmu w pozycję 0° i 180°.

Kod przykładowego programu obsługi serwomechanizmu podłączonego do Arduino do pinu 3:

Schemat podłączenia