Aktion: Fluchende Pflanze bauen
Klasse! Du hast jetzt schon sehr viele Dinge gelernt und wir können nun zu unserer fluchenden Pflanze kommen.
Kurzer Überblick, was wir machen werden:
- Wir verwenden einen Feuchtigkeitssensor, um die Feuchtigkeit im Pflanzentopf zu messen.
- Wir verwenden einen Bewegungssensor, um eine Bewegung in der Nähe der Pflanze zu erkennen.
- Wir verwenden einen DFPlayer und Lautsprecher, um einen Sound abzuspielen.
- Wir verbinden alle Sensoren und Ausgabegeräte mit dem Mikrocontroller.
- Wir schreiben ein Programm, das die Werte der Sensoren ausliest und zum richtigen Zeitpunkt ein Signal an den DFPlayer schickt, damit dieser einen Sound abspielt.
Hardware aufbauen
Du hast die verschiedenen Bauteile bereits kennengelernt und einzeln verwendet. Jetzt müssen wir sie alle zusammen mit dem Mikrocontroller verbinden 💪.
Denk daran, dass der Mikrocontroller vom USB-Strom getrennt ist, bevor du Änderungen am Stromkreis machst.
DFPlayer verbinden
Der Lautsprecher sollte noch mit dem DFPlayer und der DFPlayer mit dem Mikrocontroller (über D2 und D3) verbunden sein. Wenn nicht, dann schau nochmal im Kapitel “Lautsprecher an DFPlayer anschließen ” nach.
Entferne die Kabel vom Mikrocontroller, die noch mit den Pins GND und VCC verbunden sind.
Sensoren verbinden
Jetzt fügen wir die Verbindungen für den Bewegungssensor und Bodefeuchtesensor hinzu:
- D1 auf dem Mikrocontroller wird mit dem Stecker für das digitale Signal des Bewegungssensors (der in der Mitte - auf dem Sensor steht “out”) verbunden.
- A0 auf dem Mikrocontroller wird mit unserem Bodenfeuchtesensor (gelbes Kabel) verbunden.
Nun sind alle Sensoren & Bauteile hinsichtlich der analogen und digitalen Signale mit dem Mikrocontroller verbunden.
Stromzufuhr für Sensoren und DFPlayer
Bisher haben wir nur die analogen und digitalen Signale mit dem Mikrocontroller verbunden. Jetzt kümmern wir uns um die Stromzufuhr für die Sensoren und den DFPlayer.
Da alle Bauteile mit Strom versorgt werden müssen, können wir diese Verbindungen auf dem Breadboard zusammenschließen. In unserem Fall werden die Bauteile einfach parallel geschaltet.
Dazu plazierst du die Minuspol-Kabel von allen Sensoren und dem DFPlayer nebeneinander auf das Steckbrett, so dass zwischen ihnen ein Strom fließen kann. Die Reihenfolge der Kabel auf dem Breadboard ist dabei nicht wichtig.
Anschließend werden die Pluspol-Kabel von allen Sensoren und dem DFPlayer nebeneinander auf der anderen Seite (also getrennt von den Minuspol-Kabel) auf das Steckbrett gesteckt, so dass zwischen ihnen ein Strom fließen kann. Die Reihenfolge der Kabel auf dem Breadboard ist dabei nicht wichtig.
Am Ende verbindest du nun noch alle Minuspol-Kabel vom Steckbrett stellvertretend mit nur einem einzigen Kabel mit dem Ground vom Mikrocontroller. Und alle Pluspol-Kabel auf dem Steckbrett stellvertretend mit nur einem einzigen Kabel mit dem VV vom Mikrocontroller und schon bist du fertig mit dem Hardware Aufbau 😎!
Jetzt fehlt nur noch der Programmcode und schon kannst du die fluchende Pflanze ausprobieren.
Bibliotheken installieren
Um zusätzlichen Funktionen des DFPlayers zu nutzen, musst du die dazugehörige Bibliothek installieren. Gehe dazu in den Bibliotheksverwalter und suche dort nach “DFRobotDFPlayerMini”. Drücke den Knopf zum Installieren.
Bibliotheken verwalten: Windows
Den Bibliotheksverwalter findest du unter Sketch > Bibliothek einbinden > Bibliotheken verwalten…
Bibliotheken verwalten: Mac
In der Menübar unter “Sketch” findest du “Bibliotheken einbinden” > “Bibliotheken verwalten”. Hier kannst Du nach der gewünschten Bibliothek suchen und diese installieren.
Programm schreiben
Hinweis: Solltest bereits Code von einer vorherigen Aufgabe im Editor stehen kannst du diesen löschen.
Nun fehlt uns nur noch der Code, der alle Sensoren ausliest und entscheidet, ob ein Sound abgespielt werden soll oder nicht. Wir möchten, dass der Sound nur abgespielt wird, wenn eine Bewegung erkannt wird (also eine Person an der Pflanze vorbeigeht oder 🦖) und der Boden trocken ist. Ansonsten soll nichts passieren und die Pflanze bleibt still.
Füge die benötigten Bibliotheken hinzu:
#include "SoftwareSerial.h"
#include "DFRobotDFPlayerMini.h"
Um den Code übersichtlich zu gestalten, definieren wir unsere Pins als Konstanten am Anfang des Programms. Konstanten kann man wie Variablen einen Wert zu weisen. Nur ändern sich diese während des Programmablaufs nicht.
const int RXPin = D2;
const int TXPin = D3;
const int MovePin = D1;
const int SoilMoisturePin = A0;
Danach initialisieren wir die serielle Software und den DFPlayer, indem wir ihnen die benötigten Werte als Argumente übergeben:
SoftwareSerial mySoftwareSerial(RXPin, TXPin);
DFRobotDFPlayerMini myDFPlayer;
Wir definieren außerdem noch ein paar Variablen, die wir später verwenden, um dort Werte abzulegen. Den Grenzwert für die Bodenfeuchte kannst du nach Bedarf verändern.
int motionDetected; // Bewegung erkannt: 1/HIGH (ja) oder 0/LOW (nein)
int soilMoisture; // Bodenfeuchte: 100 - 800
int moistureThreshold = 400; // Grenzwert der Bodenfeuchte
Jetzt kann das Setup beginnen. Hier initialisieren wir den seriellen Monitor, die serielle Software und den DFPlayer:
void setup() {
mySoftwareSerial.begin(9600);
Serial.begin(115200);
pinMode(MovePin, INPUT);
Serial.println(); // Leere Zeile
Serial.println("Initialisiere DFPlayer ... (Kann 3~5 Sekunden dauern)");
if (!myDFPlayer.begin(mySoftwareSerial)) {
Serial.println("DFPlayer startet nicht:");
Serial.println("1. Überprüfe die Kabel!");
Serial.println("2. Lege eine SD-Karte ein!");
while (true);
}
Serial.println("DFPlayer ist gestartet.");
myDFPlayer.volume(10); // Setze die Lautstärke auf 10 (0 to 30)
}
Und nun folgt der Hauptteil unseres Programms.
Fortlaufend sollen folgende Schritte vom Mikrocontroller ausgeführt werden:
- Die Feuchtigkeit des Bodens auslesen.
- Einen Wert vom Bewegungssensor auslesen.
- Überprüfen, ob der Schwellwert für die Bodentrockenheit erreicht wurde und ob eine Bewegung stattgefunden hat:
- Wenn ja, spiele einen Sound ab.
- Wenn nein, tue nichts.
Zusätzlich haben wir ein paar Pausen hinzugefügt, damit etwas Zeit zwischen den Abfragen vergehen kann.
void loop() {
soilMoisture = analogRead(SoilMoisturePin);
Serial.println("Bodenfeuchte: (hoher Wert: trocken, niedriger Wert: feucht)");
Serial.println(soilMoisture);
motionDetected = digitalRead(MovePin);
Serial.println("Bewegung erkannt:");
Serial.println(motionDetected);
if (soilMoisture > moistureThreshold && motionDetected == HIGH) {
myDFPlayer.next();
delay(11000);
}
else {
Serial.println("Keine Bewegung erkannt oder Boden nicht trocken");
delay(500);
}
delay(500);
}
Ausprobieren
- Wird eine Bewegung erkannt?
- Erkennt der Bodenfeuchtesensor die Feuchtigkeit korrekt?
- Wird der gewünschte Sound/ Ton abgespielt?
Gratuliere 🎉 Du hast das großartig gemacht. Du kannst stolz auf dich sein!