Tutorial Lengkap Mengendalikan Motor Servo dengan Arduino

Di artikel ini kita akan mempelajari cara mengendalikan motor servo dengan Arduino, potensiometer dan push button.

Pengertian Motor Servo

Dikutip dari Sparkfun, motor servo (servomechanism) adalah sebuah mekanisme dimana motor (jenis apa pun) yang dikendalikan menggunakan sistem kontrol umpan balik (close loop control) internal.

Dikutip dari Wikipedia, motor servo bukan merupakan kelas motor tertentu, meskipun istilah servo motor sering digunakan untuk merujuk pada motor yang cocok untuk digunakan dalam sistem kontrol tertutup.

Motor servo bekerja berdasarkan mekanisme close loop control, dimana terdapat umpan balik (informasi) berupa posisi poros dan kecepatan yang diberikan kembali ke kontrol internal motor servo, walaupun umumnya hanya ada umpan balik posisi.

Penjelasan Lengkap Tentang Servo: Motor Servo: Pengertian, Cara Kerja, Kelebihan, Kekurangan dan Aplikasinya

Motor servo sederhana

Motor servo sederhana biasanya memiliki tiga kabel yang terhubung ke sistem elektronik yang akan mengendalikannya, antara lain adalah:

  1. Kabel merah adalah kabel power, yang menyediakan tegangan listrik ke motor. Biasanya, tegangan yang dibutuhkan oleh motor servo berkisar antara 5V hingga 9V, tergantung pada tipe motor servo yang digunakan. 
  2. Kabel hitam atau cokelat yang merupakan kabel ground.
  3. Kabel oranye atau kuning yang merupakan kabel pulsa atau data. Digunakan untuk mengirimkan sinyal kontrol ke motor servo dan mengatur sudutnya.

Aplikasi Motor Servo

Secara umum, motor servo banyak digunakan dalam aplikasi yang membutuhkan kontrol posisi yang tepat dan akurat. Contohnya adalah:

  • Sistem otomatisasi industri.
  • Robotika
  • CNC.
  • Perangkat elektronik lainnya yang membutuhkan kemampuan untuk memutar suatu bagian dengan tepat sesuai dengan instruksi yang diberikan. 

Dengan menggunakan motor servo, sudut yang diinginkan dapat diatur dengan tepat dan akurat, sehingga mempermudah pengendalian sistem dan meningkatkan efisiensi kerja.


Tutorial Mengendalikan Motor Servo dengan Arduino Uno

Pada tahap ini kita akan mencoba mengontrol motor servo menggunakan Arduino Uno. Kita akan coba menggerakkan motor servo dari sudut 0° ke 180° dan berulang seperti itu. 

Alat yang Digunakan - Mengendalikan Motor Servo dengan Arduino

Berikut adalah komponen yang digunakan untuk mengendalikan motor servo dengan Arduino.

  1. Servo SG-90 (Tokopedia).
  2. Arduino Uno (Tokopedia).

Diagram Rangkaian - Mengendalikan Motor Servo dengan Arduino Uno

Diagram Rangkaian Mengendalikan Motor Servo dengan Arduino Uno

Kabel pulsa (orange) motor servo terhubung ke pin 9 Arduino Uno, sedangkan kabel merah dan hitam motor servo terhubung ke 5V dan ground Arduino Uno.

Kode Program - Mengendalikan Motor Servo dengan Arduino Uno

//Inisialisasi servo dan posisi awal
#include <Servo.h>

Servo myservo;
int pos = 0;

void setup() {
  //Memasang servo pada pin 9
  myservo.attach(9);
}

void loop() {
  //Servo berputar dari posisi 0 derajat ke 180 derajat
  for (pos = 0; pos <= 180; pos += 1) {
    myservo.write(pos);
    //Jeda selama 15 milidetik
    delay(15);
  }
  //Servo berputar dari posisi 180 derajat ke 0 derajat
  for (pos = 180; pos >= 0; pos -= 1) {
    myservo.write(pos);
    //Jeda selama 15 milidetik
    delay(15);
  }
}

Penjelasan Program - Mengendalikan Motor Servo dengan Arduino Uno

#include <Servo.h>
Servo myservo;
int pos = 0;

Pada koding di atas, pertama-tama library Servo.h di-include. Kemudian, objek Servo bernama myservo dideklarasikan. Selanjutnya, variabel integer bernama pos yang berarti posisi dideklarasikan dengan nilai awal 0.

void setup() {
  myservo.attach(9);
}

Pada blok setup(), method attach() dari objek myservo dijalankan dengan parameter 9. Ini akan menghubungkan objek myservo ke pin 9 pada board Arduino.

for (pos = 0; pos <= 180; pos += 1) {
  myservo.write(pos);
  delay(15);
}

Pada blok loop(), terdapat dua perulangan (loop) nested. Pada perulangan pertama di atas, pos akan bertambah 1 setiap iterasinya sampai mencapai 180. Setiap kali perulangan, method write() dari objek myservo dijalankan dengan parameter pos yang akan mengatur posisi servo sesuai dengan nilai pos. Kemudian, program akan menunggu selama 15 milidetik sebelum iterasi selanjutnya dilakukan.

for (pos = 180; pos >= 0; pos -= 1) {
  myservo.write(pos);
  delay(15);
}

Pada perulangan kedua di atas, pos akan berkurang 1 setiap iterasinya sampai mencapai 0. Sama seperti sebelumnya, setiap kali perulangan, method write() dari objek myservo dijalankan dengan parameter pos yang akan mengatur posisi servo sesuai dengan nilai pos. Kemudian, program akan menunggu selama 15 milidetik sebelum iterasi selanjutnya dilakukan.

Secara keseluruhan, koding ini akan mengatur posisi servo dengan memutar servo dari posisi 0 derajat ke 180 derajat, kemudian kembali lagi ke posisi 0 derajat. Setiap perubahan posisi servo akan dilakukan setiap 15 milidetik.

Hasil - Mengendalikan Motor Servo dengan Arduino Uno

Link simulasi: Mengendalikan Servo dengan Arduino


Tutorial Mengendalikan Motor Servo dengan Potensiometer

Pada tahap ini kita akan mencoba mengendalikan sudut motor servo yang terhubung ke Arduino Uno berdasarkan nilai dari potensiometer.

Alat yang Digunakan - Mengendalikan Motor Servo dengan Potensiometer

Berikut adalah hal yang dibutuhkan untuk mengendalikan motor servo dengan potensiometer.

  1. Potensiometer 10k Ohm (Tokopedia).
  2. Servo SG-90 (Tokopedia).
  3. Arduino Uno (Tokopedia).

Diagram Rangkaian - Mengendalikan Motor Servo dengan Potensiometer

Diagram Rangkaian Mengendalikan Motor Servo dengan Potensiometer

Motor servo masih terhubung ke pin yang sama dengan tutorial sebelumnya, namun ditambahkan sebuah potensiometer 10k. Pin kiri dan kanan potensiometer terhubung ke 5V dan ground, sedangkan pin tengah terhubung ke pin A0 Arduino.

Kode Program - Mengendalikan Motor Servo dengan Potensiometer

//Menggunakan servo dan potensiometer untuk mengontrol sudut servo
#include <Servo.h>

//Deklarasi objek servo
Servo myservo;
//Deklarasi variabel posisi awal
int pos = 0;
//Deklarasi variabel nilai potensiometer
int potValue = 0;
//Pin servo
const byte servoPin = 9;
//Pin potensiometer
const byte potPin = A0;

void setup() {
  //Memasang servo pada pin servo
  myservo.attach(servoPin);
}

void loop() {
  //Membaca nilai potensiometer
  potValue = analogRead(potPin);
  //Mengubah nilai potensiometer menjadi sudut yang sesuai dengan skala 0-180 derajat
  pos = map(potValue, 0, 1023, 0, 180);
  //Menuliskan sudut ke servo
  myservo.write(pos);
  //Jeda selama 15 milidetik
  delay(15);
}

Penjelasan Program - Mengendalikan Motor Servo dengan Potensiometer

#include <Servo.h> // menyertakan library Servo

Pada awal program, library Servo harus disertakan agar kode program dapat mengakses fungsi-fungsi yang dibutuhkan untuk mengendalikan servo motor. 

Servo myservo;
int pos = 0;
int potValue = 0;
const byte servoPin = 9;
const byte potPin = A0;

Kemudian, objek Servo bernama myservo dideklarasikan, serta variabel integer bernama pos dengan nilai 0 dan variabel integer bernama potValue dengan nilai 0. Konstanta servoPin bernilai 9 dan konstanta potPin bernilai A0 juga dideklarasikan.

void setup() {
  myservo.attach(servoPin);
}

Pada bagian setup, objek myservo dihubungkan ke pin servoPin (9) pada board Arduino.

potValue = analogRead(potPin);

Pada bagian loop, nilai analog pada pin potPin (A0) dibaca dan disimpan ke dalam variabel potValue. Penjelasan terkait input analog di Arduino dapat dibaca pada artikel Cara Membaca Input Pin Analog Pada Arduino.

pos = map(potValue, 0, 1023, 0, 180);

Kemudian, nilai potValue diubah skalanya dari 0-1023 menjadi 0-180 dengan menggunakan fungsi map().

myservo.write(pos);

Nilai pos ini kemudian digunakan untuk mengatur posisi servo dengan menggunakan fungsi write(). Terakhir, program menunggu selama 15 milidetik sebelum mengulang loop tersebut.

Secara umum, program ini akan mengendalikan servo motor sehingga posisinya mengikuti nilai analog pada pin potPin (A0). Semakin tinggi nilai analog pada pin tersebut, semakin besar sudut yang ditunjukkan oleh servo motor. Sebaliknya, semakin rendah nilai analog pada pin tersebut, semakin kecil sudut yang ditunjukkan oleh servo motor.

Hasil - Mengendalikan Motor Servo dengan Potensiometer

Link simulasi: Mengendalikan Servo dengan Potensiometer


Tutorial Mengendalikan Motor Servo dengan Push Button

Pada tahap ini kita akan mencoba mengendalikan motor servo yang terhubung ke Arduino menggunakan push button. Ketika push button A ditekan maka sudut servo berkurang, ketika push button B ditekan maka sudut servo bertambah. 

Alat yang Digunakan - Mengendalikan Motor Servo dengan Push Button

Berikut adalah yang dibutuhkan untuk mengendalikan motor servo dengan push button.

  1. Push button.
  2. Servo SG-90 (Tokopedia).
  3. Arduino Uno (Tokopedia).

Diagram Rangkaian - Mengendalikan Motor Servo dengan Push Button

Diagram Rangkaian Mengendalikan Servo dengan Pushbutton

Motor servo masih terhubung ke pin Arduino yang sama dengan sebelumnya. Push button A terhubung ke pin10 dan push button B terhubung ke pin 7.

Kode Program - Mengendalikan Motor Servo dengan Push Button

// Sertakan library untuk Servo
#include <Servo.h>

// Deklarasikan objek Servo dan variabel
Servo myservo;
int pos = 0;

// Deklarasikan konstanta untuk pin-pin
const byte servoPin = 9;
const byte buttonPinA = 10;
const byte buttonPinB = 7;

// Deklarasikan konstanta untuk sudut minimum dan maksimum
const byte servoMinAngle = 0;
const byte servoMaxAngle = 180;

// Fungsi setup untuk dijalankan sekali pada awal program
void setup() {
  // Hubungkan objek servo ke pin yang ditentukan
  myservo.attach(servoPin);

  // Tentukan pin-pin tombol sebagai input dengan resistor pull-up
  pinMode(buttonPinA, INPUT_PULLUP);
  pinMode(buttonPinB, INPUT_PULLUP);
}

// Fungsi loop untuk dijalankan terus-menerus
void loop() {
  // Baca keadaan tombol
  bool buttonStateA = digitalRead(buttonPinA);
  bool buttonStateB = digitalRead(buttonPinB);

  // Jika tombol A ditekan, tambahkan nilai pos
  if (buttonStateA == 0) {
    pos++;
  }
  // Jika tombol B ditekan, kurangi nilai pos
  else if (buttonStateB == 0) {
    pos--;
  }

  // Batasi nilai pos ke servoMinAngle dan servoMaxAngle
  pos = constrain(pos, servoMinAngle, servoMaxAngle);

  // Tetapkan posisi servo
  myservo.write(pos);

  // Tunggu selama 15 milidetik
  delay(15);
}

Penjelasan Program - Mengendalikan Motor Servo dengan Push Button

#include <Servo.h>
Servo myservo;
int pos = 0;

Pada bagian awal program, terdapat deklarasi objek servo bernama myservo dan variabel pos yang akan digunakan sebagai variabel posisi servo. 

const byte servoPin = 9;
const byte buttonPinA = 10;
const byte buttonPinB = 7;

Selanjutnya, ada deklarasi konstanta untuk pin-pin yang akan digunakan, yaitu pin servo servoPin, tombol A buttonPinA, dan tombol B buttonPinB

const byte servoMinAngle = 0;
const byte servoMaxAngle = 180;

Kemudian, ada pula deklarasi konstanta untuk sudut minimum dan maksimum yang diizinkan untuk servo, yaitu servoMinAngle dan servoMaxAngle.

void setup() {
  myservo.attach(servoPin);
  pinMode(buttonPinA, INPUT_PULLUP);
  pinMode(buttonPinB, INPUT_PULLUP);
}

Pada fungsi setup, terdapat proses menghubungkan objek servo ke pin yang telah ditentukan. Selain itu, pin-pin tombol ditentukan sebagai input dengan resistor pull-up.

bool buttonStateA = digitalRead(buttonPinA);
bool buttonStateB = digitalRead(buttonPinB);
if (buttonStateA == 0) {
  pos++;
}
else if (buttonStateB == 0) {
  pos--;
}

Pada fungsi loop, terdapat pembacaan keadaan tombol A dan B. Jika tombol A ditekan, maka nilai pos akan bertambah. Sebaliknya, jika tombol B ditekan, maka nilai pos akan berkurang.

pos = constrain(pos, servoMinAngle, servoMaxAngle);

Nilai pos kemudian dibatasi antara servoMinAngle dan servoMaxAngle dengan menggunakan fungsi constrain()

myservo.write(pos);

Setelah itu, posisi servo diatur dengan menggunakan fungsi write. Program kemudian akan berhenti selama 15 milidetik setiap iterasinya dengan menggunakan fungsi delay.

Hasil - Mengendalikan Motor Servo dengan Push Button

Link simulasi: Mengendalikan Motor Servo dengan Pushbutton


Tutorial Mengendalikan Banyak Servo dengan Arduino

Pada tahap ini kita aman mencoba mengendalikan 3 buah servo sekaligus menggunakan Arduino Uno.

Alat yang Digunakan - Mengendalikan Banyak Servo dengan Arduino Uno

Berikut adalah hal yang dibutuhkan untuk mengontrol banyak servo sekaligus dengan Arduino.

  1. Servo SG-90 (Tokopedia).
  2. Arduino Uno (Tokopedia).
  3. External power supply.

Diagram Rangkaian - Mengendalikan Banyak Servo dengan Arduino Uno

Diagram Rangkaian Mengendalikan Banyak Servo dengan Arduino Uno
Jangan lupa ground servo dan ground mikrokontroler digabung (common)

Terdapat 3 buah motor servo (A, B dan C) yang digunakan secara berurutan terhubung ke pin 9, 10, dan 11 di Arduino Uno. Sangat dianjurkan untuk menggunakan sumber tegangan eksternal jika menggunakan banyak servo dan penting untuk membaca datasheet motor servo untuk memperhitungkan berapa amper yang dibutuhkan. 

Kode Program - Mengendalikan Banyak Servo dengan Arduino

#include <Servo.h>

// Deklarasi objek servo
Servo myservoA;
Servo myservoB;
Servo myservoC;

// Variabel posisi
int pos = 0;

// Deklasi pin servo
const byte servoAPin = 9;
const byte servoBPin = 10;
const byte servoCPin = 11;


void setup() {
  // Inisialisasi pin servo
  myservoA.attach(servoAPin);
  myservoB.attach(servoBPin);
  myservoC.attach(servoCPin);
}

void loop() {
  // Gerakkan servo A, B, C dari sudut 0-180 derajat
  for (pos = 0; pos <= 180; pos += 1) {
    myservoA.write(pos);
    myservoB.write(pos);
    myservoC.write(pos);
    delay(15);
  }

  // Gerakkan servo A, B, C dari 180-0 derajat
  for (pos = 180; pos >= 0; pos -= 1) {
    myservoA.write(pos);
    myservoB.write(pos);
    myservoC.write(pos);
    delay(15);
  }
}

Penjelasan Program - Mengendalikan Banyak Servo dengan Arduino Uno

#include <Servo.h>
Servo myservoA;
Servo myservoB;
Servo myservoC;

Program ini menggunakan library Servo untuk mengontrol tiga buah servo motor. Pada bagian awal program, terdeklarasi tiga objek servo bernama myservoA, myservoB, dan myservoC

int pos = 0;

Selanjutnya, ada juga deklarasi variabel pos yang akan digunakan sebagai variabel posisi servo. 

const byte servoAPin = 9;
const byte servoBPin = 10;
const byte servoCPin = 11;

Kemudian, terdapat pula deklarasi konstanta untuk pin-pin servo yaitu servoAPin, servoBPin, dan servoCPin.

myservoA.attach(servoAPin);
myservoB.attach(servoBPin);
myservoC.attach(servoCPin);

Pada fungsi setup, terdapat inisialisasi pin-pin servo dengan menghubungkannya ke objek servo masing-masing.

for (pos = 0; pos <= 180; pos += 1) {
  myservoA.write(pos);
  myservoB.write(pos);
  myservoC.write(pos);
  delay(15);
}

Pada fungsi loop, terdapat perulangan untuk menggerakkan servo A, B, dan C dari sudut 0 derajat ke 180 derajat dengan menggunakan fungsi write. 

for (pos = 180; pos >= 0; pos -= 1) {
  myservoA.write(pos);
  myservoB.write(pos);
  myservoC.write(pos);
  delay(15);
}

Setelah itu, terdapat perulangan lagi untuk menggerakkan servo A, B, dan C dari sudut 180 derajat ke 0 derajat. Program kemudian akan berhenti selama 15 milidetik setiap iterasinya dengan menggunakan fungsi delay.

Hasil - Mengendalikan Banyak Servo dengan Arduino Uno

Link simulasi: Mengendalikan Banyak Motor Servo dengan Arduino


Penutup

Dengan demikian, tutorial mengendalikan motor servo dengan Arduino sudah selesai. Melalui tutorial ini, kita sudah memahami berbagai cara mengendalikan motor servo dengan Arduino, mulai dari menggunakan potensiometer, push button, hingga mengendalikan banyak servo sekaligus. Selamat mencoba dan semoga tutorial ini bermanfaat bagi kita yang ingin belajar mengendalikan motor servo menggunakan Arduino. Jangan lupa untuk selalu menyimak update terbaru tentang tutorial-tutorial menarik lainnya di blog kami. Selamat belajar dan semoga sukses! Terima kasih.

Penelusuran terkait:

  • Tutorial mengakses motor servo
  • Cara mengakses motor servo
  • Tutorial kontrol motor servo
  • Cara kontrol motor servo
  • Program motor servo Arduino
  • Menggunakan servo Arduino

Penghobi Elektronika