Benutzer-Werkzeuge

Webseiten-Werkzeuge


Seitenleiste

projektewise21:tellerwaescherpublic:start

Projektdokumentation Tellerwäscher

Themenbeschreibung

Mit unserem Roboter haben wir uns zur Aufgabe gemacht, eine simple Möglichkeit zu finden, Teller schnell und so automatisch wie möglich zu säubern.
Hierbei haben wir eigentlich nur 2 große Bestandteile. Einmal, die Platte, auf welcher der Teller steht und welche die Erkennung, sowie die Rotation dieses erkennt und zum anderen aus einem Arm, welcher für den Säuberungsmechanismus zuständig ist. In den Roboter soll also ein dreckiger Teller eingelegt werden, welcher dann durch einen Drucksensor erkannt wird, woraufhin der Arm auf dem Teller positioniert wird und diesen reinigt. Die Kommunikation aller Teile verläuft hierbei über einen einzigen Arduino.

Bild 1: Foto des fertigen Roboters

Der Aufbau

Aufgebaut ist der Roboter eigentlich recht simpel. Er besteht aus einer Platte, welche montierte Füße besitzt, damit der Roboter auf einem geraden Untergrund abgestellt werden kann. Daran befestigt ist ein Motor mit angebrachtem Zahnrad, welcher zur Rotation des Drehmechanismus der Platte dient. Auf benannter Platte ist nun auch noch der Arm verbaut, welcher ähnlich wie ein Plattenspielerarm funktioniert. Der einzige Unterschied ist, dass am Ende keine Nadel, sondern ein Schwamm verbaut ist, welcher durch einen Schlauch, welcher aus einem wiederbefüllbarem Plastikbehälter kommt, mit einer Wasser-Spülmittel-Lösung versehen werden kann.

Überblick über das Gesamtsystem

Unsere verschiedenen Baugruppen beliefen sich bei diesem Projekt auf die Rotation des Tellers, den Arm und dessen Bewegung und die Kamera und die optische Erkennung von Gegenständen und Tellern. Hierbei war darauf zu achten, dass die Kommunikation zwischen allen Teilen reibungslos funktioniert, kein Teil ein anderes blockiert oder stört, es keine Schleifpunkte und zu große Abnutzung der Teile gibt sowie der Code der jeweiligen Teile funktioniert und sich nicht gegenseitig überschreibt.
Dies hat sich jedoch als schwerer herausgestellt als vorerst gedacht. Besonders mit der Kamera taten wir uns schwer, da der zu verwendende Algorithmus recht komplex war. Zum Teil haben wir auch überlegt diese komplett wegzulassen und uns vorerst nur auf die grundlegenden Funktionen des Roboters zu konzentrieren. Doch auch dort gab es einige Komplikationen. Unsere Armkonstruktion mussten wir mehrere Male überarbeiten, da sie entweder zu komplex oder durch den Verbau von zu vielen Motoren zu schwer wurden. Letztendlich haben wir uns für eine plattenspielerähnliche Konstruktion entschieden, welche allerdings auch noch nicht das non-plus-ultra war. Mit dieser Konstruktion hatten wir damit zu kämpfen, das beim herunterfahren des Arms sich der Mechanismus zur Vorwärts- und Rückwärtsbewegung des Arms nicht richtig aufeinandergelegt hat, oder der Arm auf Grund unzureichender Stromkapazität oder zu wenig Kraft sich nur stockend, sehr langsam oder gar nicht bewegt hat. Natürlich mussten während des gesamten Projekts auch immer wieder Anpassungen am Code getätigt werde, da ein paar Abläufe zu schnell geschahen oder andere wiederum zu spät einsetzten.
Bewusst ausgeklammert haben wir dabei, dass der Roboter beispielsweise mit der Kamera den Unterscheid zwischen flachen und tiefen Tellern erkennen soll, verschieden Programme für verschieden Tellergrößen durchführen können soll und diese selbst errechnen bzw. bestimmen, sowie die Entfernung und Säuberung von wirklich hartnäckigen und beispielsweise angetrockneten Essensresten oder anderen Verunreinigungen, da uns dazu die Kraft, welche auf den Teller ausgeübt werden kann, fehlte. (…)

Der Arm

Unser Arm des Roboters wird von einem Stepper Motoren und einem Servomotor bewegt. Der Servomotor ist dafür zuständig, um den Arm auf den Teller abzusenken. Durch das Absenken des Armes liegt die Zahnradschiene, welche auf der Unterseite des Armes fixiert ist auf dem zweiten Stepper Motor auf. Dieser schiebt dann den Arm nach vorne und hinten. Durch das Vor- und Zurückschieben kann der Schwamm den ganzen Teller säubern (primär für größere Teller wichtig). Weiterhin ist an dem Arm ein Behälter angebracht welcher ein Mischung aus Spülmittel und Wasser enthält. Der Behälter ist durch Schläuche mit dem Schwamm verbunden. Ein dazwischenliegendes Magnet-Ventil erlaubt die genaue Dosierung des Gemisches welches in den Schwamm gelangt.
Der Stepper Motor besitzt zwei Pins, den „Richtungs-“ und den „Schritt-Pin“. Für die Vorwärts und Rückwärtsbewegung ist der „Schritt-Pin“ zuständig. Dieser besitzt zwei Zustände (HIGH und LOW). Durch einen kurzen Spannungspuls am „Schritt-Pin“ macht der Motor einen Schritt. Die restlichen zwei Pins sind für die Stromversorgung zuständig. Die genau Belegung und Zuweisung der Pins wird weiter unten erklärt.

Bildverarbeitung & Objekterkennung:

In unserem Projekt wollten wir eine Logitech Webcam für die Bildverarbeitung & Objekterkennung verwenden. Die Bilder würden in Processing mit Unterstützung der öffentlich zugänglichen OpenCV Programmbibliothek ausgewertet und verarbeitet werden. OpenCV stellt uns außerdem einige Methoden zur Verfügung, um Kreise zu erkennen. Diese Kreiserkennung würde verwendet werden, um zusätzlich zum Drucksensor zu bestätigen das ein Teller vorhanden ist und im besten Fall sollte auch noch erkannt werden, ob dieser sauber geworden ist.
Um diese Funktion dann in unserem Roboter zu verwenden, stellen wir eine Kommunikation zwischen Processing und Arduino her. Um eine Kamera in Processing zu verwenden brauch man die Video (GStreamer-based video library for Processing) von Processing, da wir ansonsten nicht auf die Bilder der Kamera zugreifen können. Als nächstes verwenden wir einige Methoden von OpenCV um das Bild der Kamera am besten für die eigentlich Kreiserkennung vorzubereiten, dafür werden zuerst die Farbwerte durch die Grayscale-Methode auf Grau gesetzt und anschließend werden Störungen durch die Medianblur-Methode verringert um die Kreiserkennung so gering wie möglichst zu verfälschen. Die Kreiserkennung würde über das sogenannte „Hough Circle Transformation“ verfahren von OpenCV funktionieren.

Technische Daten, Bauteile und Pin-Verteilung

Bauteile


Technische Geräte:

  • Arduino Nano
  • 2 Steppermotoren
  • Magnetventil
  • Servo
  • 3 Drucksensoren
  • externe Stromquelle
  • Kamera

Schaltplan:

  • Widerstände (100kOhm,10kOhm,100Ohm)
  • 3 Kondensatoren (100µF)
  • Steppermotor Driver A4988
  • Steppermotor Driver DRV8825
  • MOSFET-Transistor
  • Kabel

Konstrukt:

  • Holz
  • Nägel/Schrauben
  • Schläuche
  • Zahnräder (verschiedene Größen)
  • Schwamm
  • Metalschiene
  • Wasserbehälten
  • Wasserflaschenhalterung für Fahrad

Pinbelegung

Pin Pinmode Bauteil Funktion
D2 OUTPUT DIR Rotation Rotation des Tellers
D3 OUTPUT STEP Rotation Rotation des Tellers
D4 INPUT Drucksensor Armbewegung nach unten
D5 INPUT Drucksensor Armbewegung nach oben
D6 OUTPUT Magnetventil Wasserversorgung
D7 INPUT Drucksensor Tellererkennung
D8 Servo Auf- /Abbewegung des Arms
D9 OUTPUT DIR Vor-/Zurückbewegung Bewegung des Schwamms auf dem Teller
D10 OUTPUT STEP Vor-/Zurückbewegung Bewegung des Schwamms auf dem Teller
D11
D12


Abbildung 1: Schaltplan des Roboters


Abbildung 2: Schaltplan eines Steppermotors mit dem Driver A4988Quelle


Abbildung 3: Schaltplan eines Steppermotors mit dem Driver DRV8825Quelle

Abbildung 4: Schaltplan eines Magnetventils Quelle

Abbildung 5: Schaltplan eines Servos Quelle

Ergebnis und Diskussion


Endstand des Projekts

Unser Tellerwäscher-Roboter kann mithilfe eines Drucksensors erkennen, ob ein Objekt in seine Mitte gelegt wurde.
Daraufhin startet der Roboter den Reinigungsprozess. Hierbei platziert er zunächst den Schwamm in der Mitte des Tellers und befüllt diesen mit einer Wasser-Spülmittel-Mischung. Im Anschluss wird der Teller gedreht, wodurch der Schwamm den Teller reinigt und im nächsten Schritt ein Stück nach außen bewegt wird, damit der Schwamm auch den äußeren Rand des Tellers reinigt. Zum Abschluss fährt der Arm wieder nach oben und der Teller ist fertig gereinigt.

Probleme

Derzeitig haben wir noch Probleme mit der Stromversorgung, da die Komponenten einzeln funktionieren aber gemeinsam Probleme machen. Zudem funktioniert die Kamera noch nicht, aber dies möchten wir in der nächsten Woche noch beheben. Zusammenhängend damit funktioniert auch die Tellergrößenerkennung nicht. Abschließend auch noch ein weiteres Problem, welches wir aber geplant haben noch in großen Stücken zu beheben, ist die Abdichtung und Isolierung der Elektrik von dem Wasser des Schwamms.
Am Ende unseres Projekts ist nur noch das Problem mit der fehlenden Kamera vorhanden und, dass der Schwamm bei zu schneller Bewegung des Arms oder bei Erschütterungen des Untergrundes, im hochgefahrenen Zustand, nach unten rutscht und dann nicht direkt auf die Tellermitte aufgelegt wird, sondern weiter außen.

Verbesserungs- oder Erweiterungsmöglichkeiten

Direkte und recht einfach umsetzbare Verbesserungen wären beispielsweise ein zweiter Arm, der den Teller im Anschluss an das Reinigen auch noch abtrocknet. Eine weitere Verbesserungsmöglichkeit bildet ein Benutzerinterface, mit dem man zwischen verschiedenen Modi wählen kann, sodass man einstellen kann, ob es sich um einen großen oder kleinen Teller handelt. Dies dient dazu, dass der Roboter keine unnötigen Bewegungen macht. Zudem wäre das Prinzip der Tellererkennung mit Holfe der Kamera noch anzubauen und anzupassen, welches wir oben beschrieben haben. Eine weitere Erweiterungsmöglichkeit wäre eine automatische Tellerzufuhr, allerdings ist diese nur schwer zu realisieren, da man aufpassen muss, dass die Teller dabei nicht kaputt gehen, aber dennoch richtig in der Vorrichtung sitzt.

Video des fertigen Roboters

Code


Hier finden Sie den Code, der in unserem Roboter verwendet wird.

Der Code: tellerwaescher_final.zip

projektewise21/tellerwaescherpublic/start.txt · Zuletzt geändert: 2022/05/14 19:24 von d.golovko