Giả sử nhà bạn nấu cơm bằng bếp gas. Bạn bắc nồi cơm lên bếp gas, nghĩ trong đầu: "Ngồi lướt TikTok 5 phút rồi ...quay lại làm...bếp trưởng". TikTok có ma lực kỳ lạ, 5 phút biến thành 1 tiếng rưỡi. Khi "bếp trưởng" là bạn hớt hải chạy vào bếp, nồi cơm đã tiến hóa thành một nồi... than đen tuyền, bốc khói nghi ngút, và nếu muốn, "ngài bếp trưởng" sẽ được thưởng thức món "đặc sản"...cơm đen!
Bạn có một chậu cây nhỏ trên bàn làm việc.
Mỗi sáng nhìn thấy cây vẫn xanh, bạn nghĩ: "Hôm nay chắc chưa cần tưới."
Đến hôm sau bận quá, quên mất.
Vài ngày sau, nhìn lại thì chiếc cây đang có vẻ muốn gửi đơn xin...đi xa!
Nếu có một thiết bị tự nhận biết đất khô và tự tưới nước thì sao?
Nghe có vẻ giống một hệ thống Smart Garden vài trăm đô. Nhưng thực ra, chúng ta có thể làm một phiên bản mini bằng Arduino, cảm biến độ ẩm đất và một máy bơm nước nhỏ.
Dự án này sẽ kết hợp những thứ rất thú vị:
- Cảm biến để nhận biết tình trạng đất.
- Arduino để xử lý dữ liệu.
- MOSFET để điều khiển máy bơm.
- Một chút lập trình để hệ thống tự quyết định khi nào cần tưới.
Và quan trọng nhất: chúng ta sẽ làm từng bước, kể cả cách đọc giá trị cảm biến trên máy tính. Không có chuyện bảo người mới tìm hiểu "cứ đo đi", cứ "cắm vào đi", hay cứ theo hình vẽ mà làm...rồi để họ tự đoán xem phải làm gì!
Hệ thống tưới cây tự động hoạt động như thế nào?
Nguyên lý rất đơn giản:
- Cảm biến đo độ ẩm trong đất.
- Arduino đọc dữ liệu từ cảm biến.
- Nếu đất quá khô, Arduino bật máy bơm.
- Khi đất đủ ẩm, Arduino tắt máy bơm.
Luồng hoạt động:
CẢM BIẾN ĐỘ ẨM ĐẤT
|
v
ARDUINO ĐỌC DỮ LIỆU
|
v
ĐẤT CÓ QUÁ KHÔ?
/ \
Có Không
| |
v v
BẬT MÁY BƠM GIỮ MÁY BƠM TẮT
|
v
ĐẤT ĐỦ ẨM?
|
v
TẮT MÁY BƠM
Đây chính là một hệ thống Automation cơ bản:
Sensor → Controller → Output
Không cần AI, không cần Internet, cũng không cần ứng dụng điện thoại.
Chỉ cần Arduino biết đọc dữ liệu và thực hiện đúng điều kiện mà chúng ta lập trình.
Những linh kiện cần cho dự án
Để làm phiên bản đầu tiên, chúng ta cần:
| Linh kiện | Số lượng | Công dụng |
|---|---|---|
| Arduino UNO R3 hoặc Nano | 1 | Bộ điều khiển |
| Cảm biến độ ẩm đất loại điện dung | 1 | Đo độ ẩm đất |
| Máy bơm nước mini DC 5V | 1 | Bơm nước |
| Module MOSFET logic-level | 1 | Đóng/ngắt máy bơm |
| Breadboard | 1 | Thử nghiệm mạch |
| Dây Jumper | Một vài sợi | Nối mạch |
| Điện trở 1kΩ | 1 | Có thể dùng cho một số module điều khiển nếu cần theo thiết kế |
| Nguồn 5V phù hợp | 1 | Cấp điện cho máy bơm |
Ngoài ra, chuẩn bị một chậu cây nhỏ, một cốc nước và một chiếc hộp hoặc bình chứa nước.
Lưu ý khi mua linh kiện:
- Nên chọn cảm biến độ ẩm đất loại điện dung (Capacitive Soil Moisture Sensor), thay vì loại điện trở có hai thanh kim loại trần. Loại điện dung thường ít bị ăn mòn hơn khi sử dụng lâu dài.
- Máy bơm cần đúng loại 5V DC và có thông số dòng điện rõ ràng.
- Module MOSFET phải là loại logic-level, hoạt động tốt với tín hiệu điều khiển 5V từ Arduino.
- Nguồn máy bơm phải đáp ứng được dòng điện mà máy bơm yêu cầu. Không lấy nguồn USB của Arduino để cấp trực tiếp cho máy bơm. Tốt nhất là loại đổi từ điện xoay chiều qua một chiều có nhiều mức điện áp ra như 5V, 7V, 9V, 12V...
Bước đầu tiên: Đọc cảm biến độ ẩm đất
Trước khi điều khiển máy bơm, chúng ta cần biết cảm biến đang đọc được giá trị gì.
Đây là bước rất quan trọng.
Nếu chưa biết đất khô tương ứng với con số nào, đất ướt tương ứng với con số nào, chúng ta chưa thể lập trình chính xác.
Nối cảm biến với Arduino
Cảm biến độ ẩm đất loại điện dung thường có ba chân:
- VCC: Cấp nguồn.
- GND: Nối đất.
- AOUT hoặc AO: Xuất tín hiệu analog.
Nối cảm biến với Arduino như sau:
| Cảm biến | Arduino UNO |
|---|---|
| VCC | 5V hoặc mức nguồn theo thông số module |
| GND | GND |
| AOUT | A0 |
Nếu dùng Arduino Nano, cách nối tương tự.
Không cắm cảm biến vào đất ngay. Trước tiên hãy để cảm biến ngoài không khí để thử đọc dữ liệu.
Viết chương trình đọc cảm biến
Mở Arduino IDE trên máy tính.
Nếu chưa cài, bạn có thể tải tại trang chính thức:
https://www.arduino.cc/en/software
Sau đó:
- Kết nối Arduino với laptop bằng cáp USB.
- Mở Arduino IDE.
- Chọn đúng loại board trong mục Tools → Board.
- Chọn đúng cổng kết nối trong Tools → Port.
- Tạo một chương trình mới.
- Dán đoạn code dưới đây vào.
const int sensorPin = A0;
void setup() {
Serial.begin(9600);
}
void loop() {
int moistureValue = analogRead(sensorPin);
Serial.print("So do cam bien: ");
Serial.println(moistureValue);
delay(1000);
}
Bây giờ nhấn nút Upload để nạp chương trình vào Arduino.
Làm thế nào để xem giá trị cảm biến?
Đây là phần người mới học thường dễ bị mắc kẹt.
Sau khi nạp code thành công:
- Trong Arduino IDE, tìm biểu tượng Serial Monitor (goc trên bên phải màn hình) hoặc mở Tools → Serial Monitor.
- Một cửa sổ mới sẽ xuất hiện.
- Ở góc dưới hoặc phần chọn tốc độ truyền dữ liệu, chọn 9600 baud.
- Bạn sẽ thấy các con số xuất hiện liên tục, khoảng một giây một lần.
Ví dụ:
- So do cam bien: 620
- So do cam bien: 615
- So do cam bien: 618
- So do cam bien: 610
Đây là dữ liệu mà Arduino đọc được từ cảm biến.
Bạn chưa cần hiểu hết những con số này. Chúng ta chỉ cần biết chúng thay đổi như thế nào khi đất khô hoặc ướt.
Thử nghiệm cảm biến
Hãy làm lần lượt:
Thử nghiệm 1: Để cảm biến ngoài không khí
Để cảm biến ở ngoài, không cắm vào đất.
Quan sát giá trị trên Serial Monitor và ghi lại.
Thử nghiệm 2: Cắm cảm biến vào đất khô
Cắm phần đầu cảm biến vào đất khô trong chậu.
Chờ vài giây để giá trị ổn định rồi ghi lại.
Thử nghiệm 3: Cắm cảm biến vào đất ẩm
Làm ẩm đất bằng một ít nước, sau đó cắm cảm biến vào cùng độ sâu và cùng vị trí tương đối.
Chờ vài giây rồi quan sát lại giá trị.
Ví dụ minh họa:
| Trạng thái | Giá trị giả định |
|---|---|
| Ngoài không khí | 600 |
| Đất khô | 520 |
| Đất ẩm | 380 |
| Đất rất ướt | 200 |
Đây chỉ là số liệu ví dụ. Cảm biến thực tế có thể cho kết quả hoàn toàn khác.
Với nhiều cảm biến điện dung phổ biến, giá trị analog thường giảm khi độ ẩm tăng. Tuy nhiên, không nên mặc định tất cả cảm biến đều như vậy.
Điều quan trọng là bạn phải tự kiểm tra cảm biến của mình.
Chua thêm: Đừng thấy người khác đo được 800 rồi vội kết luận cảm biến của mình hỏng vì chỉ đọc được 650. Linh kiện khác nhau, đất khác nhau, cách cắm khác nhau. Chúng ta đang đo một tín hiệu thực tế chứ không phải làm bài thi trắc nghiệm có đáp án chung!
Nếu muốn dùng đồng hồ vạn năng để kiểm tra thì làm thế nào?
Đồng hồ vạn năng không phải thứ bắt buộc để đọc dữ liệu cảm biến. Arduino và Serial Monitor đã làm được việc đó.
Nhưng đồng hồ vạn năng rất hữu ích khi cần kiểm tra xem mạch có cấp điện đúng hay không.
Ví dụ, chúng ta muốn kiểm tra điện áp đầu ra của cảm biến.
Thực hiện như sau:
- Chuyển núm đồng hồ sang chế độ đo điện áp DC, thường có ký hiệu V⎓ hoặc V DC.
- Cắm que đen vào cổng COM.
- Cắm que đỏ vào cổng VΩ.
- Nối que đen vào chân GND của cảm biến.
- Chạm que đỏ vào chân AOUT của cảm biến.
- Đọc con số trên màn hình đồng hồ.
Ví dụ, đồng hồ hiển thị 2.35V nghĩa là điện áp tại chân AOUT đang khoảng 2.35 volt so với GND.
Khi thay đổi độ ẩm đất, điện áp này có thể thay đổi.
Một số lưu ý quan trọng:
- Phải chọn chế độ đo điện áp DC, không phải AC.
- Không cắm que đỏ vào cổng đo dòng điện để đo điện áp.
- Không để hai que đo chạm nhau khi đang đo mạch.
- Không đưa điện áp vượt giới hạn cho phép vào chân Arduino.
Nếu chưa quen sử dụng đồng hồ, bạn có thể bỏ qua bước này và chỉ đọc dữ liệu bằng Serial Monitor. Chúng ta sẽ học cách dùng đồng hồ trong một bài thực hành riêng.
Xác định ngưỡng đất khô và đất ẩm
Sau khi thử nghiệm, chúng ta đã có hai giá trị quan trọng:
- Giá trị khi đất khô.
- Giá trị khi đất ẩm.
Giả sử cảm biến của chúng ta cho kết quả:
- Đất khô: 820.
- Đất ẩm: 480.
Chúng ta có thể đặt hai ngưỡng:
- Nếu giá trị lớn hơn hoặc bằng 750: Xem như đất đang khô.
- Nếu giá trị nhỏ hơn hoặc bằng 550: Xem như đất đã đủ ẩm.
Tại sao lại dùng hai ngưỡng khác nhau?
Vì nếu chỉ dùng một ngưỡng, chẳng hạn 650, giá trị cảm biến dao động quanh 650 có thể khiến máy bơm bật tắt liên tục.
Hai ngưỡng khác nhau giúp hệ thống ổn định hơn. Kỹ thuật này được gọi là Hysteresis.
Nói đơn giản:
- Đất phải đủ khô mới bắt đầu tưới.
- Khi đã tưới, đất phải đủ ẩm mới dừng.
Không cần cứ thấy giá trị thay đổi một chút là máy bơm lại bật lên.
Điều khiển máy bơm bằng MOSFET
Đây là phần quan trọng nhất của dự án.
Arduino có thể xuất tín hiệu HIGH hoặc LOW, nhưng chân GPIO không được thiết kế để cấp điện trực tiếp cho máy bơm.
Máy bơm là một tải điện có động cơ bên trong, cần dòng điện lớn hơn nhiều so với khả năng cấp trực tiếp của một chân Arduino.
Vì vậy, chúng ta dùng MOSFET như một công tắc điện tử.
Hiểu đơn giản:
- Arduino ra lệnh.
- MOSFET đóng hoặc ngắt mạch.
- Nguồn điện riêng cấp năng lượng cho máy bơm.
Sơ đồ nguyên lý
NGUỒN 5V RIÊNG
(+)
|
|
(+) MÁY BƠM
(-) MÁY BƠM
|
|
MOSFET DRAIN (D)
|
|
MOSFET SOURCE(S) ---- MOSFET GATE (G)
| |
| |
NGUỒN 5V RIÊNG Arduino D7
(-) / | \
/ | \
/ | \
Arduino 5V Arduino GND Arduino A0
| | |
V V V
CẢM BIẾN VCC CẢM BIẾN GND CẢM BIẾN AO
Đây chỉ là sơ đồ nguyên lý khái quát còn thiếu điện trở, diode.... Cách nối thực tế phụ thuộc vào module MOSFET bạn mua. Hãy đối chiếu nhãn chân IN, GND, VCC, LOAD+, LOAD- hoặc các ký hiệu tương đương trên module.
Một số module đã tích hợp mạch bảo vệ. Nếu dùng MOSFET rời hoặc module chưa có diode bảo vệ phù hợp, cần bổ sung diode flyback mắc song song với động cơ DC: đầu có vạch của diode nối về phía cực dương nguồn, đầu còn lại nối về phía cực âm động cơ.
Tại sao bắt buộc phải dùng Diode?
• Hiện tượng sốc điện ngược: Bên trong máy bơm nước có cuộn dây đồng (tải cảm kháng). Khi Arduino ra lệnh ngắt bơm, cuộn dây này sinh ra một xung điện áp ngược rất lớn (có thể lên tới vài chục đến hàng trăm Volt) dội ngược lại mạch.
• Hậu quả: Xung điện này sẽ đánh thủng lớp bán dẫn bên trong MOSFET ngay lập tức hoặc làm hỏng sau vài lần bật tắt. Mạch Arduino cũng có thể bị treo hoặc reset liên tục do nhiễu điện từ này.
Giải pháp nếu bạn không có sẵn Diode 1N4007
Nếu đang cần test mạch gấp mà chưa kịp mua, bạn có thể tận dụng một trong các cách sau:
• Lấy từ mạch điện tử hỏng: Tìm trên các bo mạch cũ (sạc điện thoại hỏng, nguồn máy tính, đồ chơi trẻ em...) bất kỳ con diode chỉnh lưu nào có ký hiệu 1N4001 đến 1N4007, 1N5819, SS14 hoặc FR107. Tất cả đều dùng thay thế tốt cho trường hợp này.
• Dùng đèn LED thường (Chữa cháy tạm thời): Nếu dùng máy bơm nhỏ (5V), bạn có thể mắc một bóng đèn LED thường song song với máy bơm (chân dài nối cực Dương, chân ngắn nối cực Âm). Tuy nhiên cách này chỉ chịu được dòng rất nhỏ và LED sẽ dễ cháy, chỉ dùng để thử nghiệm vài lần.
• Tận dụng chính một con MOSFET khác: Nếu bạn có dư MOSFET, có thể nối chân Gate (G) với chân Source (S) của nó lại với nhau. Khi đó, phần thân bên trong MOSFET sẽ hoạt động như một con Diode bảo vệ (nối chân D với cực Dương bơm, chân S với cực Âm bơm).
Trong trường hợp cụ thể, chúng tôi sử dụng luôn đèn LED của dự án trước.
Vì sao không dùng IRF540?
Nếu trong quá trình "khảo cổ" khắp nhà, "tình cờ" chúng ta có IRF540 thì có nên sử dụng không?
Đây là MOSFET có thể dùng trong nhiều mạch công suất, nhưng không phải lựa chọn lý tưởng để điều khiển trực tiếp từ tín hiệu 5V của Arduino nếu muốn nó dẫn tốt.
Chúng ta nên mua module MOSFET logic-level tương thích với Arduino để người mới học dễ thực hành và giảm nguy cơ mạch hoạt động không ổn định.
Nguồn điện cho máy bơm
Đây là nguyên tắc cần nhớ:
Không cấp nguồn máy bơm trực tiếp từ chân 5V hoặc GPIO của Arduino.
Hãy dùng nguồn 5V riêng có dòng điện đáp ứng yêu cầu của máy bơm.
Ví dụ, nếu máy bơm ghi 5V, 500mA, nguồn phải cung cấp được dòng phù hợp, có thêm dự phòng hợp lý.
GND của nguồn máy bơm và GND Arduino cần được nối chung khi dùng cách điều khiển MOSFET thông thường để tín hiệu điều khiển có cùng mốc điện áp tham chiếu.
Không nối nhầm cực nguồn. Không để nước bắn vào mạch điện.
Viết chương trình tưới cây tự động
Tổng kết đấu nối từng bộ phận
Cảm biến độ ẩm đất (Soil Moisture Sensor):
• VCC: Nối vào chân 5V của Arduino.
• GND: Nối vào chân GND của Arduino.
• A0 (Analog Out): Nối vào chân A0 của Arduino để đọc giá trị độ ẩm chính xác.
MOSFET (Ví dụ: IRLZ44N - nhìn từ mặt có chữ, thứ tự chân trái qua phải là G - D - S):
• Chân G (Gate): Nối qua điện trở 1K Ω vào chân D7 của Arduino. Nối thêm một điện trở 10kΩ từ chân G xuống GND để chống nhiễu làm bơm tự chạy khi khởi động.
• Chân D (Drain): Nối vào dây Âm (-) của máy bơm nước.
• Chân S (Source): Nối vào cực Âm (-) của nguồn ngoài và nối chung với GND của Arduino (bắt buộc phải chung Mass/GND).
Máy bơm nước & Diode bảo vệ:
• Dây Dương (+) của máy bơm nối trực tiếp vào cực Dương (+) của nguồn ngoài (5V hoặc 12V tùy loại bơm).
• Diode chống dòng ngược (1N4007): Mắc song song với hai cực của máy bơm. Đầu có vạch trắng (Cathode) nối với cực Dương (+) của bơm, đầu còn lại (Anode) nối với cực Âm (-) của bơm.
Bây giờ chúng ta đã có:
- Cảm biến độ ẩm nối vào A0.
- Module MOSFET điều khiển máy bơm từ chân D7.
- Máy bơm sử dụng nguồn riêng.
Giả sử cảm biến cho giá trị cao khi đất khô và thấp khi đất ẩm.
Chúng ta sẽ dùng hai ngưỡng (với thực tế cảm biến của chúng tôi, bạn thay đổi theo cảm biến của bạn):
- dryThreshold = 530
- wetThreshold = 300
Đây chỉ là giá trị minh họa. Bạn phải thay bằng giá trị đã đo được từ cảm biến của mình.
const int sensorPin = A0;
const int pumpPin = 7;
int dryThreshold = 530;
int wetThreshold = 300;
bool pumpHasRun = false;
void setup() {
pinMode(pumpPin, OUTPUT);
digitalWrite(pumpPin, LOW);
Serial.begin(9600);
}
void loop() {
int moistureValue = analogRead(sensorPin);
Serial.print("Do am dat: ");
Serial.println(moistureValue);
// Dat kho, chua tuoi trong chu ky nay
if (moistureValue >= dryThreshold && !pumpHasRun) {
Serial.println("Dat kho - Bat may bom");
digitalWrite(pumpPin, HIGH);
delay(2000); // Bom nuoc trong 2 giay
digitalWrite(pumpPin, LOW);
pumpHasRun = true;
Serial.println("Da tuoi xong");
}
// Dat da du am, cho phep lan tuoi tiep theo
if (moistureValue <= wetThreshold) {
pumpHasRun = false;
}
delay(1000);
}
Giải thích chương trình
const int sensorPin = A0;
Arduino đọc cảm biến từ chân A0.
const int pumpPin = 7;
Chân D7 gửi tín hiệu điều khiển module MOSFET.
int dryThreshold = 530;
int wetThreshold = 300;Hai ngưỡng này quyết định khi nào đất được xem là khô và khi nào đất đủ ẩm.
digitalWrite(pumpPin, HIGH);Gửi tín hiệu bật máy bơm.
delay(2000);
Cho máy bơm hoạt động trong 2 giây.
digitalWrite(pumpPin, LOW);
Tắt máy bơm.
pumpHasRun = true;
Đánh dấu rằng hệ thống vừa tưới một lần. Nó sẽ không tiếp tục tưới ngay lập tức chỉ vì cảm biến vẫn báo đất khô.
Khi cảm biến đọc được giá trị nhỏ hơn hoặc bằng wetThreshold, chương trình cho phép một chu kỳ tưới tiếp theo.
Lưu ý: Đoạn code này giả định module MOSFET bật tải khi chân IN nhận HIGH. Nếu module của bạn hoạt động ngược, cần điều chỉnh tín hiệu điều khiển. Ngoài ra, đây là chương trình thực hành có giới hạn thời gian bơm mỗi lần, không phải bộ điều khiển tưới cây để bỏ mặc hoạt động nhiều ngày. Khi thử nghiệm, luôn theo dõi lượng nước và không để máy bơm chạy khô.
Thử nghiệm toàn bộ hệ thống
Đừng vội cắm máy bơm vào chậu cây rồi hy vọng mọi thứ sẽ hoạt động hoàn hảo.
Chúng ta sẽ thử từng bước.
Bước 1: Kiểm tra cảm biến
Nạp chương trình đọc cảm biến ở phần 3.
Xác nhận giá trị thay đổi khi cảm biến được cắm vào đất khô và đất ẩm.
Bước 2: Kiểm tra máy bơm riêng
Chưa nối máy bơm vào mạch Arduino.
Kiểm tra nhãn điện áp và dòng điện trên máy bơm.
Dùng nguồn DC đúng thông số để thử máy bơm trong một cốc nước. Không chạy máy bơm quá lâu khi không có nước nếu nhà sản xuất không cho phép.
Bước 3: Kiểm tra module MOSFET
Nối module theo sơ đồ và kiểm tra lại cực nguồn.
Trước khi cấp điện, hãy nhìn lại:
- Dây dương của nguồn đi đúng về phía dương máy bơm.
- Đường âm của máy bơm đi qua mạch MOSFET.
- GND Arduino và GND nguồn đã nối chung nếu module yêu cầu.
- Chân điều khiển đúng với code.
Bước 4: Thử bằng tay
Cắm cảm biến vào đất khô.
Quan sát Serial Monitor.
Khi giá trị vượt ngưỡng, máy bơm sẽ chạy khoảng 2 giây rồi dừng.
Sau đó làm ẩm đất và kiểm tra giá trị có giảm đến ngưỡng đủ ẩm hay không.
Bước 5: Điều chỉnh lượng nước
Nếu 2 giây đã bơm quá nhiều nước, giảm xuống 1 giây.
Nếu chưa đủ, có thể tăng thời gian một cách thận trọng.
Không nên để máy bơm chạy liên tục chỉ vì cảm biến chưa phản ứng ngay. Nước cần thời gian thấm vào đất và đến vị trí đầu dò.
Những lỗi thường gặp
Lỗi 1: Cảm biến luôn báo đất khô
Có thể do:
- Cắm sai chân VCC, GND hoặc AOUT.
- Cảm biến chưa được cấp nguồn.
- Ngưỡng khô đặt quá thấp hoặc quá cao.
- Cảm biến bị lỗi.
Cách xử lý: Chạy riêng chương trình đọc cảm biến, mở Serial Monitor và ghi lại giá trị trong đất khô và đất ẩm.
Đừng vội sửa code điều khiển máy bơm khi chưa biết cảm biến đang hoạt động thế nào.
Lỗi 2: Máy bơm không chạy
Kiểm tra:
- Nguồn máy bơm có đúng điện áp không?
- Nguồn có đủ dòng không?
- Máy bơm có hoạt động khi thử riêng không?
- MOSFET module có đúng loại không?
- Chân D7 có được nối đúng không?
- GND có được nối chung khi thiết kế yêu cầu không?
Một chương trình nạp thành công không có nghĩa là phần cứng chắc chắn hoạt động.
Lỗi 3: Arduino khởi động lại khi máy bơm chạy
Đây là dấu hiệu cần kiểm tra nguồn điện.
Máy bơm có thể hút dòng lớn khi khởi động, khiến điện áp bị sụt.
Không nên cố giải quyết bằng cách nối máy bơm vào chân 5V của Arduino.
Hãy dùng nguồn riêng phù hợp và kiểm tra cách đi dây.
Lỗi 4: Máy bơm tưới quá nhiều nước
Có thể do:
- Thời gian bơm quá dài.
- Đầu cảm biến đặt quá xa vị trí nước thấm vào.
- Đất cần thời gian để hấp thụ nước.
- Ngưỡng độ ẩm chưa được hiệu chỉnh.
Cách xử lý: Bơm từng đợt ngắn, chờ nước thấm rồi đọc lại cảm biến.
Lỗi 5: Đất ẩm nhưng máy bơm vẫn chạy
Có thể cảm biến đang đọc ngược với giả định trong code.
Hãy quay lại phần thử nghiệm và kiểm tra:
- Giá trị khi đất khô.
- Giá trị khi đất ẩm.
Nếu đất ẩm cho giá trị cao hơn đất khô, điều kiện so sánh trong code phải được đảo lại.
Có thể nâng cấp dự án này như thế nào?
Sau khi hệ thống hoạt động ổn định, chúng ta có thể mở rộng:
Nâng cấp 1: Hiển thị độ ẩm
Thêm màn hình LCD hoặc OLED để hiển thị giá trị cảm biến.
Nâng cấp 2: Điều khiển qua Bluetooth
Dùng HC-06 đang có để gửi giá trị độ ẩm về điện thoại hoặc máy tính. Khi đó, chúng ta có thể theo dõi tình trạng đất mà không cần mở Serial Monitor.
Nâng cấp 3: Dùng ESP32 và Wi-Fi
Thay Arduino bằng ESP32 để gửi dữ liệu lên mạng và theo dõi từ xa.
Nâng cấp 4: Tưới nhiều chậu cây
Dùng nhiều cảm biến và nhiều kênh điều khiển tải. Tuy nhiên, cần tính toán nguồn điện và lưu lượng bơm phù hợp.
Đừng nâng cấp tất cả cùng lúc. Hãy làm cho một chậu cây hoạt động ổn định trước đã.
FAQ nhanh
Có thể dùng cảm biến độ ẩm đất loại hai thanh kim loại không?
Có. Tuy nhiên, loại điện trở với hai thanh kim loại trần có thể bị ăn mòn khi sử dụng lâu dài. Cảm biến điện dung thường phù hợp hơn cho dự án muốn sử dụng nhiều lần.
Có thể dùng Arduino Nano thay UNO không?
Có. Hai board đều có thể đọc tín hiệu analog và điều khiển module MOSFET cho dự án này. Cách nối và code gần như giống nhau.
Có thể dùng pin AA để chạy máy bơm không?
Có thể nếu điện áp và dòng điện của bộ pin phù hợp với máy bơm. Nhưng cần kiểm tra số viên pin, tình trạng pin và thông số máy bơm. Không phải cứ ghép nhiều viên pin là tốt hơn.
Có cần Relay không?
Không bắt buộc. Với máy bơm DC nhỏ, module MOSFET logic-level phù hợp thường là lựa chọn tiện lợi để đóng/ngắt tải.
Hệ thống có thể tự tưới khi mình đi vắng không?
Về nguyên lý có thể, nhưng phiên bản thử nghiệm này chưa nên để hoạt động không giám sát. Cần bổ sung giới hạn thời gian, bảo vệ khi hết nước, chống tràn và kiểm tra độ tin cậy trước khi sử dụng lâu dài.
Checklist "chuẩn không cần chỉnh"
- Đọc được giá trị cảm biến trên Serial Monitor.
- Phân biệt được giá trị khi đất khô và đất ẩm.
- Xác định được hai ngưỡng tưới và dừng.
- Kiểm tra máy bơm riêng bằng nguồn phù hợp.
- Điều khiển được máy bơm qua MOSFET module.
- Máy bơm chỉ chạy trong khoảng thời gian đã thiết lập.
- Hệ thống dừng tưới khi đất đủ ẩm.
- Đã kiểm tra nguồn điện và dây nối.
Bước tiếp theo
Chúng ta vừa làm được một hệ thống có khả năng cảm nhận môi trường và tự thực hiện hành động.
Từ một chiếc LED tự bật khi trời tối, bây giờ chúng ta đã tiến thêm một bước: một chiếc máy bơm tự hoạt động khi đất khô.
Nhưng còn một câu hỏi thú vị:
- Nếu muốn điều khiển hệ thống này từ xa, xem dữ liệu trên điện thoại và biết chậu cây đang khô hay ẩm dù mình không có ở nhà thì sao?
- Đó chính là lúc chúng ta kết hợp Robotics với IoT – Internet of Things.
- Và có thể, chiếc chậu cây nhỏ trên bàn sẽ trở thành dự án Smart Garden đầu tiên của chúng ta!



