Relay hanya bisa nyala atau mati. Modul MOSFET bisa mengatur besar arus, jadi kecepatan kipas DC bisa diatur 0-100% dari slider di Klenik. Cara yang sama dipakai untuk meredupkan lampu LED strip 12V.
MOSFET adalah saklar elektronik tanpa bagian bergerak yang bisa menyala-mati ribuan kali per detik. ESP32 mengirim sinyal PWM (proyek 003) ke pin PWM modul. Kalau sinyal HIGH 60% dari waktu, kipas menerima daya rata-rata 60% dan berputar lebih pelan. Kipas tidak sempat berhenti di antara pulsa karena putarannya punya momentum.
Modul D4184 punya optocoupler di input. Sisi ESP32 dan sisi kipas terpisah secara listrik, dan sinyal 3,3V sudah cukup untuk menyalakan MOSFET. Kipas mendapat daya dari baterai lewat terminal VIN, lalu terminal OUT ke kipas.
Kipas kecil tidak bisa mulai berputar dengan daya rendah. Karena itu ada kecepatan minimum, dan setiap kali mulai dari diam kipas diberi daya penuh 0,3 detik dulu.
Komponen
| Komponen | Qty | Harga |
|---|---|---|
| ESP32 DOIT DevKit V1 30 pin | 1 | Rp75.000 |
| D4184 MOSFET MOS FET Module Isolated 4184 40V 50 | 1 | Rp9.603 |
| Kipas blower 5V 5015 | 1 | Rp20.000 |
| Holder baterai 3×AA + kabelbaterai AA dibeli terpisah | 1 | Rp6.000 |
| Kabel jumper female-female 10 cm (isi 10)isi 10, terpakai 2 | 1 | Rp3.500 |
| Kabel micro USB data 30 cmopsional, kalau belum punya kabel micro USB data | 1 | Rp11.700 |
| Total (tanpa opsional) | Rp114.103 |
Langkah 1: Rangkai komponen
Sambungkan kabel sesuai gambar di atas. Kalau gambar dan tabel terlihat berbeda, ikuti tabel.
| Dari | Ke | Kabel | |
|---|---|---|---|
| Modul MOSFET D4184 PWM | → | D25 GPIO25 | biru |
| Modul MOSFET D4184 GND | → | GND | hitam |
| Baterai 3×AA (4,5V) + | → | Modul MOSFET D4184 VIN+ | merah |
| Baterai 3×AA (4,5V) − | → | Modul MOSFET D4184 VIN− | hitam |
| Modul MOSFET D4184 OUT+ | → | Kipas blower 5V + | merah |
| Modul MOSFET D4184 OUT− | → | Kipas blower 5V − | hitam |
Langkah 2: Siapkan dashboard Klenik
Cara cepat: unduh p086.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 Kipas | ichibot/KODE/p086/kecepatan | 0–100 % |
| Gauge Kecepatan | ichibot/KODE/p086/status | 0–100 % |
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).
// Proyek 086 - Kipas DC Atur Kecepatan (MOSFET)
// 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_STATUS = "ichibot/budi1234/p086/status";
const char* TOPIK_KECEPATAN = "ichibot/budi1234/p086/kecepatan";
const char* BROKER = "mqtt.ichibot.id";
WiFiClient wifi;
PubSubClient mqtt(wifi);
const int PIN_PWM = 25;
const int FREKUENSI = 1000; // Hz, cukup lambat untuk optocoupler di modul D4184
const int MIN_JALAN = 35; // di bawah % ini kipas tidak kuat berputar
int kecepatan = 0;
void aturKecepatan(int persen) {
persen = constrain(persen, 0, 100);
if (persen > 0 && persen < MIN_JALAN) persen = MIN_JALAN;
if (kecepatan == 0 && persen > 0) { // dari diam: dorong penuh sebentar supaya mulai berputar
ledcWrite(PIN_PWM, 255);
delay(300);
}
kecepatan = persen;
ledcWrite(PIN_PWM, persen * 255 / 100);
mqtt.publish(TOPIK_STATUS, String(persen).c_str(), true);
}
void pesanMasuk(char* t, byte* isi, unsigned int panjang) {
String p;
for (unsigned int i = 0; i < panjang; i++) p += (char)isi[i];
aturKecepatan(p.toInt());
}
void langganan() {
mqtt.subscribe(TOPIK_KECEPATAN);
}
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);
ledcAttach(PIN_PWM, FREKUENSI, 8); // pin, frekuensi, resolusi 8 bit (0-255)
ledcWrite(PIN_PWM, 0);
sambungWiFi();
mqtt.setServer(BROKER, 1883);
mqtt.setCallback(pesanMasuk);
}
void loop() {
if (!mqtt.connected()) sambungMQTT();
mqtt.loop();
}Langkah 4: Pahami kodenya
- Cara memasang PWM di ESP32 (core 3.x). Resolusi 8 bit berarti nilai 0-255.
- Optocoupler di modul lambat, jadi frekuensi tinggi (misalnya 25 kHz) tidak terbaca dengan baik. 1 kHz aman, tetapi kadang kipas berdengung pelan. Itu normal.
- Dorongan awal penuh supaya kipas mengatasi gaya gesek diam, baru diturunkan ke kecepatan yang diminta.