Arduino i serwomechanizm - Kurs Arduino cz. 5
Serwomechanizmy są bardzo popularne w świecie modeli sterowanych radiem i świetnie nadają się do poruszania klapami modeli samolotów lub sterami łodzi, jak również do sterowania robotami i modelami samochodów. Są powszechnie dostępne u wielu
dostawców.
Serwomechanizm to silnik z przekładnią obracającą się o zadany kąt, zazwyczaj w zakresie od 0 do 180 stopni, zasilany najczęściej napięciem 4,8 V. Dzięki swojemu niskiemu kosztowi i łatwości sterowania idealnie nadaje się do wszelkiego rodzaju projektów
wymagających precyzyjnego sterowania. Wcześniej użyliśmy serwomechanizmu do skanującego modułu ultradźwiękowego, lokalizującego przedmioty po obu stronach trasy przemierzanej przez małego robota. Rysunek 5.23 przedstawia typowy serwomechanizm. Popatrzmy, jak sterowany jest serwomechanizm.
Rysunek 5.23. Typowy mały serwomechanizm
Sterowanie serwomechanizmem - Kurs Arduino
Serwomechanizm posiada trzy końcówki: masę, zasilanie i sterowanie lub końcówkę sygnałową. W większości współczesnych serwomechanizmów do zasilania służy środkowa końcówka.
Przez wysłanie impulsu na końcówkę sterującą lub sygnałową wywołuje się obrót serwomechanizmu o określony kąt. Szerokość impulsu powoduje obrót serwomechanizmu o zadany kąt w zakresie od 0 do 180 stopni. Impuls musi być powtarzany co 20 milisekund, w przeciwnym wypadku silnik powróci do położenia spoczynkowego. Rysunek 5.24 przedstawia zależność pomiędzy szerokością impulsu a kątem obrotu serwomechanizmu.
Rysunek 5.24. Zależność pomiędzy szerokością impulsu a kątem obrotu serwomechanizmu
Jak widać na rysunku 5.24, neutralną pozycją serwomechanizmu jest kąt 90 stopni, uzyskiwany za pomocą impulsu o szerokości 1,5 ms. Szerokość impulsu waha się od ok. 1 ms do 2 ms, powodując obrót serwomechanizmu odpowiednio do pozycji 0 stopni
i 180 stopni.
Teraz, kiedy wiesz już, co jest potrzebne do zasilenia serwomechanizmu i zadania kąta obrotu, spójrzmy, co w tym temacie oferuje środowisko Arduino IDE.
Funkcje i metody sterujące serwomechanizmem - Arduino
Podobnie jak w przypadku silników krokowych, środowisko Arduino IDE zawiera bibliotekę Servo, ułatwiającą sterowanie serwomechanizmem. W rzeczywistości ta biblioteka umożliwia sterowanie 12 serwomechanizmami za pomocą standardowej płyty
Arduino lub niesamowitą liczbą 48 serwomechanizmów w przypadku płyty Arduino Mega.
Funkcje i metody oferowane w bibliotece Servo są wymienione w tabeli 5.7.
UWAGA: Biblioteka Servo uniemożliwia użycie funkcji analogWrite z pinami nr 9 i 10 w standardowej płycie Arduino. W przypadku zastosowania płyty Mega z więcej niż 12 serwomechanizmami funkcja analogWrite nie może korzystać z pinów nr 11 i 12.
Przyjrzyjmy się szkicowi do sterowania serwomechanizmem.
Tabela 5.7. Funkcje biblioteki Servo
Nazwa funkcji | Użycie | Opis |
Servo | Servo myServo | Tworzy obiekt Servo do sterowania serwomechanizmem. |
attach() | attach(pin) attach(pin, min, max) |
Argument pin oznacza pin Arduino, do którego dołączony jest serwomechanizm; argumenty min i max to minimalne i maksymalne szerokości impulsu wyrażone w mikrosekundach. Domyślna minimalna wartość jest równa 544, maksymalna — 2400. |
write() | write(kąt) | Określa kąt w stopniach, o jaki ma się obrócić serwomechanizm. |
writeMicroseconds() | writeMicroseconds (szerokość_impulsu) |
Określa szerokość impulsu serwomechanizmu, wyrażoną w mikrosekundach. |
read() | read() | Zwraca ostatnio zapisaną szerokość impulsu zamienioną na kąt w stopniach w zakresie od 0 do 180. |
readMicroseconds() | readMicroseconds() | Zwraca ostatnio zapisaną szerokość impulsu wyrażoną w mikrosekundach. |
attached() | attached() | Zwraca wartość true, jeżeli do płyty jest dołączony serwomechanizm. |
detach() | detach() | Wyłącza wysyłanie impulsów do serwomechanizmu dołączonego do płyty |
Szkic sterujący serwomechanizmem
Szkic, którego użyjesz, jest jednym z przykładów dostarczanych razem ze środowiskiem Arduino IDE, demonstrującym zakres ruchu serwomechanizmu. Szkic przedstawiony na listingu 5.5 nazywa się Sweep i można go znaleźć w menu Plik/Przykłady/Servo.
Listing 5.5. Szkic obracający serwomechanizm w zakresie od 0 do 180 stopni
Servo myservo;
int pos = 0;
void setup()
{
myservo.attach(9);
}
void loop()
{
for(pos = 0; pos < 180; pos += 1)
{
myservo.write(pos); delay(15); }
for(pos = 180; pos>=1; pos-=1)
{
myservo.write(pos); delay(15); }
}
Najpierw musi być dołączona biblioteka Servo, ponieważ mimo że jest dostarczana razem ze środowiskiem Arduino IDE, nie wchodzi w skład głównych funkcji. Następnie tworzony jest obiekt Servo. W funkcji setup obiekt ten jest przypisywany do pinu nr 9 Arduino.
Kod w funkcji loop obraca serwomechanizm w zakresie od 0 do 180 stopni z 15-milisekundowymi przerwami pomiędzy kolejnymi pozycjami, aby dać serwomechanizmowi czas na obrócenie się o kolejny kąt. Później serwomechanizm obraca się w drugą
stronę od pozycji 180 do 0 stopni, również z 15-milisekundowymi przerwami pomiędzy kolejnymi ruchami. Następnie pętla powtarza cały proces. Przejdźmy do połączenia Arduino z serwomechanizmem, aby zobaczyć szkic w działaniu.
Łączenie komponentów
Będą Ci potrzebne następujące komponenty:
- serwomechanizm,
- zewnętrzny zasilacz,
- płyta montażowa,
- przewody montażowe,
- łączówka z rozstawem styków 0,1 cala.
Serwomechanizm zazwyczaj ma trzy końcówki, z których środkowa służy do zasilania. Pozostałe dwie stanowią masę i sygnalizację. Końcówki masy oznaczone są najczęściej kolorem czarnym lub brązowym, aczkolwiek oznaczenie może się różnić w zależności
od producenta. Ponieważ użyjesz jednego serwomechanizmu, możesz wykorzystać zasilanie 5 V na płycie Arduino, aczkolwiek zalecamy zasilenie płyty za pomocą zewnętrznego zasilacza, a nie łącza USB.
Rysunek 5.25 przedstawia 0,1-calową łączówkę, którą umieściliśmy na płycie montażowej, aby ułatwić podłączenie serwomechanizmu. Rysunek 5.26 przedstawia gotowy układ. Po podłączeniu serwomechanizmu do Arduino nadszedł czas na wypróbowanie szkicu.
Załadowanie i test szkicu
Sprawdź połączenia i załaduj do Arduino szkic z listingu 5.5. Powinieneś zauważyć, jak serwomechanizm płynnie obraca się w zakresie od 0 do 180 stopni i z powrotem od 180 do 0 stopni. Jeżeli silnik nie obraca się, sprawdź połączenia z masą i zasilaniem
i spróbuj ponownie.
Rysunek 5.25. Jednorzędowa łączówka z rozstawem styków 0,1 cala do połączenia serwomechanizmu z płytą montażową
Rysunek 5.26. Połączenia pomiędzy serwomechanizmem i Arduino