MyPlant-Informer: Feuchtigkeit von Keimlingen mit dem Particle Photon überwachen

Über die Bodenfeuchte meiner Keimlinge hält mich der IoT-Controller Particle Photon auf dem Laufenden, indem er die Sensorwerte an meine Blynk-App schickt.

In Pocket speichern vorlesen Druckansicht 77 Kommentare lesen
Zwei Blumentöpfe mit Feuchtigkeitssensor und angeschlossener Elektronik.
Lesezeit: 6 Min.
Von
  • Ingo Lohs
Inhaltsverzeichnis

Im Frühling empfiehlt es sich, Topfkeimlinge anzuzüchten, so dass man später reiche Obst- oder Gemüseernte einfahren kann. Manche Pflanzen, wie meine Pfefferminz- und Feigensamen, benötigen dabei ein feuchtes Erdreich. Um das gleichmäßig zu gewährleisten, habe ich für die winzigen Samen eine elektronische Feuchtigkeitsüberwachung gebaut. Dafür nutze ich den Wifi-Mikrocontroller Particle Photon sowie die Internet-of-Things-Dienste IFTTT und Blynk – so kann ich die aktuellen Werte auf dem Smartphone ansehen und werde benachrichtigt, wenn ich zur Gießkanne greifen muss.

Für dieses Projekt habe ich alle Teile einfach mit Jumperkabeln und einem Breadboard verbunden. Die Sensoren werden jeweils über SIGNAL an die A/D-Wandlereingänge A0 und A1 des Photon angeschlossen. Das OLED-Display zeigt die errechnete Feuchtigkeit in Prozent an. Verbunden ist es über den I2C-Bus an den Ausgängen D0 und D1 (s.a. Listing unten). Für die Programmierung habe ich die Particle IDE genutzt, die ähnlich wie die Programmierumgebung von Arduino funktioniert.

Darüber hinaus gibt es eine Einschätzung, ob die Erde mit Wasser benetzt ist oder bei Trockenheit Maßnahmen erforderlich ist. Dies wird über die App von Blynk auf dem Smartphone angezeigt. Wer möchte, kann einen Summer als akustisches Signal hinzufügen. Ich bekomme über IFTTT Benachrichtigungen per E-Mail.

Mehr Infos

Kurzinfo

  • Feuchtigkeitssensoren ausprobieren
  • Wifi-Mikrocontroller Particle Photon nutzen

Checkliste

  • Zeitaufwand: eine Stunde
  • Kosten: circa 40 Euro
  • Programmieren: Grundkenntnisse Arduino

Material

  • 1 Particle Photon
  • 1 OLED-Display (mit I2C-Anschluss)
  • 2 Feuchtigkeitssensoren – besser: Edelstahl und Lüsterklemmen
  • 1 Breadboard
  • 14 Jumper-Kabel: 4 für das OLED-Display und weitere 10 für 2 Sensoren mit jeweils 5 Kabeln.
#include <Adafruit_SSD1306.h>                 // This #include statement was automatically added by the Particle IDE.
#include <blynk.h> // This #include statement was automatically added by the Particle IDE.

#define soilMoisturePlant1 A0 // SIGNAL from Soil Moisture Sensor to INPUT A0 - Plant1: "Minze"
#define soilMoisturePlant2 A1 // SIGNAL from Soil Moisture Sensor to INPUT A1 - Plant2: "Feigenbaum"
String namePlant1 = "Minze"; // your name of the plants
String namePlant2 = "Feige";
const int threshold_plant1 = 80; // define when its DRY for Plant1
const int threshold_plant2 = 75; // define when its DRY for Plant2
int baudrate = 9600; // Serial Monitor
const int dry = 4095; // presents 100% in case of Spark Core or Particle Photon at A0/A1 if sensor is full dry and also 0 = full wet
int water1, water2; // set to global var
int value_water_Plant1, value_water_Plant2; // set to global var
unsigned long lastmillis = 0; // time for interation the loop

// I2C wiring
#define BME_MOSI D0 // = SDA
#define BME_SCK D1 // = SCL

Für die Fernüberwachung nutze ich den Cloud-Dienst Blynk, der einen deutschen Server, Software-Bibliotheken für Maker-Boards wie den Particle Photon und eine Smartphone-App bereit stellt. Die Blynk-Apps lassen sich leicht an die eigenen Bedürfnisse anpassen, sodass man sich auf die Hardware konzentrieren kann.

// You should get Auth Token in the Blynk App.
// Go to the Project Settings (nut icon).
char auth[] = "<< your blynk code here >>";
// *********WidgetLED led1(V5);
// *********WidgetLED led2(V6)

In meiner App werden die Feuchtigskeitswerte komfortabel grafisch angezeigt.

Das Auslesen und Anzeigen der Daten geschieht mittels zweier Funktionen in einer kurzen loop-Schleife.

void loop() {
Blynk.run();
// !!! http://docs.blynk.cc/#troubleshooting-flood-error
// no delays in loop - DO NEVER in LOOP!
if
((millis() - lastmillis) > 1000) {
lastmillis = millis();
readData();
displayData();
}
}
Make 2/20