Akıllı su pompası kontrol sistemleri, su israfını önlerken aynı zamanda manuel müdahale ihtiyacını ortadan kaldıran yenilikçi çözümler sunar. Bu makalede, ESP32 mikrodenetleyici ve Firebase platformunu kullanarak uzaktan kontrol edilebilir ve otomatik çalışan bir su pompası sistemi inşa etmeyi adım adım öğreneceksiniz.
Günümüz dünyasında kaynakların verimli kullanımı, özellikle de su gibi hayati öneme sahip bir kaynağın yönetimi, giderek daha kritik hale gelmektedir. Akıllı su pompası kontrol sistemleri, geleneksel manuel sulama veya su transferi yöntemlerine modern ve otomasyon odaklı bir alternatif sunar. Peki, tam olarak nedir bu sistemler ve neden bu kadar önemlidir? Temel olarak, bu sistemler sensörler aracılığıyla çevresel verileri (toprak nemi, su seviyesi gibi) toplar, bu verileri bir mikrodenetleyici (bizim durumumuzda ESP32) ile işler ve internet (IoT) üzerinden bir bulut platformuna (Firebase) aktarır. Kullanıcılar, mobil uygulama veya web arayüzü üzerinden uzaktan pompayı kontrol edebilir veya sistemin tamamen otomatik çalışmasını sağlayabilirler. Böylece, gereksiz su kullanımının önüne geçilir ve enerji maliyetlerinden tasarruf sağlanır.
Bu tür bir sistemin önemi birçok farklı senaryoda ortaya çıkar. Örneğin, büyük bir bahçeye veya tarlaya sahip bir çiftçi düşünün. Manuel sulama hem çok zaman alıcıdır hem de hangi bölgelerin ne kadar suya ihtiyaç duyduğunu doğru bir şekilde belirlemek zordur. Akıllı bir sulama sistemi, toprak nem sensörleri sayesinde bitkilerin gerçek ihtiyacına göre su sağlayarak su israfını önemli ölçüde azaltır. Ayrıca, uzaktan kontrol yeteneği sayesinde çiftçi tarladan uzakta olsa bile sulama işlemlerini başlatabilir, durdurabilir veya programlayabilir. Bu, iş gücü maliyetlerini düşürürken verimliliği artırır.
Bir başka vaka analizi olarak, evdeki su deposu yönetimini ele alalım. Eğer su seviyesi belli bir limitin altına düştüğünde pompanın otomatik olarak devreye girmesi ve depoyu doldurması gerekiyorsa, akıllı bir sistem bu ihtiyacı kusursuzca karşılar. Su seviye sensörleri ile sürekli izleme yapılır ve Firebase üzerinden kullanıcılara anlık bildirimler gönderilebilir. Bu, hem su kesintilerini önler hem de pompanın kuru çalışmasını engelleyerek ömrünü uzatır. Benzer şekilde, sel riskinin olduğu bölgelerde, belirli bir su seviyesi aşıldığında tahliye pompalarını otomatik olarak devreye sokan sistemler, olası zararları en aza indirme potansiyeline sahiptir. Kısacası, akıllı su pompası kontrol sistemleri, su yönetimine esneklik, verimlilik ve kullanıcı dostu bir yaklaşım getirerek hem çevresel sürdürülebilirliğe katkıda bulunur hem de maliyet avantajları sunar.
Neden ESP32 ve Firebase Kombinasyonunu Tercih Etmelisiniz?
Bu projede neden özellikle ESP32 ve Firebase ikilisini seçtiğimize dair birkaç önemli neden bulunmaktadır. ESP32, dahili Wi-Fi ve Bluetooth özellikleriyle birlikte gelen güçlü, düşük maliyetli bir mikrodenetleyicidir. Bu özellikleri sayesinde internete kolayca bağlanabilir ve sensör verilerini buluta aktarabilir. Güçlü işlem kapasitesi ve geniş GPIO pinleri, birden fazla sensör ve aktüatörü yönetmek için yeterli esnekliği sunar. Öte yandan Firebase, Google tarafından geliştirilen, gerçek zamanlı veritabanı, kimlik doğrulama, bulut işlevleri ve barındırma gibi birçok özelliği bir arada sunan bir mobil ve web uygulama geliştirme platformudur. ESP32’den gelen verileri anlık olarak Firebase Realtime Database’e yazabilir, aynı zamanda Firebase üzerinden gönderilen komutlarla pompayı uzaktan kontrol edebiliriz. Bu kombinasyon, hızlı prototipleme, güvenilir veri akışı ve kolay ölçeklenebilirlik sağlar, bu da projemiz için ideal bir seçimdir.
Temel Bileşenler: ESP32, Firebase ve Sensörler Nasıl Çalışır?
Akıllı su pompası kontrol sistemimizi oluştururken kullanacağımız temel bileşenleri ve her birinin sistemdeki rolünü anlamak oldukça önemlidir. Bu bileşenler, sistemin beyni, veri otoyolu ve duyu organları olarak görev yaparlar. Doğru bileşen seçimi ve bunların işlevlerini kavramak, projenin başarısı için ilk adımdır.
ESP32: Beynimiz ve İletişim Merkezimiz
ESP32, projemizin kalbinde yer alan, Wi-Fi ve Bluetooth özelliklerine sahip, düşük maliyetli ama oldukça güçlü bir mikrodenetleyicidir. Arduino IDE ile programlanabilir olması, geniş bir geliştirici kitlesine hitap etmesini sağlar ve bol miktarda kaynak ve kütüphane sunar. ESP32’nin temel görevleri şunlardır:
- Sensör Veri Toplama: Toprak nem sensörleri, su seviye sensörleri gibi çeşitli sensörlerden gelen analog veya dijital verileri okur ve işler.
- İnternet Bağlantısı: Dahili Wi-Fi modülü sayesinde yerel ağımıza bağlanır ve internet üzerinden Firebase ile iletişim kurar.
- Mantık Yürütme: Toplanan verilere ve Firebase’den gelen komutlara göre pompanın ne zaman açılıp kapanacağına karar veren programlama mantığını yürütür.
- Aktüatör Kontrolü: Röle modülü aracılığıyla su pompasını açıp kapatır.
- Veri Gönderme/Alma: Toplanan sensör verilerini Firebase Realtime Database’e gönderir ve Firebase’den gelen kontrol komutlarını veya ayarları alır.
ESP32’nin bu çok yönlülüğü, onu IoT projeleri için mükemmel bir seçim haline getirir. Hem sensörlerden veri alabilir hem de kablosuz olarak bu verileri bulut platformuna iletebilir.
Firebase: Gerçek Zamanlı Veri ve Uzaktan Kontrol Platformumuz
Firebase, Google’ın mobil ve web uygulamaları için geliştirilmiş kapsamlı bir platformudur. Projemizde özellikle Firebase Realtime Database özelliğini kullanacağız. Firebase’in sunduğu avantajlar:
- Gerçek Zamanlı Veritabanı: Sensör verileri anlık olarak veritabanına yazılır ve kullanıcı arayüzleri bu değişiklikleri eş zamanlı olarak algılayabilir. Bu, su pompası durumu gibi kritik bilgilerin her zaman güncel kalmasını sağlar.
- Kolay Entegrasyon: ESP32 için mevcut Firebase kütüphaneleri sayesinde mikrodenetleyici ile bulut arasında veri alışverişi oldukça basittir.
- Uzaktan Kontrol: Firebase veritabanına bir kontrol komutu (örneğin, “pompa açık”) yazıldığında, ESP32 bu değişikliği algılar ve pompayı açar. Bu, dünyanın herhangi bir yerinden sisteminizi kontrol etmenizi sağlar.
- Kimlik Doğrulama: Firebase Authentication ile sisteminize güvenli erişim sağlayabilir, sadece yetkili kişilerin pompayı kontrol etmesine izin verebilirsiniz.
- Ölçeklenebilirlik: Firebase altyapısı, projeniz büyüdükçe veya daha fazla cihaz ekledikçe kolayca ölçeklenebilir.
Firebase, sunduğu zengin özellikler ve kullanım kolaylığı ile projemizin bulut tabanlı altyapısını oluşturmak için ideal bir çözümdür. Ayrıca, ücretsiz başlangıç planı (Spark Plan) küçük projeler için oldukça cömerttir.
Sensörler ve Aktüatörler: Sistemimizin Gözleri ve Kolları
Sistemimizin çevre ile etkileşimini sağlayan bileşenlerdir.
- Toprak Nem Sensörü (Örn: Capacitive Soil Moisture Sensor): Bitkilerin bulunduğu toprağın nem seviyesini ölçer. Direnç tabanlı sensörler yerine kapasitif sensörler tercih edilmelidir, çünkü paslanma sorunları daha azdır ve daha uzun ömürlüdürler. Toprak nemi belirli bir eşiğin altına düştüğünde pompanın otomatik olarak çalışmasını tetikleyebiliriz.
- Su Seviye Sensörü (Örn: Ultrasonik HC-SR04 veya Şamandıralı Sensör): Su deposundaki su seviyesini izler. Ultrasonik sensörler temassız ölçüm yaparken, şamandıralı sensörler daha basit bir “açık/kapalı” bilgisi sağlar. Bu sensör, deponun boşalmasını veya taşmasını engellemek için kritik öneme sahiptir.
- Röle Modülü: ESP32 gibi düşük voltajlı bir mikrodenetleyicinin yüksek voltajlı (genellikle 220V AC) bir su pompasını güvenli bir şekilde açıp kapatmasını sağlayan bir elektronik anahtardır. Röle modülleri, mikrodenetleyici ile pompa arasına bir izolasyon katmanı koyarak güvenlik sağlar. Genellikle 1 kanallı veya 2 kanallı 5V röle modülleri kullanılır.
- Su Pompası: Temel görevini yerine getirecek olan cihazdır. Kullanım amacına göre (bahçe sulama, depo doldurma vb.) uygun güçte ve tipte bir pompa seçilmelidir. Güvenlik nedeniyle, pompa ve röle arasındaki bağlantının doğru ve yalıtılmış olduğundan emin olunmalıdır.
Bu bileşenlerin entegrasyonu, sistemin hem verileri doğru bir şekilde toplamasına hem de bu verilere göre fiziksel dünyada eylemler gerçekleştirmesine olanak tanır. Her bir bileşenin doğru seçimi ve bağlantısı, projenin istikrarlı ve güvenli çalışması için hayati önem taşır.
Adım Adım Kurulum: Donanım Bağlantıları Nasıl Yapılır?
Şimdiye kadar projemizin neden önemli olduğunu ve hangi bileşenlerden oluştuğunu anladık. Bu bölümde, tüm bu bileşenleri fiziksel olarak bir araya getirme sürecine odaklanacağız. Donanım bağlantıları, sistemin doğru bir şekilde çalışabilmesi için büyük önem taşır. Yanlış yapılan bir bağlantı, bileşenlere zarar verebilir veya sistemin hiç çalışmamasına neden olabilir. Bu nedenle her adımı dikkatlice takip etmek kritik bir adımdır.
Gerekli Malzemeler Listesi
Projenizi başlatmadan önce ihtiyacınız olacak temel donanım bileşenlerinin bir listesini yapalım. Bu liste, alışveriş yaparken size yol gösterecektir:
- ESP32 Geliştirme Kartı: (Örn: ESP32 DEVKIT V1 veya ESP32 Wemos D1 Mini) – Projemizin işlemcisi ve iletişim modülü.
- 1 Kanallı Röle Modülü: (5V veya 3.3V uyumlu) – Su pompasını açıp kapatmak için.
- Su Pompası: (12V DC dalgıç pompa veya uygun bir AC pompa ve buna uygun röle) – Su transferi yapacak cihaz.
- Harici Güç Kaynağı: (12V DC, pompanızın amper ihtiyacına göre) – Pompanızı beslemek için.
- Toprak Nem Sensörü: (Capacitive Soil Moisture Sensor) – Toprak nemini ölçmek için.
- Su Seviye Sensörü: (Ultrasonik HC-SR04 veya Şamandıralı Sensör) – Su seviyesini kontrol etmek için.
- Breadboard: Bağlantıları geçici olarak yapmak için.
- Jumper Kablolar: (Erkek-erkek, erkek-dişi, dişi-dişi) – Bileşenleri birbirine bağlamak için.
- USB Kablosu: ESP32’yi bilgisayarınıza bağlamak ve programlamak için (Type-C veya Micro USB, ESP32 modeline göre).
- İsteğe Bağlı: Su hortumu, bağlantı parçaları, su deposu.
Bu bileşenleri temin ettikten sonra, bağlantı şemasına geçebiliriz.
Donanım Bağlantı Şeması ve Adımları
Aşağıdaki tablo, temel bağlantıları özetlemektedir. Karmaşık bir şema çizmek yerine, her bir bileşenin ESP32’ye nasıl bağlanacağını açıklayalım.
| Bileşen | ESP32 Bağlantısı | Açıklama |
|---|---|---|
| Röle Modülü |
|
Röle modülünün VCC pinini ESP32’nin 3.3V çıkışına veya harici bir 5V güç kaynağına (eğer röle 5V ile çalışıyorsa ve ESP32’den yeterli akım sağlanamıyorsa) bağlayın. GND pinini ESP32 GND’ye bağlayın. IN pinini ESP32’deki herhangi bir dijital GPIO pinine (örneğin GPIO23) bağlayın. Pompanın güç kablosunu rölenin normalde açık (NO) ve ortak (COM) pinlerine bağlayın. Bu, röle tetiklendiğinde pompanın çalışmasını sağlar. Röle ve pompa arasındaki bağlantıda güvenlik önlemlerine dikkat edin, özellikle AC pompa kullanılıyorsa. |
| Toprak Nem Sensörü |
|
Kapasitif toprak nem sensörünün VCC pinini ESP32’nin 3.3V çıkışına, GND pinini ESP32’nin GND’sine bağlayın. Analog çıkış pinini (AO) ESP32’nin analog giriş pinlerinden birine (örneğin GPIO36) bağlayın. Bu pin, toprak nemindeki değişimi analog değerler olarak okuyacaktır. Sensörü toprağa yerleştirirken elektronik kısmının ıslanmamasına dikkat edin. |
| Ultrasonik Su Seviye Sensörü (HC-SR04) |
|
HC-SR04 sensörünün VCC ve GND pinlerini ESP32’nin 3.3V ve GND pinlerine bağlayın. Trig (tetikleyici) pinini bir dijital GPIO’ya (örneğin GPIO25), Echo (yankı) pinini ise başka bir dijital GPIO’ya (örneğin GPIO26) bağlayın. Bu sensör, ses dalgaları yayarak ve geri dönüş süresini ölçerek mesafeyi, dolayısıyla su seviyesini hesaplar. Unutmayın: HC-SR04 genellikle 5V ile çalışır. ESP32’ye doğrudan bağlarken Echo pininden gelen 5V sinyali 3.3V’a düşürmek için bir gerilim bölücü (voltage divider) kullanmanız GEREKİR. Aksi takdirde ESP32’ye zarar verebilirsiniz. Eğer 5V’luk bir ESP32 kullanmıyorsanız bu adıma dikkat edin. |
| Su Pompası |
|
Su pompanızın pozitif (+) ucunu harici güç kaynağının pozitif (+) ucuna bağlayın. Pompanızın negatif (-) ucunu röle modülünün “Normalde Açık” (NO) pinine bağlayın. Harici güç kaynağınızın negatif (-) ucunu ise röle modülünün “Ortak” (COM) pinine bağlayın. Bu bağlantı, röle tetiklendiğinde pompanın çalışmasını sağlar. Eğer bir AC pompa kullanıyorsanız, nötr hattını doğrudan pompaya, faz hattını ise röle üzerinden pompaya bağlayın. AC bağlantılarında ekstra dikkatli olun ve gerekirse profesyonel yardım alın. |
Yukarıdaki bağlantılar genel bir rehber niteliğindedir. Kullandığınız ESP32 kartının veya sensörlerin spesifik pin düzenlemesi farklılık gösterebilir. Her zaman bileşenlerinizin veri sayfalarını (datasheet) kontrol etmelisiniz. Bağlantıları yaparken kısa devre yapmamaya özen gösterin ve özellikle yüksek voltajlı parçalarla çalışırken tüm güvenlik önlemlerini alın.
ESP32 İçin Yazılım Geliştirme: Firebase Entegrasyonu ve Veri Yönetimi
Donanım bağlantılarını tamamladıktan sonra, projemizin beyni olan ESP32’yi programlama aşamasına geçebiliriz. Bu bölümde, Arduino IDE ortamını kuracak, gerekli kütüphaneleri ekleyecek ve Firebase ile iletişim kuracak temel kod yapısını oluşturacağız. Bu kod, sensör verilerini okuyacak, Firebase’e gönderecek ve Firebase’den gelen kontrol komutlarına göre pompayı yönetecek. Yazılım geliştirme, sistemin donanım kadar önemli bir parçasıdır ve doğru bir şekilde yapılandırılması gerekir.
Arduino IDE Kurulumu ve Gerekli Kütüphaneler
- Arduino IDE Kurulumu: Arduino resmi web sitesinden IDE’yi indirip bilgisayarınıza kurun.
- ESP32 Kart Tanımlaması: Arduino IDE’yi açın,
Dosya > Tercihlermenüsüne gidin. “Ek Devre Kartları Yöneticisi URL’leri” alanına aşağıdaki URL’yi ekleyin:
https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json
ArdındanAraçlar > Kart > Kart Yöneticisi‘ne gidin, “esp32” yazıp aratın ve “esp32 by Espressif Systems” paketini yükleyin. - Gerekli Kütüphaneler:
Taslak > Kütüphaneleri Dahil Et > Kütüphaneleri Yönet‘e gidin ve aşağıdaki kütüphaneleri arayıp yükleyin:Firebase-ESP32(espressif/Firebase-ESP-Client)WiFi(genellikle ESP32 paketiyle gelir)
Eğer ultrasonik sensör kullanıyorsanız:
NewPingveya manuel olarak mesafe hesaplama.
Firebase Projesi Oluşturma ve Kimlik Bilgileri
- Firebase Konsolu: Firebase konsoluna gidin ve bir Google hesabıyla oturum açın.
- Yeni Proje Oluştur: “Proje Ekle” butonuna tıklayarak yeni bir proje oluşturun. Projenize bir isim verin ve Google Analytics ayarlarını isteğinize göre yapılandırın.
- Gerçek Zamanlı Veritabanı (Realtime Database) Kurulumu: Firebase projenizin sol menüsünden “Realtime Database” seçeneğine tıklayın. “Veritabanı Oluştur” butonuna basarak yeni bir veritabanı oluşturun. Güvenlik kurallarını “test modu” olarak başlatabilirsiniz, ancak canlıya almadan önce güvenlik kurallarını düzenlemelisiniz.
- API Anahtarı ve Veritabanı URL’si: Proje ayarlarınızdan (dişli simgesi) “Proje Ayarları”na gidin. “Genel” sekmesinde “Web API anahtarı”nı (Server key değil, “Web API Key” veya “Web API Anahtarı”) bulacaksınız. Bu anahtar
FIREBASE_HOSTveFIREBASE_AUTHiçin kullanılacak. Realtime Database bölümündeki veritabanı URL’nizi de not alın (örneğin,https://your-project-id-default-rtdb.firebaseio.com/).
ESP32 Firebase Entegrasyonu ve Temel Kod Yapısı
Şimdi ESP32’yi programlamaya başlayabiliriz. Aşağıdaki kod, Wi-Fi bağlantısını kurar, Firebase ile kimlik doğrulamasını yapar ve sensör verilerini Firebase’e gönderirken aynı zamanda Firebase’den pompa kontrol komutlarını okur.
#include
#include
// WiFi Ayarları
#define WIFI_SSID "WIFI_ADINIZ"
#define WIFI_PASSWORD "WIFI_SIFRENIZ"
// Firebase Ayarları
#define FIREBASE_HOST "YOUR_FIREBASE_DATABASE_URL" // örn: "your-project-id-default-rtdb.firebaseio.com"
#define FIREBASE_AUTH "YOUR_WEB_API_KEY" // Firebase Proje Ayarlarından alınan Web API Anahtarınız
// Donanım Pinleri
#define RELAY_PIN 23 // Röle için GPIO23
#define SOIL_MOISTURE_PIN 36 // Toprak nem sensörü için GPIO36 (ADC1_CH0)
#define ULTRASONIC_TRIG_PIN 25 // Ultrasonik sensör Trig pini
#define ULTRASONIC_ECHO_PIN 26 // Ultrasonik sensör Echo pini
// FirebaseESP32 nesnesi
FirebaseData firebaseData;
// Gerçek zamanlı olarak Firebase verilerini okumak ve yazmak için
FirebaseJson json;
// Pompa durumu değişkeni
bool pumpState = false; // Başlangıçta pompa kapalı
// Sensör okuma gecikmesi (milisaniye)
const long readDelay = 5000;
unsigned long lastReadTime = 0;
// Ultrasonik sensör için mesafe hesaplama fonksiyonu
long getDistance() {
// Trig pinini düşük konuma getir, 2 mikrosaniye bekle
digitalWrite(ULTRASONIC_TRIG_PIN, LOW);
delayMicroseconds(2);
// Trig pinini yüksek konuma getir, 10 mikrosaniye bekle
digitalWrite(ULTRASONIC_TRIG_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(ULTRASONIC_TRIG_PIN, LOW);
// Echo pininden gelen ses dalgasının süresini ölç
long duration = pulseIn(ULTRASONIC_ECHO_PIN, HIGH);
// Mesafeyi hesapla (cm cinsinden, ses hızı 0.034 cm/mikrosaniye)
long distance = duration * 0.034 / 2;
return distance;
}
void setup() {
Serial.begin(115200);
// Pin modlarını ayarla
pinMode(RELAY_PIN, OUTPUT);
digitalWrite(RELAY_PIN, LOW); // Başlangıçta röle kapalı (pompa kapalı)
pinMode(ULTRASONIC_TRIG_PIN, OUTPUT);
pinMode(ULTRASONIC_ECHO_PIN, INPUT);
// WiFi Bağlantısı
Serial.print("WiFi'a bağlanılıyor: ");
Serial.println(WIFI_SSID);
WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi'a bağlandı.");
Serial.print("IP Adresi: ");
Serial.println(WiFi.localIP());
// Firebase yapılandırması
Firebase.begin(FIREBASE_HOST, FIREBASE_AUTH);
Firebase.reconnectWiFi(true); // WiFi bağlantısı kesilirse otomatik yeniden bağlan
// Firebase'de başlangıç durumu oluştur/güncelle
if (!Firebase.setString(firebaseData, "/pump/status", pumpState ? "ON" : "OFF")) {
Serial.print("Firebase '/pump/status' yazma hatası: ");
Serial.println(firebaseData.errorReason());
}
if (!Firebase.setInt(firebaseData, "/pump/moisture", 0)) {}
if (!Firebase.setInt(firebaseData, "/pump/waterLevel", 0)) {}
if (!Firebase.setString(firebaseData, "/pump/control", "AUTO")) {} // Başlangıçta otomatik mod
Serial.println("Firebase kurulumu tamamlandı.");
}
void loop() {
if (Firebase.ready() && (millis() - lastReadTime > readDelay)) {
lastReadTime = millis();
// 1. Sensör Verilerini Oku
int soilMoisture = analogRead(SOIL_MOISTURE_PIN); // 0-4095 arası
long waterLevelCm = getDistance(); // Ultrasonik sensörden mesafe oku (cm)
// Su seviyesini bir eşik değerine göre anlamlı hale getir
// Örneğin, 10 cm altı düşük, 30 cm üstü yeterli, 10-30 arası orta.
String waterLevelStatus = "UNKNOWN";
if (waterLevelCm > 0 && waterLevelCm < 10) { // Sensörden 10cm'e kadar mesafe = su dolu
waterLevelStatus = "DOLU";
} else if (waterLevelCm >= 10 && waterLevelCm < 30) {
waterLevelStatus = "YETERLI";
} else if (waterLevelCm >= 30 && waterLevelCm < 200) { // Max mesafe 200cm varsayalım
waterLevelStatus = "DUSUK";
} else {
waterLevelStatus = "OKUNAMADI";
}
// 2. Verileri Firebase'e Gönder
json.set("/moisture", soilMoisture);
json.set("/waterLevelCm", waterLevelCm); // Raw cm değeri
json.set("/waterLevelStatus", waterLevelStatus); // Okunabilir durum
if (Firebase.updateNode(firebaseData, "/sensorData", json)) {
Serial.println("Sensör verileri Firebase'e gönderildi.");
Serial.print("Nem: "); Serial.print(soilMoisture);
Serial.print(", Su Seviyesi (cm): "); Serial.print(waterLevelCm);
Serial.print(", Su Seviyesi Durumu: "); Serial.println(waterLevelStatus);
} else {
Serial.print("Firebase sensör verisi gönderme hatası: ");
Serial.println(firebaseData.errorReason());
}
// 3. Firebase'den Kontrol Komutlarını Oku
if (Firebase.getString(firebaseData, "/pump/control")) {
String controlCommand = firebaseData.stringData();
Serial.print("Firebase kontrol komutu: "); Serial.println(controlCommand);
if (controlCommand == "ON") {
if (!pumpState) { // Eğer pompa kapalıysa, aç
digitalWrite(RELAY_PIN, HIGH); // Röleyi aç (pompaya güç ver)
pumpState = true;
Serial.println("Pompa AÇIK (Manuel Komut).");
Firebase.setString(firebaseData, "/pump/status", "ON");
}
} else if (controlCommand == "OFF") {
if (pumpState) { // Eğer pompa açıksa, kapat
digitalWrite(RELAY_PIN, LOW); // Röleyi kapat (pompanın gücünü kes)
pumpState = false;
Serial.println("Pompa KAPALI (Manuel Komut).");
Firebase.setString(firebaseData, "/pump/status", "OFF");
}
} else if (controlCommand == "AUTO") {
// Otomatik mod: sensör değerlerine göre karar ver
Serial.println("Otomatik modda çalışılıyor.");
// Örneğin: Toprak nemi 2000'in altındaysa pompayı aç, 3000'in üstündeyse kapat.
// Ve su seviyesi 'DUSUK' değilse.
if (soilMoisture < 2000 && waterLevelStatus != "DUSUK") {
if (!pumpState) {
digitalWrite(RELAY_PIN, HIGH);
pumpState = true;
Serial.println("Pompa AÇIK (Otomatik Mod - Nem Düşük).");
Firebase.setString(firebaseData, "/pump/status", "ON");
}
} else if (soilMoisture > 3000 || waterLevelStatus == "DUSUK") {
if (pumpState) {
digitalWrite(RELAY_PIN, LOW);
pumpState = false;
Serial.println("Pompa KAPALI (Otomatik Mod - Nem Yeterli veya Su Yok).");
Firebase.setString(firebaseData, "/pump/status", "OFF");
}
}
} else {
Serial.println("Geçersiz kontrol komutu.");
}
} else {
Serial.print("Firebase '/pump/control' okuma hatası: ");
Serial.println(firebaseData.errorReason());
}
}
}
{
"rules": {
".read": "auth != null",
".write": "auth != null"
}
}
Bu kural, sadece kimliği doğrulanmış kullanıcıların veritabanını okuyup yazabileceği anlamına gelir. ESP32 tarafında kimlik doğrulama için Firebase Auth'u (örn. e-posta/şifre veya anonim kimlik doğrulama) kullanmanız gerekir. Bu makaledeki örnekte kolaylık sağlamak amacıyla Web API Key kullanılmıştır, ancak daha güvenli uygulamalar için Authentication servisi önerilir.
Bu kod bloğu, ESP32'nizin Firebase ile etkileşimini sağlar. Sensörlerden gelen verileri sürekli olarak okur ve Firebase'e /sensorData yoluna gönderir. Aynı zamanda, /pump/control yolundan gelen komutları dinler ve pompayı buna göre yönetir. "ON", "OFF" veya "AUTO" komutlarıyla pompa manuel veya otomatik olarak kontrol edilebilir. Otomatik modda, örnek kod nem sensörüne ve su seviyesine göre pompa kararını verir. Kendi ihtiyaçlarınıza göre nem ve su seviyesi eşik değerlerini ayarlamayı unutmayın.
Mobil Arayüz Geliştirme: Su Pompanızı Uzaktan Nasıl Kontrol Edersiniz?
Akıllı su pompası sistemimizin en cazip özelliklerinden biri, pompayı dünyanın herhangi bir yerinden kontrol edebilme yeteneğidir. Bu bölümde, Firebase Realtime Database'i kullanarak basit bir web arayüzü (veya mobil arayüz mantığını) nasıl oluşturacağınızı ele alacağız. Bu arayüz sayesinde sensör verilerini gerçek zamanlı olarak görüntüleyebilecek ve pompayı uzaktan açıp kapatabileceksiniz. Mobil uyumlu bir tasarım için temel HTML, CSS ve JavaScript bilgisi yeterli olacaktır.
Neden Web Arayüzü?
Bir mobil uygulama geliştirmek (Flutter, React Native vb.) daha profesyonel bir deneyim sunsa da, bir web arayüzü ile başlamak çok daha hızlı ve kolaydır. HTML, CSS ve JavaScript kullanarak tarayıcı tabanlı, mobil cihazlarda da çalışan bir sayfa oluşturabiliriz. Firebase'in sunduğu JavaScript SDK sayesinde, veritabanına erişim oldukça basittir.
Firebase Web SDK Entegrasyonu
Web arayüzünüzün Firebase ile iletişim kurabilmesi için, Firebase projenizin yapılandırma bilgilerini arayüze eklemeniz gerekir. Bu bilgileri Firebase konsolunuzda, "Proje Ayarları" > "Uygulamalarınız" bölümünde, "Web uygulaması ekle" seçeneğini seçtikten sonra bulabilirsiniz. Aşağıdaki HTML kodu, bu bilgileri içeren ve temel pompa kontrol işlevlerini sunan bir örnektir.
Basit Bir Web Kontrol Arayüzü Oluşturma
Aşağıdaki HTML, CSS ve JavaScript kodu, akıllı su pompanızı kontrol etmek için kullanabileceğiniz basit bir web arayüzü örneğini göstermektedir. Bu kodu bir index.html dosyasına kaydedip tarayıcınızda açarak test edebilirsiniz.
Akıllı Su Pompası Kontrolü
Akıllı Su Pompası Yönetimi
Pompa Durumu: Yükleniyor...
Toprak Nemi: Yükleniyor...
Su Seviyesi: Yükleniyor...
Bu kod parçası, Firebase Realtime Database'deki /pump ve /sensorData yollarını dinler ve gelen verileri web sayfasında görüntüler. Aynı zamanda "AÇ", "KAPA" ve "OTOMATİK MOD" butonlarına tıklandığında, Firebase'deki /pump/control yoluna ilgili komutları yazarak ESP32'yi tetikler. CSS bölümünde yer alan @media sorguları sayesinde, bu sayfa mobil cihazlarda da düzgün bir şekilde görüntülenecek ve butonlar ekran boyutuna göre otomatik olarak düzenlenecektir. Bu basit arayüz, projenizin uzaktan kontrol edilebilirliğini ve veri görüntüleme yeteneklerini kanıtlamak için mükemmel bir başlangıç noktasıdır.
İleri Düzey Optimizasyonlar ve Ek Özellikler: Sistem Performansını Nasıl Artırırsınız?
Temel akıllı su pompası kontrol sistemimizi kurup çalıştırdıktan sonra, projemizi daha da geliştirecek ve daha kararlı hale getirecek bazı ileri düzey optimizasyonlara ve ek özelliklere odaklanabiliriz. Bu iyileştirmeler, sistemin enerji verimliliğini artırabilir, daha zengin işlevsellik sunabilir ve genel kullanıcı deneyimini zenginleştirebilir. Özellikle uzun süreli ve kritik uygulamalar için bu adımlar büyük önem taşır.
Enerji Verimliliği ve Güç Yönetimi
ESP32 gibi Wi-Fi özellikli cihazlar, sürekli açık kaldıklarında önemli miktarda enerji tüketebilirler. Pil gücüyle çalışan veya uzun süre fişte kalması istenmeyen uygulamalar için güç yönetimi hayati önem taşır. ESP32, farklı uyku modlarına sahiptir:
- Modem-sleep: Wi-Fi modem kapatılır, CPU ve RAM çalışır. En az güç tasarrufu sağlar.
- Light-sleep: CPU duraklatılır, RAM ve bazı çevresel birimler açık kalır. Wi-Fi bağlantısı kesilebilir. Sensör verilerini okuyup periyodik olarak Firebase'e göndermek için idealdir.
- Deep-sleep: CPU ve çoğu çevresel birim kapatılır, sadece RTC (gerçek zamanlı saat) belleği ve belirli RTC çevresel birimleri çalışır. En yüksek güç tasarrufunu sağlar ancak uyandığında yeniden başlatma süreci gerektirir. Sadece çok seyrek veri gönderimi gerektiren uygulamalar için uygundur.
Sisteminizi programlarken, sensör okumaları arasında ESP32'yi Light-sleep moduna almak, güç tüketimini önemli ölçüde azaltabilir. Örneğin, her 5 dakikada bir veri göndermek yeterliyse, ESP32'nin çoğunlukla uyku modunda kalmasını sağlayabilirsiniz.
// Örnek Light-sleep kullanımı
// #include
// ...
// esp_sleep_enable_timer_wakeup(5 * 60 * 1000000); // 5 dakika sonra uyan
// esp_deep_sleep_start(); // Deep-sleep modu, daha az güç tüketimi
// esp_light_sleep_start(); // Light-sleep modu
Gelişmiş Sensör Veri Analizi ve Veri Günlüğü
Tek bir anlık sensör değeri yerine, zaman içindeki veri değişimlerini izlemek daha anlamlı bilgiler sunar. Firebase'de sensör verilerini zaman damgalarıyla birlikte depolayarak bir veri günlüğü oluşturabilirsiniz. Bu veriler daha sonra grafikler aracılığıyla görselleştirilebilir ve trend analizi yapılabilir. Örneğin, toprağın nem seviyesi gün içinde nasıl değişiyor? Hangi saatlerde sulama daha etkili oluyor? Bu soruların cevapları, daha optimize edilmiş sulama stratejileri geliştirmenize yardımcı olabilir.
- Firebase Firestore: Gerçek zamanlı veritabanı yerine, daha yapılandırılmış veri depolama ve sorgulama yetenekleri sunan Firestore'u kullanarak gelişmiş veri günlüğü tutabilirsiniz.
- Grafik Entegrasyonu: Web arayüzünüzde Chart.js veya Google Charts gibi kütüphaneler kullanarak sensör verilerini zaman çizelgeleri üzerinde görselleştirebilirsiniz.
Bildirimler ve Uyarılar
Sistemin kritik durumlar hakkında kullanıcıları bilgilendirmesi, projenin kullanışlılığını artırır. Örneğin, su deposu seviyesi kritik derecede düştüğünde veya pompa anormal derecede uzun süre çalıştığında bildirim alabilirsiniz.
- Firebase Cloud Messaging (FCM): Mobil cihazlara anlık bildirimler göndermek için FCM kullanabilirsiniz. ESP32 bir kritik durum algıladığında, Firebase Functions (bulut işlevleri) aracılığıyla FCM üzerinden telefonunuza bir bildirim gönderebilirsiniz.
- E-posta/SMS Entegrasyonu: Firebase Functions'ı kullanarak belirli olaylarda e-posta veya SMS gönderme hizmetlerini (örneğin SendGrid, Twilio) entegre edebilirsiniz.
Çoklu Sensör ve Pompa Yönetimi
Projeniz tek bir pompa ve birkaç sensörle başladı, ancak büyüdükçe birden fazla alanı sulamak veya farklı depoları yönetmek isteyebilirsiniz. Firebase'in esnek yapısı, bu tür senaryoları kolayca yönetmenize olanak tanır.
- Veritabanı Yapısı: Firebase veritabanınızda her pompa ve sensör için ayrı bir yol (path) oluşturarak veri yönetimini merkezileştirebilirsiniz. Örneğin:
/zones/zone1/pump/status,/zones/zone2/sensorData/moisture. - ESP32 Ağ Geçitleri (Gateways): Her bir sulama bölgesine veya depoya ayrı bir ESP32 yerleştirerek ve bunların hepsini aynı Firebase projesine bağlayarak merkezi bir kontrol paneli oluşturabilirsiniz.
Güvenlik İyileştirmeleri
Her IoT projesinde olduğu gibi, güvenlik ihmal edilmemesi gereken bir konudur. Özellikle uzaktan kontrol edilen bir pompa gibi fiziksel bir aktüatör söz konusu olduğunda:
- Firebase Authentication: Web arayüzünüz ve ESP32'niz için güçlü kimlik doğrulama yöntemleri kullanın (e-posta/şifre, Google ile oturum açma vb.). Web API anahtarını doğrudan kodda tutmak yerine, Firebase Authentication ile yetkilendirme akışlarını kullanmak daha güvenlidir.
- Veri Şifreleme: Hassas verileriniz varsa, bunları şifreleyerek Firebase'e göndermeyi düşünebilirsiniz, ancak bu genellikle bu tür projelerde çok gerek duyulmaz.
- Fiziksel Güvenlik: ESP32 ve sensörleri dış etkenlerden koruyacak suya dayanıklı bir muhafaza kullanın. Röle ve pompa bağlantılarının doğru yalıtıldığından emin olun.
Bu ileri düzey optimizasyonlar ve ek özellikler, akıllı su pompası kontrol sisteminizi sadece işlevsel olmaktan çıkarıp, daha profesyonel, güvenilir ve kullanışlı bir çözüme dönüştürecektir. Projenizin ihtiyaçlarına göre bu özelliklerden birini veya birkaçını uygulayarak sisteminizi kişiselleştirebilirsiniz.
Sonuç ve Gelecek Perspektifleri
Bu makale boyunca, ESP32 ve Firebase platformunu kullanarak akıllı bir su pompası kontrol sistemi inşa etmenin tüm adımlarını detaylı bir şekilde inceledik. Başlangıçta neden böyle bir sisteme ihtiyaç duyulduğunu, ardından temel donanım ve yazılım bileşenlerinin nasıl çalıştığını öğrendik. Donanım bağlantılarını adım adım gerçekleştirip, ESP32'yi Firebase ile entegre edecek temel kodu yazdık ve son olarak sistemi uzaktan kontrol etmemizi sağlayacak basit bir web arayüzü oluşturduk. Ayrıca, enerji verimliliği, gelişmiş veri analizi, bildirimler ve güvenlik gibi ileri düzey optimizasyonlara da değindik.
Bu proje, IoT teknolojilerinin günlük hayatımızı nasıl daha verimli, sürdürülebilir ve konforlu hale getirebileceğinin somut bir örneğidir. Su kaynaklarının kısıtlı olduğu bir dünyada, akıllı sulama ve su yönetimi sistemleri, su israfını önleyerek hem bireysel hem de küresel düzeyde önemli faydalar sunar. Manuel iş yükünü azaltması, maliyet tasarrufu sağlaması ve uzaktan kontrol imkanı sunması, bu tür sistemlerin cazibesini artırmaktadır. Evde bahçe sulamasından tarım alanındaki büyük ölçekli uygulamalara kadar geniş bir kullanım alanına sahiptir.
Gelecekte, bu tür akıllı sistemler daha da gelişerek yapay zeka ve makine öğrenimi entegrasyonlarıyla daha akıllı hale gelecektir. Hava durumu tahminleri, bitki türüne özel su ihtiyaçları ve toprak besin değerleri gibi ek verilerle birleşerek, sistemler daha hassas ve öngörülü kararlar alabilecektir. Ayrıca, enerji hasadı (solar paneller gibi) ile kendi enerjisini üreten, tamamen bağımsız akıllı su yönetimi çözümleri de yaygınlaşacaktır. Kısacası, bu proje, IoT dünyasına atılan önemli bir adımdır ve gelecekteki akıllı yaşam alanlarımızın temel taşlarından birini temsil etmektedir.
Sıkça Sorulan Sorular (SSS)
1. Bu projeyi yapmak için ne kadar programlama bilgisine ihtiyacım var?
C++ (Arduino için) ve temel JavaScript/HTML bilgisi faydalıdır. Ancak, bu makaledeki adım adım talimatlar ve kod örnekleri sayesinde, başlangıç seviyesinde olanlar bile projeyi tamamlayabilir. Önemli olan merak ve öğrenme isteğidir.
2. Firebase kullanmak ücretli mi?
Firebase'in Spark Planı (ücretsiz katman), çoğu küçük ve kişisel IoT projesi için oldukça cömert kaynaklar sunar ve genellikle ücretsizdir. Projeniz büyüdükçe veya daha fazla kaynak kullandıkça Blaze Planına (kullandıkça öde) geçmeniz gerekebilir. Ancak bu projedeki kullanımınız Spark Planı'nın sınırları içinde kalacaktır.
3. Pompayı kontrol etmek için neden röle kullanıyoruz? Direkt ESP32'ye bağlayamaz mıyız?
Hayır, doğrudan bağlayamazsınız. Su pompaları genellikle yüksek voltajda (örneğin 12V DC veya 220V AC) ve yüksek akımda çalışır. ESP32 ise düşük voltajlı (3.3V) ve düşük akımlı bir cihazdır. Röle, ESP32'nin düşük voltajlı sinyali ile yüksek voltajlı bir devreyi güvenli bir şekilde anahtarlamasını sağlayan bir izolasyon elemanıdır. Bu, hem ESP32'yi korur hem de güvenlik risklerini azaltır.
4. ESP32 yerine başka bir mikrodenetleyici kullanabilir miyim?
Evet, Wi-Fi özellikli başka bir mikrodenetleyici (örneğin ESP8266) kullanabilirsiniz. Ancak kod ve bağlantılar üzerinde bazı değişiklikler yapmanız gerekebilir. ESP32, daha güçlü işlemci, daha fazla GPIO pini ve Bluetooth LE gibi ek özellikler sunarak bu tür projeler için daha esnek bir çözüm sunar.
5. Sistem offline olursa ne olur?
Eğer ESP32'nin Wi-Fi bağlantısı kesilirse, Firebase ile olan iletişimi durur. Bu durumda, sensör verileri Firebase'e gönderilemez ve Firebase üzerinden uzaktan kontrol komutları alınamaz. Ancak, ESP32 kendi üzerindeki programlama mantığına göre çalışmaya devam edebilir (örneğin, son bilinen sensör değerlerine göre pompayı çalıştırmaya devam edebilir) veya güvenli modda bekleyebilir. Daha gelişmiş sistemlerde, bağlantı kesildiğinde yerel bir SD karta veri kaydedilebilir ve bağlantı geri geldiğinde Firebase'e gönderilebilir.
