tutorial arduino – servo.doc

9
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

Upload: privananggara

Post on 31-Jan-2016

230 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Tutorial Arduino – Servo.doc

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:

Page 2: Tutorial Arduino – Servo.doc

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.

Page 3: Tutorial Arduino – Servo.doc

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(){

Page 4: Tutorial Arduino – Servo.doc

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;

Page 5: Tutorial Arduino – Servo.doc

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);}

Page 6: Tutorial Arduino – Servo.doc

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.

Page 7: Tutorial Arduino – Servo.doc

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).

Page 8: Tutorial Arduino – Servo.doc

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!