This was my first Longer customer returned lk1 and I though It was gonna be ok, boy was I wrong.
The recieved condition
Hot-end had broken off tip and the insert was also damaged and broke off
No tools and unit looked like it had a few prints on it
The gantry was loose as well as the bottom plate rollers
Overall this unit looked like it was man handled or gruella hands
Repair and test :
Replaced the hotend with an updated Titanium Heat Break Thermal Barrel
after trying a couple prints it became evedient the hot end couldn't get the temp above 190. Further inspection revealed the thermal and heater were new. I ended up running a new heater block and pushing the wires straight through to the main board in order to get the temps up to 220. It looked like I was there.

I figured this would be a good and cheap upgrade to the hot end. After assembly the test prints failed. I even went as far as replacing the complete hotend again only to realize the filament was not being delivered. Turns out the main board driver could not power the servo strong enough to push out the material. At this point I had to conclude the original owner was an idiot and did serous damage to the unit. (i use the term loosely because sometimes I qualify)
Decision Time: Well the time waisted on this makes it a bust out and the replacement mainboard is 70 bucks so Forgeta bout it.


Now to get something out of this unit and the decision is-----Replace the mainboard with a duet wifi control board. (60 smakers) This changes the dynamics of the game because of the capability and wireless connection. So here goes
First you have to mount the board , physical mount, I placed it where the old lk1 board was, then wire it up. At this point it's time to get a real lesson in Arduino programming because you have to update the code on the duet to current version and also set it up to run on the LK1.
Here are some files you will need and get ready to stress out because if your running a microcrap os it's a bitch. serial port configuration for one thing, if you get lucky and win finds the board look to heaven, if not consider a different computer
DUET WiFi instructions, BOSSA, YAT ,
Essentially what your doing is putting the duet into bootloader mode and connecting through the win comport and transmitting the .bin file to the board. This will give the duet a operating system to run

This is where we wind up, a beautiful interface that is connected to the host computer via ip & WiFi
intial setup using online config tool
first run was crazy, only had z movement
step one check heaters
ran M303 H0 S60 to heat and calibrate the bed Success!
ran M303 H1 S 200


The duet has 3 wire endstops the 3v is not used on the board the outboard wires are used not the middle M119 in prontoface shows endstop status
The upgrade is moving along but the homing causes the unit to act like an core xy setup. when I home either of the axis's the machine lifts the z then repositions x then drops z

This is a sidebar to explain the end stops for the Lk1 and duet
As mentioned above the wiring on the duet requires the use of the outboard pins of the 3pin connector, thus requiring changing out the connectors, it's just not possible to use the original 2 pin from the lk1.
Then the config file needs to reflect (active low) for the 3 axis's


Referance before you start your duet install
Location of plug-in files for Duet Web Control
Convert stl to gcode
Step 1. Slicer Software
You need to install slicer software on your PC. While installing or after installing it ask for file types that are support on the slicer. Chose Arduino support, Stl, and gcode support but you are free to select as your need.
There are many different slicer software in the market. You can find many free slicer software with great features.
- Ultimaker Cura
- SuperSlicer
- PrusaSlicer
- PrusaSlicer
- Slic3r
- Eiger
- Simplify 3D
- FlashPrint
Step 2. Printer Profile
First, you need to create your printer profile in slicer software. Many different consumer’s printers companies already gave their printer profile in the slicer but if you use custom build so you need to do this.
- Select the custom option from the printer.
- Add Printer maximum travel distance for all axes.
- Select Bed Type.
- Chose G-code type.
- Add Print-head dimensions.
- Add height difference between nozzle and z-axis in gantry height.
- Also, add extruder offset if needed.

Start g-code and End G-code
Start g-code run before every print while End g-code run after every print.
This will be added when I figure it out for the duet wifi
If you know the g-code language then you can add them as your need but if you don’t know about g-code then leave them as they or you internet for the best g-code commands to start or end the print.
Step 3. Import STL File
After configuring the printer profile, import your STL file from the import option in the slicer. you see your model in the slicer.
Before you click on the slice button you have to do some more configuration according to your print
- Select Material Type.
- Select print speed.
- Chose Gradient infill (It save your time and filament).
- Add Support.
- Select Adhesion type according to your filament type
Step 4. Slicing
After setting everything click on slice
- Put that file in your printer SD card.
- Insert the SD card in the printer (In Marlin Firmware).
- Power on the printer.
- In LCD navigate to SD card here you can see your files.
Note this: the addition of the second z axis really wasn't worth the trouble. Yes it would help with the LK1 cause the x frame bar is long but the process to get the bed level has been a complete waist of time. Until I can get a sold instruction I would not recommend it
Final updates and settings
The final thing I wanted to try was adding the 2nd Z axis screw

This install has 2 methods of wiring. The kit comes with a splitter but the Duet2 has both a serial port and you can put the wiring to a separate driver (E1). The benefit of the latter option is the software can drive the 2 motors separate allowing for tilting the bet to get it level
What needs to be here is the code to input for the bedleveling. Working on it. The install uses the separate driver
add these lines to setup second z axis
File config.g:
...
M584 X0 Y1 Z2:4 E3; two Z motors connected to driver outputs Z and E1
M671 X-20:220 Y0:0 S0.5 ; leadscrews at left (connected to Z) and right (connected to E1) of X axis
M208 X-5:205 Y0:300 ; X carriage moves from -5 to 305, Y bed goes from 0 to 300
...
File bed.g:
G28 ; home
M401 ; deploy Z probe (omit if using bltouch)
G30 P0 X20 Y100 Z-99999 ; probe near a leadscrew, half way along Y axis
G30 P1 X180 Y100 Z-99999 S2 ; probe near a leadscrew and calibrate 2 motors
M402 ; retract probe (omit if using bltouch)
MY config
; Drives
M569 P0 S1 ; physical drive 0 goes forwards
M569 P1 S0 ; physical drive 1 goes backwards
M569 P2 S1 ; physical drive 2 goes forwards
M569 P3 S0 ; physical drive 3 goes backwards
M569 P4 S1 ; physical drive 4 goes forwards
M584 X0 Y1 Z2:4 E3 ; two Z motors connected to driver outputs Z and E1
M671 X-20:220 Y0:0 S0.5 ; leadscrews at left (connected to Z) and right (connected to E1) of X axis
M350 X16 Y16 Z16 E16:16 I1 ; configure microstepping with interpolation
M92 X80.00 Y80.00 Z400.00 E93.00:400.00 ; set steps per mm
M566 X1200.00 Y1200.00 Z24.00 E300.00:24.00 ; set maximum instantaneous speed changes (mm/min)
M203 X24000.00 Y24000.00 Z300.00 E6000.00:300.00 ; set maximum speeds (mm/min)
M201 X700.00 Y700.00 Z100.00 E5000.00:100.00 ; set accelerations (mm/s^2)
M906 X800 Y800 Z800 E1000:800 I50 ; set motor currents (mA) and motor idle factor in per cent
M84 S30 ; Set idle timeout
G92 z0 reset z to 0 or M564 S0 to disable axis limits.
Send G30 S-1 to probe the bed without resetting the Z=0 position
restart the Duet by sending M999
M208 S1 Z-3 to temporarily allow Z moves down to Z=-3mm. This is to ensure that you can lower the nozzle all the way to the bed in step
M564 S0 to disable axis limits
M401 deploy
M402 retract
X_PROBE_OFFSET_FROM_EXTRUDER -42 // X offset: -left +right [of the nozzle]
Y_PROBE_OFFSET_FROM_EXTRUDER -5 // Y offset: -front +behind [the nozzle]
Calibrate the Z probe trigger height
- Make sure the dynamic test is successful (Z probe stops when it senses the bed) before doing this.
- Cancel any currently active mesh compensation with M561
- Use the X and Y jog buttons to position the nozzle over the centre of the bed
- Jog the nozzle down until it is just touching the bed or just gripping a sheet of paper. If the firmware doesn't let you jog it down far enough, send M564 S0 to disable axis limits.
- Once you have the nozzle touching the bed, send command G92 Z0 to tell the firmware that the head is at Z=0
- Jog the head up by 5 to 10mm
- Send command G30 S-1. The nozzle will descend or the bed rise until the probe triggers and the Z height at which the probe stopped will be reported. If you are using a nozzle-contact Z probe, the trigger height will be slightly negative. For any other type of Z probe where the probe triggers before the nozzle contacts the bed, it will be positive.
- Repeat from step 5 two or three times to make sure that the trigger height is consistent.
- In Duet Web Control, go to Settings -> System Editor and edit the config.g file. Set the Z parameter in the G31 command to the trigger height that was reported. Save the file.
- Open config-override.g and check that there are no G31 commands in it. If you find any, delete those lines and save the file.
- To apply the new trigger height, restart the Duet by sending M999 or pressing Emergency Stop.
Adjusting z-offset
- Clean up bed and nozzle, and ensure no materials stick on
- Send G28 to homing XYZ axis
- Send M851 Z0 to reset Z offset value
- Send M500 to save current
- Send M501 load all saved settings from EEPROM.
- Send M503 print a concise report of all current settings (in SRAM) to the host console.
- Send G1 F60 Z0 to lower Z axis to the software origin
- Send M211 S0 to inactivate software endstop function
- Placea sheet of paper (or other block of 10mm approximately) on the bed and use the pronterface to lower the nozzle 1mm by 1mm then 0.1mm by 0.1mm until you feel a friction on the sheet of paper (the paper is not to be jammed but not too free either). Then remove the sheet.
- Send M114 to get current Z height value(usually negative). the value is the z-offset we
- Send M851 Z x.x to set z-offset(x.x is the value of previous value)
- Send M500 to save current
- Send M501 load all saved settings from EEPROM.
- Send M503 print a concise report of all current settings (in SRAM) to the host console.
- Send M211 S1 to re-activate software endstop function
- Send G28 Z0 to home Z axis
- Send G1 F60 Z0 to test if Z axis could back to the actual Z origin by checking the clearance between bed and nozzle if is about 1 mm (thickness of a sheet of paper). If not, please repeat step 7 to 16.
-- BL-TOUCH START GCODE --
G21 ; metric values
G90 ; absolute positioning
M82 ; set extruder to absolute mode
M107 ; start with the fan off
; confirm BL-touch safety
M280 P0 S160 ; BL-Touch Alarm release
G4 P100 ; Delay for BL-Touch homing
G28 X0 Y0 ; move X/Y to min endstops
G28 Z0 ; move Z to min endstops
; reconfirm BL-touch safety
M280 P0 S160 ; BL-Touch Alarm realease
G4 P100 ; Delay for BL-Touch
; bed leveling
G29; Auto leveling
M420 Z5 ; set LEVELING_FADE_HEIGHT
M500 ; save data of G29 and M420
M420 S1 ; enable bed leveling
; prepare hot-end
G92 E0 ; zero the extruded length
G1 F200 E3 ; extrude 3mm of feed stock
G92 E0 ; zero the extruded length again
M117 Printing
; -- end of BL-TOUCH START GCODE –
A valid M671 command enables auto calibration of the Z motors. When you run G32 to perform bed probing, the final G30 command (the one with the S parameter) in bed.g will then cause auto calibration to be performed. The auto calibration uses a least squares algorithm that minimises the sum of the height errors. The deviation before and expected deviation after calibration is reported.
If you have two Z motors, the calibration process adjusts the bed tilt along a line between the two leadscrew positions, on the assumption that the tilt at right angles to this will not change. With three motors, it adjusts the tilt in both directions. With four motors, it adjusts the tilt in both directions and also the twist. You should not use 4 leadscrews with a bed that is rigid enough to resist twisting strongly.
You can run G32 again to repeat the process if you wish.
If your bed is not perfectly flat or the gantry sags a little when the head is over the middle of the bed, the process will cause a small shift in the Z=0 position. To correct this, if you are using the Z probe to do Z homing, you can just re-home Z at the end of your bed.g file.
Recommendations
- If you have 3 or 4 Z motors, in bed.g use at least one probe point close to each leadscrew.
- If you have just 2 Z motors, one at each end of the X axis, then set the Y coordinates of the leadscrews in the M671 command to be equal (the value doesn't matter, so you can use zero). Use at least two probe points, one at each end of the X axis. All your probe points should have the same Y coordinate, which should be at or near the middle of the printable range.
- Note: If you are experiencing the Z axis compensating in the opposite direction needed, that means your Z motors are swapped. You can either swap the X values in the M671 command, or swap the stepper motors plugged into the Duet.
Example for 2 motors
File config.g:
...
M584 X0 Y1 Z2:4 E3; two Z motors connected to driver outputs Z and E1
M671 X-20:220 Y0:0 S0.5 ; leadscrews at left (connected to Z) and right (connected to E1) of X axis
M208 X-5:205 Y0:300 ; X carriage moves from -5 to 305, Y bed goes from 0 to 300
...
File bed.g:
G28 ; home
M401 ; deploy Z probe (omit if using bltouch)
G30 P0 X20 Y100 Z-99999 ; probe near a leadscrew, half way along Y axis
G30 P1 X180 Y100 Z-99999 S2 ; probe near a leadscrew and calibrate 2 motors
M402 ; retract probe (omit if using bltouch)
change the direction of X:
Changing this: M569 P0 S1 to M569 P0 S0
Note how we “use” the Gcode M569 to change the settings for drive P0 from direction S1 to direction S0
This is a generic config with everything working single Z axis
; Configuration file for Duet WiFi (firmware version 3.3)
; executed by the firmware on start-up
;
; generated by RepRapFirmware Configuration Tool v3.3.10 on Thu Feb 10 2022 15:49:16 GMT-0500 (Eastern Standard Time)
; General preferences
G90 ; send absolute coordinates...
M83 ; ...but relative extruder moves
M550 P"lk2 ser#2" ; set printer name
M918 P1 E4 F2000000 ; configure direct-connect display
; Network
M552 S1 ; enable network
M586 P0 S1 ; enable HTTP
M586 P1 S0 ; disable FTP
M586 P2 S0 ; disable Telnet
; Drives
M569 P0 S1 ; physical drive 0 goes forwards
M569 P1 S0 ; physical drive 1 goes backwards
M569 P2 S1 ; physical drive 2 goes forwards
M569 P3 S0 ; physical drive 3 goes backwards
M569 P4 S1 ; physical drive 4 goes forwards
M584 X0 Y1 Z2 E3:4 ; set drive mapping
M350 X16 Y16 Z16 E16:16 I1 ; configure microstepping with interpolation
M92 X80.00 Y80.00 Z400.00 E93.00:400.00 ; set steps per mm
M566 X1200.00 Y1200.00 Z24.00 E300.00:24.00 ; set maximum instantaneous speed changes (mm/min)
M203 X24000.00 Y24000.00 Z300.00 E6000.00:300.00 ; set maximum speeds (mm/min)
M201 X700.00 Y700.00 Z100.00 E5000.00:100.00 ; set accelerations (mm/s^2)
M906 X800 Y800 Z800 E1000:800 I50 ; set motor currents (mA) and motor idle factor in per cent
M84 S30 ; Set idle timeout
; Axis Limits
M208 X0 Y0 Z0 S1 ; set axis minima
M208 X300 Y300 Z400 S0 ; set axis maxima
; Endstops
M574 X1 S1 P"!xstop" ; configure switch-type (e.g. microswitch) endstop for low end on X via pin !xstop
M574 Y1 S1 P"!ystop" ; configure switch-type (e.g. microswitch) endstop for low end on Y via pin !ystop
M574 Z1 S2 ; configure Z-probe endstop for low end on Z
; Z-Probe
M950 S0 C"exp.heater3" ; create servo pin 0 for BLTouch
M558 P9 C"^zprobe.in" H5 F120 T6000 ; set Z probe type to bltouch and the dive height + speeds
G31 P500 X-42 Y-5 Z2.5 ; set Z probe trigger value, offset and trigger height
M557 X15:280 Y15:280 S20 ; define mesh grid
; Heaters
M308 S0 P"bedtemp" Y"thermistor" T100000 B4092 ; configure sensor 0 as thermistor on pin bedtemp
M950 H0 C"bedheat" T0 ; create bed heater output on bedheat and map it to sensor 0
M307 H0 B1 S1.00 ; enable bang-bang mode for the bed heater and set PWM limit
M140 H0 ; map heated bed to heater 0
M143 H0 S150 ; set temperature limit for heater 0 to 150C
M307 H0 B0 R0.168 C598.7 D1.98 S1.00 V23.9
M308 S1 P"e0temp" Y"thermistor" T100000 B4092 ; configure sensor 1 as thermistor on pin e0temp
M950 H1 C"e0heat" T1 ; create nozzle heater output on e0heat and map it to sensor 1
M307 H1 B0 S1.00 ; disable bang-bang mode for heater and set PWM limit
M143 H1 S275 ; set temperature limit for heater 1 to 275C
; Fans
M950 F0 C"fan0" Q500 ; create fan 0 on pin fan0 and set its frequency
M106 P0 S0 H-1 ; set fan 0 value. Thermostatic control is turned off
M950 F1 C"fan1" Q500 ; create fan 1 on pin fan1 and set its frequency
M106 P1 S1 H1 T45 ; set fan 1 value. Thermostatic control is turned on
M950 F2 C"fan2" Q500 ; create fan 2 on pin fan2 and set its frequency
M106 P2 S1 H1:0 T45 ; set fan 2 value. Thermostatic control is turned on
; Tools
M563 P0 D0 H1 F0 ; define tool 0
G10 P0 X0 Y0 Z0 ; set tool 0 axis offsets
G10 P0 R0 S0 ; set initial tool 0 active and standby temperatures to 0C
; Custom settings are not defined
; Miscellaneous
M501 ; load saved parameters from non-volatile memory
M911 S10 R11 P"M913 X0 Y0 G91 M83 G1 Z3 E-5 F1000" ; set voltage thresholds and actions to run on power loss