Tutorial Belanja komponen

Tutorial › Servo & Motor

Penunjuk Jarum Servo (Meteran Analog)

ESP32-WROOM-32D23D22TX0RX0D21D19D18D5TX2RX2D4D2D15GND3V3ENVPVND34D35D32D33D25D26D27D14D12D13GNDVINMG90−+SServo MG90 (coklat −, merah +, oranye S)

Ubah angka dari proyek lain menjadi jarum meteran sungguhan di meja. Servo menunjuk suhu dari proyek 021, isi tandon dari proyek 065, atau angka apa pun di Klenik. Skala kertas di belakang jarum bisa kamu gambar sendiri.

Semua proyek di buku ini mengirim angka lewat broker yang sama. ESP32 di proyek ini berlangganan topic milik proyek lain, misalnya ichibot/budi1234/p021/suhu, dan ikut menerima angka suhu setiap kali proyek 021 mengirimnya. Satu alat mengukur, alat lain menampilkan, dan keduanya tidak perlu saling tahu.

Angka diubah ke sudut servo dengan perbandingan lurus. Nilai minimum menjadi 180° (jarum di kiri), dan nilai maksimum menjadi 0° (jarum di kanan). Jarum digerakkan 1° setiap 15 ms supaya halus seperti jarum meteran analog. Dari dashboard, jarum juga bisa digerakkan lewat slider di topic nilai.

Komponen

KomponenQtyHarga
ESP32 DOIT DevKit V1 30 pin1Rp75.000
Servo MG90 Metal Gear Micro 9g Tower Pro 180 Der1Rp33.950
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)Rp112.450
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 MG90 (coklat −, merah +, oranye S) −→GNDcoklat
Servo MG90 (coklat −, merah +, oranye S) +→VINmerah
Servo MG90 (coklat −, merah +, oranye S) S→D13 GPIO13oranye

Langkah 2: Siapkan dashboard Klenik

Uji Jarumichibot/budi1234/p099/nilai
3030 of 40
0 detik lalu

Cara cepat: unduh p099.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
Uji Jarum
ichibot/KODE/p099/nilai20–40

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).

p099.inoUnduh .ino
// Proyek 099 - Penunjuk Jarum Servo (Meteran Analog)
// 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_NILAI = "ichibot/budi1234/p099/nilai";
const char* SUMBER    = "ichibot/budi1234/p021/suhu";   // topic yang ditunjuk jarum
const float NILAI_MIN = 20, NILAI_MAKS = 40;          // ujung kiri dan kanan skala

const char* BROKER = "mqtt.ichibot.id";
WiFiClient wifi;
PubSubClient mqtt(wifi);
Servo jarum;
const int PIN_SERVO = 13;
float sudutSekarang = 90, sudutTujuan = 90;
unsigned long gerakTerakhir = 0;

void pesanMasuk(char* t, byte* isi, unsigned int panjang) {
  String p;
  for (unsigned int i = 0; i < panjang; i++) p += (char)isi[i];
  float nilai = constrain(p.toFloat(), NILAI_MIN, NILAI_MAKS);
  // servo 180° = kiri (nilai kecil), 0° = kanan (nilai besar), seperti meteran jarum
  sudutTujuan = 180 - (nilai - NILAI_MIN) / (NILAI_MAKS - NILAI_MIN) * 180;
}

void langganan() {
  mqtt.subscribe(SUMBER);
  mqtt.subscribe(TOPIK_NILAI);   // bisa juga digerakkan dari slider
}

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); jarum.setPeriodHertz(50); jarum.attach(PIN_SERVO, 500, 2400); jarum.write(sudutSekarang); sambungWiFi(); mqtt.setServer(BROKER, 1883); mqtt.setCallback(pesanMasuk); } void loop() { if (!mqtt.connected()) sambungMQTT(); mqtt.loop(); // jarum bergerak pelan seperti meteran sungguhan: 1° setiap 15 ms if (abs(sudutTujuan - sudutSekarang) >= 1 && millis() - gerakTerakhir >= 15) { gerakTerakhir = millis(); sudutSekarang += (sudutTujuan > sudutSekarang) ? 1 : -1; jarum.write((int)sudutSekarang); } }

Langkah 4: Pahami kodenya

  1. Topic lengkap yang ditunjuk jarum. Ganti budi1234 dengan KODE-mu dan p021/suhu dengan proyek dan data yang diinginkan, misalnya p065/persen.
  2. Rentang skala. Untuk persen isi tandon, pakai 0 dan 100.
  3. Perbandingan lurus seperti map(), tetapi dengan pecahan (float), jadi angka seperti 27,5 tetap tepat.
  4. Berlangganan topic milik proyek lain. Proyek sumber harus menyala dan memakai KODE yang sama.