Tutorial ESP32 17/55 - Mengendalikan Motor Servo menggunakan ESP32 dan Potensiometer - Kit Pembelajaran IoT ESP32
Dalam tutorial ini, kita akan belajar cara mengendalikan motor servo menggunakan mikrokontroler ESP32 dan potensiometer dari kit pembelajaran IoT ESP32 oleh SunFounder. Di akhir proyek ini, Anda akan dapat menyesuaikan sudut motor servo dengan lancar menggunakan potensiometer, memungkinkan kontrol yang presisi. Ini adalah cara yang bagus untuk mengeksplorasi kemampuan ESP32 dan bagaimana ia berinteraksi dengan motor.

Saat kita mendalami detailnya, kita akan membahas komponen perangkat keras yang diperlukan, instruksi pengkabelan, dan contoh kode untuk membuat semuanya berjalan. Untuk representasi yang lebih visual, pastikan untuk menonton video yang terkait dengan tutorial ini (di video pada 0:30).
Penjelasan Perangkat Keras
Komponen utama untuk proyek ini termasuk mikrokontroler ESP32, motor servo (SG90), dan potensiometer. ESP32 adalah mikrokontroler yang kuat yang menawarkan Wi-Fi dan Bluetooth bawaan, membuatnya cocok untuk proyek IoT. Ia mampu mengendalikan berbagai perangkat, termasuk motor, dengan presisi tinggi.
Motor servo SG90 adalah komponen yang banyak digunakan yang dapat berputar sekitar 270 derajat. Ia beroperasi pada sinyal modulasi lebar pulsa (PWM), di mana sudut rotasi ditentukan oleh lebar pulsa yang dikirim ke motor tersebut. Potensiometer berfungsi sebagai resistor variabel, memungkinkan Anda untuk menyesuaikan tegangan yang dikirim ke ESP32, yang pada gilirannya mengontrol posisi servo.
Detail Datasheet
| Produsen | SG |
|---|---|
| Nomor bagian | SG90 |
| Tegangan logika/IO | 3,3 V (ESP32) |
| Tegangan suplai | 5 V |
| Arus keluaran (per saluran) | 1,2 A |
| Arus puncak (per saluran) | 2,5 A |
| Panduan frekuensi PWM | 50 Hz |
| Ambang logika input | 0,2 V (rendah), 2,5 V (tinggi) |
| Penurunan tegangan / RDS(on) / saturasi | 0,5 V |
| Batas termal | 85 °C maks |
| Kemasan | Plastik |
| Catatan / varian | Tersedia dalam berbagai jenis roda gigi |
- Pastikan servo diberi daya dengan tegangan yang sesuai (5V).
- Hubungkan ground servo ke ground ESP32 untuk referensi yang sama.
- Gunakan sinyal PWM yang tepat untuk mengontrol posisi servo.
- Perhatikan kebutuhan arus servo; gunakan catu daya eksternal jika perlu.
- Periksa penugasan pin yang benar saat pengkabelan untuk menghindari kesalahan konfigurasi.
Instruksi Pengkabelan

Untuk menghubungkan motor servo dan potensiometer ke ESP32, mulailah dengan menghubungkan kabel ground servo (biasanya hitam atau coklat) ke salah satu pin ground di ESP32. Selanjutnya, hubungkan kabel daya (biasanya merah) dari servo ke pin 5V di ESP32. Terakhir, hubungkan kabel sinyal (biasanya oranye atau putih) dari servo ke pin 25 di ESP32.
Untuk potensiometer, hubungkan satu pin luar ke pin 3,3V di ESP32 dan pin luar lainnya ke ground. Pin tengah potensiometer harus dihubungkan ke pin 34 di ESP32. Pengaturan ini memungkinkan ESP32 untuk membaca keluaran tegangan yang bervariasi dari potensiometer, yang akan digunakan untuk mengontrol posisi servo.
Contoh Kode & Penjelasan
Potongan kode berikut menginisialisasi servo dan mengatur parameter untuk mengontrol gerakannya:
#include
Servo myServo;
const int servoPin = 25;
const int minPulseWidth = 500; // 0,5 ms
const int maxPulseWidth = 2500; // 2,5 ms
void setup() {
myServo.attach(servoPin, minPulseWidth, maxPulseWidth);
myServo.setPeriodHertz(50); // Servo standar 50Hz
}
Dalam kode ini, kita menyertakan pustaka ESP32Servo dan membuat instance servo dengan nama myServo. Kita mendefinisikan nomor pin untuk servo dan mengatur lebar pulsa minimum dan maksimum yang sesuai dengan batas sudut servo.
Selanjutnya, mari kita lihat loop yang terus-menerus menggerakkan servo maju mundur:
void loop() {
for (int angle = 0; angle <= 180; angle++) {
int pulseWidth = map(angle, 0, 180, minPulseWidth, maxPulseWidth);
myServo.writeMicroseconds(pulseWidth);
delay(15);
}
for (int angle = 180; angle >= 0; angle--) {
int pulseWidth = map(angle, 0, 180, minPulseWidth, maxPulseWidth);
myServo.writeMicroseconds(pulseWidth);
delay(15);
}
}
Loop ini secara bertahap mengubah sudut dari 0 ke 180 derajat dan kembali lagi, menggunakan fungsi map untuk mengonversi sudut menjadi lebar pulsa yang sesuai untuk servo. Setiap perubahan diikuti dengan penundaan singkat untuk memungkinkan servo mencapai posisi barunya dengan lancar.
Demonstrasi / Apa yang Diharapkan
Setelah semuanya terhubung dan kode diunggah, Anda akan melihat motor servo bergerak dengan lancar dari 0 ke 180 derajat dan kembali. Jika Anda menyesuaikan potensiometer, servo harus mencerminkan posisi baru berdasarkan tegangan yang diberikan oleh potensiometer. Berhati-hatilah dengan polaritas terbalik saat pengkabelan, karena dapat merusak komponen Anda (di video pada 3:45).
Stempel Waktu Video
- 00:00 Mulai
- 1:56 Apa itu motor servo
- 5:00 Halaman dokumen
- 6:33 Penjelasan kabel untuk servo
- 7:45 Memilih port COMP untuk ESP32 di Arduino IDE
- 9:27 Penjelasan kode Arduino
- 14:31 Demonstrasi kontrol servo menggunakan ESP32
- 16:04 Menyalakan servo selain dengan 5V
- 18:47 Mengontrol Servo tanpa loop
- 20:15 Mengontrol Servo dengan Potensiometer
- 21:37 Penjelasan kode Arduino untuk servo dengan pot
#include <ESP32Servo.h>
// Define the servo and the pin it is connected to
Servo myServo;
const int servoPin = 25;
// Define the minimum and maximum pulse widths for the servo
const int minPulseWidth = 500; // 0.5 ms
const int maxPulseWidth = 2500; // 2.5 ms
void setup() {
// Attach the servo to the specified pin and set its pulse width range
myServo.attach(servoPin, minPulseWidth, maxPulseWidth);
// Set the PWM frequency for the servo
myServo.setPeriodHertz(50); // Standard 50Hz servo
}
void loop() {
// Rotate the servo from 0 to 180 degrees
for (int angle = 0; angle <= 180; angle++) {
int pulseWidth = map(angle, 0, 180, minPulseWidth, maxPulseWidth);
myServo.writeMicroseconds(pulseWidth);
delay(15);
}
// Rotate the servo from 180 to 0 degrees
for (int angle = 180; angle >= 0; angle--) {
int pulseWidth = map(angle, 0, 180, minPulseWidth, maxPulseWidth);
myServo.writeMicroseconds(pulseWidth);
delay(15);
}
}
Common Course Links
Common Course Files
Sumber daya & referensi
-
DokumentasiESP32 Tutorial 17/55 - SunFounder Servo motor documentationdocs.sunfounder.com
Berkas📁
Lembar Data (pdf)
-
Lembar data motor servo DS5160
DS5160_datasheet.pdf0.33 MB
File lainnya
-
Download SG90 datasheet (PDF)
robojax-servo-sg90_datasheet.pdf