Berikut ini beberapa rangkaian sederhana untuk mengendalikan motor servo dengan Arduino. Motor servo yang dimaksud di sini adalah motor servo radio control. Motor servo radio control memiliki 3 terminal: VCC, GND dan PWM.
Berikut ini contoh motor servo yang dipakai
Kendali Servo Dengan Potensiometer
Pada contoh ini posisi motor servo dikendalikan dengan sebuah potensiometer. Posisi potensiometer dibaca dengan membaca tegangan output dari potensiometer tersebut. Angka tersebut kemudian dipakai untuk mengendalikan posisi motor servo .
Rangkaian motor servo sebagai berikut:
Penjelasan Rangkaian:
Terminal VCC dari motor servo disambung ke catu daya motor
Terminal GND dari motor servo disambung ke GND catu daya motor dan GND Arduino
Terminal PWM dari motor servo disambung ke port 9 pada Arduino
Terminal pinggir Potensiometer disambung ke VCC dan GND pada Arduino
Terminal tengah potensiometer disambung ke pin A0 pada Arduino. Tegangan dari potensiometer akan dibaca sebagai tegangan analog, sehingga harus menggunakan pin input analog dari Arduino.
Sumber tegangan untuk Arduino UNO dapat menggunakan USB ataupun dari POWER PIN. Sumber tegangan untuk motor servo menggunakan baterai ataupun adaptor terpisah. Tegangan baterai untuk motor servo disesuaikan dengan spesifikasi motor servo. Catu daya untuk Arduino dipisah dengan catu daya untuk motor servo, karena biasanya arus yang ditarik oleh motor servo cukup besar sehingga dapat mengganggu tegangan catu daya yang terhubung ke motor servo.
Motor servo seperti HS-311 memerlukan tegangan catu daya antara 4,8 volt sampai 6 volt dengan arus maksimum 800 mA. Jadi pastikan tegangan catu daya dan arusnya sesuai untuk motor servo yang dipakai.
Perangkat lunak untuk Arduino adalah sebagai berikut:
#include <Servo.h>
Servo myservo; // create servo object to control a servo
int potpin = 0; // analog pin used to connect the potentiometer
int val; // variable to read the value from the analog pin
void setup() {
myservo.attach(9); // attaches the servo on pin 9 to the servo object
}
void loop() {
val = analogRead(potpin); // reads the value of the potentiometer (value between 0 and 1023)
val = map(val, 0, 1023, 0, 180); // scale it to use it with the servo (value between 0 and 180)
myservo.write(val); // sets the servo position according to the scaled value
delay(15); // waits for the servo to get there
}
Cara kerja perangkat lunak
Library yang dipakai untuk mengendalikan motor adalah Arduino Servo Library.
Pada bagian setup, pin 9 diset sebagai output motor servo.
Pada fungsi loop() dilakukan proses sebagai berikut:
- membaca tegangan dari pin A0 untuk mengetahui posisi dari potensiometer dengan fungsi analogRead()
- angka ini skalanya adalah 0 sampai 1023, sedangkan input motor servo adalah 0 sampai 180, sehingga perlu dilakuan penskalaan dengan fungsi map()
- tuliskan angka hasil penskalaan ke motor servo
- tunggu 15 milidetik untuk memberi waktu motor bergerak
Fungsi loop() akan dilakukan berulang-ulang , sehingga posisi motor servo akan mengikuti posisi di potensiometer.
Kendali Servo Bolak-Balik
Pada contoh ini, posisi motor servo beralih dari 0 ke 180 derajat, kemudian kembali ke 0 derajat berulang-ulang.
Rangkaian sebagai berikut
Penjelasan Rangkaian:
Terminal VCC dari motor servo disambung ke catu daya motor
Terminal GND dari motor servo disambung ke GND catu daya motor dan GND Arduino
Terminal PWM dari motor servo disambung ke port 9 pada Arduino
Terminal pinggir Potensiometer disambung ke VCC dan GND pada Arduino
Kode sebagai berikut
#include <Servo.h>
Servo myservo; // create servo object to control a servo
// twelve servo objects can be created on most boards
int pos = 0; // variable to store the servo position
void setup() {
myservo.attach(9); // attaches the servo on pin 9 to the servo object
}
void loop() {
for (pos = 0; pos <= 180; pos += 1) { // goes from 0 degrees to 180 degrees
// in steps of 1 degree
myservo.write(pos); // tell servo to go to position in variable 'pos'
delay(15); // waits 15ms for the servo to reach the position
}
for (pos = 180; pos >= 0; pos -= 1) { // goes from 180 degrees to 0 degrees
myservo.write(pos); // tell servo to go to position in variable 'pos'
delay(15); // waits 15ms for the servo to reach the position
}
}
Cara kerja perangkat lunak
Pada fungsi loop(), dilakukan hal berikut:
- buat suatu for() loop untuk menggerakkan motor dari 0 derajat ke 180 derajat dengan langkah sebesar 1 derajat. Tiap kali geser 1 derajat, lakukan penundaan selama 15 milidetik untuk menunggu motor bergerak.
- buat suatu for() loop untuk menggerakkan motor dari 0 derajat ke 180 derajat dengan langkah sebesar 1 derajat. Tiap kali geser 1 derajat, lakukan penundaan selama 15 milidetik untuk menunggu motor bergerak.
Referensi
- Servo Motor Basics with Arduino
- Basic servo control
- Wikipedia: Servo (radio control)
- Arduino Servo Library
- HS-311 Standard Economy Servo