Kontrol FAN dengan DHT11
- Adam Kusumah
- Jun 17
- 2 min read
Selamat datang di website Cosmo!
di artikel ini, kita akan belajar mengontrol FAN berdasarkan suhu dan kelembapan dengan DHT11.
Skema Rangkaian

Penjelasan Rangkaian
5V ⮕ Kaki (+) DHT11, LCD & Relay
GND ⮕ Kaki (-) DHT11, LCD & Relay
D7 ⮕ Data DHT11
D3 ⮕ Data Relay
D2 ⮕ SDA LCD
D1 ⮕ SCL LCD
Adaptor (+) ⮕ COM Relay
NO Relay ⮕ Kaki (+) FAN
Adaptor (-) ⮕ Kaki (+) FAN
#define BLYNK_TEMPLATE_ID "TMPL6k65v6vID"
#define BLYNK_TEMPLATE_NAME "dht11"
#define BLYNK_AUTH_TOKEN "um1b_9D4HawO4wW8Eog7mKp9PqE3s49h"
#define BLYNK_PRINT Serial
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>
#include <DHT.h>
// Konfigurasi WiFi
char ssid[] = "YOUR WIFI SSID"; // Ganti dengan SSID WiFi kamu
char pass[] = "YOUR WIFI PASSWORD"; // Ganti dengan password WiFi kamu
// Pin Konfigurasi
#define DHTPIN D7
#define DHTTYPE DHT11
#define RELAY_PIN D3
#define SDA_PIN D2
#define SCL_PIN D1
// Threshold Suhu dan Kelembapan
#define TEMP_THRESHOLD 30
#define HUMIDITY_THRESHOLD 90
DHT dht(DHTPIN, DHTTYPE);
LiquidCrystal_I2C lcd(0x27, 16, 2);
BlynkTimer timer;
bool fanState = false;
void sendSensorData() {
float suhu = dht.readTemperature();
float kelembapan = dht.readHumidity();
// Validasi pembacaan sensor
if (isnan(suhu) || isnan(kelembapan)) {
Serial.println("Gagal membaca data dari DHT11!");
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Sensor Error!");
return;
}
// Tentukan kategori suhu
String kategoriSuhu = (suhu < 25) ? "Dingin" : (suhu >= TEMP_THRESHOLD) ? "Panas" : "Normal";
// Kirim data ke Blynk
Blynk.virtualWrite(V0, suhu); // Kirim suhu
Blynk.virtualWrite(V1, kelembapan); // Kirim kelembapan
Blynk.virtualWrite(V2, fanState); // Kirim status kipas
Serial.print("Suhu: ");
Serial.print(suhu);
Serial.print("°C, Kelembapan: ");
Serial.print(kelembapan);
Serial.print("%, Status: ");
Serial.print(kategoriSuhu);
Serial.print(", Kipas: ");
Serial.println(fanState ? "Nyala" : "Mati");
// Cek perubahan status kipas
bool newFanState = (suhu >= TEMP_THRESHOLD || kelembapan > HUMIDITY_THRESHOLD);
if (newFanState != fanState) {
fanState = newFanState;
Blynk.virtualWrite(V2, fanState); // Update status kipas
digitalWrite(RELAY_PIN, fanState ? HIGH : LOW);
}
// Update LCD
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("S:" + String(suhu) + "C");
lcd.setCursor(9, 0);
lcd.print("K:" + String(kelembapan) + "%");
lcd.setCursor(2, 1);
lcd.print((fanState) ? "Panas poll!" : "Normal ges");
lcd.backlight();
}
void setup() {
Serial.begin(9600);
Blynk.begin(BLYNK_AUTH_TOKEN, ssid, pass);
dht.begin();
lcd.begin();
lcd.setCursor(0, 0);
lcd.print("Connecting to");
lcd.setCursor(0, 1);
lcd.print("Blynk...");
delay(2000);
lcd.clear();
lcd.backlight();
pinMode(RELAY_PIN, OUTPUT);
digitalWrite(RELAY_PIN, LOW);
timer.setInterval(5000L, sendSensorData); // Kirim data setiap 5 detik
}
void loop() {
Blynk.run();
timer.run();
}
Hasil
Kode ini mengontrol kipas berdasarkan suhu dan kelembaban yang dibaca dari sensor DHT11, menampilkan informasi di LCD 16x2 I2C, serta mencetak status ke Serial Monitor. Awalnya, sistem diinisialisasi dengan menyiapkan komunikasi serial, sensor, dan LCD, lalu kipas dimatikan secara default. Dalam loop(), sensor membaca suhu dan kelembaban, kemudian menampilkan hasil di LCD dan Serial Monitor. Jika suhu melebihi 30°C atau kelembaban di atas 90%, kipas menyala dan backlight LCD aktif, dengan teks "Panas poll!" sebagai indikator; jika kondisi normal, kipas mati dan LCD tanpa backlight dengan teks "Normal ges". Jika sensor gagal membaca data, tampilan dan Serial Monitor menunjukkan error. Setiap 2 detik, sistem memperbarui data untuk kontrol yang responsif.
Video Tutorial
Untuk penjelasan lebih mendalam, tonton tutorial video berikut.
Penutup
Kalau ingin belajar lebih banyak tentang IoT, langsung kunjungi YouTube IQ+ dan temukan berbagai tutorial menarik lainnya.



Comments