Inhaltsverzeichnis
Arduino Bewässerungsautomat
Mein Arduino Wasserstandsanzeiger ist eine feine Sache, aber warum selber gießen, wenn das auch eine Maschine erledigen kann?
Achtung
Aufgabenstellung für Ausbaustufe I:
- Es sollen die Wasserstände in vier Blumenkästen und einem Vorratsbehälter erfasst werden.
- Bei niedrigem Wasserstand in einem Blumenkasten soll automatisch Wasser aus dem Vorratsbehälter nachgefüllt werden.
- Es darf immer nur eine Pumpe gleichzeitig laufen. (Die Pumpen ziehen nämlich knapp 4 Ampere.)
- Es soll über LEDs der Wasserstand im Vorratsbehälter visualisert werden.
- Die Temperatur und Feuchtigkeit in der Gehäusesektion I soll kontrolliert werden.
- Die Helligkeit der LEDs soll in Abhängigkeit der Lichtverhältnisse geregelt werden.
- Der ganze Aparillo muss ein paar Sommer im Freien überstehen können.
Aufgabenstellung für Ausbaustufe II:
- Der Bewässerungsautomat soll über ein LC-Display und Taster über Bluetooth konfigurierbar sein. (Zum Beispiel wäre es nützlich, wenn man einzelne Sensoren ausschalten könnte.
Verwendete Komponenten:
- unipolare Hallschalter (PIC H501)
- Zahnradpumpen (6 Volt)
- Pololu 9V Step-Up/Step-Down Voltage Regulator S18V20F9
- Temperatur- und Feuchtigkeitssensor DHT22
- Adafruit NeoPixel Mini PCB
- Adafruit NeoPixel Ring - 12 x 5050 RGBW
- Adafruit NeoPixel Ring - 24 x 5050 RGBW
- Bluefruit EZ-Link - Bluetooth Serial Link & Arduino Programmer
Mechanischer Aufbau
Gehäuse der Steuerungseinheit
Das Gehäuse ist in zwei Sektionen aufgeteilt, hat einen Standfuß und einen Deckel mit Sichtfenster. Bei Bedarf können weitere Sektionen ergänzt werden. Das Gehäuse hat einen Durchmesser von 150 mm. Der Standfuß ist 40 mm hoch, die Sektionen I und II sind jeweils 50 mm hoch. Der Deckel ist 15 mm hoch.
Sektion I
In der untersten Sektion (Sektion I) sind die Pumpen, der Pololu-Spannungsregler, eine Stromverteilerplatine und die Relais für die Pumpen untergebracht. Außerdem befinden sich im Boden die Anschlüsse für die Sensoren und der Netzanschluss. Die Gehäuse der Zahnradpumpen ragen unten aus dem Gehäuse heraus: Sollte es zu Undichtigkeiten kommen, sind diese direkt erkennbar. Die elektrischen Buchsen sind zum Schutz vor Witterung um 25 mm nach Innen versetzt und mit O-Ringen abgedichtet.
Sockel
… folgt …
Sektion II
In der Sektion II sind der Arduino und ein Neopixel-Ring untergebracht. Später soll noch ein Bluetooth-Modul hinzukommen. Die Sektion I und II sind durch zwei Aussparungen im Boden der oberen Sektion miteinander Verbunden, um Kabel durchführen zu können.
Deckel
Der Deckel hat ein Sichtfenster aus Plexiglas, durch das die NeoPixel-Ringe sichtbar sind.
Das Gehäuse konstruiere ich mit Autodesk 123D Design und fertige es mit meinem Delta Printer Hexagon V2.
Blumenkastensensoren
Der Bewässerungsautomat kann den Wasserstand in vier Blumenkästen regeln. Die Wasserstandsensoren können von oben in die Blumenkästen eingesetzt und entnommen werden. Dadurch wird der Außendurchmesser der Sensoren für die kleinen Blumenkästen auf 18,6 mm begrenzt. Die Höhe der drei kleinen Sensoren sollte mindestens 170 mm betragen, damit sie bündig mit der Oberkante abschließen. Eine LED signalisiert die Betriebsbereitschaft. Eine zentrale Anforderung der Wasserstandsensoren ist Wasserdichtigkeit.
Die Gehäuse für die Wasserstandsensoren habe ich aus ABS-Kunststoff gedruckt. Die Entscheidung viel auf diesen Kunststoff, weil er sich - im Unterschied zu PET - sehr gut kleben lässt. Als Kleber kommt bspw. Uhu Kunststoff Hart oder Pattex Sekundenkleber infrage.
Die Schwimmerdose wird (zunächst) nicht mit dem Gehäuse verklebt, um sie bei Bedarf gegen eine längere oder kürzere Version tauschen zu können.
Die Blumenkastensensoren werden mit einem DIN-Normstecker mit der Steuerungseinheit verbunden.
Die Abschirmung ist mit Masse verbunden.
Wasserstandssensor für den Vorratsbehälter
Der Wasserstand im Vorratsbehälter wird mit einem eTape Liquid Level Sensor gemessen. Der Sensor hat vier Pins. Die inneren beiden Pins haben einen variablen Widerstand, der in Abhängigkeit von der Eintauchtiefe ist. Die äußeren beiden haben einen konstanten Widerstand, der zur Kompensation von Temperatureinflüssen verwendet werden kann.
Der Sensor reagiert extrem empfindlich auf Biegen. Da der Sensor auch mechanisch sehr empfindlich ist, muss er gut geschützt in einem Rohr untergebracht werden. Der Sensor hat vier Anschlisspins: Die äußeren sind der Referenz, die inneren der Messwiderstand.
Beide Widerstände - sowohl der variable als auch der konstante - werden in Reihe mit jeweils einem 1,5 kOhm-Widerstand geschaltet und bilden einen Spannungsteiler. Zwischen den beiden in Reihe geschalteten Widerständen wird jeweils die Spannung abgegriffen und an den analogen Eingängen A0 und A1 gemessen.
Bei ersten Tests messe ich für den konstanten Widerstand einen Wert von etwa 826. Der Wert für den variablen Widerstand liegt zwischen 828, wenn er gar nicht eingetaucht ist und 535 bei etwa 22 cm Eintauchtiefe - tiefer kann ich den Sensor mangels eines geeigneten Gefäßes in Reichweite nicht eintauchen.
Kabelbelegung (in der Draufsicht auf den Stecker betrachtet, bei 12 Uhr beginnend im Uhrzeigersinn):
- GND (schwarz)
- 5 Volt (rot)
- Signal Neopixel (gelb)
- Referenzwiderstand (grün)
- Messwiderstand (orange)
- nicht belegt (braun)
Die Abschirmung ist mit Masse verbunden.
Elektrischer Aufbau
Spannungsversorgung
Die Stromversorgung erfolgt durch eine Niedervolt-Buchse (5,5 mm Außen- und 2,5 mm Innendurchmesser; Minus-Pol außen, Plus-Pol innen) in der Unterseite des Gehäuses. Die Versorgungsspannung ist 5 Volt. Sie wird über ein Netzteil von Meanwell geliefert. Der Arduino wird mit dem Pololu 9V Step-Up/Step-Down Voltage Regulator S18V20F9 über den VIN-Pin mit 9 Volt versorgt.
In der Sektion I des Gehäuses ist außerdem eine Stromverteilerplatine untergebracht. Stromverteilerplatinen erleichtern die Verkabelung erheblich, da keine Kabelpeitsche gelötet werden muss. Außerdem können bei Bedarf weitere Verbraucher angeschlossen werden.
Um die Neopixel vor Spannungsspitzen zu schützen (siehe dazu: https://learn.adafruit.com/adafruit-neopixel-uberguide/power) und die Spannung zu glätten ist ein Elko (10 V, 2200 Mikrofarrad) parallel geschaltet.
Ansteuerung der Pumpen mit MOSFETs
Geschaltet werden die Pumpen mit einem FQP30N06L, der über einen Widerstand mit 470 Ohm an dem PWM-Ausgang des Arduinos angeschlossen ist. Das Gate ist über einen Widerstand mit 100 kOhm auf Masse gelegt. An den Pumpen sind Freilaufdioden (1N5817) angebracht.
Hallschalter
Für die Messung des Wasserpegels in den Blumenkästen kommen unipolare Hall-schalter (H501) zum Einsatz, die durch einen Neodymmagnet in einem Schwimmer geschaltet werden. Die Hallschalter werden mit 5 Volt betrieben. Nähert sich ein magnetischer Südpol, schaltet der Hallschalter den Signalpin auf GND. Im Arduino muss der interne Pullup-Widerstand aktiviert werden (INPUT_PULLUP), damit sauber zwischen HIGH und LOW differenziert werden kann (mehr zu den Pullups im Arduino-Tutorial).
DHT22
Um über eine erhöhte Feuchtigkeit im Gehäuse gewarnt zu werden, ist ein DHT22 in der Gehäusesektion I verbaut. Der Sensor kann direkt an einen digitalen Eingang angeschlossen werden, es muss aber der interne Pullup-Widerstand (INPUT_PULLUP) aktiviert werden.
TSL2591
Um die Helligkeit der LEDs dem Umgebungslicht anzupassen, ist der Adafruit TSL2591 High Dynamic Range Digital Light Sensor verbaut. Der Sensor muss an die Pins 20 (SDA) und 21 (SCL) angeschlossen werden.
Adafruit Neopixel Mini PCB
In den Blumenkastensensoren ist jeweils ein NeoPixel Mini PCB integriert. Das NeoPixel Mini PCB benötigt 5 Volt und kann daher parallel zum Hallschalter angeschlossen werden. Über eine Signalleitung kann die Farbe und Helligkeit der LEDs gesteuert werden. Es ist vorgesehen, dass die LED im normalen Betriebszustand grün leuchtet. Weitere Betriebszustände, die mit der LED visualisiert werden könnten, wäre „Pumpe läuft“ und „Sensor deaktiviert“.
Adafruit NeoPixel Ring (12 LEDs)
Der Vorratsbehältersensor wird mit einem Adafruit NeoPixel Ring mit 12 LEDs illuminiert. Die LEDs sollen über die Farbe eine direkte Rückmeldung über die Höhe des Wasserstands geben.
Adafruit NeoPixel Ring (24 LEDs)
Unter dem durchsichtigen Deckel des Gehäuses befindet sich ein Adafruit NeoPixel Ring mit 24 LEDs. Der soll zunächst auch erstmal nur die Höhe des Wasserstands im Vorratsbehälter anzeigen. Perspektivisch ließen sich weitere Betriebszustände visualisieren.
Hall-Schalter
Hall-Schalter: Die Signalpins der Hallschalter können direkt an den Arduino angeschlossen werden, da sie bei Vorhandensein eines Magnetfeldes auf Masse gelegt werden.
eTape Liquid Level Sensor
Der Mess- und der Referenzwiederstand werden über einen Spannungsteiler an den analogen Eingängen A0 und A1 angeschlossen. Die Wiederstände für die Spannungsteiler müssen jeweils 1500 Ohm haben.
Neopixel
In die Signalleitungen der Neopixels istein Widerstand mit 470 Ohm eingebaut, um Spannungsspitzen zu vermeiden (siehe dazu: https://learn.adafruit.com/adafruit-neopixel-uberguide/power).
Pin-Belegung am Arduino Due
Im Folgenden ist die Pin-Belegung am Arduino dokumentiert. Um Verwechselungen vorzubeugen, ist außerdem die Farbe der Kabel der Signalleitungen dokumentiert.
Spannungsversorgung für den Arduino:
- GND: über den Pololu 9V Step-Up/Step-Down Voltage Regulator S18V20F9
- Vin: 9 Volt über den Pololu 9V Step-Up/Step-Down Voltage Regulator S18V20F9
ACHTUNG: Das sind die Kabel mit 0,35 qmm Querschnitt!
Spannungsversorgung der Neo-Pixel-Ringe und des TSL2591:
- GND: vom Stromverteilerboard
- 5V: vom Stromverteilerboard
ACHTUNG! Das sind die Kabel mit 0,5 qmm Querschnitt!
Analoge Eingänge
- A0: Variabler Widerstand Level-Sensor und über 1500 Ohm-Widerstand an 5 Volt
- A1: Konstanter Widerstand Level-Sensor und über 1500 Ohm-Widerstand an 5 Volt
Digitale Eingänge:
- Pin 35: Hall-Schalter 1 (direkt) (blau)
- Pin 33: Hall-Schalter 2 (direkt) (blau)
- Pin 31: Hall-Schalter 3 (direkt) (blau)
- Pin 29: Hall-Schalter 4 (direkt) (blau)
- Pin 47: Masse Blumenkastensensor 1 (direkt) (grün)
- Pin 49: Masse Blumenkastensensor 2 (direkt) (grün)
- Pin 51: Masse Blumenkastensensor 3 (direkt) (grün)
- Pin 53: Masse Blumenkastensensor 4 (direkt) (grün)
- Pin 28: DHT22 (grün)
PWM-Ausgänge:
- Pin 11: Pumpe 1 (direkt) (blau)
- Pin 10: Pumpe 2 (direkt) (grün)
- Pin 9: Pumpe 3 (direkt) (blau)
- Pin 8: Pumpe 4 (direkt) (grün)
NeoPixel:
- Pin 36: Blumenkastensensor 1 über 470 Ohm (gelb)
- Pin 38: Blumenkastensensor 2 über 470 Ohm (gelb)
- Pin 40: Blumenkastensensor 3 über 470 Ohm (gelb)
- Pin 42: Blumenkastensensor 4 über 470 Ohm (gelb)
- Pin 44: Wasserstandssensor über 470 Ohm (gelb)
- Pin 48: Neopixelring 1 über 470 Ohm (gelb)
- Pin 50: Neopixelring 2 über 470 Ohm (gelb)
I2C-Bus:
- SDA (20): TSL2591 (SDA)
- SCL (21): TSL2591 (SCL)
Programmierung
Ein Programm zu erstellen, das die Hallschalter überwacht und bei Bedarf die entsprechende Pumpe aktiviert ist ziemlich einfach (Programmversion 0.1 alpha). In (Programmversion 0.2 alpha) wurde die Einbindung des LC-Displays verworfen und die LEDs durch Neopixels ersetzt. Programmversion 0.3 wurde durch eine ganze Reihe verschiedener Funktionen erweitert.
In Programmversion 0.4 wurde die Steuerung der Pumpen auf PWM umgestellt. In Programmversion 0.5 soll der Code so umgeschrieben werden, dass die NeoPixel nicht bloß ein- und ausgeschaltet werden können, sondern die Helligkeit pulsiert werden kann. Dafür ist es nötig, auf den Befehl delay() zu verzichten und stattdessen den Befehl millis() zu verwenden (Programmversion 0.5). Programmversion 0.6 beschränkt sich auf eine Verbesserung des Fading-Effekts der NeoPixel.
Liste der Programmversionen: