Anda di halaman 1dari 6

Arduino Uno

Motor servo adalah sebuah motor dengan sistem umpan balik tertutup dimana posisi dari motor
akan diinformasikan kembali ke rangkaian kontrol yang ada di dalam motor servo. Motor ini
terdiri dari sebuah motor DC, serangkaian gear, potensiometer dan rangkaian kontrol.
Potensiometer berfungsi untuk menentukan batas sudut dari putaran servo. Sedangkan sudut dari
sumbu motor servo diatur berdasarkan lebar pulsa yang dikirim melalui kaki sinyal dari kabel
motor.

Motor servo merupakan sebuah motor yang memiliki sistem umpan balik
yang menunjukkan posisi putaran motor yang akan diinformasikan kembali
ke rangkaian kontrol dalam hal ini Arduino. Pada dasarnya motor servo
banyak digunakan sebagai aktuator yang membutuhkan posisi putaran
motor yang presisi. Apabila pada motor DC biasa hanya dapat dikendalikan
kecepatannya serta arah putaran, lain halnya pada motor servo yaitu
penambahan besaran parameter yang dapat dikendalikan berdasarkan
sudut/derajat.

Motor ini terdiri dari sebuah motor DC, serangkaian susunan gear,
potensiometer dan rangkaian kontrol. Fungsi dari komponen potensiometer
yaitu untuk menentukan batas sudut dari putaran servo. Sedangkan
besarnya sudut dari sumbu motor servo akan dikendalikan berdasarkan
lebar pulsa yang dikirim melalui sinyal dari kabel motor. Sinyal tersebut
berbentuk PWM (Pulse Width Modulator).

Macam tipe – tipe dari motor servo ini ada 2 yaitu tipe standard dan tipe
Continous. Tipe standar hanya mampu berputar sebesar 180° yang sering
dipakai pada sistim robotika seperti pada Robot Lengan (Arm Robot).
Sedangkan untuk tipe continuous mempunyai kemampuan dapat berputar
sebesar 360° dan sering dipakai untuk mobile robot. Pada body servo
terdapat informasi akan tipe servo yang bersangkutan. Motor servo secara
standar memiliki 3 buah kabel yaitu, power, ground dan signal.

 * Kabel warna merah merupakan kabel power yang berfungsi untuk mengkoneksikan
dengan tegangan 5V pada board arduino.
 * Kabel yang berwarna coklat/hitam merupakan kabel ground yang nantinya akan
dihubungkan dengan ground yang ada pada board arduino.
 * Kabel kuning yang merupakan kabel pin signal servo yang akan dihubungkan dengan
pin 9 pada board arduino.

Kode Program Motor Servo Arduino


1 /** Workshop Dasar Mikrokontroler
2014 RADE - Robotics AnD Embedded Systems STMIK STIKOM Bali
2 **/
3 #include <Servo.h>
4 // membuat nama objek servo untuk pengontrolan servo
5 Servo myservo;
6 // variable untuk menyimpan posisi servo
int pos = 0;
7 void setup()
8 {
9 // objek servo diletakan pada pin 9
10 myservo.attach(9);
11}void loop()
12{
13 // start dari 0 derajar sampai 180 derajat
14 for(pos = 0; pos < 180; pos += 1)
15 {
// pada posisi 1 derajat
16 // memberitahu servo untuk pergi ke posisi 'pos'
17 myservo.write(pos);
18 // tunggu 15ms untuk pencapaian posisi servo
19 delay(15);
20 }// start dari 180 derajat ke 0 derajat
21 for(pos = 180; pos>=1; pos-=1)
22 {
23 // memberitahu servo untuk pergi ke
24posisi 'pos'
myservo.write(pos);
25 // tunggu 15ms untuk pencapaian posisi servo
26 delay(15);
27 }
28}
29
30
31
32
33

Keterangan program :

Untuk progam di atas, sudut putaran yang dapat dituju maksimal yaitu
180°. Sehingga menjadi batasan range posisi derajat yang dapat digunakan
yaitu 0 – 180°. Dengan menggunakan motor servo ini sudah tidak berbicara
lagi mengenai putar searah (Clock Wise) atau berlawanan arah jarum jam
(Clock Counter Wise) tapi sudut 0, 45, 90 dan seterusnya sampai dengan
180.

Apabila ingin mendapatkan posisi 90° dan bergerak berlawanan arah jarum
jam maka dituliskan perintah myservo.write (90); setelah itu
dituliskan myservo.write (0);. Akan tetapi jika ingin mendapatkan posisi 90°
dan serarah jarum jam maka dituliskan perintah myservo.write (90); setelah
itu dituliskan perintah myservo.write (180);. Jadi posisi 0 s.d 180 sudah
ditentukan oleh kontroller internal motor servo, dan cukup dengan
memberikan perintah pada sudut mana motor akan berputar melalui
perintah myservo.write (derajat)

kode program
kode program yang digunakan untuk menggerakkan servo. Tidak perlu mengetiknya karena
sudah tersedia pada software Arduino. Klik menu File > Examples > Servo > Sweep.
// Controlling a servo position using a potentiometer (variable resistor)
// by Michal Rinott <http://people.interaction-ivrea.it/m.rinott>

#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, 179); // 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
}

Membuat Perubahan

 Membuat timing sendiri caramya dengan mengatur pulse yang digunakan untuk
menggerakkan servo secara langsung (tanpa library servo). Dengan cara ini kita dapat
menggerakkan servo pada 20 pin yang tersedia pada Arduino (pin digital & analog).
Tetapi anda perlu merubah beberapa baris kode agar dapat mengoptimalkan hasilnya.

Berikut ini adalah kode dasar yang akan dipergunakan.


int servoPin = 9;
int pulseTime;

void setup()
{
Serial.begin(9600);
pinMode(servoPin,OUTPUT);
}

void loop()
{
pulseTime = 2100; //(the number of microseconds
//to pause for (1500 90 degrees
// 900 0 degrees 2100 180 degrees)
digitalWrite(servoPin, HIGH);
delayMicroseconds(pulseTime);
digitalWrite(servoPin, LOW);
delay(25);
}

Upload dan coba lihat hasilnya. Servo akan bergerak ke arah 180 derajat. Timing 2100
microseconds akan membuat servo bergerak ke arah 180 derajat. dibawah ini yang merupakan
variasi dari kode sebelumnya.
catatan :
untuk timing servo berbeda tergantung manufaktur jadi belum tentu timing 2100 membuat motor
servo bergerak 180 derajat ,Untuk mencoba menemukan timing yang sesuai dengan servo yang
anda pakai, gunakan kode program dibawah ini yang merupakan variasi dari kode sebelumnya.

int servoPin = 9;
int pulseTime;
void setup()
{
Serial.begin(9600);
pinMode(servoPin,OUTPUT);
}

void loop()
{
for(pulseTime = 900; pulseTime <= 2100; pulseTime += 50) {
Serial.println(pulseTime);
digitalWrite(servoPin, HIGH);
delayMicroseconds(pulseTime);
digitalWrite(servoPin, LOW);
delay(25);
}
for(pulseTime = 2100; pulseTime >= 900; pulseTime -= 50) {
Serial.println(pulseTime);
digitalWrite(servoPin, HIGH);
delayMicroseconds(pulseTime);
digitalWrite(servoPin, LOW);
delay(25);
}
}

Upload dan coba lihat kembali hasilnya. Servo akan bergerak ke 180 derajat dan 0 derajat
berulang-ulang seperti pada program Sweep tadi. Tetapi hasilnya mungkin kurang maksimal,
sudut 180 derajat dan 0 derajat-nya masih belum maksimal. Artinya servo sebenarnya belum
menyentuh sudut 180 derajat atau 0 derajat. Coba rubah angka pada pulseTime, untuk yg 900
coba diperkecil dan untuk yang 2100 coba diperbesar. Anda harus menemukan angka pulseTime
yang pada angka tersebut servo sudah pada posisi maksimumnya (servo tidak bergerak lagi,
mencapai sudut 180/0 derajat). seperti kode berikut ini\

int servoPin = 9;
int pulseTime;

void setup()
{
Serial.begin(9600);
pinMode(servoPin,OUTPUT);
}

void loop()
{
for(pulseTime = 700; pulseTime <= 2650; pulseTime += 50) {
Serial.println(pulseTime);
digitalWrite(servoPin, HIGH);
delayMicroseconds(pulseTime);
digitalWrite(servoPin, LOW);
delay(25);
}
for(pulseTime = 2500; pulseTime >= 600; pulseTime -= 50) {
Serial.println(pulseTime);
digitalWrite(servoPin, HIGH);
delayMicroseconds(pulseTime);
digitalWrite(servoPin, LOW);
delay(25);
}
}

Agar mempermudah melihat angka pulseTime, coba gunakan Serial Monitor (Menu: Tools >
Serial Monitor). Dan agar angka pulseTime yang digunakan tidak bergerak terlalu cepat, ganti
kode delay(25); menjadi delay(500);.
Setelah anda mengerti dan memahami cara menggerakkan servo menggunakan
Arduino, Gunakan daya kreasi anda dan kembangkan