Signalizacny RGB majak k 3D tlaciarni

Jedno z mnohych nastaveni vo firmware Marlin pre 3D tlaciarne je moznost pripojit RGB ledku a rozsvecovat ju roznymi farbami podla stavu tlaciarne. Tuto funkciu som si prisposobil k svojim potrebam a vznikol signalizacny majak.

Cez internet som zakupil RGB ledku s priemerom 10mm zo spolocnou katodou. Je to najjednoduchsie pouzit prave ledku so spolocnou katodou. Na jednotlive anody treba pouzit predradene odpory a potom sa moze ledka pripojit priamo na vystupy z arduina (v mojom pripade Arduino Mega + Ramps 1.4). Na cervenu ledku ide cca 70 ohmovy odpor, na zelenu a modru idu cca 100 ohmove odpory (mozme pouzit aj ine odpory v tolerancii +-2ohmy). Ja som sa rozhodol nepajkovat to na plosny spoj a odpory som napajkoval priamo na vyvody z ledky. Kazdy odpor s kablom je zaizolovany zmrstovacou buzirkou. Kable je mozne pripojit n

Nastavenie Configuration.h

V subore Configuration.h treba odkomentovat riadok:

#define RGB_LED

Dalej musime upravit piny, na ktore chceme pripojit ledku. Ja som zvolil piny 4,5,6 pretoze su to PWM piny a da sa nimi riadit aj intenzita akou ma ledka svietit. Tieto piny sa nachadzaju na doske RAMPS oznacene ako SERVOS. Su to tri rady pinov. Vrchny rad pinov je (zlava) D11, D6, D5, D4, stredny rad je cely napajanie 5V a cely spodny rad je GND.

#if ENABLED(RGB_LED) || ENABLED(RGBW_LED)
  #define RGB_LED_R_PIN 6//34
  #define RGB_LED_G_PIN 4//43
  #define RGB_LED_B_PIN 5//35
  #define RGB_LED_W_PIN -1
#endif test

Nastavenie Marlin_main.cpp

Ak niekomu vyhovuje defaultne nastavenie, tento odsek moze preskocit. Mne sa defaultne nastavenie nepacilo, tak som pristupil k zmenam, ktore mi vyhovuju viac.

Povodne nastavenie:

  • v kludovom rezime, ledka nesvieti
  • pri zaciatku tlace pocas nahrievania meni farbu z modrej na cervenu
  • pocas tlace zmeni farbu na bielu (pre osvetlenie tlacoveho priestoru)
  • po potvrdeni skoncenia tlace sa ledka vypne

Moje upravene nastavenie:

  • v kludovom rezime ledka blika zelenou farbou (zariadenie pripravene)
  • pri zaciatku tlace pocas nahrievania meni farbu z modrej na cervenu
  • pocas tlace trvale svieti na zeleno (zariadenie v chode)
  • pocas rucneho nahrievania hotendu alebo bedu blika zlto (nahrievanie je v rucnom rezime)
  • pri vaznej poruche (teplotny skok, kill, atd) trvale svieti na cerveno
  • po skonceni tlaci ledka blika zelenou farbou (zariadenie pripravene)

Podme teda k upravam. Zacnime upravou farby pocas tlace. Povodnu bielu zmenime na zelenu. Najdeme si tuto cast, zakomentujeme povodnu bielu farbu a pridame prikaz na zelenu farbu nasledovne:

if (wait_for_heatup) {
lcd_reset_status();
#if ENABLED(PRINTER_EVENT_LEDS)
//leds.set_white();
leds.set_color(LEDColorGreen());
#endif
}

Doplnime rozsvietenie cervenej pri vaznej poruche. Je to stav, ked si tlaciaren vyzaduje reset a neda sa nijak dalej pokracovat. Je to uzitocne pokial pouzivate MKS TFT displej. Tento displej totiz nezobrazuje chybove spravy z Marlinu. Tie zobrazuje iba LCD displej a ine oficialne podporovane Marlinom. Pri pouziti MKS TFT displeja tlaciaren iba zastane a neviete ci mozte pokracovat alebo co je dovodom. Takto sa dozviete, ze nastala vazna chyba a treba resetovat tlaciaren. Do funkcie kill() teda pridate prikaz na rosvietenie cervenej ledky nasledovne:

void kill(const char* lcd_msg) {
leds.set_color(LEDColorRed());
SERIAL_ERROR_START();
......

Teraz si nastavime blikanie zelenou a zltou. Blikanie neodporucam davat do casti, kde sa nastavuje farba pocas tlace, pretoze arduino ma dost co robit aby obsluzilo motory a nie to este blikat nasou ledkou. Z tohto dovodu by bolo blikanie nepravidelne. Najdime hlavnu slucku programu – loop() a pred nu doplnime deklaraciu premennych a vnutri slucky samotne blikanie (pridane casti su medzi znakmi /////////////////):

///////////////////////////////////////////////////////////////////////
#if ENABLED(PRINTER_EVENT_LEDS)
unsigned long previousMillis = 0;
const long interval = 1000;
byte stavled=0;
#endif
///////////////////////////////////////////////////////////////////////

void loop() {
///////////////////////////////////////////////////////////////////////
#if ENABLED(PRINTER_EVENT_LEDS)
leds.set_color(LEDColorGreen());
const byte beda=thermalManager.degTargetBed();
const byte heda=thermalManager.degTargetHotend(target_extruder);
if(beda<1 || heda<1){
unsigned long currentMillis = millis();
if (currentMillis - previousMillis >= interval) {
previousMillis = currentMillis;
if (stavled==0) {
if(beda>1) leds.set_color(LEDColorYellow());
if(heda>1) leds.set_color(LEDColorYellow());
if(beda<1 && heda<1)leds.set_color(LEDColorGreen());
stavled=1;
} else {
leds.set_off();
stavled=0;
}
}
}
#endif
///////////////////////////////////////////////////////////////////////


V tejto casti sme zadefinovali blikanie, zelenu farbu pri necinnosti a zlte farby pri rucnom nahrievani bedu alebo hotendu. Farby si kazdy moze upravit podla seba.

Pre ledku som si navrhol a vytlacil difuzor na rozptylenie svetla, pretoze samotna ledka z boku svietla velmi slabo. Konecny vysledok je signalizacny majak podobny tomu aky byva na niektorych priemyslnych strojoch.

ukazka funkcnosti: zariadenie v klude (blika zelena), rucne nahrievanie hotendu (blikanie zltej), spustena tlac(trvala modra meniaca farbu do cervenej)
Ledka bez difuzora
Ledka s difuzorom
Zaciatok tlace-proces nahrievania zacal (modra)
Zaciatok tlace-proces nahrievania cca v polovici (fialovo-ruzova)