top of page

ESP32 ile Akıllı Bitki Sulama ve Toprak Nemi Takip Sistemi

Güncelleme tarihi: 12 Kas 2025


Bu proje, bir ESP32 kartını kullanarak bitki toprağının nem seviyesini ölçer ve belirli bir eşiğin altına düştüğünde otomatik olarak bitkiyi sular. Ayrıca, toprak nemi verilerini Wi-Fi üzerinden ücretsiz bir IoT bulut platformuna (örneğin ThingSpeak) göndererek uzaktan takip imkanı sağlar.


Projeyi Hayata Geçirme Adımları


Bu projeyi tamamlamak için izleyeceğimiz adımlar aşağıdadır.


Adım 1: Gerekli Donanım ve Yazılımı Temin Etme

Kategori

Bileşen Adı

Açıklama

Donanım

1. ESP32 Geliştirme Kartı

Temel mikrodenetleyicimiz.


2. Toprak Nem Sensörü

Toprağın nemini ölçmek için (analog çıkışlı).


3. Su Pompası (küçük 3-6V)

Bitkiyi sulamak için kullanılacak pompa.


4. Röle Modülü (1 Kanal)

ESP32'nin su pompasını kontrol etmesi için.


5. Transistör (örneğin BC547 veya NPN tipi herhangi bir transistör)

Röle yerine pompayı doğrudan kontrol etmek için kullanılabilir (isteğe bağlı, basitleştirilmiş senaryo için).


6. Dış Güç Kaynağı (5V veya 6V pil/adaptör)

Su pompasına güç sağlamak için (ESP32'nin USB'si yeterli olmayabilir).


7. Hortum ve Küçük Su Kabı

Pompanın suyu çekeceği ve bitkiye ileteceği sistem.


8. Breadboard (Devre Tahtası)

Bileşenleri geçici olarak bağlamak için.


9. Bağlantı Kabloları (Jumper)

Bileşenleri birbirine bağlamak için (erkek-erkek, erkek-dişi).


10. Micro USB Kablosu

ESP32'yi bilgisayara bağlamak ve güç vermek için.

Yazılım

1. Arduino IDE

Kodu yazacağımız ve karta yükleyeceğimiz programlama ortamı.


2. ESP32 Kart Desteği

Arduino IDE'ye ESP32 kartlarını eklemek için.


3. ThingSpeak Hesabı

Verileri internet üzerinden görmek için ücretsiz bir IoT platformu hesabı.

Adım 2: Geliştirme Ortamının Kurulumu (Yazılım ve Kodlama)


  1. Arduino IDE Kurulumu: Bilgisayarınıza Arduino IDE'yi indirin ve kurun. (Önceki projeden zaten kuruluysa bu adımı atlayabilirsiniz).

  2. ESP32 Desteğini Ekleme: Arduino IDE içinde Dosya > Tercihler > Ek Kart Yöneticisi URL'leri alanına ESP32 kart destek linkini ekleyin ve Araçlar > Kart > Kart Yöneticisi'nden "esp32" paketini kurun. (Önceki projeden kuruluysa atlayabilirsiniz).


Adım 3: ThingSpeak Kanalını Ayarlama (IoT ve Bulut)


  1. Hesap Oluşturma: ThingSpeak'te ücretsiz bir hesap oluşturun veya mevcut hesabınızı kullanın.

  2. Yeni Kanal Oluşturma: "Channels" (Kanallar) sekmesine gidin ve "New Channel" (Yeni Kanal) oluşturun.

  3. Alanları Tanımlama: Kanal ayarlarında (Channel Settings), Field 1'i "Toprak Nemi (%)" olarak adlandırın ve kanalı kaydedin.

  4. API Anahtarını Kaydetme: "API Keys" (API Anahtarları) sekmesine gidin ve Write API Key (Yazma API Anahtarı) değerini not alın. Bu anahtar, ESP32'nin veriyi buluta göndermesi için gereklidir.


Adım 4: Donanım Bağlantılarını Yapma (Teknik Rehber)


Bu adım, dikkatli bir bağlantı gerektirir. Güç kaynağı bağlantılarına özellikle dikkat edin.

A. Toprak Nem Sensörü Bağlantısı:

Sensör Pini

Bağlantı Yeri

ESP32 Pini

VCC (Güç)

->

3.3V (veya 5V, sensörünüzün çalışma voltajına göre)

GND (Toprak)

->

GND

Analog Çıkış

->

GPIO 34 (ESP32'deki analog giriş pinlerinden biri)

B. Su Pompası ve Röle Modülü Bağlantısı:

  • Röle Modülü:

    • VCC -> ESP32 3.3V veya harici 5V (rölenin çalışma voltajına göre)

    • GND -> ESP32 GND veya harici güç kaynağı GND

    • IN (Kontrol Pini) -> GPIO 23 (veya herhangi bir dijital pin)

  • Su Pompası:

    • Pompanın bir ucu rölenin NORMALDE AÇIK (NO) veya NORMALDE KAPALI (NC) pini ile (proje gereksinimine göre, genellikle NO), diğer ucu ise ORTAK (COMMON) pinine bağlanır.

    • Pompanın diğer ucu, harici güç kaynağının pozitif (+) ucuna bağlanır.

    • Harici güç kaynağının negatif (-) ucu rölenin COMMON pinine bağlanır (veya pompa ile röle arasında).

    • ÖNEMLİ: Su pompasını asla doğrudan ESP32'ye bağlamayın. Röle veya transistör kullanın ve pompanın kendi harici güç kaynağı olsun.

Uyarı: Bağlantıları yapmadan önce kartın bilgisayardan ayrılmış olduğundan ve tüm güç kaynaklarının kapalı olduğundan emin olun. Ters polarite veya yanlış bağlantılar kartınıza, sensörünüze veya pompanıza kalıcı olarak zarar verebilir ve tehlike oluşturabilir.


Adım 5: ESP32 Kodunu Yazma ve Yükleme


Aşağıdaki kod taslağını Arduino IDE'ye yapıştırın. Önemli kısımları kendi bilgilerinizle değiştirmeniz gerekiyor.



#include <WiFi.h>

#include <ThingSpeak.h>


// ---------------- KENDİ BİLGİLERİNİZİ GİRİN ----------------


// Wi-Fi Bilgileri

const char* ssid = "WIFI_AG_ADINIZ";

const char* password = "WIFI_SIFRENIZ";


// ThingSpeak Bilgileri

unsigned long myChannelNumber = KANAL_ID_NUMARANIZ; // Örn: 123456

const char* myWriteAPIKey = "WRITE_API_ANAHTARINIZ"; // ThingSpeak'ten aldığınız anahtar


// Donanım Pinleri

#define SOIL_MOISTURE_PIN 34 // Toprak nem sensörünün bağlı olduğu analog pin

#define PUMP_RELAY_PIN 23 // Röle modülünün kontrol pini


// Kalibrasyon değerleri (kendi sensörünüz için ayarlamanız gerekebilir)

const int airValue = 3100; // Sensör kuru havada iken okuduğu değer (yaklaşık)

const int waterValue = 1100; // Sensör suda iken okuduğu değer (yaklaşık)

const int moistureThreshold = 40; // Toprak neminin bu değerin altına düşerse sula (yüzde olarak)


// ---------------- KOD BURADAN SONRA STANDARTTIR ----------------


WiFiClient client;

long lastSendTime = 0;

const long sendInterval = 60000; // Her 1 dakikada bir veri gönder (ThingSpeak limitleri için uygun)


void setup() {

Serial.begin(115200);

pinMode(PUMP_RELAY_PIN, OUTPUT);

digitalWrite(PUMP_RELAY_PIN, HIGH); // Röleyi başlangıçta kapalı tut (HIGH veya LOW röle türüne göre değişir)


ThingSpeak.begin(client);


Serial.println("WiFi'ye Bağlanıyor...");

WiFi.begin(ssid, password);


while (WiFi.status() != WL_CONNECTED) {

delay(500);

Serial.print(".");

}


Serial.println("");

Serial.println("WiFi Bağlandı. IP Adresi: ");

Serial.println(WiFi.localIP());

}


void loop() {

unsigned long currentTime = millis();


// Her belirlenen aralıkta bir veri gönder ve nemi kontrol et

if (currentTime - lastSendTime >= sendInterval) {

lastSendTime = currentTime;


int sensorValue = analogRead(SOIL_MOISTURE_PIN); // Toprak nem değerini oku (0-4095)

// Yüzdeye çevir (0% = kuru, 100% = ıslak)

int moisturePercent = map(sensorValue, airValue, waterValue, 0, 100);

if(moisturePercent > 100) moisturePercent = 100;

if(moisturePercent < 0) moisturePercent = 0;


Serial.print("Toprak Nem Sensör Değeri: ");

Serial.print(sensorValue);

Serial.print(", Toprak Nemi: ");

Serial.print(moisturePercent);

Serial.println(" %");


// ThingSpeak'e veri gönder

ThingSpeak.setField(1, moisturePercent); // Field 1: Toprak Nemi

int x = ThingSpeak.writeFields(myChannelNumber, myWriteAPIKey);


if(x == 200){

Serial.println("ThingSpeak güncellendi.");

}

else{

Serial.println("ThingSpeak yazma hatası. Hata Kodu: " + String(x));

}


// Nemi kontrol et ve gerekirse sulama yap

if (moisturePercent < moistureThreshold) {

Serial.println("Toprak çok kuru! Sulama başlatılıyor...");

digitalWrite(PUMP_RELAY_PIN, LOW); // Röleyi aç (pompayı çalıştır) - Röle türüne göre HIGH olabilir

delay(5000); // 5 saniye sula

digitalWrite(PUMP_RELAY_PIN, HIGH); // Röleyi kapat (pompayı durdur) - Röle türüne göre LOW olabilir

Serial.println("Sulama tamamlandı.");

delay(10000); // Kısa bir ara ver, tekrar hemen sulamaması için

}

}


// ThingSpeak gönderme aralığı dışındaki diğer görevler veya döngüler

delay(1000); // Küçük bir gecikme

}



  1. Kodu Hazırlama: Yukarıdaki kodda WIFI_AG_ADINIZ, WIFI_SIFRENIZ, KANAL_ID_NUMARANIZ ve WRITE_API_ANAHTARINIZ kısımlarını kendi bilgilerinizle değiştirin.

    • Kalibrasyon: airValue ve waterValue değerlerini kendi toprak nem sensörünüzü kuru havada ve suda daldırılmış halde test ederek ayarlamanız GEREKİR. Bu, nem yüzdesinin doğru hesaplanmasını sağlayacaktır.

    • Röle Durumu: digitalWrite(PUMP_RELAY_PIN, HIGH) veya LOW komutları, kullandığınız röle modülünün "açık" veya "kapalı" mantığına göre değişiklik gösterebilir (çoğu röle LOW sinyalinde tetiklenir).

  2. Yükleme: Araçlar > Kart kısmından kullandığınız ESP32 modelini seçin. Araçlar > Port kısmından ESP32'nin bağlı olduğu COM portunu seçin. "Yükle" düğmesine tıklayın.

  3. Test Etme: Yükleme tamamlandıktan sonra Araçlar > Seri Monitör'ü açın (Baud hızı: 115200). Bağlantı sürecini, nem okumalarını ve gerekirse sulama mesajlarını görmelisiniz.


Adım 6: Verileri Bulutta Görüntüleme ve Test Etme (IoT ve Bulut)


  1. ThingSpeak hesabınıza geri dönün.

  2. Kanalınızı açın ve "Private View" (Özel Görünüm) sekmesine gidin.

  3. ESP32'nin gönderdiği toprak nemi verilerinin canlı grafikler halinde belirmeye başladığını görmelisiniz.

  4. Sensörü kuru toprağa yerleştirin, nem eşiğinin altına düştüğünde pompanın çalışıp çalışmadığını gözlemleyin.

Yorumlar


bottom of page