tutorial arduino – servo.doc
TRANSCRIPT
Tutorial Arduino – Servo
July 04, 2011 Zerfani Yulias 8 Comments
Ide Dasar
Kali ini kita akan mencoba untuk menggunakan servo dengan Arduino. Servo yang akan digunakan adalah servo mikro yang banyak dijual pada toko hobi atau bisa juga di sini.
Di dalam servo terdapat gearbox yang kecil (untuk membuat gerakan yang lebih bertenaga) dan rangkaian elektronik (untuk memudahkan pengaturan). Sebuah servo standard dapat diatur posisinya dari 0 sampai dengan 180 derajat. Pengaturan posisi diatur menggunakan timed pulse, antara 1.25 milliseconds (0 derajat) dan 1.75 milliseconds (180 derajat) 1.5 milliseconds untuk 90 derajat). Waktu yang digunakan ini bervariasi dari tiap manufaktur servo. Apabila pulse yang digunakan dikirim setiap 25-50 milliseconds maka servo akan bergerak dengan sangat halus. Salah satu kelebihan Arduino adalah disediakannya software library yang memungkinkan untuk menggerakkan beberapa servo dengan kode yang sederhana.
Rangkaian
Komponen yang diperlukan:
1 buah servo mikro Kabel jumper
Skema rangkaian dapat dilihat pada gambar berikut:
Skema rangkaian Servo dengan Arduino
Berikut ini adalah gambar simulasi penempatan komponen dan board Arduino. Gambar simulasi ini menggunakan software Fritzing yang bisa didapat di sini.
Servo connection using Arduino
Kode Pemrograman
Di bawah ini adalah kode pemrograman yang digunakan untuk menggerakkan servo. Tidak perlu mengetiknya karena sudah tersedia pada software Arduino. Klik menu File > Examples > Servo > Sweep.
1234567891011121314
// Sweep// by BARRAGAN <http://barraganstudio.com>// This example code is in the public domain.
#include <Servo.h>
Servo myservo; // create servo object to control a servo // a maximum of eight servo objects can be created
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(){
151617181920212223242526272829
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>=1; 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 }}
Membuat Perubahan
Membuat timing sendiri
Menggunakan library servo yang sudah disediakan oleh Arduino memang sangat memudahkan untuk menggerakkan servo. Tetapi kadang kita perlu mengetahui cara memprogram sesuatu secara mandiri. Contoh dibawah ini adalah cara 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.
12
int servoPin = 9;int pulseTime;
345678910111213141516171819
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. Tapi seperti sudah diutarakan pada awal tutorial ini, timing tiap servo berbeda antara manufaktur. Jadi anda harus menemukan timing yang sesuai untuk servo yang anda gunakan karena bisa jadi timing 2100 microseconds belum membuat servo bergerak mencapai 180 derajat. Untuk mencoba menemukan timing yang sesuai dengan servo yang anda pakai, gunakan kode program dibawah ini yang merupakan variasi dari kode sebelumnya.
123456789
int servoPin = 9;int pulseTime;
void setup(){ Serial.begin(9600); pinMode(servoPin,OUTPUT);}
1011121314151617181920212223242526
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). Pada mikro servo yang saya gunakan, kebetulan angkanya ditemukan pada posisi 600 dan 2650, sehingga programnya menjadi seperti ini.
1234567891011121314151617181920212223242526
int servoPin = 9;int pulseTime;
void setup(){ Serial.begin(9600); pinMode(servoPin,OUTPUT);}
void loop(){ for(pulseTime = 600; pulseTime <= 2650; pulseTime += 50) { Serial.println(pulseTime); digitalWrite(servoPin, HIGH); delayMicroseconds(pulseTime); digitalWrite(servoPin, LOW); delay(25); } for(pulseTime = 2650; pulseTime >= 600; pulseTime -= 50) { Serial.println(pulseTime); digitalWrite(servoPin, HIGH); delayMicroseconds(pulseTime); digitalWrite(servoPin, LOW); delay(25); }}
Silahkan bereksperimen sampai menemukan angka yang sesuai. Agar mempermudah melihat angka pulseTime, coba gunakan Serial Monitor (Menu: Tools > Serial Monitor).
Seperti terlihat pada tampilan berikut ini. Dan agar angka pulseTime yang digunakan tidak bergerak terlalu cepat, ganti kode delay(25); menjadi delay(500);.
Tampilan Serial Monitor pada saat program dijalankan
Setelah anda mengerti dan memahami cara menggerakkan servo menggunakan Arduino, cobalah praktekkan untuk menggerakkan sesuatu, misalnya menggerakkan kepala dari mainan boneka yang sudah tidak dipergunakan lagi. Atau gunakan untuk membuka atau menutup sesuatu. Gunakan daya kreasi anda!