Benutzer-Werkzeuge

Webseiten-Werkzeuge


Seitenleiste

projektewise18:megamuellpublic:start

Projektdokumentation Mega Müll


Themenbeschreibung und Überblick

Unser Roboter “Mega Müll” transportiert - wie dem Namen nach zu Urteilen – Müll. Der Müll befindet sich in einem klappbaren Behälter, welcher auf einer Hebebühne platziert ist. Unser Roboter soll den Müll mithilfe des Fahrgestells zu einem Mülleimer befördern und dort angekommen die Hebebühne anheben und den Müll entsorgen.

Konstruktion

Abbildung 1: Ganzer Roboter im Überblick


In unserem Aufklappbaren Fahrgestell, welches 26,5 cm breit und 30 cm lang ist, befindet sich unsere Elektronik, als Grundlage haben wir 2 Arduino Nano verwendet, welche durch einen Schalter kommunizieren und nicht gleichzeitig agieren. Der erste Arduino ist für den Antrieb des Fahrgestells und somit das fahren und finden zuständig. Der Zweite für die Steuerung der Hebebühne und des Behälters auf dieser.

Unser Aufbau kann im Grunde in 3 Teile gegliedert werden:

Die erste Konstruktion umfasst die Bauteile der Hebebühne und des Behälters.
Die Hebebühne (Scherenhebebühne) von unserem Roboter kann durch einen Getriebemotor über eine Umlenkrolle herauf und herunter gefahren werden, möglich wird die Bewegung nach oben durch den Schalter 1, welcher sich vorn am Roboter befindet und ausgelöst wird, wenn der Roboter gegen den Mülleimer stößt. Bei diesem Vorgang hören auch die zwei Stepper Motoren auf sich zu bewegen, welche sich am Gestell von „Mega Müll“ befinden. Hat die Hebebühne ihr Limit nach oben erreicht, stoppt sie mithilfe des Schalters 2, welcher zudem einen Servo an dem Behälter auf der Hebebühne auslöst. Ist der Vorgang beendet fährt die Hebebühne wieder nach unten und wird dort durch den Schalter 3 gestoppt.

Abbildung 2: Aufbau der Hebebüne


Abbildung 3: Hebebühne in Aktion


Fortführend handelt es sich im zweiten Teil um Fortbewegung und Hinderniserkennung.
Um den Mülleimer zu erreichen und zudem Hindernissen auszuweichen befinden sich insgesamt fünf Ultraschallsensoren an unserem Roboter. Entfernung zu Hindernissen (3 Sensoren) und Entfernung zum Mülleimer (2 Sensoren) werden jeweils von verschieden verwendeten Ultraschallsensoren ermittelt. Anhand der Signale können sich die Stepper in verschiedene Richtungen bewegen, damit das Gestell nicht kippt, befindet sich zudem noch ein Stützrad am Gestell. Während die Ultraschallsensoren für Hindernisse Signale Senden und Empfangen, können die Sensoren für die Mülleimer Erkennung nur Signale empfangen (indem jeweils ein Lautsprecher abgeklebt wurde).

Abschließend, im dritten Teil, geht es um die Erkennung des Mülleimers.
An den Ultraschallsensoren zur Erkennung des Mülleimers befindet sich zudem ein Infrarotempfänger. Der Mülleimer an sich enthält auch sein eigenes System, bestehend aus Arduino Nano, Ultraschallsensor und Infrarotempfänger. Beide Infrarotempfänger erhalten durch eine Fernbedienung gleichzeitig ein Signal wodurch das ermitteln der Entfernung zum Mülleimer erst möglich wird. Da die nicht abgeklebten Teile der Sensoren am Roboter bei Richtiger Ausrichtung die Ultraschallwellen des Mülleimer-Sensors empfangen.

Abbildung 4: Aufbau der Ultraschall-Sensoren in der Front


Alle Komponenten werden von einem Lithium-Polymer-Akku betrieben, welcher sich in unserem Aufklappbaren Fahrgestell befindet. Befestigt wird dieser, sowie auch die Steckbretter, durch Klett.
Alle Ultraschallsensoren wurden mithilfe von Kabelbindern befestigt. Beide Stepper Motoren wurden durch Klett und Kabelbinder befestigt und halten somit sehr stabil in unserer Konstruktion. Die restlichen Teile wurden Festgeschraubt, wie zum Beispiel das Stützrad, die Schalter oder der Getriebemotor.

Abbildung 5: Aufbau der Schaltung



Abbildung 6: Schaltplan des Roboters


Abbildung 7: Schaltplan des Arduinos am Mülleimer


Pinbelegungstabelle


Arduino für Hebebühne

Bauteil Funktion Pin
Schalter 1 A1
Schalter 2 A2
Schalter 3 A3
VNH2SP30 Monster Motor Sheild In A 2
In B 3
PWM 4
Servo PWM 6


Arduino für Navigation und Bewegung zum Mülleimer

Bauteil Funktion Pin
Ultraschallsensor (Naigation zum Mülleimer) (rechts) Trigger A1
Echo A2
Ultraschallsensor (Naigation zum Mülleimer) (links) Trigger A3
Echo A4
Infrarot-Empfänger (Interrupt-Pin) 2
Schalter 1 (Interrupt-Pin) 3
Pololu Motor Treiber (rechts) Step 4
Direction 5
Enable 9
Pololu Motor Treiber (links) Step 6
Direction 7
Enable 9
Ultraschallsensor (Hindernisserkennung) (rechts) Echo 8
Trigger 12
Ultraschallsensor (Hindernisserkennung) (mitte) Echo 10
Trigger 12
Ultraschallsensor (Hindernisserkennung) (links) Echo 11
Trigger 12


Arduino am Mülleimer

Bauteil Funktion Pin
Infrarot-Empfänger 2
Ultraschallsensor (Sender für Navigation) Echo 3
Trigger 4


Bewegung von Hebebühne und Behälter

Die Bewegung der zwei Komponenten wird zum einen durch einen Getriebemotor für die Hebebühne und zum anderen durch einen Servo für den Behälter ermöglicht.
Der Getriebemotor ist im aufklappbaren Fahrgestell an der oberen Platte befestigt. Um die drehbare Achse des Motors ist eine Schnur gewickelt welche über eine Umlenkrolle zu der Hebebühne geführt wird und an dieser befestigt ist. Wird der Schalter am Gestell ausgelöst bewegt sich die Hebebühne nach oben.
Oben angekommen wird der zweite Schalter ausgelöst, durch diesen stoppt der Motor die Bewegung und der Servo wird angesteuert. Hat der Servo seine Bewegungen beendet, bewegt sich der Motor wieder in entgegengesetzte Richtung nach unten.
Unten angekommen stoppt der dritte Schalter die Bewegung des Motors.

Fortbewegung und Hinderniserkennung

„Mega Müll“ wird mithilfe von zwei Stepper Motoren und einem Stützrad bewegt. Die Räder sind aus Stabilisationsgründen in einem Dreieck angeordnet. Die Stepper befinden sich, aufgrund der vielen Sensoren und der Hebebühne, am hinteren Teil des Roboters um ein Kippen zu vermeiden. Somit ist das Gewicht einigermaßen gleichmäßig über die Flächen des Gestells verteilt.
Die Bewegung der Räder an den Stepper Motoren ist abhängig von den verschiedenen Sensoren und vor allem vom Schalter 1 am Gestell. Ist dieser aktiviert liegen sowohl Sensoren als auch Stepper still, denn der Roboter ist am Mülleimer angekommen. Dies geschiet durch die attachInterrupt-Funktion

  attachInterrupt(digitalPinToInterrupt(3), onSignalKnopf, RISING); //Knopf an Pin 3 -> wenn ausgelöst (RISING), dann wird die Funktion onSignalKnopf aufgerufen

Werden die jeweils Abgeklebten Ultraschallsensoren durch ein Infrarotsignal aktiviert, so wird sowohl die jeweilige Entfernung zum Sensor vom Mülleimer gemessen, als auch deren Differenz errechnet, anhand derer der Roboter nun verschiedene Bewegungsmöglichkeiten hat. Der Echo Pin empfängt die Ultraschallsignale vom Sensor des Mülleimers und somit können im Quellcode verschiedene Rechnungen durchgeführt werden, wie weiterhin zu sehen:

    //Interrupt Funktion wurde duch Signal aufgerufen
    //Hier: Dauer des Signalempfangens von Sensor 1 wird gemessen und die microsecondsToCentimeters Funktion aufgerufen    
    duration1 = pulseIn(echoPin1, HIGH);
    cm1 = microsecondsToCentimeters(duration1);
 
    //Die Differenz wird innerhalb der Interrupt Funktion aktualisiert -> Variable ist Global, damit auch in der Main Funktion zugegriffen werden kann
    differenz = cm1 - cm2;
 
    //Hier: Die Aufgerufene microsecondsToSeconds Funktion, außerhalb der Interrupt Funktion
    long microsecondsToCentimeters(long microseconds) {
  return microseconds / 29 / 2;

Wenn die Differenz der beiden Ultraschallsensoren zum Beispiel im Bereich von 11 bis – 11 liegt, so befindet sich der Mülleimer ungefähr zwischen den Sensoren. Als nächsten Schritt ermitteln die Ultraschallsensoren für Hindernisse die jeweiligen Abstände. Daraufhin wird abgefragt ob die Entfernung zum Mülleimer unter einer bestimmten Entfernung liegt, hier: 150 cm für die jeweils abgeklebten Sensoren. Ist dies Der Fall, so bewegt sich der Roboter Vorwärts, da davon ausgegangen wird, das sich in dieser Entfernung kein Hindernis mehr befindet. Ist dies Nicht der Fall werden die Ergebnisse der Ultraschallsensoren für Hindernisse abgefragt und je nach dem eine Ausweichbewegung durchgeführt. Befindet sich kein Objekt als Hindernis in der nähe, so bewegt sich der Roboter in diesem Fall 150 Schritte nach vorn und der loop beginnt erneut.
Das sieht dann ungefähr so im Quellcode aus:

  else if (differenz < 11 && differenz > - 11 && differenz != 0) {//Differenz der abgeklebten Ultraschallsensoren, hier: Mülleimer ungefähr zwischen den Sensoren
    Serial.println("Geradeaus");
    ultraschallAlles ();             //Messung der Abstände von den Ultraschallsensoren für Hindernisse
    if (cm1 < 150 && cm2 < 150) {    //Entfernung zum Mülleimer kleiner 150 cm -> Vorwärtsbewegung
      stepperVorwaerts(50);
    } else {
 
      //Richtungsänderungen wenn zu nah am Hindernis
      //Ausweichbewegung je nach Messwert der Ultraschallsensoren
      //[...]
 
     } else {
        stepperVorwaerts (150); //Kein Hindernis -> Vorwärtsbewegung
      }

Um die verschiedenen Bewegungsrichtungen der Stepper zu vereinfachen, haben wir uns Funktionen zu nutzen gemacht. Auch für das Abrufen der Ultraschallentfernungsmesser benutzen wir eine Funktion und können somit einfach auf ultraschallAlles() zugreifen und die Ultraschallsensoren messen die Abstände zu möglichen Hindernissen.

Erkennung des Mülleimers

Der Mülleimer kann durch einen am Mülleimer befestigten Ultraschallsensor gefunden werden. Dieser ist mit einem Arduino Nano und einem Infrarotempfänger in sein eigenes System eingebunden und besitzt somit auch eigenen Quellcode. Mit Hilfe der Arduino Library IRremote.h Version 2.2.3 können wir die Infrarot Signale Empfangen und Auslesen. Um im Code des Roboters ein Ergebnis zu erhalten – egal an welcher Stelle des Codes – haben wir eine auch Interrupt-Funktion verwendet, welche beim Eintreffen des Infrarot Signals ausgelöst wird (ähnlich wie beim Schalter 1). Tritt der Interrupt ein, so werden die Entfernungen der beiden jeweils abgeklebten Ultraschallsensoren gemessen und deren Differenz.

  attachInterrupt(digitalPinToInterrupt(2), onSignal, RISING); //Infrarotempfänger an Pin 2, wenn ausgelöst (RISING), dann wird die Funktion onSignal ausgeführt

Weiterhin wird im Code wie bereits oben beschrieben fortgefahren.

Ergebnis und Diskussion

Nach einem Semester indem wir versucht haben unsere Ideen Umzusetzen, können wir ein Produkt ohne gesamte Testung vorzeigen. Im einzelnen haben alle unsere Komponenten ein nützliches Ergebnis bewiesen. Wir waren in der Lage die Hebebühne auf und ab zu fahren. Wir konnten den Behälter kippen. Wir konnten die Stepper ansteuern und mithilfe der Ultraschallsensoren für Hindernisse unseren Roboter dahingehend zurückweichen lassen. Wir konnten die Entfernung zum Mülleimer bestimmen und auf dem Seriellen Monitor ausgeben lassen, in welche Richtung sich der Roboter nun bewegen muss.
Die Ortung des Mülleimers hat uns einige Hindernisse gestellt, sodass wir sehr viel Ausprobieren und Testen mussten. Zunächst hatten wir vor mithilfe eines Infrarotsignals allein die Richtung zu bestimmen, jedoch mussten wir feststellen das dies nicht Möglich war, da das Signal von allen Richtungen aus empfangen werden konnte, selbst mit versuchter Abschrimung durch Holz oder Metall.
Als nächsten Versuch haben wir versuchtdas WLAN-Signal zu orten, jedoch waren die Signalunterschiede zu gering. Außerdem mussten wir feststellen, dass diese Metode lediglich die Signalstärke des Routers bestimmen konnte und diese unabhängig von der Entfernung war.
Danach haben wir es mit einem Bluetooth Modul ausprobiert. Soweit schien diese Möglichkeit zu funktionieren, jedoch scheiterte es daran, dass der Serielle Monitor des ArduinoIDE die gesendeten Signale nicht empfangen konnte.
Daraufhin probierten wir Ultraschall Sound Empfänger aus, nach anfänglichen Problemen, dass der Lautsprecher nicht funktionierte, ging dieser nach neuem Kabel löten dann doch. Leider war der Lautsprecher viel zu leise und hatte daher nur eine sehr geringe Reichweite.
Als letzten Versuch hatten wir mit den Abgeklebten Ultraschallsensoren erfolg. Bei versuchen konnten wir die Signale vom Mülleimer bis zu 5 empfangen und so die Richtung bestimmen, in die der Roboter fahren sollte.

Ursprünglich hatten wir in Gedanken einen Roboterarm hinzuzufügen, welcher den Müll dann auch aufsammeln könnte. Bei unseren Problemen mit der Mülleimer Erkennung war dann jedoch schnell klar, das wir diesen Plan verwerfen würden.
Im Fazit ist das größte Manko unseres Roboters, das wir das gesamte Zusammenspiel unserer Komponenten zeitlich nicht mehr richtig testen konnten und somit auch nicht sicher ist, ob unsere Konstruktion vereint so gut funktionieren kann, wie die einzelnen Teile.
Unser Roboter „Mega Müll“ hat also noch einige Möglichkeiten sich mit ihm zu beschäftigen und ihn zu verbessern. Selbst wenn unsere Arbeit bis hierhin im gesamten funktioniert, so steht dem Roboter noch die Möglichkeit zu einer verbesserten Hebebühne, aus stabilen Materialen, zur Verfügung oder die Montage von einem Greifarm, welcher mit dem Ablauf des Roboters zusammenspielt.


Unser Code: megamuell_code.zip

projektewise18/megamuellpublic/start.txt · Zuletzt geändert: 2019/04/03 00:32 von d.golovko