Mengontrol Servo Menggunakan ESP32 dengan Metode Bluetooth Control Tutorial ESP32
ESP-32 DEV MODULE + Servo 180 MG995R |
Alat dan Bahan
1. ESP32 Dev Module: Modul mikrokontroler yang mendukung koneksi Wi-Fi dan Bluetooth.
2. Motor Servo: Servo standar (misalnya SG90 atau MG995R).
3. Breadboard dan Jumper Wire: Untuk merangkai komponen.
4. Power Supply: Untuk memberikan daya ke servo. ( jika di perlukan )
5. Smartphone: Sebagai pengendali Bluetooth.
Instalasi Library
Sebelum memulai, pastikan Anda telah menginstal library ESP32Servo. Di Arduino IDE, Anda bisa menginstalnya seperti berikut:
1. Buka Arduino IDE, kemudian pilih `Sketch` > `Include Library` > `Manage Libraries`.
2. Ketikkan "ESP32Servo" pada kolom pencarian dan instal library tersebut.
Rangkaian
Rangkaian sederhana yang akan kita buat sebagai berikut:
1. Sambungkan kabel kontrol dari servo pada ESP32 (GPIO 13).
2. Sambungkan pin VCC servo ke sumber VIN dan GND ke ground dari ESP32.(untuk penggunaan yang lama atau permanen wajib memakai power supply eksternal)
Kode Program
Berikut adalah contoh kode untuk mengontrol motor servo menggunakan ESP32 dan ESP32Servo library melalui Bluetooth:
#include <ESP32Servo.h>
#include <BluetoothSerial.h>
BluetoothSerial SerialBT;
Servo myServo;
// Pin untuk servo
const int servoPin = 13; // Ganti dengan pin yang kamu gunakan untuk servo
int targetPosition = 0; // Posisi tujuan servo
int currentPosition = 0; // Posisi saat ini servo
int speedDelay = 15; // Delay dalam ms untuk kecepatan servo (kecepatan gerakan)
unsigned long previousMillis = 0; // Waktu terakhir servo diperbarui
bool updateServo = false; // Untuk menandai update servo
void setup() {
Serial.begin(115200);
SerialBT.begin("ESP32_Servo"); // Nama perangkat Bluetooth
Serial.println("Bluetooth device is ready to pair.");
// Inisialisasi servo
myServo.attach(servoPin);
myServo.write(0); // Posisi awal servo
delay(1000);
}
void loop() {
// Jika ada data yang dikirim melalui Bluetooth
if (SerialBT.available()) {
char command = SerialBT.read(); // Membaca perintah dari Bluetooth
// Memeriksa apakah perintah untuk mengatur kecepatan
if (command == 's') {
// Mengatur kecepatan. Harus diikuti dengan angka dari 1-9
if (SerialBT.available()) {
char speedChar = SerialBT.read();
if (speedChar >= '1' && speedChar <= '9') {
speedDelay = map(speedChar, '1', '9', 10, 100); // Memetakan kecepatan dari 10ms ke 100ms
Serial.print("Setting speed delay to: ");
Serial.println(speedDelay);
} else {
Serial.println("Invalid speed value.");
}
}
}
// Memeriksa perintah untuk mengatur posisi
else if (command >= '0' && command <= '9') {
targetPosition = map(command, '0', '9', 0, 180);
Serial.print("Setting target position to: ");
Serial.println(targetPosition);
updateServo = true; // Menandakan bahwa servo perlu diperbarui
}
else {
Serial.println("Unknown command.");
}
}
// Update servo position non-blocking
if (updateServo) {
unsigned long currentMillis = millis();
if (currentMillis - previousMillis >= speedDelay) {
// Update posisi servo sedikit demi sedikit
if (currentPosition < targetPosition) {
currentPosition++; // Arahkan ke posisi yang lebih tinggi
}
else if (currentPosition > targetPosition) {
currentPosition--; // Arahkan ke posisi yang lebih rendah
}
myServo.write(currentPosition); // Menggerakkan servo ke posisi saat ini
previousMillis = currentMillis; // Update waktu terakhir diperbarui
// Jika kita sudah mencapai tujuan, hentikan update
if (currentPosition == targetPosition) {
updateServo = false; // Stop updating
}
}
}
}
Berikut adalah penjelasan dari kode yang terlihat rumit di atas, fungsi utamnya mengontrol motor servo menggunakan ESP32 melalui koneksi Bluetooth dan memungkinkan penyesuaian posisi dan kecepatan servo dengan cara yang sederhana dan efektif.
Penjelasan Kode
1. Library dan Variabel Global
#include <ESP32Servo.h>
#include <BluetoothSerial.h>
BluetoothSerial SerialBT;
Servo myServo;
// Pin untuk servo
const int servoPin = 13; // Ganti dengan pin yang kamu gunakan untuk servo
int targetPosition = 0; // Posisi tujuan servo
int currentPosition = 0; // Posisi saat ini servo
int speedDelay = 15; // Delay dalam ms untuk kecepatan servo (kecepatan gerakan)
unsigned long previousMillis = 0; // Waktu terakhir servo diperbarui
bool updateServo = false; // Untuk menandai update servo
- ESP32Servo: Library ini digunakan untuk mengontrol motor servo dengan ESP32.
- BluetoothSerial: Memungkinkan ESP32 untuk berkomunikasi menggunakan Bluetooth.
- Variabel global: Digunakan untuk menyimpan status servo, posisi saat ini, dan pengaturan kecepatan.
2. Setup
void setup() {
Serial.begin(115200);
SerialBT.begin("ESP32_Servo"); // Nama perangkat Bluetooth
Serial.println("Bluetooth device is ready to pair.");
// Inisialisasi servo
myServo.attach(servoPin);
myServo.write(0); // Posisi awal servo
delay(1000);
}
- Dalam fungsi `setup()`, kita mulai komunikasi serial untuk monitor dan Bluetooth. Nama perangkat Bluetooth ditetapkan menjadi "ESP32_Servo" untuk ditemukan oleh perangkat lain.
- Servo diinisialisasi pada pin yang ditentukan dan langsung di-set ke posisi awal 0 derajat.
3. Loop Utama
void loop() {
// Jika ada data yang dikirim melalui Bluetooth
if (SerialBT.available()) {
char command = SerialBT.read(); // Membaca perintah dari Bluetooth
// Memeriksa apakah perintah untuk mengatur kecepatan
if (command == 's') {
// Mengatur kecepatan. Harus diikuti dengan angka dari 1-9
if (SerialBT.available()) {
char speedChar = SerialBT.read();
if (speedChar >= '1' && speedChar <= '9') {
speedDelay = map(speedChar, '1', '9', 10, 100); // Memetakan kecepatan dari 10ms ke 100ms
Serial.print("Setting speed delay to: ");
Serial.println(speedDelay);
} else {
Serial.println("Invalid speed value.");
}
}
}
// Memeriksa perintah untuk mengatur posisi
else if (command >= '0' && command <= '9') {
targetPosition = map(command, '0', '9', 0, 180);
Serial.print("Setting target position to: ");
Serial.println(targetPosition);
updateServo = true; // Menandakan bahwa servo perlu diperbarui
}
else {
Serial.println("Unknown command.");
}
}
- Di dalam `loop()`, program memeriksa apakah ada data yang tersedia dari koneksi Bluetooth.
- Jika perintah yang diterima adalah `'s'`, ini menunjukkan bahwa pengguna ingin mengatur kecepatan. Kecepatan diset dari `'1'` sampai `'9'`, yang kemudian dipetakan menjadi delay dari 10 ms sampai 100 ms.
- Jika perintah berbentuk angka dari `'0'` hingga `'9'`, ini menunjukkan posisi yang diinginkan untuk servo. Posisi ini dipetakan antara 0 (0 derajat) hingga 180 (180 derajat).
- Semua perintah dicetak ke serial monitor untuk pemantauan.
4. Pembaruan Posisi Servo
// Update servo position non-blocking
if (updateServo) {
unsigned long currentMillis = millis();
if (currentMillis - previousMillis >= speedDelay) {
// Update posisi servo sedikit demi sedikit
if (currentPosition < targetPosition) {
currentPosition++; // Arahkan ke posisi yang lebih tinggi
}
else if (currentPosition > targetPosition) {
currentPosition--; // Arahkan ke posisi yang lebih rendah
}
myServo.write(currentPosition); // Menggerakkan servo ke posisi saat ini
previousMillis = currentMillis; // Update waktu terakhir diperbarui
// Jika kita sudah mencapai tujuan, hentikan update
if (currentPosition == targetPosition) {
updateServo = false; // Stop updating
}
}
}
}
- Bagian ini melakukan pembaruan posisi servo secara non-blokir. Ini menggunakan fungsi `millis()` untuk menentukan waktu sejak program mulai berjalan dan membantu dalam mengatur kecepatan servo tanpa menghentikan eksekusi program.
- Servo akan bergerak secara bertahap sesuai dengan kecepatan yang telah diatur hingga mencapai posisi target. Setelah mencapai posisi target, flag `updateServo` diatur menjadi `false`, yang menghentikan pembaruan.
Penggunaan
Anda dapat mengontrol servo dengan menghubungkan smartphone ke perangkat Bluetooth dan menggunakan aplikasi terminal Bluetooth untuk mengirim perintah:Tampilan Terminal dari Android |
Tampilan Serial Monitor Ketika Menerima Perintah |
- Mengatur posisi: Kirim angka dari `0` hingga `9` untuk mengatur posisi servo dalam rentang 0° hingga 180°.
- Mengatur kecepatan: Kirim huruf `s`, diikuti dengan angka dari `1` hingga `9` untuk mengatur kecepatan gerak servo. contoh s1 atau s9 (tanpa spasi) kemudian kirim angka 1-9 untuk menggerakkan servo
Kode ini memberikan solusi efektif untuk mengontrol motor servo menggunakan ESP32 melalui koneksi Bluetooth. Dengan kemampuan untuk menyesuaikan posisi dan kecepatan servo secara real-time, Anda dapat mengembangkan proyek dengan fungsionalitas yang lebih kompleks, seperti mengontrol beberapa servo sekaligus atau menggunakan sensor untuk umpan balik kontrol. Anda bisa mengeksplorasi lebih lanjut dengan menambahkan fitur tambahan sesuai kebutuhan aplikasi Anda.
Umbrella Electronica
tutorialnya berhasil tq boss
izin coba master