Tutorial Lengkap Mengendalikan Motor Servo dengan Arduino
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:
- 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.
- Kabel hitam atau cokelat yang merupakan kabel ground.
- 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.
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.
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.
Diagram Rangkaian - Mengendalikan Motor Servo dengan Push Button
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.
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
Gabung dalam percakapan