Funktionsweise:
Hinweis: Die Systemplatine im RFx000 basiert auf den AT Mega 2560, ist also ein Arduino Mikrokontroller.
Ein zweiter Arduino (z.B. Uno, Mega, oder auch viel kleiner; Kosten belaufen sich unter €25) wird eingesetzt, dessen Aufgabe es ist, alle GCode-Befehle an den Drucker durchzuschleifen und dabei auf alle Zeilen mit einem 'E' zu achten.
Der Maussensor ist an den Arduino angeschlossen und wird von diesem regelmäßig ausgelesen. Basierend auf die E-Werte und den Werten der Maus lässt sich eine genaue Überwachung des Filaments bewerkstelligen. Sogar beginnender Schlupf wäre praktisch ohne nennenswerte Verzögerung erkennbar.
(Extra für AtlonXP):
Was geschieht beim Auftreten eines Fehlers?
Entweder:
a) Ein Signal wird an den Drucker gesendet, worauf der Drucker ein Script ablaufen lässt, der den Druck pausiert, die Hot End Temperatur senkt, eine Meldung am Display ausgibt und vielleicht den Drucker piepsen lässt.
Oder
b) Da eigentlich alle GCode-Befehle durch den Arduino geschleust werden, wird es sehr einfach: also, die 'normalen' GCode-Befehle einfach nicht mehr weiter durchschleifen, stattdessen Hot End Temperatur senken, Meldung am Display ausgeben und vielleicht schön piepsen lassen.
Natürlich könnten diese Funktionen von einem Raspberry (für die Klipper-Fans) oder auf andere Weise durchgeführt werden.
Auch unsere Systemplatine könnte das übernehmen falls ausreichende freie Ein- und Ausgänge (Pins) vorhanden sind (das ist fraglich). Ebenso fraglich ist, ob genügend Speicherplatz vorhanden ist. Dieser scheint schon ziemlich ausgelastet zu sein.
Was vom zweiten Arduino, bzw. vom zusätzlichen Mikrokontroller genau gemacht werden muss:
Dass ein Arduino die meisten dieser Funktionen können muss, wurde mir erst später klar, als ich erkannte, dass ja die Systemplatine auf Arduino basiert. Daher muss der Empfang und das Senden von Strings (=GCode-Befehle, 'ok' & 'Resend') möglich sein, da das unser Drucker schon macht. Beim GCode-Befehl auf ein 'E' zu achten sollte auch möglich sein, schließlich reagiert der Drucker auf alle Befehle und wertet diese entsprechend aus.
Eine Maus können wir an unseren Drucker nicht anschließen, aber der Anschluss einer Maus und deren Auswertung durch einen Arduino scheint auch möglich zu sein: Hier
Link1,
Link2,
Link3 mit entsprechenden Beispielen. Die hauptsächliche Einschränkung bei der Maus scheint zu sein, dass hier nur das
PS/2 Protokoll unterstützt wird. PS/2-Mäuse sind eine stark bedrohte, vom Aussterben bedrohte Rasse, aber es gibt einen einfachen Trick:
PS_2_Adapter.jpg
Ich weiß nicht ob
Alle USB Mäuse auch 'PS/2-kompatibel' sind. Müsste man ausprobieren. Schnurlose Mäuse werden höchstwahrscheinlich mit Arduino nicht klappen, bei Raspberry weiß ich es nicht.
Wenn ein eigener Arduino für die Filamentüberwachung eingesetzt wird, und beim Auftreten eines Fehlers die Variante 'b)' gewählt wurde, kann der Drucker selbst völlig 'dumm' bleiben und muss von der Überwachung gar nichts wissen. (Die meisten (oder alle?) externen Filamentüberwachungssysteme verwenden Methode 'a)' und müssen den Drucker, über eine eigene Leitung, vom Fehler informieren, damit der Drucker reagieren kann. Dieser Input muss in der Firmware deklariert werden und benötigt einen Pin (ebenso ist Firmware ändern & neu aufspielen nötig).
Ich schätze, ein 'Eichdurchlauf' wird nötig sein, um dem Arduino die Möglichkeit zu geben, die Mauswerte zu kalibrieren. Es müsste was recht einfaches sein, wo man eine vorher bestimmte, genaue Menge extrudiert. Da der Arduino jede GCode-Zeile abarbeitet, könnte man hierfür einen pseude-GCode-Befehl kreieren, der einen Kalibriervorgang 'auslöst'. Damit wären regelmäßige Kalibrierungen sehr leicht, falls das erwünscht wäre.
EDIT: Einer der Probleme, die ich sehe, ist der getrennte USB 'Ausgang', der vom zusätzlichen Arduino an den Drucker gehen muss.
Unsere Systemplatine verwendet für die Rückmeldungen an den Host ('ok', 'Resend') dasselbe USB Kabel, aus dem die GCode-Befehle ankommen. Das geht beim separaten Arduino nicht, da dieses Kabel an den Host geht, nicht an den Drucker. Mit einem separaten Arduino hätte ich keine Ahnung ob das, oder wie das zu bewerkstelligen ist. Ich nehme einfach an, das so was gehen müsste. Man muss im Prinzip einen zusätzlichen USB-Port 'basteln'. Und das könnte der springende Punkt sein!
Hoch die Masken! Hoch die Vakzine! Nieder mit dem Corona-Virus,
mjh11