Benutzer-Werkzeuge

Webseiten-Werkzeuge


Seitenleiste

projektewise1617:elektrochocpublic:start

Projektdokumentation

ElectroChoc

Wir haben einen Roboter gebaut, der eine 2D-Bilddatei in eine äußerst schmackhafte Schokoladenform umwandelt. Er druckt also Bilder aus Schokolade. mmmm

Beteiligte:

Jil Lippert
Marius Gläser
Mathis Bärmann
Sarah Diethert
Sonia Simons
Anne Kruschwitz
Olivia Dargel


Der elektroChoc-Schokoladendrucker nach dem Druck eines Schokoladensterns.

Einleitung

Begonnen haben wir mit der einfachen Idee Schokolade zu drucken, die von Mathis kam.
Da sich der Großteil des Kurses für Schokolade begeistern konnte, entstand direkt eine verhältnismäßig große Gruppe.
Nach mehreren Diskussionen kamen wir zu dem Schluss, dass unser Roboter aus folgenden groben Bestandteilen bestehen muss:

  • Halterung (1)
  • Schokoladenspritze (2)
  • bewegliche Druckplatten (3)

Zum jetzigen Zeitpunkt liest der Elektro Choc-Roboter SVG-Dateien ein und steuert sowohl die Spritze, als auch die beweglichen Platten und ein zusätzliches Ventil mit einem Arduino an. Das Ergebnis ist ein zweidimensionales Bild aus Sckokolade in der vorher ausgewählten und gewünschten Form.

Methoden/Umsetzung:

Als Grundidee haben wir beschlossen, anders als bei herkömmlichen 3D-Druckern, nicht die Spritze sondern den Druckuntergrund zu bewegen. Somit konnte die Konstruktion der Spritze und ihrer Halterung statisch geplant werden, was die Arbeit wesentlich vereinfachte.

Konstruktion:

Die Konstruktion unseres Roboters setzt sich aus drei wesentlichen Teilen zusammen: der Halterung, der Schokoladenspritze sowie den Druckplatten. Zur Umsetung unserer Ideen und der Konstruktion war relativ wenig Mathe gefragt, dafür eine Menge Fantasie und konstruktives Denkvermögen. Die Ideen der Konstruktion sind verhältnismäßig simpel, waren aber in der Realität nicht ganz so einfach umzusetzen.

Baugruppen:

Halterung:

Die Halterung ist eine Holzkonstruktion, an welche die Druckspritze, der dazugehörige Linearmotor, das Wasserbad sowie das Ventil zum Verschließen der Spritze angebracht sind. Sie steht über den Druckplatten, ist jedoch nicht fest mit diesen verbunden.

Schokoladenspritze:

Die Schokoladenspritze setzt sich zusammen aus einem Linearmotor, einem Wasserbad und einem Ventil. Der Linearmotor kann die Spritze nach Bedarf bewegen, sodass die Schokolade aus dieser herausgedrückt wird. Das Wasserbad umschließt die Spritze und wird mit einer Heizspirale erwärmt.

Erste Skizze der Schokoladenspritze

fertige Konstruktion mit Linearmotor.

Das Ventil:

Das Ventil besteht im wesentlichen aus einer mit Moosgummi beklebten Holzplatte, welche über eine verhältnismäßig aufwendige Federkonstruktion unterhalb der Spritze montiert ist. Über einen Servomotor kann das Ventil geöffnet werden, indem die Holzplatte nach hinten gezogen wird. Lässt der Servo lose, springt das Ventil zurück. Die Konstruktion entstand sehr spontan. Umso erfreulicher war es, dass sie tatsächlich dicht hält.


Das Schokoventil

Druckplatten:

Die Druckplatten sind der eigentliche bewegliche Teil des Druckers, welcher die Daten des Arduino wieder in eine reale Form unwandelt.
Um dies zu realisieren, gibt es eine Platte, welche in X-Richtung navigiert und eine weitere Platte, die auf der anderen montiert ist und in Y-Richtung fährt. Beide Platten werden mit Hilfe eines Steppermotors und einer Zahnschiene bewegt und stehen auf je vier Rädern. damit die Platten nicht aus der Bahn laufen befinden sich links und rechts je zwei Seitenführungsrollen, die an einer Schiene entlang laufen. Die obere Platte hat eine Abmaßung von 31×31cm und bietet eine effektive Druckfläche von 30×30cm (5mm Rand).

Zur besseren Vorstellung haben wir die Konstruktion vorerst in einem 3D-Computermodell umgesetzt und sie dann gebaut.

Erste Skizzen der oberen Druckplatte


Erste Skizze der unteren Druckplatte

Hinweis: Um die Steppermotoren und den Linearmotor betreiben zu können, muss eine externe Stromquelle mit einer Spannung von 12V angeschlossen werden. (siehe Breadboard)

Welche Teilprobleme waren zu lösen?

Hardware:

Bei der Hardware hatte wir einige kleinere Probleme, welche sich schnell im Laufe des Baus gelöst haben. Unter anderem war da die Stabilität der Holzkonstruktion, das diese sich durch den starken Druck des Linearmotors (1500 Newton) stark verbogen hat. Dieses Problem haben wir durch die Ergänzung von weiteren Stützen gelöst.

Ein größeres Problem, welches sich über das ganze Projekt gezogen hat war das Schokoventil. Zu Beginn war unsere Vorstellung, dass es einen Verschluss hat, sodass der Schokoladenlauf gestoppt werden kann. Doch erst in der letzten Woche sind wir zu einer effektiven Lösung gekommen (siehe Schokoventil).

Außerdem sollte die Schokolade durchgehend flüssig sein, sodass das Ventil nicht verstopft wird. Zu Beginn des Projekts war geplant die Schokolade in einem externen Wasserbad zu schmelzen und dann über Schläuche zur Spritze weiter zuleiten. Dort wären aber zu viele Stellen gewesen, an denen die Schokolade hätte fest werden können, weshalb wir uns schließlich dafür entschieden haben das Wasserbad direkt um die Spritze und das Ventil zu setzen. Dazu kommt noch ein umfunktionierter Milchschäumer, welcher das Wasser regelmäßig in Bewegung versetzt, sodass die gesamte Spritze von warmen Wasser umschlossen ist und letztendlich die Schokolade an keinem Punkt fest werden kann und somit die Spritze nicht verstopft wird.

Software:

Bei der Software gab es vor allem das Problem, den Arduino und Processing in Echtzeit miteinander kommunizieren zu lassen, ohne dass dabei ein Datenverlust entsteht. Processing sendet in einem String sowohl die X- als auch die Y-Koordinate. Diese muss der Arduino extrahieren und dann natürlich ansteuern lassen, in dieser Zeit ist er allerdings nicht dazu in der Lage neue Werte zu empfangen, was anfangs zu Problemen führte. Dies wurde zuerst mit Hilfe zweier sehr langen Arrays gelöst, in denen die Koordinaten gespeichert wurden und dann erst im Anschluss das Objekt gedruckt wurde. Diese Lösung war jedoch sehr speicherbelastend, weshalb als Endlösung nun der Arduino Processing bescheid gibt, dass neue Daten gesendet werden können und er erst druckt, wenn beide Koordinaten wirklich vorhanden sind.

Ein weiteres Problem war die Tatsache, dass wir beide Stepper nicht zeitgleich bewegen konnten. Das führte dazu, dass wir Punkte nicht über den kürzesten Weg mit gerade Diagonalen ansteuern konnten, sondern maximal über Stufenformen uns einer Geraden annähren konnten. Diesem Problem wurde mit dem Befehl „MakeLine“ der „Schokidrucker“-Klasse beigelegt, in welchem keine Delays mehr verwendet werden.

Welche Teilprobleme wurden bewusst ausgeklammert?

Hardware:

Wir haben zunächst überlegt einen Temperatursensor zu verwenden, welcher die Temperatur des Wassers misst und darüber die Heizspirale regeln kann, sodass die Schokolade nicht zu hoch erhitzt wird. Allerdings haben wir schnell festgestellt, dass wir diesen nicht benötigen, da die Heizspirale das Wasser nicht sehr stark erhitzt und ihn somit weggelassen.

Software:

Wir hatten uns von Anfang an dazu entschieden nur mit SVG-Dateien zu arbeiten, damit wir ein einheitliches Dateiformat haben. SVG-Dateien boten sich an, da dort die Vektoren gegeben sind und man die Bilder so einfacher skalieren konnte. Aus Zeitgründen waren wir zum Schluss nichtmehr in der Lage, das Processingprogramm so umzubauen, dass es zusätzlich Bescheid gibt, wann während eines Drucks das Ventil auf und zu muss, um beispielsweise komplexere Zeichnungen zu drucken, in welchen die Schokolade „abgesetzt“ werden muss.

Technische Daten

Materialliste

Bauteile
Spritze
Flasche
Holzbalken / -platten
Räder
Zahnstangen
Schrauben
Spiralfedern
Kabelbinder
Kleber/ Klebeband
Schaumstoff
Schnur
Bauteile (Elektronik) Anzahl
Arduino 1
Breadboard 1
Diverse Kabel
Kondensator (100µF 25V) 2
LED 1
Treiber 3
Lüsterklemme 21
Stepper 2
Servo 1
Linearmotor 1
Heizspirale 1
Rührmotor 1
Wagoklemme 6

Pinliste

Pin am Arduino Funktion Name im Programm
D2 Stepper unten Richtungspin für X
D3 Stepper unten Stepperpin für X
D4 Stepper oben Richtungspin für Y
D5 Stepper oben Stepperpin für Y
D6 Linearmotor SpritzeRunter
D7 Linearmotor SpritzeHoch
D8 unbelegt
D9 unbelegt
D10 Ventilservo Servo
D11 Linearmotor PWM SpritzeGeschwindigkeit
D12 Rührmotor Motor_Pin

Das Breadboard


1 = Treiber für den Spritzenmotor
2 = Anschlüsse für die Steppermotoren
3a = Treiber für oberen Stepper mit Kondensator
3b = Treiber für unteren Stepper mit Kondensator
4 = Anschluss für externe Stromquelle (Gleichstrom, 12V)
5 = Anschluss für den Servo
6 = Anschluss für den Umrührmotor
A = Arduino mit USB-Anschluss

Software

Das Bild (SVG-Datei), das gedruckt werden soll, wird zunächst am Laptop in Processing eingelesen.
Hier werden mit Hilfe der Geomerative Library die einzelnen Punkte des Bildes in einem 2-dimensionalen Array gespeichert.
Um das Bild auf unsere bedruckbare Fläche von 30cm*30cm zu skalieren, wird festgestellt, ob die Höhe oder die Breite größer ist (rand) und ein Faktor ausgerechnet:
faktor = 30/rand

In einem loop werden die einzelnen Koordinaten, also jeweils ein x und ein y, mit dem Faktor multipliziert und über USB an den Arduino geschickt.
Wenn ein Objekt fertig gedruckt ist, wird ein Befehl gesendet, der das Ventil schließt.
Beim Beginn des nächsten Objektes wird es wieder geöffnet.

Auf dem Arduino ist ein Programm, das die aus Processing empfangenen Daten interpretiert und dementsprechend alles in Bewegung setzt.
Es kommt immer jeweils ein Buchstabe und eine Zahl an, wobei der Buchstabe angibt für welchen Teil des Roboters die Information ist, also ob z.B. x- oder y-Koordinate oder ein Befehl fürs Ventil.

Zur Vereinfachung des Codes gibt es die Schokidrucker-Klasse, in der alle grundlegenden Funktionen für den Arduino definiert sind.

Wenn der Arduino eine x- und eine y-Koordinate empfangen hat werden die beiden Stepper-Motoren gleichzeitig bewegt.
Dabei wird der Abstand zwischen dem aktuellen Punkt und der neuen Koordinate errechnet. Muss dabei in x- und y-Richtung die gleiche Distanz überwunden werden, haben die Stepper gleich lange delays, wenn nicht, wird je nach Streckenverhältnis von x und y das Delay eines Stopper entsprechend verlängert.
Damit wir wissen, wie viele Schritte des Steppers einem Zentimeter entsprechen, haben wir zuvor gemessen, wie weit sich der Stepper mit einer bestimmten Anzahl an Schritten bewegt und konnten dies dann auf einen Zentimeter umrechnen. Dies war wichtig, damit wir die ganze Fläche von ca. 30×30cm abdecken können und gleichzeitig auch nicht über den Rand hinweg drucken.

Hier ist der fertige Programmcode für Arduino und Processing.

Die Schokidrucker-Klasse

Die Klasse findet ihr hier.
Die Schokidrucker-Klasse ist eine für den Schokodrucker angelegte Klasse, die alle wichtigen Funktionen bereit stellt und das Prorgamm übersichtlicher machen soll. Sie wird eingebunden durch die „Schokidrucker.hpp“-Datei. Der Einfachheit halber haben wir uns dafür entschieden, die Klasse und ihre Funktionen vollständig in der .hpp-Datei zu definieren. Die Schokidrucker-Klasse benötigt ihrerseits die „Ventil.hpp“-Datei, um ein internes Ventil-Objekt zu erstellen. Für den Servomotor des Ventils wird bereits in der „Ventil.hpp“-Datei die „Servo.h“-Datei eingebunden. Im eigentlichen main-Programm muss nur die „Schokidrucker.hpp“-Datei eingebunden werden. „Servo.h“ und „Ventil.hpp“ sind bereits eingebunden. Es muss lediglich Die „Schokidrucker.hpp“ und die „Ventil.hpp“ in den Ordner des Mainprogramms kopiert werden. Die wichtigsten Funktionen der Schokidruckerklasse sind:
-StartingPosition()
-Print(arrayX[], arrayY[])
-MakeLine(int x, int y)
-SpritzeHoch(int v)
-SpritzeRunter(int v)
-SpritzeStop()
-VentilAuf()
-VentilZu()
-End()

Eine genaue Beschreibung der Klasse und ihrer Funktionen findet ihr hier.

Desweiteren kann mit den Befehlen „Motor(int p)“, „MotorOn()“ und „MotorOff()“ der Motor mit Milchschäumer angesteuer werden.

Um das Ventil über die Klasse zu bedienen, muss:

-ein Servo Objekt erstellt werden,
-in der setup()-Funktion mit
„name.attach(Pin)“ der Pin des Servos festgelegt werden,
-die Adresse des Servo-Objekts („&name“) in dem „SetVentilSevo(…)“-Befehl übergeben werden.

Probleme, wie man sie vermeidet und "Still-to-do"-List

-Oft ist es passiert, dass während des Drucks der Schokoladenfluss unterbrochen war. Dies lag an in der Schokolade eingeschlossenen Luftblasen. Einfache Lösung für dieses Problem: Drucker grundsätzlich mit bereits geschmolzener Schokolade befüllen.

-Einige svg-Dateien führen zu einem seltsamen Fehler beim Druck, den wir uns bis jetzt nicht erklären können. Dabei fährt der Roboter ohne ersichtlichen Grund aus seinem maximalen Druckbereich herraus, versucht also einen sehr weit entfernten Punkt anzusteuern. Die Werte von Processing sind ok, die Steuerung durch den Arduino auch. Der Fehler muss also irgendwo beim Zurückwandeln der gesendeten Werte entstehen.

-Wir haben es nicht mehr geschafft den Umrührmotor fest einzubauen. Er kann trotzdem genutzt werden, indem man ihn ab und zu mal ins Wasser hält und einschaltet.

-Leider erlaubt es das aktuelle Programm durch Processing, die Figur nur einmal zu zeichnen, will man mehrere Lagen zeichnen, muss man das Proramm neustarten.

Achso, die Klopapierrolle...

Schokolade klebt, da kann ein Stück Klopapier ab und zu nicht schaden ;)

projektewise1617/elektrochocpublic/start.txt · Zuletzt geändert: 2017/05/18 17:09 von c.jaedicke