Upload files to "/"
This commit is contained in:
parent
f2511401a5
commit
039ed9295b
|
@ -0,0 +1,141 @@
|
|||
#include <SPI.h>
|
||||
#include <LoRa.h>
|
||||
#include <DHT.h>
|
||||
|
||||
#define LORA_SS 5
|
||||
#define LORA_RST 14
|
||||
#define LORA_DIO0 2
|
||||
#define RELAY_PIN 27
|
||||
#define FIRE_SENSOR_PIN 33
|
||||
#define MQ2_SENSOR_PIN 26
|
||||
#define DHTPIN 4
|
||||
#define DHTTYPE DHT11
|
||||
#define SOIL_SENSOR_PIN 25
|
||||
|
||||
DHT dht(DHTPIN, DHTTYPE);
|
||||
|
||||
bool pengirimanAktif = true;
|
||||
bool relayAktifKarenaKebakaran = false;
|
||||
int lastRelayState = LOW;
|
||||
|
||||
unsigned long lastSendTime = 0;
|
||||
const unsigned long interval = 1000;
|
||||
|
||||
void setup() {
|
||||
delay(3000);
|
||||
Serial.begin(115200);
|
||||
while (!Serial)
|
||||
;
|
||||
Serial.println("Memulai setup...");
|
||||
|
||||
pinMode(RELAY_PIN, OUTPUT);
|
||||
digitalWrite(RELAY_PIN, LOW);
|
||||
Serial.println("Relay diset LOW");
|
||||
|
||||
pinMode(FIRE_SENSOR_PIN, INPUT);
|
||||
pinMode(MQ2_SENSOR_PIN, INPUT);
|
||||
dht.begin();
|
||||
|
||||
LoRa.setPins(LORA_SS, LORA_RST, LORA_DIO0);
|
||||
delay(1000);
|
||||
if (!LoRa.begin(433E6)) {
|
||||
Serial.println("Gagal memulai LoRa");
|
||||
while (1)
|
||||
;
|
||||
}
|
||||
Serial.println("LoRa siap mengirim");
|
||||
}
|
||||
|
||||
void loop() {
|
||||
if (Serial.available()) {
|
||||
String cmd = Serial.readStringUntil('\n');
|
||||
cmd.trim();
|
||||
|
||||
if (cmd == "pause") {
|
||||
pengirimanAktif = false;
|
||||
Serial.println("Pengiriman LoRa dihentikan");
|
||||
} else if (cmd == "resume") {
|
||||
pengirimanAktif = true;
|
||||
Serial.println("Pengiriman LoRa dilanjutkan");
|
||||
}
|
||||
}
|
||||
|
||||
int fireDigital = digitalRead(FIRE_SENSOR_PIN);
|
||||
int asapDigital = digitalRead(MQ2_SENSOR_PIN);
|
||||
float suhuC = dht.readTemperature();
|
||||
int soilRaw = analogRead(SOIL_SENSOR_PIN);
|
||||
int kelembabanTanah = map(soilRaw, 1949, 4095, 100, 0);
|
||||
kelembabanTanah = constrain(kelembabanTanah, 0, 100);
|
||||
|
||||
String statusApi = (fireDigital == LOW) ? "iya" : "tidak";
|
||||
String statusAsap = (asapDigital == LOW) ? "iya" : "tidak";
|
||||
bool suhuTinggi = suhuC > 40.0;
|
||||
|
||||
String statusKebakaran = "tidak";
|
||||
if (fireDigital == LOW && asapDigital == LOW && suhuTinggi) {
|
||||
statusKebakaran = "iya";
|
||||
} else {
|
||||
statusKebakaran = "tidak";
|
||||
}
|
||||
|
||||
Serial.println("Sensor:");
|
||||
Serial.println(" - Api: " + String(fireDigital == LOW ? "iya" : "tidak"));
|
||||
Serial.println(" - Asap: " + String(asapDigital == LOW ? "iya" : "tidak"));
|
||||
Serial.println(" - Suhu: " + String(suhuC, 1) + "C");
|
||||
Serial.println(" - Tanah: " + String(kelembabanTanah) + "%");
|
||||
|
||||
if (statusKebakaran == "iya") {
|
||||
digitalWrite(RELAY_PIN, HIGH);
|
||||
relayAktifKarenaKebakaran = true;
|
||||
Serial.println("Kebakaran terdeteksi! Relay ON");
|
||||
} else if (relayAktifKarenaKebakaran && fireDigital == HIGH) {
|
||||
Serial.println("Api padam");
|
||||
delay(300);
|
||||
digitalWrite(RELAY_PIN, LOW);
|
||||
relayAktifKarenaKebakaran = false;
|
||||
Serial.println("Relay dimatikan otomatis setelah api padam");
|
||||
} else {
|
||||
digitalWrite(RELAY_PIN, LOW);
|
||||
relayAktifKarenaKebakaran = false;
|
||||
Serial.println("Kondisi aman - Relay OFF");
|
||||
}
|
||||
|
||||
if (millis() - lastSendTime > interval) {
|
||||
lastSendTime = millis();
|
||||
|
||||
String apiStr = (fireDigital == LOW ? "iya" : "tidak");
|
||||
String asapStr = (asapDigital == LOW ? "iya" : "tidak");
|
||||
String suhuStr = isnan(suhuC) ? "nanC" : String(suhuC, 1) + "C";
|
||||
String tanahStr = String(kelembabanTanah) + "%";
|
||||
String relayStr = (digitalRead(RELAY_PIN) ? "ON" : "OFF");
|
||||
|
||||
String data = "api:" + apiStr + ",asap:" + asapStr + ",suhu:" + suhuStr + ",tanah:" + tanahStr + ",relay:" + relayStr;
|
||||
|
||||
String statusGabungan = "Status: " + statusApi + " - Relay " + relayStr;
|
||||
|
||||
if (pengirimanAktif) {
|
||||
kirimLoRa(data);
|
||||
delay(1000),
|
||||
kirimLoRa(statusGabungan);
|
||||
delay(1000);
|
||||
Serial.println("Data dikirim:\n" + data);
|
||||
Serial.println("Status dikirim:\n" + statusGabungan);
|
||||
}
|
||||
}
|
||||
|
||||
if (pengirimanAktif) {
|
||||
kirimLoRa("kebakaran:" + statusKebakaran);
|
||||
delay(300);
|
||||
Serial.println("Status kebakaran dikirim: kebakaran:" + statusKebakaran);
|
||||
}
|
||||
|
||||
delay(400);
|
||||
}
|
||||
|
||||
void kirimLoRa(String pesan) {
|
||||
Serial.println("LoRa kirim:\n" + pesan);
|
||||
LoRa.beginPacket();
|
||||
LoRa.print(pesan);
|
||||
LoRa.endPacket();
|
||||
delay(100);
|
||||
}
|
Loading…
Reference in New Issue