Smart-Home Pflanzenbewässerungssystem mit Arduino Nano
Komponenten und Zubehör
Arduino Nano R3
×
1
Adafruit Standard LCD - 16x2 Weiß auf Blau
×
1
Mini-Wasserpumpe
×
1
Drehencoder mit Taster
×
1
L298N IC
×
1
Fotowiderstand
×
1
Allzweck-Transistor NPN
×
1
Widerstand 10k Ohm
×
1
Eingangsdrehpotentiometer 10k Ohm
×
1
Kondensator 10 µF
×
1
Kondensator 1000 µF
×
1
Kondensator 470 µF
×
1
Kondensator 100 nF
×
7
1N4001 Diode
×
8
RCA-Buchse
×
1
Bodenfeuchtesensor
×
1
Schraubklemmenblock
×
3
AMS1117-ADJ
×
1
Widerstand 2k Ohm
×
1
Widerstand 680 Ohm
×
1
Netzteil DC 9V 3A
×
1
Benötigte Werkzeuge und Maschinen
Lötkolben (universell)
Apps und Online-Dienste
Arduino IDE
Über dieses Projekt
Ein weiteres Pflanzenbewässerungssystem
Im Internet gibt es viele bekannte Projekte und Tutorials zur Nutzung von Bodenfeuchtesensoren. In diesem Projekt werden einige brillante Ideen aus dem Netz kombiniert und durch den Softwareteil ergänzt, um einen Controller für die heimische Pflanzenbewässerung zu bauen. Manchmal wirkt die Lösung offensichtlich, bis man genauer hinsieht und den Teufel im Detail entdeckt. Lassen Sie uns diese Details untersuchen.
Hauptfunktionen des Controllers
Dieser Controller bietet folgende Features:
Unterstützung für zwei Pflanzen – der Controller hat zwei unabhängige Kanäle; jeder Kanal kann deaktiviert werden
Jeder Kanal hat zwei Grundparameter: Wie lange die Pumpe vorwärts und rückwärts läuft. Diese Parameter werden in Zehntelsekunden gemessen
Manueller Modus: Per Tastendruck kann die Pflanze bewässert werden
Der Controller prüft die Feuchte nach dem Bewässern. Er deaktiviert den Kanal, falls die Feuchte nicht gestiegen ist
Lichtsensor verhindert Betrieb bei Nacht
Menüsystem zur Konfiguration der Parameter. Konfiguration wird im EEPROM gespeichert
Die Bodenfeuchte
Wie misst man die Bodenfeuchte präzise? Man kann den Sensor bei eBay bestellen, in die Pflanze stecken und den Widerstand messen. Dieser Weg wird in vielen Tutorials beschrieben. Leider waren in meinem Fall die Widerstände von „trockenem“ und „nassem“ Boden so nah beieinander (300 kΩ und 500 kΩ), dass eine genaue Entscheidung, wann Wasser nachgefüllt werden muss, kaum möglich war. Das Problem: Reines Wasser leitet keinen Strom, eigentlich sind es die Mineralien im Wasser, die leiten. Der gemessene Widerstand hängt also stark von Menge und Art der Mineralien in der Pflanze ab, nicht von der Wassermenge. Google hilft: Im Netz fand ich die geniale Idee, die Kapazität des Sensors zu messen, nicht den Widerstand. Die Hauptidee: Wasser hat eine hohe dielektrische Permittivität, die Kapazität eines „nassen“ Bodens ist viel höher als die eines „trockenen“ (200 µF vs. 200 pF) – ein Millionenfacher Unterschied!
Wie misst man die Kapazität?
Andere findige Leute haben den Arduino in ein hochpräzises Kapazitätsmessgerät verwandelt. Meiner Meinung nach ist diese Methode kompliziert und für unseren Sensor nicht nötig. Ein viel simplerer Weg nutzt nur zwei Analog-Pins und liefert ausreichende Genauigkeit, um „trocken“ von „nass“ zu unterscheiden. Da die Rohwerte von „trocken“ und „nass“ einen riesigen Unterschied aufweisen, ist es unpraktisch, diesen Wert direkt als Grenzwert zu nutzen. Daher wird im Code der natürliche Logarithmus der Kapazitätsmesswerte verwendet, um den Wertebereich zu verkleinern.
Warum H-Brücke?
Es schien eine gute Idee, einen einzelnen MOSFET-Transistor für die Wasserpumpe zu nutzen. Leider kann der Wasserspiegel im Vorratsbehälter (Flasche) höher liegen als die Pflanze. In diesem Fall läuft das Wasser nach dem Stoppen der Pumpe einfach weiter. Wie stoppt man das Wasser sicher? Man lässt die Pumpe kurz rückwärts laufen. Da wir einen DC-Motor nutzen, genügt es, die Pole („+“ und „-“) zu vertauschen. Dafür braucht man eine H-Brücke. Der L298N IC ist eine gute Wahl. Die Pumpen in diesem Projekt nutzen 9 V und 3 A, daher benötigen Sie einen Kühlkörper am IC und einen Leistungswiderstand. Ein 1 Ohm 5 Watt Leistungswiderstand kommt hier zum Einsatz. Der Motortreiber L298N kann zwei Motoren steuern, sodass dieser Controller zwei Pflanzen gleichzeitig verwalten kann.
Das Controller-Menüsystem
Zur Steuerung des Pflanzencontrollers wird ein Drehencoder verwendet. Nach dem Start erscheint der Hauptbildschirm. Auf dem Hauptbildschirm werden nützliche Parameter angezeigt: Die aktuellen Sensorwerte beider Kanäle (obere Zeile). Ist ein Kanal deaktiviert, wird xxxx angezeigt. In der unteren Zeile stehen die Trocken-Grenzwerte.
Um die Pumpe manuell zu starten, den Drehencoder kurz drücken. Der manuelle Bildschirm erscheint. Um die Controller-Parameter einzustellen, den Encoder lange drücken (ca. 1 Sekunde) im Hauptbildschirm. Das Einstellmenü ist wie folgt strukturiert:
Linker Kanal
Rechter Kanal
Display-Hintergrundbeleuchtung (oder Auto)
Display-Hintergrundbeleuchtung bei Nacht
Jeder Kanal hat ein eigenes Untermenü:
Kanal aktivieren
Trocken-Grenzwert
Pumpen-Vorwärts-Laufzeit (Zehntelsekunden)
Pumpen-Rückwärts-Laufzeit (Zehntelsekunden)
Parameter testen
„Trocken-Grenzwert“ legt die minimale Bodenfeuchte fest, ab der die Bewässerung startet. Der Wert ist der natürliche Logarithmus der Sensor-Kapazität. Aktuelle Sensorwerte finden sich auf dem Hauptbildschirm zusammen mit den Trocken-Grenzwerten.
Der Menüpunkt „Parameter testen“ erlaubt, das Bewässerungsverhalten zu prüfen und die Zeitwerte vor dem Speichern im EEPROM abzustimmen.
Die Hardware
Der Controller ist auf zwei doppelseitigen 3×7 cm Platinen aufgebaut. Die erste Platine beherbergt den L298N Motortreiber, die Dioden, Schraubklemmen für Stromversorgung und Motoren sowie die Anschlüsse für die Sensoren. Diese Platine hat auch ein DC-Netzteil-Modul AMS1117-ADJ, um 5 V für L298N und Arduino bereitzustellen. Das war beim Debuggen dieses Teils praktisch. Sie können auch den Spannungsregler auf dem Arduino-Board für stabilisierte 5 V nutzen.
Die zweite Platine enthält den Arduino Nano, Anschlüsse für Drehencoder und Fotowiderstand sowie die Fassung für das LCD-Display.