Piszę ten samouczek, aby pokazać, jak kontrolować kierunek, pozycję i prędkość silnika SG90 Micro przy wykorzystaniu Arduino UNO. Wiem, że jeśli jesteś hobbistą z pewnym doświadczeniem w robotyce, wiesz jak łatwo jest kontrolować ten serwo motor.
Silnikami serwo mamy możliwość precyzyjnie kontrolować połażenie kątowe, prędkości obrotową jak i przyspieszenie. Mówiąc krótko to jak prowadzenie samochodu gdzie decydujesz dokładnie o prędkość jak i kierunku. Często pojawiające się pytanie – dlaczego potrzebujemy serw ? Serwa są niezbędnymi częściami, jeśli potrzebujemy kontrolować położenie obiektów, obracać czujniki, poruszać rękami i nogami robotów itp.
Serwomotor Tower Pro SG90 jest jednym z najtańszych, które można zdobyć na rynku. Nawet jeśli jest to mniej, niż 10 zł, nie zalecam ręcznie obracać serwomotoru, gdyż może to uszkodzić wasz silnik.
Specyfikacja SG90.
Parametry dla napięcia 4,8 V bez obciążenia
Moment: 1,8 kg*cm (0,18 Nm)
Prędkość: 0,1 s/60°
Napięcie zasilania: 3.0-7.2 V
Wymiary: 22 x 11,5 x 27 mm
Masa: 9 g
Przejdźmy zatem do potrzebnych nam rzeczy:
– Serwo TowerPro SG90
– Arduino Uno lub odpowiednik
– przewody do połączenia wszystkiego.
Tabela połączeń:
Pin SG90 | Pin Arduino |
VCC | 5V |
GND | GND |
Data | Pin 2 |
Schemat:
Kod programu:
// pobrano z www.tranzystor.pl
#include <Servo.h>
int servoPin = 2; // pin sterujący Arduino
Servo servo;
int servoAngle = 0; // pozycja startowa serwa w stopniach
void setup()
{
Serial.begin(9600);
servo.attach(servoPin);
}void loop()
{
// kontrola kierunku serwomechanizmu i pozycjęservo.write(90); // Przekrec serwo SG90 w lewo do 90 stopni
delay(1000); // czekaj 1 sek
servo.write(70); // Cofnij serwo SG90 na 70 stopni
delay(1000); // czekaj 1 sek
servo.write(40); // Przekrec serwo SG90 40 stopni
delay(1000); // czekaj 1 sek
servo.write(120); // Przekrec serwo SG9 na 120 stopni
delay(1000); // czekaj 1 sek//end
// kontrola predkosc serwomechanizmu
// jeśli zmienisz wartość opóźnienia (z przykładowej wartości 100 na 50), prędkość serwomechanizmu się zmieni na wybraną wartosc
for(servoAngle = 0; servoAngle < 180; servoAngle++) //przekręć serwo od 0 stopni do 180 stopni
{
servo.write(servoAngle);
delay(100);
}for(servoAngle = 180; servoAngle > 0; servoAngle–) //teraz cofnij mikro serwo od 0 stopni do 180 stopni
{
servo.write(servoAngle);
delay(50);
}
//koniec
}
Film ukazujący działanie kodu:
Super, dziękuje!
bedzie dzialac na uno tylko na pinach z ~~~~~~ a moze mi sie wydaje czyli jak kolega powiedzial 3,5,6,9,10,11
Zerknij na film pod koniec, działa właśnie na pinie 2.
Witam!
Jest drobny błąd, który powoduje, że program się nie kompiluje. W linii
for(servoAngle = 180; servoAngle > 0; servoAngle–)
Należy dać dwa minusy za serwoAngle. Czyli powinno być:
for(servoAngle = 180; servoAngle > 0; servoAngle–)
Serdecznie pozdrawiam!
Toki realnie jest tam (- -) jednak kochane przeglądarki 2 x – – ciągiem wyświetlają jako jeden dłuższy.
Działa bez problemu pospinaj kabelki i miłej zabawy.
Coś mi się wydaje że serwo nie ma prawa działać na pinie 2 bo tam nie ma sygnału PWN, a serwo jest sterowane właśnie tym sygnałem. Serwo zadziała poprawnie tylko na pinach 3, 5, 6, 9, 10 i 11.