Pflanzenmonitor: Bericht
Teil des Abschnitts Projekte der Arduino-Journey von Coddy. Lektion 20 von 24.
Der letzte Schritt gibt einmal pro Sekunde einen Bericht aus: die Feuchtigkeit und ein Statuswort, DRY, OK oder WET. Er wird auf dem LCD für alle neben der Pflanze und auf dem Serial Monitor für einen Computer angezeigt.
Das LCD ist auf die übliche Weise angeschlossen: LiquidCrystal lcd(12, 11, 5, 4, 3, 2); und lcd.begin(16, 2) in setup(). Die obere Zeile zeigt Moisture: 42% und die untere Zeile das Wort.
Auf dem Serial Monitor steht das Wort in derselben Zeile wie die Feuchtigkeit, also gib die Feuchtigkeit mit Serial.print() aus, nicht mit println(). Wähle dann das Wort anhand der drei Bereiche der Statusleuchte aus und gib es auf beiden aus:
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");
}Achte auf die alten Zeichen. OK ist kürzer als DRY, gib also "OK " mit einem Leerzeichen aus, sonst zeigt der Bildschirm OKY an. Dasselbe gilt, wenn aus 100% 5% wird: Gib nach dem % ein paar Leerzeichen aus.
Aufgabe
MittelGib den Bericht einmal pro Sekunde aus:
- Richte das LCD in
setup()ein (Pins 12, 11, 5, 4, 3, 2) - obere Zeile:
Moisture: 42%, mit Leerzeichen dahinter - untere Zeile:
DRYunter 30 %,OKvon 30 % bis 70 %,WETüber 70 %, mit Leerzeichen aufgefüllt - Serieller Monitor: eine Zeile wie
Moisture: 42% OK
Behalte die Statusleuchte und den Alarm bei. Drücke auf Run und dann auf Check.
Probier es selbst
// Der Drehknopf dient als Ersatz für einen Bodenfeuchtigkeitssensor
const int sensorPin = A0;
// Die Statusleuchte: eine RGB-LED
const int redPin = 9;
const int greenPin = 10;
const int bluePin = 6;
// Der Alarm
const int buzzerPin = 8;
bool wasDry = false; // War die Erde bei der letzten Messung trocken?
unsigned long dryStart = 0; // Wann die Erde trocken wurde
// Die Feuchtigkeit in Prozent: 0 ist staubtrocken, 100 ist völlig durchnässt.
int readMoisture() {
int reading = analogRead(sensorPin);
return map(reading, 0, 1023, 0, 100);
}
// Rot bei Trockenheit, grün bei ausreichender Feuchtigkeit, blau bei Nässe.
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);
}
}
// Einmal pro Sekunde piepen, wenn die Erde seit mehr als 5 Sekunden trocken ist.
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);
}
Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Projekte
2Reaktionsspiel
Reaktionsspiel: Zufällige WartezeitReaktionsspiel: TimerReaktionsspiel: FehlstartReaktionsspiel: Bestzeit5Pflanzenmonitor
Pflanzenmonitor: FeuchtigkeitPflanzenmonitor: StatusleuchtePflanzenmonitor: TrockenalarmPflanzenmonitor: BerichtÜbe selbstständig: Arduino-Playground