Menggerakan Motor Servo dari Serial Monitor

Intan Nuraeni

1 orang menyukai ini
Suka
Summary

Servo motor merupakan perangkat yang terdiri dari motor dan sensor yang memungkinkan pengguna untuk mengatur beberapa komponen proses industri.

Description

Servo yang akan digunakan adalah servo mikro. Di dalamservo terdapat gearboxyang kecil (untukmembuat gerakan yang lebih bertenaga) dan rangkaian elektronik (untuk memudahkan pengaturan). Sebuah servo standard dapat diatur posisinya dari 0 sampai dengan 180 derajat.Pengaturan posisi diaturmenggunakan timed pulse, antara 1.25 milliseconds (0 derajat) dan 1.75milliseconds (180 derajat) 1.5 milliseconds untuk 90 derajat). Waktuyang 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 Arduinoadalah disediakannya softwarelibrary 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:

Berikut ini adalah gambar simulasi penempatan komponen dan board Arduino. Gambar simulasi ini menggunakan software Fritzing yang bisa didapat di sini.

Berikut ini adalah gambar simulasi penempatan komponen dan board Arduino. Gambar simulasi ini menggunakan software Fritzing yang bisa didapat di sini.

  
 

 

 

 

 

 


 

Kode Pemrograman


Di bawah ini adalah kode pemrograman yang digunakan untuk menggerakkan servo. Tidak perlu mengetiknya karena sudah tersediapada software Arduino.Klik menu File > Examples

> Servo> Sweep.

 

// Sweep

// by BARRAGAN <http://barraganstudio.com>

//This example code is in the publicdomain. #include <Servo.h>

Servo myservo; // create servo object to control a servo

// a maximum of eight servoobjects 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()

{

for(pos = 0; pos < 180; pos+= 1) // goes from 0 degreesto 180 degrees

{                                  // in stepsof 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 degreesto 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 sudahdisediakan oleh Arduinomemang 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 tersediapada 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; //(thenumber of microseconds

//to pause for (1500 90 degrees

// 900 0 degrees2100 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 membuatservo bergerak ke arah 180 derajat. Tapi seperti sudahdiutarakan pada awal tutorialini, timing tiap servo berbedaantara manufaktur. Jadi anda harus menemukan timing yang sesuai untuk servo yang anda gunakan karena bisa jadi timing 2100 microseconds belum membuat servobergerak mencapai 180 derajat. Untukmencoba menemukan timingyang 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 pulseTimeyang 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.

 

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 angkapulseTime, coba gunakanSerial 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);.