Cocktailroboter Gonzo: bunte Nase und bunte Getränke

Seite 2: Motorsteuerung mit Arduino

Inhaltsverzeichnis

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

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.

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

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.

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.

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.

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.

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 ist der fertige Kiba zu sehen, in der Mitte die Schläuche und rechts die Saftpackung in der Kiste.

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.