Tutorial Belanja komponen

Tutorial › Berat, Level & Aliran

Kecepatan Putar Motor (Hall Sensor)

ESP32-WROOM-32D23D22TX0RX0D21D19D18D5TX2RX2D4D2D15GND3V3ENVPVND34D35D32D33D25D26D27D14D12D13GNDVINLM35VCCGNDOUTSensor Hall 49E (sisi tulisan menghadap kamu)

Tempel magnet kecil di roda, kipas, atau poros motor, lalu sensor Hall 49E menghitung berapa kali magnet lewat. Klenik menampilkan kecepatan putar dalam RPM (putaran per menit). Bisa dipakai untuk speedometer sepeda mini atau memantau kipas.

Sensor Hall 49E menghasilkan tegangan sebanding dengan kekuatan medan magnet. Tanpa magnet, keluarannya sekitar setengah tegangan suplai. Kutub utara mendekat membuatnya naik, dan kutub selatan membuatnya turun. Saat ESP32 menyala, nilai tanpa magnet diukur sebagai titik tengah, jadi jauhkan magnet saat itu.

Setiap kali selisih dari titik tengah melewati ambang, magnet dianggap lewat dan dihitung satu. Ambang untuk "menjauh" dibuat setengahnya (histeresis), supaya satu lintasan magnet tidak terhitung dua. Setiap 2 detik, hitungan diubah ke RPM: hitungan per detik × 60.

analogRead() dipanggil di setiap putaran loop(), ribuan kali per detik, sehingga putaran sampai beberapa ribu RPM masih terbaca.

Komponen

KomponenQtyHarga
ESP32 DOIT DevKit V1 30 pin1Rp75.000
OH49E Hall Effect Sensor Magnet Switch OH 49E1Rp1.950
Magnet 6x3mm Neodymium Bulat NdFeB Kuat 6mm 3mm 1Rp1.463
Breadboard mini 170 titik1Rp4.875
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)Rp86.788
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
Sensor Hall 49E (sisi tulisan menghadap kamu) VCC→3V3merah
Sensor Hall 49E (sisi tulisan menghadap kamu) GND→GNDhitam
Sensor Hall 49E (sisi tulisan menghadap kamu) OUT→D34 GPIO34hijau

Langkah 2: Siapkan dashboard Klenik

Kecepatanichibot/budi1234/p138/rpm
030001240 RPM
0 detik lalu
Grafik RPMichibot/budi1234/p138/rpm
0 RPM
0.0 RPM9 titik3000.0 RPM
0 detik lalu

Cara cepat: unduh p138.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
Gauge
Kecepatan
ichibot/KODE/p138/rpm0–3000 RPM
Chart
Grafik RPM
ichibot/KODE/p138/rpm0–3000 RPM

Langkah 3: Upload kode

Library: PubSubClient (Nick O'Leary). 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).

p138.inoUnduh .ino
// Proyek 138 - Kecepatan Putar Motor (Hall Sensor)
// Board: ESP32 DOIT DevKit V1 | Dashboard: klenik.ichibot.id
#include <WiFi.h>
#include <PubSubClient.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_RPM = "ichibot/budi1234/p138/rpm";

const char* BROKER = "mqtt.ichibot.id";
WiFiClient wifi;
PubSubClient mqtt(wifi);
const int PIN_HALL = 34;
const int MAGNET_PER_PUTARAN = 1;
int tengah = 1900, ambang = 150;      // diisi otomatis saat menyala
bool dekat = false;
unsigned long hitungan = 0, kirimTerakhir = 0;

void kalibrasi() {                    // ukur nilai tanpa magnet sebagai titik tengah
  long jumlah = 0;
  for (int i = 0; i < 200; i++) { jumlah += analogRead(PIN_HALL); delay(2); }
  tengah = jumlah / 200;
}

void langganan() {}

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); kalibrasi(); // jauhkan magnet saat menyala sambungWiFi(); mqtt.setServer(BROKER, 1883); } void loop() { if (!mqtt.connected()) sambungMQTT(); mqtt.loop(); int v = analogRead(PIN_HALL); int beda = abs(v - tengah); // kutub magnet mana pun dihitung if (!dekat && beda > ambang) { dekat = true; hitungan++; } // magnet mendekat: satu hitungan if (dekat && beda < ambang / 2) dekat = false; // histeresis if (millis() - kirimTerakhir >= 2000) { float detik = (millis() - kirimTerakhir) / 1000.0; kirimTerakhir = millis(); float rpm = hitungan / detik * 60 / MAGNET_PER_PUTARAN; hitungan = 0; mqtt.publish(TOPIK_RPM, String(rpm, 0).c_str()); } }

Langkah 4: Pahami kodenya

  1. abs() membuat kutub utara maupun selatan sama-sama terhitung, jadi arah memasang magnet tidak penting.
  2. Ambang turun lebih rendah daripada ambang naik, mencegah hitungan ganda saat magnet tepat di batas.
  3. Kalau memasang 2 magnet di roda (lebih seimbang), ubah menjadi 2.