====== 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 =====
{{:projektewise18:megamuell:20190204_135036bearb.jpg?direct&450|}} 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. \\
{{:projektewise18:megamuell:hebeb._beschr.jpg?direct|}} Aufbau der Hebebüne
\\
{{:projektewise18:megamuellpublic:hebebuehne.jpg?direct&700|}} 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.\\
{{:projektewise18:megamuell:front_beschriftung.jpg?direct|}} 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.\\
{{:projektewise18:megamuell:aufbau_schaltung.jpg?direct|}} Aufbau der Schaltung
\\ \\
{{:projektewise18:megamuell:roboter_steckplatine1.png?direct|}} Schaltplan des Roboters
\\
{{:projektewise18:megamuell:muelleimer_steckplatine.png?direct|}} 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 [[https://www.arduinolibraries.info/libraries/i-rremote|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: **{{:projektewise18:megamuell:megamuell_code.zip|}}