Das Leben ist zu kurz für schlechten Kaffee


Nachdem die Morphy Richards nicht wirklich temperaturstabil war, musste eine Alternative her. Vor allem der Thread "Silvia, mein Eisenschwein... öfföff" hat dann in der Folge zu kleineren eBay-Ausflügen geführt. Das Resultat ist eine gebrauchte Rancilio Silvia Modell 2009, sehr guter Zustand, und gar nicht teuer (ähem).

Die Espressomaschine ist technisch sehr einfach: Temperaturregelung über Thermostate (mit entsprechender Hysterese) und ansonsten nur ein paar Schalter, Kabel, Magnetventil und Pumpe. Simpel, dabei aber mit einem massiven Messingkessel und solider Verarbeitung ausgerüstet. Da die Maschine von vielen Leuten schon modifiziert wurde, ist sie eine ideale Basis für eigene Experimente. Noch bevor die Maschine da war hab ich mir zusätzliche Silikonkabel und Solid-State Relais geordert, um in diversen Basteltagen einen PID-Regler selbst einzubauen.

Zunächst muss jedoch der Status Quo dokumentiert werden. Also wie schon bei der Morphy Richards einen Temperatursensor auf den Tank geklebt und losgemessen:

Nach dem Aufheizen sieht man deutlich die Hysterese, verursacht durch die einfache Thermostatregelung. Die Temperatur pendelt zwischen 87°C und 109°C:

Beim Bezug schwankt die Temperatur ebenso. Im folgenden Bild habe ich bei ca. 105°C Kesseltemperatur den Bezug gestartet (erster Strich). Danach hab ich direkt auf Dampfbetrieb umgeschaltet und Milch aufgeschäumt. Der Sensor clippt jedoch bei 127°C:

Zusammenfassend kann man sagen, dass das Temperaturverhalten der Silvia im Originalzustand nicht wirklich prickelnd ist. Durch Temperatursurfen und andere Tricks kann man zwar die Temperatur beim Bezug in recht engen Grenzen halten, aber das ist nicht wirklich praxistauglich. Diverse Hersteller bieten daher einen PID-Regler speziell für diese Maschine als Umrüstsatz an. Keiner dieser Regler ist wirklich ein Open Source-Produkt — uncool, wenn man damit basteln möchte.

DIY PID-Regler

Also selbst einen Regler entwerfen. Die Reglersoftware basiert momentan noch auf dem Bare Bones Coffee Controller, einem Arduino-basierten PID. Ich habe einen anderen Temperatursensor, nämlich den DS18S20, verwendet — insofern habe ich den Code entsprechend angepasst. Darüber hinaus gibt es momentan die ersten Anfänge einer Autotuning-Routine, doch darüber später mehr.

Nachdem die grobe Richtung für die Software feststand ging es an die Hardware. Der Schaltplan V0.1 sieht so aus (aufs Bild klicken für eine PDF-Version):

Im Prinzip ist die Schaltung ein kleiner Arduino, der zusammen mit einem FTDI TTL-USB-Konverter mit der Aussenwelt kommunizieren kann. Am Arduino Pin 9 hängt ein SSR, welches das Heizelement im Kessel schaltet. Der Onewire-Bus für den Temperatursensor ist an Arduino Pin 7 angeschlossen. Auf Lochraster aufgebaut sieht die Schaltung so aus:

Ich habe wenig Lust, die Maschine bei jedem Softwareupdate auseinander zu bauen, daher muss der Mikrocontroller einen Bootloader haben. Praktischerweise bringt Arduino gleich einen mit. Dieser kann direkt aus der Arduino-GUI über einen ISP-Programmer auf den Chip kopiert werden. Leider kennt die Arduino-GUI meinen geliebten USBasp-Programmer jedoch nicht. Die Abhilfe findet sich nach kurzer Recherche im Internetz: Einfach die folgenden Zeilen in die "programmer.txt" im Verzeichnis "hardware" der Arduino-Installation hinzufügen:

usbasp.name=USBasp
usbasp.communication=usb
usbasp.protocol=usbasp

Danach bietet die Arduino-GUI auch ein Flashen über meinen Programmer an. Den Mikrocontroller also in mein Pollin-Board gesteckt, programmiert und wieder zurück auf die Lochraster-Platine. Fortan kann der Mikrocontroller über USB programmiert werden.

Bleibt noch die Frage, wie der Mikrocontroller mit Strom versorgt werden kann. Einen Trafo in das Gehäuse zu setzen wäre zwar eine Möglichkeit, erscheint mir jedoch aufgrund der offenen Verkabelung etwas unsicher. Daher habe ich ein kleines Steckernetzteil mit einer Eurobuchse in selbstverschweissendes Klebeband eingepackt und mit Silikonkabeln versehen:

Diese Variante hat zusätzlich den Vorteil, ziemlich kompakt zu sein.

Einbau

Zuerst musste ich die Halterung für die Pumpe drehen und einen kleinen Halter installieren, um genug Platz für meine Stromversorgung zu haben. Das Netzteil liegt dabei nicht auf dem Boden der Maschine auf - selbst wenn sich dort Wasser sammelt, sollte das Netzteil trocken bleiben:

Die Versorgungsspannung für das Netzteil greife ich direkt hinter dem Hauptschalter der Silvia ab:

Die Kabelschuhe habe ich nach dem Foto nochmal separat isoliert. Die Lochrasterplatine wird mit Distanzhülsen am Träger der Maschine befestigt:

Unter der Platine ist nun auch das Netzteil installiert. Die weisse Folie hinter der Platine ist Overheadfolie, welche eine Lücke in der Rückwand wasserdicht verschliesst. Das Solid State Relay (SSR) findet seinen Platz auf der anderen Seite der Trennwand, ähnlich wie bei den Auber-PIDs:

Es ist wie das Netzteil mit Silikonkabeln sowohl mit der Kesselheizung als auch mit dem Mikrocontroller verbunden. Die Anschlüsse sind so gewählt, dass das SSR den 100°C-Thermostaten ersetzt. Für Dampf etc. wird also nach wie vor der andere Thermostat benutzt. Auch der Sicherheitsthermostat am Kessel behält seine Funktion.

Abschliessend noch ein Foto von der Seite: Alles passt unter die Abdeckung für den Wassertank. Sollte also hier einmal Wasser von oben eindringen, so sind alle Komponenten davor geschützt.

Der Lohn der Mühe

Nach diversen kleineren Softwareanpassungen läuft das System nun. Allerdings ist der PID-Regler noch nicht kallibriert - im Moment sind die I- und D-Komponenten ausgeschaltet. Wie vorher auch habe ich das Heizverhalten über den Temperatursensor aufgezeichnet und ausgewertet. Da nun der Temperatursensor am PID hängt, muss die Aufzeichnung direkt aus den Logausgaben des PIDs erfolgen. Dazu zunächst einmal die Konfiguration des seriellen Devices prüfen:

 $ stty -f /dev/cu.usbserial-A600e1dh 
 speed 9600 baud;
 lflags: -icanon -isig -iexten -echo
 iflags: -icrnl -ixon -ixany -imaxbel -brkint
 oflags: -opost -onlcr -oxtabs
 cflags: cs8 -parenb

Wenn alles passt kann die Aufnahme gestartet werden:

 $ cat /dev/cu.usbserial-A600e1dh | tee run1.txt

Dort zeigt sich jedoch nur das Menü, welches der PID normalerweise über die serielle Konsole ausgibt. Um automatische Updates zu erhalten, muss ein "u" an den PID gesandt werden:

 $ echo "u\n" > /dev/cu.usbserial-A600e1dh

Der Temperaturverlauf nach dem Aufheizen hat schon eine ganz andere Form:

Der Sollwert liegt bei 104°C. Wenn Silvia aufgeheizt ist, wird die Temperatur in einem Korridor zwischen 103°C und 105.5°C gehalten — entspricht einer Hysterese von 2.5°C. Verglichen mit der alten Hysterese von 22°C wesentlich besser, vor allem, wenn man in Betracht zieht, das hier nur ein P-Regler arbeitet. Das macht sich leider bemerkbar, wenn kaltes Wasser in den Kessel einströmt. Testweise habe ich die Temperatur im Siebträger gemessen:

Jeweils bei den vertikalen Markierungen habe ich einen Bezug simuliert. Die gute Nachricht: Bei allen Bezügen liegt die Temperatur bei 96°C, d.h. die korrekte Temperatur liegt an. Die schlechte Nachricht: Die Temperatur im Kessel sinkt stark ab. Ausserdem überschwingt die Temperatur im Anschluss auch relativ stark. Diese Phänomene sollten jedoch durch einen vollen PID-Regler abgemildert werden. Die Temperaturmessung im Siebträger macht ein Type K-Thermocouple, angeschlossen an ein Multimeter:

Probleme

Noch ist das Projekt nicht abgeschlossen, denn es gibt noch viel zu tun:

  • Der PID-Algorithmus braucht Feintuning. Die Autotuning-Routine funktioniert so nicht, hier gibt es noch etwas Arbeit. Dann gehören die Überschwinger aber hoffentlich der Vergangenheit an.
  • Der Controller resettet sich manchmal nach dem Bezug. Ich gehe davon aus, dass durch das Abschalten der Pumpe und des Magnetventils ein paar Störungen den Reset auslösen. Mehr Kondensatoren in der Spannungsversorgung sollten helfen.
  • Das USB-Kabel muss verschwinden und wird durch eine Neutrik USB-Buchse nach aussen geführt.
  • Ich mag den Arduino-Code nicht. Hier steht noch ein Rewrite in puren, AVR-GCC-kompatiblen Code an.
  • Ein anderes Userinterface als mein Laptop. Der steht meistens nicht neben der Kaffeemaschine. Ausserdem soll die Bedienung die Optik der Silvia nicht zerstören.

Mein momentaner Zwischenstand liegt auch bei github im ChaosCoffeeControl-Repository. Stay tuned.

Comments


Mathias Dalheimer

Yours truly.

likes distributed & embedded systems

GPG key: B6501625
fingerprint: E7BA B68E A2D3 9B6A ECEF 4DE4 823E 0DBE B650 1625
github | twitter | flickr