Benutzer-Werkzeuge

Webseiten-Werkzeuge


Seitenleiste

projektewise20:marsroboterpublic:start

Projektdokumentation Marsroboter

Themenbeschreibung/Einleitung

Der Marsroboter hat die Aufgabe, auf einem anderen Planeten eine Stelle zu finden, an der eine Pflanze gut wachsen könnte. Dabei untersucht er die Umgebung nach bestimmten Parametern ab.
Er misst mit Hilfe von Phototransistoren die Lichtintensität und fährt in die Richtung, für die er den höchsten Wert misst. Hat er zusätzlich dazu einen Ort gefunden, an welchem Temperatur und Luftfeuchtigkeit in einem angemessenen Bereich liegen, so macht er mit einer abspielenden Melodie und passenden LEDs auf sich aufmerksam.

Abbildung 1: Der Marsroboter
Abbildung 1: Der Marsroboter

Hinweis: Die einzelnen Grafiken können durch Daraufklicken vergrößert werden, sodass man den geschriebenen Text besser erkennen kann.

Methoden/Umsetzung:

Überblick über das Gesamtsystem

Zu lösende Aufgaben

Die Grundvoraussetzung für das Funktionieren des Roboters waren die Messungen der Sensoren. Darauf bauten die weiteren Aufgaben auf.

  • Allgemeine Fortbewegung ohne Kollision (Ultraschallsensor)
  • Zusätzliche Orientierung am Licht mit flüssigem Bewegungsablauf
  • Erkennen der Feuchtigkeitsquelle (mechanische Umsetzung)
  • simultane Tonausgabe zwei weiterer Arduinos bei erfolgreicher Suche des Ortes
  • flüssige Fernsteuerung per Bluetooth
Abbildung 2: Grafik zur Messreihenfolge
Abbildung 2: Grafik zur Messreihenfolge

Bewusst ausgeklammerte Aufgaben

Wir haben bewusst auf eine GPS-basierte Raumorientierung verzichtet. Der Roboter weiß nicht, wo er in der Vergangenheit war, Koordinaten kennt er nicht. Außerdem gehen wir davon aus, dass die Umgebung keine komplex geformten Hindernisse oder Abgründe hat, wir haben uns auf einen Ultraschallsensor zur Kollisionsprävention beschränkt.

Einzelne Abschnitte zur Beschreibung von Details der einzelnen Systembestandteile

Allgemeine Fortbewegung ohne Kollision (Ultraschallsensor):

Der Roboter wird von zwei Stepper-Motoren angetrieben, ein drittes Rad für die Balance befindet sich im hinteren Teil. Außerdem haben wir einen klassischen Ultraschallsensor verwendet, der es ermöglicht Hindernisse zu erkennen und zu umfahren. Dieser ist an der Vorderseite mittig und auf Höhe des Plastikgestells befestigt. Die Messungen des Ultraschallsensors haben gegenüber den anderen Messungen höchste Priorität (s. Abb. 2), damit es zu keinen Kollisionen kommt. Die Entfernung wird durchgängig gemessen. Der Marsroboter fährt also solange geradeaus beziehungsweise orientiert sich an der Helligkeitsmessung, bis der Ultraschallmesser eine geringere Entfernung zu einem Gegenstand (in unserem Fall also Hindernis) als 10 cm misst. Dann reagiert der Roboter mit einer Viertel-Drehung nach rechts, wobei er sich auf der Stelle, also um sich selbst dreht. Hierbei können Probleme entstehen, wenn das Hindernis sich nicht in der „Sichtweite“ des Ultraschallsensors befindet und der Roboter durch die Breite trotzdem dagegen stoßen könnte.

Zusätzliche Orientierung am Licht mit flüssigem Bewegungsablauf:
Abbildung 3: Grafik zu Voraussetzungen für Feuchtigkeitsmessung
Abbildung 3: Grafik zu Voraussetzungen für die Messreihenfolge

Für die Orientierung am Licht mit Hilfe von Phototransistoren brachten die zwei Sensoren direkt auf dem Plastikgestell, jeweils etwas weiter links bzw. etwas weiter rechts an. Um mit größeren Differenzen in den Lichtverhältnissen arbeiten zu können, benutzten wir den Flur des Mathegebäudes der TU, sodass wir zu einer genaueren Ausgangslage für die Optimierung des Programms kamen. Die Orientierung am Licht funktioniert grob gesagt so: Der Roboter dreht sich in die Richtung des Phototransistors, der den größeren Wert misst. Bliebe es dabei, hätte es jedoch zur Folge, dass der Roboter nie geradeaus fahren könnte, da es nur sehr unwahrscheinlich und unrealistisch ist, dass der gemessene Wert auf der linken genau dem gemessenen Wert auf der rechten Seite entspricht. Um dem zu entgehen, haben wir verschiedene Toleranzbereiche ausprobiert. Wir addierten verschiedene Beträge zu den Messwerten. Lagen diese Beträge weit unter 30, so war das Problem nicht gelöst, da der Roboter dann immer noch zu unterschiedliche Werte auf beiden Seiten empfing, und somit nicht für einen angemessenen Zeitraum geradeaus fahren konnte. Lagen die Beträge weit über 30, so war der Roboter nicht mehr sensibel genug für gewisse Unterschiede in den Lichtverhältnissen. Daher einigten wir uns auf die 30. Letztlich ist es nun also so, dass beispielsweise der Roboter erst nach links fährt, wenn der linke Photoransistor einen Wert misst, der größer ist als der vom rechten Photoransistor plus 30.
Hierbei dreht sich der Roboter nicht wie beim Ausweichen auf der Stelle, sondern macht größere Kreise, indem das eine Rad stoppt und das andere sich weiterdreht. Dadurch wird die Bewegung flüssiger und der Roboter kann nicht so leicht überdrehen.

Temperaturmessung:

Für die Temperaturmessung haben wir den Wärmesensor MLX90614 (s. Abb. 4) verwendet, für den wir auch eine vorgefertigte Bibliothek verwenden konnten. Den Sensor haben wir vorne an der Holz-Verlängerung für die Feuchtigkeitsmessung befestigt. Die Temperatur wird durchgängig gemessen und bei einer Messung von über 35° C ist diese Bedingung erfüllt. Dann geht eine rote LED an und der Roboter fährt langsam weiter geradeaus, während die Feuchtigkeit gemessen wird. Die gewünschte Temperatur erhalten wir in unserer Testumgebung mithilfe einer Wärmelampe, wodurch nur die Luft in einem Radius von ungefähr 20cm deutlich erwärmt wird.

Abbildung 4: Konstruktion Feuchtigkeits- und Temperaturmessung
Erkennen der Feuchtigkeitsquelle (mechanische Umsetzung):

Wir hatten verschiedene Ideen, wie wir die Feuchtigkeitsmessung umsetzen könnten und haben uns dann letztlich für einen Luftfeuchtigkeitssensor entschieden, da dies am besten umzusetzen war. Dafür haben wir den Feuchtigkeits- und Temperatursensor DHT 11 (s. Abb. 4) verwendet, wofür auch eine Arduino-Bibliothek bereitsteht, die wir nutzen konnten. Damit keine Entscheidungs- bzw. Prioritätsfragen für den Roboter entstehen, haben wir diesen Programmteil nicht als Orientierung nach der Feuchtigkeit geschrieben, sondern als Überprüfung der Feuchtigkeit. Die Feuchtigkeitsmessung soll also erst beginnen, wenn die beiden anderen, also Licht- und Temperaturmessung, abgeschlossen sind (s. Abb. 3). Wenn also die Bedingungen für Licht und Temperatur erfüllt sind, wird überprüft, ob die Luftfeuchtigkeit mehr als 42% beträgt und wenn das zutrifft, gibt der Roboter zu erkennen, dass ein Zielpunkt gefunden wurde.
Folglich war der Code für die Feuchtigkeitsmessung im Vergleich relativ einfach, jedoch hatten wir dort Probleme bei der Gestaltung der Messumgebung. Um dafür eine gute Lösung zu finden, haben wir verschiedene Feuchtigkeitsquellen, wie einen Luftbefeuchter, eine Sprühflasche und eine feste Wasserquelle ausprobiert und uns dann für einen Schale mit heißem Wasser entschieden, damit der Wasserdampf in der nahen Umgebung erkannt werden kann. Damit nicht so viel Feuchtigkeit an den restlichen Roboter gelangt und dieser nicht beschädigt wird, ist der Luftfeuchtigkeitssensor an einem circa 10cm langen Holzstab befestigt.

Abbildung 4: Skizze der künstlich erschaffenen Messumgebung
Abbildung 5: Skizze der künstlich erschaffenen Messumgebung
Abspielen der Melodie:

Hat der Marsroboter eine geeignete Stelle gefunden, spielt er einen Teil (vom fünften bis zum achten Takt) der Melodie aus „Also sprach Zarathustra“ von Richard Strauss. Dabei haben wir uns am Arrangement von Matthew Entwistle orientiert. Den abzuspielenden Abschnitt haben wir in zwei Teile geteilt, die jeweils von einem Arduino abgespielt werden. Im Code haben wir das ganze so umgesetzt: Die Notenabfolge wird zunächst festgelegt und den einzelnen Noten werden ihre Notenwerte zugeordnet. Mithilfe einer for-Schleife und der tone-Funktion werden dann die Noten nacheinander abgespielt. Das alles geschieht zeitgleich bei den beiden benutzten Arduinos mit ihren dazugehörigen Piezo-Summern, die abgespielte Melodie unterscheidet sich jedoch. Den Umstand haben wir so gewählt, da wir in bestimmten Teilen der Melodie insgesamt, zwei Noten gleichzeitig abspielen wollten. Generell haben wir uns dabei an der auf Arduino-Website veröffentlichen Methode zum Abspielen einer Melodie (https://www.arduino.cc/en/Tutorial/BuiltInExamples/toneMelody) orientiert.

Samenausgabe:

Damit der Marsroboter an der gefundenen Stelle auch direkt einen Samen einpflanzen könnte, haben wir eine Vorrichtung gebaut, um diesen fallen zu lassen. Diese besteht aus einer schräg angebrachten Metall-Röhre, in der einer oder mehrere Samen aufbewahrt werden. Vor dem tieferen Ende der Röhre befindet sich Klappe, welche durch einen Servomotor geöffnet und geschlossen werden kann (s. Abb. 6). Das geschieht dadurch, dass die Klappe wie eine Schiebetür nach oben und unten bewegt wird. Somit verhindert die Klappe während der Suche das Rausrutschen des Samens und wenn der Zielort erreicht wurde, wird durch einen der Arduinos, die die Melodie spielen der Servomotor bewegt und der Samen kann durch die Röhre rausrutschen.

Abbildung 6: Konstruktion für die Samenausgabe
Flüssige Fernsteuerung per Bluetooth:

Die flüssige Fernsteuerung per Bluetooth gestaltete sich erst sehr schwierig. Sie funktioniert indem man per App gewisse Werte an den Arduino schickt, der diese dann ausliest und dementsprechend handelt. Dabei hat jeder Knopf der App auf dem Handy einen zugewiesenen Buchstaben. Da unsere Steppermotoren jedoch STEPPERmotoren sind und pro Aktivierung des Pins nur einen Step machen, ließ es sich zuerst nur so gestalten, dass sich der Roboter pro Knopfdruck nur einen winzigen Schritt nach Vorne bewegt. Nachdem wir endlich eine App gefunden hatten, die bei gedrückthalten des Knopfes auf dem Smartphone den Wert (Buchstaben) konstant per Bluetooth an den Roboter schickt, lies sich der Roboter halbwegs flüssig steuern. Da jedoch der jeweilige Wert nicht oft genug an den Arduino gesendet wird, haben wir das Programm so modifiziert, dass wir pro gesendetem Wert der App an den Roboter 10 Schritte mit den Motoren machen, was zu einer annähernd flüssigen Bewegung führt. Die Steuerung mit Hilfe zweier Bluetooth Module konnten wir noch nicht implementieren, da wir dort auf viele Probleme, wie z. B. die Rollenverteilung der beiden Module (MASTER/SLAVE), gestoßen sind. Die App, die wir benutzt haben, heißt „Arduino BlueControl“ und ist im Google Playstore zu finden. Sie ist sehr einfach gestaltet und leicht zu bedienen.

Abbildung 7: Aufbau Marsroboter von oben

Technische Daten, Bauteile, Pins, etc.

Liste der verwendeten Bauteile

  • 1x Fahrgestell (wiederverwendet)
  • 3x Arduino Nano
  • 2x Steppermotor
  • 2x Treiber für die Steppermotoren
  • 1x Servomotor
  • 4x LED
  • 2x Piezo-Summer
  • 1x Ultraschallsensor
  • 2x Phototransistor
  • 1x Wärmesensor (Infrarot)
  • 1x Feuchtigkeitssensor
  • 1x Bluetoothmodul
  • 1x Akku
  • 1x Kondensator (100 μF)
  • 2x Widerstand (300 Ω)
  • 2x Widerstand ( 10 kΩ)
Abbildung 5: Bauplan des Marsroboters
Abbildung 8: Bauplan des Marsroboters

Pinbelegungsstellen

Arduino-Nano 1
PinAnschluss
D2 Rote LED
D3 Luftfeuchtigkeitssensor (DHT11)
D4 Richtungs-Pin für Stepper 1
D5 Step-Pin für Stepper 1
D6 gelbe LED (links)
D7 Trigger-Pin des Ultraschallsensors
D8 Verbindungsstelle zu Arduino-Nano 2 & 3
D9 Echo-Pin des Ultraschallsensors
D10 Gelbe LED (rechts)
D11 Richtungs-Pin für Stepper 2
D12 Step-Pin für Stepper 2
D13
A0 Phototransistor (rechts)
A1 Phototransistor (links)
A2
A3
A4 SDA-Pin des Wärmesensors (MLX90614)
A5 SCL-Pin des Wärmesensors (MLX90614)
A6
A7
TX1 RXD-Pin des Bluetooth-Moduls
RX0 TXD-Pin des Bluetooth-Moduls
Arduino-Nano 2
Pin Anschluss
D1
D2 Servo-Motor
D3
D4
D5
D6
D7
D8
D9 Piezo-Summer 1 + blaue LED
D10
D11
D12
D13
A0
A1
A2
A3
A4
A5
A6
A7
Vin D8 von Arduino-Nano 1
Arduino-Nano 3
Pin Anschluss
D1
D2
D3
D4
D5
D6
D7
D8
D9 Piezo-Summer 2
D10
D11
D12
D13
A0
A1
A2
A3
A4
A5
A6
A7
Vin D8-Pin von Arduino-Nano 1

Ergebnis und Diskussion

Endstand des Projekts

Insgesamt konnten wir unsere must-have-Ziele und auch einige should-have bzw. nice-to-have-Ziele umsetzen. Wir haben einen Roboter gebaut, der anhand Helligkeit-, Temperatur- und Feuchtigkeitsmessungen einen optimalen Platz für das Überleben einer Pflanze sucht und dann zusätzlich zu Ton- und Lichtsignalen einen Samen an der gefundenen Stelle ausgibt.
Außerdem kann der Marsroboter von außen mit einer App über ein Bluetooth-Modul gesteuert werden.
Die Geschwindigkeit des Roboters wird durch die Messungen deutlich verlangsamt und auch bei der Steuerung mit Bluetooth fährt der Roboter langsamer, als wir es uns vorgestellt hatten. Das konnten wir durch kleine Programmveränderungen schon etwas verbessern, ist aber nicht komplett zu umgehen.

Verbesserungs- und Erweiterungsmöglichkeiten

Langfristige Entwicklungspotenziale wären eine etwas realistischere Umsetzung des Marsroboters, mit einem Sauerstoffsensor und weiteren Sensoren, um zum Beispiel die Nährstoffe im Boden zu überprüfen. Die grafische Ausgabe der Werte als Diagramm auf einem Bildschirm oder die Installation einer Kamera auf dem Roboter wären auch mögliche Ziele, die man anstreben könnte. Außerdem bietet sich die räumliche Orientierung per GPS und eine Verbesserung der Kollisionsprävention, z. B. durch mehr Ultraschallsensoren an.
Eine sehr praktische Verbesserung wäre eine Programmierung von einer Möglichkeit per Signal zwischen den 2 Modi zu wechseln. Dabei wären die Modi einmal das selbstständige Fahren und mithilfe von Messungen die optimale Umgebung zu finden und der andere Modus das Fahren durch die Steuerung mithilfe von Bluetooth von außen.

Abbildung 6: Die zwei Modi des Marsroboters
Abbildung 9: Die zwei Modi des Marsroboters
Abbildung 10: Hier testen wir die Orientierung des Roboters am Licht mit Hilfe einer Lampe.
Abbildung 11: Hier benutzen wir, nicht wie zuerst gedacht, eine Wärmelampe, sondern das warme Wasser als Wärmequelle. Die Lichtquelle ist das Tageslicht durch das Fenster.
Abbildung 12: Hier testen wir die Steuerung per Bluetooth über eine App auf dem Handy.

Code und Rohdaten

projektewise20/marsroboterpublic/start.txt · Zuletzt geändert: 2021/04/23 18:22 von d.golovko