Ngoprek Soil Moisture Sensor

Ini adalah catatanku dalam rangka membuat Garduino (gardening Arduino). Kalau kemarin sudah ngoprek sensor temperature & humidity (DHT11), kini tibalah saatnya ngoprek sensor yang sangat penting bagi tanaman, yaitu Soil Moisture Sensor. Sensor ini akan mengindera tanah dan mengirimkan nilai kelembaban tanah ke Arduino.

Dirakit di Protoshield ala Dewo

Dirakit di Protoshield ala Dewo

Sensor ini tinggal dicolokkan ke ProtoShield ala Dewo (*hehehe*). Setelah itu kita ngoprek program Arduino-nya. Program meneruskan yang telah dimuat tempo hari saat ngoprek DHT11 dengan perbaikan di sana-sini.

Dari website produsennya, nilai sensing Soil Moisture Sensor ini sebagai berikut:

0 ~300 : dry soil
300~700 : humid soil
700~950 : in water

Tancapkan sensor ke media di pot

Tancapkan sensor ke media di pot

Asyik juga mengamati nilai penginderaan saat sensor tertancap, tidak tertancap, dan dicelup ke air. Dari sini kita bisa mengira-ngira pada nilai berapa pompa air akan dinyalakan untuk menyiram tanaman.

Untuk menyalakan pompa air kita membutuhkan relay. Relay ini akan dikendalikan oleh Arduino. Saat sensor Soil Moisture menyentuh nilai ambang, maka Arduino akan mengaktifkan relay untuk menghidupkan pompa. Pompa akan dinyalakan selama durasi tertentu. Untuk proteksi, pompa akan dimatikan saat tanah sudah lembab/basah sesuai nilai ambang. Jadi walau durasi belum tercapai, tapi kalau nilai ambang sudah tercapai, maka pompa akan dimatikan.

Relay untuk menyalakan pompa air mini

Relay untuk menyalakan pompa air mini

Sayangnya daku belum punya pompa air mini, jadi untuk mensimulasikan penyalaan pompa air daku menggunakan LED hijau.

Anggaplah LED hijau itu pompa air mini. Relay juga punya LED utk menunjukkan keaktifannya

Anggaplah LED hijau itu pompa air mini. Relay juga punya LED utk menunjukkan keaktifannya

Program telah berjalan dengan baik. Ada beberapa perbaikan yang perlu dilakukan, yaitu pemisahan ambang bawah dan ambang atas. Ambang bawah menentukan penyalaan pompa air. Jika pengindera menunjukkan angka di bawah ambang bawah, maka pompa air akan diaktifkan. Jika kelembaban telah menyentuh nilai ambang atas, maka pompa dimatikan.

Tetapi pompa dibatasi nyalanya selama durasi tertentu. Walau pun ambang atas belum tercapai, tetapi jika durasi nyala pompa telah lewat, maka pompa dimatikan. Setelah dimatikan, pompa air akan diistirahatkan selama waktu jeda. Pompa tidak bisa dinyalakan sebelum waktu jeda terlampaui walau pun nilai penginderaan di bawah ambang bawah.

Ini sekedar proteksi supaya pompa awet dan tidak terjadi kebanjiran. Terus terang ini penyempurnaan dari beberapa kasus Garduino yang ada di internet. Jadi Garduino ala Dewo harus lebih baik dari Garduino yang lain. Hehehe…

// Project Name: Gardening Arduino
// Start: 02/09/2012
// Started by Dewo, setio.dewo@gmail.com, https://dewo.wordpress.com

#include <dht11.h>

dht11 DHT;
#define DHT_pin 0
#define DHT_jeda 5000
#define DHT_max_temp 27
#define DHT_LED_pin 10
#define DHT_LED_jeda 1000

// the sensor value description
// 0  ~300     dry soil
// 300~700     humid soil
// 700~950     in water
#define SOIL_pin 1        // pin sensor
#define SOIL_jeda 5000    // jeda sensing
#define SOIL_ambang 500   // nilai ambang penyalaan pompa
#define SOIL_LED_pin 11   // pin indikator sensor soil moisture
#define SOIL_LED_jeda 1000 // jeda blink

#define watering_pin 3       // pin relay pompa air
#define watering_jeda 10000  // jeda antara pengairan dgn pengairan berikutnya
#define watering_lama 5000   // lama pengairan. dibatasi supaya tdk banjir

unsigned long DHT_millis = 0;
unsigned long DHT_LED_millis = 0;
boolean DHT_blink = false;
boolean DHT_LED_state = LOW;

unsigned long SOIL_millis = 0;
unsigned long SOIL_LED_millis = 0;
boolean SOIL_blink = false;
boolean SOIL_LED_state = LOW;

unsigned long watering_jeda_millis = 0;
unsigned long watering_lama_millis = 0;
boolean watering_state = LOW;

void setup() {
  Serial.begin(9600);
  pinMode(DHT_LED_pin, OUTPUT);
  pinMode(SOIL_LED_pin, OUTPUT);
  pinMode(watering_pin, OUTPUT);
}

void loop() {
  DHT_read();
  DHT_LED_blink();
  SOIL_read();
  SOIL_LED_blink();
}

void watering() {
  unsigned long jeda = millis();
  if (jeda - watering_jeda_millis > watering_jeda) {
    watering_jeda_millis = jeda;
    if (watering_state == HIGH) { // jika pompa masih nyala
      unsigned long lama = millis();
      if (lama - watering_lama_millis > watering_lama) {
        watering_lama_millis = lama;
        watering_state = LOW;
        Serial.println("Matikan pompa karena lama menyala\n");
      }
    }
    else { // jika pompa mati, maka nyalakan pompa
      watering_lama_millis = millis();
      watering_state = HIGH;
      Serial.println("Menyalakan pompa krn kekeringan\n");
    }
    digitalWrite(watering_pin, watering_state);
  }
}

void DHT_LED_blink() {
  unsigned long DHT_LED_current = millis();
  if (DHT_blink) {
    if (DHT_LED_current - DHT_LED_millis > DHT_LED_jeda) {
      DHT_LED_millis = DHT_LED_current;
      if (DHT_LED_state == LOW) DHT_LED_state = HIGH;
      else DHT_LED_state = LOW;
    }
    digitalWrite(DHT_LED_pin, DHT_LED_state);
  }
  else digitalWrite(DHT_LED_pin, LOW);
}

void SOIL_LED_blink() {
  unsigned long SOIL_LED_current = millis();
  if (SOIL_blink) {
    if (SOIL_LED_current - SOIL_LED_millis > SOIL_LED_jeda) {
      SOIL_LED_millis = SOIL_LED_current;
      if (SOIL_LED_state == LOW) SOIL_LED_state = HIGH;
      else  SOIL_LED_state = LOW;
    }
    digitalWrite(SOIL_LED_pin, SOIL_LED_state);
  }
  else digitalWrite(SOIL_LED_pin, LOW);
}

void SOIL_read() {
  unsigned long SOIL_current = millis();
  if (SOIL_current - SOIL_millis > SOIL_jeda) {
    SOIL_millis = SOIL_current;
    int SOIL_val = analogRead(SOIL_pin);
    Serial.print("Soil: ");
    Serial.println(SOIL_val);
    Serial.print("\n");
    
    if (SOIL_val < SOIL_ambang) {
      SOIL_blink = true;
      watering();
    }
    else {
      SOIL_blink = false;
      if (watering_state == HIGH) {
        watering_state = LOW;
        digitalWrite(watering_pin, watering_state); // segera matikan saat sudah humid
        Serial.println("Mematikan pompa karena sudah basah\n");
      }
    }
  }
}

void DHT_read() {
  unsigned long DHT_current = millis();
  if (DHT_current - DHT_millis > DHT_jeda) {
    DHT_millis = DHT_current;
    int DHT_chk = DHT.read(DHT_pin);
    switch(DHT_chk) {
      case DHTLIB_OK:
        //Serial.println("OK");
        break;
      case DHTLIB_ERROR_CHECKSUM:
        Serial.println("Checksum error");
        break;
      case DHTLIB_ERROR_TIMEOUT:
        Serial.println("Time out error");
        break;
      default:
        Serial.println("Unknown error");
        break;
    }
    // Apakah melebihi batas yg ditentukan?
    String alert_temp = "";
    // (>27)
    if (DHT.temperature >= DHT_max_temp) {
      DHT_blink = true;
      alert_temp.concat("(*>=");
      alert_temp.concat((String)DHT_max_temp);
      alert_temp.concat(")");
    }
    else DHT_blink = false;
    // Kirimkan nilai ke serial
    Serial.print("Suhu: ");
    Serial.print((float)DHT.temperature, 2);
    Serial.println(alert_temp);
    Serial.print("Kelembaban: ");
    Serial.println((float)DHT.humidity, 2);
    Serial.print("\n");
  }
}

Di bawah ini foto prototype Garduino yang berjalan dengan catu daya mandiri. Dua LED di ProtoShield ala Dewo menjadi indikator nilai sensor Temperatur & Humidity dan Soil Moisture. Jika temperatur melebihi 27 Celcius, maka LED di sebelah kiri akan berkedip. Jika nilai kelembaban tanah kurang dari 500, maka LED di sebelah kanan akan berkedip.

Pin yang digunakan untuk LED indikator temperatur & humidity daku ubah dari program terdahulu, dari pin 13 ke pin 10.

Jalankan prototype semalaman untuk ngetest stabilitasnya

Jalankan prototype semalaman untuk ngetest stabilitasnya

Proyek Garduino ini masih ada lanjutannya, selain memasang pompa air mini, daku juga perlu ngoprek sensor Ambient Light. Fungsinya untuk menyalakan lampu (*seharusnya sih growing light*) jika cahaya sekitar kurang untuk menunjang fotosintesis.

Oh iya, kalau ada masukan, saran atau kritik, silakan mengisi komentar di bawah ya? Pasti asyik bisa mendiskusikan banyak hal bersama-sama. Sampai jumpa di acara ngoprek berikutnya.

Iklan

Tentang Emanuel Setio Dewo

Tumbuh, Berkembang, Berbuah...
Pos ini dipublikasikan di Arduino, Catatan, Code, Dewo, Elektronika, Foto, Personal, Prototype, Tanaman dan tag , , , , . Tandai permalink.

29 Balasan ke Ngoprek Soil Moisture Sensor

  1. Ping balik: Membuat PCB untuk Proyek Garduino | ♪ Emanuel Setio Dewo ♪

  2. Ping balik: Ngoprek Sensor Ambient Light | ♪ Emanuel Setio Dewo ♪

  3. untitled berkata:

    sya jg mw buat beginian ni gan..
    tapi bingung cara hubungin relay ke pompanya sma arduinony gmn..
    bikin tutorial cara ngrangkainy dnk gan.. 😀

  4. Ping balik: Prototype Garduino ala Dewo versi 1 | ♪ Emanuel Setio Dewo ♪

  5. Ping balik: Lebih Asyik dengan LCD Display | ♪ Emanuel Setio Dewo ♪

  6. Ping balik: Membuat Nilai Referensi Analog | ♪ Emanuel Setio Dewo ♪

  7. bayu berkata:

    mas, saya minta tolong nih…..
    sebenarnya saya malu nih,
    saya dapat tugas dari dosen, disurh bikin pengukur kelembaban tanah dengan menggunakan soil moisture sensor(seperti punya mas dewo)….tapi saya berkali2 coba gagal terus.barang kali bersedia bantu saya mas…krim via email proyek mas dewo, lengkap dari awal sampai akhir
    bayusurya86@yahoo.com
    terimakasih mas…
    sekali lagi mohon bantuannya….

  8. bayu berkata:

    mas, saya minta tolong nih…..
    sebenarnya saya malu nih,
    saya dapat tugas dari dosen, disurh bikin pengukur kelembaban tanah dengan menggunakan soil moisture sensor(seperti punya mas dewo)….tapi saya berkali2 coba gagal terus.barang kali bersedia bantu saya mas…krim via email proyek mas dewo, lengkap dari awal sampai akhir
    bayusurya86@yahoo.com
    terimakasih mas…
    sekali lagi mohon bantuannya….

  9. snackmaniz berkata:

    mas, saya mau tanya, sensor mouisture ini bisa dikoneksikan dengan BASCOM AVR tidak?….

  10. fachrul berkata:

    mau tanya mas..sensor soil mouisturenya pake tipe ap y mas?trims

  11. omponkneutron berkata:

    itu fungsi dht 11 buat apa mas? kan udh ada sensor kelembaban tanahnya, mohon pencerahannya

  12. INRA SIMANJUNTAK berkata:

    mas..bisa kirim gambar rangkaian ny

    email saya inra_cmanzuntx@yahoo.co.id

    trima kasih

  13. noor syamiera berkata:

    hello.
    saya butuh bantuan kamu
    saya mau guna project ini sebagai projek saya di universitas
    jadi saya butuh full documentation projek ini
    ini email saya : myemye13@yahoo.com

  14. Anas berkata:

    mas permisi sensor moisturenya bekerja jika pada kondisi tertentu kan ya. Berati pokok bahasannya dibatasi pada fuzzy logic ya? Atau bisa juga menggunakan jaringan syaraf tiruan? Mohon dibalas dan kalo sempat email saya anasrhepon@gmail.com. Thanks

  15. hasby nasrulloh berkata:

    Mau tanya ini sistem penyiraman Air gmn ?? mengunakan aplikasi apa ya ?? Thanks k

  16. hermawanciota berkata:

    om kirimin donk sistem Soil Moisture Sensor dan ambien sensor ,, gmn sistem kerja nya
    kirim ke hermawncipta@gmail.com ya

  17. Ari berkata:

    Bang ada kontak yang bisa dihubungi?

  18. agus salim berkata:

    saya lamyan paham dengan sistem kerja alat ini, tapi bagaimana mengaplikasikannya saat tanah kering atau tidak lembab, tanah kekurangan bnyak kelembaban pada saat siang hari, padahal dari bnyak dari penelitian mengatakan sangat merugikan bagi tanam jika disiram pada siang hari, karena di siang hari tersebut tanaman sedang melakukan fotosintetis.
    saya harap pembuat dapat membalas.
    trimakasi

  19. bryan pada Desember 7, 2016 pukul 10:50
    1 0 Rate This
    ternyata buka hanya saya saja yg kebingungan cara menghubungkan Relay ke Kompa air

    Mas Dewo, jadi bagaimana dgn hal 👆
    Saya awam hal spt ini, sdg berencana membuat sistim pengairan pasang-surut memakai sensor kelembaban.
    Cara menyatukan arduino ini dengan pompa air bagaimana?
    Lalu jns pompa air AC atau DC? Saya berencana memakai Selenoid Valve.

    Trm ksh jk berkenan menjawab.

    🙏

  20. novian berkata:

    gan bole minta project lengkapnya unutk saya pelajari lebih lanjut skalian praktekin gan..
    Thx b4..

  21. Sidak berkata:

    Permisi mas mau bertanya, apakah mas tau gmna mekanisme kerja dari sensor yl-69 sehingga mengeluarkan output sebagaimana yang seharusnya?

Tinggalkan Balasan

Isikan data di bawah atau klik salah satu ikon untuk log in:

Logo WordPress.com

You are commenting using your WordPress.com account. Logout / Ubah )

Gambar Twitter

You are commenting using your Twitter account. Logout / Ubah )

Foto Facebook

You are commenting using your Facebook account. Logout / Ubah )

Foto Google+

You are commenting using your Google+ account. Logout / Ubah )

Connecting to %s