Motor servo merupakan salah satu komponen yang paling sering digunakan dalam proyek robotika dan otomasi. Untuk aplikasi yang membutuhkan tenaga lebih besar dibandingkan servo standar seperti SG90, banyak maker dan pengembang memilih menggunakan MG996R, yaitu motor servo torsi tinggi yang mampu menghasilkan tenaga besar dengan kontrol posisi yang presisi.
Pada tutorial ini, Anda akan mempelajari cara menggunakan motor servo MG996R dengan Arduino, mulai dari mengenal karakteristik servo, memahami konfigurasi pin, melakukan pengkabelan yang benar, hingga mengontrol posisi dan kecepatan putaran servo menggunakan program Arduino.
Perangkat Keras yang Dibutuhkan
- Arduino Uno R3
- Kabel USB
- Motor Servo MG996R
- Kabel Jumper
- Catu daya eksternal (disarankan)
Mengenal Motor Servo MG996R
MG996R merupakan motor servo digital bertorsi tinggi yang banyak digunakan pada proyek yang membutuhkan tenaga besar dan kontrol posisi yang akurat. Dibandingkan servo mikro seperti SG90, MG996R mampu mengangkat beban yang jauh lebih berat sehingga cocok digunakan untuk lengan robot (robotic arm), robot berkaki, sistem kemudi kendaraan RC, mekanisme buka-tutup pintu otomatis, aktuator mekanis, dan sistem pan-tilt kamera berukuran besar. Servo ini mampu bergerak pada rentang sudut sekitar 0° hingga 180°, sehingga memungkinkan pengaturan posisi yang presisi sesuai kebutuhan aplikasi.
Baca juga: Arduino Motor Shield Rev3 - Cara Mengontrol Motor DC dengan Arduino
Spesifikasi Singkat MG996R
- Tegangan kerja: 4.8V – 7.2V
- Sudut putar: sekitar 180°
- Torsi tinggi hingga sekitar 15 kg·cm (tergantung tegangan)
- Kontrol menggunakan sinyal PWM
- Gear berbahan logam (metal gear)
- Cocok untuk aplikasi dengan beban besar
Pinout Motor Servo MG996R
Servo MG996R memiliki tiga kabel utama yang berfungsi sebagai jalur daya dan kontrol.
1. Pin VCC
Biasanya berwarna merah. Pin ini digunakan sebagai sumber tegangan servo dan dapat dihubungkan ke tegangan antara 4.8V hingga 7.2V sesuai spesifikasi servo.
2. Pin GND
Biasanya berwarna hitam atau cokelat. Pin ini berfungsi sebagai ground dan harus terhubung ke ground Arduino maupun sumber daya eksternal.
3. Pin Sinyal
Biasanya berwarna kuning, oranye, atau putih. Pin ini menerima sinyal PWM dari Arduino untuk menentukan posisi sudut servo.
Wiring Diagram MG996R dengan Arduino
Salah satu kesalahan yang sering dilakukan pemula adalah menghubungkan servo MG996R langsung ke pin 5V Arduino. Meskipun pada beberapa kondisi servo masih dapat bergerak, cara ini sangat tidak disarankan karena MG996R membutuhkan arus yang relatif besar, terutama saat mulai bergerak (startup current), menahan beban, dan berubah arah secara tiba-tiba. Jika daya diambil langsung dari Arduino, dapat terjadi beberapa masalah seperti Arduino restart sendiri, servo bergerak tidak stabil, tegangan turun (voltage drop), komunikasi serial terganggu, dan board Arduino berpotensi mengalami kerusakan.
Menggunakan Catu Daya Eksternal
Untuk menjaga kestabilan sistem, MG996R sebaiknya menggunakan sumber daya eksternal. Konfigurasi yang direkomendasikan adalah:
- VCC servo → sumber daya eksternal 5V–6V
- GND servo → GND sumber daya eksternal
- Pin sinyal servo → pin digital Arduino
- GND Arduino → GND sumber daya eksternal
Penting: Pastikan ground Arduino dan ground sumber daya eksternal saling terhubung (common ground). Tanpa koneksi ground bersama, sinyal kontrol dari Arduino mungkin tidak dapat dibaca dengan benar oleh servo.
Kode Program Arduino untuk Mengontrol MG996R
Program berikut akan membuat servo bergerak perlahan dari posisi 0° menuju 180°, kemudian kembali lagi ke posisi awal secara berulang.
Kode Program Arduino
#include <Servo.h>
Servo servo; // create servo object to control a servo
void setup() {
servo.attach(9); // attaches the servo on pin 9 to the servo object
servo.write(0); // rotate slowly servo to 0 degrees immediately
}
void loop() {
for (int angle = 0; angle <= 180; angle += 1) {
servo.write(angle);
delay(10);
}
for (int angle = 180; angle >= 0; angle -= 1) {
servo.write(angle);
delay(10);
}
}
Penjelasan Program
1. Pertama, library Servo ditambahkan ke dalam program #include <Servo.h>
2. Kemudian dibuat sebuah objek servo Servo servo;
3. Pada fungsi setup(), servo dihubungkan ke pin digital 9 menggunakan servo.attach(9);
4. Selanjutnya servo diarahkan ke posisi awal servo.write(0);
5. Di dalam fungsi loop(), digunakan dua buah perulangan for.
- Perulangan pertama menggerakkan servo dari 0° menuju 180°:
for (int angle = 0; angle <= 180; angle += 1)
- Sedangkan perulangan kedua mengembalikan servo dari 180° menuju 0°:
for (int angle = 180; angle >= 0; angle -= 1)
Karena setiap perubahan sudut diberi jeda 10 milidetik, pergerakan servo terlihat lebih halus.
Langkah Pengujian
1. Hubungkan servo MG996R ke Arduino sesuai diagram pengkabelan.
2. Pastikan servo mendapatkan suplai daya eksternal.
3. Sambungkan Arduino ke komputer menggunakan kabel USB.
4. Buka Arduino IDE.
5. Pilih board dan port yang sesuai.
6. Salin program ke Arduino IDE.
7. Klik tombol Upload.
Jika seluruh koneksi sudah benar, servo akan bergerak dari 0° menuju 180°, bergerak kembali dari 180° menuju 0°, dan mengulangi proses tersebut secara terus-menerus.
Cara Mengontrol Kecepatan Servo MG996R
Selain mengatur posisi, Arduino juga dapat mengontrol kecepatan pergerakan servo. Metode yang direkomendasikan adalah menggunakan kombinasi fungsi millis() dan map() sehingga servo dapat bergerak secara halus tanpa menghambat proses lain yang berjalan pada Arduino.
Kode Program
#include <Servo.h>
Servo myServo;
unsigned long MOVING_TIME = 3000; // moving time is 3 seconds
unsigned long moveStartTime;
int startAngle = 30; // 30°
int stopAngle = 90; // 90°
void setup() {
myServo.attach(9);
moveStartTime = millis(); // start moving
// TODO: other code
}
void loop() {
unsigned long progress = millis() - moveStartTime;
if (progress <= MOVING_TIME) {
long angle = map(progress, 0, MOVING_TIME, startAngle, stopAngle);
myServo.write(angle);
}
// TODO: other code
}
Penjelasan Program
Pada contoh ini, servo bergerak dari sudut 30° menuju 90° selama 3 detik. Nilai MOVING_TIME = 3000 menentukan durasi pergerakan servo. Fungsi millis() digunakan untuk menghitung waktu yang telah berlalu sejak pergerakan dimulai. Kemudian fungsi map() mengubah nilai waktu tersebut menjadi nilai sudut servo secara proporsional. Akibatnya servo bergerak secara bertahap menuju posisi target tanpa menggunakan delay(), sehingga Arduino tetap dapat menjalankan tugas lainnya secara bersamaan.
Baca juga: Arduino dan Motor Servo - Panduan Lengkap Mengontrol Posisi Servo dengan Arduino
Dalam praktik, hasil dan kendala yang ditemui bisa berbeda tergantung perangkat, konfigurasi, versi library, dan sistem yang digunakan.
- Diskusi umum dan tanya jawab praktik: https://t.me/edukasielektronika
- Kendala spesifik dan kasus tertentu: http://bit.ly/Chatarduino


0 on: "Arduino dan MG996R - Cara Mengontrol Motor Servo Torsi Tinggi dengan Arduino"