Benutzer-Werkzeuge

Webseiten-Werkzeuge


Seitenleiste

projektewise21:pflanzenroboterws21public:start

Pflanzenroboter

1 Themenbeschreibung

Die Aufgabe unseres Pflanzenroboters besteht darin, sich – wie der Name schon sagt – um eine Pflanze zu kümmern und diese zu versorgen. Dabei werden vor allem zwei Aspekte berücksichtigt: Wasser und Licht. Das bedeutet zum einen, dass unser Roboter erkennen kann, wie trocken bzw. nass die Topferde der Pflanze ist und entsprechend die Pflanze zu gießen. Zum anderen bedeutet das, dass unser Roboter der Pflanze möglichst viel Licht spenden soll. Die Grundidee zur Umsetzung ist, dass sich der Roboter auf einer Fensterbank vor- und zurück bewegt und sich somit im Laufe des Tages dem Stand der Sonne anpasst, damit die Pflanze – die sich auf dem Roboter befindet – so möglichst viele Sonnenstunden bekommt. Bewusst weggelassen haben wir dabei, dass der Roboter Lenkbewegungen durchführt, da diese in der Regel nicht benötigt werden solange sich der Roboter auf der geraden Fensterbank bewegt. Damit haben wir uns auch gegen eine Bewegung innerhalb eines größeren Umfelds (wie bspw. dem ganzen Zimmer) entschieden. Außerdem weggelassen haben wir, die Versorgung mehrerer Pflanzen – unser Roboter kann also nur gleichzeitig eine Pflanze versorgen.

Abbildung 1: Unser fertiger Pflanzenroboter

2 Umsetzung

Überblick über das Gesamtsystem

Gesteuert wird der Roboter mit Hilfe eines Arduino Nano. Die technischen Bauteile sind auf der Unterseite des Roboters angebracht (siehe Abbildung 2). Dort befinden sich außerdem zwei von Motoren angesteuerte Räder und ein drittes Rad, welches als Stützrad dient. Auf der Oberseite befinden sich die Pflanze selber, sowie ein Behälter mit Wasser (Abbildung 3).

Abbildung 2: Unterseite des Roboters
Abbildung 3: Oberseite des Roboters


1 Stepper-Motoren & Treiber
2 Bluetooth-Modul
3 Anschluss des Feuchtigkeitssensors
4 MOSFET
5 Abstandssensoren (Ultraschall)
6 LiPo-Akku & Akkuwächter
7 Feuchtigkeitssensor
8 Wasserpumpe

Tabelle 1: Beschriftung der Teile

Zum Gießen der Pflanze benötigten wir neben dem Feuchtigkeitssensor und der Wasserpumpe noch eine MOSFET-Schaltung, um die Wasserpumpe anzusteuern und einen Akku, da die von der Pumpe benötigte Spannung über den 5 V des Arduinos liegt. Um die Bewegung auf der Fensterbank zu realisieren, haben wir Stepper-Motoren, zwei Abstandssensoren und ein Bluetooth-Modul verwendet. Auch die Stromversorgung der Motoren lief dabei mit Hilfe des Akkus.

Beschreibung der einzelnen Systembestandteile

Der Ablauf der Schritte, die der Roboter durchführt, lässt sich in die Folgenden vier Hauptbestandteile herunterbrechen.

  • Position prüfen:
Bild 4: Skizze zur Position des Roboters
Abbildung 4: Skizze zur Bewegung des Roboters bezüglich der Fensterbank

Wie bereits beschrieben war es unser Ziel, der Pflanze möglichst viel Sonnenlicht zu ermöglichen. Da es wegen der Fensterscheiben in der Regel nicht möglich ist, das UV-Licht als Indikator für Sonnenlicht zu messen, haben wir uns dazu entschieden, diesen Aufgabenteil anders umzusetzen: Da die Sonne (relativ zu unserer Pflanze) jeden Tag zwischen Sonnenauf- und -untergang ungefähr die gleiche Bewegung durchführt, soll sich der Roboter und damit die Pflanze ebenfalls im Laufe des Tages bewegen. Dazu soll der Roboter morgens ganz rechts auf der Fensterbank starten und sich über den Tag auf die gegenüberliegende Seite bewegen. Die Aufgabe der Pflanze möglichst viel Licht zu ermöglichen, wird daher nicht durch eine Überprüfung der Helligkeit, sondern einer Überprüfung der relativen Position auf der Fensterbank realisiert. Vorne und hinten haben wir dazu je einen Abstandssensor verwendet. Damit werden bei uns in der Funktion entfernungMessen(), der je der Trigger- und der Echo-Pin des Entfernungssensors übergeben werden, die Abstände vor und hinter dem Roboter zur Wand der Fensterbank gemessen. Diese werden hier in der Skizze (Bild 4) exemplarisch als x und y bezeichnet. Damit lässt sich wie folgt berechnen, wie viel Prozent der Gesamtstrecke der Fensterbank sich der Roboter bereits bewegt hat. Bild: Berechnung der aktuellen Position Außerdem haben wir mit Hilfe eines Bluetooth-Moduls eine serielle Kommunikation zwischen dem Roboter und Processing hergestellt. Damit wird ermöglicht, dass der Roboter die aktuelle Uhrzeit erhält (wobei wir uns an dieser Stelle auf die Stunde der aktuellen Uhrzeit beschränkt haben, eine genauere Uhrzeit ist auch nicht nötig). Somit kann eine soll-Position ermittelt werden, also wie viel Prozent der Zeit zwischen Sonnenauf- und -untergang bereits vergangen ist. Hier ist noch zu erwähnen, dass wir uns zunächst auf feste Zeiten für Sonnenauf- bzw. -untergang beschränkt haben. Durch einen Vergleich dieser soll- und der tatsächlichen Position gibt die Funktion positionPruefen() zurück, ob sich der Roboter bewegen muss.

  • Bewegen:

Die Bewegung wird über zwei Stepper-Motoren gesteuert, die hinten an dem Roboter angebracht und jeweils mit einem Rad verbunden sind. Zur Stabilität verwenden wir vorne außerdem ein weiteres Rad, dieses läuft allerdings nur mit und dient sich selbst zum Antrieb. Beide Motoren werden über dieselben Pins angesteuert, da diese stets dieselbe Bewegung durchführen. Gesteuert werden die Motoren über zwei Motortreiber.

Abbildung 5: Schaltskizze der Motoren und Treiber

Wir unterscheiden zwei Bewegungen: Entweder muss der Roboter tagsüber seine Position anpassen, dann bewegt sich der Roboter jeweils in kleinen Schritten vor bzw. zurück, überprüft dann erneut seine Position und bewegt sich anschließend je nach dem erneut. Oder der Roboter hat am Ende des Tages die gegenüberliegende Wand erreicht und muss sich nun zurückbewegen, dann fährt er so lange rückwärts, bis der Abstand zwischen Wand und Roboter klein genug ist (in unserem Fall unter 2 cm).

  • Wasser prüfen:

Um zu prüfen, wie feucht die Erde ist, verwenden wir einen kapazitiven Feuchtigkeitssensor (dieser schadet im Gegensatz zu einem elektrischen Sensor der Pflanze nicht), welcher die Kapazität des Bodens misst, die sich mit der Bodenfeuchtigkeit verändert. In der Luft (also in trockener Umgebung) haben wir hierbei den Messwert 625 erhalten, befindet sich der Sensor komplett im Wasser, den Messwert 315. Nach einigem Ausprobieren haben wir uns somit auf den Schwellwert 450 geeinigt, wird also ein Messwert größer als 450 gemessen, so soll die Pflanze gegossen werden.

  • Gießen:

Zum Betreiben der Pumpe müssen wir ein MOSFET anschließen, damit wir darüber den Stromfluss in der Pumpe regeln. Wenn also der vorhin genannte Schwellenwert überschritten wird, so wird über die Steuerelektrode „Gate“ der Betrieb der Pumpe begonnen, und die Pflanze wird gegossen. Dies geschieht solange bis die Feuchtigkeitswerte wieder in Ordnung sind.

Technische Daten

Bauteile
Technische Bauteile:

  • Arduino nano
  • Breadboard
  • LiPo-Akku
  • Akkuwächter
  • 2 Stepper-Motoren
  • 2 entsprechende Motorentreiber
  • 2 Kondensatoren
  • 2 Ultraschall-Abstandssensoren
  • Wasserpumpe
  • Kapazitiver Feuchtigkeitssensor
  • MOSFET
  • Bluetooth-Modul
  • verschiedene Widerstände
  • Kabel

Weitere Bauteile:

  • Holz
  • 3 Räder
  • Schläuche
  • Kabelbinder
  • Schrauben
  • Blumentopf
  • Gefäß

Pin-Belegung

Arduino Pin Funktion
A0 Feuchtigkeitssensor: Messdaten empfangen
4 Wasserpumpe ansteuern
5 Entfernungssensor hinten: Trigger-Pin
6 Entfernungssensor hinten: Echo-Pin
11 Entfernungssensor vorne: Trigger-Pin
12 Entfernungssensor vorne: Echo-Pin
2 Motor: Direction
3 Motor: Step
10 Bluetooth TXD
9 Bluetooth RXD

Tabelle 2: Pin-Belegungs-Tabelle

3 Ergebnis und Diskussion

Alles in allem sind wir mit unserem Projekt zufrieden: Unser Roboter kann die Aufgaben, die wir uns am Anfang des Semesters vorgenommen haben, umsetzen und sich somit um die grundlegenden Aspekte einer Pflanze kümmern und diese versorgen. Trotzdem gibt es noch möglich Erweiterungen, die wir nicht umgesetzt haben:

  • Während wir in unserem Programm feste Uhrzeiten für Sonnenauf- und -untergang verwenden, ließe sich die Bewegung optimieren, wenn man statt festen Zeiten täglich die tagesaktuellen Uhrzeiten nutzen könnte, indem man bspw. mit Hilfe von Processing nicht nur die aktuelle Stunde, sondern außerdem die Zeit von Sonnenauf- bzw. -untergang ebenfalls übermitteln würde.
  • Um zu verhindern, dass der Roboter von der Fensterbank fallen kann (z. B. wenn er schräg steht) wären weitere Abstandssensoren optimal, sodass verhindert wird, dass sich der Roboter weiterbewegt, messen diese Sensoren einen zu großen Abstand, also dann, wenn der Roboter zu nah am Rand steht.
  • Ein an den Roboter angeschlossener Bildschirm könnte dazu genutzt werden, Informationen über das Wohlbefinden der Pflanze auszugeben. Zum Beispiel könnte angezeigt werden, dass der Wasserbehälter leer ist, wenn sich die Bodenfeuchtigkeit auch nach wiederholtem Gießen nicht ändert. Er könnte auch als Input genutzt werden, sodass es bspw. die Möglichkeit gibt, einzugeben, ob eine Pflanze viel oder wenig Wasser benötigt und anhand dessen der Schwellwert zum Gießen der Pflanze angepasst wird.

4 Code und Rohdaten

projektewise21/pflanzenroboterws21public/start.txt · Zuletzt geändert: 2022/05/14 19:24 von d.golovko