From e3e654ec612e5759cbaba4133bf44f2a335e880c Mon Sep 17 00:00:00 2001 From: bimaputra Date: Tue, 5 Aug 2025 12:40:53 +0700 Subject: [PATCH] Upload files to "/" sistem pengurangan kelembapan menggunakan dehumidifier berbasis esp32 dengan integrasi LoRa --- ala1.ino | 100 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ alat2.ino | 80 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 180 insertions(+) create mode 100644 ala1.ino create mode 100644 alat2.ino diff --git a/ala1.ino b/ala1.ino new file mode 100644 index 0000000..688ebaf --- /dev/null +++ b/ala1.ino @@ -0,0 +1,100 @@ +#include +#include +#include +#include + +// Konfigurasi pin LoRa SX1278 +#define LORA_SCK 18 +#define LORA_MISO 19 +#define LORA_MOSI 23 +#define LORA_SS 5 +#define LORA_RST 14 +#define LORA_DIO0 2 + +// Inisialisasi LCD I2C (alamat 0x27, 16 kolom, 2 baris) +LiquidCrystal_I2C lcd(0x27, 16, 2); + +void setup() { + Serial.begin(115200); + + // Inisialisasi LCD + lcd.begin(); + lcd.backlight(); + lcd.setCursor(0, 0); + lcd.print("Inisialisasi..."); + + // Inisialisasi LoRa + SPI.begin(LORA_SCK, LORA_MISO, LORA_MOSI, LORA_SS); + LoRa.setPins(LORA_SS, LORA_RST, LORA_DIO0); + if (!LoRa.begin(433E6)) { + lcd.setCursor(0, 1); + lcd.print("LoRa Gagal"); + Serial.println("Gagal memulai LoRa"); + while (1); + } + + LoRa.setSyncWord(0xF3); + lcd.setCursor(0, 1); + lcd.print("LoRa OK "); + Serial.println("Receiver siap..."); + delay(2000); + lcd.clear(); +} + +void loop() { + int packetSize = LoRa.parsePacket(); + if (packetSize) { + String dataMasuk = ""; + while (LoRa.available()) { + dataMasuk += (char)LoRa.read(); + } + + int rssi = LoRa.packetRssi(); + String jarak = "Tidak diketahui"; + if (rssi >= -30) jarak = "Dekat"; + else if (rssi >= -100) jarak = "Normal"; + else if (rssi >= -150) jarak = "Jauh"; + else jarak = "Sangat Jauh"; + + // Parsing data (misal: "Temp:28.4C, Hum:65.1%") + String suhuStr = ""; + String humStr = ""; + + int indexTemp = dataMasuk.indexOf("Temp:"); + int indexHum = dataMasuk.indexOf("Hum:"); + + if (indexTemp != -1 && indexHum != -1) { + suhuStr = dataMasuk.substring(indexTemp + 5, dataMasuk.indexOf("C")); + humStr = dataMasuk.substring(indexHum + 4, dataMasuk.indexOf("%")); + } + + // Tampilkan di Serial Monitor + Serial.println("Data diterima: " + dataMasuk); + Serial.print("Suhu: "); + Serial.print(suhuStr); + Serial.println(" C"); + Serial.print("Kelembapan: "); + Serial.print(humStr); + Serial.println(" %"); + Serial.print("RSSI: "); + Serial.print(rssi); + Serial.print(" dBm, Perkiraan jarak: "); + Serial.println(jarak); + Serial.println("---------------------"); + + // Tampilkan di LCD + lcd.clear(); + lcd.setCursor(0, 0); + lcd.print("T:"); + lcd.print(suhuStr); + lcd.print((char)223); // Simbol derajat + lcd.print("C H:"); + lcd.print(humStr); + lcd.print("%"); + + lcd.setCursor(0, 1); + lcd.print("Jarak: "); + lcd.print(jarak); + lcd.print(" "); + } +} diff --git a/alat2.ino b/alat2.ino new file mode 100644 index 0000000..d9e9b27 --- /dev/null +++ b/alat2.ino @@ -0,0 +1,80 @@ +#include +#include +#include "DHT.h" + +// Konfigurasi Pin LoRa +#define LORA_SCK 18 +#define LORA_MISO 19 +#define LORA_MOSI 23 +#define LORA_SS 5 +#define LORA_RST 14 +#define LORA_DIO0 2 + +// DHT dan Relay +#define DHTPIN 4 +#define DHTTYPE DHT11 +#define RELAY1 25 +#define RELAY2 26 +DHT dht(DHTPIN, DHTTYPE); + +void setup() { + Serial.begin(115200); + dht.begin(); + + pinMode(RELAY1, OUTPUT); + pinMode(RELAY2, OUTPUT); + digitalWrite(RELAY1, HIGH); // OFF default + digitalWrite(RELAY2, HIGH); // OFF default + + SPI.begin(LORA_SCK, LORA_MISO, LORA_MOSI, LORA_SS); + LoRa.setPins(LORA_SS, LORA_RST, LORA_DIO0); + + if (!LoRa.begin(433E6)) { + Serial.println("LoRa Gagal"); + while (true); + } + + LoRa.setSyncWord(0xF3); + Serial.println("LoRa OK"); +} + +void loop() { + float suhu = dht.readTemperature(); + float hum = dht.readHumidity(); + + if (isnan(suhu) || isnan(hum)) { + Serial.println("Sensor Error!"); + delay(3000); + return; + } + + // Kendali relay berdasarkan kelembapan + String statusRelay; + if (hum < 40) { + digitalWrite(RELAY1, LOW); // ON + digitalWrite(RELAY2, HIGH); // OFF + statusRelay = "R1"; + } else if (hum > 60) { + digitalWrite(RELAY1, LOW); // ON + digitalWrite(RELAY2, LOW); // ON + statusRelay = "R1R2"; + } else { + digitalWrite(RELAY1, HIGH); // OFF + digitalWrite(RELAY2, HIGH); // OFF + statusRelay = "OFF"; + } + + // Menyusun pesan dengan suhu dan kelembapan + String message = "Temp:" + String(suhu, 1) + "C, Hum:" + String(hum, 1) + "%"; + + // Kirim data melalui LoRa + LoRa.beginPacket(); + LoRa.print(message); + LoRa.endPacket(); + + // Tampilkan di Serial Monitor + Serial.println("Data dikirim: " + message); + Serial.println("Relay Status: " + statusRelay); + + delay(5000); +}