Thiết bị theo dõi cây: Cảnh báo khô
Thuộc phần Dự án trong hành trình Arduino của Coddy. Bài học 19 trên 24.
Khi đất vẫn khô, bộ theo dõi sẽ phát tín hiệu cầu cứu bằng còi buzzer ở chân 8. Không phát ngay lập tức: chỉ số có thể giảm trong chốc lát, và chuông báo động kêu oan sẽ sớm bị phớt lờ. Quy tắc là đất phải khô hơn 5 giây (với cây thật thì phải đợi hàng giờ).
Để biết đất đã khô bao lâu, hãy ghi lại thời điểm đất bắt đầu khô. Cần thêm một phần bộ nhớ: đất có khô ở lần đọc trước hay không.
if (moisture < 30) {
if (wasDry == false) {
wasDry = true;
dryStart = millis(); // Nó vừa chuyển sang trạng thái khô
}
if (millis() - dryStart > 5000) {
tone(buzzerPin, 880, 200);
}
} else {
wasDry = false;
}else rất quan trọng: khi đất được tưới nước, wasDry trở lại false, nên lần đất khô tiếp theo sẽ được tính giờ từ lúc bắt đầu khô.
loop() đọc một lần mỗi giây, vì vậy tiếng bíp kéo dài 200 ms sẽ phát mỗi giây khi đất vẫn khô.
Thử thách
Trung bìnhThêm cảnh báo khi đất khô:
- ghi nhớ đất có khô hay không (
bool wasDry) và thời điểm đất bắt đầu khô (unsigned long dryStart) - khi đất đã khô hơn 5000 ms, phát
tone(buzzerPin, 880, 200)sau mỗi lần đọc - khi độ ẩm đạt từ 30% trở lên, đặt lại
wasDrythànhfalse
Nhấn Chạy, vặn núm xuống rồi chờ, sau đó nhấn Kiểm tra.
Tự làm thử
// Núm xoay mô phỏng cảm biến độ ẩm đất
const int sensorPin = A0;
// Đèn báo trạng thái: một đèn LED RGB
const int redPin = 9;
const int greenPin = 10;
const int bluePin = 6;
// Độ ẩm tính theo phần trăm: 0 là khô hoàn toàn, 100 là ướt sũng.
int readMoisture() {
int reading = analogRead(sensorPin);
return map(reading, 0, 1023, 0, 100);
}
// Đèn đỏ khi đất khô, xanh lá khi độ ẩm phù hợp, xanh dương khi đất ướt.
void showStatus(int moisture) {
digitalWrite(redPin, LOW);
digitalWrite(greenPin, LOW);
digitalWrite(bluePin, LOW);
if (moisture < 30) {
digitalWrite(redPin, HIGH);
} else if (moisture <= 70) {
digitalWrite(greenPin, HIGH);
} else {
digitalWrite(bluePin, HIGH);
}
}
void setup() {
pinMode(redPin, OUTPUT);
pinMode(greenPin, OUTPUT);
pinMode(bluePin, OUTPUT);
Serial.begin(9600);
}
void loop() {
int moisture = readMoisture();
Serial.print("Moisture: ");
Serial.print(moisture);
Serial.println("%");
showStatus(moisture);
delay(1000);
}
Bài học này có một bài trắc nghiệm ngắn. Bắt đầu bài học để trả lời và theo dõi tiến độ.
Tất cả bài học trong Dự án
2Trò chơi phản xạ
Trò chơi phản xạ: Thời gian chờ ngẫu nhiênTrò chơi phản xạ: Bộ hẹn giờTrò chơi phản xạ: Khởi động sớmTrò chơi phản xạ: Thời gian tốt nhất5Thiết bị theo dõi cây
Thiết bị theo dõi cây: Độ ẩmThiết bị theo dõi cây: Đèn trạng tháiThiết bị theo dõi cây: Cảnh báo khôThiết bị theo dõi cây: Báo cáoTự luyện tập: Playground Arduino