Tutorial Belanja komponen

Tutorial › Servo & Motor

Servo 360° Gerak Maju-Mundur

ESP32-WROOM-32D23D22TX0RX0D21D19D18D5TX2RX2D4D2D15GND3V3ENVPVND34D35D32D33D25D26D27D14D12D13GNDVINMG90−+SServo SG90 360° (coklat −, merah +, oranye S)

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

KomponenQtyHarga
ESP32 DOIT DevKit V1 30 pin1Rp75.000
Servo SG90 Tower Pro 9g Micro 360 Derajat Contin1Rp24.375
Kabel jumper male-female 10 cm (isi 10)isi 10, terpakai 31Rp3.500
Kabel micro USB data 30 cmopsional, kalau belum punya kabel micro USB data1Rp11.700
Total (tanpa opsional)Rp102.875
Daftar komponen proyek ini otomatis masuk ke pesan. Hapus yang sudah kamu punya sebelum dikirim.

Langkah 1: Rangkai komponen

Sambungkan kabel sesuai gambar di atas. Kalau gambar dan tabel terlihat berbeda, ikuti tabel.

DariKeKabel
Servo SG90 360° (coklat −, merah +, oranye S) −→GNDcoklat
Servo SG90 360° (coklat −, merah +, oranye S) +→VINmerah
Servo SG90 360° (coklat −, merah +, oranye S) S→D13 GPIO13oranye

Langkah 2: Siapkan dashboard Klenik

Kecepatan (− mundur, + maju)ichibot/budi1234/p094/kecepatan
40%40 of 100%
0 detik lalu
Stopichibot/budi1234/p094/stop
Berhenti
0 detik lalu
Kecepatan Sekarangichibot/budi1234/p094/status
-10010040%
0 detik lalu

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.

WidgetTopicSetting
Slider Output
Kecepatan (− mundur, + maju)
ichibot/KODE/p094/kecepatan-100–100 %
Switch
Stop
ichibot/KODE/p094/stoppayload 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).

p094.inoUnduh .ino
// 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

  1. Titik diam bisa sedikit berbeda di tiap servo. Kalau servo masih merayap pelan saat slider di 0, coba 88, 89, 91, atau 92.
  2. Kecepatan -100..100 diubah ke angka servo 0..180. Makin jauh dari 90, makin cepat.