AI Assistant
Detail Karya Portofolio

Mengenal Motor Servo dan Cara Menggerakannya

Wulansari Oktapiani Rahayu Oleh: Wulansari Oktapiani Rahayu

Ringkasan Portofolio

Sebuah perangkat atau aktuator putar (motor) yang dirancang dengan sistem kontrol umpan balik loop tertutup (servo), sehingga dapat di-set-up atau diatur untuk menentukan dan memastikan posisi sudut dari poros output motor. Motor servo merupakan perangkat yang terdiri dari motor DC, serangkaian gear, rangkaian kontrol, dan potensiometer. Serangkaian gear yang melekat pada poros motor DC akan memperlambat putaran poros dan meningkatkan torsi motor servo, sedangkan potensiometer dengan perubahan resistansinya saat motor berputar berfungsi sebagai penentu batas posisi putaran poros motor servo.

Deskripsi & Detail Proyek

Motor servo

Adalah sebuah perangkat atau aktuator putar (motor) yang dirancang dengan sistem kontrol umpan balik loop tertutup (servo), sehingga dapat di-set-up atau diatur untuk menentukan dan memastikan posisi sudut dari poros output motor. Motor servo merupakan perangkat yang terdiri dari motor DC, serangkaian gear, rangkaian kontrol, dan potensiometer. Serangkaian gear yang melekat pada poros motor DC akan memperlambat putaran poros dan meningkatkan torsi motor servo, sedangkan potensiometer dengan perubahan resistansinya saat motor berputar berfungsi sebagai penentu batas posisi putaran poros motor servo.

Gambar 1 Motor Servo SG90

Pada dasarnya prinsip kerja motor servo berdasarkan sinyal modulasi lebar pulsa (Pulse Wide Modulation/PWM) menggunakan kabel kontrol. Kabel kontrol mengontrol dengan memberikan pulsa sinyal di mana akan menentukan posisi sudut putaran dari poros motor servo. Misalnya saja, pada lebar pulsa dengan waktu 1,5ms (milidetik) akan memutar poros servo dengan posisi sudut 90°. Apabila waktu lebar pulsa lebih kecil (kurang dari 1,5ms), maka akan berputar ke posisi sudut lebih kecil ke kiri (berputar berlawanan arah jarum jam). Sedangkan jika waktu lebar pulsa lebih besar (lebih dari 1,5ms), maka poros servo akan berputar ke arah posisi 180° atau berputar ke kanan (berputar searah dengan jarum jam).

Keunggulan dari penggunaan motor servo adalah:

  1. Tidak bergetar dan tidak ber-resonansi saat pergerakan.
  2. Daya yang dihasilkan sebanding dengan ukuran dan berat motor.
  3. Penggunaan arus listrik sebanding dengan daya yang diberikan.
  4. Resolusi dan akurasi dapat diubah dengan hanya mengganti encoder yang dipakai.
  5. Tidak berisik saat bergerak dengan kecepatan tinggi.

Selain itu, motor servo juga memiliki beberapa kelemahan, yaitu:

  1. Membutuhkan pengaturan yang tepat untuk menstabilkan umpan balik.
  2. Motor menjadi tidak terkendali jika encoder tidak memberikan umpan balik.
  3. Penggunaan dalam waktu yang lama dapat merusak motor.

Ada 4 jenis motor servo, yaitu:

  1. Positional Rotation / Motor Servo Standard

Merupakan jenis yang paling sering digunakan. Jenis ini mempunyai poros output berputar setengah lingkaran yang dapat bergerak searah ataupun berlawanan dengan arah jarum jam. Selain itu juga, terdapat roda gigi tambahan sebagai mekanisme untuk mencegah putaran poros yang melebihi batasnya.

  1. Continuous Rotation

Merupakan motor servo yang dapat berputar 360°. Motor servo ini juga dapat berputar searah ataupun berlawanan dengan arah jarum jam. Selain itu, motor servo ini tidak mempunyai sudut defleksi putaran seperti jenis lainnya, melainkan berputar secara terus menerus. Untuk membedakan dengan jenis yang lain, biasanya pada fisik motor servo jenis ini akan tertulis tipenya.

3. Linear Servo Motor
Jika motor servo lain dapat bergerak memutar, jenis ini hanya berputar secara linear (maju dan mundur). Motor servo linear mempunyai roda gigi tambahan di dalamnya dengan mekanisme rack and pinion. Motor servo linear akan melepaskan medan magnet dan mengubah energi listrik menjadi gerak tanpa memerlukan transmisi mekanisme konversi di dalamnya.

4. Brushless DC Motor Servo
Merupakan motor servo yang tidak menggunakan brush sebagai komponen di dalamnya. Umumnya, Brushless DC motor servo ini sama seperti jenis motor servo yang lainnya, yang membedakan hanya pada proses komutasi nya. Proses komutasi pada jenis ini sudah tidak lagi menggunakan teknologi elektronika di dalam proses komutasi nya, yaitu controller dan sensor. Untuk pengaplikasian, biasanya jenis ini digunakan pada DVD Player, Cooling Fan Computer, sepeda motor, dan mobil listrik. Pengaplikasian motor servo ini terus meningkat karena sangat efisien dengan daya motor kecil pun mampu menghasilkan putaran yang tinggi.

Rangkaian dan codingan untuk menggerakan motor servo dari serial monitor

Servo yang akan digunakan adalah servo mikro. 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:

Berikut ini adalah gambar simulasi penempatan komponen dan board Arduino. Gambar simulasi ini menggunakan software Fritzing.

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.

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

{

  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.

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

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

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.