Logo von Make

Suche
preisvergleich_weiss

Recherche in 2.200.782 Produkten

Carsten Romahn 16

Cocktailroboter Gonzo: bunte Nase und bunte Getränke

Cocktailmaschinen-Collage der Rückseite mit Schlauchpumpen, Vorderseite mit grünem Ausguss und Display sowie einem Glas mit Saft.

Für unsere Gartenparties haben wir eine Cocktailmaschine gebaut. Die Zutaten: Ein Raspi mit Touch-Display und acht Schlauchpumpen mit Arduino-Steuerung.

Auf der Maker Faire Ruhr testeten wir die Cocktailmaschine WH-Spring 006 der Westfälischen Hochschule oder besser gesagt: meine Tochter hat ihn sehr intensiv getestet und kam schnell zu dem Schluss, dass wir auch so einen brauchen.

Eine Maschine mit vielen Schläuchen und Flaschen.
Cocktailroboter WH-Spring 006 auf der Maker Faire Ruhr 2017

Nach einer kurzen Recherche im Internet war klar, dass es zwar einige Getränkemixer gibt, die aber entweder Einzelstücke wie der WH-Spring 006 sind oder für den professionellen Einsatz konzipiert und entsprechend groß und teuer sind. Daher hieß es: „Dann bauen wir sie eben selbst!“. Also los, wie könnte ein erstes Lastenheft für unsere Cocktailmaschine aussehen?

  1. Leicht zu reinigen und hygienisch muss sie sein.
  2. Verschiedene Rezepte sollte sie beherrschen.
  3. Einfache Bedienung wäre gut.
  4. Ein Cocktail sollte möglichst zügig gemixt sein.

Um ein Getränk aus einer Flasche in ein Glas zu befördern gibt es viele Möglichkeiten. Wir haben uns für Schlauch- bzw. Peristaltikpumpen entschieden. Dabei wird der Schlauch in einem Gehäuse um einen Rotor gelegt, der beim Drehen die Flüssigkeit voranschiebt. Diese Pumpen haben den Vorteil, dass nur der Schlauch für den Lebensmittelkontakt geeignet und zugelassen sein muss. Außerdem kann man einen Schlauch schnell und einfach auswechseln, falls es mit der Reinigung mal nicht so richtig klappen sollte.

Kurzinfo

Checkliste

Material Gehäuse

Material Schlauchpumpen

Zur Dimensionierung haben wir uns überlegt, dass die Maschine für einen Cocktail nicht länger brauchen soll, als unser Kaffeevollautomat für eine Tasse Kaffee benötigt. Somit muss ein 200ml Glas in ca. 1 Minute gefüllt werden. Da Cocktails aus mehreren Zutaten bestehen gehen wir davon aus, dass jede Zutat höchstens das halbe Glas füllen muss, was eine minimale Förderleistung von 100ml/min pro Pumpe bedeutet.

Cocktailroboter Gonzo (5 Bilder)

Cocktailroboter Gonzo

Schlauchpumpe selbst konstruieren

Die Recherche zu Pumpen war wieder ernüchternd. Keine erfüllt unsere Anforderungen. Entweder waren die verwendeten Schläuche nicht lebensmittelkonform, die Förderleistung zu gering oder sie waren viel zu teuer. Aber was im Großen gilt, gilt natürlich auch im Kleinen: „Dann bauen wir sie eben selbst!“.

Als Motor kommt ein Schrittmotor vom Typ Nema17 zum Einsatz. Schrittmotoren haben zwar ein paar Nachteile, wie etwa das geringe Drehmoment bei höheren Drehzahlen und die aufwendige Ansteuerung. Dafür hat man die volle Kontrolle über die Drehzahl und kennt zu jeder Zeit das geförderte Volumen. Außerdem werden diese Motoren gerne in 3D-Druckern eingesetzt und sind daher gut verfügbar.

Die Ansteuerung erfolgt über den Motortreiber A4988. Dieser steuert die zwei Spulen des Schrittmotors mit einer Spannung bis zu 35V und Strömen bis zu 2A an. Die Ansteuerung ist hochohmig mit 3,3 oder 5V möglich, so dass der Treiber direkt an die IO-Pins eines Mikrocontrollers angeschlossen werden kann. Der Pumpendruckkopf lässt sich mit der kostenlosen CAD-Software OpenSCAD und einem 3D-Drucker relativ einfach realisieren – auch wenn von Version 0.1 bis 2.5 einige Iterationen zur Optimierung und Anpassung nötig waren. Am Ende sind es fünf gedruckte Teile pro Pumpe, für die unser Drucker rund vier Stunden benötigt. Die Dateien zum Nachdrucken finden Sie am Ende des Artikels als Download.

Entwicklung der Pumpe (4 Bilder)

Version 0.1 der Schlauchpumpe...

In der letzten Version der Pumpe nutzen wir im Rotor sieben Rollen, die jeweils aus drei Kugellagern (4×11×4) bestehen. Das ist zwar etwas überdimensioniert, macht aber einen soliden Eindruck. Als Schlauch dienen Silikonschläuche mit einer Lebensmittelzulassung. Bei den Maßen haben wir uns für eine Wandstärke von 1,5mm und einen Innendurchmesser von 4mm entschieden. Solche Schläuche sind gut verfügbar und sollten mit einer typischen Shore-A-Härte von 60° flexibel genug sein.

Motorsteuerung mit Arduino

Jetzt noch die Pumpen an einen Arduino Uno angeschlossen, eine passende Library zum Ansteuern des Motors gesucht und schon könnte es den ersten Cocktail geben. Die Bibliothek „AccelStepper“ von Mike McCauley eignet sich super für erste Versuche. Leider ist es damit nicht möglich, mit dem Mikrocontroller zu kommunizieren, solange ein oder mehrere Motoren laufen. Unsere gewünschten Zugabemodi lassen sich so nicht umsetzen, daher entschieden wir uns für: „Dann schreiben wir sie eben selbst!“

Make 3/19

Mehr zum Thema gibt es in Ausgabe 3/19 der Make.

Für die Ansteuerung des Motors bedarf es lediglich eines High/Low-Signals auf dem STEP-Eingang des Treiber-ICs und eines dauerhaften Low- bzw. High-Pegels auf dem ENABLE- und DIR-Eingangs. Über DIR können wir die Richtung der Pumpe softwareseitig ändern. Ein High/Low-Signal auf STEP entspricht einem Schritt. Für eine Umdrehung sind 200 Schritte notwendig. Ein solches Signal lässt sich hervorragend mit den Timern des Chips ATMEGA328P realisieren, der auf dem Arduino verbaut ist. Die zwei 8Bit-Timer steuern je einen Motor an und der 16Bit-Timer ist für zwei Motoren zuständig. Um die Timer-Interrupts zu realisieren wechseln wir von der Arduino-Programmierumgebung auf das Atmel Studio und programmieren direkt in C.

Treiberplatine löten

Prinzipiell könnten mehr als vier Motoren an einen Mikrocontroller angeschlossen werden, dafür fehlen uns aber die IO-Pins, da wir pro Treiber mit STEP, DIR und ENABLE gleich drei Pins belegen. Die Enable-Eingänge ließen sich auch parallel schalten, so wie es in der Regel bei günstigen Motorshields für den Uno gemacht wird. Das hätte aber den Nachteil, dass alle angeschlossenen Schrittmotoren den maximalen Strom ziehen, auch wenn nur eine Pumpe läuft.

Schaltplan der Gonzo-Steuerplatine.
Schaltplan der Gonzo-Steuerplatine

Zusätzlich verbauen wir noch Stromsensoren vom Typ MAX471. Der MAX471 liefert an seinem Out-Pin eine dem Strom proportionale Spannung und benötigt daher einen analogen Eingang des Mikrocontrollers. Er ist prinzipiell nicht notwendig, war aber bei der Einstellung der Strombegrenzer auf den Treibern praktisch. So lässt sich auch im zusammengebauten Zustand überprüfen, ob der Motor mehr als die zulässigen 0,4A bekommt.

Ein Schrittmotor mit aufgeklebter Platine.
Motor mit Steuerplatine

Den A4988-Treiber löteten wir zusammen mit dem MAX471 und einem Kondensator (zum Abfangen von Spannungsspitzen) auf eine kleine Lochrasterplatine. Diese haben wir mit Heißkleber direkt auf den Motor geklebt. Der Anschluss für den Uno ist als Kabel mit Pfostenstecker von der Platine weg geführt und das Netzgerät über eine Klemmverschraubung angeschlossen.

Mischfunktionen austesten

Wie bekommen wir nun ein Cocktailrezept in den Uno? Wir entschieden uns für eine Trennung zwischen dem Arduino-Back-End, das den Motor ansteuert, und einem Front-End für die Benutzerinteraktion. Kommunizieren sollen Front- und Back-End über eine UART-Schnittstelle, die auf dem Uno bereits hardwareseitig implementiert ist. Das Protokoll nutzt Strings bzw. Zeichenketten. Diese lassen sich mit einem Texteditor erstellen und mit einem Terminal-Programm wie z.B. HTerm direkt ans Back-End schicken.

Im Protokoll teilen wir dem Controller mit, für welchen der vier Motoren der folgende Befehl gilt. Darauf folgt die Information, mit welcher maximalen Geschwindigkeit wieviele Schritte ausgeführt werden sollen. Um die für höhere Drehzahlen erforderliche Beschleunigung kümmert sich das Back-End. Zudem beinhaltet das Protokoll die Drehrichtung sowie die Parameter Pause und Modus.

Eine Reihe an Ziffern und Buchstaben, aufgeteilt nach Motor-ID, Geschwindgikeit, Anzahl der Schritte, Richtung, Pause und Modus.
Protokoll für die Kommunikation zwischen Front- und Back-End

Sie sind das Ergebnis unserer Forschung, auf welche verschiedenen Arten zwei Getränke zusammen gegeben werden können. Als Anschauungsbeispiel dienten uns je eine Flasche Bananen- und Kirschsaft. Sollen beide gleichzeitig zugegeben werden (Modus 0) oder lieber nacheinander (Modus 0 mit Pause)? Vielleicht wäre auch eine Funktion gut, bei der ein Gradient zweier Flüssigkeiten entsteht (Modus 1 und 2)? Bananen- und Kirschsaft lassen sich auf erstaunlich viele verschiedene Arten mischen. Mit den drei Zugabemodi, der Pause-Funktion und einer Kombination der Modi sollten wir für die meisten Rezepte gerüstet sein.

Vier Zugabemodi des Cocktailroboters, aufgetragen als Graphen über die Zeit.
Zugabemodi

Nach den theoretischen Überlegungen haben wir uns an die Praxis gewagt. Für unser Funktionsmuster („MixIt!“) bauten wir drei Pumpen an eine zweckentfremdete Getränkekiste. Die Stromversorgung der Pumpen erfolgte mit einem Labornetzgerät und als Front-End musste ein alter Laptop mit Excel herhalten.

Links ein Glas Kiba, rechts ist eine Saftpackung zu erkennen.
Links ist der fertige Kiba zu sehen, in der Mitte die Schläuche und rechts die Saftpackung in der Kiste.
Screenshot eines Mischprogramms.
Benutzeroberfläche mit VBA in Excel

Das haben wir außerdem gelernt:

  1. Eine Schlauchpumpe schafft mit dem Silikonschlauch (ID4mm) circa 220ml/min, allerdings mussten wir die Versorgungsspannung von 12V auf 30V erhöhen, da der Schrittmotor sonst bei hohen Drehzahlen nicht genug Drehmoment hat und einfach stehen bleibt. Mehr als 30V kann unser Labornetzgerät nicht, aber beim A4988 ist bei 35V sowieso Schluss.
  2. Die Reinigung funktioniert gut und schnell, in wenigen Minuten, wenn normale Säfte genutzt werden. Pro Pumpe reicht es, etwa einen halben Liter warmes Wasser zu pumpen und schon sind die Schläuche wieder sauber. Etwas aufwendiger wird es bei zum Beispiel bei Kokosmilch oder Sahne. Dann muss erst mit einer Lauge aus Geschirrspülmittel und anschließend mit klarem Wasser gespült werden.
  3. Drei Pumpen sind viel zu wenig.
  4. Eine umfunktionierte Getränkekiste, die von einem alten Laptop mit Excel gesteuert wird, entspricht nicht unseren optischen Vorstellungen.

Benutzerinterface erstellen

Zunächst stellte sich die Frage, wie das Front-End, die Schnittstelle mit dem Benutzer, letztlich aussehen soll. Der WH-Spring 006 hatte Hardwareregler für die einzelnen Zutaten, aber wir wollen verschiedene Rezepte abspeichern und aufrufen. Am sinnvollsten schien uns eine Steuerung wie bei einem Tablet zu sein. Dafür benötigen wir einen Touchscreen und einen entsprechenden Rechner. Wir entschieden uns für den Raspberry Pi und den offiziellen 7″ Touchscreen, bei dem wir wenig Probleme erwarteten und weil er einen relativ breiten Rand hat, was den Einbau in ein Gehäuse vereinfachen dürfte.

Schema von Touchscreen, Raspberry Pi, Atmegas und Motoren.
Schematischer Aufbau

Android-Tablets fielen für uns raus, da wir die UART-Schnittstelle nutzen wollen. Eine weitere Alternative wäre die Steuerung über eine App oder einen Webserver, wenn man einen ESP8266 statt des Arduino nutzt. Wir wollen bei der Cocktailparty aber nicht vom WLAN abhängig sein.

GUI mit QtCreator

Für das Benutzerinterface benötigten wir eine grafische Oberfläche (GUI) bzw. ein Framework zum Programmieren der GUI. Beim Raspberry drängt sich die Nutzung von Python auf. Fast alle Frameworks sind aber für eine Steuerung mit Maus und Tastatur ausgelegt und von 35 möglichen Kandidaten blieb nur PyQt übrig. Mit PyQt lassen sich die touchscreen-optimierten Quick Controls von Qt nutzen – aber nicht die Quick Controls2, mit denen man sogar SwipeScreens, also das Wischen über den Screen, umsetzen kann. Brauchen wir aber!

Daher schwenkten wir auf C++ mit Qt um und nutzen QtCreator. Damit lässt sich unter Linux ein Programm schreiben und übersetzen, das auf dem Raspi installiert werden kann. Dazu benötigen wir einen Cross-Compiler. Zum nötigen Workflow gibt es im Internet viele Anleitungen (wie diese) und mit einer Virtualisierungssoftware wie z.B. „VirtualBox" wird aus einem Windowsrechner auch schnell ein virtueller Linuxrechner. Prinzipiell lässt sich QtCreator direkt auf Raspbian installieren, die so programmierten Anwendungen laufen allerdings nur sehr träge.

Screenshot QtCreator.
Screenshot QtCreator

Für die Programmierung der GUI ist nur sehr wenig C++ Code notwendig. Die Ansichten und Steuerelemente werden in der deklarativen Programmiersprache QML beschrieben. Das geschieht hauptsächlich durch Drag and Drop im Designermodus des QtCreators. Da sich auch eigene Steuerelemente zusammen bauen lassen, scheinen die Möglichkeit schier endlos. Einen guten Einblick in die Möglichkeiten von QML gibt das online verfügbare Buch „Qt5 Cadaques“ von Ryannel und Thelin. Die Anbindung der in QML definierten GUI zum restlichen Code erfolgt über den für Qt typischen Signals & Slots Mechanismus, der bei Eintreten eines Ereignisses – wie dem Drücken eines Buttons – Signale auslöst, die damit verknüpfte Funktionen, die Slots, aufrufen.

Gehäusebau

Nun hatten wir Pumpen, eine Pumpensteuerung und eine schicke grafische Benutzeroberfläche. Auf geht es zum Finale. Ein passendes Gehäuse musste her, das all unsere Bauteile beherbergen kann und etwas professioneller ist als eine Getränkekiste.

Das Gehäuse sollte auf der Außenseite Platz für acht Pumpen (ca. 10×10cm), ein 7″-Display (11×19cm) und einen Netzanschluss (5×3cm) bieten. Im Inneren musste Platz für die Motoren (5cm tief), die beiden Unos (7×5,5×2,5cm) und das Netzteil (20×8×5cm) sein. Zudem sollte der Touchscreen oberhalb des Auslaufes sein, damit er vor umkippenden Gläsern sicher ist. Die Mindesthöhe des Auslaufes sollte 18cm betragen, damit unsere Gläser darunter passen.

Ein geeignetes Leergehäuse konnten wir nirgends finden. Das Gehäuse unseres Kaffeeautomaten würde passen, aber es wäre schade um den morgendlichen Kaffee. Somit waren wir wieder bei unserem Motto: „Dann bauen wir es eben selbst!“. Allerdings orientierten wir uns am Design des Automaten und seiner Aluminiumverkleidung, die oben ein Bedienfeld und darunter den Auslauf hat.

Profil trifft Blech

Als Skelett nutzten wir Nut-6-Schnellbauprofile mit 20mm und für die Front- und Rückseite besorgten wir uns passende Edelstahlbleche. Das Loch für das Display schnitten wir mit einem Winkelschleifer in das Blech. Hier zahlte sich der breite Rand des Raspi-Displays aus, da es die Schnittkanten verdeckt und wir nicht sonderlich genau arbeiten mussten. Zudem ließ sich das Display so einfach auf das Blech kleben.

Schwieriger wurde es bei dem Auslauf. Dazu hatten wir viele Ideen, die vom Wasserhahn bis zum offenen Trichter reichten. Letztendlich entschieden wir uns für eine selbstgedruckte Variante. Da wir gerade kein schwarzes Filament hatten wurde die „Nase“ farbig. Damit hatten wir auch einen Namen für unsere Cocktailmaschine: Gonzo, wie der langnasige Stuntman in der Muppet Show.

Alles fest im Griff

Die Pumpen kamen auf die Rückseite. Dafür bohren wir insgesamt 61 Löcher in das 2mm dicke Blech. Die Dicke haben wir gewählt, damit die Zentrierringe der Motoren mit dem Blech eine ebene Fläche bilden. Die 8 Löcher mit den 22mm Durchmessern lassen sich mit einer Standbohrmaschine und entsprechendem Stufenbohrer realisieren, machen aber keinen Spaß und kosteten uns einen ganzen Samstagnachmittag.

Ein grün gedruckter Halter für eine Schlauchpumpe auf einer Alu-Wand.
Im Gehäuse sitzt der Schrittmotor, außen die Schlauchpumpe

Bei den Seiten und dem Oberteil machten wir es uns daher einfach und bestellten passende Glasplatten. Unser 3D-Drucker lieferte die passenden Halter, die wir auf die Scheiben klebten und anschließend an die Schnellbauprofile schraubten. Für die Unos und das Edelstahlrohr, das quer durch Gonzo geht, druckten wir ebenfalls passende Halter. Das Netzteil wurde auf ein Aluminiumblech und dieses an die Schnellbauprofile geschraubt. So stellen wir sicher, dass unser Gonzo vollständig geerdet ist.

Eine schwarze Glasplatte mit aufgeklebten Eckteilen aus dem 3D-Drucker.
Die Abdeckung des Cocktailroboters

Nachdem alles zusammengebaut ist, wenden wir uns nun dem Langzeittest zu. Prost!

Eine silberne Maschine mit Display und grünem Ausguss, darunter ein Glas mit Säften. Neben der Maschine stehen Tetrapaks mit unterschiedlichen Säften.

Dateien zum Download

Den Baubericht für einen weiteren Cocktailroboter, den Hector 9000 mit Druckluftpumpen und Raspberry-Pi-Steuerung, gibt es in der Make-Ausgabe 3/19.

16 Kommentare

Themen: