Yetiştirme Torbasında (Growbag / grow slab) Domates Yetiştirmek 02 – Bitmiş Proje

saksi

Gerekli Parçalar:

      • Ana Depo – En az 19 litrelik damacana, ideal olarak 50 litreden fazla depo.
      • Su Pompası – 12v karavan model
      • Hortum – 1cm yaklaşık 4m
      • Transfer Deposu – 5 litrelik şişe
      • Transfer Deposuna hortum bağlayabilmek için conta vs
      • Damlama sulama hortumu ve kazığı (kazıklar damlama sulama değil de geniş delikli kazıklar olursa daha uygun oluyor)
      • Growbag Yetiştirme Torbası cocopeat
      • Su
      • Arduino
        • Arduino Nano
        • 3 Yönlü Switch
        • 5v Güç Kaynağı
        • 12v Güç Kaynağı
        • 12v Dalgıç Pompa
        • Arduino Relay Modülü Tekli
        • 2 adet direnç 10KΩ
        • I2C OLED Ekran
        • DS3231 RTC Saat Modülü
      • Bitki Besini
        • Kalsiyum Nitrat
        • Geri Kalanlar NPK Ca Mg Fe Zn Mn Cu

 

 

minisulamamodulu03simple_bb-75

İnternette bitki yetiştirme sistemleri ile ilgili çeşitli kaynaklar var. Otomasyon sistemlerinin ticari ve amatör versiyonları heryerde. Benim yaptığım sistem damlama sulama kazıklarını kullanıyor fakat tam olarak damlama sulama prensibi ile işlemiyorlar daha çok ana depodan transfer deposuna atılan suyu serbest akım torbaya aktarıyor. Bu çok verimli değil ama karavan pompaları sürekli çalışmaya dayanıklı pompalar değiller bu bakımdan sistem damlama sulamaya çok uygun değil. Benim kullandığım sistemin ismi “gravity feed” ya da “yerçekimi besleme sistemi” oluyor.

 

2016-06-06-09-39-41-large

Sitemin İşleyişi:

  • Su pompası saat başı çalışarak bitkilere su sağlıyor
  • SWITCH’in 2 görevi var:
    • Aşağıda iken: Saat başı sulama aktiftir
    • Yukarıda iken: Direk pompalama aktiftir, pompayı çalıştırır. ve bu durumda saatbaşı sulama 1 saat ileri atar
  • Ekran şu andaki saati ve son sulama saatini gösterir
/*
 Scanning...
 I2C device found at address 0x3C !
 I2C device found at address 0x57 !
 I2C device found at address 0x68 !
 done

/////Sulama Sıklığını potans ile yapacak şeyle getirebilirim.
//Sulama Güneş doğduktan 2 saat sonra başlayıp güneş batmadan 2-3 saat önce bitiyor.

*/



///////////////////////////SAAT ve TIMER MODULU
#include <Sodaq_DS3231.h>
#include <Wire.h> //DS3231 librarysi
char weekDay[][4] = {"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" };
//DateTime SetDateTo(2016, 8, 3, 20, 49, 10, 4); //see rtc.setDateTime(SetDateTo in setup. DIKKAT SADECE ILK KULLANIMDA SAAT AYARLAMAK ICIN. Daha sonra bu satir iptal edilip kod tekrar yüklenmeli.
//(Sene, Ay, Gun, Saat, Dakka, Saniye,Haftanin Gunu, Pazar 1. Gün).
String ZamanKisaString = " ";
int ZamanKisaInteger;
String DakikaDuzeltme;
String SaatDuzeltme;
int SonSulananZaman = 0;
int MyTimerMinuteCount = 0;
int MyTimerCheck =0;
///////////////////////////SAAT ve TIMERMODULU///////////////////////////////////////////////////////





///////////////////////////////////////////////////////////////////////////////EKRAN

#include "SSD1306Ascii.h"
#include "SSD1306AsciiWire.h"
#define I2C_ADDRESS 0x3C
SSD1306AsciiWire oled;
///////////////////////////////////////////////////////////////////////////////EKRAN//////////////////////////////////////////////////////////////////////////



///////MAIN LIBRARIES
#include <RunningAverage.h>
#include <elapsedMillis.h>
////////////////////////MAIN LIBRARIES///////////////////////


//////////////////DEFAULT

#define RELAY_CALIS 1
#define RELAY_DUR 0
#define SERIAL_DEBUG true // Enables/disables serial debugging
#include <FormattingSerialDebug.h>
//////////////////////////////////////////DEFAULT///////////////////////////////////////////////////////////////


/////////////SWITCH
#define DirekSulaSwitch 6
#define SensorSulaSwitch 8

///////////////////SWITCH////////////////////////////





////////////////////////////////*12* PUMP
unsigned int PompalamaSuresi = 12 * 1000; //pompanin calisma suresi. 32 saniye boyunca calisiyor.
//sulama parametlereleri: Yercekimi sisesi yaklasik 1.5 metre yukarıda iken bu sisseye
//32 saniyede 1140ml su akıyor.
//16 saniye iken 960ml ???
//2 x 32 iken 2000ml
#define RELAY1_ANA_SULAMA_POMPA 3

/////////////////////////////////*12* PUMP ///////////////////////////////////////////////




///////////////////////////////////////////////////////////////////////////////TAKVIMSEL SULAMA
int TakvimSulamaBaslangicSaati = 530; // 2 saatte bir sularsa 844 de sulayacak.
int TakvimSulamaBitisSaati = 2000;
unsigned int SulamaSikligi = 35; // "saatte bir."
unsigned int TakvimselPompalamaSuresi = 5 * 1000;
///////////////////////////////////////////////////////////////////////////////TAKVIMSEL SULAMA









void setup() { ///---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------SETUP





 ///////////////////////////SAAT MODULU
 Wire.begin();
 rtc.begin();
 // rtc.setDateTime(SetDateTo); //Adjust date-time as defined 'dt' above . DIKKAT SADECE ILK KULLANIMDA SAAT AYARLAMAK ICIN.
 ///////////////////////////SAAT MODULU///////////////////////////////////////////////////////


 ///////////////////////////////////////////////////////////////////////////////EKRAN
 oled.begin(&Adafruit128x64, I2C_ADDRESS);
 oled.set400kHz();
 oled.setFont(Arial_bold_14);
 ///////////////////////////////////////////////////////////////////////////////EKRAN//////////////////////////////////////////////////////////////////////////

 /////////////////////////////////////*12* POMPA SETUP
 pinMode(RELAY1_ANA_SULAMA_POMPA, OUTPUT);
 digitalWrite(RELAY1_ANA_SULAMA_POMPA, RELAY_DUR);
 /////////////////////////////////////*12* POMPA SETUP//////////////////////////////////////////////////


 ////////////////////SWITCH
 pinMode(DirekSulaSwitch, INPUT);
 pinMode(SensorSulaSwitch, INPUT);
 ////////////////////////SWITCH////////////////////////////////////


}///-------------------------------------------------------------------------------------------------------------------SETUP---------------------------------------------------------------------------------------------------




void loop() { ///---------------------------------------------------------------------------------------------------------LOOP

 DirekSulama();
 TakvimselSulama();
 delay(300);

 Ekran();
 GetSaat();

} ///---------------------------------------------------------------------------------------------------------LOOP



uint32_t getNow()
{
 return rtc.now().getEpoch();
}


void Ekran()
{
 oled.clear();

 oled.print("Sulama: ");

 if (digitalRead(DirekSulaSwitch) == 1) {
 oled.println("DIREK");
 }
 else if (digitalRead(SensorSulaSwitch) == 1) {
 oled.println("OTO SENSOR");
 }
 else if (digitalRead(SensorSulaSwitch) == 0 && digitalRead(DirekSulaSwitch) == 0 ) {
 oled.println(" OFF");
 oled.println(" ");
 }

 oled.print("Saat:"); oled.print(ZamanKisaInteger); oled.print("-"); oled.println(SonSulananZaman);

 

};





bool TakvimselSulamaCheck() //sulama saatleri arasında ise ve son sulama üzerinden SulamaSikligi kadar vakit geçtiyse.
{
 if ( ZamanKisaInteger >= TakvimSulamaBaslangicSaati && ZamanKisaInteger <= TakvimSulamaBitisSaati && MyTimerMinuteCount >= SulamaSikligi)
 {
 return true;
 }
 else {
 return false;
 }

};

/////////////////////////////////////////////////////////////////////////////// *12* POMPA



void DirekSulama()
{
 if (digitalRead(DirekSulaSwitch) == 1)
 {
 digitalWrite(RELAY1_ANA_SULAMA_POMPA, RELAY_CALIS);
 SonSulananZaman = ZamanKisaInteger;
 }
 else if (digitalRead(DirekSulaSwitch) == 0)
 {
 digitalWrite(RELAY1_ANA_SULAMA_POMPA, RELAY_DUR);
 }
}

void TakvimselSulama()
{
 if (digitalRead(SensorSulaSwitch) == 0 && digitalRead(DirekSulaSwitch) == 0 && TakvimselSulamaCheck() == 1)
 {
 elapsedMillis TakvimselPompalamaKrono; //pompanin calisma suresini kontrol eden kronometre
 while ( TakvimselPompalamaKrono < TakvimselPompalamaSuresi)
 {
 digitalWrite(RELAY1_ANA_SULAMA_POMPA, RELAY_CALIS);
 Serial.print("TakvimselPompalamaKrono:"); Serial.println(TakvimselPompalamaKrono / 1000);

 };
 SonSulananZaman = ZamanKisaInteger;
 TakvimselPompalamaKrono = 0;
 digitalWrite(RELAY1_ANA_SULAMA_POMPA, RELAY_DUR);
 MyTimerMinuteCount = 0;
 }

};

void GetSaat() {
 ///////////////////////////SAAT MODULU
 DateTime now = rtc.now();
 if (now.minute() >= 0 && now.minute() < 10)
 {
 DakikaDuzeltme = String(0) + String(now.minute());
 }
 else {
 DakikaDuzeltme = String(now.minute());
 }

 if (now.hour() == 0)
 {
 SaatDuzeltme = String(24);
 }
 else {
 SaatDuzeltme = String(now.hour());
 }
 Serial.print("Time Concatenate: ");
 ZamanKisaString = SaatDuzeltme + DakikaDuzeltme; //saat ile dakikayı birleştirdim böylece 23:30 ile 7:00 arasındaki zamana "2330 dan yüksek 700 den ufak" diyebileceğim...
 ZamanKisaInteger = ZamanKisaString.toInt();
 Serial.println(ZamanKisaInteger);
 Serial.print(now.year(), DEC); Serial.print('/'); Serial.print(now.month(), DEC);
 Serial.print('/');
 Serial.print(now.date(), DEC);
 Serial.print(' ');
 Serial.print(now.hour(), DEC);
 Serial.print(':');
 Serial.print(now.minute(), DEC);
 Serial.print(':');
 Serial.print(now.second(), DEC);
 Serial.println();
 Serial.print(weekDay[now.dayOfWeek()]);
 Serial.println();
 delay(1000);
 Serial.print(now.year());
 Serial.print('/');
 Serial.print(now.month());
 Serial.print('/');
 Serial.print(now.date());
 Serial.print(' ');
 Serial.print(now.hour());
 Serial.print(':');
 Serial.print(now.minute());
 Serial.print(':');
 Serial.print(now.second());
 Serial.println();
 Serial.print(weekDay[now.dayOfWeek()]);
 Serial.println();
 Serial.print("Dakika Duzeltme"); Serial.println(DakikaDuzeltme);

 if (now.minute() != MyTimerCheck) {
 MyTimerMinuteCount = MyTimerMinuteCount + 1;
 }
 MyTimerCheck =now.minute();
 
 Serial.print("================SonSulananZaman"); Serial.println(SonSulananZaman);
 
 Serial.print("************MyTimerMinuteCount"); Serial.println(MyTimerMinuteCount);
 ///////////////////////////SAAT MODULU////////////////////////////////////////////////////////////////////////////////////

}


 

Kodun Analizi

///////////////////////////SAAT ve TIMER MODULU

saat ayarlarının yapıldığı bölüm.

Kalibrasyon kodu da

//DateTime SetDateTo(2016, 8, 3, 20, 49, 10, 4); //see rtc.setDateTime(SetDateTo in setup. 
//DIKKAT SADECE ILK KULLANIMDA SAAT AYARLAMAK ICIN. Daha sonra bu satir iptal edilip 
//kod tekrar yüklenmeli.

kısmı.

unsigned int TakvimselPompalamaSuresi = 5 * 1000;

çalışma zamanı geldiğinde pompanın çalışma süresi. Bu her seferinde toplam pompalanan su da demek.

int TakvimSulamaBaslangicSaati = 530; // 2 saatte bir sularsa 844 de sulayacak.
int TakvimSulamaBitisSaati = 2000;
unsigned int SulamaSikligi = 35; // "saatte bir."

ile pompalama saatleri ayarlanıyor. Saat 7:30 ile akşam 7:59 arasında her 45 dakika bir pompalıyorum

 

Yapılması Gerekenler

 

1Sistem kurulduğunda bir saat kalibrasyonu gerekiyor. Kalibrasyon kodu commented out şekilde yukarıda mevcut.

2Depodan transfer deposuna ilettiğim besin eriyiklerinin damlama sulama sistemini tıkamaması için tel filtre koydum. Yetiştirme torbasına her 15cm de bir damlama sulama kazığı yerleştirmek gerek.

3Yetiştirme torbası, cocopeat kurulduğunda bir Kalsiyum Nitrat yüklemesi yapmak gerekiyor. Bizim kullanacağımız 100x20x16cm cocopeat torbalar için bu yükleme 22litre suya 96gram kalsiyum nitrat karıştırılarak yapılıyor.  5.8 pH olması ideal. Torbaları kesmeden önce sadece üzerlerine damlama çubuklarını takıp içeri su pompalıyoruz. 48 saat bekletiyoruz. 48 Saat sonra gerekli drenaj kesiklerini aşağıdaki gibi atıyoruz:

draining_holes

Ayrıca torbanın tam ortasındaki bir çentik birikimi engelliyor:

as2

4Besin eriyiklerini depoya su ile karıştırıyoruz. Buradan transfer deposuna aktarılan eriyikler yetiştirme torbasına yerçekimi ile ulaşıyorlar. Verilen besin eriyiğinin 5.5 ve 6.2 ph arasında olmasına dikkat etmeliyiz.

 

5Bir torbaya 1 metre için 3 ekim yaptım.

 

2016-06-06-09-39-41-large

 

6Sulama: Her seferinde 450ml olarak günde 10 kere sulamak lazım olabiliyor. Güneş doğduktan 2 saat sonra başlayıp güneş batmadan 2-3 saat önce bitiriliyor.  Daha fazla su bir seferinde verilirse false drain denilen bir olay meydana geliyor ve su suyu çekiyor yani verilen su cocopeat in içine işlemeden kenardan akıp gidiyor.

 

Sulama detayları için hazırlık yazısına bakılabilir:

Yetiştirme Torbasında (Growbag / grow slab) Domates Yetiştirmek 01 – Hazırlık

Leave a Reply