Benutzer-Werkzeuge

Webseiten-Werkzeuge


Seitenleiste

projektesose2016:schrottbotpublic:start

Einleitung

Unsere erste Idee, war es einen Roboter zu bauen, der Müll erkennt und diesen einsammelt. Dieses kam durch den Film Wall-E zustande. Einen Roboter zu haben, der Müll einsammelt erschien uns als sehr praktisch und sinnvoll, weil man diesen in Parks verwenden könnte und dieser der Umwelt helfen könnte. Es hat sich jedoch herausgestellt, dass diese Idee nicht leicht umsetzbar ist. Wir mussten diese Idee somit leider verwerfen und etwas ändern. Die Fähigkeit Müll zu erkennen ist für einen Roboter wesentlich schwieriger als für einen Menschen, weil Müll aus allen verschiedenen Gegenständen bestehen kann. Deshalb haben wir uns darauf beschränkt, dass unser Roboter metallene Gegenstände aufspüren und aufsammeln sollte. Da man Metall mit einem Metalldetektor aufspüren und mit einem Magneten diese aufsammeln kann, erschien uns diese Variante besser umsetzbar als einen Roboter der Müll erkennt und aufsammelt. Unser Interesse liegt hierbei beim Fahren und dem Sammelmechanismus des Roboters.

Aufbau

Das Grundgerüst vom SchrottBot besteht aus einer runden Holzplatte. Darauf befinden sich drei Entfernungsmesser, ein Servo, ein Auffangbehälter, ein Breadboard mit einem Arduino und einem Akkumulator. Auf der Unterseite der Grundplatte sind die Motoren, die Räder und ein Stützrad angebracht. Am Servo ist eine Stange mit einem Elektromagneten befestigt. Die Entfernungsmesser sind vorne platziert, einer etwas rechts, einer etwas links und der dritte in der Mitte. Under dem mittleren Entfernungsmesser hängt der Metalldetektor. Sowohl der Elektromagnet als auch der Metalldetektor hängen knapp über dem Boden, damit sie metallene Gegenstände finden und einsammeln können. Hauptsächlich haben wir Teile von alten Roboterprojekten benutzt.

Fahrwerk: Schrittmotoren

Zur Fortbewegung unseres Roboters haben wir Steppenmotoren verwendet und mit Microsteps gearbeitet.

Sammelmechanismus: Servo und Elektromagnet

Für das Einsammeln metallener Gegenstände haben wir einen Elektromagneten an eine Stange befestigt und diese wiederrum an einen Servo. Unsere Anfangsidee jedoch war eine Art Schienensystem, welches den metallenen Gegenstand einsammelt, zurückfährt und in den Auffangbehälter fallen lässt. Diese Idee verwarfen wir jedoch, da die Konstruktion mit einem Schienensystem uns doch kompliziert erschien. Unsere neue Idee war dann ein Kransystem, welches das metallene Gegenstände einsammelt, sich um 180° dreht und dieses in den Behälter fallen lässt. Durch einen Servo, war die neue Idee einfacher umsetzbar als ein Schienensystem.

Wegfindung

Unser Roboter hat nur eine sehr simple Wegfindung. Er fährt eine bestimmte, in einer Variable festgelegte Strecke geradeaus und sucht und sammelt dabei Metall. Wichtig hierbei ist, das der Roboter nur eine Bewegung forwärts zählt und somit immer die gleiche Strecke von aktuell 40cm vorwärts fährt. Programmdurchläufe, bei denen der Roboter Metall einsammelt oder sich anderweitig auf das Metall ausrichtet werden nicht als Vorwärtsbewegung gezählt. Nachdem er die vordefinierte Strecke von 40cm gefahren ist macht der Roboter eine linksdrehung um 90°. Anschließenend fährt er 2cm forwärts und macht eine erneute Linksdrehung um 90°. Danach fährt der Roboter wieder 40cm und machte dann eine Rechtsdrehung um 90°, fährt 2cm vorwärts und machte eine erneute Rechtdrehung um 90°. Ab diesem Punkt wird das Programm endlos wiederholt. Wichtig dabei zu beachten ist, das der Roboter nur auf den langen und kurzen geraden Metall finden kann, nicht in den Drehungen.

Programmierung: Elektronik

Für die Programmierung haben wir einen Arduino Nano benutzt, da wir den Servo ansteuern wollen und außerdem schon im Kurs damit gearbeitet haben.

Sensorik: Entfernungsmesser

Zum Ausweichen benutzen wir drei Entfernungsmesser. Falls der Roboter zu nah an ein Hindernis fährt soll dieser nach rechts oder gegebenfalls links ausweichen.

Metalldetektor:

Der Metalldetektor war einer der herausforderndsten Komponenten unseres Roboters und wir haben viel Anleitung und Hilfe gebraucht um den Metalldetektor am Ende zum laufen zu Bringen. Im Grundprinzip ist unser Metalldetektor ein elektromagnetischer Schwingkreis mit einer Spule und einem Kondensator. Dieser Schwingkreis wird durch ein Signal vom Aduino angestoßen und der Aduino zählt anschließend die CPU-Cyclen des Aduino während zehn Schwingungen. Befindet sich ein Gegenstand aus Metall in der nähe der Spule (welche wird aufgrund dessen vorne am Roboter, kurz über dem Boden anbringen mussten) so Verändert sich deren Induktivität der Spule und damit die Anzahl an CPU-Cyclen während der 10 Schwingungen. Diesen Unterschied kann man nun auswerten und eine Aussage darüber treffen, ob sich ein metallener Gegenstand in der Nähe der Spule befindet.

Beispielwerte: CPU-Cyclen ohne Metall: ca. 169000 CPU-Cyclen mit Metall: ca. 171000

Bei den ersten Versuchen mit dem Metalldetektor, damals noch eine Improvisierte Drahtrolle, ergab sich aber schnell ein neues Problem: Der Unterschied in CPU-Cyclen war anfangs kaum messbar und selbst bei unmittelbarer Nähe des Metalls zu Spule einfach zu gering. Deshalb mussten wir den Umweg über einen Comperator nehmen. Dieser macht macht ledigtlich Schwingungen mit sehr kleiner Amplitude für den Arduino einfacher messbar.

Die finale Spule die wir dann in unserem Roboter verbaut haben erforderte auch einige Anpassungen. Zwar sind Unterschiede zwischen Metall und nicht-Metall Messungen klarer Erkennbar aber aufgrund des großen Innenwiederstandes der Spule flaut diese Schwingung noch noch schneller ab als zuvor. Glücklicherweise lässt sich trotzdem mit der Spule arbeiten, wir haben einfach die Anzahl der Schwingungen über die der Aduino die CPU-Cyclen zählt von 50 auf 10 verringert.

Auf dieser Abbildung erkennt man eine Messung unseres Metalldetektors visualisiert an einem Oszilloskop. Die dunkelblaue Linie ist das Signal vom Aduino, welches zu beginn der Schwingung von 5V auf 0V geschaltet wird. Die hellblaue Linie ist die durch das vom Aduino kommende Signal angeregte Schwingung, welche relativ schnell abflaut. Die gelbe Linie hingegen ist der Output des Comperators – eine gut auswertbare und stabile Rechteckspannung.


Diese Abbildung zeigt den Unterschied zwischen Messungen mit Metall neben der Spule und ohne. Wie man sieht sind die Werte erfreulich weit auseinander und somit leicht auszuwerten und im Programm zu trennen.


Diese Abbildung zeigt unseren ursprünglichen Testaufbau mit der improvisierten Spule.


Das ist das Testprogramm um die Spule zu testen: fastpulseinicr.zip

Abschätzung des Aufwandes:

Das Bauen der Grundkonstruktion sollte wenig aufwendig sein, da wir die Grundplatte mit vorhandenen Aussparungen für die Räder von älteren Robotern verwenden können. Das Fahren schätzen wir auch eher als einfach ein, wohingegen wir das Bauen eines Metalldetektors als komplizierter sehen, da wir damit keine Erfahrung haben und den Aufwand somit nicht abschätzen können. Das Ansteuern des Magneten wird kaum Zeit in Anspruch nehmen, da wir nur einen Pin auf HIGH oder LOW setzen müssen.

Im Nachhinein mussten wir feststellen, dass das Ansteuern der Räder aufgrund verschiedener Probleme am aufwendigsten war.

Probleme & Fehleranalyse:

Unser größtes Problem hatten wir leider mit kaputten Bauteilen. So hatten wir kaputte Entfernungsmesser, ein kaputtes Rad und ein kaputtes Breadboard. Da wir den Fehler zuerst in der Schaltung und der Programmierung suchten, haben uns diese viel Zeit gekostet.

Ein weiteres Problem stellen die Entfernungsmesser dar, da sie nur Abstände zu geraden Objekten messen können. Würde der Roboter schräg auf eine Wand zufahren, so würde er diese nicht erkennen. Um dieses Problem zu umgehen, haben wir zusätzlich zu dem gerade ausgerichteten Entfernungsmesser noch zwei weitere angebracht, die nach schräg links und rechts ausgerichtet sind.

Konstruktion und Aufbau:

Schaltung:

Pinbelegung:

Da wir für unsere Schaltung mehr digitale Pins benötigen, als der Arduino hat, mussten wir zwei analoge Pins umfunktionieren, was glücklicherweise sehr einfach ist. Hierzu wird der Pin einfach mit einem „A“ versehen.

const int Pin          = 3; // digitaler Pin 3
 
const int Pin          = A3; // analoger Pin A3 als digitaler Pin
Pinnummer Name im Programm Funktion
13 magnetPin Elektromagnet
2 directionRight rechtes Rad
3 fahrenRight rechtes Rad
4 directionLeft linkes Rad
5 fahrenLeft linkes Rad
6 servoPin Servo
7 rechtsEcho Entfernungsmesser
8 inputCapturePin Metalldetektor
9 mitteTrigger Entfernungsmesser
10 mitteEcho Entfernungsmesser
11 linksTrigger Entfernungsmesser
12 linksEcho Entfernungsmesser
A1 outPin Metalldetektor
A3 rechtsTrigger Entfernungsmesser

Code

Dies ist unser gesamter Quellcode.

schrottbot.zip

Ergebnis und Diskussion

Zum Ende haben wir es geschafft, dass der Roboter rumfährt, metallene Gegenstände mit dem Metalldetektor aufspürt und diese dann Mithilfe des Elektromagneten einsammelt und im Auffangbehälter fallen lässt. Wir haben demnach die Dinge umgesetzt, die der Roboter können muss.

Der SchrottBot ist soweit fertig gebaut und zeigt, dass er metallene Gegenstände aufsammelt. Manchmal sammelt er die metallene Gegenstände nicht ein, da diese ungünstig liegen und der Sammelmechanismus es nicht aufnehmen kann. Es liegt entweder daran das der Kran den Gegenstand wegschiebt und nicht mehr rankommt oder daran, dass der Gegenstand nicht nah genug am Elektromagneten ist um ihn anzuziegen. Dieses Problem haben wir noch nicht behoben, da es schwierig ist den Roboterarm immer so auszurichten, dass dieser Schrauben oder Muttern aufsammelt. Die geringe Anziehungskraft erschwert uns diese Aufgabe, da die metallenen Gegenstände direkt darunter sein müssen. Hierbei haben wir versucht, dass der Kran auf dem Boden rumschwenkt um eventuell die Gegenstände besser zu finden. Manche Muttern kann dieser jetzt finden und aufheben, aber es kann passieren, dass diese durch das schwenken eher das Metall wegschiebt und nicht mehr aufsammeln kann. Dafür haben wir noch keine ideale Lösung gefunden.

Verbesserungswürdig wäre auf jedenfall das Ausweichen. Die Entfernungsmesser wurden nicht eingebunden, da wir es nicht zeitlich geschafft haben.

projektesose2016/schrottbotpublic/start.txt · Zuletzt geändert: 2016/10/27 14:13 von c.jaedicke