Serwomotory są silnikami o wysokim momencie obrotowym, które są powszechnie stosowane w robotyce i kilku innych aplikacjach ze względu na to, że łatwo jest kontrolować ich obroty. Serwomotory posiadają wał wyjściowy z przekładnią, który może być sterowany elektrycznie, aby obracać się o jeden (1) stopień na raz. Ze względu na kontrolę, w przeciwieństwie do zwykłych silników DC, serwomotory mają zazwyczaj dodatkowy pin oprócz dwóch pinów zasilania (Vcc i GND), którym jest pin sygnałowy. Pin sygnałowy służy do sterowania serwomotorem, obracając jego wał o dowolny kąt.
W tym tutorialu użyjemy popularnego serwomechanizmu SG90, a naszym celem będzie obracanie serwomechanizmu z jednego końca na drugi.
Serwomechanizmy mają duże zapotrzebowanie na prąd, więc gdy używamy więcej niż jednego serwomechanizmu z Arduino, ważne jest, aby podłączyć je do zewnętrznego źródła zasilania, ponieważ Arduino może nie być w stanie dostarczyć prądu potrzebnego dla serwomechanizmu. W tym projekcie będziemy używać tylko jednego serwomechanizmu, wystarczy więc zasilić go z Arduino.
Schemat
Schemat dla tego projektu jest dość prosty, ponieważ będziemy podłączać tylko serwomotor do Arduino.
Serwomotory zazwyczaj posiadają trzy piny/przewody, są to VCC, GND oraz Signal. Piny Signal służą do przekazywania sygnału sterującego z mikrokontrolera do serwomechanizmu, aby serwomechanizm obracał się o określony kąt.
Podłącz serwomechanizm do Arduino, jak pokazano na poniższym schemacie.
Dla uniknięcia pomyłek, połączeni są dokładniej opisane poniżej.
Pin sygnałowy został podłączony do pinu cyfrowego 8 Arduino, ponieważ jest to pin PWM. Kierunki pracy serwomechanizmu są wysyłane z mikrokontrolera do serwomotoru w postaci impulsów PWM.
Po wykonaniu wszystkich połączeń, możemy przystąpić do pisania kodu projektu.
Kod
Kod tego projektu jest dość prosty dzięki bardzo obszernej i zwięzłej bibliotece servo.h stworzonej przez zespół Arduino w celu ułatwienia użycia serwomechanizmów w projektach Arduino. Biblioteka ta ułatwia obracanie serwomechanizmów o różne kąty za pomocą jednej komendy. Biblioteka jest preinstalowana w Arduino IDE, dzięki czemu nie musimy jej pobierać i instalować.
Kod projektu rozpoczynamy od dołączenia bibliotek, z których będziemy korzystać, w tym przypadku jest to biblioteka servo.h.
#include <Servo.h>
Następnie tworzymy obiekt biblioteki, który posłuży nam jako referencja do sterowania naszym serwomechanizmem w całym kodzie.
Servo servo;
Po wykonaniu tych czynności przechodzimy do funkcji void setup(). Funkcję rozpoczynamy od podpięcia utworzonego obiektu servo do pinu D8 mikrokontrolera, po czym centrujemy serwo, obracając je o zero stopni.
void setup() {
servo.attach(8);
servo.write(angle);
}
Po wykonaniu tych czynności, jesteśmy gotowi do poruszania serwomechanizmem w dowolnym kierunku, a będziemy to robić w ramach funkcji void loop. Dzięki bibliotece servo.h wszystko co musimy zrobić, aby obrócić serwomechanizm o pożądany przez nas kąt, to przekazać pożądany kąt jako argument do funkcji servo.write(). Aby to zademonstrować, użyto pętli for do obrócenia serwomechanizmu o kilka kątów w jedną stronę, a następnie użyto innej pętli do obrócenia serwomechanizmu z powrotem do miejsca, w którym się rozpoczął.
void loop()
{
// scan from 0 to 180 degrees
for(angle = 10; angle < 180; angle++)
{
servo.write(angle);
delay(15);
}
// now scan back from 180 to 0 degrees
for(angle = 180; angle > 10; angle--)
{
servo.write(angle);
delay(15);
}
}
Kompletny kod projektu jest dostępny poniżej i można go pobrać z sekcji download na końcu projektu.
#include <Servo.h>
Servo servo;
int angle = 10;
void setup() {
servo.attach(8);
servo.write(angle);
}
void loop()
{
// scan from 0 to 180 degrees
for(angle = 10; angle < 180; angle++)
{
servo.write(angle);
delay(15);
}
// now scan back from 180 to 0 degrees
for(angle = 180; angle > 10; angle--)
{
servo.write(angle);
delay(15);
}
}
Demo
Skopiuj powyższy kod i załaduj do swojego Arduino i konfiguracji serwomechanizmu, po kilku chwilach powinieneś zobaczyć, że serwomechanizm zaczyna się obracać, jak pokazano na poniższym filmie.
To tyle jeśli chodzi o ten projektl, powyższy kod może być rozszerzony na kilka sposobów do wykorzystania w różnych projektach wykorzystujących serwomotory.