Bu tür bir sistemle, bitkilerinizi yalnızca gerektiğinde sulayabilir, aşırı sulama veya yetersiz sulamadan kaçınabilirsiniz. Böyle bir sistem kurmak istiyorsanız kesinlikle bir Toprak Nem Sensörüne ihtiyacınız olacaktır.
Toprak Nemi Ölçer Sensör Nasıl Çalışır?
Toprak nem sensörünün çalışması oldukça basittir. Açıkta kalan iki iletkenli çatal biçimli prob, direnci topraktaki su içeriğine göre değişen, değişken bir direnç (tıpkı bir
potansiyometre gibi) görevi görür .
Toprak nemi ile direnç ters orantılıdır:
- Topraktaki fazla su daha iyi iletkenlik anlamına gelir ve daha düşük bir direnç ile sonuçlanır.
- Topraktaki az su zayıf iletkenlik anlamına gelir ve daha yüksek dirençle sonuçlanır.
Sensör, dirence göre bir çıkış voltajı üretir.
Toprak Nemi Ölçer Sensör Donanımına Genel Bakış
Tipik bir toprak nem sensörünün iki bileşeni vardır.
Sensörün toprak nemini ölçmek için toprağa batırılan iki iletken (çatal prob) şeklindeki parçasıdır.
Probu Arduino'ya bağlayan elektronik parçadır. Modül, probun direncine göre bir çıkış voltajı üretir ve Analog Çıkış (AO) pini üzerinden arduinoya iletir.
Aynı sinyal, sayısallaştırmak için bir LM393 Yüksek Hassasiyetli Karşılaştırıcıya beslenir ve bir Dijital Çıkış (DO) pininde bulunur.
Modül, dijital çıkış pini (D
O) hassasiyet ayarlaması için yerleşik bir potansiyometreye sahiptir. Nem seviyesi eşik değerine aştığında, modül
LOW, aksi takdirde
HIGH çıkacaktır.
Bu işlem, belirli bir eşik değere ulaşıldığında ve bir eylemi tetiklemek istediğinizde çok kullanışlıdır. Örneğin, topraktaki nem seviyesi ayarladığınız eşiği geçtiğinde, su pompalamaya başlamak için röleyi etkinleştirebilirsiniz.
İpucu: Hassasiyeti artırmak için düğmeyi saat yönünde, azaltmak için saat yönünün tersine çevirin.
Bunun dışında modülde iki LED bulunur. Modüle güç verildiğinde
Güç LED'i yanar. Dijital çıkış
LOW olduğunda
Status LED yanar.
Toprak Nemi Ölçer Sensör Modülü Pinout
Toprak nem sensörünün kullanımı kolaydır ve sadece 4 pine sahiptir.
A0 (Analog Çıkış) pini, arduino'nuzdaki analog girişlerden birine bağlanır.
DO (Dijital Çıkış) pinini, arduino'daki herhangi bir dijital pinine veya doğrudan 5V röleye bağlayabilirsiniz.
VCC pini sensöre güç sağlar. Sensörü 3.3V - 5V arasında çalıştırmanız önerilir. Analog çıkışın sensör için hangi voltajın sağlandığına bağlı olarak değişeceğini lütfen unutmayın.
GND bir toprak bağlantısıdır.
Analog Çıkışı Kullanarak Toprak Nemi Algılama
Modülün hem analog hem de dijital çıkış sağladığını bildiğinizden, ilk denememiz için analog çıkışı okuyarak toprak nemini ölçeceğiz.
Kablolama
Toprak nem sensörünü Arduino'ya bağlayalım. Önce sensöre güç sağlamanız gerekir. Bunun için modüldeki
VCC pimini Arduino'daki 5V'ye bağlayabilirsiniz. Bununla birlikte, bu sensörler ile yaygın olarak bilinen bir sorun, nemli bir ortama maruz kaldıklarında kısa ömürlü olmalarıdır. Bunun üstesinden gelmek için, sensöre sürekli güç vermemenizi, ancak sadece okumaları aldığınızda güç vermenizi öneririz. Bunu yapmanın kolay bir yolu,
VCC pimini bir Arduino'nun dijital pimine bağlamak ve gereksiniminize göre
HIGH veya
LOW olarak ayarlamaktır. Ayrıca modül tarafından çekilen toplam güç (her iki LED yanıyorsa) yaklaşık 8 mA'dir. Bu nedenle modülü Arduino'daki dijital bir pimden kapatmak uygundur. Modüldeki
GND piminin 7 no'lu dijital pimine yani toprağa bağlayalım. Son olarak, modül üzerindeki
A0 pinini Arduino'nuzdaki ADC pinine bağlayın. Aşağıdaki görselde kablolama gösterilmektedir.
Ayarlama
Toprak nem sensörünüzden doğru ölçümler elde etmek için, öncelikle izlemeyi planladığınız belirli toprak türü için kalibre etmeniz önerilir. Farklı toprak türleri sensörü etkileyebilir, bu nedenle kullandığınız toprak türüne bağlı olarak sensörünüz az çok hassas olabilir. Toprak neme tamamen doygun hale geldiğinde, toprak mümkün olduğunca kuru olduğunda sensörünüzün hangi değerleri verdiğini not etmek için aşağıdaki kodu kullanın.
// Sensor pins
#define sensorPower 7
#define sensorPin A0
void setup() {
pinMode(sensorPower, OUTPUT);
// Initially keep the sensor OFF
digitalWrite(sensorPower, LOW);
Serial.begin(9600);
}
void loop() {
//get the reading from the function below and print it
Serial.print("Analog output: ");
Serial.println(readSensor());
delay(1000);
}
// This function returns the analog soil moisture measurement
int readSensor() {
digitalWrite(sensorPower, HIGH); // Turn the sensor ON
delay(10); // Allow power to settle
int val = analogRead(sensorPin); // Read the analog value form sensor
digitalWrite(sensorPower, LOW); // Turn the sensor OFF
return val; // Return analog moisture value
}
Kodu çalıştırdığınızda, aşağıdaki değerlere yakın değerler görürsünüz:
- Toprak Kuruduğunda (~ 850)
- Toprak Tamamen Islakken (~ 400)
Bu test biraz deneme yanılma gerektirebilir. Bu okumaları iyi bir şekilde ele aldığınızda, bir eylemi tetiklemek istiyorsanız bunları eşik olarak kullanabilirsiniz.
Son Kodlama
Kalibrasyon değerlerine dayanarak, aşağıdaki program toprağın durumunu belirlemek için aralıkları tanımlar:
- <500 çok ıslak
- 500-750 hedef aralıktır
- > 750 sulanacak kadar kuru
/* Change these values based on your calibration values */
#define soilWet 500 // Define max value we consider soil 'wet'
#define soilDry 750 // Define min value we consider soil 'dry'
// Sensor pins
#define sensorPower 7
#define sensorPin A0
void setup() {
pinMode(sensorPower, OUTPUT);
// Initially keep the sensor OFF
digitalWrite(sensorPower, LOW);
Serial.begin(9600);
}
void loop() {
//get the reading from the function below and print it
int moisture = readSensor();
Serial.print("Analog Output: ");
Serial.println(moisture);
// Determine status of our soil
if (moisture < soilWet) {
Serial.println("Status: Soil is too wet");
} else if (moisture >= soilWet && moisture < soilDry) {
Serial.println("Status: Soil moisture is perfect");
} else {
Serial.println("Status: Soil is too dry - time to water!");
}
delay(1000); // Take a reading every second for testing
// Normally you should take reading perhaps once or twice a day
Serial.println();
}
// This function returns the analog soil moisture measurement
int readSensor() {
digitalWrite(sensorPower, HIGH); // Turn the sensor ON
delay(10); // Allow power to settle
int val = analogRead(sensorPin); // Read the analog value form sensor
digitalWrite(sensorPower, LOW); // Turn the sensor OFF
return val; // Return analog moisture value
}
Her şey yolundaysa, ekran da aşağıdaki çıkışı görmelisiniz.
Dijital Çıkışı Kullanarak Toprak Nemi Algılama
İkinci deneyimiz için dijital çıktıyı kullanarak toprağın durumunu belirleyeceğiz.
Kablolama
Önceki örnekteki devreyi kullanacağız. Bu sefer sadece
ADC pinine olan bağlantıyı çıkarmamız ve modüldeki
DO pinini Arduino'daki 8 numaralı dijital pine bağlamamız gerekiyor. Devrenizi aşağıda gösterildiği gibi bağlayın:
Ayarlama
Modül, dijital çıkışı (DO) kalibre etmek için yerleşik bir potansiyometreye sahiptir. Potansiyometrenin düğmesini çevirerek bir eşik ayarlayabilirsiniz. Nem seviyesi eşik değerini aştığında, Durum LED'i yanacak ve modül LOW çıkacaktır.
Şimdi sensörü kalibre etmek için, bitki sulanmaya hazır olduğunda probu toprağa yerleştirin ve durum LED'i yanacak şekilde potu saat yönünde ayarlayın ve ardından LED sönene kadar potu saat yönünün tersine ayarlayın. Sensörünüz artık kalibre edilmiş ve kullanıma hazırdır.
Arduino Kodu
Devre kurulduktan sonra, aşağıdaki kodu Arduino'nuza yükleyin.
// Sensor pins
#define sensorPower 7
#define sensorPin 8
void setup() {
pinMode(sensorPower, OUTPUT);
// Initially keep the sensor OFF
digitalWrite(sensorPower, LOW);
Serial.begin(9600);
}
void loop() {
//get the reading from the function below and print it
int val = readSensor();
Serial.print("Digital Output: ");
Serial.println(val);
// Determine status of our soil moisture situation
if (val) {
Serial.println("Status: Soil is too dry - time to water!");
} else {
Serial.println("Status: Soil moisture is perfect");
}
delay(1000); // Take a reading every second for testing
// Normally you shoul take reading perhaps every 12 hours
Serial.println();
}
// This function returns the analog soil moisture measurement
int readSensor() {
digitalWrite(sensorPower, HIGH); // Turn the sensor ON
delay(10); // Allow power to settle
int val = digitalRead(sensorPin); // Read the analog value form sensor
digitalWrite(sensorPower, LOW); // Turn the sensor OFF
return val; // Return analog moisture value
}
Her şey yolundaysa, seri monitörde aşağıdaki çıkışı görmelisiniz.