home    Inhaltsverzeichnis
erste Version am 13.09.2018
letzte Änderung am 16.11.2018

Aufbau eines 3D-Druckers vom Typ Velleman K8200 - Seite 3


Ultimaker Cura 3.4.1

Heute habe ich nach einer Möglichkeit gesucht, den Slicher anzuweisen, die Position des Z-Lifts nicht immer an die selbe Stelle bzw. an eine definierte Seite des Druckobjekts zu legen.
Das bisher genutzte Cura 14.12.1 (das in den Repos von openSUSE-Leap 42.3 verfügbar ist) bietet dieses Feature nicht - Ultimaker Cura 3.4.1 hingegen schon.
Generell lässt sich bei der 3.4.1 sehr viel mehr konfigurieren. Daher hat es locker eine Stunde gebraucht, bis alle Settings soweit angepasst waren, dass ich einen ersten Druck wagen konnte/wollte .... als Bonus komme ich jetzt ohne das PostSlicher-Script aus.

Der neue Slicher erzeugt zwar G-Code mit längerer Druckzeit (z.B. 60 Minuten statt vorher 45 Minuten), dafür kommen mir die Ergebnisse sauberer und maßhaltiger vor. Bisher passten Außenradien immer sehr genau. Bei Innenradien musste ich jedoch 0.3mm (vom Radius!) abziehen, damit es final auch passte.
Bei ersten Tests mit dem neuen Slicher reichen jetzt bereits 0.2mm .... locker.
Wahrscheinlich liegt dieser Genauigkeits-Unterschied an irgend einem Slicher-Setting, dessen Defaultwert das bewirkt.


Wackelkontakt am Hotend-NTC

Gestern ist mir das Hotend weggeschmolzen. Bereits ein bis zwei Wochen zuvor hatte ich beobachtet, dass die Hotend-Temperatur sporadisch irre Sprünge macht. Ich war von einem Kabelbruch in den Leitungen zum NTC ausgegangen. Ärgerlicherweise habe ich nicht sofort die tatsächlich Ursache des Problems gesucht und behoben - sondern stattdessen lediglich das Kabel zurechtgebogen. Damit hat es vermeintlich wieder funktioniert.
Dann habe ich gestern ein Teil mit einem (mir neuen) Filament-Sample (Easy Wood Coconut) drucken wollen. Dessen Verarbeitungstemperatur war mit 200-240°C angegeben. Während des Drucks habe ich mit der Hotend-Temperatur gespielt, weil ich die ideale Druck-Temperatur noch nicht kannte.
Jedenfalls habe ich zeitweilig mit 240°C gedruckt, dann festgestellt, dass es dadurch nicht besser wird und bin wieder auf 210°C zurückgegangen.
Kurz danach wurde kein Filament mehr extrudiert.
Also .... Abbruch des Drucks .... Filament raus .... neues Filament rein .... geht nicht .... warten, bis das Hotend auf anfassbare 50°C abgekühlt war .... und Ausbau des Hotends.
Dabei habe ich dann erkannt, dass der Wackelkontakt nicht durch einen Kabelbruch hervorgerufen wurde. Vielmehr hatte sich die Lötverbindung Kabel-NTC an einer Seite gelöst.
Wahrscheinlich hat die (dadurch entstandene) instabile Temperatur-Regelung dazu geführt, dass das Hotend zeitweilig deutlich über 240°C erreicht hat. Und das wiederum hat dazu geführt, dass der Teil des Plastik-Zylinders zwischen Hotend und Extruder geschmolzen ist, der in das Hotend geschraubt war. Ich konnte es zwar ausbohren und das Innen-Gewinde wieder sauber-schneiden - aber nützt ja nix ohne einen neuen Plastik-Zylinder mit entsprechendem Außengewinde. Wie man auf dem folgenden Foto sieht, fehlt dem Plastik-Zylinder der Teil mit dem Gewinde:

Foto vom geschmolzenen Hotend

Kurzum: das Ding war nicht mehr zu retten.
Als Original-Ersatzteil soll das Hotend knapp 90€ kosten. Ein Witz!? Das wäre ja 1/3 des Gesamtpreises!
Und das dann für dieses grottig schlechte, retraktions-unfreundliche Hotend.... Das wollte ich ja eigentlich schon austauschen, als es noch funktioniert hat.

Hotends für 3mm-Filament sind echt rah gesäht. Amazon hatte nix Brauchbares. Weil ich aber mittlerweile diverse 3mm-Rollen habe, soll es wieder 3mm werden.

Bei roboter-bausatz.de wurde ich schließlich fündig und habe mir dieses Teil (ganz easy per Amazon-Pay) bestellt.
Mal schauen, wie ich das Ding an den Extruder gedengelt bekomme. Voraussichtlich werde ich dazu 3D-drucken müssen. Das Teil hier vielleicht.

Und weil ich ja derzeit nicht mehr 3D-drucken kann, habe ich mir gleich noch einen Anycubic I3 Mega bestellt :-)
Bei der Bestellung hieß es: "Zustellung: Donnerstag, 8 November" - nun soll er aber schon morgen (Dienstag) kommen.
Ich freue mich fast so, wie früher auf Weihnachten (oder alternativ: das Fest zur Winter-Sonnenwende).
Endlich nicht mehr eingeschränkt bei der Filament-Auswahl - wegen dieses exotischen Filament-Durchmessers von 2.85 bzw. 3.0mm.
Als zusätzlicher Goodie kommt die Ultrabase ab Werk mit. Hoffentlich sind die USB-Probleme mittlerweile gefixt - das Ding soll bei mir [final] natürlich auch über den Repetier-Server laufen.

Und natürlich klappt es mit der Lieferung nicht. Gestern meldete die Amazon-Sendungsverfolgung, dass das Paket um 05:25AM in Neumünster eingegangen wäre und zwischen 11:00 bis 13:00 Uhr zugestellt werden soll. Kam aber nix. Heute heißt es lapidar: "Wurde erwartet bis Dienstag, 6. November"....
Suche ich die Sendungsnummer heute unter https://nolp.dhl.de/nextt-online-public/search, kommt ein: "
Wir erwarten Ihre Sendungsdaten in Kürze....." !???
....als wäre das Paket in Neumünster verschütt gegangen.
Mein Anruf bei der DHL-Hotline war reine Zeitverschwendung. Die [vollkommen nutzlose] Aussage war: "befindet sich noch in der Zustellung". Na denn....da bin ich ja mal gespannt, wie das weiter geht.
Um 10:40 Uhr tat sich was. Nun heißt es auf der Amazon-Seite: "Sendung wird zugestellt" und bei DHL selbst: "Nächster Schritt: Die Sendung wird zur Zustellbasis transportiert". Immerhin! Vielleicht kommt das Paket dann ja heute doch noch.

Hier gibt es übrigends Infos für den Fall, dass der K8200 durch die möglicherweise veränderten Heiz- und Abkühlzeiten des neuen Hotends durcheinander kommen sollte.
Das neue Hotend wird mit einem 12V/40W-Heizelement geliefert, das vom K8200 hat 15V/33W.
Es gilt: P=U*I -> I=P/U. Also 40W/12V=3.3A zu 33W/15V=2.2A.
Dann noch R=U/I. Also 12V/3.3A=3.64Ω, 15V/2.2A=6.82Ω.
Au weia.... Entweder ich recycle das K8200-Heizelement (wenn es denn von den Abmessungen her passt), oder ich spendiere für das neue Heizelement einen weiteren MOSFET-Regler - nicht dass ich womöglich eine Endstufe auf dem Controller weggrille.
Außerdem stellt sich die Frage, wo ich den zusätzlichen Hotend-Lüfter anschließen soll. Das Board hat zumindest keinen offiziellen Anschluss dafür.
Ich könnte ihn parallel zum Hotend-Heater schalten. Dann würde er nicht mehr drehen, wenn gerade nicht aktiv geheizt wird.
Ebenso könnte ich ihn einfach an 12V anschließen. Dann würde er aber auch lärmen, wenn das Hotend [noch] gar nicht geheizt wird.
Die dritte Möglichkeit wäre, ihn parallel zum Druckobjekt-Lüfter zu schalten. Damit würde das Hotend aber nicht gekühlt werden, wenn die ersten zwei Layer gedruckt werden.
Oder an 12V mit einem Schalter dazwischen.
Die Luxus-Version wäre eine Mini-Schaltung mit ATtiny85, die den Lüfter genau dann drehen lässt, wenn ein Sensor am Hotend mehr als 30°C meldet.
Oder einfacher: immer dann, wenn das Hotend Strom bekommt, wird der Lüfter für mindestens eine Minute angesteuert. Dafür sollte dann sogar ein NE555 reichen. Ein RC-Glied + Transistor würde es wahrscheinlich auch tun - könnte beim Abschalten allerdings zu einem unerfreulichen Lüfter-Sound führen....

Vor etwa einer Stunde ist der Anycubic I3 Mega geliefert worden. Zur Zeit druckt er das [auf SD-Karte mitgelieferte] Eulen-Paar.
Zwar macht das Teil einen infernalischen Lärm (im Gegensatz zum K8200) - aber der Druck sieht bisher ganz gut aus.
Damit soll an dieser Stelle genug mit dem Anycubic sein. Er wird sicher recht bald eine eigene Projektseite bekommen.


Umrüstung auf ein J-Head Hotend

Gestern habe ich mir einen Adapter entworfen und (auf dem Anycubic I3 Mega) in PLA gedruckt, mit dem das J-Head Hotend am Extruder montiert werden kann.
Heute, beim ersten Test via Repetier-Server wurden direkt nach dem Einschalten zunächst 250°C, bald darauf sogar über 700°C gemeldet.
Offenbar ein Kurzschluss... Nach Ausbau des NTC hat das Multimeter korrekte 100KΩ angezeigt. Daher habe ich den unteren Heizblock abgeschraubt und am Schreibtisch weitergemacht. Da lässt es sich einfach besser arbeiten, als überkopf am Drucker.
Nach etwas rumgefriemel hatte ich den NTC stabil mit dem Heizblock verbunden und das Multimeter hat brav einen Wert um die 100KΩ gemeldet.
Dann kam wieder alles an den Drucker. Nachdem der Repetier-Server hochgefahren war, habe ich einen Test mit dem alten K8200-Heizelement durchgeführt.
Dieses Heizelement ist zwar etwas länger als das beim neuen Hotend mitgelieferte - aber der Durchmesser passt. Und die Aufheizzeit des Heaters war noch nie ein Problem für mich.....eine gefühlte Minute. Daher bleibt der zweite MOSFET erstmal in der Bastelkiste.
Auch musste ich keinen "PID-Autotune-Prozess" laufen lassen, um dem Controller die veränderten Heiz- und Abkühlzeiten des neuen Hotends mitzuteilen. Die einzige Änderung an den Software-Settings war die geänderte Nozzle in Cura (von 0.5mm auf 0.4mm).

Der Hotend-Lüfter ist erstmal direkt an 12V geklemmt, der Druckobjekt-Lüfter pustet nach hinten raus in die Luft (die 3D-gedruckte Düse passt nicht mehr zum neuen Hotend). Momentan wird ein #3DBenchy aus PETG bei 220°C/65°C gedruckt.
Bezüglich Filament-Fluss bei Travel-Moves bzw. Retraktion ist das neue Hotend eine wahre Freude :-)
Auch wird es kein Problem darstellen, dass ich den Adapter in PLA gedruckt habe. Zwar wird das Zeugs schon bei deutlich unter 100°C weich, das Hotend wird jedoch selbst im Kühlkörper-Bereich nur handwarm. Da oben, wo der Adapter sitzt, kommt nix mehr von der Temperatur des Hotends an.

Der nächste Druck wird eine neue Lüfter-Düse. ... Hat nicht gepasst. Daher jetzt die hier.
Mit Montage der Lüfter-Düse ist der K8200 nun wieder voll einsatzbereit - und besser als vorher :-)

Dann drucke ich doch gleich mal einen weinender Engel...als finalen Test der Umrüstung sozusagen.
Engel in PETG mit neuem Hotend
Sieht gut aus - aber nicht besser als die Engel vor der Umrüstung.

Ich bin ja mal gespannt, welchen den der beiden Drucker ich zukünftig häufiger nutzen werde.
Gegen den Anycubic spricht zunächst mal dessen grauenvoller Geräuschpegel. Auch kam mir das Einlegen des Filaments (bzw. zukünftig dessen Wechsel) beim Bowden-Extruder des Anycubic weit hakeliger vor, als beim Direct-Extruder des K8200. Natürlich kann das eben so gut daran liegen, dass es mir [noch] ungewohnt ist.
Für den Anycubic spricht die bessere Optik der Druckergebnisse in Z-Richtung - was wahrscheinlich an den zwei gedrehten Z-Spindeln liegt.


Eine Regelung für den Hotend-Lüfter

Nun braucht es noch eine Automatik für den Hotend-Lüfter. Momentan dreht der Lüfter, sobald der K8200 Strom hat - und das nervt echt deutlich.
Die Idee mit dem RC-Glied habe ich schnell wieder verworfen. Ich will für den Lüfter ein digitales Signal haben. An oder Aus. Nix dazwischen.
Auch der NE555 ist nicht mehr in der engeren Wahl. Zwar kann der einfach irgendwo zwischen 5V bis 15V betrieben werden, braucht mir aber zu viel externe Beschaltung.
Daher wird es nun der ATtiny85. Von dem Baustein habe ich Anfang des Jahres zehn Stück für zusammen 14,01€ gekauft. Also was solls.

Jetzt stellt sich die Frage, wie der ATtiny85 ein eingeschaltetes Hotend erkennt. Ein hochohmiger Spannungsteiler (1 zu 3 bzw: 15V -> 5V) am Heater1-Anschluß des Controllers ist klar. Andererseits könnte es durchaus sein, dass der Controller die Masse-Leitung schaltet. .....mal im Wiki gucken.
Mist!
Laut Schaltplan macht er genau das.
Also eher kein Spannungsteiler. Bei abgeschaltetem Hotend lägen dann 15V am Eingangs-Pin des ATtiny85.
Ein Optokoppler wäre denkbar.

Mal testen:
Ich messe 15V über den Pins 1 und 4 von Heater1, wenn ich das Hotend per Repetier-Server heizen lasse.
Eine Messreihe ergibt:
Messgerät (+)
Messgerät (-)
gemessene Spannung
Hotend AUS
gemessene Spannung
Hotend EIN
+15V
Heater1(-)
0V
15V
GND
Heater1(-) -15V
0V
Heater1(+) +15V
0V
0V
Heater1(+) GND
15V
15V

Warum auch immer da -15V angezeigt werden, wenn ich zwischen GND und Heater1(-) messe...den erwünschten Messwert erhalte ich über +15V und Heater1(-).
Somit passt der Schaltplan zu meinem Controller-Board - zumindest diesbezüglich.
Aber mit dem Spannungsteiler wird es wohl nix.
Dann eher [vielleicht] so:
Schaltplan Hotend-Lüfter-Automatik
Den Wert des Optokoppler-Vorwiderstandes habe ich einfach mal analog zur LED gemäß Controller-Schaltplan gewählt.
Nebenbei trennt der Optokopper auch die 15V aus dem Velleman Netzteil von den 12V aus dem ATX-Netzteil.

Und auf dem ATtiny85 würde das hier laufen:
/*
* Hotend-Lüfter-Automatik (für den ATtiny85)
*
* D.Ahlgrimm 11.2018
*/

#define HOTEND_PIN 4 // PCINT4 = Pin 3 am Chip
#define FAN_PIN 1 // PCINT1 = Pin 6 am Chip

#define HOTEND_IS_OFF 1
#define HOTEND_IS_ON 0

#define FAN_OFF 1
#define FAN_ON 0

#define SECS_AFTER_OFF 60 // Ausschaltverzögerung in Sekunden


void setup() {
pinMode(HOTEND_PIN, INPUT_PULLUP); // mit dem _PULLUP brauche ich eigentlich R2 nicht mehr
pinMode(FAN_PIN, OUTPUT);

digitalWrite(FAN_PIN, FAN_OFF);
}

void loop() {
static unsigned long t=0;
static int fan_state=FAN_OFF;
static int hotend_state;

hotend_state=digitalRead(HOTEND_PIN); // EIN/AUS-Status vom Hotend abfragen

if(hotend_state==HOTEND_IS_ON) { // wenn das Hotend EIN ist
t=millis(); // Ausschaltverzögerung retriggern
if(fan_state==FAN_OFF) { // wenn der Lüfter derzeit AUS ist
fan_state=FAN_ON; // Lüfter-Status auf EIN stellen
digitalWrite(FAN_PIN, FAN_ON); // Lüfter einschalten
}
}

if((millis()-t)>=1000*SECS_AFTER_OFF) { // wenn das letze "Hotend==EIN" länger als die Ausschaltverzögerung her ist
fan_state=FAN_OFF; // Lüfter-Status auf AUS stellen
digitalWrite(FAN_PIN, FAN_OFF); // Lüfter ausschalten
}

delay(100); // zehn Prüfungen pro Sekunde langen dicke
}

Grrr....so wird das noch nichts werden!
Just habe ich den Molex-Abzweiger gelötet und danach den ersten längeren Test gemacht.
Konkret habe ich das Hotend auf 60°C heizen lassen und mir dabei durchgängig die Spannung angesehen, die beim zukünftigen Optokoppler-Eingang ankommen wird. Bevor die 60°C erreicht waren, war alles wie gedacht - also konstant 15V. Nach Erreichen von 60°C ging die Spannung auf 0V runter. War auch erwartet.
Jedoch wurde nicht digital nachgeheizt. Stattdessen kamen nur so um die 2.5V an.
Per PWM wahrscheinlich. Mal nachsehen.... ja, PWM:
Ozzi Screenshot
Na denn. An der Hardware muss sich eigentlich trotzdem nicht viel ändern. Statt den HOTEND_PIN mit 10Hz zu pollen, muss er per Interrupt abgefragt werden.
Oder einfach schneller pollen - der ATtiny85 hat ja eh nix zu tun....

BTW: für das Ozzi-Bild musste ich den "Core i3"-Laptop mit Win7 nach langer Zeit mal wieder hochfahren. Mann, was ist das schlecht.....die HDD ist nach 20 Minuten Uptime immer noch zu 100% unter Volllast. Kein Wunder also, dass das Ding nicht performed. Wie kann man sich nur täglich mit solchem Schund rumärgern, wenn es doch auch Linux gibt?

Erstmal frage ich den Optokoppler jetzt per ArduinoUNO ab.
Und prompt klappt da irgendwas noch nicht.....

Nun aber. Dieses blöde C kann echt nix von alleine.  ;-)
Ein fehlendes "L" (für long) beim Vergleich der Zeitdifferenz und dem statischen Wert hat ihn verwirrt.
Das hier funktioniert jetzt:
/*
* Hotend-Lüfter-Automatik (für den ATtiny85)
*
* D.Ahlgrimm 11.2018
*/

#define HOTEND_PIN 2 // PCINT4 = Pin 3 am Chip
#define FAN_PIN 1 // PCINT1 = Pin 6 am Chip

#define HOTEND_IS_OFF 1
#define HOTEND_IS_ON 0

#define FAN_OFF 1
#define FAN_ON 0

#define SECS_AFTER_OFF 60 // Ausschaltverzögerung in Sekunden


void setup() {
pinMode(HOTEND_PIN, INPUT_PULLUP);
pinMode(FAN_PIN, OUTPUT);

Serial.begin(115200);
digitalWrite(FAN_PIN, FAN_OFF);
}

void loop() {
static unsigned long t=0;
static int fan_state=FAN_OFF;
static int hotend_state;

hotend_state=digitalRead(HOTEND_PIN); // EIN/AUS-Status vom Hotend abfragen

if(hotend_state==HOTEND_IS_ON) { // wenn das Hotend EIN ist
t=millis(); // Ausschaltverzögerung retriggern
if(fan_state==FAN_OFF) { // wenn der Lüfter derzeit AUS ist
fan_state=FAN_ON; // Lüfter-Status auf EIN stellen
digitalWrite(FAN_PIN, FAN_ON); // Lüfter einschalten
Serial.println("Lüfter ein");
}
}
if(millis()%1000==0) {
Serial.print(millis());
Serial.print(" - ");
Serial.print(t);
Serial.print(" - ");
Serial.print(millis()-t);
Serial.print(" - ");
Serial.print(hotend_state==HOTEND_IS_ON);
Serial.print(" - ");
Serial.println(fan_state==FAN_ON);
}

if(fan_state==FAN_ON) {
if((millis()-t)>=(1000L*SECS_AFTER_OFF)) { // wenn das letze "Hotend==EIN" länger als die Ausschaltverzögerung her ist
fan_state=FAN_OFF; // Lüfter-Status auf AUS stellen
digitalWrite(FAN_PIN, FAN_OFF); // Lüfter ausschalten
Serial.println("Lüfter aus");
}
}

delay(1);
}

Damit liefert er nun sowas hier:
154000 - 24782 - 129219 - 0 - 0
155000 - 24782 - 130219 - 0 - 0
156000 - 24782 - 131219 - 0 - 0
Lüfter ein
157000 - 156965 - 35 - 0 - 1
158000 - 157224 - 777 - 0 - 1
159000 - 157224 - 1777 - 0 - 1
160000 - 157224 - 2776 - 0 - 1
161000 - 157224 - 3777 - 0 - 1
162000 - 161695 - 306 - 0 - 1
163000 - 162997 - 4 - 0 - 1
164000 - 163914 - 86 - 0 - 1
165000 - 164439 - 562 - 0 - 1
166000 - 164439 - 1562 - 0 - 1
167000 - 164439 - 2562 - 0 - 1
168000 - 164439 - 3562 - 0 - 1
169000 - 164439 - 4562 - 0 - 1
170000 - 169950 - 51 - 0 - 1
171000 - 171000 - 1 - 1 - 1
172000 - 171922 - 79 - 0 - 1
173000 - 172972 - 29 - 0 - 1
174001 - 173884 - 117 - 0 - 1
175000 - 174934 - 67 - 0 - 1
176001 - 175719 - 282 - 0 - 1
177000 - 175719 - 1282 - 0 - 1
178000 - 175719 - 2282 - 0 - 1
179000 - 175719 - 3281 - 0 - 1
180000 - 175719 - 4282 - 0 - 1
181000 - 175719 - 5282 - 0 - 1
182000 - 175719 - 6281 - 0 - 1
183000 - 175719 - 7282 - 0 - 1
184000 - 175719 - 8282 - 0 - 1
185000 - 175719 - 9282 - 0 - 1
186000 - 175719 - 10281 - 0 - 1
187000 - 187000 - 1 - 1 - 1
188000 - 187922 - 78 - 0 - 1
189000 - 188975 - 26 - 0 - 1
190000 - 189886 - 115 - 0 - 1
191000 - 190936 - 65 - 0 - 1
192000 - 191328 - 673 - 0 - 1
193000 - 191328 - 1672 - 0 - 1
194000 - 191328 - 2673 - 0 - 1
195000 - 191328 - 3673 - 0 - 1
196000 - 191328 - 4673 - 0 - 1
197000 - 191328 - 5672 - 0 - 1
198000 - 191328 - 6673 - 0 - 1
199000 - 191328 - 7673 - 0 - 1
200000 - 191328 - 8672 - 0 - 1
201000 - 191328 - 9673 - 0 - 1
202000 - 191328 - 10673 - 0 - 1
203000 - 191328 - 11673 - 0 - 1
204000 - 191328 - 12673 - 0 - 1
205000 - 191328 - 13673 - 0 - 1
206000 - 191328 - 14672 - 0 - 1
207000 - 191328 - 15673 - 0 - 1
208000 - 191328 - 16672 - 0 - 1
209000 - 191328 - 17672 - 0 - 1
210001 - 191328 - 18673 - 0 - 1
211000 - 191328 - 19673 - 0 - 1
212000 - 191328 - 20672 - 0 - 1
213000 - 191328 - 21672 - 0 - 1
214000 - 191328 - 22673 - 0 - 1
215000 - 191328 - 23672 - 0 - 1
216000 - 191328 - 24673 - 0 - 1
217000 - 191328 - 25673 - 0 - 1
218000 - 191328 - 26673 - 0 - 1
219000 - 191328 - 27672 - 0 - 1
220000 - 191328 - 28673 - 0 - 1
221000 - 191328 - 29672 - 0 - 1
222000 - 191328 - 30673 - 0 - 1
223000 - 191328 - 31672 - 0 - 1
224000 - 191328 - 32673 - 0 - 1
225000 - 191328 - 33673 - 0 - 1
226000 - 191328 - 34672 - 0 - 1
227000 - 191328 - 35672 - 0 - 1
228000 - 191328 - 36673 - 0 - 1
229000 - 191328 - 37673 - 0 - 1
230000 - 191328 - 38672 - 0 - 1
231000 - 191328 - 39673 - 0 - 1
232000 - 191328 - 40673 - 0 - 1
233000 - 191328 - 41673 - 0 - 1
234000 - 191328 - 42673 - 0 - 1
236000 - 191328 - 44673 - 0 - 1
237000 - 191328 - 45673 - 0 - 1
238000 - 191328 - 46673 - 0 - 1
239000 - 191328 - 47673 - 0 - 1
240000 - 191328 - 48673 - 0 - 1
241000 - 191328 - 49673 - 0 - 1
242000 - 191328 - 50672 - 0 - 1
243000 - 191328 - 51673 - 0 - 1
244000 - 191328 - 52672 - 0 - 1
245000 - 191328 - 53673 - 0 - 1
246000 - 191328 - 54673 - 0 - 1
247000 - 191328 - 55673 - 0 - 1
248000 - 191328 - 56672 - 0 - 1
249000 - 191328 - 57673 - 0 - 1
250000 - 191328 - 58673 - 0 - 1
251000 - 191328 - 59673 - 0 - 1
Lüfter aus
252000 - 191328 - 60672 - 0 - 0

Dann werde ich das morgen mal auf Lochraster zusammenlöten.

So...bevor ich löte, brauche ich erstmal die Pinouts von MOSFET und Optokoppler:
Pinout MOSFET Pinout Optokoppler

Ich habe es vor dem Verlöten doch erst auf einem Breadboard zusammengestöpselt. Wie gut - denn der Lüfter läuft konstant.

Durch ein bischen rumgesurfe nach anderen P-Kanal-MOSFET-Schaltungen kam mir die Idee, dass dem Gate die 5V nicht reichen könnten.
Wenn der MOSFET bei allen anderen gesichteten Schaltungen über einen Widerstand an der geschalteten Spannung hängt, dann wird das wohl auch besser so sein.... und siehe da: wenn ich das Gate über den Vorwiderstand an +12V lege, dreht der Lüfter nicht. Lege ich das Gate per Drahtbrücke auf Masse, läuft der Lüfter an.
Also braucht es noch einen kleinen NPN-Transistor und einen Vorwiderstand:
Schaltplan Hotend-Lüfter-Automatik
Damit klappt nun endlich alles wie vorgesehen über den Arduino und auf dem Breadboard.
Nun kommt statt des Arduinos der ATtiny85 aufs Breadboard. Der Arduino liefert lediglich noch die 5V für den ATtiny85.
Sieht gerade so aus:
der Bastel-Schreibtisch
Und klappt ebenfalls :-)    .... allerdings erst, nachdem ich den ATtiny85 ein zweites mal geflashed hatte!?

Also nochmal: morgen verlöte ich das.
Ich bräuchte echt einen Azubi, der sich freut, wenn er einen Prototyp löten darf. So einen Azubi wie mich....vor 32 Jahren. ;-)

Die Arbeit ist getan: alle Bauteile sind auf der Lochrasterplatte verlötet (R2 habe ich weggelassen).
Zwecks Test habe ich die Schaltung erstmal an die sog. AUX-Outputs von meinen Konstanter geklemmt.
Praktischerweise kann ich da gesondert 5V und 12V abgreifen - unabhängig von der eingestellten Spannung am sog. MAIN-Output.
Also vier Kontakte. +5V und Masse sowie +12V und Masse.
Weil meine Schaltung nur einen Masse-Eingang hat, habe ich einfach die Masse-Klemme vom 12V-Ausgang genutzt.
Und das hat zu einem Problem geführt, das mich locker eine Stunde Zeit gekostet hat.

Der ATtiny85 hat nicht mehr das gemacht, was er gestern noch gemacht hat, als er im Breadboard steckte.
Die Spannungen an der Schaltung stimmten, wenn der ATtiny85 nicht gesteckt war. Alles andere stimmte eigentlich auch.
Trotzdem gings nicht. Sobald der ATtiny85 steckte, lagen darüber aber nur noch ca. 0.7V an!?
Irgendwann bin ich auf die Idee gekommen, die zwei Masse-Klemmen am Konstanter per Drahtbrücke zu verbinden.
Und schon gings.
So eine böse Falle. Da haben die zwei Konstant-Spannungen doch tatsächlich jede ihre eigene Masse. Warum macht man sowas???
Naja, nun ist mir dieser Umstand bekannt und wegen der ganzen vergeudeten Zeit werde ich das wohl zukünftig niemals wieder vergessen.

So sieht es jetzt aus (die Freilaufdiode befindet sich auf der Leiterbahnseite):
die Hotend-Lüfter-Automatik fertig auf Lochraster aufgebaut
Am ATX-Netzteil gibts offenbar nur eine Masse.
Jedenfalls funktioniert meine Schaltung in der Zielumgebung exakt so, wie es gedacht war.

Auf dem ATtiny85 läuft final das hier:
/*
* Hotend-Lüfter-Automatik (für den ATtiny85)
*
* D.Ahlgrimm 11.2018
*/

#define HOTEND_PIN 4 // PCINT4 = Pin 3 am Chip
#define FAN_PIN 1 // PCINT1 = Pin 6 am Chip

#define HOTEND_IS_OFF 1
#define HOTEND_IS_ON 0 // der Optokoppler zieht Pin3 auf Masse

#define FAN_OFF 0
#define FAN_ON 1 // der NPN-Transistor schaltet bei +5V

#define SECS_AFTER_OFF 60 // Ausschaltverzögerung in Sekunden

#define DEBUG 0

void setup() {
pinMode(HOTEND_PIN, INPUT_PULLUP);
pinMode(FAN_PIN, OUTPUT);
#if DEBUG==1
Serial.begin(115200);
#endif
digitalWrite(FAN_PIN, FAN_OFF);
}

void loop() {
static unsigned long t=0;
static int fan_state=FAN_OFF;
static int hotend_state;

hotend_state=digitalRead(HOTEND_PIN); // EIN/AUS-Status vom Hotend abfragen

if(hotend_state==HOTEND_IS_ON) { // wenn das Hotend EIN ist
t=millis(); // Ausschaltverzögerung retriggern
if(fan_state==FAN_OFF) { // wenn der Lüfter derzeit AUS ist
fan_state=FAN_ON; // Lüfter-Status auf EIN stellen
digitalWrite(FAN_PIN, FAN_ON); // Lüfter einschalten
#if DEBUG==1
Serial.println("Lüfter ein");
#endif
}
}
#if DEBUG==1
if(millis()%1000==0) {
Serial.print(millis());
Serial.print(" - ");
Serial.print(t);
Serial.print(" - ");
Serial.print(millis()-t);
Serial.print(" - ");
Serial.print(hotend_state==HOTEND_IS_ON);
Serial.print(" - ");
Serial.println(fan_state==FAN_ON);
}
#endif
if(fan_state==FAN_ON) {
if((millis()-t)>=(1000L*SECS_AFTER_OFF)) { // wenn das letze "Hotend==EIN" länger als die Ausschaltverzögerung her ist
fan_state=FAN_OFF; // Lüfter-Status auf AUS stellen
digitalWrite(FAN_PIN, FAN_OFF); // Lüfter ausschalten
#if DEBUG==1
Serial.println("Lüfter aus");
#endif
}
}
delay(1);
}

Es ist eine wahre Freude, wie schön leise der Drucker nun wieder ist, wenn er zwar am Strom hängt - ansonsten aber nix tut! :-)
Damit ist dieses Kleinprojekt jetzt abgeschlossen.
Obwohl....mindestens für die Haupt-Leiterplatte werde ich irgendwann noch ein Gehäuse drucken. Aber sowas zählt ja nicht.
Nachtrag: ist erledigt.



Die Fortsetzung folgt auf der nächsten Seite.