From ec9e68f1dcb6ae37e890a6e917eb1cb1d5501b8d Mon Sep 17 00:00:00 2001 From: Izza_ismi_aisyiyah Date: Tue, 16 Jul 2024 12:59:08 +0700 Subject: [PATCH] Upload files to "/" --- E32210222_Izza_Ismi_Aisyiyah_TKK.ino | 222 +++++++++++++++++++++++++++ 1 file changed, 222 insertions(+) create mode 100644 E32210222_Izza_Ismi_Aisyiyah_TKK.ino diff --git a/E32210222_Izza_Ismi_Aisyiyah_TKK.ino b/E32210222_Izza_Ismi_Aisyiyah_TKK.ino new file mode 100644 index 0000000..8a04dff --- /dev/null +++ b/E32210222_Izza_Ismi_Aisyiyah_TKK.ino @@ -0,0 +1,222 @@ +#define BLYNK_AUTH_TOKEN "VC1vughjM7vsF50JrZ52btxtE35SmEdU" +#define BLYNK_TEMPLATE_ID "TMPL6nUJWUBf2" +#define BLYNK_TEMPLATE_NAME "Pemantauan Kandang" + +#include // Library untuk koneksi WiFi +#include +#include +#include "DHTesp.h" +#include + +#define DHTPIN 2 // Pin data DHT11 terhubung ke pin GPIO2 (D4) pada ESP8266 +#define DHTTYPE DHTesp::DHT11 // Tipe sensor DHT11 + +DHTesp dht; +LiquidCrystal_I2C lcd(0x27, 16, 2); // Alamat I2C LCD: 0x27, Jumlah kolom: 16, Jumlah baris: 2 + +const int Sensor = A0; +const int BuzzerPin = 14; // Pin GPIO untuk mengendalikan buzzer +const int RelayPin = 12; // Pin GPIO untuk mengendalikan relay +const int RelayPinKipas = 13; // Pin GPIO untuk mengendalikan relay kipas +float voltage = 5.0; // Tegangan referensi ADC (Volt) +float ppmThreshold = 20; // Ambang batas ppm +float temperatureThreshold = 30; // Ambang batas suhu + +// Pengaturan WiFi +char ssid[] = "Izza"; +char password[] = "izzaismi123"; + +// Token Blynk +char auth[] = BLYNK_AUTH_TOKEN; + +bool manualOffBuzzer = false; // Status manual off untuk buzzer +bool manualOffRelay = false; // Status manual off untuk relay +bool manualOffRelayKipas = false; // Status manual off untuk relay kipas +bool manualControlKipas = false; // Kontrol manual dari Blynk untuk kipas +bool manualControlRelay = false; // Kontrol manual dari Blynk untuk relay + + + +void setup() { + Serial.begin(115200); + Serial.println("Sistem Monitor Udara Mulai..."); + + lcd.init(); // Inisialisasi LCD + lcd.backlight(); // Nyalakan backlight LCD + + pinMode(A0, INPUT); + pinMode(BuzzerPin, OUTPUT); // Atur pin buzzer sebagai output + pinMode(RelayPin, OUTPUT); // Atur pin relay sebagai output + pinMode(RelayPinKipas, OUTPUT); // Atur pin relay kipas sebagai output + + dht.setup(DHTPIN, DHTTYPE); + // Menghubungkan ke jaringan WiFi + Serial.println("Menghubungkan ke WiFi..."); + lcd.clear(); + lcd.setCursor(0, 0); + lcd.print("Menghubungkan"); + lcd.setCursor(0, 1); + lcd.print("ke WiFi..."); + + WiFi.begin(ssid, password); + + while (WiFi.status() != WL_CONNECTED) { + delay(1000); + Serial.println("Mencoba terhubung ke WiFi..."); + lcd.clear(); + lcd.setCursor(0, 0); + lcd.print("Mencoba"); + lcd.setCursor(0, 1); + lcd.print("terhubung..."); + } + + Serial.println("Terhubung ke WiFi!"); + lcd.clear(); + lcd.setCursor(0, 0); + lcd.print("Terhubung ke"); + lcd.setCursor(0, 1); + lcd.print("WiFi!"); + + // Inisialisasi koneksi Blynk + Blynk.begin(auth, ssid, password, "blynk.cloud", 80); + + + // Tambahkan penundaan untuk memberikan waktu sensor DHT untuk inisialisasi + delay(5000); // 5 detik +} + +void loop() { + Blynk.run(); + + delay(dht.getMinimumSamplingPeriod()); + + float temperature = dht.getTemperature(); + + // Coba membaca lagi jika pembacaan awal gagal + if (isnan(temperature)) { + Serial.println("Failed to read from DHT sensor, retrying..."); + delay(2000); // Tambahkan penundaan sebelum mencoba membaca lagi + temperature = dht.getTemperature(); + } + + if (isnan(temperature)) { + Serial.println("Failed to read from DHT sensor!"); + lcd.clear(); + lcd.setCursor(0,0); + lcd.print("Failed to read"); + lcd.setCursor(0,1); + lcd.print("from DHT sensor!"); + return; + } + + Blynk.virtualWrite(V0, temperature); + + lcd.clear(); + lcd.setCursor(0,0); + lcd.print("Suhu: "); + lcd.print(temperature); + lcd.print("C"); + + if (temperature > temperatureThreshold && !manualControlKipas) { + //Blynk.email + Blynk.logEvent("notifikasi","Suhu di atas 30 Derajat Celcius"); + lcd.setCursor(0, 1); + lcd.print("Status: Panas"); + if (!manualOffRelayKipas) { + digitalWrite(RelayPinKipas, HIGH); // Nyalakan kipas + } + } else { + lcd.setCursor(0, 1); + lcd.print("Status: Normal"); + if (!manualControlKipas) { + digitalWrite(RelayPinKipas, LOW); // Matikan kipas + } + } + + delay(2000); + + int dataSensor = analogRead(Sensor); + float voltageValue = (dataSensor * voltage) / 1023.0; // Mengonversi nilai sensor menjadi tegangan (Volt) + + // Menghitung konsentrasi partikulat dalam ppm + float ppmValue = voltageValue * 10.0; // Mengonversi tegangan menjadi mV + // Disesuaikan dengan karakteristik sensor Anda (memerlukan kalibrasi) + + Blynk.virtualWrite(V2, ppmValue); + + lcd.clear(); // Membersihkan layar untuk tampilan selanjutnya + lcd.setCursor(0, 0); // Posisi kursor LCD di baris 1 kolom 1 + lcd.print("PPM: "); + lcd.print(ppmValue); // Tampilkan nilai ppm + + // Memeriksa jika konsentrasi melebihi ambang batas + lcd.setCursor(0, 1); // Posisi kursor LCD di baris 2 kolom 1 + if (ppmValue > ppmThreshold && !manualControlRelay) { + //Blynk.email + Blynk.logEvent("notifikasi","Gas Amonia di atas 20 ppm"); + lcd.print("Udara:Tidak Baik"); + if (!manualOffRelay) { + digitalWrite(RelayPin, HIGH); // Nyalakan relay + } + if (!manualOffBuzzer) { + controlBuzzer(true); // Panggil fungsi untuk mengontrol buzzer (aktifkan) + } + } else { + lcd.print("Udara:Baik"); + if (!manualControlRelay) { + digitalWrite(RelayPin, LOW); // Matikan relay + } + controlBuzzer(false); // Panggil fungsi untuk mengontrol buzzer (matikan) + } + + delay(2000); +} + +void controlBuzzer(bool state) { + if (state) { + tone(BuzzerPin, 2000); // Menghasilkan bunyi buzzer pada frekuensi 2000Hz + } else { + noTone(BuzzerPin); // Pastikan bunyi buzzer dimatikan sepenuhnya + } +} + +// Fungsi untuk mematikan buzzer secara manual +void manualOffBuzzerFunction() { + manualOffBuzzer = true; + controlBuzzer(false); +} + +// Fungsi untuk mematikan relay secara manual +void manualOffRelayFunction() { + manualOffRelay = true; + digitalWrite(RelayPin, LOW); +} + +// Fungsi untuk mematikan relay kipas secara manual +void manualOffRelayKipasFunction() { + manualOffRelayKipas = true; + digitalWrite(RelayPinKipas, LOW); +} + +// Fungsi untuk menghidupkan kembali relay dan buzzer secara manual +void manualOnFunctions() { + manualOffBuzzer = false; + manualOffRelay = false; + manualOffRelayKipas = false; +} + +// Blynk virtual write functions +BLYNK_WRITE(V1) { + manualControlKipas = param.asInt(); + if (manualControlKipas) { + digitalWrite(RelayPinKipas, LOW); // Matikan kipas jika kontrol manual aktif + } +} + +BLYNK_WRITE(V3) { + manualControlRelay = param.asInt(); + if (manualControlRelay) { + digitalWrite(RelayPin, LOW); // Matikan relay jika kontrol manual aktif + } +} +