Servo 360° berputar terus seperti motor, tidak berhenti di sudut tertentu. Slider di Klenik mengatur arah dan kecepatannya: kiri = mundur, tengah = diam, kanan = maju. Cocok untuk roda robot kecil, pemutar etalase, atau pengaduk.
Kodenya sama dengan servo biasa (proyek 091), tetapi artinya berbeda. Pada servo 360°, angka write() bukan sudut melainkan kecepatan: 90 = diam, 0 = mundur penuh, 180 = maju penuh, dan angka di antaranya menghasilkan kecepatan sedang. Servo ini tidak tahu posisinya sendiri, jadi tidak bisa disuruh "ke 45°".
Slider -100 sampai 100 diubah ke 0-180 dengan rumus 90 + kecepatan × 90 / 100. Switch Stop mengembalikan servo ke diam dan menggeser slider ke 0.
Komponen
| Komponen | Qty | Harga |
|---|---|---|
| ESP32 DOIT DevKit V1 30 pin | 1 | Rp75.000 |
| Servo SG90 Tower Pro 9g Micro 360 Derajat Contin | 1 | Rp24.375 |
| Kabel jumper male-female 10 cm (isi 10)isi 10, terpakai 3 | 1 | Rp3.500 |
| Kabel micro USB data 30 cmopsional, kalau belum punya kabel micro USB data | 1 | Rp11.700 |
| Total (tanpa opsional) | Rp102.875 |
Langkah 1: Rangkai komponen
Sambungkan kabel sesuai gambar di atas. Kalau gambar dan tabel terlihat berbeda, ikuti tabel.
| Dari | Ke | Kabel | |
|---|---|---|---|
| Servo SG90 360° (coklat −, merah +, oranye S) − | → | GND | coklat |
| Servo SG90 360° (coklat −, merah +, oranye S) + | → | VIN | merah |
| Servo SG90 360° (coklat −, merah +, oranye S) S | → | D13 GPIO13 | oranye |
Langkah 2: Siapkan dashboard Klenik
Cara cepat: unduh p094.json, ganti budi1234 dengan KODE-mu, lalu import di Klenik (menu titik tiga → Export / Import → Import → Ganti total). Langkah lengkapnya ada di Panduan Klenik.
| Widget | Topic | Setting |
|---|---|---|
| Slider Output Kecepatan (− mundur, + maju) | ichibot/KODE/p094/kecepatan | -100–100 % |
| Switch Stop | ichibot/KODE/p094/stop | payload ON / OFF |
| Gauge Kecepatan Sekarang | ichibot/KODE/p094/status | -100–100 % |
Langkah 3: Upload kode
Library: PubSubClient (Nick O'Leary), ESP32Servo. Board di Arduino IDE: ESP32 Dev Module.
Isi dulu nama WiFi dan password di bagian ISI DULU, lalu ganti budi1234 di baris topic dengan KODE-mu, lalu upload dan buka Serial Monitor (115200).
// Proyek 094 - Servo 360° Gerak Maju-Mundur
// Board: ESP32 DOIT DevKit V1 | Dashboard: klenik.ichibot.id
#include <WiFi.h>
#include <PubSubClient.h>
#include <ESP32Servo.h>
// ===== ISI DULU =====
const char* WIFI_NAMA = "nama-wifi-kamu";
const char* WIFI_PASS = "password-wifi-kamu";
// topic MQTT: ganti budi1234 dengan KODE-mu (sama dengan di dashboard Klenik)
const char* TOPIK_STATUS = "ichibot/budi1234/p094/status";
const char* TOPIK_KECEPATAN = "ichibot/budi1234/p094/kecepatan";
const char* TOPIK_STOP = "ichibot/budi1234/p094/stop";
const char* BROKER = "mqtt.ichibot.id";
WiFiClient wifi;
PubSubClient mqtt(wifi);
Servo servo;
const int PIN_SERVO = 13;
const int DIAM = 90; // titik diam, setel kalau servo masih merayap
void putar(int kecepatan) { // -100 (mundur penuh) .. 0 (diam) .. 100 (maju penuh)
kecepatan = constrain(kecepatan, -100, 100);
servo.write(DIAM + kecepatan * 90 / 100);
mqtt.publish(TOPIK_STATUS, String(kecepatan).c_str(), true);
}
void pesanMasuk(char* t, byte* isi, unsigned int panjang) {
String topik = t;
String p;
for (unsigned int i = 0; i < panjang; i++) p += (char)isi[i];
if (topik == TOPIK_KECEPATAN) putar(p.toInt());
else if (topik == TOPIK_STOP && p == "ON") {
putar(0);
mqtt.publish(TOPIK_KECEPATAN, "0");
mqtt.publish(TOPIK_STOP, "OFF");
}
}
void langganan() {
mqtt.subscribe(TOPIK_KECEPATAN);
mqtt.subscribe(TOPIK_STOP);
}
sambungWiFi() dan sambungMQTT(): sama di semua proyek (klik untuk lihat)
void sambungWiFi() {
WiFi.begin(WIFI_NAMA, WIFI_PASS);
Serial.print("WiFi");
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println(" OK, IP " + WiFi.localIP().toString());
}
void sambungMQTT() {
while (!mqtt.connected()) {
if (mqtt.connect(WiFi.macAddress().c_str())) {
Serial.println("Terhubung ke Klenik");
langganan();
} else {
Serial.println("Broker gagal, coba lagi 3 detik");
delay(3000);
}
}
}
void setup() {
Serial.begin(115200);
servo.setPeriodHertz(50);
servo.attach(PIN_SERVO, 500, 2400);
servo.write(DIAM);
sambungWiFi();
mqtt.setServer(BROKER, 1883);
mqtt.setCallback(pesanMasuk);
}
void loop() {
if (!mqtt.connected()) sambungMQTT();
mqtt.loop();
}Langkah 4: Pahami kodenya
- Titik diam bisa sedikit berbeda di tiap servo. Kalau servo masih merayap pelan saat slider di 0, coba 88, 89, 91, atau 92.
- Kecepatan -100..100 diubah ke angka servo 0..180. Makin jauh dari 90, makin cepat.