Elektronika & Robotika Dasar

Pertemuan 11

Aktuator - Servo Motor SG90 (180° & 360°)

Peringatan keselamatan: Servo memiliki bagian yang bergerak - jauhkan jari dan kabel dari horn servo saat sedang aktif, dan lepas daya sebelum mengatur ulang posisi horn secara manual agar gear internal tidak rusak.

Tujuan Pembelajaran

  • Memahami cara kerja motor servo dan perbedaannya dengan motor DC biasa.
  • Memahami perbedaan servo 180° (posisi) dan servo 360° (kecepatan/arah putar terus-menerus).
  • Mampu mengendalikan servo menggunakan library Servo.

Penjelasan Konsep

Apa itu servo motor?

Servo motor adalah motor yang bisa diatur posisi sudutnya secara presisi, berbeda dengan motor DC biasa yang hanya berputar terus-menerus. Servo memiliki rangkaian kontrol internal yang membaca sinyal PWM khusus untuk menentukan posisi/kecepatan.

Servo 180° vs Servo 360°

  • Servo SG90 180° - bergerak ke sudut tertentu (0°-180°) dan berhenti di sana, mempertahankan posisinya. Cocok untuk gerakan seperti membuka/menutup palang, menggerakkan lengan robot sederhana.
  • Servo SG90 360° (continuous rotation) - secara fisik mirip, tapi internalnya dimodifikasi sehingga berputar terus-menerus seperti motor DC. Perintah servo.write(90) pada servo 360° bukan berarti "ke sudut 90°", melainkan berhenti; nilai di bawah 90 memutar ke satu arah, nilai di atas 90 memutar ke arah sebaliknya - semakin jauh dari 90, semakin cepat putarannya.

Sinyal kontrol servo

Servo dikendalikan dengan pulsa sinyal PWM dengan lebar pulsa tertentu (umumnya 1–2 milidetik) yang dikirim berulang setiap ~20 milidetik. Di Arduino, cukup pakai library Servo bawaan Arduino IDE - tidak perlu menghitung pulsa manual.

Kebutuhan daya

Servo SG90 bisa disuplai langsung dari pin 5V board untuk pemakaian ringan (1 servo). Jika memakai beberapa servo sekaligus, sebaiknya pakai catu daya eksternal terpisah agar tidak membebani regulator tegangan board.

Kesalahan umum

  • Mengira servo 360° punya kontrol posisi seperti servo 180° - servo.write(90) pada servo 360° berarti "berhenti", bukan "ke sudut 90°"; menyalin logika posisi dari servo 180° ke servo 360° akan menghasilkan perilaku yang salah total.
  • Memberi nilai di luar 0-180 ke servo.write() - bisa menghasilkan perilaku tidak terduga tergantung implementasi library; selalu pastikan nilai berada dalam rentang yang didukung.
  • Menyalakan banyak servo langsung dari pin 5V board - arus lonjakan (terutama saat servo mulai bergerak/menahan beban) bisa membuat tegangan board turun drastis (brownout), menyebabkan board restart sendiri atau sensor lain terbaca kacau.
  • Tidak melepas power sebelum mengubah posisi mekanis servo secara manual - memutar horn servo dengan tangan saat servo masih menyala bisa merusak gear internal servo.

Komponen yang Dibutuhkan

  • 1x Arduino Uno atau ESP32
  • 1x Servo SG90 180°
  • 1x Servo SG90 360°
  • 1x Potensiometer (opsional, untuk kontrol manual servo 180°)
  • Breadboard, kabel jumper

Diagram / Skema Pengkabelan

Servo motor (3 kabel, sama untuk 180° & 360°):
  Merah  -> 5V
  Coklat/Hitam -> GND
  Oranye/Kuning (sinyal) -> pin PWM (mis. D9 untuk servo 180°, D10 untuk servo 360°)

Jika menggunakan beberapa servo sekaligus, gunakan catu daya eksternal untuk servo (GND catu daya eksternal tetap harus disambung ke GND board).

Contoh Kode Program

// Servo 180 derajat: bergerak ke posisi tertentu dan berhenti
// Servo 360 derajat: berputar terus dengan kecepatan/arah tergantung nilai write()

#include <Servo.h>

Servo servo180;
Servo servo360;

void setup() {
  servo180.attach(9);
  servo360.attach(10);
}

void loop() {
  // Servo 180 derajat: gerak ke beberapa posisi tetap
  servo180.write(0);
  delay(1000);
  servo180.write(90);
  delay(1000);
  servo180.write(180);
  delay(1000);

  // Servo 360 derajat: berputar searah jarum jam, berhenti, lalu berlawanan arah
  servo360.write(180); // putar cepat ke satu arah
  delay(1000);
  servo360.write(90);  // berhenti
  delay(500);
  servo360.write(0);   // putar cepat ke arah sebaliknya
  delay(1000);
  servo360.write(90);  // berhenti
  delay(500);
}

Tugas / Latihan

  1. Buat servo 180° bergerak otomatis bolak-balik dari 0° ke 180° secara halus (seperti gerakan "menyapu"), bukan langsung loncat posisi.
  2. Uji servo 360° pada beberapa nilai berbeda (misal 70, 110, 130) dan catat bagaimana kecepatan putarnya berubah dibanding nilai 90 (berhenti).
  3. (Tantangan) Cari nilai "titik berhenti" yang paling akurat untuk servo 360° milikmu (idealnya 90, tapi tiap unit bisa sedikit berbeda karena variasi produksi) dengan mencoba nilai-nilai di sekitar 90 hingga servo benar-benar diam.