top of page

Kontrol FAN dengan DHT11


Selamat datang di website Cosmo!

di artikel ini, kita akan belajar mengontrol FAN berdasarkan suhu dan kelembapan dengan DHT11.


Skema Rangkaian



wiring

Penjelasan Rangkaian

  1. 5V  Kaki (+) DHT11, LCD & Relay

  2. GND  Kaki (-) DHT11, LCD & Relay

  3. D7  Data DHT11

  4. D3  Data Relay

  5. D2  SDA LCD

  6. D1  SCL LCD

  7. Adaptor (+)  COM Relay

  8. NO Relay  Kaki (+) FAN

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


Bantu tingkatkan
kualitas website ini!

Dengan memberi masukan dan/atau pertanyaan

Jika berkenan, silakan masukan e-mail Anda untuk kontak lebih lanjut

Pilihan
Masukan
Pertanyaan
Lainnya
bottom of page