Monitor rośliny: raport
Część sekcji Projekty ścieżki Arduino w Coddy. Lekcja 20 z 24.
Ostatni krok zapisuje raport raz na sekundę: wilgotność i słowo określające stan: DRY, OK lub WET. Raport trafia na ekran LCD, aby mógł go odczytać każdy przy roślinie, oraz do monitora portu szeregowego, aby mógł go odczytać komputer.
Ekran LCD jest podłączony w standardowy sposób: LiquidCrystal lcd(12, 11, 5, 4, 3, 2); oraz lcd.begin(16, 2) w setup(). W górnym wierszu wyświetla się Moisture: 42%, a w dolnym — słowo.
W monitorze portu szeregowego słowo znajduje się w tym samym wierszu co wilgotność, więc wyświetl wilgotność za pomocą Serial.print(), a nie println(). Następnie wybierz słowo na podstawie trzech zakresów światełka stanu i wyświetl je w obu miejscach:
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");
}Zwróć uwagę na poprzednie znaki. OK jest krótsze niż DRY, więc wyświetl "OK " ze spacją, w przeciwnym razie na ekranie pojawi się OKY. To samo dotyczy zmiany 100% na 5%: wyświetl kilka spacji po %.
Wyzwanie
ŚredniWyświetlaj raport raz na sekundę:
- skonfiguruj LCD (piny 12, 11, 5, 4, 3, 2) w
setup() - górny wiersz:
Moisture: 42%, ze spacjami na końcu - dolny wiersz:
DRYponiżej 30%,OKod 30% do 70%,WETpowyżej 70%, dopełniony spacjami - monitor portu szeregowego: jeden wiersz, np.
Moisture: 42% OK
Zachowaj kontrolkę statusu i alarm. Naciśnij Run, a następnie Check.
Spróbuj swoich sił
// Pokrętło zastępuje czujnik wilgotności gleby
const int sensorPin = A0;
// Kontrolka stanu: dioda LED RGB
const int redPin = 9;
const int greenPin = 10;
const int bluePin = 6;
// Alarm
const int buzzerPin = 8;
bool wasDry = false; // czy gleba była sucha przy ostatnim odczycie?
unsigned long dryStart = 0; // kiedy gleba stała się sucha
// Wilgotność w procentach: 0 oznacza całkowicie suchą glebę, 100 — całkowicie mokrą.
int readMoisture() {
int reading = analogRead(sensorPin);
return map(reading, 0, 1023, 0, 100);
}
// Czerwony, gdy gleba jest sucha, zielony, gdy wilgotność jest odpowiednia, niebieski, gdy gleba jest mokra.
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);
}
}
// Włączaj sygnał dźwiękowy raz na sekundę, gdy gleba jest sucha przez ponad 5 sekund.
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);
}
Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.
Wszystkie lekcje w sekcji Projekty
2Gra reakcji
Gra reakcji: losowe oczekiwanieGra reakcji: stoperGra reakcji: falstartGra reakcji: najlepszy czas5Monitor rośliny
Monitor rośliny: wilgotnośćMonitor rośliny: lampka stanuMonitor rośliny: alarm o przesuszeniuMonitor rośliny: raportPoćwicz samodzielnie: Edytor online Arduino