#define BLYNK_TEMPLATE_ID "TEMPLATE_ID"
#define BLYNK_TEMPLATE_NAME "AkilliKompost"
#define BLYNK_AUTH_TOKEN "TOKEN"
#include <WiFi.h>
#include <BlynkSimpleEsp32.h>
#include <OneWire.h>
#include <DallasTemperature.h>
char ssid[] = "Wokwi-GUEST"; // Wokwi sanal Wi-Fi ağı
char pass[] = ""; // Wokwi sanal Wi-Fi şifresi boş bırakılır
// --- FİZİKSEL HARİTAYA GÖRE GÜNCELLENEN PİNLER ---
#define MOISTURE_PIN 35
#define GAS_PIN 34
#define PH_PIN 32
#define TRIG_PIN 5
#define ECHO_PIN 18
#define RELAY_PIN 26
#define ONE_WIRE_BUS 4
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
BlynkTimer timer;
float readPH() {
int raw = analogRead(PH_PIN);
float voltage = raw * (3.3 / 4095.0);
float ph = 7 + ((2.5 - voltage) / 0.18);
return ph;
}
float readDistance() {
digitalWrite(TRIG_PIN, LOW);
delayMicroseconds(2);
digitalWrite(TRIG_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG_PIN, LOW);
long duration = pulseIn(ECHO_PIN, HIGH, 30000);
float distance = duration * 0.034 / 2.0;
return distance;
}
void sendData() {
int moisture = analogRead(MOISTURE_PIN);
int gas = analogRead(GAS_PIN);
sensors.requestTemperatures();
float temperature = sensors.getTempCByIndex(0);
float phValue = readPH();
float distance = readDistance();
float tankHeight = 100.0;
float waterLevel = tankHeight - distance;
if (waterLevel < 0) waterLevel = 0;
Serial.println("------");
Serial.print("Nem Değeri: "); Serial.println(moisture);
Serial.print("Gaz Değeri: "); Serial.println(gas);
Serial.print("Sıcaklık: "); Serial.println(temperature);
Serial.print("pH: "); Serial.println(phValue);
Serial.print("Su Seviyesi: "); Serial.println(waterLevel);
Blynk.virtualWrite(V0, temperature);
Blynk.virtualWrite(V1, moisture);
Blynk.virtualWrite(V2, phValue);
Blynk.virtualWrite(V3, gas);
Blynk.virtualWrite(V4, waterLevel);
// --- MOTOR YANMA KORUMASI VE OTONOM KARAR MANTIĞI EKLENDİ ---
// Eğer toprak KURU (2000'den büyük) VE depoda SU VARSA (5 cm'den büyükse) çalıştır.
if (moisture > 2000 && waterLevel > 5.0) {
digitalWrite(RELAY_PIN, LOW); // Aktif düşük röle çalıştırır
Serial.println("POMPA ACIK: Toprak kuru ve su var!");
} else {
digitalWrite(RELAY_PIN, HIGH); // Kapat
Serial.println("POMPA KAPALI: Toprak ıslak veya su deposu boş!");
}
// pH Uyarıları
if (phValue < 5.5) {
Blynk.logEvent("ph_alert", "Kompost pH degeri dusuk!");
}
if (phValue > 8.5) {
Blynk.logEvent("ph_alert", "Kompost pH degeri yuksek!");
}
}
void setup() {
Serial.begin(115200);
pinMode(RELAY_PIN, OUTPUT);
digitalWrite(RELAY_PIN, HIGH); // Başlangıçta motoru kapalı tut
pinMode(TRIG_PIN, OUTPUT);
pinMode(ECHO_PIN, INPUT);
sensors.begin();
Blynk.begin(BLYNK_AUTH_TOKEN, ssid, pass);
timer.setInterval(2000L, sendData); // Her 2 saniyede bir verileri oku ve yolla
Serial.println("Sistem Hazir");
}
void loop() {
Blynk.run();
timer.run();
}