Thiết bị theo dõi cây: Báo cáo
Thuộc phần Dự án trong hành trình Arduino của Coddy. Bài học 20 trên 24.
Bước cuối cùng ghi báo cáo mỗi giây một lần: độ ẩm và một từ trạng thái, DRY, OK hoặc WET. Báo cáo hiển thị trên LCD để bất kỳ ai ở gần cây đều xem được, đồng thời gửi đến màn hình Serial để máy tính nhận.
LCD được nối theo cách thông thường: LiquidCrystal lcd(12, 11, 5, 4, 3, 2); và lcd.begin(16, 2) trong setup(). Hàng trên hiển thị Moisture: 42%, còn hàng dưới hiển thị từ trạng thái.
Trên màn hình Serial, từ trạng thái nằm cùng dòng với độ ẩm, vì vậy hãy in độ ẩm bằng Serial.print(), không dùng println(). Sau đó chọn từ trạng thái dựa trên ba khoảng của đèn báo trạng thái và in ra cả hai nơi:
if (moisture < 30) {
lcd.print("DRY");
Serial.println("DRY");
} else if (moisture <= 70) {
lcd.print("OK ");
Serial.println("OK");
} else {
lcd.print("WET");
Serial.println("WET");
}Hãy chú ý các ký tự cũ. OK ngắn hơn DRY, vì vậy hãy in "OK " có dấu cách, nếu không màn hình sẽ hiển thị OKY. Tương tự, 100% chuyển thành 5%: hãy in thêm vài dấu cách sau %.
Thử thách
Trung bìnhIn báo cáo mỗi giây một lần:
- thiết lập LCD (các chân 12, 11, 5, 4, 3, 2) trong
setup() - hàng trên:
Moisture: 42%, có thêm khoảng trắng phía sau - hàng dưới:
DRYkhi dưới 30%,OKtừ 30% đến 70%,WETkhi trên 70%, thêm khoảng trắng đệm - màn hình Serial: một dòng như
Moisture: 42% OK
Giữ nguyên đèn báo trạng thái và chuông báo. Nhấn Chạy, rồi nhấn Kiểm tra.
Tự làm thử
// Núm xoay thay cho cảm biến độ ẩm đất
const int sensorPin = A0;
// Đèn báo trạng thái: đèn LED RGB
const int redPin = 9;
const int greenPin = 10;
const int bluePin = 6;
// Thiết bị báo động
const int buzzerPin = 8;
bool wasDry = false; // Đất có khô ở lần đo trước không?
unsigned long dryStart = 0; // Thời điểm đất bắt đầu khô
// Độ ẩ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);
}
}
// Phát tiếng bíp mỗi giây một lần khi đất đã khô quá 5 giây.
void checkAlarm(int moisture) {
if (moisture < 30) {
if (wasDry == false) {
wasDry = true;
dryStart = millis();
}
if (millis() - dryStart > 5000) {
tone(buzzerPin, 880, 200);
}
} else {
wasDry = false;
}
}
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);
checkAlarm(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