Cari Kode

Tutorial ESP32 17/55 - Mengendalikan Motor Servo menggunakan ESP32 dan Potensiometer - Kit Pembelajaran IoT ESP32

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

ESP32-17-Sevo_motor-wiring

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.

ESP32_servo_lib

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

Gambar

ESP32-17-Sevo_motor-schematic
ESP32-17-Sevo_motor-schematic
ESP32-17-Sevo_motor-wiring
ESP32-17-Sevo_motor-wiring
ESP32_servo_lib
ESP32_servo_lib
816-ESP32 Tutorial 17/55- Arduino code for controling servo motor
Bahasa: C++
#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);
  }
}

Berkas📁

Lembar Data (pdf)

File lainnya