Benutzer-Werkzeuge

Webseiten-Werkzeuge


Seitenleiste

projekte2014:giessroboter:projektdokumentation

Projektdokumentation

Gruppenmitglieder: A.S chäffer, V. Schröder, J. Broermann, T. Watson

Der Gießroboter ist ein Roboter, der automatisch auf eine Pflanze zufährt und sie dann gießt. Außerdem ist man in der Lage, die Wassermenge der Pumpe, durch Knopfdruck zu regeln.

Einleitung

Wir bauen einen mobilen Roboter, der in der Lage ist, anhand bestimmter Daten, mehrere verschiedene Pflanzen in einem Raum zu bewässern. Dabei bewegt er sich autonom (ohne aktive Steuerung durch den Menschen) zu den einzelnen Pflanzen, wenn Wasserbedarf besteht. Der Roboter soll eine ihm vorgegebene Wassermenge für jede Pflanze aufbringen, die durch eine Steuereinheit initialisiert wird. Die einzige Aufgabe des Menschen wird sein, den Tank einmalig mit Wasser zu füllen und dem Roboter mitzuteilen, welche Wassermenge zu jeder Pflanze gehört, da der Roboter alle anderen Aufgaben vollautomatisch übernimmt. Der Roboter soll sich eigenständig im Raum bewege können. Dazu benötigt er (a) ein Antriebssystem und (b) eine Sensorik, die ihm einen Überblick über seine nähere Umgebung gibt um somit die Pflanze anzusteuern. Neben der mechanischen Umsetzung müssen Programmroutinen entwickelt werden, die die Sensordaten verarbeiten und die Motoren dementsprechend ansteuern. Letztendlich muss der Roboter so robust konstruiert sein, dass er potentielle Zusammenstöße mit der Umgebung unbeschadet übersteht.

Bewegung im Raum

Im folgenden Abschnitt stecken schon viele nützliche Informationen, aber die Struktur ist noch verbesserungswürdig:

1.) Zuerst sollte in einigen wenigen Sätzen ein grober Überblick über die tatsächlich gewählte Lösung gegeben werden, der hilft, die folgenden Details einzuordnen.

2.) Danach legt eine Beschreibung der Hardware und ihrer Funktionen die Grundlage für die Beschreibung der verwendeten Algorithmen.

3.) Und als Abschluss (und am ausführlichsten) folgt eine Beschreibung des zur Lösung der Problemstellung verwendeten Verfahrens/der Software und Algorithmen.

Karosserie

Der Roboter muss sich zum Erfüllen seiner Aufgabe flexibel im Raum bewegen können, ohne dabei zwischen Hindernissen stecken zu bleiben. Darüber hinaus muss er es schaffen, einen bis zu 5 kg schweren Wassertank zu befördern und genug Platz für einen Aufbau bereitstellen, der als Gießarm dienen soll, ohne durch seine Trägheit das Gleichgewicht zu verlieren. Wir setzten auf eine runde Konstruktion, die nach außen hin abgeschlossen ist (keine über den Rand ragenden Bauteile, innerhalb der Grundfläche platzierte Räder), um ein Hängenbleiben an Hindernissen zu verhindern. Das System aus 3 Rädern, von denen zwei angetrieben werden, ist ausreichend, um genügend Stabilität zu liefern und den Roboter in alle Himmelsrichtungen fahren zu lassen. Der Tank befindet sich auf der tiefsten Ebene, damit sich das schwerste Gewicht möglichst tief am Boden befindet (Stabilität). Eine darüber liegende Ebene sorgt für einen guten Zugang zur Technik und genug Platz für den Gießarm. Somit ist der Roboter sehr beweglich, stabil und unempfindlich gegenüber Kanten.

Gut beschrieben, wenn auch nicht in letzter Konsequenz ehrlich (der Tank, der Tank… er steht heraus…). Kann der Roboter wirklich aus dem Stand in alle Richtungen fahren? Oder ist es nicht vielleicht etwas anderes, was ihr meint?

Steuerung

Eine Grundsätzliche Erklärung des Sender/Empfänger Prinzips ist nötig, damit Uneingeweihte verstehen, was gemeint ist. Außerdem wäre ein Foto, auf dem die Komponenten beschriftet sind, sehr hilfreich.

Die Drehbewegung wird durch ein Entgegenlaufen der zwei elektrisch betriebenen Räder ermöglicht. Durch ein eingebautes Zählsystem ist es möglich, die Geschwindigkeit der Räder festzustellen und anzupassen. Dies dient einerseits dem Gleichlauf und andererseits dem kontrollierten Drehvorgang um einen vorgegebenen Winkel. Dies ließe sich zwar mit Step-Motoren einfacher bewerkstelligen, allerdings benötigten wir die höhere Leistung der Getriebemotoren für den Transport des bis zu 5kg schweren Wassertanks, weshalb wir die Schwierigkeit der präzisen Steuerung in Kauf nahmen, was uns letztendlich auch geglückt ist. Wir befestigten den Infrarot-Empfänger auf einem Servo-Motor an der Spitze der Karosserie, um ein schnelles Suchen des Signals zu ermöglichen. Darüber hinaus schwebte uns die Idee vor Augen, die Fahrtrichtung des Roboters mittels drehbarem Empfänger während der Fahrt zu korrigieren, was uns leider dieses Semester nicht geglückt ist. Die Konstruktion des schwenkbaren Empfängers auf einem extra Servo mag somit etwas überflüssig erscheinen, da der Roboter in seiner momentanen Funktionalität auch mit einen fest montierten Empfänger funktioniert hätte. Wir programmierten die Servo/Infrarot-Empfängereinheit so, dass sie den von der „Geradeaus“-Linie abweichenden Winkel ausgibt, um den sich der Roboter drehen soll, bevor er seine Fahrt antritt. Vor Fahrtantritt muss sich der Roboter um den Abstand zwischen Empfängereinheit und Drehachse nach vorn bewegen, damit das Drehzentrum des Roboters auch an der richtigen Stelle liegt. Wird das Signal verloren, stoppt der Roboter seine Fahrt und die Empfängereinheit nimmt ihre Suche von vorne auf.

Probleme

Die größten Probleme bei der Programmierung und Planung des Bewegungsablaufes war die Programmierung der präzisen Drehung um berechnete Winkel und die Optimierung des Infrarot-Empfängers auf zuverlässige Messungen. Ersteres stellte einen vor allem vor mathematische Probleme, da die gemessenen Werte der Elektromotoren mehrmals umgerechnet werden müssen und sich die zurückgelegte Strecke nur über eine vereinfachte Integralbildung aus Geschwindigkeitsmessungen berechnen lässt. Zweiteres musste an verschiedenen Stellen optimiert werden. Zuerst mussten wir den Empfangskegel des Empfängers durch eine schwarze Aluröhre einschränken und dann die Signalstärke durch Hinzunahme eines zweiten Senders erhöhen. Letztendlich wäre eine feste Montierung des Infrarot Empfängers einfacher gewesen, da wir uns die Winkelmessung, die Fahrt ins Drehzentrum und die Programmierung der kontrollierten Drehung hätten sparen können. Der Roboter würde sich einfach nur um sich selbst drehen, bis er ein Signal gefunden hätte und dann geradeaus fahren. Allerdings bietet die jetzige Methode Spielraum für zukünftige Optimierungen (z.B. einer Fahrtrichtungskorrektur während der Fahrt, Ausweichen vor Hindernissen usw.).

Diese Reflektionen sind gut, sollten jedoch in einem eigenen Absatz gegen Ende (Ergebnisse Und Diskussion) stehen.

Standby Modus

Erkennen und Gießen der Pflanze

Welche Art von Signal

Zur Orientierung im Raum benutzen wir einen Infrarotsender, der an einer Holzvorrichtung montiert ist. Als Alternativideen zum Infrarotsender hatten wir uns überlegt mit Radiowellen oder Wärmebildkameras zu arbeiten. Der Infrarotsender erschien uns aber als kostengünstigste und vom Zeitaufwand am besten zu bewältigende Lösung.

Bauen und Programmieren der Sendeeinheit

Dieser enthält Abschnitt eine ganze Reihe von sachlichen Fehlern und Ungenauigkeiten:

1. Die „Infrarotsender“ sind einfache LEDs. Schaut mal in das Datenblatt des Empfängers, um zu sehen, welche Wellenlänge sie wohl haben.
2. Die Schaltung für den IR-Sender ist in Realität anders als beschrieben. Es sind jeweils eine IR-LED und ein Widerstand in Serie geschaltet. Zwei dieser Gruppen sind dann parallel zueinander geschaltet und können durch einen N-Kanal-MOSFET an- und ausgeschaltet werden.
Macht mal eine Skizze davon, wie das alles angeschlossen ist - wenn sie nicht stimmt, gebe ich euch noch einmal eine Chance zur Korrektur.
Welche Aufgabe hat der Widerstand? Warum braucht ihr den MOSFET? Wiso nicht alles direkt an den Arduino anschließen?
Zur Orientierung: Ein Bestandteil ist auf dieser Seite abgebildet: http://www.brainlinksystem.com/hacking-your-remote-resource-page
3. Eine präzisere Beschreibung dessen, was euer Senderprogramm wirklich tut und warum (u.u. mit Link auf das Datenblatt des Empfängers) ist unbedingt nötig.
4. Ich habe das Gefühl, dass ihr nicht wirklich verstanden habt, was euer Kondensator am Empfänger wirklich tut. Ihr habt dort einen Tiefpassfilter (RC-Glied) zwischen den Ausgang des Empfängerbausteins und den Arduino geschaltet. Warum könnte das nötig gewesen sein? (Es hat etwas mit der Form des gesendeten Signals zu tun)
5. Stellt bitte die Funktion des Empfängeraufbaus in einer Skizze dar.

Die Sendeeinheit besteht aus 2 Infrarotsendern, die hintereinander geschaltet sind, 2 parallel geschalteten Widerständen und einem MOSFET Transistor. Wir hatten Probleme mit der Reichweite des Senders, daher haben wir unter anderem ein paar Versuche vorgenommen um die Reichweite des Infrarotsignales zu maximieren. Dazu haben wir zunächst das Programm des Senders modifiziert. Wir haben das Infrarotsignal in hochfrequenten Intervallen blinken lassen, umso mit dem Empfänger zu harmonisieren. Damit bei die Auswertung des Infrarotsignales trotzdem konstant bleibt haben wir einen Kondensator eingebaut der den Stromfluss ausgeglichen hat. Außerdem ist am Infrarotsender eine Sammellinse montiert, die somit Strahlen gebündelt hat und nur in eine Richtung strahlte. Diese haben wir abgeschliffen, um einen flächendeckenden Strahl herzustellen. Dieses Vornehmen hatte allerdings die Reichweite wieder etwas minimiert.

Bauen und Programmieren der Empfängereinheit

Der Infrarotempfänger ist auf einem Servo platziert, der Wiederrum vorne an dem Roboter angebracht ist. Er besteht aus einem Empfänger, einem Kondensator, einer Hülse und einem Widerstand. Der Empfänger ist an einem Servo angebracht, da durch seine rotierende Bewegung die Richtung des nfrarotsignales leichter auszumachen ist, ohne den Roboter bewegen zu müssen. Um den Breitgefächerten Aufnahmebereich des Empfängers inzuschränken und zu fokussieren haben wir eine Hülse an dem Empfänger befestigt, die Signale von der Seite abschirmt, da der Roboter sonst nicht weiß wo genau das Signal herkommt.

Erkennen der Pflanze und "vorübergehende Lösung"

Der Roboter erkennt eine Pflanze in dem er dem Infrarotsignal, die von ihr ausgeht, sucht und auf sie zufährt. Wir hatten eigentlich vor, einen weiteren Infrarotsender mit geringer Reichweite an der Pflanze anzubringen aber durch Zeitmangel waren wir nicht mehr in der Lage diese Aufgabe zu bewältigen. Daher haben wir uns entschieden einen Abstandsensor am Roboter anzubringen, weil wir dadurch wenigstens die Möglichkeit haben die Pflanze zu identifizieren. Der Abstandsensor sendet nämlich ein Infrarotsignal aus welches er, wenn das Signal auf einer Oberfläche reflektiert wird, wieder empfängt und den Abstand auswertet, Wenn der Abstand erreicht ist( ca. 15-20cm), hält der Roboter an und beginnt den Bewässerungsvorgang.

Steuereinheit zur Wassermenge

Das wurde ausgeklammert

Aufgrund der Fehlenden Zeit mussten wir am Ende des Projektes ein paar Abstriche machen.Zum einen mussten wir von einem leeren Raum ausgehen. Hindernissen auszuweichen wäre unser nächstes Teilprojekt gewesen, da wir es vom Zeitaufwand her nicht geschafft hätten. Zu dem hatten wir Überlegungen angestellt einen höhenverstellbaren Gießarm zu bauen, um somit den Gießhahn der Topfhöhe anzupassen. Außerdem wollten wir einen weiteren Infrarotsender mit einer anderen Frequenz bauen um somit mehrere Pflanzen nacheinander anzusteuern und zu bewässern. Des weiteren war eine App im Gespräch, über welche man den Gießroboter sagen könnte welcher Pflanze er wie viel Wasser zugeben hat. Wir hatten auch überlegt ein Feuchtigkeitssensor in den Pflanzen einzubauen, der den Roboter benachrichtigt wenn die Pflanze Wasserbedarf hat.

Ergebnis

Zurzeit kann unser Roboter sich nur anhand des Infrarotsignals und des Abstandssensors orientieren. Es fährt auf das Signal zu und wenn ihm ein Objekt im Weg steht bzw. die Topfpflanze wird sie durch den Abstandssensor erkannt und begossen. Das Problem hierbei ist das wir noch nicht in der Lage sind die Pflanze als eigentliche Pflanze zu erkennen und zu gießen. Daher wäre der nächste Schritt gewesen, eine Möglichkeit zu finden die Pflanze eindeutig zu erkennen und ihn, nachdem er die erste Pflanze begossen, auf andere Pflanzen hinfahren zu lassen.

Macht mal ein paar Vorschläge, wie das u.U. realisiert werden könnte.

Programmcode

Pinbelegung

Art Pin Verwendungszweck
Analog 0 Abstandssensor
Analog 1 Bestätigen (Wassermenge)
Analog 2 Addieren (Wassermenge)
Analog 3 Subtrahieren (Wassermenge)
Analog 4 Wasserpumpe
Analog 5 Standbyknopf
Analog 6 Piezo
Analog 7 Infrarotempfänger
Digital 1
Digital 2 Vorwaertsspin linkes Rad
Digital 3 Servo
Digital 4 Rueckwaertsspin linkes Rad
Digital 5 PWM-Pin
Digital 6
Digital 7 Rueckwaertsspin rechtes Rad
Digital 8 Vorwaertsspin rechtes Rad
Digital 9 Hall-Sensor 2 linkes Rad
Digital 10 Hall-Sensor 1 linkes Rad
Digital 11 Hall-Sensor 1 rechtes Rad
Digital 12 Hall-Sensor 2 rechtes Rad
Digital 13 Wassermengen Steuereinheit

Eine Materialliste wäre super.

projekte2014/giessroboter/projektdokumentation.txt · Zuletzt geändert: 2016/01/21 12:45 (Externe Bearbeitung)