DIY ELECTRONICSEN

← Tüm projeler

Otomatik Saksı Sulama

Orta50 dk

Saksıdaki toprak kuruyunca bitkiyi kendi kendine sulayan sistem: toprak nem sensörü nemi yüzde olarak ölçer, nem %30'un altına inince Arduino röle üzerinden mini dalgıç pompayı 3 saniye çalıştırır, suyun toprağa yayılmasını bekleyip yeniden ölçer ve nem %50'yi geçene kadar bunu tekrarlar. Pompa üç kalem pille ayrı beslenir; röle bu devreyi Arduino'dan tamamen ayırır. Arka arkaya 5 sulamada toprak nemlenmezse depo boş sayılır ve pompa kuru çalışmasın diye durdurulur. Bir sensörü kalibre edip yüzdeye çevirmeyi, röleyle ayrı beslenen bir yükü açıp kapatmayı, sensörü yalnızca ölçerken besleyip paslanmasını geciktirmeyi ve bir sistemi arızaya karşı korumayı öğretir. Ek kütüphane gerekmez.

Uygulamada adım adım yap

Gerekli malzemeler

Bağlantı adımları

  1. 1

    Arduino'nun güç sıralarını bağla (5V ve GND)

    Arduino'nun güç sıralarını bağla (5V ve GND)

    Bu projede iki ayrı devre var: Arduino'nun devresi breadboard'un alttaki güç sıralarını, pompanın pil devresi üstteki güç sıralarını kullanır ve ikisi birbirine hiç bağlanmaz. Siyah erkek-erkek jumper kabloyu Arduino'nun güç başlığındaki GND pinlerinden birine tak, diğer ucunu alttaki mavi çizgili (−) güç sırasına bağla. Kırmızı kabloyu aynı başlıktaki 5V pinine tak, diğer ucunu alttaki kırmızı çizgili (+) güç sırasına bağla.

    • Arduino 5V → alttaki kırmızı çizgili (+) sıra (kırmızı kablo)
    • Arduino GND → alttaki mavi çizgili (−) sıra (siyah kablo)
  2. 2

    Röle modülünü bağla

    Röle modülünü bağla

    Röle modülünün kontrol pinlerine erkek-dişi jumper kabloların dişi uçlarını tak; pin adları kartın üzerinde yazar (bazı kartlarda VCC yerine DC+, GND yerine DC− yazar). VCC'yi kırmızı kabloyla alttaki (+) güç sırasına, GND'yi siyah kabloyla alttaki (−) güç sırasına, IN'i turuncu kabloyla doğrudan Arduino'nun 8 numaralı pinine bağla (RELAY_PIN 8). Kontrol pinleri pin yerine vidalı klemens olan kartlarda kabloyu vidaya sıkıştır. Kartında H/L (High/Low) tetikleme jumper'ı varsa L konumuna al: kod LOW ile çeken röleye göre yazıldı. Röle Arduino'nun küçük sinyaliyle pompanın devresini açıp kapatan bir anahtardır; çektiğinde tık sesi duyulur ve kartındaki LED yanar.

    • röle VCC → alttaki kırmızı çizgili (+) sıra (kırmızı kablo)
    • röle GND → alttaki mavi çizgili (−) sıra (siyah kablo)
    • Arduino pin 8 → röle IN (turuncu kablo)
  3. 3

    Toprak nem sensörünü bağla

    Toprak nem sensörünü bağla

    Sensörün çatal biçimli probunu, yanında gelen iki telli kabloyla küçük LM393 kartına bağla (probun yönü fark etmez). Kartın pinlerine erkek-dişi kabloların dişi uçlarını tak: VCC'yi kırmızı kabloyla Arduino'nun 7 numaralı pinine (SENSOR_POWER 7), GND'yi siyah kabloyla alttaki (−) güç sırasına, AO'yu sarı kabloyla Arduino'nun A0 pinine bağla (SOIL_PIN A0). DO pini boş kalır. Sensör 5V yerine pin 7'den beslenir: kod onu yalnızca ölçerken birkaç milisaniye açar, böylece probun metal yolları suda çok daha geç paslanır. Probu saksıda bitkinin köküne zarar vermeden toprağa, çizgisine kadar batır; LM393 kartı ıslanmamalı.

    • nem sensörü probu POS → nem sensörü kartı POS (mavi kablo)
    • nem sensörü probu NEG → nem sensörü kartı NEG (mavi kablo)
    • Arduino pin 7 → nem sensörü kartı VCC (kırmızı kablo)
    • nem sensörü kartı GND → alttaki mavi çizgili (−) sıra (siyah kablo)
    • Arduino A0 → nem sensörü kartı AO (sarı kablo)
  4. 4

    Pompayı pil yuvasıyla röleye bağla

    Pompayı pil yuvasıyla röleye bağla

    Üç kalem pili yuvadaki + / − işaretlerine göre tak (yuvanın anahtarı varsa kapalı tut). Yuvanın kırmızı kablosunu breadboard'un üstteki kırmızı çizgili (+) sırasına, siyah kablosunu üstteki mavi çizgili (−) sırasına tak. Bir erkek-erkek kabloyla üstteki (+) sırayı rölenin COM vidasına bağla: vidayı küçük bir tornavidayla gevşet, kabloyu sok, sıkıştır. Pompanın kırmızı kablosunu rölenin NO (normalde açık) vidasına, siyah kablosunu üstteki (−) sıraya bağla. Röle çekince COM ile NO birleşir ve pompa pillerden beslenir. Üstteki sıraları alttakilere ya da Arduino'ya bağlama. Hortumu pompaya tak, ucunu saksının toprağına doğru sabitle; pompayı tamamen suya batırılmış olarak deponun dibine koy. Hortumun saksıdaki ucu depodaki suyun seviyesinden yüksekte olmalı, yoksa pompa durduktan sonra da su akmaya devam edebilir.

    • pil yuvası kırmızı kablo (+) → üstteki kırmızı çizgili (+) sıra (kırmızı kablo)
    • pil yuvası siyah kablo (−) → üstteki mavi çizgili (−) sıra (siyah kablo)
    • röle COM → üstteki kırmızı çizgili (+) sıra (turuncu kablo)
    • röle NO → pompa kırmızı kablo (kırmızı kablo)
    • pompa siyah kablo → üstteki mavi çizgili (−) sıra (siyah kablo)

Arduino kodu

// Toprak nem sensörünün analog çıkışı
// ve yalnızca ölçerken açılan beslemesi
const int SOIL_PIN = A0;
const int SENSOR_POWER = 7;
// Röle modülünün IN pini
const int RELAY_PIN = 8;

// Çoğu röle modülü LOW ile çeker; seninki
// HIGH ile çekiyorsa ikisini değiştir
const int RELAY_ON = LOW;
const int RELAY_OFF = HIGH;

// Kalibrasyon: sensör kuru havada ve
// suda iken okunan ham değerler
const int DRY_RAW = 1023;
const int WET_RAW = 300;

// Nem bunun altına inince sulama başlar,
// bunu geçince biter (yüzde)
const int DRY_LIMIT = 30;
const int WET_LIMIT = 50;

// Bir sulamada pompanın çalışma süresi
const unsigned long PUMP_TIME = 3000;
// Suyun toprağa yayılması için bekleme
const unsigned long SOAK_TIME = 30000;
// Ölçümler arası süre (ms)
const unsigned long CHECK_EVERY = 10000;
// Bu kadar sulamada toprak nemlenmezse
// depo boş sayılır
const int MAX_PUMPS = 5;

bool watering = false;
int pumps = 0;

void setup() {
  // Önce "kapalı" yaz: açılışta pompa
  // bir an bile çalışmasın
  digitalWrite(RELAY_PIN, RELAY_OFF);
  pinMode(RELAY_PIN, OUTPUT);
  pinMode(SENSOR_POWER, OUTPUT);
  pinMode(LED_BUILTIN, OUTPUT);
  Serial.begin(9600);
  Serial.println("Otomatik sulama başladı.");
}

// Sensörü aç, 5 ölçüm ortalaması al,
// kapat: problar böyle geç paslanır
int readRaw() {
  digitalWrite(SENSOR_POWER, HIGH);
  delay(100);
  long total = 0;
  for (int i = 0; i < 5; i++) {
    total += analogRead(SOIL_PIN);
    delay(10);
  }
  digitalWrite(SENSOR_POWER, LOW);
  return total / 5;
}

void runPump() {
  digitalWrite(RELAY_PIN, RELAY_ON);
  delay(PUMP_TIME);
  digitalWrite(RELAY_PIN, RELAY_OFF);
}

// Depo boş olabilir: pompa bir daha
// çalışmaz, kartın LED'i yanıp söner
void stopForGood() {
  Serial.print(MAX_PUMPS);
  Serial.println(" sulamada toprak nemlenmedi: depo boş ya da hortum saksının dışında olabilir.");
  Serial.println("Pompa durduruldu. Kontrol edip reset'e bas.");
  while (true) {
    digitalWrite(LED_BUILTIN, HIGH);
    delay(300);
    digitalWrite(LED_BUILTIN, LOW);
    delay(300);
  }
}

void loop() {
  int raw = readRaw();
  // Neredeyse 0: sensöre güç gelmiyor
  if (raw < 50) {
    Serial.print("Sensör okunamıyor (ham ");
    Serial.print(raw);
    Serial.println("), kabloları kontrol et.");
    delay(CHECK_EVERY);
    return;
  }

  // Kuru toprak yüksek, ıslak düşük okur
  int moisture = constrain(map(raw, DRY_RAW, WET_RAW, 0, 100), 0, 100);
  Serial.print("Nem: %");
  Serial.print(moisture);
  Serial.print(" (ham ");
  Serial.print(raw);
  Serial.println(")");

  // İki ayrı eşik: sınırda gidip gelmez
  if (!watering && moisture < DRY_LIMIT) {
    watering = true;
    pumps = 0;
    Serial.println("Toprak kuru, sulama başlıyor.");
  }
  if (watering && moisture >= WET_LIMIT) {
    watering = false;
    Serial.println("Toprak nemlendi, sulama bitti.");
  }

  if (watering) {
    if (pumps >= MAX_PUMPS) {
      stopForGood();
    }
    runPump();
    pumps++;
    Serial.print("Pompa çalıştı (");
    Serial.print(pumps);
    Serial.println("), su yayılıyor...");
    delay(SOAK_TIME);
    return;
  }
  delay(CHECK_EVERY);
}

Seri Monitörde göreceğin

SERIAL MONITOR · 9600 BAUD
Otomatik sulama başladı.
Nem: %36 (ham 759)
Nem: %32 (ham 789)
Nem: %29 (ham 809)
Toprak kuru, sulama başlıyor.
Pompa çalıştı (1), su yayılıyor...
Nem: %41 (ham 721)
Pompa çalıştı (2), su yayılıyor...
Nem: %54 (ham 630)
Toprak nemlendi, sulama bitti.
Nem: %52 (ham 642)

Bir kablo yerinde değilse

SERIAL MONITOR · 9600 BAUD
Sensör okunamıyor (ham 0), kabloları kontrol et.

Sonuç

Önce sensörü kalibre et: Seri Monitörü aç, probu kuru havada tutup yazan ham değeri, sonra yalnızca çatal kısmını bir bardak suya batırıp yazan ham değeri not et; bunları koddaki DRY_RAW ve WET_RAW'a yaz ve kodu yeniden yükle. Sonra probu saksının toprağına batır: her 10 saniyede bir nem yüzde olarak yazılır. Nem %30'un altına inince röle tık eder, pompa 3 saniye su basar, 30 saniye suyun yayılması beklenir ve yeniden ölçülür; nem %50'yi geçince sulama biter. Kuru bir saksıyla denersen birkaç sulamada nemin yükseldiğini görürsün. Depo boşsa ya da hortum saksının dışındaysa 5 sulamadan sonra pompa durur ve Arduino'nun üstündeki küçük L LED'i yanıp söner: depoyu doldurup reset düğmesine bas. Pompa açılışta hemen çalışıyor ya da hiç durmuyorsa rölen HIGH ile çekiyordur: koddaki RELAY_ON ve RELAY_OFF değerlerini yer değiştir. Röle tık ediyor ama pompa dönmüyorsa pilleri ve COM / NO kablolarını kontrol et. "Sensör okunamıyor" yazıyorsa sensör kartının VCC (pin 7), GND ve AO kablolarına bak. Pompayı asla susuz çalıştırma; kısa sürede bozulur.

Uygulamada her bağlantıyı tek tek işaretle, envanterindeki parçalarla eşleştir ve kaldığın yerden devam et.

Uygulamada adım adım yap