植物监测器:报告
本课属于 Coddy Arduino 学习旅程的“项目”单元。第 20 课,共 24 课。
最后一步每秒输出一次报告:湿度和一个状态词,DRY、OK 或 WET。报告会显示在 LCD 上,方便植物旁边的人查看,也会发送到电脑的 Serial 监视器。
LCD 按常见方式接线:LiquidCrystal lcd(12, 11, 5, 4, 3, 2);,并在 setup() 中调用 lcd.begin(16, 2)。顶行显示 Moisture: 42%,底行显示状态词。
在 Serial 监视器中,状态词要和湿度显示在同一行,因此要用 Serial.print() 输出湿度,而不是 println()。然后根据状态灯的三个范围选择状态词,并将它同时输出到两处:
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");
}注意屏幕上残留的旧字符。OK 比 DRY 短,所以要输出带空格的 "OK ",否则屏幕上会显示 OKY。100% 变成 5% 时也是如此:在 % 后面输出几个空格。
挑战
中等每秒输出一次报告:
- 在
setup()中设置 LCD(引脚 12、11、5、4、3、2) - 顶行:
Moisture: 42%,后面加上空格 - 底行:低于 30% 时显示
DRY,从 30% 到 70% 时显示OK,高于 70% 时显示WET,并用空格补齐 - Serial 监视器:输出类似
Moisture: 42% OK的一行
保留状态灯和警报。按“运行”,然后按“检查”。
亲手试试
// 用旋钮模拟土壤湿度传感器
const int sensorPin = A0;
// 状态指示灯:一个 RGB LED
const int redPin = 9;
const int greenPin = 10;
const int bluePin = 6;
// 警报器
const int buzzerPin = 8;
bool wasDry = false; // 上次读取时土壤是否干燥?
unsigned long dryStart = 0; // 土壤开始干燥的时间
// 湿度以百分比表示:0 表示完全干燥,100 表示湿透。
int readMoisture() {
int reading = analogRead(sensorPin);
return map(reading, 0, 1023, 0, 100);
}
// 干燥时亮红灯,湿度适中时亮绿灯,潮湿时亮蓝灯。
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);
}
}
// 土壤持续干燥超过 5 秒后,每秒响一声。
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);
}
这节课包含一个小测验。开始学习即可作答,并记录你的进度。
项目中的所有课
自己练习: Arduino 在线编辑器