Menu
CoddyTech

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.

challenge icon

Aufgabe

Mittel

Gib 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: DRY unter 30 %, OK von 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);
}
quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

Alle Lektionen in Projekte

Übe selbstständig: Arduino-Playground