Мониторинг растений: отчёт
Часть раздела Проекты путешествия по Arduino на Coddy. Урок 20 из 24.
Последний шаг записывает отчет раз в секунду: влажность и слово состояния — DRY, OK или WET. Он выводится на LCD для всех, кто находится рядом с растением, и на монитор Serial для компьютера.
LCD подключен обычным способом: LiquidCrystal lcd(12, 11, 5, 4, 3, 2); и lcd.begin(16, 2) в setup(). В верхней строке отображается 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%: выведите пару пробелов после %.
Задание
СреднеВыводите отчет раз в секунду:
- настройте LCD (контакты 12, 11, 5, 4, 3, 2) в
setup() - верхняя строка:
Moisture: 42%, с пробелами после неё - нижняя строка:
DRYпри значении ниже 30%,OKот 30% до 70%,WETвыше 70%, дополненная пробелами - монитор Serial: одна строка, например
Moisture: 42% OK
Оставьте индикатор состояния и сигнализацию. Нажмите Run, затем Check.
Попробуйте сами
// Ручка регулятора заменяет датчик влажности почвы
const int sensorPin = A0;
// Индикатор состояния: RGB-светодиод
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);
}
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Проекты
2Игра на реакцию
Игра на реакцию: случайное ожиданиеИгра на реакцию: таймерИгра на реакцию: фальстартИгра на реакцию: лучшее время5Мониторинг растений
Мониторинг растений: влажностьМониторинг растений: индикатор состоянияМониторинг растений: сигнал о сухостиМониторинг растений: отчётПотренируйтесь самостоятельно: Песочница Arduino