Marlin 2.0 Spegnimento semi-automatico a hotend freddo

Pulsante di spegnimento “intelligente” a hotend freddo.

Come funziona:
Per spegnere la stampante, premere il nuovo pulsante di spegnimento P1.
Il led di stato si accenderà per segnalare che la stampante sta aspettando il raffreddamento dell’hotend.
Se una stampa è in corso, il led rimarrà acceso fino al completamento della stampa e raffreddamento dell’hotend.
Una volta che l’hotend sarà al di sotto della temperatura impostata, il relè verrà disattivato, spegnendo la stampante.
Se la stampante è già fredda, si spegnerà immediatamente.
Per accendere la stampante, tenere premuto il pulsante di accensione P2 per 2-3 secondi.
All’avvio di Marlin, il relè di spegnimento verrà comandato per tenere accesa la stampante.

Materiale necessario:
– Qualsiasi scheda derivata da RAMPS, testato su MKS GEN L 1.0
– P1 pulsante a bassa tensione collegato alla scheda
– P2 pulsante di potenza per accendere la stampante
– LED
– resistenza 180-220 ohm
– schedina relé 5V per con relè da almeno 10A (su ebay cerca “arduino relay”)
– cavetti vari

Necessari 3 pin di I/O sulla scheda di controllo della stampante, con le seguenti funzioni:
– Ingresso per un pulsante
– Uscita per un LED che segnala lo stato della funzione
– Uscita per un relè che taglia l’alimentazione alla stampante (o altra funzione)

Schema elettrico:

Porta AUX2 su MKS GEN L 1.0

Modifiche al firmware:
Suggerisco di fare una copia di backup al proprio firmware in modo da essere in grado di tornare indietro.
Dato che la modifica è eseguita su file eseguibili di Marlin, un aggiornamento di marlin farà perdere questa modifica.

In Configuration.h cercare la parola DEFAULT_NOMINAL_FILAMENT_DIA e sotto aggiungere questo blocco.
E0_THRESHOLD_TEMP può essere impostato al valore desiderato.
Le assegnazioni dei pin possono essere variate a piacere, qui sono usati i pin dispinibili sulla presa AUX2, vedi lo schema della tua scheda.
//TURNOFF_WHEN_COLD option
#define TURNOFF_WHEN_COLD
#ifdef TURNOFF_WHEN_COLD
#define PIN_KILL_RELAY 42
#define PIN_BTN_TURNOFF_REQ 40
#define PIN_BTN_TURNOFF_PENDING_LED 44
#define E0_THRESHOLD_TEMP 90
#endif

Per disabilitare la funzione dal sistema, commentare la riga #define TURNOFF_WHEN_COLD

In MarlinCore.cpp apportare le seguenti modifiche:
Cercare la parola MarlinState marlin_state = MF_INITIALIZING e di sotto aggiungere il blocco:
#ifdef TURNOFF_WHEN_COLD
int turnoff_when_cold_req = 0;
#endif

Questo blocco è la dichiarazione della variabile globale di stato della funzione.

Cercare la parola HAL_init() e di SOPRA aggiungere il blocco:
#ifdef TURNOFF_WHEN_COLD
pinMode(PIN_BTN_TURNOFF_REQ, INPUT_PULLUP);
pinMode(PIN_BTN_TURNOFF_PENDING_LED, OUTPUT);
pinMode(PIN_KILL_RELAY, OUTPUT);
digitalWrite(PIN_KILL_RELAY, HIGH);
turnoff_when_cold_req = 0;
#endif // TURNOFF_WHEN_COLD

Questo blocco prepara gli ingressi e uscite della scheda e comanda il relè all’accensione per tenere accesa la stampante.

Cercare la parola thermalManager.manage_heater() e aggiungere di sotto aggiungere il blocco:
#ifdef TURNOFF_WHEN_COLD
if (!digitalRead(PIN_BTN_TURNOFF_REQ) && !turnoff_when_cold_req ) turnoff_when_cold_req = 1;
//turn the LED on to signal the function status
digitalWrite(PIN_BTN_TURNOFF_PENDING_LED, turnoff_when_cold_req);
if (turnoff_when_cold_req)
{
//reset relay if extruder temperature is below E0_THRESHOLD_TEMP, the printer will turn off
digitalWrite(PIN_KILL_RELAY, thermalManager.temp_hotend[0].celsius > E0_THRESHOLD_TEMP);
}
#endif // TURNOFF_WHEN_COLD

Questa è la logica vera e proria della funzione.
Questo blocco è inserito nella funzione idle() di Marlin e viene eseguito ciclicamente quando c’è tempo CPU libero.

Complila e carica il nuovo formware! :)