Elektronik_Header_3

 

Quickmill Saver

Überwachung für Kaffee-Vollautomat Quickmill 5000A

Quickmill 5000A

Der Quickmill - 5000A Kaffee-Vollautomat hat leider keine Überwachung für zu wenig Wasser oder zu vollen Kaffeesatzbehälter. In Folge passiert es häufiger, dass entweder die Tasse nicht voll wird, weil die Durchflussüberwachung wegen zu wenig Wasser den Brühvorgang stoppt - dass dabei die Pumpe hässliche Geräusche von sich gibt, weil sie auf Block geht, kommt nervend hinzu - oder der Kaffeesatz staut sich im Innern des Technikraums bis an dessen Oberkante, weil vergessen wurde, den Satzbehälter rechtzeitig zu leeren. In diesem Fall ist eine Komplettreinigung angesagt, denn die Mechanik der Maschine lässt sich von solchen Kleinigkeiten nicht irritieren und stopft den ausgebrühten Kaffeesatz in alle erreichbaren Löcher und Zwischenräume.

Entschuldigend muss ich erklären, dass unsere Maschine in einer dunklen Ecke steht und man schon sehr genau hinsehen muss, um die Füllstände zu erkennen - die dunkelgraue Tönung der Behälter ist dabei wenig hilfreich. Und mal ehrlich: Genaues Hinsehen auf der dringenden Suche nach Kaffee... das passt irgendwie nicht zusammen ;-)

Folglich muss diese Überwachung zusätzlich eingebaut werden.

Im Bild oben sieht man oberhalb des “Professional” Schriftzuges das neue Display. Ich habe die “Gelb-Blau” Version verwendet, die Kopfzeile ist jeweils in gelber Schrift dargestellt, der Rest der Inhalte ist Blau. Das sieht recht cool aus, die Version in einfach Blau oder Weiß funktioniert aber genauso.

Den Ausschnitt für das Display habe ich mit der CNC-Fräse erstellt. Der Deckel wurde dabei in einer gefrästen Führung fixiert und der vordere, sichtbare Rand des Ausschnitts wurde mit einer Fase in mehreren feinen Stufen versehen.

Ausschnitt für OLED-Display

In der starken Vergrößerung und mit Blitz fotografiert sieht der Ausschnitt viel schlimmer aus als im Original. Ehrlich! Und wir erinnern uns - Dunkle Ecke... :-)

Das OLED-Display mit 0,96 Zoll Diagonale und I²C-Anschluss wird von einem Arduino Nano V3 angesteuert und visualisiert sowohl den Wasserstand als auch den Füllgrad des Satzbehälters.

Optional und per Menü ein-/ausschaltbar wird während des Brühvorgangs eine stilisierte Tasse gezeigt, die sich langsam füllt. Die Zeit von leer bis voll ist parametrierbar und läuft frei, also rein zeitgesteuert, parallel zum Füllvorgang (nicht von der Hardware geführt).

Im Bild unten die Innenansicht des Deckels:

Display und Sensor-Platine

Der weiße Rahmen für das Display ist aus PVC-Abschnitten erstellt und mit Kunststoffkleber am Deckel befestigt. Das Display wird von oben eingeschoben und ist somit austauschbar, sollte es mal kaputt gehen. Immerhin sitzt es an dieser Stelle nur ein paar Zentimeter von der Heizpatrone der Maschine entfernt und ich weiß nicht, welche Temperaturen dem OLED-Display anfangen zuzusetzen.

Die vier kupferfarbenen, um das Display herum angeordneten Flächen sind die vier Sensoren, deren Zustand (aktiviert oder nicht) vom Controller über I²C an den Arduino übermittelt wird. Das Display wird ebenfalls über I²C angesteuert, die graue Leitung im Vordergrund führt den Bus und die Versorgungsspannung zu.

Die Ansteuerung des OLED-Display erfolgt über die von Adafruit zur Verfügung gestellte Library (Text und Grafik).


Ursprünglich wollte ich die Füllstände der beiden zu überwachenden Behälter mit Ultraschallsensoren erfassen. Da aber die Gefahr besteht, dass Ultraschallsensoren in der feuchten Umgebung oberhalb des Wasser- und des Satzbehälters vergammeln, habe ich von der Idee Abstand genommen. Die Tatsache, dass ich für die Sensoren relativ große Löcher/Ausschnitte in das doch recht dicke Blech des Gehäuses hätte zaubern müssen, hat ebenfalls bei der Entscheidung gegen diese Version geholfen.

Stattdessen habe ich einen Tassenzähler implementiert, der jede gezapfte Tasse zählt. Nach einer empirisch zu ermittelnden Anzahl Tassen wird davon ausgegangen, dass der Wasserbehälter nachzufüllen ist. Dasselbe Vorgehen ist für den Satzbehälter anzuwenden, der bei Erreichen des Grenzwertes geleert werden muss. Beide Stati werden in großer Schrift anstelle der Füllstände angezeigt, gegebenenfalls nacheinander, wenn beide Ereignisse gleichzeitig eintreffen.

Diese Zähler müssen im EEPROM geführt werden, da der Kaffeeautomat im ausgeschalteten Zustand komplett stromlos ist.

Das EEPROM im AtMega hat 100000 zugesicherte Schreibzyklen, das dürfte die zu erwartende Restlaufzeit des Kaffeeautomaten weit überschreiten, eine Strategie zur Verteilung der Schreibzyklen auf die Speicherzellen erübrigt sich also.

Anhaltspunkt für diese Annahme: In den ersten 15 Jahren wurden rund 5000 Tassen gezapft (hier existiert eine gewisse Unsicherheit, weil ich einmal glaubte beobachtet zu haben, dass der eingebaute mechanische Tassenzähler längere Zeit nicht verändert wurde. Bei der nächsten Inspektion habe ich das angesprochen und möglicherweise wurde der Zähler getauscht. Es können also auch ein- oder zweitausend Tassen mehr gewesen sein). Der Tassenzähler im Programm ist unsigned int (65535) und reicht somit noch ca. 50 bis100 Jahre...

Falls die verwendeten EEPROM-Zellen vorher den Geist aufgeben, kann

#define EESTARTADRESSE 1000    // Startadresse fuer die Speicherung der Tassenzahlen im EEPROM

im Programm geändert werden, die Zähler laufen dann in einem anderen Bereich des EEPROM. Nach der Änderung werden sinnvolle Defaults gesetzt. Danach sind die korrekten Einstellungen über das Menü neu zu setzen.


Um zu erkennen wenn einer der Behälter "bedient" wird, ist unter jedem Behälter ein kleiner Magnet eingeklebt, der jeweils einen Halleffekt-Sensor vom Typ "A3144" betätigt, der den zugehörigen Zähler wieder rücksetzt. Die Magnete sitzen jeweils am hinteren Ende in der rechten Ecke (von unten betrachtet).

Hier die Unterseite des Satzbehälters:

Satzbehälter mit Magnet

Hier der Wasserbehälter von unten:

Wasserbehälter mit Magnet

Der unterschiedliche Abstand der Magnete vom Rand ergibt sich aus der möglichen Platzierung der Halleffekt-Sensoren unterhalb der Bodenplatte der Maschine. Die Verstrebungen schränken die Platzierung etwas ein - im Bild rechts ist vorne.

Bodenplatte von unten mit Hallsensoren

Der Sensor für den Satzbehälter (der Untere im Bild) ist hier noch nicht befestigt.

Um die Leitungen unterhalb der Bodenplatte verlegen zu können, musste ich Löcher in die Stege bohren, groß genug die Halleffekt-Sensoren passieren zu lassen. Die Länge der Leitungen habe ich großzügig bemessen, da bei der Konfektionierung (Stecker am einen Ende, Sensor am Anderen) die genaue Führung der Leitung noch unbekannt war. Die überschüssige Länge wird in Schlaufen in den Fächern unterhalb der Bodenplatte verstaut. Innerhalb der Maschine wollte ich zu lange Leitungen vermeiden um zufälligen Berührungen mit heißen Teilen aus dem Weg zu gehen.

Durch die unterschiedliche Anordnung (Wasserbehälter-Sensor weit hinten, Satzbehälter-Sensor weiter vorne) kann der Satzbehälter ein Stück bewegt werden, bevor der Sensor anspricht. Dadurch kann z.B. der Satz durch Rütteln am Behälter etwas verdichtet werden und es passen noch ein paar Tassen zusätzlich hinein ;-)

Beim Wasserbehälter bin ich davon ausgegangen, dass der nur dann bewegt wird, wenn er auch gefüllt werden muss, dessen Halleffekt-Sensor spricht also sehr früh an.

    Anekdote am Rand:
    Für eine Ersatzteilbestellung hätte ich den Typ der Maschine sowie das Baujahr angeben müssen, um Unsicherheiten auszuschließen. Leider habe ich weder außen an der Maschine noch im Innern (ja, ich habe extra das Gehäuse aufgeschraubt) das Typenschild gefunden, das diese Angaben zur Verfügung stellt. Die Bestellung hat dennoch fehlerfrei geklappt.

    Als ich die Maschine dann auf die Seite gelegt habe um die Sensoren zu montieren, habe ich das Typenschild überraschend entdeckt - in einer der Vertiefungen zwischen den Verstrebungen. Diese Anordnung verhindert zuverlässig, dass man das Typenschild sehen kann, wenn man die Maschine nur anhebt um auf der Unterseite danach zu suchen.

Hier die beiden original verbauten Halleffekt-Sensoren für obere und untere Endlage des Kolbens:

Original Hallsensoren für Endlagen

Der zusätzliche Sensor für die Erkennung eines Zapf-Vorgangs nutzt den bereits vorhandenen Magneten auf der Achse des Getriebes und wird über einen Adapter aus Kunststoff mit doppelseitig klebendem Spiegeltape an den beiden vorhandenen Sensoren für obere und untere Endlage befestigt.

2018-06-07_P1100075_resize

Der halbrunde Ausschnitt im Adapter vereinfacht die Positionierung, ist aber für die Funktion unnötig.


Der Arduino sitzt auf einer Adapterplatine mit den passenden Steckanschlüssen für die Sensoren, den I²C-Bus sowie die Spannungsversorgung.

QuickmillSaver-NanoAdapter

Das zugehörige Schaltbild ist recht übersichtlich geraten.

QuickmillSaver-NanoAdapter         (Click auf das Bild für größere Darstellung)

Die Unterlagen für den Arduino-Adapter im EAGLE 7.7 Format stelle ich zur Verfügung.


Die verschiedenen Zähler und Grenzwerte sind einstellbar, die Bedienung erfolgt mit Touchsensoren (z.B. https://www.ebay.de/itm/253381740902) durch die Tür des Technikraumes hindurch. Die Sensoren arbeiten durch 3 mm Kunststoff hindurch, so dass keine Löcher für die Bedienung im Gehäuse notwendig sind. Alternativ arbeitet das Programm auch mit einem Kreuztasten-Joystick. In beiden Fällen müsste für jeden Kanal eine eigene Leitung zum Arduino verdrahtet werden.

Um diesen Verdrahtungsaufwand klein zu halten bietet sich die Verwendung eines QTouch QT1070 von Atmel an. Dieses IC erlaubt die Ansteuerung von bis zu sieben Touchsensoren und übermittelt deren Zustände über I²C an den Microcontroller. Das verwendete Display wird ebenfalls über I²C angesteuert, das passt prima zusammen - nur zwei Leitungen für Anzeige und Sensoren zwischen Arduino und Frontplatte.

Im Programm ist diese Variante über #define USEQTOUCH aktiviert.

Für die Sensoren wird die Library "Seeed_QTouch" von Seeed Studio, https://github.com/Seeed-Studio/Seeed_QTouch verwendet.

Achtung!

    Der Returnwert von QTouch.isTouch() ist nicht 0 und 1, wie im Beispiel der Library beschrieben!

    Mit "if(QTouch.isTouch(QTRIGHT) == 1)" wird der Tastendruck nicht erkannt, mit "if(QTouch.isTouch(QTRIGHT))" hingegen schon.

    Die Abfrage auf nicht gedrückte Taste ist somit "if(!QTouch.isTouch(QTRIGHT))".

Der QT1070 sitzt auf der Sensorplatine, die weiter oben schon gezeigt wurde. Die Schaltung ist unspektakulär...

QTouch_QT1070_I2C         (Click auf das Bild für größere Darstellung)

...die Platine entsprechend einfach aufgebaut:

QTouch_QT1070_I2C

Die obere Reihe mit Lötpads dient dem Anschluss der Sensoren, verwendet werden hier nur die ersten vier Eingänge Key0..Key3. Key4 und Key5 bleiben frei, Key6 ist nicht auf ein Pad geführt. An der unteren Reihe Lötpads wird das Kabel zum Display angelötet, am Display ist ein Stecker vorgesehen, diese Verbindung ist also trennbar. Am Stecker kommen die Signale und die Spannungsversorgung vom Arduino an. Diese Verbindung steckbar ausgeführt erlaubt die einfache Demontage der Frontplatte, sollte das notwendig sein.

Die Unterlagen für den QTouch Adapter im EAGLE 7.7 Format stelle ich zur Verfügung.


Die Bedienung erfolgt über die vier rund um das Display angeordneten Touchsensoren:

  • Nicht im Menü - Rechts: Menü wird gestartet.
  • Im Menü - kurz Rechts: Parameter werden reihum zum Ändern aktiviert. Der jeweils änderbare Parameter wird invers dargestellt.
  • Im Menü - Hoch/Runter: der selektierte Parameter wird geändert (Wasser - mögliche Anzahl Tassen 12..18, Satz - mögliche Anzahl Tassen 25..35, bisher insgesamt gezapfte Tassen  im Bereich 5000..65535, Tassengrafik anzeigen (Ja/Nein), Zeit in Sekunden bis die Tasse voll ist (10 s..59 s), Zeit in Sekunden wie lange nach Füllung der Tasse die Dampf-Animation angezeigt wird (1 s..9 s).
  • Im Menü - lange Rechts, >1s:  Parameter Tassen (gesamt) wird aktiviert, Hoch/Runter ändert jetzt kontinuierlich.
    Das wird normalerweise nur einmal nach dem Einbau des Display benötigt um die Zähler aufeinander abzustimmen (der Tassenzähler im Arduino ist Kür, die Überwachung der Behälter funktioniert auch ohne diesen Gesamtzähler).
  • Im Menü - Links: Das Menü wird verlassen.

Alle Einstellungen im Menü werden sofort übernommen und persistent im EEPROM gespeichert.

Wird im Menü keine Taste bedient, erfolgt automatisch nach 15 Sekunden der Rücksprung in die Anzeigeebene.

Nach den Seiten mit den Parametern werden die Smileys präsentiert, hier kann man mit Hoch/Runter die vorhandenen Smileys durchblättern.

Mit einem weiteren Druck auf Rechts wird eine Seite aufgebaut, die die Sensordaten numerisch visualisiert. Einen Zusammenhang zwischen Nähe des Fingers zu einer der Sensorflächen und den dargestellten Zahlen kann ich beim besten Willen nicht erkennen, aber keine Sorge, das IC ist dazu offensichtlich in der Lage.
Diese Seite kann nur durch langen Druck auf den Rechts-Sensor verlassen werden, das Menü wird dabei ebenfalls verlassen, man landet wieder in der Anzeigeebene.

Die Sensoren sind empfindlich genug, so dass deren exakte Position nicht bekannt sein muss. Einfach die Frontplatte ober- oder unterhalb, bzw. links oder rechts des Display berühren reicht vollkommen.


Der Atmel hat noch genug Programmspeicher zur Darstellung einer Animation einer sich füllenden Tasse während des Zapfvorgangs sowie einen sporadisch für einige Sekunden anstelle der Balkengrafik auftauchenden Smiley ;-). Momentan sind zehn verschiedene Smileys vorhanden, die zufällig ausgewählt und angezeigt werden.

Der Randomgenerator (seed) des Arduino wird mit der Gesamt-Tassenzahl randomisiert, sollte also immer schön zufällig laufen. Wird zufällig derselbe Smiley zweimal hintereinander ausgewählt, wird der Smiley-Pointer um 1 inkrementiert (mit wrap around). Der Smiley kommt immer, die animierte Tasse kann im Menü Ein/Aus geschaltet werden.

Die verschiedenen Zeiten vor Bezug-Start, die Dauer des Bezugs sowie die Pause mit visualisiertem Dampf danach sind parametrierbar, so dass der optische Effekt auf die Hardware abgestimmt werden kann und die echte Tasse und die Tassengrafik synchron gefüllt werden.

Falls ein geneigter Nachbauer eine schönere Tasse oder einen weiteren Smiley entwirft, würde ich mich freuen, wenn er mir diese Grafik für den Eigengebrauch und ggf. zur Veröffentlichung hier auf meiner Seite zur Verfügung stellt. Danke!


Ich habe darauf geachtet, dass ich keine bereits vorhandenen Schalter oder Sensoren verwende um die Eingriffe in die Maschine minimal zu halten. Deshalb erfolgt die Synchronisierung zwischen Kaffee-Automat und Überwachungselektronik zeitgesteuert.

Lediglich das Startsignal für das Timing sowie die Zähler wird vom selben Magneten erzeugt, der auch den oberen und unteren Totpunkt des Kolbens überwacht. Der zugehörige Sensor ist aber wieder ein zusätzlich eingebauter Halleffekt-Sensor.

Die einzigen Verbindungen zur Original-Hardware sind Masse und der 5V Anschluss (siehe Pfeil) für die Versorgung des Arduino sowie des Display und der Sensoren:

5V Anschluss

Das Netzteil der Originalelektronik ist stark genug, die Überwachungsschaltung mit zu versorgen.

Die Adapterplatine wurde mit einem Sandwich aus zwei Lagen Spiegeltape und einer dünnen Kunststoffplatte an der Edelstahl-Umhüllung des Wasserbehälters angebracht:

Platzierung des Arduino

Das Sandwich zur Befestigung ist notwendig, da die Pins der verschiedenen Steckkontakte auf der Unterseite der Platine überstehen und ohne diese Maßnahme Kurzschlüsse verursacht hätten.

In der Rückwand ist an passender Stelle ein Loch gebohrt, groß genug für einen mini USB-B Stecker. So kann die Firmware des Arduino aktualisiert werden, ohne das Gehäuse öffnen zu müssen.

Spontan fällt mir als Grund für eine Aktualisierung ein weiterer Zähler für die Überwachung des Bohnenbehälters ein ;-)


Das verdrillte Kabel führt die beiden I²C-Signale und die Versorgungsspannung zur Sensorplatine hinter der Frontplatte. Zwei der drei dreiadrigen Leitungen für die Sensoren sind hier ebenfalls zu erkennen.

Anschlüsse am Arduino

Die verdrillte Leitung wird so im Gehäuse verlegt, dass sie keine heißen Teile berühren kann. Im Bereich des Netzschalters und der Temperaturschalter an der Heizpatrone ist sie zusätzlich durch eine Kunststoffumhüllung (grüner Plastikschlauch im Bild unten) geschützt.

Hinweis:

    Die vier Leitungen (I²C und Spannungsversorgung) müssen geschirmt oder eben verdrillt  bzw. geflochten werden, damit die EMV-Störungen beim Schalten der verschiedenen Relais und Temperaturschalter in der Maschine keine Probleme verursachen. Eine vorher verwendete vieradrige Flachbandleitung hat nur bis zum ersten Schaltvorgang der Pumpe funktioniert.

    Den von Computerflachbandkabeln bekannten Trick, jede zweite Ader mit Masse zu belegen, habe ich nicht getestet, könnte aber auch funktionieren. Dafür müsste dann aber das Layout der beiden Platinen angepasst werden und das Kabel wäre mit 9 Adern breiter und dadurch insgesamt schlechter zu verlegen.

Hier die Durchführung aus dem Innenraum in den Bereich hinter der Frontplatte:

Durchbruch zur Frontplatte


Die Sourcen für den Arduino stelle ich als Download zur Verfügung, sie sind ausführlich kommentiert, so dass eigene Ideen leicht selbst eingebracht werden können :-)

Die ZIP-Datei enthält neben der INO-Datei noch alle im Programm verwendeten Bitmaps (Smileys, Kaffeetasse, Dampffahnen).

Viel Spaß beim Nachbau und mit der deutlich aufgewerteten Quickmill 5000A!

 


Besucher seit
25.11.2000

>