Arduino Toprak Nem Sensörü Kullanımı, Projesi, Bağlantısı (Nem Ölçer) | Robocombo

Arduino Toprak Nem Sensörü Kullanımı, Projesi, Bağlantısı (Nem Ölçer) | Robocombo
 

'Akıllı Sera' terimini duyduğunuzda aklınıza ilk gelen şey toprak nemini ölçen (arduino toprak nemi ölçüm cihazı - nem ölçer) ve bitkilerinizi otomatik olarak sulayan bir sistemdir.

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.
  • Prob
Sensörün toprak nemini ölçmek için toprağa batırılan iki iletken (çatal prob) şeklindeki parçasıdır.
  • Modül
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 (DO) 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.
 
Etiketler: Arduino ile toprak nem sensörü kullanımı
Ekim 17, 2021
Listeye dön
Çerez Uyarısı

Alışveriş deneyiminizi iyileştirmek için yasal düzenlemelere uygun çerezler (cookies) kullanıyoruz. Detaylı bilgiye Gizlilik ve Çerez Politikası
sayfamızdan erişebilirsiniz.