Eggbot Interpretation
Zur Unterstützung des MakeFun[A] Kinderprogramms des Makerspace Amstetten (https://makerspace-amstetten.at/makefuna/) habe ich mich an einer EggBot Interpretation versucht. Das Ergebnis ist nicht perfekt, für das erste Projekt mit Steppern und Servos bin ich damit dennoch sehr zufrieden und den Kindern hat es auf jeden Fall Spaß gemacht.
Die erste Idee zum Eggbot als Kunstprojekt hatte Bruce Shapiro bereits 1990. Erst knapp zwanzig Jahre später entstand mit dem EggBotBoard eine Steuerung und ermöglichte den original EggBot der von den Evil Mad Scientist Laboratories vertrieben wird (https://www.evilmadscientist.com/2010/the-egg-bot-kit/).
Dank 3D Druck, Arduino und der Arbeit von zB Joachim Cerny der die Arduino Firmware „EggDuino“ programmiert hat kann so ein Gerät nun recht einfach zu Hause nachgebaut werden.
Wer selbst einen Eggbot bauen möchte der braucht dazu folgende Komponenten. Wenn Du über die Amazon-Links bestellst bekomme ich eine kleine Provision über die ich mich natürlich sehr freue.
- NEMA17 Schrittmotoren mit 1,8° Schrittweite (2 Stück, am besten lange Version -> bei Amazon)
- SG90 9g Micro Servo (bei Amazon)
- Arduino CNC Shield (bei Amazon)
- Arduino Uno (bei Amazon)
- 12V Netzteil mit mind. 2A (bei Amazon)
- 7805 Spannungsregler (bei Amazon)
- M3 x 12 Schrauben für die Motorhalterung (8 Stück, bei Amazon)
- M4 x 8 (oder länger) Schraube für den rechten Eihalter (1 Stück, bei Amazon)
- M5 x 12 (oder länger) Schraube für den Stifthalter (bei Amazon)
- M5 x 8 (oder länger) Schrauben für die Motorachsen (2 Stück, bei Amazon)
- Kugellager 8 x 14 x 4 (2 Stück, Breite nicht kritisch, bei Amazon)
- Feder mit etwa 9mm Durchmesser und 2-4cm Länge (bei Amazon)
- Gummiband mit ca. 3-4cm Durchmesser
- PLA und TPU Filament (bei Amazon, Farben durchsehen – kosten unterschiedlich!)
Es werden auch Sets bestehend aus Arduino UNO, CNC Shield, Motortreiber, Motoren, Motorhalter, Endschalter und weiterem Zubehör angeboten die in Summe günstiger kommen können (zum Beispiel bei Amazon)
Als Werkzeuge braucht man
- 3D Drucker mit mind. 17×11 cm Druckfläche für die PLA Teile
- 3D Drucker für TPU um die weichen Eierhalter zu drucken
- Schraubenzieher für die M4 und M5 schrauben (Innensechskant)
- Bohrmaschine um die Montagelöcher des Drucks zu korrigieren falls der Drucker nicht exakt genug arbeitet.
- Heisluftgebläse o.ä. um den Kunststoff zu erweichen und die Lager einzupressen
- Heisklebepistole um die Lager zu fixieren sollten sie nicht fest sitzen
- Multimeter um den Motorstrom einzustellen und diverse Spannungen zu kontrollieren
Der mechanische Aufbau
Die Links zu den erstellten 3D Modellen (STL Files) befinden sich am Ende dieser Seite.
Am besten beginnt man mit dem Druck des Hauptrahmens. Hier eher mehr Aussenschichten einstellen (ich hab 3 Aussenlayer mit einer 0,8er Düse gedruckt, also 2,4mm Wandstärke) und etwa 10-15% Infill. Am fertigen Rahmen ggf. jeweils die vier Schraublöcher der Motorhalterung (3mm) und ggf. auch das Achsloch (6mm) ausbohren und die beiden NEMA17 Schrittmotoren mit M3 schrauben montieren.
Den Aufsatz für die linke Motorachse drucken und mit einer M5 x 8 Schraube an der Achse fixieren.
Den Gelenkhebel für den Stift drucken. Mit einer 0,4er Düse sollten 0,3-0,4mm Luft am Scharnier ausreichen. Größere Düsen eignen sich nicht so gut um ein spielfreies Gelenk zu drucken. Mit einer 0,6er Düse habe für ein frei bewegliches Scharnier 0,6mm Luft benötigt und das Gelenk hatte zu viel Spiel.
Den Servomotor in die Aufnahme im Gelenkhebel drücken und den diesen mit einer M5 Schraube an der Motorachse des hinteren Motors fixieren. Dabei darauf achten daß sich der Hebel frei drehen kann und nicht an den Schrauben der Motorhalterung streift.
Das Gelenk mit dem Gummiband fixieren so daß der Hebel zum Servo gezogen wird und bei Heben und Absetzen des Stifts nicht klappert. Das Gummiband sollte nicht zu stramm sitzen.
An der Vorderseite der Stiftaufnahme kann man dann gleich noch die M5 x 12 Schraube einsetzen welche den Stift fixiert.
Die beiden Kugellager in den Hauptrahmen einsetzen. Sollten diese nicht passen dann den Rahmen ggf. mit einem Heißluftgebläse erwärmen bis die Kugellager passen. Falls sie zu locker sitzen lassen sie sich auch gut mit Schmelzkleber fixieren. Das innere Kugellager ist dabei unkritisch (wird durch die Feder gehalten). Das rechte Kugellager rutscht aber gerne raus wenn es nicht richtig fixiert ist.
Den rechten Eierhalter drucken. Dann die Feder auf den Eierhalter aufsetzen, durch die beiden Lager schieben und an der Aussenseite mit der kleinen gedruckten Beilagscheibe und einer M4 Schraube fixieren.
Jetzt noch die TPU Puffer drucken welche die Eier halten und diese auf den linken und rechten Eierhalter aufsetzen. Die Puffer wenn möglich ohne Infill (0% Infill) drucken. Je nach Eiergröße können unterschiedliche Puffer eingesetzt werden. Das Ei sollte dabei in etwa mittig vor der hinteren Motorachse sitzen. Ich habe Puffer mit 6, 12 und 18mm gedruckt aber im Endeffekt nur die 18mm Puffer benutzt.
Damit ist der mechanische Aufbau abgeschlossen und die Maschine sollte in etwa aussehen wie am folgenden Bild (ohne der Elektronik im Hintergrund – das kommt weiter unten)
Der elektrische Aufbau
Die elektrischen bzw. elektronischen Komponenten umfassen einen Arduino Uno, ein Arduino CNC Board, zwei Stepper sowie einen 5V Microservo. Die Stepper werden über das Netzteil mit 12V versorgt, der Arduino und das CNC Board bekommen ihre 5V vom USB. Schließt man der Servo jedoch an diese 5V an kommte es in unregelmäßigen Abständen zum Reboot des Uno wenn die Spannung wegen des Servos zu stark einbricht. Daher habe ich den Servo über einen eigenen 7805 Spannungsregler mit 5V versorgt und nicht die 5V des Arduino benutzt.
Es gibt hier einige Stolperfallen auf die man achten sollte
- Der Servo sollte nicht über den Arduino bzw. über USB mit 5V versorgt werden da das zu Problemen (Restarts) des Arduino Uno führen kann.
- Die Reset-Automatik des Arduino Uno muß deaktiviert werden da dieser ansonsten beim Öffnen der seriellen Verbindung einen Neustart durchführt.
- Der Motorstrom der Stepper-Driver muß unbedingt vor Anschluß der Stepper eingestellt werden da er ansonsten sehr wahrscheinlich viel zu hoch ausfällt.
Als erstes sollte die Reset-Automatik des Arduino deaktiviert werden. Es gibt dazu diverse Anleitungen im Internet in denen zB empfolgen wird einen 120 Ohm Widerstand zwischen 5V und Reset zu setzen (und Reset damit auf High zu halten während der das Board versucht Reset auf Ground zu ziehen) oder einen Kondensatz zu verwenden (der kurzfristig das selbe macht). Bei meinem KUMAN Modell hat jedoch beides nicht geholfen und ich mußte eine Leiterbahn an einer vorbereiteten Stelle aufbrechen.
Blöderweise sind die Pads links und rechts des aufzutrennenden Stücks ordentlich verzinnt so das es schwierig ist die Bahn zu durchtrennen. Unbedingt nachmessen ob die Bahn auch wirklich nicht mehr leitet!
Nach dem Auftrennen der Verbindung muß die Reset-Taste gedrückt werden um einen Flashvorgang zu starten. Dazu startet man in der Arduino IDE den Upload und drückt die Reset-Taste des Arduino Uno so lange bis die IDE versucht den Sketch hochzuladen. Dann läßt man los und der Upload sollte wie gewohnt durchgeführt werden.
Nun kann die CNC Extension auf den Arduino aufgesteckt werden.
Als nächstes werden die X und Y Stepper auf 1/16 Mikroschritt konfiguriert. Dazu werden die (hoffentlich mitgelieferten) Jumper auf die 6 Pins neben den jeweiligen Kondensatoren gesteckt. Sind alle 3 Verbindungen mittels Jumper gebrückt sind die Driver auf 1/16 Mikroschritt konfiguriert.
Nach den Jumpern können die Driver für die X- und Y-Achse mit Kühlkörpern bestück und aufgesteckt werden. Die zwei Z-Achsen Driver (Z und A) werden nicht benutzt und müssen nicht bestückt werden).
Vorsicht beim Einsetzen der Driver: Unbedingt auf die korrekte Orientierung achten. Ein 180° gedreht eingesetzter Driver wird beim Einschalten sofort zuerstört! Es gibt verschiedene Driver (zB den DRV8825 der den A4988 pingleich ersetzt oder auch den TMC2208 der eine komplett andere Pinbelegung hat). Der Driver muß immer auch zum Board passen. Üblicherweise werden die Boards aber mit Treibern geliefert so daß man nur noch auf die Orientierung achten muß.
Bevor nun die Stepper-Versorgungsspannung angeschlossen wird sollte der Arduino über USB versorgt und der Motorstrom der Treiber eingestellt werden. Zumindest bei meinen DRV8825 war dieser ab Werk viel zu hoch eingestellt (weiß nicht mehr genau wieviel es war, aber eher bei 5A so das der Treiber innerhalb von Sekunden überhitzt war).
Zur Einstellung versorgt man das CNC Shield über USB und misst die Spannung zwischen dem Mittenabgriff des Trimmers und (irgend einem) Ground. Der Motorstrom in Ampere ist immer das doppelte des gemessenen Spannungswertes in Volt. Im Zweifelsfall dreht man den Trimmer bis man eine Spannung von 0,4 V (=0,8 A Motorstrom) angezeigt bekommt. Das vertragen alle Treiber und es sollte für den Eggbot locker ausreichen.
Zur Spannungsversorgung habe ich mir eine kleine Schaltung gelötet an die ich das 12V Netzteil anschließen kann und die mir die 12V für die Arduino CNC (bzw. die Stepper) sowie die 5V für den Servo bereitstellt. Dazu braucht man lediglich beim 7805 den linken Pin an 12V (Eingang), den mittleren auf Ground und den rechten Pin an 5V (Augang) anschließen.
Vorsicht: Vor dem Anschluß des 12V Netzteils bitte unbedingt die Spannungen prüfen da Plus und Minus oft mal vertauscht sind und auch ein Fehler (zB Kurzschluß in der Schaltung oder vertauschte Pins) schnell dazu führen können das verschiedenste Komponenten in Rauch aufgehen.
Zu guter Letzt werden Stromversorgung, Stepper und Servo an das CNC Shield angeschlossen. Der Ei-Stepper kommt dabei an den X-Achsen-Treiber, der Stift-Stepper an den Y-Achsen-Treiber. Der üblicherweise dreipolige Anschluß des Servos muß zerlegt und der Servo wie folgt angeschlossen werden:
- Stromversorgung (rot) an den 5V Anschluß der selbstgebauten Platine
- Ground (braun oder schwarz) an den Ground am CNC Shield oder der selbstgebauten Platine
- Signal (zB gelb) an den Z-Step Anschluß des CNC Shields (da der Z-Stepper nicht benutzt wird kann der Pin dafür benutzt werden)
Damit sollte der elektrische Aufbau abgeschlossen sein. Ohne Firmware kann allerdings noch nichts getestet werden. Deshalb gleich weiter…
Firmware aufspielen
Für den Eggbot gibt es glücklicherweise bereits eine von Joachim Cerny erstellte Firmware für den Arduino Uno welche in großen Teilen aber leider nicht vollständig mit dem original Eggbot kompatibel ist. Der Sourcecode der Firmeware ist auf Github unter https://github.com/plex3r/EggDuino zu finden. (oder auch unter https://github.com/cocktailyogi/EggDuino, aber dieses Repository enthält keinen Link zu den Patches die wir weiter unten brauchen)
Bei der Verwendung der üblichen CNC Shields und eines Arduino Uno ist keine Änderung an der Firmware notwendig. Sie kann runtergeladen und sofort aufgespielt werden.
Wenn, wie oben beschrieben, der automatische Reset des Arduino Uno deaktiviert wurde, dann muß zum Upload der Reset-Taster gedrückt werden. Dazu in der Arduino IDE auf das „Upload“ Icon klicken, den Reset-Taster des Arduino drücken und halten und sobald die Arduino IDE versucht mit dem Upload zu beginnen den Taster wieder loslassen.
Nach der Installation der Firmware kann über den Serial Monitor kontrolliert werden. Dazu öffnet man den Serial Monitor und tippt zB „QP“ und drückt Enter („QP“ = „Query Pen“ = Stiftposition abfragen). Der Arduino sollte mit 0 oder 1 antworten).
Ist der Eggbot nun mit 12V und USB versorgt, dann sollten auch die Stepper bereits bestromt werden und sich nicht mehr drehen lassen. Der Servo fährt üblicherweise auch in eine andere Position wenn er das erste mal eingeschalten wird.
Softwareinstallation
Die Installation der notwendigen Software war für mich der wohl aufwendigste Teil des gesamten Projekts was weniger an der Installation selbst lag als vielmehr daran das es unterschiedliche Quellen mit unterschiedlichen Programmteilen und -versionen gab die nicht wirklich zusammen funktionieren.
Zum Ansteuerung des Eggbot benötigt man
- Inkscape in der Version 0.92 (aktuell gibts 0.92.5; Neuere Versionen funktionieren nicht!)
- Das offizielle Eggbot Plugin in der Version 281 (EggBot_281_r1.exe von github)
- Den Patch für das Eggbot Plugin (ebb_serial.py und andere von github)
Zuerst wird Inkscape installiert und danach noch das Eggbot Plugin. Startet man Inkscape nach der Eggbot Plugin Installation, findet man im „Erweiterungen“ Menü bereits den Eintrag für den EggBot. Die Steuerung läßt sich bereits öffnen und konfigurieren, findet aber noch keinen EggBot da sich die EggDuino Firmware nicht mit den selben Protokoll meldet wie die original EggBot Firmware.
Damit das Inkscape Plugin den EggDuino Eggbot findet muß die Datei ebb_serial.py des Plugins ausgetauscht werden. Diese befindet sich bei der 32-Bit Version unter C:\Program Files (x86)\Inkscape\share\extensions und muß mit der von Github heruntergeladenen Datei ersetzt werden.
Im Plugin sollte nun noch eine passende Servo-Position eingetragen werden damit der Stift auch korrekt angehoben und abgesenkt wird. Die Standardeinstellungen sind sehr wahrscheinlich nicht passend und können dazu führen das der Servo hängen bleibt. Am besten klappt man den Hebel nach oben während man verschiedene Servopositionen durchprobiert. Bei meinem Design hab ich für die Pen Up Position 80% und für die Pen Down Position 100% eingestellt.
Klickt man auf „Anwenden“ dann sollte nach ein paar Sekunden der Servo zuerst auf die erste und danach auf die zweite Position fahren.
Der Stift kann übrigens auch über den Serial Monitor der Arduino IDE angehoben und abgesenkt werden. Dazu gibt man das Commando „TP“ („Toggle Pen“ => Stift umschalten) ein. Der Servo sollte hier prompt reagieren.
Unter „Timing“ kann man die Motorgeschwindigkeit einstellen. Die Standardwerte sind hier 300/400 steps/s, ich mußte aber feststellen daß eine höhere Geschwindigkeit meist zu besseren Ergebnissen führt was aber natürlich auch von den verwendeten Stiften abhäng. Ich meine auch gelesen zu haben das Geschwindigkeiten ab 1000 steps/s nicht funktionieren da es hier ein Problem im Plugin gibt und bin daher mit 800 oder 900 steps/s unterwegs.
Sollte die Zeichnung beim Bemalen des Eis spiegelverkehrt herauskommen, dann reicht es unter „Optionen“ eine der beiden Motorrichtungen umzudrehen. Natürlich nicht beide, ansonsten ist es weiterhin spiegelverkehrt aber um 180° gedreht. Alternativ kann man natürlich auch die Stepper-Motor-Anschlüsse umdrehen und so die Motorspulen austauschen was ebenfalls die Richtung umdreht.
Die Bewegungskommandos unter „Manual“ drehen die Motoren bei meinem Eggbot extrem langsam. Ich denke nicht daß das Absicht ist, da es aber für den Betrieb nicht relevant ist habe ich das Problem ignoriert.
Um nun ein Muster zeichnen zu können stellt man die Dokumenteinstellung auf 6400 x 1800 Pixel was etwa 360 x 90° Grad entspreicht.
Der in Inkscape angezeigte Dokumentrahmen zeigt nun den Bereich der tatsächlich am Ei landet.
Vorsicht: Der Stift-Stepper hat keine Endschalter und dreht auf jede Position. Definiert man das Dokument zu groß oder zeichnet Elemente außerhalb der 1800 Pixel Höhe, dann kann der Stift-Stepper den Gelenkhebel in den Rahmen fahren und den Eggbot im schlimmsten Fall zerstören. So lange der Motorstrom nicht zu hoch ist sollte der Stepper in so einem Fall aber einfach zu springen beginnen und Schritte verlieren.
Um gleich mit einigen fertigen Designs zu starten kann man die Datei „EggBotExamples_v281.zip“ von https://github.com/evil-mad/EggBot/releases/tag/v2.5.0 laden und entpacken. Sie enthält eine Menge fertiger Zeichnungen die man nur noch ins Inkscape ziehen und dann auf den Dokumentrahmen aufskalieren muß.
Da einige Designs durchgäng sind und die Muster über die Nahtstelle (den Dokumentrand) fortgesetzt werden muß das Design evtl. über den rechten Rand hinaus verlängert werden.
Um den Vorgang nun zu starten und das Design endlich aufs Ei zu bekommen braucht man jetzt nur noch
- Ein Ei einlegen
- Einen Stift montieren (so das dieser bei das Ei gerade nicht berührt wenn der Servo und damit der Stifthalter oben ist)
- Den Gelenkhebel ggf. runterklappen und zentrieren (wenn der Stepper zu stark dagegen hält einfach die 12V Stromversorgung abstecken, den Hebel senkrecht stellen und den Strom wieder anschließen)
- Auf dem ersten Reiter des EggBot Plugins auf „Anwenden“ klicken und warten…
Nach dem Start der Ausgabe öffnet sich ein leeres Fenster in Inkscape. Dieses schließt sich sobald der Vorgang abgeschlossen wurde.
Möchte man die Ausgabe abbrechen trennt man einfach die USB Verbindung und drückt in Inkscape auf die ESCAPE Taste. Danach kann man den Eggbot wieder anschließen und sofort wieder ausgeben.
et voilà
Die 3D Modelle zum Download
Die folgenden 3D Modelle habe ich für den EggBot erstellt. Nutzung auf eigene Gefahr…