Anda di sini

Elektronika

[TUTORIAL] Menggunakan Sensor Kelembaban Tanah YL-39 dan YL-69 pada Arduino

Kusuma Wardana - 11 Juni 2016 21:45:08 21

Pendahuluan

Untuk aplikasi tertentu, misalnya pada penyiraman tanaman secara otomatis, kita memerlukan informasi mengenai kelembaban tanah untuk tanaman kita. Karena pengaruh suhu lingkungan, proses penguapan akan berpengaruh pada tingkat kelembaban tanah.

Saat ini telah banyak sensor kelembaban tanah yang beredar di pasaran dengan harga yang relatif terjangkau, salah satunya adalah kombinasi dari YL-39 (modul pengkondisian sinyal) dan YL-69 (probe sensor). Amatilah Gambar 1.

Gambar 1. Keterangan sensor kelembaban tanah

Modul sensor ini memiliki 4-pin, yaitu GND (untuk ground), VCC (3.3 - 5Volt), AO (keluaran analog yang akan dibaca oleh Arduino), dan DO (dapat diatur sensitivitasnya menggunakan knb pengatur, dan menghasilkan logika digital HIGH/LOW pada level kelembaban tertentu). Untuk saat ini, hanya tiga pin yang kita manfaatkan, yaitu GND, VCC dan AO.

Hardware

Rangkailah sensor dan Arduino seperti pada Gambar 2.

Gambar 2.Pemasangan sensor kelembaban tanah pada Arduino

Dalam penggunaan jangka panjang, memberikan tegangan terus-menerus pada probe akan mempercepat rusaknya probe tersebut, terutama saat tanah dominan dalam keadaan lembab. Oleh karena itu, salah satu alternatifnya adalah menempatan pin VCC pada salah satu pin digital (pada tutorial kali ini di pin 6), dan akan diaktifkan sesaat sebelum sensor mengambil data kelembaban.

Software

Bukalah IDE Arduino. Ketik dan upload-lah skrip di bawah ini. Keterangan program telah disertakan sebagai komentar.

int sensorPin = A0;  // pin sensor
int powerPin = 6;    // untuk pengganti VCC

void setup() {  
  // jadikan pin power sebagai output
  pinMode(powerPin, OUTPUT);
  // default bernilai LOW
  digitalWrite(powerPin, LOW);
  // mulai komunikasi serial
  Serial.begin(9600);
}

void loop() {
  Serial.print("Nilai kelembaban: ");
  Serial.println(bacaSensor());
  // baca setiap 5 detik
  delay(5000);
}

int bacaSensor() {
  // hidupkan power
  digitalWrite(powerPin, HIGH);
  delay(500);
  // baca nilai analog dari sensor
  int nilaiSensor = analogRead(sensorPin);
  digitalWrite(powerPin, LOW);
  // makin lembab maka makin tinggi nilai outputnya
  return 1023 - nilaiSensor;
}

Bukalah serial monitor dan amati hasilnya. Berikut contohnya:

Nilai kelembaban: 50
Nilai kelembaban: 52
Nilai kelembaban: 627
Nilai kelembaban: 635
Nilai kelembaban: 50

Makin lembab, maka sensor akan mengeluarkan nilai lebih besar. Demikian tutorial kali ini.. Semoga bermanfaat Smile

120.523
Image

Kusuma Wardana

I Nyoman Kusuma Wardana, yang akrab dipanggil Kusuma, lahir dan besar di Bali. Ia tinggal di Desa Wisata Ubud, dan lebih banyak melaksanakan aktivitasnya di Denpasar. Profesinya adalah sebagai staf pengajar di Jurusan Teknik Elektro, Politeknik Negeri Bali. Saat ini Ia menjadi salah satu penulis di tutorkeren.com.

Artikel Menarik Lainnya

Komentar

permisi mau tanya mengenai kodingan diatas. saya sudah coba kodingannya dan sudah dihubungkan ke sensornya, tapi ketika serial monitornya dibuka tidak menampilkan apapun. hanya kosong saja. butuh penjelasan dan penerangan mengenai hal tersebut. mohon dijawab. terima kasih

Halo mas, biasanya kalau tidak mau muncul di serial itu baud ratenya belum diset. Coba pada serial monitur arduino pada bagian pojok kanan bawah disetting dulu baud ratenya ke 9600.

HTSL://HIGH THINKING SIMPLE LIVING . ME

Permisi, maaf numpang tanya.. saya sudah coba codingan ini, tapi jika saya ingin hasilnya dalam bentuk persen bagaimana ya ? saya sudah mencoba menggunakan map arduino tapi hasilnya tidak berubah. Bagaimana ya ? mohon pencerahan. Terimakasih

Halo Mas,

Untuk menampilkan data sensor kekembapan dalam persen cara yg paling mudah memang menggunakan fungsi map, mungkin mas bisa coba potongan kode ini:

float persen = map(nilaiAnalogKelembapan,0,1023,0,100);

Saya selalu pakai itu untuk menampilkan dalam bentuk persen, silahkan dicoba jika masih tidak mau silahkan reply lagi

HTSL://HIGH THINKING SIMPLE LIVING . ME

Permisi gan mau bertanya, kenapa fungsi bacaSensor() yang agan buat harus memakai return 1023 - (nilai Sensor), padahal kalau diliat sekilas itu akan membalik nilai yang semula nya sensor membaca kelembaban, akan terbaca menjadi kering.
Sebagai contoh, misal nilai kelembaban tanah = 700, maka nilai fungsi bacaSensor(1023-700=323), malah kebaca mendekati nilai kering, padahal sebenarnya sensor membaca nilai tersebut adalah lembab.

Mohon penjelasannya, terimakasih

Halo,

nilai sensornya memang sengaja dibalik untuk mempermudah pembacaan dikondisi normal. Kalau tidak dibalik, pada kondisi normal nilainya akan terlalu kecil jadi sulit untuk dilakukan mapping ke persentase. Kondisi normal misalnya pada tanah biasa, tetapi jika sensor mau dipasang ke kondisi super basah (sepenuhnya nyelup ke air) maka tidak perlu dibalik nilainya. Biggrin

HTSL://HIGH THINKING SIMPLE LIVING . ME

Baik, terima kasih banyak mas atas penjelasannya.

Kalau boleh saya bertanya lagi, mas tau tidak bagaimana mekanisme pembacaan sensor YL-69. Apakah benar bahwa jika nilai kelembaban yang terbaca besar, maka resistansi yang dihasilkan oleh sensor besar juga sehingga output yang dihasilkan juga besar juga. Rentang 0-1023 itu merupakan besar nilai output analog sensor tsb sekitar 8 bit??

Mohon koreksian nya kalau saya salah.

Halo,

Untuk mekanisme pembacaan tipe sensor YL-69, ya memang seperti itu semuanya hanya soal resistensi. Sama saja dengan sensor analog lainnya. Dia mengukur nilai voltase yang berubah2 sesuai dengan kondisi hambatan dan arus (V = I x R). Hambatan dan arus ini tentunya berubah karena lingkungan, ketika bagian pengindera (probe) yang berbentuk seperti garpu itu dicelupin, maka ujung anoda dan katoda mulai bisa menghantarkan arus listrik sesuai dengan tingkat kelembapan (biasanya semakin lembap semakin mudah arus mengalir). Nilai voltase inilah yang dijadikan acuan oleh si ADC untuk mengetahui nilai kelembapan.

Untuk rentang 0-1023 itu karena AVR yang dipakai Arduino (ATMega 328) memiliki resolusi ADC sebesar 10Bit (2 ^ 10 = 1024) karena mulai dari 0 jadinya sampai 1023. Bukan bergantung pada nilai output sensor, nilai 1023 itu didapat dari nilai pembaca yang dalam hal ini adalah Arduino. Jadi si Arduino hanya bisa memapping/memetakan nilai 0 - 5V menjadi 0 - 1023. Biasanya semakin tinggi nilai resolusi ADC (pembaca) maka semakin akurat pembacaannnya.

Begitu kurang lebih, semoga bisa memperjelas Biggrin

HTSL://HIGH THINKING SIMPLE LIVING . ME

Permisi mas, mau bertanya sedikit, mudah-mudahan mas tidak bosan sharing ilmu di forum ini.

Pembacaan sensor YL-69 saya kok, semakin lembab maka semakin kecil yaa, apa kira-kira penyebab error nya mas, saya sudah cari datasheet dan komponen dari sensor tsb, namun saya masih belum mendapat titik terang dari permasalahan yang saya hadapi.

Tegangan masukan bagi sensor = 3,3v (saya menggunakan wemos).

Kodingan :

void setup() {
Serial.begin(115200);
}

void loop() {
delay(5000);

int yl = analogRead(A0); //pembacaan nilai sensor
int soil = map(yl,0,1023,0,100); //perubahan rentang nilai analog menjadi persentase

Serial.print("Kelembaban Tanah : ");
Serial.println(soil);
}

Halo Mas,

Terimakasih sudah berkunjung kesini Smile

Kebetulan sekali, saya juga ada project yang memerlukan pengukuran kelembapan tanah. Besok saya juga mau coba pasang YL-69 di ESP8266... tapi board saya pakai NodeMCU. Jadi saya dapat gambaran permasalahan yang mungkin terjadi jika menggunakan YL-69 pada board dengan logic 3.3V. Kodingan yang rencananya akan saya pakai untuk testing besok adalah kodingan seperti di tutorial diatas. Maka dari itu, silahkan mas pakai juga kodingan diatas, dan bandingkan hasilnya, apakah masih tetap mengecil atau tidak.

Silahkan dicopy biar tidak scroll keatas lagi:

int sensorPin = A0;  // pin sensor
int powerPin = D1;   // untuk pengganti VCC agar probe sensor tidak cepat korosi.
 
void setup() {  
  // jadikan pin power sebagai output
  pinMode(powerPin, OUTPUT);
  // default bernilai LOW
  digitalWrite(powerPin, LOW);
  // mulai komunikasi serial
  Serial.begin(9600);
}
 
void loop() {
  Serial.print("Nilai kelembaban: ");
  Serial.println(bacaSensor());
  // baca setiap 5 detik
  delay(5000);
}
 
int bacaSensor() {
  // hidupkan power
  digitalWrite(powerPin, HIGH);
  delay(500);
  // baca nilai analog dari sensor
  int nilaiSensor = analogRead(sensorPin);
  digitalWrite(powerPin, LOW);
  // makin lembab maka makin tinggi nilai outputnya
  nilaiSensor = 1023 - nilaiSensor;
  float persen = map(nilaiSensor,0,1023,0,100);
  return persen;
}

HTSL://HIGH THINKING SIMPLE LIVING . ME

Kode diatas tidak memberikan efek yang diharapkan, saat sudah dialirkan air, respon sensor tidak naik, cenderung stabil.

izin bertanya, apakah kodingan tersebut untuk mikrokontroler ardiuno atau node mcu, mohon penjelasannya, terimakasih

Halo mas, selamat siang, salam sejahtera bagi kita semua.

Kebetulan sekali, saya jga sedang meniliti sensor tsb, namun saya juga menemukan error, saat sensor di tancapkan ke tanah dan diberi air, nilai sensor menjadi tidak stabil, terkadang naik, terkadang turun. apa yaa mas penyebabnya?? Mohon pencerahannya.

Halo, selamat siang trimakasih sudah berkunjung Biggrin

Untuk sensor jenis ini memang agak sedikit tricky penggunaannya mas, hal ini karena ada banyak sekali vendor yang buat dengan harga yang sangat super murah jadi berimbas pada kualitas chip komparator maupun probenya.

Berdasarkan pengalaman kita disini, hal ini bisa diatasi melalui kalibrasi pada kode program seperti misalnya menetapkan nilai batas atas dan batas bawah yang normal, kemudian menambahkan sampling dengan cara membaca misalnya 100 kali kemudian dirata-ratakan untuk menghindari kesalahan pembacaan. Untuk mendapatkan nilai normalnya, kita bisa test pada kondisi yang ideal untuk batas atas dan batas bawah. Misalnya, untuk menentukan batas atas mas bisa celupkan ke tanah yang basahnya mas anggap sebagai basah yang paling maksimal, dan begitu juga untuk batas keringnya.

Perlu dicatat, beberapa chip komparator mungkin mengalami gangguan apabila dicelup ke media yang tidak ideal seperti misalnya air. Karena sensor jenis ini umumnya didesain untuk membaca kelembapan tanah, jadi untuk lebih pastinya harus diuji menggunakan tanah yang basah, bukan air saja.

Untuk kode program dari hasil eksperimen kita sedang kita tulis di tutorial terpisah, stay tune Help

HTSL://HIGH THINKING SIMPLE LIVING . ME

kang cara mengubah nilai yang terbaca sensor YL 69 ini agar bisa menjadi dalam % RH (relatif Humidity) yaitu satuan international gmna ya?? mohon bantuannya nuhun

HTSL://HIGH THINKING SIMPLE LIVING . ME

misi gan, mau nanya
sensor saya walau sudah di celup air kok ga bisa sampe 1023 ya nilainya? padahal coding dah sama dengan yang di atas dan kalo sudah dicelup paling dapet sekitar 700an. apakah sensor saya rusak atau emang segitu kemampuannya?

Halo Gan,

silahkan mampir ke sini gan, disini ada penjelasan dan koding terbaru untuk jenis sensor ini.

https://tutorkeren.com/artikel/kode-program-membaca-kelembapan-tanah-yl6...

Semoga bermanfaat. Emo 43

HTSL://HIGH THINKING SIMPLE LIVING . ME

Permisi, mo nanya untuk sensitivitas sensor yl-69 apa bisa di atur? Soalnya saya pakai buat ngukur kadar air biji bijian (gabah, jagung) ga bisa kebaca. Hasilnya tetep dibaca 0%. Terimakasih...

Halo,

Untuk sensor YL-69 tidak didesain untuk mengukur kelembapan/kadar air biji-bijian. Sebagai gantinya mungkin bisa pakai sensor kapasitan.

HTSL://HIGH THINKING SIMPLE LIVING . ME

selamat siang, izin bertanya min, ssaya menggunakan nodemcu esp8266, apakah kodingan tersebut bisa digunakan pada nodemcu esp8266? jika tidak bisa, minta bantuannya untuk kodingan nodemcu esp8266, terimkasih

Mari Gabung

Halo Emo 51 , Ada yang ingin disampaikan? Jangan sungkan untuk gabung diskusi ini. Silahkan Login dulu atau Daftar baru.