Sử dụng cảm biến độ ẩm đất (Soil Moisture Sensor) với Arduino

Sử dụng cảm biến độ ẩm đất (Soil Moisture Sensor) với Arduino

Cảm biến độ ẩm đất là một giải pháp được ứng dụng trong lĩnh vực nông nghiệp như chăm sóc cây trồng, giúp giám sát và điều chỉnh mức độ ẩm trong đất một cách chính xác và hiệu quả. Việc sử dụng cảm biến đất không chỉ mang lại lợi ích về tiết kiệm nước và tối ưu hóa việc tưới tiêu, mà còn giúp nâng cao hiệu suất cây trồng và bảo vệ môi trường.

Thông qua bài viết này sẽ giới thiệu về lợi ích của cảm biến đo độ ẩm đất và cách ứng dụng nó trong nông nghiệp qua đó còn giúp cho các bạn hiểu thêm cách lập trình cảm biến độ ẩm đất với Arduino.

Đọc thêm: Hướng dẫn sử dụng cảm biến độ ẩm điện dung với Arduino

Các linh kiện cần thiết cho dự án

TÊN LINH KIỆN SỐ LƯỢNG NƠI BÁN
Arduino Uno R3 1 Shopee | Cytron
Cảm biến độ ẩm đất 1 Shopee | Cytron
Dây cắm 1 Shopee | Cytron

Cảm biến độ ẩm đất hoạt động như thế nào?

Nguyên lý cảm biến độ ẩm đất dựa trên sự tương tác giữa đất và điện trở. Khi đất ẩm, nước trong đất sẽ làm tăng khả năng dẫn điện của đất. Cảm biến độ ẩm đất sử dụng hai đầu cảm biến hoặc điện cực để đo điện trở của môi trường đất.

Cảm biến thường được làm từ hai đầu kim loại không rỉ như thép không gỉ hoặc đồng. Hai đầu kim loại này được chìm vào đất để tiếp xúc với đất xung quanh. Khi đất ẩm, nước trong đất sẽ tạo thành một lớp dẫn điện xung quanh các đầu kim loại, làm tăng khả năng dẫn điện của môi trường.

Cảm biến sẽ đo điện trở giữa hai đầu kim loại để xác định mức độ ẩm của đất. Khi đất khô, điện trở sẽ cao vì không có nước để tạo dẫn điện. Ngược lại, khi đất ẩm, điện trở sẽ thấp hơn do sự dẫn điện của nước trong đất.

Đọc thêm: Phát hiện mưa (Rain Sensor) sử dụng NodeMCU ESP8266

Tổng quan về phần cứng

Đầu cảm biến

Đầu cảm biến là phần tiếp xúc trực tiếp với đất để đo độ ẩm. Thường là hai đầu kim loại không rỉ như thép không gỉ hoặc đồng được chìm vào đất. Hai đầu kim loại này tạo ra một không gian tiếp xúc với đất, cho phép nước trong đất tương tác với chúng.

Module

Module cảm biến độ ẩm đất sử dụng một mạch so sánh LM393 để so sánh tín hiệu đầu ra từ bộ điện cực với một ngưỡng (threshold). Khi độ ẩm của đất vượt qua ngưỡng đã được cài đặt, mạch so sánh sẽ tạo ra tín hiệu đầu ra để biểu thị trạng thái độ ẩm của đất.

Để module hoạt động, thông thường nó sẽ được cung cấp nguồn điện DC từ 3.3V đến 5V. Có thể lấy trực tiếp từ board Arduino.

Sơ đồ chân cảm biến độ ẩm đất

Module cảm biến độ ẩm đất có 4 chân như hình bên dưới:

  • VCC: Chân cung cấp nguồn cho cảm biến (thường là 3.3V hoặc 5V).
  • GND: Chân đất (Ground).
  • AO (Analog Output): Chân đầu ra analog, cung cấp tín hiệu analog tương ứng với độ ẩm của đất.
  • DO (Digital Output): Chân đầu ra Digital, tạo ra tín hiệu số để biểu thị trạng thái độ ẩm của đất.

Đo độ ẩm của đất sử dụng chân Analog (A0)

Trong thí nghiệm đầu tiên này mình sẽ dùng một chân Analog (AO) để tìm ra các giá trị ngưỡng của cảm biến đất, hãy cùng mình thí nghiệm dự án thú vị này nhé.

Sơ đồ đấu nối

Chân Analog Output (AO) của cảm biến độ ẩm đất được kết nối đến chân A0 của board Arduino Uno R3. Chân VCC của cảm biến được kết nối đến nguồn cấp 5V của Arduino, và chân GND của cảm biến được kết nối đến chân GND.

Tuy nhiên, một vấn đề của module cảm biến độ ẩm đất này là tuổi thọ sẽ ngắn hơn khi thường xuyên tiếp xúc với độ ẩm. Việc liên tục cấp điện cho cảm biến trong khi chôn trong đất làm tăng tốc độ ăn mòn.

Để hạn chế vấn này, chỉ nên bật cảm biến khi đọc kết quả.

Vì vậy sẽ đấu nối chân nguồn của cảm biến với chân Digital trên Arduino và đặt nó ở mức CAO hoặc THẤP khi cần. Vì vậy, mình sẽ nối chân VCC với chân số 7 của Arduino.

Cách tìm các giá trị ngưỡng của cảm biến đất

Dưới đây là một đoạn Code dùng để đọc giá trị từ chân Analog (A0) và hiển thị giá trị đó trên Serial Monitor.

// 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
}

Để xác định giá trị ngưỡng, chúng ta sẽ đặt cảm biến độ ẩm đất vào hai trạng thái khác nhau, chẳng hạn là “đất khô”“đất ẩm”. Theo dõi giá trị xuất hiện trên Serial Monitor khi cảm biến độ ẩm đất arduino ở mỗi trạng thái. Sau khi quan sát thì mình đưa ra 2 giá trị ngưỡng như sau:

  • Đất khô khoảng 850
  • Đất ẩm ướt khoảng 400

Xem ngay: Cảm biến độ ẩm | Hệ thống tưới tự động sử dụng Arduino

Code demo

Dưới đây sẽ là một ví dụ sử dụng ngưỡng để đo độ ẩm của đất:

  • < 500 là ẩm ướt
  • 500-750 trong phạm vi không cần tưới
  • > 750 đất khô cần phải tưới
/* 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
}

Các bạn có thể theo dõi các ngưỡng giá trị qua Serial Monitor.

Đo độ ẩm của đất sử dụng chân Digital (D0)

Tiếp theo, trong thí nghiệm này thay vì sử dụng chân Analog, mình sẽ dùng một chân Digital của Arduino để xác định ngưỡng của cảm biến độ ẩm đất, hãy cùng theo chân mình để tìm hiểu sự khác biệt giữa Analog và Digital nhé.

Sơ đồ đấu nối

Tương tự như sơ đồ trên, chân VCC của cảm biến được kết nối chân số 7 của Arduino, và chân GND của cảm biến được kết nối đến chân GND và chân dùng để đọc tín hiệu mình sẽ dùng chân số 8 trên board Arduino Uno R3 nhé.

Đặt giá trị ngưỡng cho cảm biến độ ẩm đất

Trên module cảm biến độ ẩm đất có một biến trở dùng để đặt ngưỡng độ ẩm, tín hiệu sẽ xuất ra mức THẤP và trạng thái đèn LED sáng lên (Đất ẩm ướt) và ngược lại.

Code demo

// 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
}

Đây là kết quả, trạng thái của cảm biến độ ẩm đất sẽ xuất hiện qua Serial Monitor.

Bài viết liên quan

Subscribe
Notify of
guest

0 Comments
Inline Feedbacks
View all comments