Skip to Content

Automatisches Pflanzenbewässerungssystem mit Arduino IoT Cloud

Automatisches Pflanzenbewässerungssystem mit Arduino IoT Cloud

In diesem Projekt lernst du, wie du ein automatisches Bewässerungssystem für den Innenbereich erstellst. Arduino IoT Cloud Dieses System ermöglicht es dir, deine Pflanzen von überall auf der Welt zu überwachen und zu bewässern und ist eine großartige Einführung in das Internet der Dinge.

Ich habe Bauanleitungen, eine Einstiegshilfe für die Arduino IoT Cloud und den gesamten benötigten Code beigefügt. Dieses Projekt verwendet ein Arduino MKR1000 IoT-Board, einen kapazitiven Bodenfeuchtesensor, einen Temperatur- und Luftfeuchtigkeitssensor, ein I2C-LCD und eine Wasserpumpe. Es ist auch möglich, dieses Projekt mit einem normalen Arduino (ohne Internetverbindung) umzusetzen.

Beachte, dass dies hauptsächlich ein Machbarkeitsnachweis ist, d.h. ein solches System nur für eine Pflanze zu bauen, ist ziemlich teuer und wahrscheinlich wenig sinnvoll. Sobald ich jedoch weiß, wie alles funktioniert, kann ich das System leicht erweitern und in Zukunft weitere Funktionen hinzufügen.

Wenn du Fragen oder Anregungen hast, hinterlasse bitte einen Kommentar unten.

Für weitere Informationen zu einigen der in diesem Projekt verwendeten Komponenten, schau dir die folgenden Tutorials an:

Materialien

Hardware-Komponenten

arduino-mkr1000Arduino MKR1000 × 1 Amazon
arduino-mkr-relay-proto-shieldArduino MKR Relay Proto Shield × 1 Arduino
Capacitive soil moisture sensor × 1 Amazon
AM2301-temperature-humidity-sensorAM2301A (DHT21) temperature and humidity sensor × 1 Amazon
LCD20×4 character I2C LCD × 1 Amazon
Mini submersible pump × 1 Amazon
PVC tube 6 x 9 mm 1 m Amazon
IKEA container with lid × 1 IKEA
Project box 120 x 80 x 50 mm × 1 Amazon

Beachte, dass du auch andere Arduino IoT-Boards mit WLAN-Konnektivität verwenden kannst, wie das Arduino MKR WiFi 1010 oder das günstigere Arduino Nano 33 IoT. Der Vorteil der MKR-Boards ist, dass sie auf das Arduino MKR Relay Proto Shield passen, was die Verkabelung deutlich erleichtert.

Für den Wassertank kannst du alles verwenden, was du zur Hand hast (ich habe einen IKEA-Aufbewahrungsbehälter aus meiner Küche benutzt).

Apps und Online-Dienste

arduino-web-editorArduino Web Editor
arduino-iot-cloudArduino IoT Cloud

Makerguides is a participant in affiliate advertising programs designed to provide a means for sites to earn advertising fees by linking to Amazon, AliExpress, Elecrow, and other sites. As an Affiliate we may earn from qualifying purchases.

System zusammenbauen

Alle Komponenten sind mit einem zentralen Projektgehäuse verbunden, das auf dem Deckel des IKEA-Behälters montiert ist.

Projektgehäuse auf dem Deckel des IKEA-Behälters montiert

Um das Arduino MKR Relay Proto Shield zu montieren, habe ich eine einfache Adapterplatte 3D-gedruckt. Ein kleines Loch an der Seite des Projektgehäuses ermöglicht den Zugang zum Micro-USB-Anschluss des MKR1000, der zur Stromversorgung und Programmierung des Boards verwendet wird.

3d printed adapter plate
3D-gedruckte Adapterplatte

Bodenfeuchtesensor

Für dieses Projekt habe ich einen capacitive soil moisture sensor mit analogem Ausgang verwendet. Kapazitive Sensoren sind korrosionsbeständiger als resistive Sensoren, aber sie sind nicht 100 % wasserdicht. Da sie aus einer Standard-Leiterplatte mit Verbundsubstrat bestehen, kann Wasser leicht durch die Seiten der Leiterplatte eindringen. Die Elektronik oben am Sensor ist ebenfalls nicht vor Wasser geschützt.

Um den Sensor etwas wasserdichter zu machen, habe ich die Kanten und die Elektronik mit klarem Nagellack überzogen. Eine echte Schutzbeschichtung wäre wahrscheinlich besser, aber Nagellack funktioniert als günstige Alternative ziemlich gut.

nail polish
Ich habe die Kanten des Sensors und die Elektronik mit klarem Nagellack überzogen

Das mitgelieferte Kabel des Sensors war ziemlich kurz, also habe ich ein neues gemacht. Du kannst auch einfach längere Drähte an das Originalkabel löten.

longer cable
Neues Kabel für den Bodenfeuchtesensor

Anschluss des Bodenfeuchtesensors an das Arduino MKR1000

Die folgende Tabelle zeigt dir, welche Verbindungen du herstellen musst.

Bodenfeuchtesensor Arduino MKR1000
GND GND
VCC 3.3 V
AOUT A2

Pumpe und Relais-Shield

pump
Mini-Tauchpumpe

Zum Bewässern der Pflanzen habe ich eine small submersible pump verwendet, die mit 3,3 V betrieben werden kann. Die Pumpe wird mit Relais 1 des Arduino MKR Relay Proto Shield gesteuert. Da die Pumpe nur etwa 200 mA zieht, kann sie direkt vom 3,3 V-Ausgang des MKR1000 versorgt werden.

Wenn du eine größere Pumpe verwenden möchtest, musst du eine externe Stromversorgung nutzen. Achte darauf, dass die Stromaufnahme der Pumpe innerhalb der Spezifikationen der Relais liegt.

arduino mkr relay proto shield
Arduino MKR Relay Proto Shield (Quelle: Arduino.cc)

Das schwarze Kabel der Pumpe ist mit Masse verbunden. Das rote Kabel geht an die NO-Seite (normalerweise offen) des Relais. COM ist mit dem 3,3 V-Ausgang des MKR1000 verbunden. Beachte, dass dieses 3,3 V an einem der Schraubklemmen des Proto Shields verfügbar ist.

Temperatur- und Luftfeuchtigkeitssensor

temperature and humidity sensor
Temperatur- und Luftfeuchtigkeitssensor an der Seite des Projektgehäuses montiert

Obwohl es für die automatische Bewässerung der Pflanzen nicht unbedingt notwendig ist, fand ich einen Temperatur- und Luftfeuchtigkeitssensor als nette Ergänzung des Systems. Für dieses Projekt habe ich einen AM2301A sensor verwendet, der in einem Gehäuse mit bereits angeschlossenen Kabeln geliefert wird. Dieser Sensor wird von ASAIR hergestellt, die auch die sehr beliebten DHT11- und DHT22-Sensoren fertigen.

Für weitere Informationen zu DHT-Temperatur- und Luftfeuchtigkeitssensoren, schau dir das folgende Tutorial an:

Anschluss des AM2301A Temperatur- und Luftfeuchtigkeitssensors

Die folgende Tabelle zeigt dir, welche Verbindungen du herstellen musst.

AM2301A Temperatur- und Luftfeuchtigkeitssensor Arduino MKR1000
Schwarz GND
Rot 3.3 V
Gelb A1

Ich habe den Sensor an der Seite des Projektgehäuses montiert. Beachte, dass ich ein kleines Loch in das Gehäuse und die Rückseite des Sensors gebohrt habe, um die Kabel durchzuführen.

temperature and humidity sensor connection
Die Kabel werden durch die Rückseite des Sensors geführt

I2C LCD

Neben der Arduino IoT Cloud werden die Sensordaten auch auf dem 20×4 I2C LCD angezeigt, das auf dem Deckel des Projektgehäuses montiert ist.

20×4 Zeichen I2C LCD auf dem Deckel des Projektgehäuses montiert

Ich habe eine Öffnung im Projektgehäuse mit my homemade CNC router ausgeschnitten, aber du könntest auch eine Stichsäge oder sogar einen scharfen Cutter verwenden.

i2c lcd back
Das LCD ist mit vier Schrauben durch die Befestigungslöcher in der Leiterplatte befestigt

Das LCD wird normalerweise mit 5 V betrieben, funktioniert aber auch gut mit 3,3 V. Dank des auf der Rückseite montierten I2C-Moduls musst du nur zwei Kabel, SDA und SCL, mit dem MKR1000 verbinden. Die Anschlüsse sind an den Schraubklemmen des Shields verfügbar, was die Verkabelung des Displays sehr einfach macht.

I2C LCD Anschlüsse

20×4 Zeichen I2C LCD Arduino MKR1000
GND GND
VCC 3.3 V
SDA SDA
SCL SCL

Ich habe ein ausführliches Tutorial zur Verwendung von I2C LCDs mit Arduino geschrieben, das du hier findest:

Ein Hinweis zur Verkabelung

Wie du vielleicht gesehen hast, müssen alle Sensoren, das LCD und die Pumpe mit 3,3 V und GND verbunden werden. Das Arduino MKR Relay Proto Shield hat nur einen Stromausgang, und alle Kabel in eine Schraubklemme zu stecken, ist keine gute Idee. Stattdessen kannst du etwas wie Wago lever nuts als Stromverteiler verwenden.

wago lever nuts
Wago Hebelklemmen

Der Wasserschlauch

Ursprünglich hatte ich geplant, das Ende des PVC-Schlauchs einfach irgendwo in die Mitte des Pflanzgefäßes zu stecken. Ich stellte jedoch fest, dass dadurch ein Teil des Pflanzgefäßes durchnässt war, während der Rest völlig trocken blieb.

Meine Lösung war, im letzten 30-40 cm des Schlauchs viele kleine (1 mm) Löcher im Abstand von etwa 2 cm zu bohren. Ich habe einen Stopfen für das Schlauchende und Halterungen zum Einstecken in die Erde 3D-gedruckt.

Du kannst die STL-Dateien hier herunterladen, wenn du eigene drucken möchtest:

tube with plug holes and holders
3D-gedruckte Halterungen und Stopfen

Das scheint ganz gut zu funktionieren, um den Boden gleichmäßig zu befeuchten.

Wasserschlauch installiert

Erste Schritte mit der Arduino IoT Cloud

Im nächsten Abschnitt erkläre ich, wie du mit der Arduino IoT Cloud startest.

Der erste Schritt ist, die Seite https://create.arduino.cc/ zu besuchen. Auf dieser Webseite findest du den Web Editor, eine Einstiegshilfe, den Geräte-Manager und einen Link zur Arduino IoT Cloud.

arduino create dashboard
Arduino Create Dashboard

Installation des Arduino Create Plugins

Es gibt mehrere Möglichkeiten, ein neues Board einzurichten und zu konfigurieren, aber ich finde es am einfachsten über die Einstiegshilfe. Klicke auf das Symbol „Getting Started“ und scrolle zum Seitenende, wo „Install Arduino Create Plugin“ steht. Dieses Plugin ermöglicht es dir, Sketche vom Arduino Web Editor auf dein Board oder Gerät hochzuladen.

getting started arduino create agent 1
Arduino Create Plugin herunterladen und installieren

Nach dem Klick auf das Arduino Create Plugin-Symbol unten auf der Seite klicke auf Start, lade das Plugin herunter und installiere es. Der Konfigurationsassistent prüft, ob das Plugin erfolgreich installiert wurde. Wenn ja, solltest du die folgende Seite sehen.

getting started arduino create agent 4
Diese Seite solltest du nach der Installation des Arduino Create Plugins sehen

Einrichten eines IoT-Boards

Gehe nun zurück zur Einstiegshilfe, indem du oben auf der Seite auf das Symbol klickst. Der nächste Schritt ist, ein neues IoT-Board einzurichten. Für dieses Projekt habe ich das Arduino MKR1000 verwendet. Wenn du dir nicht sicher bist, wie dein Board heißt, kannst du auf das Symbol „Autodetect Arduino Board“ klicken.

Arduino MKR1000 auswählen

Der IoT-Konfigurationsassistent öffnet sich und führt dich durch die Einrichtung und den Test des Boards.

getting started mkr1000 iot configuration
MKR1000 IoT-Konfigurationsassistent

Klicke auf Start und verbinde das Board mit einem USB-Kabel mit deinem Computer. Wenn du das Arduino Create Plugin korrekt installiert hast, sollte der Computer dein Gerät erkennen.

getting started mkr1000 iot configuration 1
Verbinde das MKR1000 mit deinem Computer per USB-Kabel und warte, bis dein Board verfügbar ist

Gib deinem Board einen Namen. Ich habe es einfach MKR1000_1 genannt. Achte darauf, einen leicht erkennbaren Namen zu wählen, besonders wenn du mehrere Boards für verschiedene Projekte verwendest.

getting started mkr1000 iot configuration name
Einen Namen für dein Board eingeben

Danach muss der Crypto-Chip des MKR1000 konfiguriert werden, was bis zu 5 Minuten dauern kann. Jedes MKR1000 ist mit einem  Microchip ECC508 crypto chip ausgestattet. Dieser Chip speichert die Identität deines Boards sicher, wenn es mit deinem Arduino-Konto verknüpft wird.

Konfiguration des Crypto-Chips

Anschließend kannst du einen Beispielsketch hochladen, mit dem du die Funktionalität des Boards testen und die eingebaute LED über den Network Monitor ein- und ausschalten kannst. Im Secret-Tab des Sketches musst du den Namen und das Passwort deines lokalen WLAN-Netzwerks eingeben.

Beispielsketch hochladen, nachdem du deine WLAN-Daten im Secret-Tab eingegeben hast

Auf der nächsten Seite klicke auf das LED-Symbol, um die eingebaute LED ein- und auszuschalten.

Klicke auf das LED-Symbol oder gib ON oder OFF ein und klicke auf „SEND“

Wenn alles geklappt hat, solltest du die folgende Seite sehen.

Ein neues Thing erstellen

Nach der Einrichtung eines neuen IoT-Geräts kannst du zum Arduino Create Dashboard zurückkehren und auf das Arduino IoT Cloud-Symbol klicken.

arduino iot cloud icon
Arduino Create Dashboard mit hervorgehobenem Arduino IoT Cloud-Symbol

Nach dem Klick auf dieses Symbol öffnet sich die Arduino IoT Cloud-Seite „Your Things“. Hier kannst du neue Things erstellen – so nennt Arduino die Geräte, die du mit dem Internet verbinden kannst. In unserem Fall repräsentiert das Thing das Arduino MKR1000-Board mit mehreren angeschlossenen Sensoren. Jedes Thing kann mehrere Eigenschaften haben, wie Temperatur, den Zustand einer LED, GPS-Koordinaten usw.

In der kostenlosen Version der IoT Cloud kannst du nur ein Thing mit bis zu fünf Eigenschaften erstellen. Wenn du mehr möchtest, musst du auf den kostenpflichtigen Plan der Arduino Cloud upgraden. Da dieses Projekt nur ein Thing mit weniger als fünf Eigenschaften verwendet, reicht die kostenlose Version völlig aus.

create new thing
Deine Things-Seite

Klicke auf ADD NEW THING und gib ihm einen Namen. Ich habe meines Automatic_indoor_garden genannt. Wähle das gerade konfigurierte MKR1000-Board aus dem Dropdown-Menü (MKR1000_1).

Einen Namen für dein Thing eingeben und ein Gerät zuordnen

Du wirst nun zu einer Seite weitergeleitet, auf der du Eigenschaften zu deinem Thing hinzufügen kannst.

add property
Thing-Eigenschaftsseite

Eigenschaften hinzufügen

Für dieses Projekt habe ich drei verschiedene Eigenschaften hinzugefügt: Temperatur, Luftfeuchtigkeit und Bodenfeuchtegehalt. Eigenschaften repräsentieren Variablen im Arduino-Code und sind auch in der Cloud lesbar. Nach dem Erstellen der Eigenschaften und Hochladen des Codes kannst du sie in deinem Thing-Dashboard sehen.

Eigenschaften fügst du ganz einfach hinzu, indem du auf ADD PROPERTY klickst. Beachte, dass du diesen Vorgang dreimal durchführen musst.

Für jede Eigenschaft musst du folgende Parameter einstellen:

  • Name – der Name, der in deiner Eigenschaftsliste und im Widget angezeigt wird.
  • Variablenname – der Name der Variablen, die du in deinem Sketch zur Referenzierung dieser Eigenschaft verwendest. Er darf keine Sonderzeichen enthalten.
  • Typ – wähle den richtigen Eigenschaftstyp. Füge Minimum und Maximum für numerische Messwerte hinzu, damit das Widget korrekt dargestellt wird.
  • Berechtigung
    • Lesen & Schreiben : die Eigenschaft kann sowohl gesetzt als auch im Arduino IoT Cloud Dashboard angezeigt werden.
    • Nur Lesen : die Eigenschaft wird an die Arduino IoT Cloud gesendet und ist in deinem Dashboard verfügbar.
  • Aktualisierung
    • Bei Wertänderung : Die Eigenschaft wird an die Arduino IoT Cloud gesendet, sobald sich der Wert um den angegebenen Delta-Wert ändert oder größer ist.
    • Regelmäßig : die Eigenschaft wird an die Arduino IoT Cloud gesendet, sobald die angegebene Anzahl Sekunden vergangen ist.
  • Verlauf – zeigt eine Visualisierung historischer Daten der Eigenschaft.

Im Bild unten siehst du, welche Parameter ich für die Temperatureigenschaft verwendet habe. Du kannst einen der vielen eingebauten Eigenschaftstypen wie Temperatur (Celsius) auswählen oder einen eigenen erstellen.

add new property window
Screenshot der Temperatureigenschaft

Die Parameter für die anderen Eigenschaften findest du in der folgenden Tabelle

Eigenschaftsparameter des Things

Name Variablenname
Name
Typ Berechtigung Aktualisierung
Temperatur temperature Temperatur (Celsius)
-20 °C – 60 °C
RO Alle 10 s
Luftfeuchtigkeit humidity Relative Luftfeuchtigkeit (Prozent)
0 RH – 100 RH
RO Alle 10 s
Bodenfeuchtegehalt soilMoistureContent Float
0 – 100
RO Alle 1 s

Wenn du „Verlauf anzeigen“ auswählst, kannst du die Werte deiner Eigenschaften über einen bestimmten Zeitraum aufzeichnen und als Diagramme speichern. Leider kannst du in der kostenlosen Version der Arduino IoT Cloud die Daten nur für einen Tag speichern.

automatic indoor garden thing properties
Eigenschaften-Tab

Nachdem du alle Eigenschaften hinzugefügt hast, klicke auf EDIT SKETCH. Dadurch wird der Arduino Web Editor geöffnet.

Sketch erstellen

Nach dem Klick auf EDIT SKETCH siehst du, dass automatisch ein neuer Sketch erstellt wurde.

Editor mit automatisch generiertem Sketch

Beachte, dass der Sketch denselben Namen wie unser Thing plus das Erstellungsdatum trägt. Neben dieser .ino-Datei siehst du noch drei weitere Dateien:

ReadMe.adoc : eine Textdatei, in der du Informationen über den Autor und das Projekt hinzufügen kannst.

thingProperties.h : diese Datei wird automatisch von der Arduino IoT Cloud generiert, wenn du Eigenschaften zu deinem Thing hinzufügst. Im Allgemeinen solltest du den Code in dieser Datei nicht selbst bearbeiten. Sie wird automatisch aktualisiert, wenn du die Thing-Eigenschaften im Dashboard änderst.

Siehe die IoT Cloud – Getting Started Seite im Arduino Project Hub für eine ausführlichere Erklärung der verschiedenen Funktionen in thingProperties.h.

thingproperties
thingProperties.h

Secret: In diesem Tab kannst du deine Netzwerkzugangsdaten eingeben. SECRET_SSID und SECRET_PASS sind der Name und das Passwort des WLAN-Netzwerks, mit dem sich der MKR1000 verbinden soll. Nach Eingabe klicke auf Speichern.

Secret-Tab

Arduino-Code

Die automatisch generierten Dateien erleichtern den Einstieg in die IoT Cloud erheblich, aber natürlich musst du trotzdem noch etwas eigenen Code schreiben.

Im Hauptsketch, also nicht in thingProperties.h, habe ich Code hinzugefügt, der die Sensoren ausliest, die Wasserpumpe steuert und Informationen auf dem I2C LCD anzeigt.

Du kannst den Code im Hauptsketch durch den folgenden Code ersetzen. Verbinde das MKR1000-Board mit deinem Computer, falls noch nicht geschehen, und lade den Code hoch, indem du auf den Upload-Button (Pfeil rechts oben) klickst. Ich empfehle, die Pumpe vorerst zu trennen und nur die Sensoren angeschlossen zu lassen.

Im Folgenden erkläre ich, wie der Code funktioniert und wie du einige Parameter selbst ändern kannst.

Du kannst den Code kopieren, indem du auf den Button oben rechts im Codefeld klickst.

/*
  Sketch for automatic indoor garden project. More info: https://www.makerguides.com

  Arduino IoT Cloud Properties description

  The following variables are automatically generated and updated when changes are made to the Thing properties

  float soilMoistureContent;
  float humidity;
  float temperature;

  Properties which are marked as READ/WRITE in the Cloud Thing will also have functions
  which are called when their values are changed from the Dashboard.
  These functions are generated with the Thing and added at the end of this sketch.
*/

#include "thingProperties.h"
#include "DHT.h"
#include "LiquidCrystal_I2C.h"

#define DHTPIN A1
#define DHTTYPE DHT21

#define RELAYPIN 1
#define SOILPIN A2

DHT dht = DHT(DHTPIN, DHTTYPE);
LiquidCrystal_I2C lcd = LiquidCrystal_I2C(0x27, 20, 4);

const unsigned long pumpPeriod = 20000;
const unsigned long waitPeriod = 120000;
unsigned long previousMillis;
float moistureSensorData;

void setup() {
  // Initialize serial and wait for port to open:
  Serial.begin(9600);
  // This delay gives the chance to wait for a Serial Monitor without blocking if none is found
  delay(1500);

  // Defined in thingProperties.h
  initProperties();

  // Connect to Arduino IoT Cloud
  ArduinoCloud.begin(ArduinoIoTPreferredConnection);

  /*
     The following function allows you to obtain more information
     related to the state of network and IoT Cloud connection and errors
     the higher number the more granular information you’ll get.
     The default is 0 (only errors).
     Maximum is 4
  */
  setDebugMessageLevel(4);
  ArduinoCloud.printDebugInfo();

  pinMode(LED_BUILTIN, OUTPUT);
  pinMode(RELAYPIN, OUTPUT);

  dht.begin();

  lcd.init();
  lcd.backlight();
}

void loop() {
  ArduinoCloud.update();

  // Your code here
  temperature = dht.readTemperature();
  humidity = dht.readHumidity();

  lcd.setCursor(0, 0);
  lcd.print("Temperature:");
  lcd.setCursor(13, 0);
  lcd.print(temperature);
  lcd.print("\xDf" "C");
  lcd.setCursor(0, 1);
  lcd.print("Humidity:");
  lcd.setCursor(10, 1);
  lcd.print(humidity);
  lcd.print("%");

  moistureSensorData = analogRead(SOILPIN);
  //Serial.println(moistureSensorData);
  soilMoistureContent = map(moistureSensorData, 883, 469, 0, 100);
  soilMoistureContent = constrain(soilMoistureContent, 0, 100);
  lcd.setCursor(0, 2);
  lcd.print("Soil moisture:");
  lcd.setCursor(15, 2);
  lcd.print(soilMoistureContent, 0);
  lcd.print("%  ");

  if (soilMoistureContent <= 30 && millis() - previousMillis >= waitPeriod) {
    digitalWrite(RELAYPIN, HIGH);
    digitalWrite(LED_BUILTIN, HIGH);
    delay(pumpPeriod);
    digitalWrite(RELAYPIN, LOW);
    digitalWrite(LED_BUILTIN, LOW);

    previousMillis = millis();
  }
}

Wie der Code funktioniert

Im Loop-Abschnitt des Codes werden Temperatur und Luftfeuchtigkeit mit dht.readTemperature() bzw. dht.readHumidity() ausgelesen. Die Variablen temperature und humidity wurden automatisch in thingProperties.h hinzugefügt und ihre Werte werden alle 10 Sekunden an die Cloud gesendet.

Im nächsten Abschnitt des Codes werden die Werte auf dem I2C LCD ausgegeben.

  lcd.setCursor(0, 0);
  lcd.print("Temperature:");
  lcd.setCursor(13, 0);
  lcd.print(temperature);
  lcd.print("\xDf" "C");
  lcd.setCursor(0, 1);
  lcd.print("Humidity:");
  lcd.setCursor(10, 1);
  lcd.print(humidity);
  lcd.print("%");

Anschließend wird der analoge Ausgang des Bodenfeuchtesensors mit analogRead() ausgelesen. Dieser Wert wird dann auf 0 bis 100 % Feuchtigkeit skaliert. Zur Kalibrierung kannst du die Sensordaten im Serial Monitor ausgeben. Der Wert 833 entspricht dem Wert, den ich erhielt, als ich den Sensor in die Luft gehalten habe, und 469, als ich ihn in ein Glas Wasser gesteckt habe.

  moistureSensorData = analogRead(SOILPIN);
  //Serial.println(moistureSensorData);
  soilMoistureContent = map(moistureSensorData, 883, 469, 0, 100);
  soilMoistureContent = constrain(soilMoistureContent, 0, 100);
  lcd.setCursor(0, 2);
  lcd.print("Soil moisture:");
  lcd.setCursor(15, 2);
  lcd.print(soilMoistureContent, 0);
  lcd.print("%  ");

Im letzten Abschnitt des Codes prüfe ich, ob der Bodenfeuchtegehalt unter 30 % liegt, und wenn ja, werden die Pflanzen für eine festgelegte Dauer bewässert. Ich habe eine Mindestwartezeit zwischen den Bewässerungszyklen eingefügt, damit der Boden Zeit hat, das Wasser aufzunehmen.

  if (soilMoistureContent <= 30 && millis() - previousMillis >= waitPeriod) {
    digitalWrite(RELAYPIN, HIGH);
    digitalWrite(LED_BUILTIN, HIGH);
    delay(pumpPeriod);
    digitalWrite(RELAYPIN, LOW);
    digitalWrite(LED_BUILTIN, LOW);

    previousMillis = millis();
  }

Du wirst wahrscheinlich die Parameter pumpPeriod und waitPeriod am Anfang des Codes an deine spezielle Situation anpassen müssen.

Dashboard erstellen

Nach dem Hochladen des Codes klicke auf GO TO IOT CLOUD. Klicke dann oben auf der Seite auf Dashboards.

arduino iot cloud dashboards
Arduino IoT Cloud Dashboards

Auf dieser Seite klickst du auf create dashboard. Du kannst Widgets zu deinem Dashboard hinzufügen, um Werte, Diagramme usw. anzuzeigen.

arduino iot cloud dashboard add widget
Füge ein Wert-Widget hinzu

Klicke auf das Widget und wähle Link Property

arduino iot cloud value
Klicke auf Link Property

Wähle nun die Eigenschaft aus, die du anzeigen möchtest.

Eigenschaft aus unserem Thing verknüpfen

Nach dem Hinzufügen mehrerer Widgets sollte dein Dashboard ungefähr so aussehen:

Dashboard mit Werten und Diagrammen

Fazit

In diesem Artikel habe ich gezeigt, wie du ein einfaches automatisches Bewässerungssystem mit dem MKR1000 und der Arduino IoT Cloud erstellen kannst. Ich hoffe, dieses Tutorial war hilfreich und kann dir Inspiration geben.

Im aktuellen Setup wird die Arduino IoT Cloud nur zur Anzeige und Aufzeichnung der Sensordaten verwendet. Du könntest das System also auch als Standalone-Lösung mit einem Arduino Uno oder ähnlichem bauen. Persönlich wollte ich einfach mit der Arduino IoT Cloud experimentieren und sehen, wie schwer die Einrichtung ist. Es war deutlich einfacher als gedacht, und ich werde sie definitiv für andere Projekte nutzen.

Ich betreibe dieses System seit kurzer Zeit und es scheint sehr gut zu funktionieren. Ich werde in etwa einem Monat berichten, nachdem ich es länger getestet habe.

Eine Sache, die ich vielleicht in Zukunft hinzufügen werde, ist ein Wasserstandsschalter für den Tank, der an ein E-Mail-Benachrichtigungssystem angeschlossen ist. Ich befürchte, ich vergesse sonst, den Tank nachzufüllen, jetzt wo ich nicht mehr ans Gießen denken muss…

Wenn du Fragen oder Anregungen hast, hinterlasse bitte einen Kommentar unten.