Upload files to "/"

sistem pengurangan kelembapan menggunakan dehumidifier berbasis esp32 dengan integrasi LoRa
This commit is contained in:
bimaputra 2025-08-05 12:40:53 +07:00
commit e3e654ec61
2 changed files with 180 additions and 0 deletions

100
ala1.ino Normal file
View File

@ -0,0 +1,100 @@
#include <SPI.h>
#include <LoRa.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
// 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(" ");
}
}

80
alat2.ino Normal file
View File

@ -0,0 +1,80 @@
#include <SPI.h>
#include <LoRa.h>
#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);
}