Ręczne poziomowanie stołu w drukarce 3d może być zadaniem niezwykle nużącym a na początku zwyczajnie trudnym. Jednak dobrze wypoziomowany stół jest niezwykle istotny dla prawidłowego wykonania wydruku. Złe wypoziomowanie stołu może prowadzić do tego że wydruk nie będzie trzymał się podłoża. Mogą powstać luki w początkowej warstwie druku lub warstwy te będą zbyt cienkie. Podczas drukowania pierwszych warstw wokół dysza może zbiera się filament jak liczne inne problemy. Dlatego dobrą pomocą w tym procesie może być czujnik auto poziomowania stołu roboczego.
Czujnik auto poziomowania pozwala nam na stworzenie obrazu 3d naszego stołu i wykorzystania go do poprawienia naszych wydruków. Przy takim rozwiązaniu oprogramowanie wykorzystuję obraz 3d aby na bieżąco poprawiać pozycje osi Z (np. jeśli punkt A jest wyżej od punktu B oprogramowanie w czasie ruch będzie zmniejszać pozycje osi Z).
Tyle jeśli chodzi o teorie. Na rynku istnieją różne czujnik auto poziomowania osobiście jednak będę korzystał z Creality3D BL Touch który otrzymałem od kolegi za co mu dziękuję. Czujnik będzie instalowany w drukarce Anycubic i3 Mega. Niestety model ten nie posiada bezpośredniego interfejsu do zainstalowania tego modułu dlatego czeka nas sporo pracy softwarowej jak i hardwarowej.
Instalacja Softwaru
Firmowe oprogramowanie Anycubic i3 Mega nie wspiera obsługi czujnika auto poziomowania dlatego konieczne jest zainstalowanie oprogramowania open source które wspiera takie funkcje. Według mnie najlepszym rozwiązaniem jest Marlin-Ai3M.
Marlin-Ai3M to custom firmware dla drukarek Anycubic I3 Mega oraz Mega-S stworzony w oparciu o popularne oprogramowanie sprzętowe Marlin Firmware. Oprogramowanie to posiada wiele dodatkowych funkcji takich jak właśnie automatyczne poziomowanie stołu ale także pozwala na efektywniejsze podgrzewanie stołu roboczego, umożliwia lepsze zasilanie wentylatorów czy „S-Curve Acceleration” który pozytywnie wpływa na jakość druku i redukuję drgania. To zaś tylko kilka zalet tego oprogramowania.
Korzystając z tego oprogramowania trzeba jednak pamiętać iż:
– Nie będziemy mogli już ponownie uruchomić wydruku po utracie zasilania (u mnie ta funkcja nigdy nie działała w pełni prawidłowo)
– Przy włączeniu drukarki nie otrzymamy dźwięku startowego (co może być zaletą)
– Na karcie sd nie mogą znajdować się pliki i foldery ze znakami specjalnymi
Więcej informacji możemy znaleźć na oficjalnej stronie projektu https://kore.cc/i3mega/doc/
Ściągamy więc najnowsze oprogramowanie (osobiście korzystam tutaj z wersji v1.4.6 stable (Marlin 1.1.9)) z https://github.com/davidramiro/Marlin-Ai3M/releases/tag/v1.4.6 . Udostępnione są już trzy skompilowane pliki hex. Niemniej niestety żadna z nich nie ma włączonej obsługi BL Touch dlatego ściągamy nieskompilowany kod źródłowy (source code.zip)
Jeśli jeszcze nie mamy zainstalowanego programu Arduino Ide to teraz go instalujemy i otwieramy plik Marlin.ino. Otworzy to nam cały projekt nasz jednak interesuję jedynie plik Configuration.h . Jest to plik konfiguracyjny dla naszej drukarki. W zależności od tego jakie modyfikacje już wykonaliśmy i jakie chcemy wykonać w naszej drukarce tutaj możemy to ustawić.
Linie 559-569 Odpowiadają za rodzaj wykorzystywanych w drukarce driverów. Domyślnie zainstalowane są A4988 niemniej moja drukarka przeszła modyfikacje o których można poczytać https://binaryalchemist.pl/wyciszenie-drukarki-3d-anycubic-i3-mega/ i posiadam zainstalowane drivery TMC2208 z odwróconymi wejściami.
U mnie ten element wygląda następująco:
#define X_DRIVER_TYPE TMC2208_STANDALONE // comment out for stock drivers
#define Y_DRIVER_TYPE TMC2208_STANDALONE // comment out for stock drivers
#define Z_DRIVER_TYPE TMC2208_STANDALONE // comment out for stock drivers
#define X2_DRIVER_TYPE TMC2208_STANDALONE
#define Y2_DRIVER_TYPE TMC2208_STANDALONE
#define Z2_DRIVER_TYPE TMC2208_STANDALONE // comment out for stock drivers
#define E0_DRIVER_TYPE TMC2208_STANDALONE // comment out for stock drivers
#define E1_DRIVER_TYPE TMC2208_STANDALONE // comment out for stock drivers
#define E2_DRIVER_TYPE TMC2208_STANDALONE
#define E3_DRIVER_TYPE TMC2208_STANDALONE
#define E4_DRIVER_TYPE TMC2208_STANDALONE
Linie 856-868 odpowiadają za kierunek ruchu driverów, wartości te zalezą od tego jakie sterowniki mamy zainstalowane i czy w czasie instalacji driverów odwracaliśmy również wejścia. U mnie ten fragment wygląda następująco (sam kod jest dobrze opisany przez twórców dzięki czego łatwo zrozumieć co musimy zrobić nawet jak mamy inne sterowniki):
// Invert the stepper direction. Change (or reverse the motor connector) if an axis goes the wrong way.
#define INVERT_X_DIR true // set to true for stock drivers or TMC2208 with reversed connectors
#define INVERT_Y_DIR false // set to false for stock drivers or TMC2208 with reversed connectors
#define INVERT_Z_DIR false // set to false for stock drivers or TMC2208 with reversed connectors
// @section extruder
// For direct drive extruder v9 set to true, for geared extruder set to false.
#define INVERT_E0_DIR false // set to false for stock drivers or TMC2208 with reversed connectors
#define INVERT_E1_DIR false // set to false for stock drivers or TMC2208 with reversed connectors
#define INVERT_E2_DIR false
#define INVERT_E3_DIR false
#define INVERT_E4_DIR false
To co jednak może zainteresować najwięcej osób to cześć odpowiedzialna za prace czujnika auto poziomowania. Po pierwsze musimy wybrać rodzaj sondowania. Odpowiedzialne są za to linie 672-849 niemniej musimy jedynie za komentować linie 718 odpowiedzialną za sondowanie ręczne
//#define PROBE_MANUALLY
oraz od komentować linie 736-739 odpowiedzialne za sondowanie za pomocą BL Touch:
#define BLTOUCH
#if ENABLED(BLTOUCH)
#define BLTOUCH_DELAY 375 // (ms) Enable and increase if needed
#endif
Kolejna rzecz jaką musimy skonfigurować to technika jaką będziemy wykorzystywać przy poziomowaniu stołu. Odpowiedzialne są za to linie 982-986.
AUTO_BED_LEVELING_3POINT
AUTO_BED_LEVELING_LINEAR
AUTO_BED_LEVELING_BILINEAR
AUTO_BED_LEVELING_UBL
MESH_BED_LEVELING
Więcej na temat różnych technik można poczytać pod adresem https://marlinfw.org/docs/configuration/configuration.html#bed-leveling niemniej osobiście korzystam z rekomendowanej i najbardziej dokładnej techniki (oraz najbardziej czasochłonnej) AUTO_BED_LEVELING_UBL kod wygląda następująco:
//#define AUTO_BED_LEVELING_3POINT
//#define AUTO_BED_LEVELING_LINEAR
//#define AUTO_BED_LEVELING_BILINEAR
#define AUTO_BED_LEVELING_UBL
//#define MESH_BED_LEVELING
Przy tym poziomowaniu musimy jeszcze od komentować linie 992
#define RESTORE_LEVELING_AFTER_G28
Na koniec od komentujemy linie 1154 dzięki czego nasz stół roboczy będzie zerowany (homing) w centrum
#define Z_SAFE_HOMING
Tak przygotowany projekt eksportujemy do pliku .hex W tym celu w arduino ide wybieramy Narzędzia → Płytka → Arduino Mega oraz Mega 2560. Następnie wchodzimy w Szkic → eksport skompilowanego programu.
Na końcu artykułu możliwy jest do pobrania wygenerowany przeze mnie plik hex oraz cały plik konfiguracyjny.
Na zakończenie pozostaje nam wgranie przygotowanego custom firmwara na drukarkę. W tym celu skorzystamy z programu Cura. Podłączamy naszą drukarkę kablem dostarczonym przez producenta. Jeśli to konieczne instalujemy sterowniki. Włączamy program cura. Tam wchodzimy w Settings → Printer → Manage Printers. Wybieramy naszą drukarkę i klikamy na Update firmware → upload custom firmware. Wskazujemy wygenerowany plik hex po około dwóch minutach nasza drukarka powinna być gotowa do pracy.
Instalacja Hardwaru
Po skończeniu części softwarowej możemy przejść do hardwara. Tak jak wspominałem na początku Anycubic i3 Mega nie posiada wbudowanej obsługi dla czujnika auto poziomowania dlatego czeka nas trochę lutowania.
Do niewielkiej płytki drukowanej umieszczonej u góry wózka trzymającego hotend. Musimy przylutować dwa kabelki odpowiedzialne za uziemienie oraz sygnał.
Do dopiero co przylutowanych kabli podłączamy nasz BL Touch. Kabel czarny podłączamy do uziemienia kolor biały do sygnału.
Gdy mamy to zrobione możemy przymocować czujnik do wózka. Najlepiej w tym celu wydrukować sobie niniejszy model https://www.thingiverse.com/thing:2824005
Model ten montujemy za pomocą dwóch śrubek do górnej kratki wentylacyjnej. Kolejnymi dwoma śrubkami przykręcamy czujnik do spodu modelu. W moim wypadku konieczne było jeszcze drobne obniżenie BL Touch dlatego między model a BL Touch włożyłem trzy małe podkładki.
Ostatnia kwestia to podłączenie czujnik do płyty głównej. Trój kolorowy kabel BL Touch wyciągamy na zewnątrz poprzez górne wyjście w kratce wentylacyjnej i prowadzimy go do płyty głównej.
Kabel ten musimy podpiąć w następujące wejście:
Ważne abyśmy podłączali nasz BL Touch zgodnie z podanymi powyżej pinami. W przypadku mojego czujnika kolor kabli był następujący: czerwony – 5v, niebieski – uziemienie, żółty – sygnał. U mnie konieczne było zamienienie kabli zasilania i uziemienia aby zgadzały się one z pinami na płycie głównej.
Przygotowane do druku
Jeśli wszystko wykonaliśmy prawidłowo BL Touch w czasie uruchomienia powinien przejść auto diagnozę. Oznacza to iż w trakcie uruchamiania urządzenie powinno 2-3 krotnie wypuścić i schować sondę. Pozostaje nam jedynie wykorzystać dopiero co zamontowany czujnik. Najłatwiej po prostu dodać te komendy do każdego naszego wydruku:
G28; Home axis
M851 Z-3;
G29 P1 //probing
G29 P3 //Extrapolates leveling topology
G29 F10 //Sets fade height to 10mm
G29 S1 //Saves the bed topology
G29 A //Ensures UBL is activated
G29 L1 //Loads mesh #1
M500; Save firmware
M420 S1; Enable BLTouch
W programie cura możemy to zrobić wchodząc w Settings –> printers –> manage printers –> machine settings:
M851 Z-3; odpowiada za odległość od dyszy do punktu wyzwalania sondy w osi Z. Możemy ją wyznaczyć metodą prób i błędów niemniej najlepszym sposobem jest postępowanie według dokumentacji Merlina czyli:
– Zerujemy (home) oś Z
– Podnosimy trochę oś Z i wypuszczamy sondę z BL Touch (komenda M280 P0 S10)
– W niewielkich krokach obniżamy oś Z aż sonda zareaguje
– Otrzymaną wartość na osi Z wpisujemy do komendy M851 Z-x
Przygotowujemy dowolny wydruk. Jeśli wszystko działa powinniśmy otrzymać efekt zbliżony do następującego:
Testowanie i Problemy
W czasie instalacji BL Touch może pojawić się wiele problemów. Kable mogą być źle podłączone, software może być nieprawidłowo skonfigurowany lub nawet sam czujnik może być wadliwy a znalezienie problemu nie zawsze jest łatwe.
Jedną z rzeczy którą na początku możemy zrobić to sprawdzić czy czujnik odbiera komendy.
M119 – stan w jakim znajduję się sonda (open lub triggered)
M280 P0 S10 – wypuszczenie sondy
M280 P0 S90 – schowanie sondy
M280 P0 S120 – tryb Testowy
M280 P0 S160 – wyłączenie alarmu (ciągłe migotanie diody)
Komendy możemy przesyłać w programie Cura niemniej niestety program ten nie daję nam żadnych informacji zwrotnych dlatego osobiście polecam program Repetier-Host. Podłączenie drukarki przy jego użyciu jest niezwykle proste a informacje zwrotne otrzymane od drukarki będą wyświetlane na konsoli co może bardzo ułatwić znalezienie błędu.
W celu sprawdzenia jak dobrze się sprawuję nasz nowy czujnik i czy wszystko jest prawidłowo skonfigurowane możemy skorzystać z tych dwóch wydruków.
https://www.thingiverse.com/thing:34558
https://www.thingiverse.com/thing:2187071
Jeśli wydruki są równo drukowane w każdej części stołu roboczego to nasza praca jest skończona.
Wiele informacji, w szczególności jeśli chodzi o podłączenie do hardwaru, zostało zaczerpnięte ze strony http://m.rctruckstips.com/automatic-leveling-for-the-anycubic-i3-mega.html którą również zachęcam do odwiedzenia.
Poniżej udostępniam jeszcze wszystkie pliki jakie zostały wykorzystane w tym projekcie: