
Päivitystä vanhaan 3D-tulostimeen, Osa 1: Klipper & Mainsail
Käytössäni on useamman vuoden hyvin palvellut ensimmäisen sukupolven Ender 3 Pro 3D-tulostin. Olen tehnyt siihen vuosien varrella useita päivityksiä: vaihtanut Bowden -extruuderin suoravetomalliin, lisännyt BLTouch-anturin ja web-kameran, liittänyt tulostimeen Raspberry Pi:n ja Octoprint -käyttöliittymän sekä tehnyt lukuisia pienempiä päivityksiä.

Tulostimessa ei ole mitään varsinaista vikaa muuta kuin että se on nykymittapuulla hieman hidas. Tulostimessa on ensimmäisen sukupolven 8-bittinen ohjainkortti sekä Marlin -firmware, mikä rajoittaa tulostuksen nopeuden nostoa, vaikka askelmoottorit nopeampaan pystyisivätkin.
Klipper on vaihtoehtoinen 3D-tulostimen firmware. Sen suurin ero Marliniin verrattuna on että suurin osa tulostimen laskentatyöstä tehdään sitä ohjaavalla tietokoneella, tässä tapauksessa Raspberry Pi:llä. Tämä poistaa Marlin -firmwaren rajoitukset ja mahdollistaa samalla muita hyödyllisiä ominaisuuksi, joista myöhemmin lisää.
Mainsail on Klipper -tulostimen käyttöliittymä Raspberry Pi:ssä. Aiemmin käytössäni olleeseen Octoprintiin verrattuna Mainsail on kevyt ja tehty erityisesti Klipperiä varten. Mainsailin lisäksi myös Octoprintin saa halutessaan yhdistettyä Klipper -tulostimeen. Kolmas vaihtoehto käyttöliittymäksi on Fluidd.
Ensimmäiseksi asensin Mainsail OS:n Raspberry Pi Imager -ohjelmalla PC:n avulla Pi:n muistikortille. Tämän jälkeen muistikortti laitetaan Pi:hin ja kone käynnistetään. Mainsail OS on sen jälkeen käytettävissä selaimella Pi:n IP-osoitteella tai asennuksen yhteydessä määritellyllä domainilla.
Jotta Mainsail saadaan keskustelemaan tulostimen kanssa, täytyy tulostimen firmware päivittää Marlinista Klipperiin. Tähän hommaan löytyi ohjeet Klipperin sivuilta. SSH-yhteys Raspberry Pi:hin jossa ajetaan seuraavat komennot firmwaren tekemiseksi:
cd ~/klipper/
make menuconfig (valitse prosessorimalliksi atmega1284p)
make
Firmware flashataan tämän jälkeen tulostimeen. Sitä varten täytyy tietää USB:lla kytketyn tulostimen ID. Tämän saa selville komennolla: ls /dev/serial/by-id/* Varsinainen flashaus tehdään komennoilla:
sudo service klipper stop
make flash FLASH_DEVICE=/dev/serial/by-id/usb-1a86_USB2.0-Serial-if00-port0
sudo service klipper start
Mainsail ei vielä tämän jälkeen löydä tulostinta, koska tarvittava printer.cfg -tiedosto puuttuu. Sopiva pohja löytyi Githubista, jonka tallensin Mainsailin config -hakemistoon, printer.cfg -nimellä. Ensialkuun lisäsin tiedostoon rivin, millä luetaan mainsail.cfg sekä muokkasin tulostimen ID:n:
[include mainsail.cfg]
[mcu]
serial: /dev/serial/by-id/usb-1a86_USB2.0-Serial-if00-port0

Aikaisemmin Octoprintin käytössä ollut USB:lla yhdistetty web-kamera löytyi automaattisesti Mainsailin käyttöliittymästä. Mainsail tukee monia kameraprotokollia, joilla kameroita voi järjestelmään liittää ja hallita.
Raspberry Pi:ssäni on kiinni relekortti, joka ohjaa tulostinkaapin valoja sekä poistopuhallinta. Pi:lle tehtiin näitä varten oma firmware ja se lisättiin toissijaiseksi mikrokontrolleriksi Klipperin asetuksiin. Tämän jälkeen konfiguraatiotiedostoon määriteltiin mikä GPIO -pinni ohjaa mitäkin laitetta. Halutessaan näitä voi ohjata suoraan G-koodista:
[mcu rpi]
serial: /tmp/klipper_host_mcu
# A led strip
[output_pin caselight]
pin: !rpi:gpio17
value: 0
shutdown_value: 0
# Fans
[output_pin casefan]
pin: !rpi:gpio27
value: 0
shutdown_value: 0
Automaattisen tulostusalustan tasomaisuuden tarkastukseen (ABL) tarvittiin seuraavat rivit printer.cfg:hen Alla olevat arvot riippuvat käytetystä anturista, sen fyysisestä paikasta ja tulostusalustan koosta::
[stepper_z]
step_pin: PB3
dir_pin: PB2
enable_pin: !PA5
microsteps: 16
rotation_distance: 8
endstop_pin: probe:z_virtual_endstop
position_max: 250
position_min: -3
[safe_z_home]
home_xy_position: 150, 120
speed: 80
z_hop: 8
z_hop_speed: 5
[bltouch]
sensor_pin: ^PC4
control_pin: PA4
x_offset: -44.0
y_offset: -9.0
speed: 5.0
samples: 2
sample_retract_dist: 8.0
[bed_mesh]
speed: 80
horizontal_move_z: 5
mesh_min: 5,5
mesh_max: 185,220
probe_count: 5
Ekstruuderin syöttönopeus on myös kalibroitava, jotta se osaa syöttää oikean määrän lankaa tulostettaessa. Tämän voi tehdä useammalla eri tavalla, kuten mittaamalla ja laskemalla. Tämän lisäksi täytyy määrittää tulostuspään Z offset -arvo perinteisellä paperitestillä antamalla seuraavat komennot tulostimen konsoliin Mainsailissa:
PROBE_CALIBRATE
SAVE_CONFIG
Tulostin on näillä toimenpiteillä käytettävissä normaalisti. Sen saa yhdistettyä Slicereihin jolloin tulostus onnistuu ilman manuaalista tiedostojen siirtoa. Tulostimen hallinta on helppoa web-käyttöliittymän kautta ja se toimii erinomaisesti myös mobiililaitteissa ilman erillisiä sovelluksia. Klipperin mahdollistamiin tulostusnopeuksiin ja muihin lisäominaisuuksiin perehdytään myöhemmin.
Kaikkia päivityksen yksityiskohtia ei tässä käyty läpi. Tarvittaessa Klipperin ja Mainsailin ajantasaisimmat konfiguraatiotiedostot löytyvät Githubista.