Dominik Groothuis: Mikrocontrollergesteuerter Blumengießautomat Kurzfassung Landeswettbewerb Bremen Mikrocontrollergesteuerter Blumengießautomat Blumengießen vergessen? Kein Problem. Mit dem Blumengießautomat kann jede Pflanze aus einem Eimer in der Zimmerecke mit soviel Wasser versorgt werden, wie sie benötigt. Mit dem ARDUINO-Board und einem dafür selbst geschriebenen Programm können einzelne Pumpen so angesteuert werden, dass jede Pflanze in unterschiedlichen Zeiträumen mit genau der richtigen Wassermenge versorgt werden kann. Ein Feuchtesensor misst den Wassergehalt in der Blumenerde und der Mikrocontroller entscheidet, ob die Pflanze gegossen werden muss oder nicht. Die ARDUINO-Plattform ist eine aus Soft- und Hardware bestehende Physical-ComputingPlattform. Die Hardware besteht aus einem einfachen I/O-Board mit einem Mikrocontroller und analogen und digitalen Ein- und Ausgängen. Die Programmsprache beruht auf Processing. ARDUINO kann benutzt werden, um eigenständige interaktive Objekte zu steuern. Seite 2/11 ID: 3654:106367 Dominik Groothuis: Mikrocontrollergesteuerter Blumengießautomat Inhaltsverzeichnis Kurzfassung....................................................................................................................... 2 Inhaltsverzeichnis ............................................................................................................. 3 Einleitung ........................................................................................................................... 4 Theorie ............................................................................................................................... 5 Die ARDUINO-Umgebung ............................................................................................... 5 Die Hardware................................................................................................................... 5 Die Software .................................................................................................................... 6 Ergebnisse ......................................................................................................................... 7 Vorüberlegungen ............................................................................................................. 7 Spannungsteiler ............................................................................................................... 8 Die Programmierung........................................................................................................ 8 Das ARDUINO-Programm ............................................................................................... 9 Zusammenbau und Schaltung des Blumengießautomaten ........................................... 10 Diskussion ....................................................................................................................... 11 Quellen- und Literaturverzeichnis ...................................................................................... 11 Seite 3/11 ID: 3654:106367 Dominik Groothuis: Mikrocontrollergesteuerter Blumengießautomat Einleitung Während der Urlaubszeit, besonders in den Sommerferien, kommt bei vielen Urlaubern immer wieder die Frage auf: Wer gießt meine Blumen, damit sie die Ferien unbeschadet überstehen. Oft fahren auch die Nachbarn oder Freunde zur selben Zeit in den Urlaub und können die Fürsorge für die Blumen nicht übernehmen. Unsere Idee war, einem Automaten diese Aufgabe zu übertragen. Die einfachste Möglichkeit wäre eine Zeitschaltuhr, die in bestimmten Zeitabständen für kurze Zeit eine Pumpe einschaltet, die über ein Schlauchsystem Wasser in die Blumentöpfe pumpt. Nachteil aber ist, dass alle Pflanzen immer die gleiche Wassermenge bekommen ungeachtet, ob sie diese Wassermenge auch benötigen. Also überlegten wir weiter, ob es möglich wäre, den Wasserbedarf für jede einzelne Pflanze zu ermitteln, um ihr gezielt die benötigte Wassermenge zukommen zu lassen. Das hieße, dass die in der Blumenerde enthaltene Feuchtigkeit über einen Sensor ermittelt werden müsste, um der Pflanze dann genau die richtige Wassermenge zu zuführen. Das wiederum setzt ein intelligentes Steuerungssystem voraus. Im Rahmen unserer Jufo-AG wurden wir im Internet auf einen Mikrocontroller aufmerksam, der diese Aufgabe bewältigen könnte. Wir besorgten uns diesen Mikrocontroller namens ARDUINO, beschäftigten uns mit der Programmierung dieses Controllers und machten erste Experimente. Schon nach kurzer Zeit hatten wir uns in den Umgang mit dem ARDUINO-Board eingearbeitet und waren in der Lage den Mikrocontroller über kleine Programme, die auf das ARDUINO-Board hochgeladen werden mussten, zu steuern. Jetzt konnten wir mit der eigentlichen Arbeit, dem Bau des Blumengießautomaten, beginnen. Seite 4/11 ID: 3654:106367 Dominik Groothuis: Mikrocontrollergesteuerter Blumengießautomat Theorie Die ARDUINO-Umgebung Die ARDUINO-Plattform ist eine aus Softund Hardware bestehende Physical-Computing-Plattform. Beide Komponenten sind im Sinne von Open Source quelloffen, d.h. sie können von jedem Anwender benutzt und verändert werden. Die Hardware besteht aus einem einfachen I/O-Board mit einem Mikrocontroller und analogen und digitalen Ein- und Ausgängen. Die Entwicklungsumgebung beruht auf der Programmiersprache Processing (einem Java-Dialekt), die vor allem für Das ARDUINO Board Duemilanove Nicht-Informatiker gedacht ist. ARDUINO kann benutzt werden, um eigenständige interaktive Objekte zu steuern oder um mit Softwareanwendungen auf Computern zu interagieren. Die Hardware Die Hardware des ARDUINO Duemilanove basiert auf einem Atmel AVR-Mikrocontroller dem ATmega328. Alle Boards werden entweder über USB oder eine externe Spannungsquelle mit 5-9 Volt versorgt und verfügen über einen 16 MHz-Quarzoszillator. Der Mikrocontroller ist mit einem Boot-Loader (spezielle, grundlegende Software zum Betrieb des ARDUINO-Boards) vorprogrammiert, wodurch die Programmierung direkt über die USB – Schnittstelle, ohne externes Programmiergerät erfolgen kann. Die ARDUINO-Boards stellen die meisten I/O-Pins des Mikrocontrollers zur Nutzung für elektronische Schaltungen zur Verfügung. Die aktuell gängigen Boards bieten 14 digitale I/O-Pins und 6 analoge Ein- und Ausgänge. Für die Erweiterung werden vorbestückte oder teilweise unbestückte Platinen sogenannte „Shields“ - angeboten, die auf das ARDUINO-Board aufsteckbar sind. Es können aber auch z.B. Steckplatinen für den Aufbau von Schaltungen verwendet werden. Seite 5/11 ID: 3654:106367 Dominik Groothuis: Mikrocontrollergesteuerter Blumengießautomat Die Software ARDUINO bringt eine eigene Integrierte Entwicklungsumgebung (Abkürzung: IDE, von englisch: integrated development environment) mit. Dabei handelt es sich um eine plattformunabhängige JavaAnwendung. Die Software läuft unter Windows, Mac und Linux. Die Programmiersprache Processing basiert auf der stark vereinfachten Programmierung in C/C++. Die ARDUINO-IDE bringt einen eigenen Code-Editor mit und verfügt über einen integrierten Compiler (Programmübersetzer) zur Überprüfung des Programmcodes. Zusätzlich wird die Programmierung durch weitere ARDUINO-Libraries (Programmbibliotheken) stark vereinfacht. Der ARDUINO Code-Editor Für ein funktionstüchtiges Programm genügt es, zwei Funktionen zu definieren: void setup() - wird beim Start des Programms aufgerufen, nützlich um z.B. Pins als Eingang oder Ausgang zu definieren und void loop() - wird durchgehend durchlaufen, solange bis das ARDUINO-Board ausgeschaltet wird. Hier ein Beispiel für ein Programm (in der ARDUINO-Sprache Sketch genannt), das eine an das ARDUINO-Board angeschlossene LED blinken lässt: /* Programm "Blink" Schaltet abwechselnd eine LED für eine Sekunde an und dann für eine Sekunde aus. Der Vorgang wiederholt sich. */ int LEDPin = 13; //Die LED ist an Pin 13 angeschlossen void setup() { pinMode(LEDPin, OUTPUT); //Der Pin 13 wird als Ausgang festgelegt. } void loop() { digitalWrite(LEDPin, HIGH); delay(1000); digitalWrite(LEDPin, LOW); delay(1000); } Seite 6/11 //LED an //1 Sekunde warten //LED aus //1 Sekunde warten ID: 3654:106367 Dominik Groothuis: Mikrocontrollergesteuerter Blumengießautomat Ergebnisse Vorüberlegungen Zunächst mussten einige Vorüberlegungen angestellt werden, welche Geräte benutzt und angeschafft werden sollten. Als Wasserpumpe sollte eine 12 Volt-Pumpe aus dem Campingbereich dienen. Der Atmega Controller auf dem ARDUINO-Board hat einen maximalen zulässigen Ausgangsstrom von 40 mA pro Ausgang, der nicht überschritten werden darf. Unsere Pumpe hatte aber eine größere Stromaufnahme. Also musste sie über ein Relais geschaltet werden. Aber auch ein Relais hat eine größere Stromaufnahme als 40 mA. Wenn mit dem ARDUINO ein Relais angesteuert werden soll, so ist das nur mit einem vorgeschalteten Transistor und einer Freilaufdiode möglich oder es wird ein DarlingtonArray (in einer integrierten Schaltung (IC)) verwendet. Wir entschlossen uns für die Verwendung des ULN2003 - IC’s. Der ULN2003 beinhaltet 7 solcher Darlington Transistorkombinationen. Des Weiteren enthält er bereits die notwendigen Freilaufdioden. Er ist also ideal dazu geeignet um größere Verbraucher zu schalten. Der Strom zur Steuerung der Relais und für die Pumpe selbst, wird dabei von einer externen Stromquelle zur Verfügung gestellt. Mit dem Darlington Array ULN2003 lassen sich also insgesamt 7 Relais steuern und damit sieben verschiedene Bewässerungsprogramme durchführen. (In unserer Schaltung benutzen wir beispielhaft nur ein Relais). Nachfolgend ein schematischer Aufbau in dem alle 7 Arrays verwendet werden: Der Anschluss des ULN2003 an das ARDUINO-Board Schaltung des ULN2003 Ein weiteres Problem stellte die Messung der Feuchtigkeit in der Blumenerde dar. Wir entschieden uns für den Feuchtesensor KFS33 der Firma Hygrosens. Allerdings stellte sich heraus, dass sich der Anschluss an das ARDUINO-Board sehr schwierig gestaltete. Wir nahmen Kontakt zur Herstellerfirma auf. Die Herstellerfirma riet uns von einer Verwendung des Sensors in Blumenerde ab, sodass wir uns um andere Möglichkeiten der Feuchtebestimmung kümmern mussten. Wir führten Experimente mit der Messung des Ohmschen Widerstandes in Blumenerde durch und stellten schnell fest, dass sich das Verfahren gut für unsere Zwecke eignete. Feuchte Blumenerde hat, je nach Wassergehalt, einen elektrischen Widerstand von 10 k€ - 1000 k€, trockene Erde einen sehr großen Widerstand, der nicht mehr messbar war. Also nahmen wir als Sensorersatz zwei Edelstahl-Schaschlikspieße, die wir im Abstand von ca. 3 cm in die Blumenerde steckten und mit dem ARDUINO-Board verbanden. Seite 7/11 ID: 3654:106367 Dominik Groothuis: Mikrocontrollergesteuerter Blumengießautomat Die Schaschlikspieße stellten in Kombination mit einem Vorwiderstand von 620 k€ einen Spannungsteiler dar. Auf diese Weise konnten am Analogeingang des ARDUINO-Boards Spannungen von 0 Volt – 5 Volt, je nach Feuchtigkeit der Erde, gemessen werden. Je größer die Spannung, desto trockener die Blumenerde. Nach einigen Experimenten legten wir einen Wert fest, ab dem die Blume begossen werden sollte. Spannungsteiler Der Analogeingang des ARDUINO wandelt eine Spannung von 0 Volt bis 5 Volt in einen Zahlenwert von 0 bis 1023 um. Der Wert 1 entspricht demnach einer 5 Volt Spannung von € 0, 0049 Volt . 1024 Das Verhältnis aus Vorwiderstand und Sensorwiderstand bestimmt die am Analogeingang gemessene Spannung. Der eingestellte Wert von 700 entspricht also einer Spannung von 3,42 Volt oder einem Widerstand von 1340 k€. Wird am Sensor also eine Spannung von 3,42 Volt bis 5 Volt gemessen, ist der elektrische Widerstand der Blumenerde größer als 1340 k€, die Erde zu trocken und die Pflanze muss begossen werden. Die Programmierung Unser Ziel war es nun, ein Programm für das ARDUINO-Board zu schreiben, dass die Topfblumen automatisch gießt, wenn sie Wasser benötigen. Im Programmkopf haben wir zunächst alle Anschlüsse des ARDUINO-Boards und die daran angeschlossenen Bauteile sowie alle Anfangseinstellungen festgelegt (int bedeutet dabei Initialisierung - Herstellen eines bestimmten Anfangszustands). Im Setup wird festgelegt, welcher Anschluss als Ein- bzw. Ausgang arbeiten soll. Mit dem Befehl Serial.begin (9600) wird der Serialmonitor mit einer Datenrate von 9600 Baud (9600 Zeichen pro Sekunde) gestartet, der in einem Extrafenster die gemessenen Werte auf dem Computerbildschirm ausgibt. Mit der Bewässerungszeit kann die Wassermenge, die in den Blumentopf gepumpt wird, festgelegt werden. Das Messintervall steht für den Zeitraum zwischen zwei Messungen. Die Programmschleife (voidloop ()) beginnt mit dem Auslesen des Sensorwertes bzw. des Ohmschen Widerstandes der Blumenerde. Danach wird der gemessene Wert auf dem Serialmonitor ausgegeben. Damit die Pflanze nicht ständig unter Strom steht, wird die Spannung am Sensor nur für die kurze Dauer der Messung eingeschaltet. Die drei LED’s (grün, gelb, rot), dienen der Kontrolle des Programmablaufes. Wenn die rote LED leuchtet, heißt das, dass die Blume zu trocken ist. Nach 4 Sekunden (die Zeit kann man beliebig einstellen), leuchtet die gelbe LED und die Pumpe wird für die Dauer der Bewässerungszeit gestartet und die Pflanze gegossen. Wenn die Pflanze zum Zeitpunkt der Messung noch feucht ist, geht die grüne LED an und ARDUINO wartet bis zur nächsten Messung. Wurde die Pflanze bei der letzten Messung gegossen, bleibt die rote LED eingeschaltet. Seite 8/11 ID: 3654:106367 Dominik Groothuis: Mikrocontrollergesteuerter Blumengießautomat Das ARDUINO-Programm /* Jugend forscht - Projekt 2011 Blumengießautomat Projektteilnehmer: Dominik Groothuis */ int Relais1 = 2; int Relais2 = 3; int Relais3 = 4; int Relais4 = 5; int Relais5 = 6; int Relais6 = 7; int Relais7 = 8; int LEDrot = 11; int LEDgelb = 12; int LEDgruen = 13; int Sensor = A5; int Sensorwert = 0; int Bewaesserungszeit = 3000; int Messintervall = 10000; float Sensorspannung = A0; float Spannung; void setup(){ pinMode(Sensor, INPUT); pinMode(Sensorspannung, OUTPUT); pinMode(Relais1, OUTPUT); pinMode(Relais2, OUTPUT); pinMode(Relais3, OUTPUT); pinMode(Relais4, OUTPUT); pinMode(Relais5, OUTPUT); pinMode(Relais6, OUTPUT); pinMode(Relais7, OUTPUT); pinMode(LEDgruen, OUTPUT); pinMode(LEDgelb, OUTPUT); pinMode(LEDrot, OUTPUT); Serial.begin(9600); } void loop(){ digitalWrite(Sensorspannung, HIGH); delay(1000); Sensorwert = analogRead(Sensor); Serial.print("Sensorwert: "); Serial.println(Sensorwert); Spannung = Sensorwert*5.00/1024; Serial.print("Spannung am Sensor: "); Serial.print(Spannung); Serial.println(" Volt"); Serial.print("Widerstand der Blumenerde: "); Serial.print(620*Spannung/(5-Spannung)); Serial.println(" kOhm"); delay(1000); digitalWrite(Sensorspannung, LOW); if (Sensorwert > 700) { digitalWrite(LEDgruen, LOW); digitalWrite(LEDrot, HIGH); delay(2000); digitalWrite(LEDgelb, HIGH); digitalWrite(Relais1, HIGH); delay(Bewaesserungszeit); digitalWrite(LEDgelb, LOW); digitalWrite(Relais1, LOW); } else { digitalWrite(LEDrot, LOW); digitalWrite(LEDgruen, HIGH); } delay(Messintervall); } Seite 9/11 //Relais 1 an Port 2 //Relais 2 an Port 3 //Relais 3 an Port 4 //Relais 4 an Port 5 //Relais 5 an Port 6 //Relais 6 an Port 7 //Relais 7 an Port 8 //LED anschliessen an Port 11 //LED anschliessen an Port 12 //LED anschliessen an Port 13 //Feuchtesensor an Analogeingang 5 //initialisiert den Sensorwert //legt fest, wie lange die Pumpe läuft //legt das Messintervall fest //A0 versorgt den Sensor mit 5 Volt //Sensoreingang //Spannungsausgang //Relaisausgang 1 //Relaisausgang 2 //Relaisausgang 3 //Relaisausgang 4 //Relaisausgang 5 //Relaisausgang 6 //Relaisausgang 7 //LEDgrün Ausgang //LEDgelb Ausgang //LEDrot Ausgang //Start des Serial Monitors //Einschalten der Sensorspannung //Wartezeit 1 Sekunde //Lesen des Sensorwertes //Ausgabe des Sensorwertes auf den Monitor //Ausgabe der Spannung am Sensor //Ausgabe des Widerstandes der Blumenerde //Wartezeit 1 Sekunde //Ausschalten der Sensorspannung //Prüfen des Sensorwertes //Ausschalten der grünen LED //Einschalten der roten LED //Wartezeit 2 Sekunden //Einschalten der gelben LED //Einschalten der Pumpe //Einschaltdauer der Pumpe //Ausschalten der gelben LED //Ausschalten der Pumpe //Ausschalten der roten LED //Einschalten der grünen LED //Wartezeit Messintervall ID: 3654:106367 Dominik Groothuis: Mikrocontrollergesteuerter Blumengießautomat Zusammenbau und Schaltung des Blumengießautomaten Jetzt konnten wir mit dem Zusammenbau unseres Gießautomaten beginnen. Wir besorgten uns die Wasserpumpe aus einem Laden für Campingartikel und alle weiteren Komponenten im Elektronikfachhandel. Der Übersicht halber entschlossen wir uns den Automaten beispielhaft nur mit einem Gießprogramm zu bauen. Den Aufbau der gesamten Schaltung haben wir schematisch mit dem Programm FRITZING, der Fachhochschule Potsdam erstellt: Als externe Spannungsquelle benutzten wir ein 12 Volt Netzgerät aus der Schulsammlung. Die gesamte Schaltung konnten wir auf zwei Breadboards (Steckleiterplatte) unterbringen und mit wenigen Kabeln mit dem ARDUINO-Board, dem Netzteil, der Pumpe und den Schaschlikspießen (unser Feuchtesensor) verbinden. Als Testblumen dienten zwei kleine Blumentöpfe mit feuchter bzw. trockener Erde. Die 12 Volt-Tauchpumpe taten wir in einen gefüllten Wassereimer. Um während des Tests zwischen zwei Messungen nicht zu lange warten zu müssen, stellten wir das Messintervall (zeitlicher Abstand zwischen zwei Messungen) auf 30 Sekunden ein (im richtigen Betrieb sollte diese Zeit 24 Stunden betragen). Die Bewässerungszeit entspricht einer Wassermenge von etwa 100 ml. Der erste Test verlief gleich erfolgreich. Steckten unsere Spieße in der trockenen Erde, sprang alle 30 Sekunden die Pumpe für 3 Sekunden an. Befanden sich die Spieße in der feuchten Erde, wurde kein Wasser gepumpt und die grüne LED leuchtete. Seite 10/11 ID: 3654:106367 Dominik Groothuis: Mikrocontrollergesteuerter Blumengießautomat Diskussion Wir haben in der Jufo-AG unserer Schule ungefähr ein halbes Jahr an unserem Projekt gearbeitet. Die Hälfte der Zeit haben wir uns in den Umgang und die Programmierung des ARDUINO-Boards eingearbeitet. Ohne große Vorkenntnisse in Elektronik und Informatik waren wir sehr schnell in der Lage kleine Programme zu schreiben, die sofort mit dem ARDUINO in die Tat umgesetzt werden konnten. Wir waren sehr schnell von der Einfachheit und der Robustheit des ARDUINO begeistert. Mit diesem Mikrocontroller eröffnen sich unbegrenzte Möglichkeiten in zahllosen Projekten. Man bekommt schnell Erfolgserlebnisse und der Ergeiz, kompliziertere Programme und Schaltungen zu entwerfen, wächst ständig. Dass unser Blumengießautomat auf Anhieb funktionierte, zeigt wie einfach das Arbeiten mit dem ARDUINO-Board ist. Der Blumengießautomat lässt sich auf 7 verschiedene Gießprogamme erweitern, so dass der Mikrocontroller auf den unterschiedlichen Wasserbedarf einzelner Pflanzen eingestellt werden kann. Im Programm des Automaten ist das bereits berücksichtigt. Auch kann als Erweitung des Projektes die Luftfeuchtigkeit und die Raumtemperatur bei der Bewässerung der Pflanzen berücksichtigt werden. Zu diesem Zweck können noch weitere Sensoren an das ARDUINO-Board angeschlossen und in das Programm integriert werden. Die Arbeit an diesem Projekt und mit dem ARDUINO hat soviel Spaß gemacht, dass wir in unserer Jufo-AG vermutlich weitere Projekte mit diesem Multitalent versuchen werden zu realisieren. Quellen- und Literaturverzeichnis Bücher: Odendahl, Finn, Wenger: ARDUINO - Physical Computing für Bastler, Designer und Geeks, O’Reilly, Köln 2009 Internetseiten: http://de.wikipedia.org/wiki/Arduino-Plattform http://www.arduino.cc/ http://www.datasheetcatalog.com/datasheets_pdf/U/L/N/2/ULN2003.shtml http://www.freeduino.de/ http://fritzing.org/ Seite 11/11 ID: 3654:106367