Da der Satzbehälter der Quickmill 5000 recht groß ist, wird er erst als voll gemeldet, wenn ca. 34 Tassen gezapft wurden. Das dauert in unserem Haushalt geraume Zeit, so dass im Sommer durchaus die Gefahr besteht, dass der Satz im Behälter anfängt zu schimmeln. Der Schimmel sieht mit seiner hellrosa Farbe zwar ganz nett aus, ich möchte ihn aber trotzdem nicht in meiner Kaffeemaschine haben ;)
Nun könnte man natürlich den Zähler für den Satzbehälter kleiner einstellen und ihn früher leeren, aber das ist Kindergarten. Viel cooler ist der Einbau eines Lüfters, der die Feuchtigkeit aus dem Satzbehälter nach draußen bläst, den letzten Satzpuck somit trocknet und Schimmelbildung unterbindet (Näheres dazu).
Damit das erfolgversprechend funktionieren kann, muss der Lüfter wohl länger laufen als vorhandene Timer im Code erlauben, es muss also ein weiterer Timer vorgesehen werden. Das bedingt die Eliminierung von ein paar der vorhandenen Smileys, denn der Codebereich des Arduino ist so gut wie ausgereizt und ich möchte die Laufzeit natürlich im Menü einstellbar implementieren. Dazu später mehr...
Viel größer darf der Lüfter nicht sein, sonst spukt ihm die Kaffeemaschine den Satz auf den Kopf.
Im Netz findet man mengenweise Angebote für sehr ähnlich aussehende Lüfter, teilweise deutlich preiswerter, aber leider immer ohne Angabe der Abmessungen.
An einem Beispiel konnte ich die Abmessungen über Umwege herausfinden. Der angebotene Lüfter gilt als “Ersatz CPU Lüfter für NUC8i7BEH” und andere Typen dieser Mini-PC Motherboards. Auf der Homepage von Intel findet man STEP Dateien für diesen Typ von Motherboard und mit FreeCAD kann man in der 3D-Darstellung Maße abnehmen: 8 cm Kantenlänge, also viel zu groß.
Hier noch ein Blick auf den Spalt mit eingesetztem Satzbehälter. Passt wie vorgesehen :)
Die Anschlussleitungen werden in einem Schlauch in den Technikraum der Maschine geführt und an strategischen Stellen mit Kabelbindern fixiert, so dass sie nicht ins offen laufende Getriebe der Maschine geraten können.
Mein erster Ansatz war, den Lüfter mit einem FET einschaltbar zu machen und die Versorgungsspannung vom vorhandenen Netzteil liefern zu lassen. Leider erwies sich das Netzteil der Quickmill als zu schwachbrüstig für diesen Weg. Sobald der Lüfter angelaufen ist, hat sich der Controller der Kaffeemaschine rückgesetzt und alles blieb stehen - kein Kaffee :( Zum Glück hatte ich die Option implementiert, den Lüfter nicht einzuschalten, weiterer Kaffeebezug ohne Lüfter war also erst einmal möglich.
Plan B ist der Einsatz eines eigenen Netzteils für den Arduino und den Lüfter. Mit einer kleinen Relais-Zusatzschaltung mit Selbsthaltung kann so auch ein Nachlaufen des Lüfters nach Abschalten der Kaffeemaschine realisiert werden. Der Arduino steuert dann nicht nur den Lüfter, sondern schaltet sich nach Ablauf der Lüfterlaufzeit gleich selbst ab, sollte in der Zwischenzeit die Maschine mit dem Hauptschalter ausgeschaltet worden sein. Ist die Kaffeemaschine noch eingeschaltet, geht nach Ablauf der Laufzeit natürlich nur der Lüfter aus.
Achtung!
Die nachfolgend beschriebene Schaltung arbeitet mit Netzspannung. Bei Missachtung
von einschlägigen Vorschriften und Sicherheitsmaßnahmen kann Netzspannung tödlich sein. Wer sich also mit dem Umgang mit Netzspannung nicht auskennt, sollte
vom Nachbau absehen oder sich zumindest beim Aufbau des Netzspannung führenden Teils der Schaltung sowie bei der Inbetriebnahme von jemandem helfen lassen, der die passende Ausbildung sein Eigen nennt.
Prinzipiell: Bei allen Arbeiten im Innern der Maschine den Netzstecker ziehen!
Im Prinzip läuft es darauf hinaus, das zusätzliche 5 V-Netzteil für den Arduino und den Lüfter über die Zusatzschaltung mit Relais direkt an den Netzeingang der Kaffeemaschine anzuschließen, also an der Lüsterklemme, wo das Netzkabel in die Maschine kommt.
Das Schaltbild der Zusatzschaltung birgt keine großen Geheimnisse.
(Click auf das Bild für größere Darstellung)
Die Dreifachklemme links oben im Schaltbild ist der Anschluss für den Netz-Eingang direkt von der oben erwähnten Lüsterklemme. Da wir hier direkt am Netz arbeiten, ist eine Sicherung vorgesehen. Das Relais schaltet die Netzspannung zweipolig, die Ansteuerung des Relais erfolgt zum einen über das in der Maschine eingebaute Netzteil und zum anderen über einen Ausgang des Arduino. Das Relais wurde so gewählt, dass die Ansprechleistung mit 80 mW bei 5 V sicher im Rahmen eines Arduino Ausgangs liegt, es ist also hierfür keine Leistungsstufe in Form eines FET oder Transistors notwendig.
Der geschaltete Ausgang der Platine geht direkt zum Netzeingang des zusätzlichen Netzteils, das wiederum seine 5 V an den Eingang Vin des Arduino liefert.
Das Layout der Schaltung:
(Click auf das Bild für größere Darstellung)
Die beiden Schaltspannungen für das Relais sind über Schottky-Dioden entkoppelt, hier können wahlweise TH oder SMD Typen eingesetzt werden, beide Pads sind entflochten. Der Anschluss PE wird nicht durchgeschleift, er dient nur zur Trennung des Niedervoltteils vom Netzspannung führenden Teil der Schaltung. Eine Diode 1N4148 parallel zur Relaisspule unterdrückt Spannungsspitzen beim Abschalten des Relais.
Die im Layout rot angedeutete Leitung muss mit einem Draht ausgeführt werden, weil sonst die Abstände zwischen den Leitungen zu gering ausgefallen wären.
Da die Platine auf der CNC-Fräse erstellt wird, sind zwei G-Code Dateien zur Freistellung der Leiterbahnen notwendig. Die Erste nutzt einen Gravierstichel mit 0,1 mm breiter Spitze für die feinen Strukturen.
Die zweite Datei verwendet einen zylindrischen 1,4 mm diamantverzahnten Fräser um alle Reste von Kupfer zwischen den Leiterbahnen zu entfernen.
Die Überlagerung beider Bahnkurven zur Verdeutlichung. Drei statt fünf Runden mit dem 1,4 mm Fräser hätten wahrscheinlich genügt um alle Kupferflächen zwischen den Leiterbahnen zu entfernen.
Das funktioniert nicht zu 100%, es bleiben winzige Reste stehen, die z.B. mit einem Skalpell entfernt werden müssen.
Hinweis
Normalerweise platziere ich Texte auf der Kupferseite im Milling Layer. Auf diese Weise
werden die Zeichen mit einer Fräsbahn und damit sehr fein ausgeführt. Im gegebenen Fall muss ich die Texte aber als Kontur im Bottom Layer platzieren, weil sonst der 1,4
mm Fräser das Kupfer um die Zeichen komplett entfernt hätte und die Texte nicht mehr lesbar wären.
In Natura stellt sich die Schaltung so dar:
Einige Reste der Kupferfläche habe ich an unkritischen Stellen stehen lassen. Die Beschriftung der Anschlüsse ist sehr dünn ausgefallen, in der unten verlinkten Version sind Buchstaben mit dickeren Linien ausgeführt.
Um ein zufälliges Berühren von Netzspannung führenden Teilen der Schaltung zu verhindern, erhält die Schaltung ein Gehäuse aus dem 3D-Drucker.
Im Boden des Gehäuses ist ein Befestigungsloch für eine Senkkopfschraube so platziert, dass von der Schraube keine Netzspannung führenden Leitungen auf der Platine berührt werden können, sollte sie sich unbeabsichtigt im Betrieb lösen.
Die Platine sitzt auf kleinen Abstandshaltern in den Ecken, der Deckel rastet mit den feinen Bahnen vom 3D-Druck im Gehäuse ein und sitzt somit relativ fest. Die Ausschnitte sind so festgelegt, dass Berührschutz gegenüber den Netzspannung führenden Teilen gegeben ist.
Die Designunterlagen für die Platine im Format EAGLE 7 sowie für das Gehäuse im Format Designspark mechanical V6 und als STL-Dateien für den 3D-Druck stelle ich Interessierten zur Verfügung.
Update
Das im Bild oben gezeigte Relais wird zwar mit einer Stromtragfähigkeit von 2 A und
einer Spannungsfestigkeit von 250 V AC beworben (auch im Datenblatt), aber im wirklichen Leben ist davon nicht viel übrig geblieben. Das Zusatznetzteil wurde genau
vier Mal ein- und ausgeschaltet, danach wurde das Netzteil nicht mehr abgeschaltet. Meine Vermutung, dass die Kontakte beim Schalten verschweißt wurden, hat sich nach destruktivem Öffnen des Relais bestätigt.
Rot markiert die zerstörten Kontakte, die grün Markierten ohne Abnutzungsspuren. Die Kontaktfedern habe ich zur besseren Sicht auf die Kontaktstellen nach oben gebogen.
Das führt insgesamt zu Plan C. Das Relais wird unter Aufgabe der zweipoligen Netztrennung durch ein 2A Solid State Relais (SSR) ersetzt, der Rest der Schaltung bleibt mehr oder weniger unverändert.
(Click auf das Bild für größere Darstellung)
Das Layout ist natürlich aufgrund des anderen Formfaktors des SSR in wesentlichen Teilen neu, die Lage der Anschlüsse und der restlichen Bauteile bleibt aber gleich.
Und auch das Gehäuse musste sich eine Runderneuerung gefallen lassen, denn das SSR ist fast doppelt so hoch wie das mechanische Relais. Da ich beim Anschließen der Leitungen in der Kaffeemaschine leichte Probleme hatte, weil alles etwas beengt ist, habe ich den Leerraum unterhalb der Platine ebenfalls ca. 1 cm vergrößert, so dass die Anschlüsse jetzt prima auch im eingebauten Zustand zu erreichen sind.
Die Designfiles für das Gehäuse biete ich dem geneigten Nachbauer zum Download an.
Damit der Lüfter und das Relais vom Arduino angesteuert werden, braucht es natürlich auch eine passende Version der Quickmill Saver Firmware sowie einen neuen Adapter, der die zusätzlichen Anschlüsse bereit stellt.
Das erweiterte Schaltbild...
(Click auf das Bild für größere Darstellung)
... und das zugehörige Layout
Die beiden neuen Anschlüsse für Relais und Lüfter werden über Pin 11 und Pin 12 angesteuert. Beim Lüfter ist die Zuordnung klar, zwei Leitungen an zwei Pins, Plus 5V liegt außen. Die Steuerspannung für das Relais muss an den beiden äußeren Pins des dreipoligen Steckers abgenommen werden. Hier liegt, wie bei den Sensoranschlüssen, GND auf dem zum Platinenrand orientierten Pin.
Alle SMD Bauteile, der FET sowie ein paar Kondensatoren und Widerstände, sitzen auf der Unterseite, der Rest sind Stecker und Buchsen, die von oben bestückt werden.
Auch die Unterlagen für den Adapter biete ich zum Download an, Format ist wieder EAGLE V7.
Jetzt noch die dazu passende Firmware in Version V2.11 und fertig ist die Laube :)
Die Laufzeit des Lüfters nach Bezug einer Tasse kann im Menü eingestellt werden. Der Parameter liegt zwischen 0 und 30 Minuten. Bei 0 (Null) wird der Lüfter nicht eingeschaltet.
Update
Auch bei der Firmware gibt es noch eine weitere Version V13, denn beim Umstieg auf
einen anderen Rechner musste ich alle Arduino Libraries neu installieren. In Folge ist das Compilat um Einiges gewachsen, passte nicht mehr ins Flash des Arduino Nano. Auch
durch beherztes Downgrade aller Libs auf die Versionen wie auf dem ursprünglichen Rechner ist es mir nicht gelungen, die gleiche Firmwaregröße zu erhalten. In letzter
Konsequenz habe ich ein paar Optimierungen vorgenommen, um zu vermeiden, weitere Smileys opfern zu müssen.
Alle Abfragen auf millis() wurden auf die ohnehin zu bevorzugende Variante mit Immunität gegen Zählerüberlauf umgestellt. Aus
if (millis() > (start + 150)) {...};
wird
if ((millis() - start) > 150) {...};
Das ergab bei 8 Vorkommen insgesamt eine Einsparung von ca. 30 Byte.
Zusätzlich werden die beiden Ausgänge für den Lüfter und das Netzteil nicht mehr mit zwei Aufrufen digitalWrite() sondern per direkter Port-Manipulation jetzt gleichzeitig und 22 Byte sparend geschaltet. Nach diesen Maßnahmen passt der Code auch mit den aktuellen Libs und compiliert mit der Arduino IDE V2.0 wieder ins Flash des Arduino Nano.
Hinweis: Arduino IDE 1.8 und IDE 2.0 erzeugen übrigens gleich große Compilate.
Update
Ich habe der Firmware V14 noch einen Testmode für den Lüfter spendiert, quick&dirty
durch Einstellung der Lüfterlaufzeit auf 31 Minuten. Bereits im Menü läuft der Lüfter dann an. Nicht vergessen, die Laufzeit wieder auf maximal 30 Minuten zurück zu stellen,
sonst läuft der Lüfter bis nach der nächsten Tasse Kaffee.
Update
Der Lüfter läuft, eingebaut in die Kaffeemaschine, doch recht laut. Da die Lüfterdrehzahl
per PWM eingestellt werden kann, muss sich sowohl die Firmware als auch das Layout des Arduino Adapters eine weitere Modifikation gefallen lassen.
Um die Erzeugung der PWM durch die Hardware des AtMega328 nutzen zu können, muss der Lüfter auf Pin 11 angeschlossen werden, der Ausgang für das Relais zur Nachlaufsteuerung wandert auf Pin 10. Pin 11 wird von Timer2 gesteuert, die PWM Frequenz wird also per Patch von den Arduino typischen 480 Hz bei den 8-Bit Timern auf 62 kHz umgestellt. Das ist die einzig sinnvolle Alternative, denn der Prescaler für Timer2 kann entweder auf 1/1 oder 1/8 (und weitere, noch größere Teiler) eingestellt werden. Bei 1/8 läuft die PWM mit 8 kHz, was ein deutliches Pfeifen des Lüfters erzeugt.
Der notwendige Codeausschnitt für die Frequenzerhöhung der PWM auf Timer2:
#ifdef PWMSPEEDUP // PWM Frequenz auf 64 kHz erhöhen um Pfeifen des Lüfters zu unterbinden
// PWM mit Timer2 zu Fuss programmieren, Register initialisieren, PWM auf Pin P11
// OCR2C bestimmt zusammen mit dem Prescaler die PWM-Frequenz. OCR2A enthält den
Vergleichswert für Output Compare Match,
// bei Erreichen des Compare-Wertes toggelt Pin P11
TCCR2A = 0; // alle Bits loeschen...
TCCR2B = 0; // alle Bits loeschen... dann einzeln setzen soweit notwendig
bitSet(TCCR2A, WGM20); // // Mode 3, Fast PWM
bitSet(TCCR2A, WGM21); //
//bitSet(TCCR2B, WGM22); //
//bitSet(TCCR2A, COM2A0); // // Toggle OC2A (Pin 11) on Compare Match
bitSet(TCCR2A, COM2A1); // //
// Prescaler fuer Timer2
// CS20 = 1 \ //
// CS21 = 0 \ PCK/1 // // prescaling
// CS22 = 0 / //
bitSet(TCCR2B, CS20); // // Clk -> 62 kHz PWM Frequenz
#endif
Der errechnete Wert PWMVal für das gewünschte Puls-Pausenverhältnis wird dann einfach in das Register OCR2A geschrieben:
OCR2A = PWMval;
Abgeschaltet wird der Lüfter mit
OCR2A = 0;
Im Menü wurde ein weiterer Parameter Lüfterdrehzahl als Prozentwert einstellbar gemacht. Diese Erweiterung bedingte erneut den Wegfall eines Smileys, inzwischen sind nur noch 4 Smileys im Code vorhanden :(
Soweit die Änderungen an der Firmware, die jetzt in Version V15 zum Download bereit steht.
Die aktualisierte Schaltung des Adapters:
(Click auf das Bild für größere Darstellung)
Das zugehörige Layout:
Da der Lüfter jetzt Drehzahl gesteuert betrieben wird, ist die Schaltstufe hinfällig, der FET und der zugehörige Widerstand werden nicht bestückt. Alle anderen Anschlüsse sind unverändert.
Die Unterlagen für den Adapter stelle ich im Format EAGLE V7 zur Verfügung.
Resümee nach einigen Wochen des Betriebs mit Lüfter:
Schimmelbildung tritt immer noch auf, der Lüfter schafft es also nicht, den Satz komplett zu trocknen. Daraus leite ich die unbewiesene Behauptung ab, dass durch den Lüfter ggf. Schimmelsporen im Raum verteilt werden, die aus gesundheitlichen Gründen besser im Satzbehälter blieben.
Der Lüfter wird also fürderhin ausgeschaltet bleiben, stattdessen wird die Weicheilösung gewählt und der Satzbehälter in kleineren Zeitabschnitten geleert werden, z.B. zusammen mit neuem Wasser oder wenigstens bei jeder zweiten Wasserfüllung.
Fast alles bedacht... aber eben doch nur fast.
Bei der ursprünglichen Festlegung der Grenzwerte für die Parameter des Quickmill Saver
habe ich unter anderem den niedrigsten Wert für den Hinweis, den Satzbehälter zu leeren, auf 25 eingestellt. Diese Grenze muss nach unten erweitert werden um die neuen
Randbedingungen berücksichtigen zu können. Die neue Firmware hat die Version V16.