Benutzer-Werkzeuge

Webseiten-Werkzeuge


Seitenleiste

projektewise1718:barkeeperpublic:start

Projektdokumentation: Cantina-Bot

Ein Projekt von: Dennis Claußner und Jan-Niclas Rump.

Einleitung:

Am Anfang unseres Projektes stand die Idee einen Roboter zu erschaffen, welcher nicht nur nützlich sein sollte sondern auch ein gewisses Maß an Unterhaltung zu bieten hat. Und so entstand das Konzept des Cantina-Bots. Der Cantina-Bot soll hierbei in der Lage sein, auf Abruf, verschiedene Cocktails zubereiten zu können. Diese Aufgabe soll der Roboter in einer angebrachten Zeit absolvieren. Der wohl entscheidenste Punkt ist jedoch, dass die Cocktails wohlschmeckend sein sollen, dies bedeutet wiederum, dass der Roboter in der Lage sein muss relativ präzise Mengen der Zutaten abfüllen zu können.

Funktionsweise:

Die Benutzung des Roboters läuft wie folgt ab: als Erstes stellt man ein Glas auf die Drehscheibe (1) und wählt dann über die Bedienobefläche (2) ein Getränk aus. Danach fährt das Glas, entgegen des Uhrzeigersinns, unter die Schläuche des Flüssigkeitssystems (3), über diese gelangen die Zutaten aus den Behältern dann ins Glas. Als letzter Schritt rotiert das Glas unter den Rührarm(4), dieser wird dann abgesenkt und vermischt die Zutaten im Glas. Am Ende fährt die Scheibe wieder auf ihre Ausgangsposition und das Getränk kann entnommen werden.

Abbildung 1: Der Cantina-Bot (finale Version)

Konstruktion:

1.Ansatz

Als Ausgangsbasis für unseren Cantina-Bot wollten wir das Grundgerüst, sowie den Drehteller des Cakecutter-Projektes (Cakecutter) verwenden. Im Verlauf des Projekts mussten wir jedoch viele Modifikationen an dem Grundgerüst des Cake-Cutters vornehmen; hierbei haben wir besonders die Stabilität erhöht, zudem haben wir eine Halterung für den Rührarm des Catina-Bots geschaffen, sodass dieser seine Bewegungen ungestört ausführen kann.

Abbildung 2: Erstes Konzept des Cantina-Bots

Im weiteren Verlauf des Projekts haben wir uns jedoch von der Idee distanziert den Drehteller des Cake-Cutters zu nutzen, da dieser nicht nur umständlich beim Einbau gewesen wäre, sondern auch für unsere Zwecke zu unpräzise gefertigt war.

2.Drehteller

Eine bessere Alternative stellt hierbei der Drehteller eines alten Plattenspielers da. Dieser war nicht nur präzise gefertigt sondern ließ sich auch ohne große Umstände einbauen. Jedoch musste auch dieses Bauteil modifiziert werden, da es standartmäßig mit einem Elektromotor betrieben wird. Der Elektromotor wäre jedoch für unsere Zwecke unpraktisch gewesen, weshalb ein Schrittmotor als neuer Antrieb eingebaut wurde. Während des Programms wird der Drehteller 8 verschiedene Positionen abfahren, welche jeweils einem Arbeitsschritt entsprechen. Hierbei werden die Positionen durch Neodymmagnete makiert, welche wiederum von einem Hall-Effekt-Sensor erkannt werden. Des weiteren wird eine Position als „Null-Position“ markiert. Diese Position wird durch das zusätzliche Auslösen eines Tasters von den anderen Positionen unterschieden. Ein weiteres Merkmal des Drehtellers ist eine eingebaute Lichtschranke, welche dazu dient zu erkennen ob sich ein Glas auf dem Drehteller befindet.

Abbildung 3: Der Drehteller mit der Halterung für das Glas(1) und mit dem Hall-Effekt-Sensor(2)

3.Rührarm

Bei dem Rührarm handelt es sich um eine Arbeitsstation, bei der die Zutaten, welche sich im Glas befinden, umgerührt werden und somit der Cocktail fertiggestellt wird. Hierbei muss der Rührarm insgesammt 3 verschiedene Bewegungsabläufe ausführen: Zum einen muss er den Rührkopf in das Glas absenken können, desweiteren muss er in der Lage sein durch Rotation den Cocktail zu vermischen und zuletzt muss er, aus hygenischen Gründen, in der Lage sein den Rührkopf über ein Säuberungsgefäß zu fahren. Da für das Absenken sowie für das Auslenken, relativ genaue sowie leistungsstarke Motoren von Nöten waren, haben wir uns entschieden Schrittmotoren zu verwenden. Diese übertragen ihre Bewegung auf Zahnstangen, welche dann den Rührarm bewegen. Beim Rührkopf haben wir uns für einen Standard-Elektromotor entschieden, da bei dieser Tätigkeit nur eine relativ schnelle Rotation erreicht werden muss. Desweiteren haben wir Taster eingebaut welche dazu dienen ein Feedback zu geben, wenn der Rührarm seine jeweilige Endposition erreicht hat.

Abbildung 4: Der Rührarm in der Säuberungs-Position
Abbildung 5: Die Anschlagssensoren für Hoch-Runter
Abbildung 6: Die oberen Anschlagssensoren

4.Flüssigkeitssystem

Das Flüssigkeitssystem besteht aus 6 1l-Flaschen welche sich kopfüber in der Konstruktion befinden und von welchen der Boden entfernt wurde. Dies wurde getan, um die Füllhöhe mit insgesammt 6 Ultraschallsensoren zu messen. Die Ultraschallsensoren sind hierbei auf einer Platte montiert, welche durch Schaniere beweglich gelagert ist. Dies wurde getan, um ein Befüllen der Flaschen zu erleichtern.

Abbildung 7: Die Flaschen sowie die Ultraschallsensoren

Das Dosieren der Flüssigkeiten wird über 6 Magnetventile gesteuert, welche sich unterhalb der Flaschen befinden.

Abbildung 8: Die Magnetventile und das Schlauchsystem

5.Bedienoberfläche

Die Bedienoberfläche besteht aus einem LCD und 9 Tastern, welche auf einer Holzplatte an der Front des Roboters befestigt sind. 8 der Taster erfüllen hierbei die Funktion der Rezeptauswahl, diese sind links und rechts vom Display positioniert. Der letzte Taster befindet sich unterhalb des Displays und dient der Abfrage der Füllstande sowie zur Bestätigung des gewählten Rezepts.

Abbildung 9: Die Bedienoberfläche im ausgeschaltenem Zustand

Code (https://github.com/XFactHD/CantinaBot):

Das Programm des Cantina-Bots wurde in 8 Tabs organisiert:

Cocktailmaschine.ino

Dieser Programmteil dient der Implementierung und dem Aufruf der State Machine. Desweiteren speichert dieser Programmteil die Rezepte-und Zutatendaten während das Gerät läuft und verarbeitet eingehende Tastendrücke.

DisplayHandler.ino

Die Kommunikation mit dem LCD erfolgt in diesem Programmteil, zudem werden hier spezielle Schriftzeichen erzeugt und Hilfsmethoden für z.B. das Hauptmenü und die Füllstandanzeige ausgeführt.

FillLevelReader.ino

Das Auslesen der Füllstände der Zutatenbehälter erfolgt in diesem Programmteil. Hierbei erfolgt das Auslesen: nach Start des Roboters, auf Tastendruck oder nach der Herstellung eines Cocktails.

GlassChecker.ino

Dieser Programmteil überpfrüft ob sich ein Glas auf der Drehscheibe befindet.

ProcessHandler.ino

Der ProcessHandler bringt den Drehteller und den Rührarm am Anfang des Programms in ihre Ausgangspositionen und steuert den Mischprozess. Zudem wird hier überprüft ob alle Zutaten vorhanden sind.

RecipeHandler.ino

Der RecipeHandler enthält Methoden zum Lesen und Manipulieren der Rezepte.

SerialCom.ino

Dieser Programmteil dient dazu, Kontakt mit der Konfigurationssoftware auf dem PC aufzunehmen, um die Zutaten- und Rezeptlisten auszulesen und zu verändern.

StorageHandler.ino

Auf dem EEPROM werden mit Hilfe des StorageHandlers die Rezepte und Zutaten nach der Bearbeitung durch den PC gespeichert. Desweiteren liest der StorageHandler die Rezepte und Zutaten beim Start aus dem EEPROM aus.

Ablauf:

Beim Start des Geräts wird zu aller erst die serielle Schnittstelle aktiviert. Dann wird der DisplayHandler initialisiert, um dem Nutzer möglichst schnell Statusinformationen geben zu können. Daraufhin folgt die Initialisierung des FillLevelReaders, GlassCheckers und ProcessHandlers. Danach werden die Pins für die Taster konfiguriert. Im Anschluss liest der StorageHandler die Rezept- und Zutatendaten aus dem EEPROM aus und der SerialCom überprüft, ob das Gerät an einen PC angeschlossen ist und die Konfigurationssoftware versucht, auf das Gerät zuzugreifen. Ein Zugriffsversuch kennzeichet sich dadurch, dass die Konfigurationssoftware den String START sendet. Ist dies der Fall, werden weitere Initialisierungsschritte übersprungen. Andernfalls wird die Initialisierung fortgesetzt: Der ProcessHandler bringt den Rührarm und die Scheibe in die Ausgangsposition, der Hardwareinterrupt für die Taster wird aktiviert und die Füllstände der Zutatenbehälter werden von dem FillLevelReader überprüft. Zum Schluss werden die derzeitigen Füllstände auf dem LCD angezeigt.

Wenn sich das Gerät nach der Initialisierung im STATE_SERIAL_COM befindet, wird auf Daten von der Konfigurationssoftware auf dem PC gewartet. Sendet der PC den String GETRECIPES oder GETINGREDIENTS, werden entsprechend die Rezepte oder Zutaten an den PC gesendet. Sendet der PC einen String, der mit RECIPES oder INGREDIENTS beginnt und mit END endet, werden anhand der Daten zwischen diesen beiden Markern die Rezepte oder Zutaten verändert. Sendet der PC den String TERMINATE, beendet das Gerät das aktive Zuhören auf der seriellen Schnittstelle und speichert Veränderungen der Rezepte und/oder Zutaten im EEPROM des Mikrocontrollers.

Befindet sich das Gerät nicht im STATE_SERIAL_COM, wird auf Eingaben über die Taster gewartet. Wird der Taster für die Füllstandsanzeige gedrückt, werden die Füllstände angezeigt. Über den ersten Wahltaster kann eine erneute Messung der Füllstände durch den FillLevelReader erzwungen werden und über die Wahltaster 3-8 kann das Ventil für die an der jeweiligen Stelle auf dem Display angezeigte Zutat geöffnet und geschlossen werden, um die Schläuche mit Flüssigkeit zu füllen, damit die Dosierung später präziser ist. Ein weiterer Druck auf den Taster für die Füllstandsanzeige bringt das Gerät wieder ins Hauptmenü. Wird jetzt eine Wahltaste für ein Rezept gedrückt, wird vom ProcessHandler überprüft, ob für das jeweilige Rezept die Zutaten vorhanden sind. Wenn ja, dann wird vom GlassChecker überprüft, ob ein Glas auf der Scheibe steht. Ist dies nicht der Fall, wird bis zu 10 Sekunden gewartet, bevor der Vorgang abgebrochen wird. Steht ein Glass auf der Scheibe, wird weitere 2 Sekunden darauf gewartet, dass der Nutzer die Starttaste (Füllstandstaste) drückt. Ab diesem Punkt übernimmt der ProcessHandler die Kontrolle und sorgt für die Herstellung des Cocktails. Dafür wird das Glas von der Scheibe Station für Station unter den Schläuchen durchbewegt und die entsprechenden Zutaten eingefüllt. Zum Schluss wird der Cocktail von dem Rührarm vermischt, der Rührarm danach in einem Reinigungsgefäß gereinigt und das Glas wieder in die Ausgangsposition transportiert. Danach wird für die verwendeten Zutaten der Füllstand erneut gemessen, um bei dem nächsten Rezept sicherzustellen, dass der Cocktail entsprechend hergestellt werden kann.

Lösungen:

  • Füllstandsermittlung:
    • Der FillLevelReader gibt einen kurzen Impuls über den jeweiligen Trigger-Pin an das Ultraschallmodul ab, wartet 250 Mikrosekunden und misst dann die Zeit, bis der Echo-Pin ausgelöst wird. Anhand dieser „Rundkurszeit“ kann dann mithilfe der Schallgeschwindigkeit die Entfernung zwischen Modul und Flüssigkeitsoberfläche errechnet werden
  • Positionsbestimmung der Scheibe:
    • Neben der Drehscheibe befindet sich ein Hall-Effekt-Sensor und an der Scheibe an acht Positionen befindet sich jeweils ein Neodym-Magnet. Bewegt sich ein Magnet an dem Hall-Effekt-Sensor vorbei, wird dieser ausgelöst, wodurch die Software die abgefahrenen Positionen zählen kann.
  • Glasdetektion:
    • Um zu überprüfen, ob ein Glass auf der Scheibe steht, befindet sich an der Ausgangsposition unter der Scheibe eine Reflektionslichtschranke. Stellt man nun ein Glas auf die Scheibe, wird der Ausgang der Lichtschranke aktiviert und die Software weiß, dass ein Glass auf der Scheibe steht.

Pinbelegung:

Pin Bezeichnung Beschreibung
2 BUTTON_INTERRUPT Hardware-Interrupt für Taster
5 BUTTON_START_OR_FILL_INFO Füllstands- und Starttaster
6 BUTTON_SELECT_1 Wahltaster 1
7 BUTTON_SELECT_2 Wahltaster 2
8 BUTTON_SELECT_3 Wahltaster 3
9 BUTTON_SELECT_4 Wahltaster 4
10 BUTTON_SELECT_5 Wahltaster 5
11 BUTTON_SELECT_6 Wahltaster 6
12 BUTTON_SELECT_7 Wahltaster 7
13 BUTTON_SELECT_8 Wahltaster 8
A10 LCD_RS LCD - Register Select
A11 LCD_EN LCD - Enable
A12 LCD_D4 LCD - Datenpin Bit 4
A13 LCD_D5 LCD - Datenpin Bit 5
A14 LCD_D6 LCD - Datenpin Bit 6
A15 LCD_D7 LCD - Datenpin Bit 7
22 TRIGGER_PINS Ultraschallmodul 1 - Trigger
23 ECHO_PINS Ultraschallmodul 1 - Echo
24 TRIGGER_PINS Ultraschallmodul 2 - Trigger
25 ECHO_PINS Ultraschallmodul 2 - Echo
26 TRIGGER_PINS Ultraschallmodul 3 - Trigger
27 ECHO_PINS Ultraschallmodul 3 - Echo
28 TRIGGER_PINS Ultraschallmodul 4 - Trigger
29 ECHO_PINS Ultraschallmodul 4 - Echo
30 TRIGGER_PINS Ultraschallmodul 5 - Trigger
31 ECHO_PINS Ultraschallmodul 5 - Echo
32 TRIGGER_PINS Ultraschallmodul 6 - Trigger
33 ECHO_PINS Ultraschallmodul 6 - Echo
A0 GLASS_SENSOR Lichtschranke (Glass-Sensor)
34 VALVE_INGREDIENT_1 Ventil 1
35 VALVE_INGREDIENT_2 Ventil 2
36 VALVE_INGREDIENT_3 Ventil 3
37 VALVE_INGREDIENT_4 Ventil 4
38 VALVE_INGREDIENT_5 Ventil 5
39 VALVE_INGREDIENT_6 Ventil 6
4 MOTOR_STIR Rührmotor
40 STEPPER_DISC_DIR Schrittmotor - Scheibe - Richtung
41 STEPPER_DISC_STEP Schrittmotor - Scheibe - Schrittsignal
42 STEPPER_DISC_ENABLE Schrittmotor - Scheibe - Aktivieren
43 STEPPER_ARM_HOR_DIR Schrittmotor - Rührarm (horizontal) - Richtung
44 STEPPER_ARM_HOR_STEP Schrittmotor - Rührarm (horizontal) - Schrittsignal
45 STEPPER_ARM_HOR_ENABLE Schrittmotor - Rührarm (horizontal) - Aktivieren
46 STEPPER_ARM_VERT_DIR Schrittmotor - Rührarm (vertikal) - Richtung
47 STEPPER_ARM_VERT_STEP Schrittmotor - Rührarm (vertikal) - Schrittsignal
48 STEPPER_ARM_VERT_ENABLE Schrittmotor - Rührarm (vertikal) - Aktivieren
A7 SWITCH_DISC_ZERO Endschalter - Scheibe - Nullposition
A2 SWITCH_DISC_POS Hall-Effekt-Sensor - Scheibe - Positionsbestimmung
A3 SWITCH_ARM_HOR_IN Endschalter - Rührarm (horizontal) - innerer Anschlag
A4 SWITCH_ARM_HOR_OUT Endschalter - Rührarm (horizontal) - äußerer Anschlag
A5 SWITCH_ARM_VERT_TOP Endschalter - Rührarm (vertikal) - oberer Anschlag
A6 SWITCH_ARM_VERT_BOTTOM Endschalter - Rührarm (vertikal) - unterer Anschlag

Ergebnis:

Als Resümee für dieses Projekt kann man sagen, dass es ein ambitioniertes Projekt war; welches wir im Rahmen unserer Möglichkeiten, gut, zu einem Ende führen konnten. Denn es ist uns gelungen einen sehr soliden Roboter zu entwickeln, welcher seiner Bestimmung, dem Coktailmischen, ohne große Einschränkungen nachgehen kann.

Diskussion:

Als einen diskussionswürdigen Punkt sehen wir die Wahl des Drehtellers, denn es wäre auch möglich gewesen einen Cocktail zumischen ohne, dass das Glas hätte bewegt werden müssen. Dies hätte zwar zu einer Vereinfachung des Projektes geführt; jedoch wäre damit aber auch ein Teil des „Showeffektes“ verloren gegangen, welcher einen durchaus wichtigen Teil beim Cocktailmixen hat.

Aussichten:

Als Aussichten für dieses Projekt könnte man die Verfeinerung des Arbeitsablaufes sehen. Es könnte auch der Einbau einer Schüttelvorrichtung oder auch eine Station für die Zugabe von Eis installiert werden.

projektewise1718/barkeeperpublic/start.txt · Zuletzt geändert: 2018/05/17 10:24 von d.golovko