Sử dụng cảm biến nước mưa (Rain Water Sensor) với Arduino

Sử dụng cảm biến nước mưa (Rain Water Sensor) với Arduino

Cảm biến nước mưa được sử dụng rộng rãi trong việc đo lường và giám sát lượng mưa. Với khả năng phát hiện và đo lường chính xác, cảm biến mưa giúp chúng ta nắm bắt thông tin quan trọng về môi trường xung quanh.

Lợi ích của cảm biến mưa arduino không chỉ giới hạn trong lĩnh vực dự báo thời tiết mà còn mở rộng đến các ứng dụng khác như tưới cây tự động, giàn phơi đồ tự động và nhiều lĩnh vực khác.

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 nước mưa 1 Shopee | Cytron
Dây cắm 1 Shopee | Cytron

Cảm biến nước mưa hoạt động như thế nào?

Cảm biến nước mưa hoạt động dựa trên nguyên lý cơ bản của dòng điện và dẫn điện. Khi nước mưa tiếp xúc với cảm biến, nó sẽ thay đổi tính dẫn điện của môi trường xung quanh. Cảm biến mưa thường được làm từ hai, thanh kim loại song song, và khi nước mưa chảy qua giữa hai thanh kim loại này, nó sẽ tạo thành một đường dẫn dòng điện.

Khi không có nước mưa, không có dòng điện chảy qua cảm biến và điện trở của nó là rất cao. Tuy nhiên, khi có nước mưa, nước sẽ làm ẩm và tạo một môi trường dẫn điện giữa hai thanh kim loại. Do đó, dòng điện sẽ chảy qua cảm biến và điện trở của nó giảm đi. Thay đổi điện trở này có thể được đo bằng việc sử dụng một mạch đo điện trở hoặc mạch chuyển đổi dòng điện.

Nguyên lý hoạt động của cảm biến nước mưa đơn giản và dễ hiểu. Khi nước mưa tiếp xúc với cảm biến, nó tạo ra sự thay đổi điện trở, cho phép nhận biết và đo lường mức độ mưa. Thông qua đo lường này, ta có thể thu thập dữ liệu về lượng mưa và sử dụng thông tin này cho các ứng dụng liên quan đến dự báo thời tiết, quản lý tài nguyên nước, kiểm soát tưới tiêu, và nhiều ứng dụng khác.

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

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

Đầu cảm biến (Bảng mạch)

Sử dụng cảm biến nước mưa (Rain Water Sensor) với Arduino

Đầu cảm biến thường được thiết kế dưới dạng một bảng mạch hoặc mạch in có các đường dẫn hoặc điện cực để tiếp xúc với nước mưa. Khi nước mưa rơi vào đầu cảm biến, nó sẽ tạo ra một mức điện áp hay một tín hiệu điện thay đổi.

Module cảm biến mưa

Sử dụng cảm biến nước mưa (Rain Water Sensor) với Arduino

Module cảm biến mưa sử dụng IC LM393 có khả năng so sánh hai tín hiệu điện và tạo ra một tín hiệu đầu ra dựa trên sự so sánh đó. Chip này được sử dụng để so sánh tín hiệu điện từ đầu cảm biến và tín hiệu tham chiếu để xác định sự hiện diện của nước mưa.

Sơ đồ mạch cảm biến mưa

  • VCC: Nguồn cấp cho module, kết nối với chân 5V trên Arduino hoặc nguồn cấp 5V khác.
  • GND: Kết nối với chân GND trên Arduino.
  • AOUT: Chân tín hiệu Analog Output, được kết nối với chân Analog trên Arduino để đọc giá trị đo đạc của cảm biến.
  • DOUT: Chân tín hiệu Digital Output, được kết nối với chân Digital trên Arduino để nhận tín hiệu đo đạc của cảm biến dưới dạng tín hiệu số.

Sơ đồ đấu nối cảm biến mưa với Arduino

Mình sẽ sử dụng chân Digital D0 của cảm biến nước mưa được kết nối đến chân số 8 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ưa này là tuổi thọ sẽ ngắn hơn khi thường xuyên tiếp xúc với môi trường xung quanh bị ẩm ướt. Việc liên tục cấp điện cho cảm biến 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 mình 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.

Điều chỉnh cảm biến mưa

Đầu cảm biến nước mưa không được điều chỉnh trực tiếp, vì nó hoạt động dựa trên nguyên lý dẫn điện của nước. Khi nước tiếp xúc với hai mạch kim loại trên cảm biến, nó tạo thành một đường dẫn dẫn điện và thay đổi trạng thái của đầu ra tín hiệu.

Tuy nhiên, các bạn có thể điều chỉnh ngưỡng độ ẩm để phù hợp với ứng dụng cụ thể của bạn bằng cách sử dụng mạch chuyển đổi trên module để xác định mức độ ẩm cần thiết để kích hoạt cảm biến.

Trên module của cảm biến bạn có thể sử dụng một biến trở (potentiometer) để điều chỉnh ngưỡng. Bằng cách điều chỉnh giá trị của resistor, bạn có thể thay đổi ngưỡng kích hoạt của cảm biến. Khi ngưỡng độ ẩm vượt qua giá trị được đặt, cảm biến sẽ kích hoạt và tạo ra tín hiệu.

Code cảm biến mưa

Trong đoạn code này, mình sẽ xây dựng một dự án phát hiện khi có trời mưa

Các bạn cần đặt đầu cảm biến mưa ở vị trí sao cho nước mưa có thể rơi trực tiếp vào cảm biến và đặt nó hơi nghiêng (~20°).

Lưu ý: Module cảm biến nước mưa không được thiết kế để chống thấm nước, hãy cẩn thận khi lắp đặt module này sao cho chỉ có đầu cảm biến tiếp xúc với nước.

// 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 rain
	if (val) {
		Serial.println("Status: Clear");
	} else {
		Serial.println("Status: It's raining");
	}

	delay(1000);	// Take a reading every second
	Serial.println();
}

//  This function returns the sensor output
int readSensor() {
	digitalWrite(sensorPower, HIGH);	// Turn the sensor ON
	delay(10);				// Allow power to settle
	int val = digitalRead(sensorPin);	// Read the sensor output
	digitalWrite(sensorPower, LOW);		// Turn the sensor OFF
	return val;				// Return the value
}

Các bạn có thể thấy trạng thái thay đổi khi có nước mưa tiếp xúc với bề mặt của cảm biến. Các bạn có thể xem thông qua Serial Monitor.

Giải thích code

// Sensor pins
#define sensorPower 7
#define sensorPin 8

Khai báo chân, hai chân được định nghĩa thông qua macro sensorPowersensorPin với giá trị tương ứng là 7 và 8.

void setup() {
	pinMode(sensorPower, OUTPUT);

	// Initially keep the sensor OFF
	digitalWrite(sensorPower, LOW);

	Serial.begin(9600);
}

Trong hàm setup(), chúng ta thiết lập chế độ OUTPUT cho chân sensorPower, tức là chân điều khiển nguồn của cảm biến. Sau đó, chúng ta đặt trạng thái LOW cho chân sensorPower để tắt cảm biến. Cuối cùng, chúng ta khởi tạo kết nối Serial để gửi dữ liệu qua cổng Serial với tốc độ 9600 baud.

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 rain
	if (val) {
		Serial.println("Status: Clear");
	} else {
		Serial.println("Status: It's raining");
	}

	delay(1000);	// Take a reading every second
	Serial.println();
}

Trong hàm loop(), gọi hàm readSensor() để đọc giá trị đầu ra của cảm biến và lưu vào biến val. Sau đó, sử dụng Serial để hiển thị giá trị và trạng thái của cảm biến. Nếu val là 1, tức là không có mưa và hiển thị “Status: Clear”. Ngược lại, nếu val là 0, tức là có mưa, hiển thị “Status: It’s raining”. Cuối cùng, delay 1 giây và tiếp tục vòng lặp.

int readSensor() {
	digitalWrite(sensorPower, HIGH);	// Turn the sensor ON
	delay(10);				// Allow power to settle
	int val = digitalRead(sensorPin);	// Read the sensor output
	digitalWrite(sensorPower, LOW);		// Turn the sensor OFF
	return val;				// Return the value
}

Hàm readSensor() được sử dụng để đọc giá trị đầu ra của cảm biến. Đầu tiên, đặt trạng thái HIGH cho chân sensorPower để bật cảm biến. Sau đó, chờ 10ms để cho nguồn điện ổn định. Tiếp theo, đọc giá trị từ chân sensorPin và lưu vào biến val. Cuối cùng, đặt trạng thái LOW cho chân sensorPower để tắt cảm biến và trả về giá trị val.

Bài viết liên quan

Subscribe
Notify of
guest

0 Comments
Inline Feedbacks
View all comments