Słyszałeś(aś) o serwach modelarskich? Spotkałeś się z ich zastosowaniem w robotyce? Niska cena oraz wysoki moment obrotowy, czynią z nich ciekawe źródło napędu. Cały problem polega na odpowiednich modyfikacjach…Oto kompendium wiedzy na ten temat jak wykorzystać serwa modelarskie w robotyce.
Robotyka hobbystyczna, rozwijająca się w Polsce, od zawsze charakteryzowała się pomysłami znacznie obniżającymi koszty budowy urządzeń. Ograniczenia finansowe, a przede wszystkim rynkowe, wymusiły na majsterkowiczach szukanie rozwiązań pozwalających na ominięcie tych przeszkód. Jednym z takim pomysłów, jest wykorzystanie serw modelarskich w układach napędów, po dokonaniu odpowiednich modyfikacji. Ponadto, serwa znalazły swoje miejsce również w budowie manipulatorów oraz małych maszyn kroczących. Artykuł, który przygotowałem, opisuje szczegółowo budowę, sterowanie oraz mniej lub bardziej popularne sposoby przerabiania serw modelarskich stosowane w robotyce.
I. „KLASYCZNE” WYKORZYSTANIE SERW MODELARSKICH (SERWA NIE PODDANE PRZERÓBCE)
Podział i rodzaje serw:
Najpopularniejsze kryteria podziału serw, to budowa wewnętrzna/sposób działania (serwa analogowe i cyfrowe) i waga (mikro, mini, standard, extra-large itp. – w Polsce najpopularniejsze wydają się być mikro o wadze do 10 gram i standardowe o wadze do 50 gram), można również znaleźć serwa do „specjalnych zastosowań” (np. niskoprofilowe).
Serwa cyfrowe dodatkowo posiadają możliwość zaprogramowania pozycji neutralnej. W zastosowaniach robotyki amatorskiej (głównie ze względu na cenę) zdecydowanie królują serwa analogowe i to na nich skupia się ten artykuł. Różnice między serwami typu mikro i standard, oprócz wagi, dotyczą także ceny, momentu obrotowego, poboru prądu i szybkości reakcji. Dużą rolę w przypadku tych parametrów odgrywa marka serwa (należy zapoznać się z dokumentacją producenta). Moment obrotowy najpopularniejszych mikroserw wynosi zwykle do ok. 1,5kg*cm (ramię o długości 1cm jest w stanie unieść 1,5kg), podczas gdy moment serw standardowych może wynieść od 3kg*cm nawet do 15kg*cm.
Budowa i działanie
Serwo modelarskie to nic innego, jak silnik DC sprzężony poprzez odpowiednie układy z potencjometrem, którego pozycja odpowiada położeniu wału wyjściowego. Wysyłając na wejście przewodu sygnałowego odpowiedni zestaw impulsów, wyznaczamy konkretną pozycję położenia orczyka – zadaniem układów wewnątrz serwa, jest jak najdokładniejsze odwzorowanie tej pozycji w praktyce, poprzez obracaniem wału silnika w lewo lub prawo i sczytywanie wartości z potencjometru. (oczywiście opis działania bardzo uprościłem – szczegóły w książkach z podstaw automatyki, czy chociażby tutaj: http://pl.wikipedia.org/wiki/Serwomechanizm).
Najpopularniejsze kolorystyczne oznaczenia przewodów serw:
» przewód czerwony podpinamy do „+” zasilania (zgodnie z dokumentacją serwa, najczęściej po prostu 5V)
» przewód czarny podpinamy do „-” zasilania
» przewód żółty/biały to przewód, który nas najbardziej interesuje – to po nim wysyłamy sygnał sterujący, żeby określić pozycję orczyka.
Sygnał sterujący składa się z impulsów prostokątnych powtarzanych co 20-25ms. Czas trwania jednego impulsu wynosi od 1-2ms, przy czym orczyk znajduje się w pozycji neutralnej („na środku”) przy impulsie trwającym ok. 1,5ms. 2ms odpowiadają więc za maksymalne wychylenie np. w prawo, 1ms odpowiada za maksymalne wychylenie w lewo. Impuls musi się powtarzać co 20-25ms, gdyż jeśli zaniknie, serwo przestanie stawiać opór w celu utrzymania aktualnej pozycji (nie będzie miało punktu odniesienia). 20-milisekundowa przerwa pozwala dodatkowo na obsługę kilku serw równocześnie (obsługujemy kolejne serwa, podczas trwania „przerwy” w pozostałych).
Programowa obsługa nieprzerobionego serwa modelarskiego (na przykładzie BASCOM-AVR)
Przykładowy kod w BASCOM-AVR:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
$regfile = "m8def.dat" $crystal = 12000000 Config Servos = 1 , Servo1 = Portd.1 , Reload = 10 Config Portd = Output Enable Interrupts Dim Zmienna As Integer 'Nasze "odchylenie" serwa Zmienna = 150 'Czas trwania impulsu będzie wynosić 'Zmienna*Reload=1500us (1,5ms) Do Servo(1) = Zmienna Waitms 1000 Loop End |
II. METODY PRZERABIANIA SERW MODELARSKICH
1. Zdejmowanie blokady i obsługa jako zwykły silnik DC z przekładnią
Założenia
Ponieważ silniki DC zintegrowane z przekładnią bywają trudnodostępnym i często drogim towarem, bardzo często o wiele prościej (i taniej) jest wykorzystać jako napęd przerobione serwo modelarskie. Naszym celem jest „ominięcie” elektroniki serwa i zdjęcie mechanicznej blokady z jednej z zębatek. Sterowanie odbywa się jak zwykłym silnikiem DC – poprzez mostek H.
Przerabianie serwa standardowego
- Zdejmujemy orczyk
- Wykręcamy śruby ze spodu serwa
- Zdejmujemy dolną i górną obudowę
- Wycinamy/piłujemy blokadę mechaniczną (wypustkę na jednej z zębatek)
- Wycinamy/piłujemy blokadę mechaniczną (wypustkę na jednej z zębatek)
- Widoczne luty to zaciski silnika
- Wkładamy cienki śrubokręt między plastikową osłonę i zębatkę na osi silnika i delikatnie wypychamy silnik z obudowy
- Demontujemy widoczny potencjometr
- Potencjometr ucinamy i izolujemy przewody
- Odlutowujemy przewody zasilania i sygnałowy
- Wybieramy z nich dwa i lutujemy je bezpośrednio do zacisków silnika (patrz: punkt 6.)
- Wkładamy silnik z płytką do obudowy, zakładamy zębatki
- Skręcamy obudowę i gotowe 😉
Niektórzy wolą usunąć płytkę z elektroniką i zostawić sam silnik z dwoma przewodami – oczywiście, można i tak. W moim przypadku silnik jest unieruchomiony płytką, więc jej usunięcie sprawi, że zacznie się obracać. Dodatkowo, stosunkowo łatwo można odwrócić zmiany i przywrócić serwo do pierwotnej funkcjonalności (kwestia zastąpienia blokady np. wciśniętym w plastik na gorąco metalowym pręcikiem).
Przerabianie mikroserwa
- Zdejmujemy orczyk
- Wykręcamy śruby ze spodu serwa
- Zdejmujemy dolną i górną obudowę
- Wycinamy/piłujemy blokadę mechaniczną (wypustkę na jednej z zębatek)
- Wycinamy/piłujemy blokadę mechaniczną (wypustkę na jednej z zębatek)
- Usuwamy metalowe „skrzydełka” potencjometru…
- …żeby potencjometr mógł bez przeszkód obracać się o 360 stopni
- Odcinamy przewody potencjometru…
- …przewody zasilania, przewód sygnału sterującego i przewody przylutowane do silnika
- Wybieramy dwa przewody i lutujemy je bezpośrednio do zacisków silnika (trzeci przewód można odciąć/oderwać, ja zostawiłem, bo nie przeszkadza – żółty przewód nie jest do niczego przylutowany)
- Skręcamy obudowę i gotowe.
Programowa obsługa przerobionego serwa
Przerobione w ten sposób serwo jest w praktyce zwykłym silnikiem DC z przekładnią, najprościej więc nim sterować za pomocą mostka H.
Schemat połączeń:
Przykładowy kod w BASCOM-AVR:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
$regfile = "m8def.dat" $crystal = 1000000 'Konfiguracja PWM'a: Config Timer1 = Pwm , Pwm = 8 , Prescale = 1 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down Config Portd = Output Silnik_a Alias Portd.0 Silnik_b Alias Portd.1 PWM1A = 200 'Ustawienie PWM w zakresie 0-255 (regulacja prędkości) Do 'Obrót w jedną stronę Set Silnik_a Reset Silnik_b wait 3 'Obrót w stronę przeciwną Reset Silnik_a Set Silnik_b wait 3 'Stop Reset Silnik_a Reset Silnik_b wait 3 Loop End |
Zalety rozwiązania
- Sterowanie takie, jak zwykłym silnikiem DC
- Cena i dostępność w porównaniu z silnikami DC zintegrowanymi z przekładnią (choć nie zawsze jest to regułą)
- Zasilanie rzędu 5-6V (w przypadku stosowania popularnych układów scalonych zasilanych napięciem 5V)
- Mocowanie kół przy wykorzystaniu orczyków
- Łatwe mocowanie serwa do podwozia/obudowy robota
- Stosunkowo duży moment obrotowy
Wady:
- Wysokie przełożenie skutkuje małą prędkością obrotową wału wyjściowego (można to do pewnego stopnia kompensować stosując odpowiednio duże koła)
2. Przeróbka typu „BoeBot”
Założenia
Nie zawsze możemy sobie pozwolić na zastosowanie dodatkowego mostka H do sterowania serwami przerobionymi w sposób pokazany w punkcie 1. Istnieje możliwość wykorzystania elektroniki na płytce serwa i jest to ciekawa alternatywa przerabiania serw. Jeśli wyślemy sygnał sterujący odpowiadający skrajnemu wychyleniu orczyka w jednym kierunku, a potencjometr stale będzie wskazywać pozycję neutralną, to silnik będzie pracować tak długo, jak długo będziemy ten sygnał wysyłać. Główne założenie polega więc na „unieruchomieniu” potencjometru w pozycji neutralnej. Możemy to osiągnąć na dwa sposoby.
W przypadku, gdy potencjometr przymocowany jest do PCB „na sztywno”, sprawa jest prosta.











1. Rozkręcamy serwo, demontujemy zębatki
2. Śrubokrętem lub nożykiem podważamy płytkę i wysuwamy ją z obudow
3. Pierwszym krokiem będzie skrócenie wyprowadzeń potencjometru
4. Podgrzewamy trzy pola lutownicze i wpychamy potencjometr nieco głębiej, lutujemy dla pewności i obcinamy wystające „nóżki”
5. Skracamy wystający ruchomy element potencjometru – pilnikiem lub miniszlifierką elektryczną. Staramy się przy tym nie wyginać płytki serwa
6. Podłączamy multimetr i mierzymy rezystancję między dwoma skrajnymi wyprowadzeniami (jeszcze dokładniejszy wynik uzyskamy, gdy zmierzymy to przy wylutowanym rezystorze)
7. Przykładowy wynik dla mojego serwa to 2,29k. Dzielimy to na dwa…
8. Mierzymy rezystancję między dwoma sąsiednimi wyprowadzeniami potencjometru i kręcimy tym co zostało z pokrętła tak, żeby uzyskać nasz wynik z dzielenia…
9. …a następnie unieruchamiamy ten element, np. przy pomocy kleju na gorąco
10. Przymiarka po włożeniu płytki w obudowę – potencjometr nie może wystawać
11. Pamiętamy o usunięciu blokady z zębatki. Składamy składamy i skręcamy serwo – gotowe.
W niektórych serwach – w szczególności w mikroserwach – potencjometr połączony jest giętkimi przewodami. W dodatku, dla mikroserw, trzeba pamiętać, że potencjometr stanowi oś dla dwóch zębatek. Zostawiamy więc odłączony potencjometr, a w jego miejsce podłączamy parę rezystorów.







1. Rozkręcamy serwo, demontujemy zębatki
2. Przecinamy przewody od potencjometru, zapamiętując który odpowiada za które wyprowadzenie
3. Podłączamy multimetr do skrajnych wyprowadzeń potencjometru
4. Zmierzoną wartość (w moim przypadku 5k) dzielimy na 2. Ponieważ nie posiadałem rezystorów o wartości 250Ohm, zastąpiłem je 270Ohm. Po pomiarach przewody dochodzące do potencjometru ucinamy
5. Lutujemy rezystory do przewodów od skrajnych wyprowadzeń potencjometru. WAŻNE Do tego celu najlepiej wykorzystać rezystory subminiaturowe, a nawet w obudowie SMD – jeśli ktoś ma dobry wzrok…
6. Wolne końce rezystorów lutujemy do trzeciego przewodu
7. Po usunięciu blokady z zębatki i „skrzydełek” potencjometru (jak w rozdziale o standardowej przeróbce mikroserwa) staramy się to wszystko „upakować”. Polecam zaizolować nasze rezystory kawałkiem taśmy przed włożeniem do obudowy (żeby nie dotykały metalowego potencjometru). Jeśli przeróbce poddaliśmy standardowe serwo, to stary potencjometr można oczywiście wyjąć i zatrzymać na pamiątkę 😉
Programowa obsługa przerobionego serwa
Przykładowy kod w BASCOM-AVR:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
$regfile = "m8def.dat" $crystal = 12000000 Config Servos = 1 , Servo1 = Portd.1 , Reload = 10 Config Portd = Output Enable Interrupts Dim Zmienna As Integer Zmienna = 100 'Impuls 1ms, dla obrotów w jedną stronę 'Zmienna = 200 'Impuls 2ms, dla obrotów w stronę przeciwną 'Zmienne = 150 'Pozycja neutralna, czyli serwo się zatrzymuje. 'Z tą wartością musimy poeksperymentować '- im dokładniej dobraliśmy rezystory/ustawiliśmy potencjometr, 'tym bliżej tej wartości znajdzie się nasz punkt "stop" Do Servo(1) = Zmienna Waitms 1000 Loop End |
Zalety rozwiązania
- Sterowanie niemal identyczne, jak zwykłym serwem modelarskim (brak konieczności stosowania mostka H)
- Cena i dostępność w porównaniu z silnikami DC zintegrowanymi z przekładnią (choć nie zawsze jest to regułą)
- Zasilanie rzędu 5-6V (w przypadku stosowania popularnych układów scalonych zasilanych napięciem 5V)
- Mocowanie kół przy wykorzystaniu orczyków
- Łatwe mocowanie serwa do podwozia/obudowy robota
- Stosunkowo duży moment obrotowy
Wady:
- Brak możliwości płynnego regulowania prędkości obrotowej wału wyjściowego serwa
- Wysokie przełożenie skutkuje małą prędkością obrotową wału wyjściowego (można to do pewnego stopnia kompensować stosując odpowiednio duże koła)
3. Nagrywanie ruchu serwa
Założenia
Ten sposób jest dość nietypowy, podobnie jak raczej nietypowe będą jego zastosowania. Należy również być ostrożnym podczas pierwszych prób – jeśli mikroprocesor w porę nie zareaguje na przekroczenie przez orczyk bezpiecznej granicy działania, serwo zatrzyma się na mechanicznej blokadzie – znacznie wzrośnie pobierany prąd (długotrwałe działanie w tym stanie może nawet spowodować stopienie izolacji uzwojeń silnika i – w konsekwencji – zwarcie zasilania silnika), a w przypadku tańszych serw może dojść do uszkodzenia zębatek.
Przerobione w ten sposób serwa (trzy) zastosowałem w moim Smyraczu (być może wkrótce pojawi się na forum), który jest niczym innym jak… manipulatorem „programowanym” na żywo poprzez ręczną animację poszczególnych punktów swobody. Efekt działania takiego serwa można zobaczyć na moim filmie:
Przeróbka niewiele różni się od tej z rozdziału II.1. W tym jednak przypadku zostawiamy blokadę mechaniczną na jednej z zębatek i nie wyrzucamy potencjometru.



1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 |
$regfile = "m32def.dat" $crystal = 16000000 Config Adc = Single , Prescaler = Auto Start Adc S1a Alias Portb.0 S1b Alias Portb.3 Dim Pomiar As Integer Dim Zadana As Integer Dim Maksymalna As Integer Dim Minimalna As Integer Dim Tablica(310) As Integer 'tablica, w której 'będą przechowywane próbki Dim I As Integer Dim J As Integer Const Czas = 100 'czas pomiędzy kolejnymi próbkami w milisekudnach Config Portb = Output Reset Portb Zadana = 100 Do 'Nagrywanie For I = 1 To 310 Pomiar = Getadc(0) Tablica(i) = Pomiar Waitms Czas Next Wait 5 'Odtwarzanie For I = 1 To 310 Zadana = Tablica(i) For J = 0 To Czas Gosub Serwo 'funkcja ustawiająca serwo w zadanej 'pozycji w ciągu trwania jednego okresu próbkowania Next Next Wait 10 Loop End Serwo: Maksymalna = Zadana + 5 Minimalna = Zadana - 5 'maksymalne dopuszczalne przesunięcia 'względem zadanej pozycji (w celu ograniczenia drgań) Pomiar = Getadc(0) If Pomiar > Maksymalna Then Set S1a Reset S1b 'serwo obraca się w jedną stronę Elseif Pomiar < Minimalna Then Reset S1a Set S1b 'serwo obraca się w drugą stronę Else Reset S1a Reset S1b 'serwo zatrzymane End If Waitms 1 Return |
Zmniejszając częstotliwość próbkowania, zwiększamy płynność ruchu kosztem czasu trwania całej nagrywanej sekwencji. Czas ten można zwiększyć odpowiednio zwiększając ilość elementów w tablicy (tak, by nie przepełnić pamięci uC).
Zalety rozwiązania:
- Zasadniczo mamy działający serwomechanizm, przy czym jego funckjonalność została rozszerzona o możliwość nagrywania ruchu
Wady:
- Możliwość uszkodzenia serwa, mostka H i układu zasilania w przypadku niewłaściwego sterowania
- Konieczność zastosowania aż pięciu przewodów.
III. INNE INFORMACJE
1. Mocowanie kół do serwa
Koła zakładane zamiast orczyka
Najwygodniejsze, ale i zarazem dość drogie (głównie ze względu na przesyłkę) rozwiązanie. Koła takie po prostu wsuwa się na wał wyjściowy serwa i dokręca śrubką.

Koła przykręcane do orczyka
Tutaj można się pokusić o gotowe rozwiązania, jednym z nich są produkty firmy Tamiya:

„Domowe sposoby”
W tym przypadku jedynym ograniczeniem jest właściwie tylko wyobraźnia i pomysłowość. Najprostszy i chyba najtańszy sposób to niezawodne połączenie wieczek od słoików i paru kropli hot-glue (warto bardzo dokładnie wyznaczyć środek koła):

Bardziej od wieczek „profesjonalnie” wyglądające koła znajdziemy w sklepie modelarskim (podwozia do samolotów) – wydatek od kilku do kilkunastu złotych za parę (zależnie od rozmiarów i użytego materiału). Pomocą służą również stare zabawki-samochody.
2. Gdzie kupować?
Allegro
Najtańsze nowe serwa typu „standard” można dostać już od ok. 13 zł (Tower Pro SG 5010), mikroserwa od ok. 10zł (Turnigy TG9e). Ponadto, bardzo często po naprawdę okazyjnych cenach można dostać serwa lepszych firm (od HiTec’a aż po Futaba) używane, wystarczy co jakiś czas przeglądać oferty i „polować” na okazję.
Polskie sklepy modelarskie
Serwa w takich sklepach są zazwyczaj nieco droższe niż te same oferowane na Allegro, ale może być to alternatywa dla ludzi np. nie posiadających na Allegro konta lub chcących obejrzeć i „pomacać” towar przed zakupem. 😉
Witam,możesz mi podać gdzie kupiłeś te serwa i ich oznaczenia?
Pozdrawiam
Czy ten schemat http://hobbyrobotyka.pl/wp-content/uploads/2010/07/art.jpg mogę zastosować do serwa z II działu 1 punktu?
A właśnie mam jeszcze jedno pytanie.
Dlaczego na schemacie http://hobbyrobotyka.pl/wp-content/uploads/2010/07/podstawowe3.jpg są od serwa 2 złącza a na tym
http://hobbyrobotyka.pl/wp-content/uploads/2010/07/art.jpg są 3?
(to są moje początki i nie rozumiem paru rzeczy)
>>Witam,możesz mi podać gdzie kupiłeś te serwa i ich oznaczenia?<< HS-322HD, HS-422, Hextronic 900, HXT500, reszty nie pamiętam. Nie ma to większego znaczenia, zwracaj uwagę na cenę, moment obrotowy i ew. łożyskowanie; wybieraj pod własne projekty. Polecam Allegro. >>Czy ten schemat http://hobbyrobotyka.pl/wp-content/uploads/2010/07/art.jpg mogę zastosować do serwa z II działu 1 punktu?<< Tak, ale w tym wypadku niepotrzebny jest sygnał od przetwornika ADC, wystarczą dwa wyprowadzenia mostka H. Masz też odpowiedź na ostatnie pytanie.
no dobra. a jak podzielić jeden sygnał na dwa urządzenia? i nie chodzi mi o dwa współbieżne serwa. chodzi mi o to, aby drążek wychylony w jedną stronę sterował obrotami silnika, ale w druga stronę zamiast kręcić silnikiem wstecz, żeby zadziałało serwo. drążek do przodu – gaz na silniku, serwo stoi w neutralnym. drążek do tyłu- silnik stoi, serwo kręci. macie pomysł, jak to zrobić? chcę to zastosowac w modelu paralotni. drążek w jedna stronę uruchomi napęd i grzejemy w chmury, a w drugą stronę silnik bedzie zatrzymany a serwo zciągnie linki i wyhamuje skrzydło.
Cześć! Jestem kompletnym laikiem z zakresu elektroniki, mechaniki, automatyki robotyki i lotów kosmicznych (jestem lekarzem 🙂 ale zawsze interesowała mnie automatyka więc przeczytałem Twój artykuł – ale mnie jest super! Mam wrażenie że mimo mojej ignorancji technicznej wszystko zrozumiałem 🙂 a ponieważ mam zamiar coś zbudować (jak kiedyś, po dyżurze nie będę spał na stojąco) to Ci napiszę – Twoje rady zawarte w tym artykule są dla mnie bezcenne 🙂 Serdecznie pozdrawiam. FP
Miło mi słyszeć, że moje wypociny są przydatne 🙂 Powodzenia!
Bardzo przydałby mi się ten artykuł gdybym na niego padł wcześniej 🙂 Po fakcie tez miło poczytać. programowanie okazuje sie mniej skomplikowane niż myślałem.