Posted on Leave a comment

Setup E3D Chimera/Dual Head on Duet WiFi/RepRapFirmware – and watercooling intro

Some time ago I bought the, at the time, new E3D Chimera+ Watercooled hotend and some extra stuff for it.

(sorry, misplaced photo of unpacked new Chimera+. I’ll see about digging some up!)

I’ve had a bit of issues getting it up and running as the first pump/Reservoir combo I bought from China didn’t work.

A reservoir is just a container where extra water is stored to make sure the system doesn’t run low. It also makes it easier to fill up and maintain, and catch the air/bubbles the bubbles you always have in a new watercooled setup. All of these things can be done without a reservoir, but it makes it a lot easier to get going and easier to maintain and keep a look on waterlevel.

I’ve done a lot of custom watercooling on computers, servers and rack equipment (yes, you can watercool a switch and U1 server), so went into the basement to find some spare equipment.

So, why did I buy a Chinese pump when I allready had a lot of watercooling equiptment the smart reader might ask, and the answer is simply that I figured my pumps were far too powerfull, and yes, they were still too powerfull when I looked at them again, hehe.

My tubings also didn’t match precisely, which I could have worked around and I needed to print some Nylon barbs to work as an adapter from E3Ds bowden solution to the tubes – You can now buy a Water-cooling barbed adapter kit seperately from E3D, which you couldn’t at the time of my purchase… I could do all this, but I still needed a new pump and reservoir.

I could buy a new pump/reservoir combo from China and wait one more month and hope it worked this time…

Or I could buy the Watercooling kit from E3D and get going. This would also make it possible for me to get a look at their new stuff and document it for you in the form of STEP files on GrabCad.

  1. Prelude
  2. Configure RepRapFirmware
  3. Tool Definition
    1. Tool0
    2. Tool1
    3. Tool definition section code
  4. BLTouch offset from Nozzle0
    1. Mesh Grid
    2. The combined section code is like this
  5. Calibrate BLTouch for Z-offset
    1. Find Z-Offset
  6. Define Leadscrew coordinates for Autolevel
      1. How to use it
      2. X coordinates for M671
      3. Y Coordinate for M671
      4. The combined section code is like this
  7. Setup probe coordinates in bed.g

2) Configure RepRapFirmware

Since I’m using my new xBot Chimera+ Watercooled Carriage I need to both setup a new Tool (the second nozzle) which encludes configuring nozzle distance from each other, configure BLTouch placement in regards to my Nozzle, and reset my Z-offset of my BLTouch. Finally I’ll need to redo the coordinates used to do my probing sequce to autolevel my bed.. yes, it’s a lot actually, but taking it one step at a time, and it’s usually not really that hard.

I’ll recommend writing down what you do, if you are like me and work well with having documented what you do and what to do. 
Regardless of the details of your documentation I’ll strongly recommend you do not delete or change existing setup lines, but instead comment them out using ; and create a new line of code, for your new setup.

3) Tool Definition

Lets first add a new tool using M563 for our second nozzle by editing the config.g file. This includes defining which heater and extruder we are going to be using as well as the relative position it has to the first nozzle.

You can name the Tools if you like, which will show up in your web display. I’ve named them Nozzle1 and Nozzle2 respectively.

3.1) Tool0

First tool is Tool 0 (P0), using Extruder 0 (D0) and Heater 1 (H1)
M563 S"Nozzle1" P0 D0 H1 ; Define tool 0
The Tool ofset is defined using G10 and in relation to the origin of the head. I might have used the point between the two nozzles as the origin and defined offset as -10 and +10 on the X axis respectively, but I’m going to be using Nozzle 1 as the origin. This means the offset coordinates for Tool0 are all just 0.
G10 P0 X0 Y0 Z0 ; Set tool 0 axis offsets

3.2) Tool1

The second nozzle looks like: Tool 1 (P1), using Extruder 1 (D1) and Heater 2 (H2)
M563 S"Nozzle2" P1 D1 H2 ; Define tool
The offset of the second nozzle to the first one is +20 on the X axis, so it will look like this:
G10 P1 X20 Y0 Z0 ; Set tool 1 axis offsets

Note on Fans: If you use the default recommend fan0 as print object cooling fan, you do not need to define a fan.


3.3) Tool definition section code:

; Tools
; P = Tool Nr
; D = Extruder Drive nr
; H = Heater used
M563 S"Nozzle1" P0 D0 H1 ; Define tool 0
G10 P0 X0 Y0 Z0 ; Set tool 0 axis offsets
M563 S"Nozzle2" P1 D1 H2 ; Define tool 1
G10 P1 X20 Y0 Z0 ; Set tool 1 axis offsets

4) BLTouch offset from Nozzle0

Next up we need to modify the BLTouch position in relation to the Head Origin, which in our case is the first nozzle Tool0.

It is our G31 in the config.g we need to modify. Just leave the Pnnn value as is.

The BLTouch is placed 10mm to the right of the nozzle, which is X10 and 24,26mm in front of the nozzle, which translates to Y-24.26.

Important: Do not use , as normal in metric systems when denoting decimals when defining the gcode.

We are going to set Z offset to 0, and setup this again later to match our new carriage.

This means our (base) G31 looks like this:
G31 P600 X10 Y-24.26 Z0 ; BLTouch offset in relation to Tool0

4.1) Mesh Grid

My Mesh grid is spanning the area from X5,Y5 up to X205,Y165 and probing every 10mm.

Tip: When doing initial setup of the Bed I like to make the probing distance larger, at 20mm to get a rough map to use for manual adjustment.

It means my M557 looks like this:
M557 X5:205 Y5:165 S10 ; Define mesh grid

4.2) The combined section code is like this:

; ## Nozzle Distance from BED - Offset. Higher value, closer to bed.
; Set Z probe trigger value, offset in realtion to nozzle and trigger height adjustment
G31 P600 X10 Y-24.26 Z0 ; Zero offset
M557 X5:205 Y5:165 S10 ; Define mesh grid

5) Calibrate BLTouch for Z-offset

Previously we reset the Z offset using G31 to Z, so it now looks like this:
; ## Nozzle Distance from BED - Offset. Higher value, closer to bed.
; Set Z probe trigger value, offset in realtion to nozzle and trigger height adjustment
G31 P600 X10 Y-24.26 Z0 ; BLTouch offset in relation to Tool0

So, lets go find the proper Z offset:

5.1) Find Z-Offset

  1. Move your sensor to around the middle of the bed. You might even want to make a Macro for this, as it can be usefull for many different cases.
    1. Herer’s a simply macro I named Move to Centerbed, where I home X and Y first:
      G28 XY
      G1 X97 Y120 F4000 ; Move probe to middle of bed
      G28 Z

      We need to home Z before we can continue, or it fails to test properly after firmware 1.21
  2. Move Z untill your nozzle is about 10cm (4 inches) from the bed.
    1. Be ready to click the Emergency Stop in case the probe misbehaves.
    2. Now issue G30 command.
    3. Your BLTouch should now send the Pin Down and your bed should now move up (or nozzle down) untill the BLTouch is triggered.
    4. Hit the Emergency Stop if it didn’t stop or the Pin didn’t drop down.
      1. Go through your deployprobe.g if the Pin didn’t drop down.
  3. With #2 successfull you put your sensor over the middle of the bed and jog Z axis untill your nozzle is touching the bed.
    1. Note: If it refuses to move as it has reached Z-minima you can type in G92 Z5 to tell it, that you are 5mm from Z=0.
  4. Once your nozzle just touched the bed tell the machine we are at Z=0 by issuing:
    G92 Z0
  5. Move Z 10mm away from nozzle
    G1 Z10
  6. Now send G30 S-1 at which point the Pin drops down and the z-axis closes the gap until the BLTouch is triggered.
    1. Z now stops moving and reports the current position without changing anything. Note down the reported value.
  7. You might want to repeat the steps 4-6 a few times to insure consistency. I personally just did it 2 times and later did final adjust by looking at print starts.
  8. Mine reported the following:
    G30 S-1
    Stopped at height 2.4mm
  9. I should insert 2,4mm now, but I’ll detract 0,2 as a safety margin, so I’ll change the Z parameters in the G31 line from 0 to 2.2.
    G31 P600 X10 Y-24.26 Z2.2
    Important: The higher Z value the closer you move the nozzle and bed to each other! It’s better to have a value too low here than too high to avoid the nozzle and bed doing a mating game when homing.
    Important: If you later redo the offset method you should reset the offset to Z0 before starting or it might lead to strange results I’ve found on some occasions.

6) Define Leadscrew coordinates for Autolevel

Since the xBot is using 3x independent motors for our Z axis we need to define the coordinates of the leadscres in relation to the hotend and carriage combination we are using.

This can be a bit harry, but lets start by looking at the xBot Probe Point Helper Drawing I made for this purpose:

The Drawing is not made specifically for the my current xBot Carriage Chimera+ Watercooled but instead lising the dimensions in relation to the rear center manual finger screw. I did it this way to make it easier for people to use their own favorite carriage and hotend solution.

If you want indepth explanation on what I’m doing here, you should read the section on Z-Leadscrew Placement.

6.1) How to use it:

Before starting you should check if your X and Y -maxima coordinates should be changed. I needed to change mine.

Now home your X and Y axes, then move your carriage to the center rear, so BLTouch is lined up to the rear fingerscrew.
The position reads as X97 and I measure the BLTouch to be placed 20mm in front of fingerscrew, meaning my nozzles are actually placed exactly at my Y-Maxima, which is Y215.

6.2) X coordinates for M671

First leadscrew

Front right is placed 153,6mm to the right of the center rear fingerscrew.

Since my center is X97 it amounts to: 97+153,6 = 250,6 for first X coordinate.

Second leadscrew

Front left is placed 153,6mm to the left of center.

So 97-153,6 = -56,6 for second X coordinate.

Third leadscrew

Rear center is placed at the center, so we use 97 for our third X coordinate.

This adds up to the first part of the M671 line, which looks like this so far:
M671 X250.6:-56.6:97

6.3) Y Coordinate for M671

First Leadscrew

Front right is placed 241,1mm in front of the rear center leadscrew, which has the coordinate Y215 since my Nozzles are exactly on top of it and it corresponds to my Y-Maxima

So we take the Y position 215 and detract 241,1, which gives us 215-241,1 = -26,1 for our first Y coordinate

Second Leadscrew

This is placed at the same point on the Y axis as the first leadscrw, so -26,1 for our second Y coordinate

Third Leadscrew

This on is placed 63,5mm further out the Y axis, so:

215 + 63,5 = 278,5 for our third Y coordinate

When adding the Y coordinates to our M671 codeline we get the following:
M671 X250.6:-56.6:97 Y-26.1:-26.1:278.5 S3

The trailing S3 defines maximum correction the leadscrews can do. Default is 1.

6.4) The combined section code is like this:

; Define the X and Y coordinates of the leadscrews.
; Must come after M584, M667 and M669
; S = Maximum correction
; Motor order: Front right, front left, rear center.
; Snn Maximum correction to apply to each leadscrew in mm (optional, default 1.0)
M671 X250.6:-56.6:97 Y-26.1:-26.1:278.5 S3

7) Setup probe coordinates in bed.g for G32

Now its sime to review our bed.g file to see if it’s still valid.

It’s not really crucial where you probe, but you should try to make the probe points as close to each leadscrews as possible.

I set all mine to 2mm from min and max for each axis.. just in case a wire or something got between my carriage and the printer edges.

The Third point needs to take into account how BLTouch is placed 20mm in front of the nozzles, as it wouldn’t be able to probe at Y215 but at best at Y190. I’ve deducted the extra 2mm and landed on Y188.

It might be a bit fiddly to figure it out, as the actual probing coordinates is for the nozzle, so can be confusing when looking at it.

; bed.g
; Called using G32
; Called to perform Autolevel using 3-point probe
M561 ; clear any bed transform
; Made allowances for BLTouch being up to 30mm in front of nozzle. Typical is 27mm+/-
Probe 3-point
M401 ; Deploy probe - deployprobe.g
G30 P0 X207 Y2 Z-9999 ; Front Right
G30 P1 X2 Y2 Z-9999 ; Front Left
G30 P2 X97 Y188 Z-9999 S3 ; Center Rear
M402 ; Retract Probe - retractprobe.g

Posted on Leave a comment

xBot Medium – Electronics and Electrical parts (BOM cont.)

In this post I’ll continue describing what is needed to actually build the xBot-Medium printer. Last time I talked about the Custom Parts, and this time it will be about the Electronics and Electrical parts.

I’ve set up a xBot-Medium Github Repository where the files can be found for this project. As I havn’t finished it yet, all the files aren’t there, but they will be! Only the .STP files for the Dibond frame pieces and some a few for printed parts are missing, so it’s pretty much complete allready.

This post is going to be about the Electronics and Electrical parts we need for the xBot-Medium 3D Printer. I’ll list the Mechanical parts in a later post.

All “BOM” posts here on my blog are going to be condensed into a BOM in list form on the x-Bot-Medium Github Repository.

Some parts are both electrical and mechancial, like the motors, and such items are added to this post, while the Mechanical parts post are going to be the completely inert like the various pulleys, belts, nuts and such.

This is mostly going to be a list without a whole lot of exlanation to it.

xBot Medium electrical and electronical listing

  1. Duet WiFi
    1. Thermocoupler Daughterboard
  2. Duex5
    1. Consideration if choosing Duex2
  3. PanelDue 5″
  4. BLTouch SMART
  5. Heated Bed
    1. AC Silicone heater 500w
    2. SSR
  6. 3x Z-Motors
  7. XY Motors
  8. Extruder(motors)
  9. Chamber Heater
    1. 3x 30mm fans
  10. 2x 30mm fans for Printed objects
  11. Powersupply
  12. LED – RGB
    1. Manual on-off rocker
  13. Various
    1. Limit switches
      1. Long arm
      2. Short arm
    2. Front USB power out
    3. Rear USB for Controller access
    4. AC Power plug and on/off
    5. GX12 and G16 connectors
  14. Carriage
  15. Hotend
    1. Thermocoupler
    2. Plated Cobber nozzle
    3. 40w Heater Cartridge
  16. Untill next time


Duet Wifi

As the main controller, I’m using the Duet WiFi from duet3d.

Price: inc 20% vat: €162,3

While the price does seem rather high, you should take all the features in consideration.

Best quality of any controller. Simple as that. Both regarding features and quality. There are many safety features build in, like it doesn’t burn if a driver or sensor is accidentially unplugged while power is on, which is the main cause of dead electronics for many people. It doesn’t require active cooling as it get rids of the heat through PCB surface – active cooling is always a good idea though, but it’s not a requirment like pretty much all machines using pololu drivers.

It’s top of the line quality and uses 5x TMC2660, which are the highest end drivers you can get on any controller. They are very powerfull SilentStep Sticks (big brother to TMC2100/TMC2130) and can drive up to 3amp pr driver. Most people end up going out and spend money on silent step sticks anyway, which easily ends up at €50 for a set of those – and you can’t buy TMC2660 pololu sticks.

At some point many people start looking at a remote way to control and monitor the printer, and end up going out to buy a Raspberry Pi, which is another €35.
Regardless of what solution people use they don’t ever get close to the integrated webserver allready in the Duet WiFi. It’s hugely powerfull and very responsive. Has a ton of usefull information, and you even use it to setup the entire printer, so no need to compile firmware on your printer and then transfer using USB.
Since it’s integrated it also talks directly to the controller instead of using USB.
It also provides for real time changes in setup of most settings. Change fans, extrusionrate and LED using sliders etc etc.


From the official Duet3D Features page.

Feature list
From site

The DuetWifi is an advanced 32 bit electronics for the control of 3D printers and other CNC machines. It has the same features as the Duet Ethernet other than providing a WiFi connectivity rather than ethernet, full feature description is available on our wiki, in summary:

  • Powerful 32 Bit Processor
  • Dedicated Wifi module
  • Super quiet TMC2660 stepper drivers, up to 256 microstepping.
  • Dual extruders on the main board, up to 5 more extruders on the expansion board.
  • High Power rating: Each stepper driver is capable of 2.8A motor current, currently limited in software to 2.4A. The bed heater channel is specifically designed for high current (18A).
  • Connect via PC, tablet or smartphone on the same network to the on board web interface.
  • Setup your printer and update the firmware through the web interface.
  • Expandable up to 7 extruders with Firmware support for mixing nozzles and remapping axes to use high power external drivers.
  • Support for the PanelDue: a full colour graphic touch screen

Thermocoupler Daughterboard

Price inc 20% vat: €31

To be honest: Im not a fan of this design (put mildly)! I find it rather cumbersome how it’s stacked like that, and it can easily fall out if mounted upside down.. and thus prone to failure. The small terminals are very unforgiving as well, so can be hard getting a good connection.

As much as I find the price warranted for the Duet WiFi, I do look at these things the opposite way…

But while we supposedly can use 3rd party solutions I havn’t managed to make anything work, or seen anyone making anything work, so if you want to use Thermocouplers (top board below) or PT100 (big lower board) you have to use the official Duet Daughterboards.

If you know of a sure way to make 3rd party boards to work, please let me/us know! Not just a link to the right chip, it must be a complete solution 🙂

Photos from official Duet3D shop.

Usage in build:

1-2x Thermocoupler Daughterboards, price total €31-62 inc 20% vat!

I’m going to use Thermocoupler for my hotend and for the heated bed as they react much faster and are much more accurate than standard Thermistors. It’s also a must for hotend if you want to print over 280c as a thermistor dies at 290c or so. Thermocoupler and PT100 sensors don’t tend to die on you like Thermistors can either, so it’s a one-time purchace.

I’m still a bit undecided as to wheter I want to use a Thermocoupler or a plain Thermistor for temperature sensing in the chamber. It’s really a high price to pay for this, but lets see if I get any sponsoring for the project.

I used to use PT100 before starting to use Duet, but the PT100 daughterboards were much, much more expensive than Thermocoupler boards, so that is the only reason I use Thermocoupler. There is no actual difference in usage. PT100 should be less prone to suffer from interference, but wheter that transfer over in reality is always questionable 🙂


Price: inc 20% vat: €111,6 for Duex5
Price: inc 20% vat: €77,8 for Duex2

The Duet WiFi has 5 drivers, so you might actually do ok with Duex2 if you only want 1-2 Extruders. There used to be other differences, but not anymore.

Driver assignments

  • 1 for X
  • 1 for Y
  • 3 for Z
  • 1-2 extruders. (Can use Duex2)
  • 3-5 extruders. (Need Duex5)

The Duex2/5 boards has the following features:

The Duex2 and Duex5 has the same feature list aside from the first 4 points here, listed as 2/5:

  • 2/5 additional TMC2660 stepper motor drivers with stall notification.
  • 2/5 additional extruder heater outputs.
  • 2/5 servo outputs with 5V power and 5V signal levels, sharing control channels with the heaters, so you can use unused heater channels to drive servos.
  • 2/5 additional endstop inputs with indicator LEDs and 3.3V/5V voltage selection. These are also usable as outputs.
  • 6 additional controlled fan outputs, also usable for driving LEDs etc. The output voltage may be switched between 5V, 12V and VIN.
  • 4 uncommitted general purpose I/O pins.
  • 12V switching regulator, for generating a 12V supply for fans, LEDs etc. when the VIN power is higher than 12V.
  • 5 additional thermistor inputs.
  • Support for 2 more thermocouple or PT100 daughter boards, supporting up to 4 more sensors.
  • Optional 5V external power input for powering servos, fans etc.

Official complete feature list and comparison.

Considerations if choosing Duex2

While researching this I learned the difference between Duex 2 and 5 is only the 4 first points in the above list.

I thought Duex2 would have less fan headers as well. Last year Duex2 also didn’t come with the 12v switching regulator.

It all mean you can pick Duex2 if you don’t plan on using more than 2 extruders, but have to pick Duex5 if you plan on using more than 2 Extruders.

PanelDue 5″

Price: out of stock?
Price Filafarm; inc 19% VAT: 4.3″ €99,89
Price Filafarm; inc 19% VAT: 5″ €109,9

Lets say it as it is: You don’t really need a screen. The Web GUI is just that awesome!

I used my first Duet WiFi printer for over a year without getting around to using the PanelDue I had lying around as the Webinterface is just so super nice and lets face it, these things are really expensive as well.

Price vs performance

It really is a matter of usage preferences as they are stocked full up with features, like:

  • Buying a PanelDue gives you external SD card access (the big SD card type).
  • True serial connection, so full control of the machine (unlike cheap MKS displays which doesn’t really talk to the controller, but only sends commands
    • I mention MKS as someone has worked up an alpha firmware for them, so they might be able to work as standin for PanelDue (using serial)).
  • One awesome thing, which I havn’t seen mentioned elsewhere is how the macro’s you create in Web GUI are transferred to the display as menues and buttons completely automatically. This is awesome, and a super way to stack up on functions: ie i you often do some thing like changing filament, you can make a macro to heatup and retract etc.

Here you can see how I made a few macros to test movement on my previous printer project:

I use the display a lot on my BeTrue3D Printer due to it’s many extruders, but on my normal primary machine I only really use display to check up on temperature at a glance and such.

If that is how you use display as well, you might want to try using the machine without the LCD. Might just use an old phone or tablet, although the response would not be almost instant.


Price Filafarm inc 19% VAT €39.90

We use this sensor to ensure correct distance betwee hotend nozzle and print bed and also to take advantage of our 3-motor Z-axis for complete true autolevel function.

Since the xBot-Medium is 10mm deeper than an Ultimaker 2+ we can now squeese one of these in in front of our hotend.

It’s a combination of a normal limit switch functionality and a servo motor to raise up this switch after engaging, which was a somewhat common solution some years ago. ANTClabs combined these things an came up with the BLTouch.

Lets start by saying: Don’t buy copies. Just don’t. There is a huge difference in quality and you really want these things to work 100%.

If you look around you find a lot of people having problems.. when you dig in, you find that all the people having issues are using copies.

You also want the newest version, called SMART. You can check the difference by the sticker labeled SMART, by the tip of the probe-pin and the BLTouch also needs to have serial number printed on it, which can be verified a



Heated Bed

Price from inc VAT €54-71

I’m using a 5mm thick PEI-Coated Aluminium bed with an AC Silicone heater under.

You can pick from 2 different qualities and several different colors and even get logo or text lasered into the surface.

The price at €54 is the lowest price uses a cast aluminium plate, while you can get a milled plate at €71. I’m honestly not sure what my plates are, as I couldn’t choose quality back then.

Be sure to pick the Ultimaker 2 257x229x5mm under dimensions.

Email the owner to agree on color and price etc, and to be sure the plate comes with holes for fingerscrews… it should as he’s using my drawings for these plates <wink>

I print PLA, ABS+ and PETG on it with great results. I’ve heard people say PETG sticks too hard, but I’ve had no problems with anything.
I do have seperate glass plates I put on top of my bed when I print Nylon (glue on glass). Some PLA don’t want to stick very well to this plate unless I heat it a lot, so sometimes use glass for PLA as well.

AC Silicone heater 500w

Price from Keenovo €40,5

Specifications: 200X240mm 500W 220V build in Thermocouple Type-K sensor.
Link to same version with Thermistor instead of Thermocouple sensor.

As most everything else, there are different levels of quality, and the same goes for Silicone heaters. I’ve come to like the market leader Keenovo heaters and am using one of their heaters for the xBot-Medium printer.

They come with build in wires for the heater itself and wires for Thermistor. I’ve asked them if they can build in Thermocouple instead, which they agreed to do, so now I’m just waiting to recieve my super nice Heaterpad.

These pads comes with high quality 3M tape preapplied to one side.


Price (RobotDigg) €4

SSR10A DC-AC Solid-state Relay

There are many copies of Solid State Relays (SSR) on the market, so make sure to buy from somewhere you trust. I’ve bought SSR from RobotDigg several times, and always recieved good ones.

Make sure you buy one labaled as DC-AC as it is controlled by DC from our Duet and then in turn controll the AC input to the bed. The AMP is really only important if you use a DC-DC SSR – ie if you have dedicated DC powersupply for your bed, then the SSR must be able to handle the amount of amperage you put through it.

3x Z-Motors

Price from RobotDigg: 3x €26,7 = $80
SKU: 17HS3001-280N w Lead Screw: 280mm long, Tr8x8(P2)

Many people are using various couplers, but I really prefer using motors with embedded lead-screws. Seems the Quality Control is much better on these than the loose lead screws we can buy. At least if we don’t go out and pay a lot of money for them.

Regardless though, we need motors with embedded lead-screws to take advantage of our entire Z-distance. If you use a coupler you would sacrifice about the length of the coupler on Z axis height.

These motors comes with a POM nut, but we can really use it as they are too large to fit in there. I could have modified it some I gues, but I also really want to use the anti-backlash nuts instead, which are cheaper to replace in case of wear and tear.

Specifications of the motors

Threaded Rod NEMA17 Stepper body 40mm lenth, 280mm Tr8*8 Leadscrew and POM Nut

The NEMA17 Threaded Rod Stepper Motor has a precision Acme Tr8*8 Leadscrew coming out directly from the nema17 as a Threaded Shaft.

200 steps per revolution (1.8 deg/step)
2 Phase, Bipolar, 4 wires
Rated Voltage 2V DC
Rated Current 1.2A
Phase Resistance: 1.7 Ohm ± 10% (20º C)
Phase inductance: 4.5 mH ± 20% (1kHz 1 V rms)
Holding torque: 0.4 N.m Min.
Motor body length: 40mm

Acme Lead Screw: 280mm long, Tr8x8(P2)
Nut: POM

The Tr8*8(P2) means it is 8mm in diameter and one revolution give a travel distance of 8mm. It has a pitch of 2mm which is the distance between the raised “edges” (leads). It has 4 starts, meaning 4 seperate “raised edges” (starts).

X and Y Motors

Price from 2x €11,9 = €23,8

For X and Y axis I can use high quality 0.9 degree stepper motors, as I made room for motors with a body length of 48mm instead of the normal 40mm length available in an Ultimaker 2

It means I can use the best quality and best suited 0.9 motor I’ve been able to find for the X and Y axes, namely the 17HM19-2004S from

You might ask: Why not just use some smaller 0.9 motor? Lots of those have high holding torque and ok amperage etc etc… good question!

Problem is however, that between the pancake model I use for my extruders and up to this powerfull full size motor, they all have really high Inductance raiting, meaning they are slow!

Additional resources


Price for 17HM08-1204S from (48mm long) €11,9
Price for 17HM08-1204S from (21mm long) €9,9

I’m going to be using 2 different motor types:

  • The same large 48mm size as used for X and Y meant for 2.85/3mm filament, as they do require some extra power.
    • See specifications just above
  • I’m using the panckage nema 17 which is just 21mm long for my normal 1,75mm filament. These are more than strong enough and really a perfect fit.
    • Note: You can use these for 2.85/3mm as well, but have to give them more current than when using them for 1,75mm. Might need to put a heatsink on it as well, which is why I simply opt to use the larger motor for the thicker filament.

This small motor is awesome! Plain and simple.

You might wonder at the small size for an extruder, but by utilizing it’s awesome specifications with it’s 0.9 degree steps and powerfull 11Ncm / 15, / 1,12kg/cm holding torque inserted into my Belted Extruder v4 it’s packing an awesome package that runs smooth, silent and cool!

Specialize brackets for my Belted Extruder v4 to quickly mount and dismount them on the xBot-Medium will be released.

Additional resources

Chamber Heater

Price eBay €4,75

I’ve bought a 200w 24v heater wiht the dimensions: 140 x 32 x 26 mm. I actually bought mine from, but it’s not available anymore.

Be sure to buy a 24v version. I accidentially bought 12v at first. It’s listed on the side of them. The photo below with measurements on it displays a 12v heater.

It’s really just a small heater element so we need some fans to blow the heat up into our Chamber.

So far I’ve just set my heated bed at 140c degrees and waited for the temperature to reach 40-50c before I started printing Nylon and such.

To be honest I don’t generally need a heater, but I wanted to add one, now that i started from scratch. All materials, including PLA and PETG benefits from higher than normal temperature at a stable level, but the inclosed box design of the printer will ensure a temperature of around 40c after printing for a while, even with no lid on it.

I’ve designed a printable fan-duct which is mounted over the hole in the bottom frame part through which the hot air is exhaused through. It needs to be printed in ABS or similar to handle the temperature.
The printed parts are or will be located on the xBot-Medium Github repository and in the Thingiverse Group for xBot-Medium once I’m done with the files.

3x 30mm fans

Price 3x €1,21 = €3,63

I’ve just bought some standard so called 24v 3010 Hotend Cooling Fan for the Chamber heater. 3fans fits snugly on it, so that’s what I did.

2x 30mm fans for Printed objects

Price 2x €2,08 = €4,17

You either need 2x 30mm fans or figure out something else. Yes, it is plenty to cool the stuff you print, so no need for 2x 50mm blower fans.
You could use 2 of the fans listed above, which I’m using for the Chamber Heater, but I’ve decided to try out some “aluminium” fans instead, which are slightly more expensive.

I normally pick 12v fans for this as it’s very hard to find good quality 24v fans, and if you do, they cost way more.

It means I just put them in series:

  1. The 24v power line connects to red wire on one fan
  2. Gnd to the black wire on the other fan.
  3. The unused pin from each fan is connected by a wire or similar.
  4. Voila, you now have your two 12v fan running in series on your 24v system.

Note: not all 12v fans can do this, but most I’ve tried do it 100%.


Price: €60

The price is approximate what you might expect to find a good Powersupply at.

If you don’t plan on using Chamber heater, you can find a good Meanwell 24v 10amperage powersupply at half the above price.

If you do plan on using the Chamber Heater you should look for a 24v 18-20amperage to make sure you have enough juice.

I’m running my primary printer on a 24v 10amp PSU which is passively cooled, ie no fans, and it never even gets temperate, so no need to go overboard.

Better to get good quality with lower amp, than buy crummy 40amp psu.

You need a relatively low profile powersupply. Not much higher than 40mm.

For the xBot-Medium I managed to win an auction for a MeanWell HPR-450-24 powersupply. This translates to 24v 450w 18.8amp

I originally believed it had temperature controlled fan, but what it has is on/off fan that activates at some % load. It’s loud, so I need to figure something out to tame is.

Additional ressources

  • Dimensions: Width 105mm, height 41mm, depth 218mm
  • Datasheet opens pdf


Price for 5m: €11,25

You don’t need RGB and I’ve always just used plain white light, but I recently learned you could use and control these using 3x FAN headers on the Duet/Duex.

I went and bought 5Meters of 24v RGB LED strip. Like normal led strips you can cut these at invertal and so make the lengths you want. 5m is plenty for several different projects.

I bought mine in the EU, so I guess you can get it at half price in China.

Manual on-off rocker

Price less than €1

Manual on/off switch for our front RGB LED light. I just like to have the ability to switch that rocker to turn the off sometimes even though the lights are programably turned on.

I hope I can just use this on the GND to the LED strip, or maybe I need it on the v+ depending on what is shared on the FAN headers, but lets see!

Just look around. It’s often cheaper to buy 2 than 1 and you might get 5 at almost the same price.



Limit switches – long arms

Price for x2 €1,12

We need 2x Limit Switches with long arms for our X and Y axes.

Limit switches – short arm

Price for x3 €1,5

If you use BLTouch sensor you don’t have to install the 3 Limit Switches as endstop at the Z-Max end, but I’ll recommend that you do.

Partly as you can use it as backup system if the sensor fails and you can use them to synchronize the axes as an initial setup sequence.

Considering the price, I see it as a no-brainer to go and install them.

Front USB power out

Price €1,12

I really like having an USB power output in my 3D Printers. It can be used for webcams, powering phone/tablet or, as my favorite, powering my small USB vacumer for cleaning up the 3D Priner interior!

It requires a custom printed part which is available with the rest on the xBot-Medium Github Repository.

This video does not show the xBot-Medium, but is a video from my youtube channel showing my current primary machine.

You could also install the USB adapter intended for the rear side in this spot instead, if you’d rather go that route. I have not yet made any adapter for this option.

Rear USB for Controller access

Price €1,79

Since we have our Duet WiFi complete enclosed under our frame we need some sort of extensions to make it possible to connect to the controller via USB in case of various update and maintenance.

It’s called an USB 2.0 B Female Socket Panel Mount To Micro 5 Pin USB Male – Cable 50cm

You can route this to the front USB port instead if you like. I just havn’t made an adapter for this yet, but it should be a simple matter.


AC Power plug and on/off

Price €1,12

You can get them in a variety of models. I vastly prefer this model with build in fuse as it removes the need for an inline fuse between the power plug inlet and the internal powersupply.

You can get them with and without light and with different colors for the rocker. The cheapest model is without light and black rocker, while the red-rocker with light is a very close second.

Be sure to wire it correctly, so it’s the live wire connection going through the fuse.

GX12 and G16 connectors

Prices at around €1 each – so totalling at around €7

If you can wait for it, then order from china, as they cost a fraction of the cost. Not just a bit cheaper, but like 1/10 price sometimes!

  • 4x GX12-4
    • We can mount 4 external extruders, each of which takes a GX12-4 pin connector.
  • 1x GX16 8pin
    • We need a GX16 8-pin for our Carriage for Hotend Heater (2p), Heatsink Fan (2p), Object fan (2p), Sensor (2p).
  • 1x GX16 5pin
    • We are using a seperate GX16 5-pin for our BLTouch sensor.
  • 1x GX16 4pin
    • We need a single GX16 4-pin to hook up our heated bed: Heater (2p) and Sensor (2p)


This is just a word used to describe the combined collection of objects driving around along with the Hotend. Ie, the mechanisms themselves, fasteners, extra fans and sensors and so on.

We allready talked about the BLTouch, which is definently a part of the Carriage.
We also went over the 2 fans used to cool our Printed Objects.


Price: E3Dv6 Full Bowden €63,6

I’m going to use genuine Full E3Dv6 1,75mm hotends. I also have a (genuine) Full E3Dv6 3mm I use when printing Flexibles as flexibles in 1,75mm just aren’t viable.

You can use some other hotend if you like, but I prefer the E3Dv6 FULL 1,75mm hotend.

  • The FULL part is important as it is made up of an aluminium heater block, a steel heatbreak and a seperate aluminium heatsink. This model has very tight control over extrusion as the seperate pieces of the heatsink (and different materials) makes for very cleanly defined heat and coldzones. Retraction is normally around 1-1.5mm only, when using bowdenThe bowden tube goes down into the top of the heatsink and into the very top of the steel heatbreak. This means the PTFE materail from the bowden is far away from the hot zone, meaning you can use temperatures way above the LITE version (280 with thermistor – 500 with thermocoupler/pt100 sensor)If you by accident pull up in the bowden while the hotend is hot, nothing happens as the molten plastic can’t get up in the space between bowden and heatbreak. The added friction created by the steel heatbreak is actually a good thing as it makes for very tight filament printing control.
  • The LITE version is not recommended in my world. It is made up of a combined steel heatbreak with embedded heatbreak. This model does not have the same tight control as the FULL as it doesn’t have as effective heatsink and because the PTFE Bowden tube goes all the way down through the heatsink and rest directly on top of the Heater block.If you by accident pull up in the bowden while the hotend is hot, the molten plastic will guarenteed slip up in the space just above the nozzle, inside the heatbreak now freed from PTFE Bowden tube. It means you (most likely / often) have to take it all apart to clean it up, to get it working again!It does not have as tight control and while the FULL only requires 1-1.5mm retract, this LITE version takes 6mm! This long retract is required as it does not have as sharply defined hot and cold ends, so lots of “internal stringing” is going on, which in turn needs to be pushed out of the hotend after each retract = not as clean print. They still print better than most other hotends, don’t get me wrong, but not compared to the FULL!

The price includes lots of parts. You can view all under what’s in the box, from where I’ve taken below photos.

Some parts to mention: The nice Steel heatbreak and aluminium heatbreak with the bowden coupler, full kit with fan shroud, fan, blue silicone caps, thermistor and 24v (30w) heater.

There’s also a single 0,4mm standard Brass nozzle included.


Price €12,5

I’m not a huge fan of Thermistors. Both because they can break, but also because they aren’t that accuracte and I print at higher temperatures than they can go (300+), meaning I’m using a Thermocoupler sensor instead.

E3D has begun selling these, which works fine with the Duet. Duet sell these same Thermocouplers from their store now as well.

It does require you to use a Thermocoupler daughterboard for the Duet, so it’s a pretty big extra expense. You can always add this later.

Plated Copper Nozzle

Price inc. vat €11,75

In my world these things aren’t even optional. I know I know, it’s a big extra expense on top of everything else, and sure, you can wait before buying this.. ok it might be prudent to use the included Brass nozzle untill it’s worn down, but this copper nozzle is just so extremely much nice than the standard Brass nozzles.

They were created for ultra high temperature, but lets take this note from E3D:

In addition to high temperature performance these nozzles have an advanced nickel based plating, considerably reducing the adhesion of plastic to the nozzle. This is great for everyday filaments keeping things clean and shiny, but is particularly important at temperatures above 300°C where a silicone sock can’t be used.

And that non-stick feature is what makes it so awesome. If you have printed PETG you’ll cry tears of joy when trying one of these as stringing is just so much easier to manage – also helps on all other materials.

Don’t go and buy the Copper Heater Block as it will really only make your heating up take much longer and suck out €26,4 of your pocket! .

I honestly beleive them to be not at all relevant when using the Silicone Socks on the standard Aluminium blocks, which are included.

Yes, I own one of these and I really don’t much like it. I have not seen any advantages over normal Heater Block. Right now I’ve mounted it on a hotend I use with the TL-Feeder for 2x filament input as it migt be better when hot and cold filament are constantly changed, but I havn’t tested it much yet.

40/80w Heater Cartridge

Price inc VAT €5,4 for 24v 40w
Price inc VAT €6,73 for 24v 80w

What’s this now? Well, the included 30w heater with blue wires is just really slow and in some instances you will find it having problems keeping up the temperature. Especially when printing semi fast.

I strongly recommend buying the 24v 40w instead for this printer and if you tend to print very fast, you might even opt for the powerfull 24v 80w from

Just remember to do a new PID tuning if you change your heater or sensor.

Untill next time!

Wow, that was one long post! Next post is going to be all about the inert parts of the printer.

Posted on 15 Comments

xBot Medium – A new printer is baking!

Wow, been quiet for a while, and guess what, I’ve been busy working on completely new printer build, using the best I could find from the Open Source world and added on features I’ve been missing, like true autolevel and front hinged printbed in addition to the back mounted Z-stage on the Ultimaker machines.

  1. Ultimaker as primary source
  2. Design goals and specifications
  3. What can be improved on this package
  4. Dimensions of the xBot Medium next to Ultimaker 2+
    1. Dimensions
    2. Build Volume
    3. Printer and Printing Properties
    4. Materials
    5. Requirments
    6. Print Surface
    7. Controller Type
    8. Motor
    9. Firmware
    10. Powersupply
    11. Chamber
    12. LCD and SD
  5. Compatibility
  6. Fine Touches
  7. What’s next?

Note: Please note that some details has been changed during the design and buildphase. 

Ultimaker as primary inspiration

There, I said it. Ultimaker machines. This means I’ve been inspired by the Ultimaker 2 Open Source panels and did a complete workover to make it all match my needs. In all honesty it looks like a normal Ultimaker frame at first look, but when digging in the main left-over features are the hidden nuts and slot in system by the individual plates. Even those are placed totally different, so it’s only really the concept used. And of course the material used; 6mm Dibond.

Of course; the construction method is one of two things making the Ultimakers what they are, so it would be silly to change these for something else!

Design goals and specifications

The second thing making Ultimakers the best, is how they have, in my opinion, the best XY design of all Open Source printers on the market. They do not risk skewing the axes when changing direction and have build in self-adjustments.

In my optics it’s the best as it’s rock solid, simple to design and setup and requires next to no calibration or maintenance. You can move the printers around all day long, hook it up and print without any adjustments.

I even shipped one of my Ultimaker 2+ machines (clones) across the country. The buyer opened the box, hooked it up and printed right away. No calibration or adjustments needed! Even did the same trick a few weeks later, so yea, they really are rock solid and requires next to no calibration. Except for bed level!

The way the XY is incorporated into the very sleek case with hidden nuts, makes all axes very sturdy, which contributes to the unmatches printing quality of these printers.

During the designface I managed to make room for 48mm deep Nema 17 motors, which meant we can use high quality 0.9 degree steppers (17HM19-2004S) now! Previously we could only get 40mm motors where all 0.9 degree motors (I have ever seen) has very high Inductance mH, which really must be under 4mH to get acceptable performances.

All in all it just makes for an incredible appetizing package with both functionality and visual design at the fore.

What can be improved on this package?

There’s not much to change on the physical level, but the Z axis has always been the achilleius heel of the Ultimaker printers. It’s only fixed at the rear side and while the the Z rods has moved up in size from 8mm to 12mm, which improved a lot, the stability is just not as good as it could be.

I’ve previously fixed the Lead-screw at the top, which helped stabilize the Z some, but the leadscrew is not meant for this kind of usage. Especially bad if using a poor quality lead-screw which isn’t all straight.

I also created a method of using an Anti-backlash nut. Later on in the UM2+ and UM3 machines something similar appeared in the form of the T8*8 Delrim nut.

The Brass version of Anti-Backlash nut has become very cheap and more popular as it’s a drop in replacement to the normal Brass nut.

I’m a big fan of these Brass Anti-backlash nuts as they are cheap, drop in replacements and they compensate for both bad quality you might have in your lead-screws (and backlash nuts) and for the wear the nuts especially are going to be subjected to over time. Using regular nuts the gaps between the ridges steadily increase with wear and tear, leading to inaccuracies, especially when using z-hop, but the spring compensates for this kind of wearing down.

I’ll be using 3 of these Brass Anti-backlash nuts for the xBot Medium

To truly overcome this challenge I wanted to add 2 extra Z motors with additional z rods at each front corner, for a total of 3 Z-motors and 4 Z-rods, to make it more stable and also to build in the option for true auto-level function.

All without making the machine huge and bulky!

Some challenge, uhh?

Dimensions of the xBot Medium next to Ultimaker 2+

Note/Disclaimer: All info and images of/about the Ultimaker is from Ultimaker 2+ specificatiosn page and the Printer Comparison Page. They belong to Ultimaker and all credits goes to them. I am in no way affiliated with Ultimaker and I solely show the info here to show where I came from.

I have tried making the below table to illustrate and explain the changes and differences between the super nice Ultimaker 2+ and the xBot Medium I’m building.


Ultimaker 2+

xBot Medium


Dimensions with bowden tube
and spool holder:
34,2cm (width) x 49,3cm (depth) x 58,8 cm (height)
(13.5 x 19.4 x 23.1 inches)
11.3 kg (399 ounces)

Dimensions with extruder, bowden tube and spool holder
36,8cm (width) x 50,3cm (depth) x 42,8cm (height with 1,75mm)
Note: Height is up to 20cm more if using 3mm filament

Build Volume

223 x 223 x 205 mm
(8.8 x 8.8 x 8.1 inches)

223 x 223 x 205 mm
(8.8 x 8.8 x 8.1 inches)

Printer and Printing Properties

1x 2.85mm Geared Feeder

Open filament system

180 °C to 260 °C
Olsson’s Block
Up to 4x Belted Extruders v4 and 1x Titan or similar in any combination of 1.75 and 2.85mm

Open filament system

180 °C to 500 °C

E3Dv6 Full-MetalHeated Chamber


PLA, ABS, CPE, CPE+, PC, Nylon, TPU 95A, and PP  PLA, ABS, CPE, CPE+, PC, Nylon, TPU 95A, PP and Breakaway (all materials)


Ultimaker Cura or other Slizer

File transfer: Standalone 3D printing from SD card (included) or USB

Ultimaker Cura or other Slizer

File Transfer: WiFi drag and drop for standalone 3D printing.

Optional printing from SD card if the optional PanelDue is in use.

Print Surface

Heated Bed: 100w (24v 5a) 2mm aluminium heater.

Print Surface: 4mm Borosilicat/Tempered Glass. Optional Fiberplate FlexiPlate etc

Guided leveling of buildplate

Heated Bed: 500w (240hz AC (Mains) via SSR) Silicone Keenovo heater under 5mm milled Aluminium plate.

Print Surface: PEI-Coated Aluminium plate. Optional 4mm Borosilicate glass or Fiber plate etc.

You can use Ultimaker 2 heated bed if you so choose. Same mountpoints.

Full true automatic autolevel.

Controller type

Ulticontroller – 8bit

5x a4988 drivers and 3x PT100 amplifiers.

Controller Duet WiFi – 32 bit

5x TMC2660 drivers.

Thermocoupler Daughterboard for 2 Thermocouplers.

Using Duex2 or Duex5 for full use of autolevel and multiple extruders.


1.8 degree motors for XY.
Single linear motor for Z
1x 0.9 degree motor for Extruder
High quality 0.9 degree motors (17HM19-2004S) for XY from
3x linear motors for Z for true autolevel function
1-5x motors for extruders.
For 1.75mm filament: 17HM08-1204S
For 2,85/3mm filament: 17HM19-2004S


 External Meanwell 24v 15.8 (black brick type) Internal Meanwell 25v 18.9a with temperature controlled cooling.


 Ultigcode/Marlin firmware  RepRapFirmware


 External Meanwell 24v 15.8 (black brick type) Internal Meanwell 25v 18.9a with temperature controlled cooling.


100w Temperature controlled Heated Chamber
Door in Dibond with acrylic window

LCD and SD

 Small LCD control panel with SD card  Optional PanelDue color touch display with SD card.
options: 4,3″, 5″ or 7″


To the best of my abilities I’ve kept it as close to the Ultimaker 2 as I could. This means most things can be directly reused, if you have build a previous UM2 clone, like belts, pulleys, heated bed, finger screws, screws/nuts , XY endstops, all the bearings and the thick 12mm Z rods.

Also using same Z motors, although the xBot is using 3 of those.

You can even reuse your extruder if you have a Titan or UM2 extruder, allthough I do recommend using my Belted Extruder v4 as it’s way more quiet and performance just as well.

Fine Touches

In the back plate there are holes if you want to use an extruder as in the normal Ultimaker machines. I havn’t sunk the holes all the way through for Titan extruder, but they are marked up on the files, so it’s easy to remidy it.

Same goes for the various Optional settings in other plates like front USB plug, manual LED on/off switch and the two optional mount holes for PanelDue, if you choose to use one.

Instead of full wire draws I’ve opted to use the Aviation plugs in sizes GX16 for the wireharness up to the Carriage for Heater Cartridge, Temperature sensor, heatsink fan and printed object fans. A second GX16 for the BLTouch or some other sensor as well.

I’ve used 4x GX12 4pin Aviation plugs for the 4x top mounted Extruders on the rear side, and also a single GX12 4pin connector, installed in the bottom part of the frame, next to the Chamber heater vent, for the 4 wires up to the heated bed.

Here are 2 photos from a different machine to illustrate how the GX12 plugs will be placed on the rear side. All the wires going through on the photos here, will be replaced with the larger GX16 Aviation connectors.

What’s next?

I have ordered linear motors and parts from Robotdigg, quality steel rods from Dold Mechatronic and have put in an order for the Dibond plates here in Denmark with a private person, so can’t link to him… so now it’s just waiting time for me over Christmas.

The X and Y motors are high quality 0.9 degree motors (17HM19-2004S) from OMC-Stepperonline which can fit in there due to room for 48mm motors compared to Ultimaker’s room for 40mm motors only.

.. or.. Actually I’m busy working on creating documentation for a Github page for this project where alle the relevant files will be publicly available.

I have in fact allready created a Repository for the xBot Medium on Github and started putting various files and info in it, so please stay tuned.

The STEP files for the side panels will not be made publicly available untill I’ve tested them.

Stay tuned, here, maybe on my Facebook channel and on the Github repository as well 🙂

Merry Christmas to everyone 🙂


Posted on 2 Comments

Duet WiFi/Eth – Use M584 to autolevel or sync Z-axis using 2 or more motors

I originally planned to use 3 seperate Z-motors for my BeTrue3D Printer project back last christmas, but since I’m using some special hollow Nema 17 and bespoke 1204 Ballscrews + top-fixing blocks the price would be like $100 for one extra motor on the Z-axis.

The money was just one concern. One which I could have overcome (by waiting some) if I wanted to, but it would also cause the printer to be much deeper without giving me larger printing area, and so it wouldn’t fit on my desk.. which was a primary requirment!

A rather big issue was how the RepRapFirmware at the time did not support this form for autolevel and there was no date for when it might be available.

Anyway, here’s a blog-post about it. I’ll at some later date make some youtube video to show how it works, so stay tuned! 🙂

  1. Independent Z-Motors
  2. Is this autolevel?
    1. Autocompensation
    2. Autolevel
  3. My usage of 2x Z-motors
    1. What am I going to do here exactly?
    2. Why? Is it even needed?
    3. How is this going to work in practice?
  4. Motor remapping for dual Z
    1. Physical Drive Connection
    2. Use M584 to remap the drives
    3. Configure Drives
    4. Endstop setup
  5. Example setup for non-duex user
  6. New Homing files

1) Independent Z Motors

It all ended up with me using 2 independent Z-motors.

I started out driving both from the same Z-driver but installed a limit-switch at each motor, which would be at Z-max, and planned how to trigger them using identical screws on both sides, mounted down through a threadded m3 hole in the Z-gantry for just this purpose.

The screws can of course be turned some, if fineadjustment is needed. I used some Loctite Threadlocker (open UK Ebay) to make sure it didn’t rattle loose.

2) Is this autolevel?

You might ask if this is autolevel by now, as it looks completely different than what you are used to see with a probe or sensor or similar..


We normally see some sort of sensor near the hotend, which probes places around the bed and then compensate according to how uneven the printbed is.

This sort of automation is more correctly called autocompensation as it can compensate for various erros, most often just for a non-flat printbed though.

The compensation for non-flat surface is achieved by compensating for these errors by gradually, over the first xx layers flattening out the area on which it is printing. Ie, some areas are printed with a thicker layer than on others. After xx layers it can start printing normally

There are more to this, and different methods to compensate for non-square frame and axes etc, but this is beyond this blog-post


Autolevel on the other hand is when one or more sensors determine the posistion of the printbed and by using 2 or more motors makes it completely level compared to the XY axes.

You would want to use 3 or more motors to make most out of this Autolevel function.

A short note on using Autolevel: functions with RepRapFirmware: The M320 autolevel gcode is not currently implemented in the firmware, and seems it’s not going to be either, as the current functions G29-G32 is fullfilling the same functions more or less. Currently only Repetier firmware is making use of the M320-322 gcodes.

3) My usage of 2x Z-motors

As I talked about previously I selected to only use 2 Z-motors and the function to use these for Autolevelfunctions were recently made available in the RepRapFirmware via the M584: Set drive mapping, so now I’m in business!

In all fairness, the M584 has been around for some time, but I’ve been waiting for a finished sort of system for autolevel, which, as it turns out (see note above) is not going to be implemented, so here I am!

What am I going to do here exactly?

I’m going to home my Z-axis to Z-max and make each motor make use of it’s own endstop in order to make sure each end of the Z-axis is synchronized.

Why? Is it even needed?

In my optics, yes! Asolutely. Any machine using more than 1 z-screw should have this implemented.

Problem with multiple independent z-motors, yes, and even multiple axes driven by a single belt, is that one or more of the axes might get turned a bit. It can happen if you accidentially push on the plate or turn the screw, if you happens to move the z faster than it likes and one motor or screw skips a step or belt etc.

It might also be that your axes aren’t 100% to begin with, so you need to synch them up before each print, which you can do with this method.

How is this going to work in practice?

I’m going to use 2 different drivers for my Z-motors and use the associated Endstop connectors for these drivers as well. This is accomplished by using the M584 to define virtual axes.

It means we include both Z-motors in the original Z and then make a virtual axis for one of these motors in order for them to be able to move as one, but also make use of each motors’ own limit switch in order to make sure they are synchronized.

Motor remapping for dual Z

Before we get down to using M854, we need to use the M569 to define/check our physical setup.

Physical Drive Connection

My setup/explanation:
  • Drive 0-1 as X and Y, which are standard.
  • Drive 2 as left motor, which is normal Z
  • Drive 3 as Right Z-motor, which is normal Extruder0
  • Drive 4 – Standard Extruder1 – I am not using this, as all my extruders are on Duex5
  • Drive 5-9 – My extruders on Duex5

; Define Drives
; Physical Drive connection
M569 P0 S1 ; Drive 0 X
M569 P1 S0 ; Drive 1 Y
M569 P2 S0 ; Left z-motor (original Z)
M569 P3 S0 ; Right z-motor (Ex0)
; M569 P4 S0 ; EX1 - unused
M569 P5 S1 ; Extruder0 - Physical Tool 0
M569 P6 S1 ; Extruder1 - Physical Tool 1
M569 P7 S1 ; Extruder2 - Physical Tool 2
M569 P8 S1 ; Extruder3 - Physical Tool 3
M569 P9 S1 ; Extruder4 - Physical Tool 4

Use M584 to remap the drives

To make this all work, we need to tell the controller how we have conencted our physical connectors:

How to do this:
  • We are starting the new line, which we place under our M569 section above, by issuing the M584 gcode.
  • Then simply go through and use the definitions we made above.
  • X0 – Using Driver 0 as X
  • Y1 – Using Driver 1 as Y
  • Z2:3 – This is the new part, where we define that we are using both Driver 2 and 3 for our Z. This means both are used when hitting the move Z buttons.
  • U3 – We assign driveletter U to our second Z motor, using Drive 3.
    • When using virtual drivenumbers we can’t just come up with some random letters.
    • As of firmware 1.19, we can use UVWABC letters – in that order!
  • E5:6:7:8:9 – Defines how all drivers on the Duex5 are Extruders.
  • P3 – This defines the number of visible axes in our GUI, starting from the first, meaning the visible ones are: XYZ, while the 4th axis U is not shown up in the GUI.
    • You might want to have U visible at first in order to verify your new setup.

; Motor remapping for dual Z
M584 X0 Y1 Z2:3 U3 E5:6:7:8:9 P3 ; Driver 0 For X, 1 for Y, Z=2:3 U=3, Extruder 5-9

Configure Drives

Next step is to configure our machine to use 2 drivers instead of just 1 and to add the new U drive to our Drives configurations.

What you need to do now, is setup microstepping, steps/mm and all other such settings as if you have 2x Z-drives and 1x U-drive

Endstop Setup

Last item in our config.g we need to change is the Endstop configuration. Contrary to above, we do not define a second Z here (As we only have 1 z endstop), but instead just add the U endstop. It’s important that Z and U homes to same end; in this case at Z-max.

Example configuration for non-duex users

This section is a cleaned up section for all the non-duex owners, so you don’t have to sit and sort out my Duex5 config.

Just use the explanations for the Configure Drivers and Endstop Setup just above here.

  • Drive 0-1 as X and Y, which are standard.
  • Drive 2 as 1st Z-motor, which is normal Z
  • Drive 3 as Extruder0
  • Drive 4 as 2nd Z-motor – this is normally Extruder1

; Define Drives
; Physical Drive connection
M569 P0 S1 ; Drive 0 X
M569 P1 S0 ; Drive 1 Y
M569 P2 S0 ; 1st z-motor (original Z)
M569 P3 S0 ; Extruder0
M569 P4 S0 ; 2nd Z-motor - Normally used as Extruder 1


  • X0 – Using Driver 0 as X
  • Y1 – Using Driver 1 as Y
  • Z2:4 – This is the new part, where we define that we are using both Driver 2 and 4 for our Z.
    • This means both are used when hitting the move Z buttons.
  • U4 – We assign driveletter U to our second Z motor, using Drive 4.
    • When using virtual drivenumbers we can’t just come up with some random letters.
    • As of firmware 1.19, we can use UVWABC letters – in that order!
  • E3 – Defines Extruder0 as our extruder.
  • P3 – This defines the number of visible axes in our GUI, starting from the first, meaning the visible ones are: XYZ, while the 4th axis U is not shown up in the GUI.
    • You might want to have U visible at first in order to verify your new setup.

And the code to copy/paste:

; Motor remapping for dual Z
M584 X0 Y1 Z2:4 U4 E3 P3 ; Driver 0 For X, 1 for Y, Z=2:4 U=4, Extruder 3

New Homing files

It’s important we remember to create new/modify our homing files to match our new setup.

In particular we need a new Homez.g and a modified Homeall.g.

And the code for easy copy/paste:

G91 ; Relative mode
M584 Z2 ; Split Z into 2 (Z+U)
G1 Z250 U250 F2000 S1 ; Move up to 250mm in the +Z direction. S1 to stop if endstop is triggered
G1 Z-2 U-2 F600 S2 ; Move 2mm in the -Z direction - (I'm not sure what S2 is for?)
G1 Z3 U3 F100 S1 ; Move slowly 3mm in the +Z direction, stopping at the homing switch
M584 Z2:4 ; Join U to Z again (pay attention to drive numbers used)
G1 Z-5 F3000 ; Move back again 5mm in the -Z direction
G90 ; Back to absolute mode

You need to update your Homeall.g files accordingly as well.

Posted on Leave a comment

Using Duet with Cura and + Diamond Hotend and Firmware Retract

Note: This post is not complete, and the temperature settings in startup.gcode is not correct for use in Cura – I am working on a new, updated, more comprehensive Guide to using Cura for muticolor printing.

In my ongoing project for my 5way Fullcolor Diamond Hotend I’ve had some issues getting Cura to work in the first place and latter again to make it run using Firmware Retract, which is required to make all 5 extruders retract at the same time.

I finally made it all work yesterday, so here comes the setup-recipy for Cura users, once an for all 🙂

Inherent config changes needed for all Cura users using Duet:

Duet is using Relative Extrusion as standard, which Cura does not support. It shows itself in massively overextruding when printing, while at the same time extruding normally when calibrating extruder using Web Interface.

  • Need to comment out M83 in config.g + Use M82 in cura startgcode.

Adding Diamond hotend and we need more changes:

Firmware Retract and Volumetric

Now, in order to use Firmware Retract in Cura we need to use either the Ulticode or RepRap (Volumetric) Gcode Flavor in Machine settings.
We can’t use the Ulticode one, as it removes the startup.gcode option and the second one requires Duet to use Volumetric.

Duet only just supported Volumetric extrusion in 1.19RC/Beta, so you need to upgrade firmware if you havn’t allready.

Extra special important note: Be sure to read upgrade instructions if using 1.18 or earlier as you can not do it through web interface!

To use Volumetric:
We need to use Firmware 1.19 or newer + use the this in config.g

M200 D1.75

To use Firmware retract
Enabled using through config.g

M207 S1.5 F3000

Now it all works but Extruding manually using web interface after enabling Volumetric extrusion via M200 now extrudes only 4/10 though.. guess it’s to consider a firmware bug.


  • Need to uncomment M83 in config.g + Use M82 in cura startgcode. (This is always the case when using Duet with Cura)
  • Use Duet Firmware 1.19 or newer – Be sure to read upgrade instructions
  • Cura – Use RepRap (Volumetric) Gcode Flavor in machine settings – to support Firmware Retract.
  • Duet Config.g – Enable Firmware Retract using M207 S1.5 F3000   – Diamond hotend retract at 1.5mm is good.
  • Duet Config.g – Enable Volumetric printign using M200 D1.75
Posted on 5 Comments

BLTouch on Duet Wifi & RepRapFirmware

The time has come to setup BLTouch on my system.

I’m going to use Duet WiFi + Duex5, but I’ll post details about using it without the Duex as well.

Since I do use Duex5 and because of other considerations explained in this blog-post, I’ve decided upon not following the pin selection most often mentioend other places. I do however try to explain my reasoning and how you can use it to customize your own setup.

Please let me know if you have comments or inputs. I do take all comments as a positve thing, also potential corrections to my writings 🙂

When I feel I have everything I need, I’ll boil down on this post and use it as a “how-to” for both duet3d wiki and


Physical overview

First a short explanation on how a BLTouch sensor works and what it is: The BLTouch sensor is in the category of Servo sensors, meaning it’s using a mechanical servo mechanism to raise and lower the metal pin to do the testing.

Quote from the maker: ANTCLABS(A&T)

  • BLTouch is an auto leveling sensor for 3D Printers based on open-source.
  • Simple, Smart, High-precision
  • It could work with any kinds of bed materials, such as glasses, woods, metals, and so on.

Probe Connector role

At first the Duet Wifi and RepRapFirmware didn’t support servos, but focused on other sensor types like their own IR-sensor.

It means the description on the WiKi can be a bit confusing for us non-electronical centric people as they talk a lot about using the Probe Sensor, which just doesn’t apply fully to the BLTouch Sensor. (To be honest I get more confused by reading this page, so don’t feel bad if you are like me!)

They have added a BLTouch section now though, which helps a lot. Thumbs up! 🙂

It means we can’t just use all the pins from the Probe connector as the sole connection on the Duet WiFi, but only use 2 of these pins in the Probe Connector, GND and IN, to register the actual signal from the BLTouch. We need to use PWM connector for the other 3 pins from the BLTouch.

The Probe Connector is the one to the right in the photo. Placed next to the LCD connector to the left of it.

The red wire is IN and black wire is GND

Note: You might notice the small 480Ω resistor crimped into the connector here. More on this later.

Using expansion PWM port for Servo

The 3 remaining wires from the BLTouch are there to control the Servo Pin inside the BLTouch.

Since we have a Duex board we are going to use 1 of the 5 ports labeled as “PWM” ports on the board itself, but listed as “Shared with servos” on Duex2/5 main features page.

When looking at the Wiring Diagram, the connectors are labeled as “PWM / Servos“.

Physical Connections

Lets start by looking at the 2 wires for the Probe Connector on the Duet Wifi/Ethernet.

2-Pins for Z signal

We are going to connect the 2 wires labeled Z (white) and GND (black) on the BLTouch and connect to the matching pin on Duet WiFi Probe Connector, as shown in the diagram.

Note: Your wires might be colored differently. Especially if you use a counterfit version like 3DTouch.
My version of the BLTouch is an old Classic version.

5v to 3.3v logic level conversion

The BLTouch is as default configuring using 5v logic. It means we have to make sure we set it up to run as 3.3v logic instead. Don’t worry about not grasping what 3.3v logic means, as it’s really not important to know what it is, only how we hook up our sensor.

If you have an old Classic BLTouch (as I do), you need to either solder or crimp in the included 480Ω (ohm) resistor between the 2 wires for the Probe Connector.

I crimped them into my connector. Mine came with a 480Ω and 10kΩ resistor.

I do not know why the 10kΩ was included.. anyone know?

If you have a new version of BLTouch with serial number, you just need to cut the solder away between 2 solder pads, as shown here:

3-Pins for Servo

The 3 left over wires on the BLTouch are GND (brown), Red (5v) and Orange (control signal)

If you do not own a Duex expansions port and instead use the pins on the Duet Wifi, you connect as shown on this diagram:

You can use a different Heater-pin, just make the necessary adjustment in your configurations.

  • GND ( G, Brown) to pin 2 on Duet WiFi
  • 5v (5v, Red) to pin 1 on Duet WiFi
  • Orange (S, Control signal) to pin 31

Some info on the Duet Wiki where they use pin 8 instead of my 31. They are also using different colors than my BLTouch, so be sure to check on your own model!

Note on below wire colors: I did not have any brown (used black) or orange (used white) cables, so go by the labels near the connectors, or remember my choices.

The difference between Pin 8 and Pin 31, is how Pin8 is assigned Heater 3 and Pin31 is assigned Heater 7. I picked the last available, in case I later wanted to actually use Heater 3 as a heater. I’m never going to use 7 heaters, and Heater 7 connector also made for nicer wiring in my case 🙂

Note: It can be confusing how the numbering on PWM# and E# doesn’t follow each other. Reason for this is, how the Heater numbers (E) starts with E0 and E1 located on main Duet WiFi board, while the PWM ports are either starts with PWM1 or PWM0 is somewhere not known to me.

The above diagram is a small part I made out of the full diagram.

Firmware Configuration

It’s time to configure our firmware in order to use the BLTouch sensor we just connected. There is some good information on the Connecting a Z probe – BLTouch on the Duet3d wiki.

Disable heater

As shown in the warning in the above diagram, the PWM channels are shared with the heaters, so we need to disable the relevant heater.

We are using the PWM_5 connector, which is the 7th Heater.

We disable it using the M307 Gcode command and setting A, D and C to -1 in our Heaters section in Config.g file. Setting them to -1 means they are disabled.

M307 H7 A-1 C-1 D-1

Note: change H7 to whatever heater you need to disable according to how you choose to wire it up.

RepRapFirmware 1.16 and later allow the PID controller for a heater to be disabled by setting the A, C and D parameters to -1. This frees up the corresponding heater control pin for use as a general purpose I/O pin.

Set Servo Position

Now we need to configure the position of our Servo Pin, which we do using the M280 Gcode command.

Deploy Probe

In order to do so, we put the following into our deployprobe.g file. If you do not have this file, you just hit New File in the System Editor where all the other config files are located and create it.

Insert the following into the file, where the P-number corresponds to our H-number above.

M280 P7 S10

S10 is the “angle” the PIN is put in to engage. You can read more and also see a table of most of the expansion pins. When dealing with BLTouch the engaged position is at angle 10.

Note: In the Duet wiki it is listed to include a Invert parameter: I1 at the end as well, but mine doesn’t work when used.

Retract Probe

Next we need to configure how we retract the Servo Pin in the BLTouch. These settings are configured in the retractprobe.g file. Create it the same way as before if you don’t have this file.

M280 P7 S90

Once again, the P-number corresponds to our H-number while S defines the “angle” to put the probe into. When dealing with BLTouch the retracted position is at angle 90.

Note: In the Duet wiki it is listed to include a Invert parameter: I1 at the end as well, but mine doesn’t work when used.

Configure Endstop Section

Set Z-Probe type

Now we need to setup the Probe Type to Type 5 in our Endstop section in the config.g file using the M558 command.

P5 (from RepRapFirmware 1.14) selects a switch (normally closed) for bed probing between In and Gnd pins of the Z-probe connector (Duet 0.8.5 and Duet WiFi).

Settings legend/explanation:

Overview of what the different parameters means and do:

  • P# = Mode/Type of probe – P5 is for bed probing between In and Gnd pins of the Z-probe connector.
  • XYZ# = 1 use probe for this axis. 0 do not use probe for this axis
  • H# = Dive Height of the Servo pin. 5mm is normal for BLTouch
  • F# = Feed Rate mm/min
  • T# = Travel speed to and between probe points (mm/min)

It all means that we insert the follow line for our new Z-Probe, defining the Type and usage settings.

M558 P5 X0 Y0 Z1 H5 F120 T6000 ; Set Z Probe to type Switch or Digital output where Z probe connector is used. Used for z only.;

  • Put it in the Endstop section in config.g file:

Set or Report Current Probe status

Next we need to setup how the Probe behaves, using the G31 command.

Settings legend/explanations

  • Z# = Trigger height. 1.5mm is normal for BlTouch
  • P# = Trigger value. 25-100. Lower it if nothing happens.
  • XY# = Placement of probe relative to your nozzle. Called offset. In mm.

It means we set trigger value to 50 (don’t worry if it means nothing to you), define where the probe is placed in realtion to our nozzle and the trigger height of the Probe Pin.

The Z value is the Z-offset. Used to tune the distance between trigger location and nozzle. Higher offset value and you get the nozzle closer to bed.

G31 P50 X-25 Y38 Z1.5; Set Z probe trigger value, offset and trigger height

  • This line is also placed in the Endstop section in the config.g file.
  • Just place it under the above M558 line.

G32: Probe Z and calculate Z plane

The G32 Gcode Command can be used to define 3 or more probe points. I am only using mine as a Z-min endstop with 1 point, so not going to use this feature for now.


Relevant Gcode commands:

Posted on 2 Comments

BeTrue3D Printer build part 9 – LEDs – 12v from 24v Duex5

Finishing our LED installation

We previously installed front LEDs, including an on/off rocker.


Back then, I only had 12v LED strips and as I use 24v on this system, I needed to get 12v from somewhere.

In order to test it worked, I used a small fixed 24v to 12v step-down buck-converter and used some double-sided tape to stick it in place below the Duex5 as shown here:


Use Duex5 to get 12v

As far as I know the Duex5 (also in Duex2) is the only Controller or Expansions -board for 3D Printers with build-in 12v switching regulator, which means you can easily get 12v even if you use a higher voltage to power your machine (VIN Power – opens Duet3d Glossary)

In order to activate this 12v switching we need to:

  1. Put a jumper on the pins marked with nr. 1
  2. Check the FAN jumper nr. 2 is placed on the 12v position
  3. I’m going to use the FAN3 Connector marked with nr. 3 for my LEDs

In case you have difficulty seeing the colors, the + wire is to the right side of the 2-pin connector, and – wire on the left side.

Image is part of the original conenctions diagram on Duet3D wiki.

You can also see the full diagram here:

Configure LED in firmware

We really just need to open the Config.g file and insert a small line under the other fans in our FAN section, like this:

M106 P3 S1; Set fan 3 value for our LED to on.

It really just put FAN connector 3 on full power. We can put it on half power by setting S to 0.5 instead of 1, or use the 0-255 range if that’s more to your liking.

It also means you can control it using Gcodes to do different things like turning LED on when a print starts and turn it off when a print job ends or what ever you like.

All done

Here you can see the new jumper on nr 1, set jumper on nr 2 and our LED connector on nr. 3

Posted on 2 Comments

BeTrue3D Printer build part 8 – Carriage for 5way Diamond Hotend

Putting the 5way Diamond together.

Aside from this one having 5 heatsinks and the previous version had 3 heatsinks, the method of assembly is the same.

I’m using some high temperature paste to coat on the Heater Cartridge, and fill up the hole for the Thermistor (I’m using a Thermocoupler).

The 5way Diamond will ship with a 60w heater cartrdige, but since they havn’t landed in Denmark yet, I’m using a 12v 30w E3D cartridge which will magically turn into a 60w 120w heater as I’m running my BeTrue3D Printer as a 24v system.

I have contacted E3D to hear about quality of their cartridges – wheter it can sustain the increased voltage/current through it. I can limit the voltage in firmware and hit the recommended 60w, but still need to hear from E3D wheter it’s ok or not.

I’m coating the heater cartridge in the paste, and insert it into the middle hole. At first I had no paste coming up, so I applied a good deal more and inserted it once again, while rotating it.


This time I had a deal of excess paste coming up, which I cleaned away using a cotton tip, and then inserted into the hole for thermistor/thermocoupler.

Putting the wires through the heatbarrier and opted to fixate the Thermocoupler wires onto the Heater wires

Screwing on the individual heatsinks, while making sure the Thermocoupler and Heater Cartridge stays in place.


Attaching 5way Diamond to Carriage

I’m first going to put a ø2,5mm drill through the holes I made to mount my 40mm fan. I then tapped the holes with an m5 tap to make it easier to mount the fan later on.


Afterwards I start by inserting a plastic zip-tie to hold the cables in place, once I clip on the entire assembly onto the Carriage.

Carefully putting the wire through the Carriage, without uprooting the Heater and Thermocoupler, and clip on the assembly. Making sure all 5 heatsinks has clipped on.


Securing the cables in place. The insulation is taking too much space, so had to remove some of it.


Once I’ve fixed the cables and made sure the heatsinks are all in place, I use a zip-tie to fasten each heatsink to the Carriage.

Attaching a fan

Normally you might use a 50mm fan, but I had this nice 40mm 20mm thick fan lying around, and made my carriage to fit.



Fasten Carriage to Y Sliders

Finally got the 5way Diamond hotend mounted on my printer and put the bowden tubes in it 🙂

Struds and wirework

I’m printing some struds to fasten the two X sliders on both sides as I write this, which are needed to make it work.

Here’s some images of the struds and some tidying of the wires and bowden tubes.

Future changes

I think I’m going to combine the Carriage with belt fastener. Not entirely sure yet.

My overall plan has always been to make a Carriage system where I can drop in change between the 5way Diamond and and E3D hotend and such, but not entirely decided yet, how it should work.

Regardless though, I need to make some mounting points for fans on either side of the nozzle.

Posted on Leave a comment

BeTrue3D Printer build part 7 – CoreXY and Front Panel

CoreXY Setup

I’ve build a bunch of printers by now, but this is my first CoreXY. I had read quite a bit about it, and also looked at a lot of photos trying to figure out some nice ways to put on the belts.

What I entirely missed was the requirment that all belts, aside from the rear/far right on my printer, must meet the bearings at a straight angle, and leave it at a straight angle as well, which mine did not do (still don’t).


This led to some extra hours of tinkering, as I posted some photos online to get some input after my first draft.

I came up a piece of metal for each of the far corners, which I can tilt as needed, to make the inner bearings to line up perfectly with the X sliders.

At my first draft I also had the far ends (away from motors) in two levels, in order for the belts to pass each other.

I later learned I could twist the belts to make them cross on the same level. It is ok to make one of the outer corner idlers a tiny tad lower or higher to make a bit more clearance for the belts.


I have ordered some teethed idler pulleys with bearings in them, as I need 4 of those for the idler-posts, where the teeth-side of the belts are touching the bearings.

I’m going to design some sort pieces for the Y sliders to grib the belts coming onto them from the X sliders. As they are now, they are very far from a right angle on the bearings 🙂

Front Panel – magnets

I always close up my printers. Or semi closeup as I do not cover the top usually. This helps keeping a stable temperature in the now-chamber, and greatly enhance the print-quality. Also for PLA.

It also makes it possible to open windows right next to the printer, which is nice.

I cut up some acrylic plate I had to match the front, marked up 3 holes on each side, did a 3mm pilot hole and then almost drilled through using an 8mm drill, which fits the round magnets I have on hand.

Note: I use some old dull metal drill-bits when drilling in Acrylic materials. It works a charm without ruining it.

Don’t despair if you happend to drill all the way through.. I did it myself a couple of times.

Glue in the magnets

I’m using 2 magnets pr. hole, as they aren’t very strong individually. Put a tiny drop of loctite between the two and some locticte in the hole as well.

You can see how this one is drilled all the way through, so just make sure to get some on the edges.


And done

Here’s the final piece. 2×3 magnets pr side – you might wonder how it sticks to my aluminium case?

A few posts back, I put on some black glue-on magnet strips I bought for some PC Mod a few years back.

They are very weak, but enough for this job.

Posted on Leave a comment

BeTrue3D Printer build part 6 – X sliders metalworking

Was looking forward to write this post as yet a milestone in my project, but it didn’t turn out quite as I wanted.

Instead of yet a post going through how everything is just working as it should and all my planning comes perfectly together, this blogpost is about the planning and work -process – and why it failed.

To sum up, this is one of those blog-posts most people do not publish, but which is important to show we learn through or failures.

Getting started – What needs done?

As a starting point I admit I didn’t draw up any fancy drawings before drilling the holes. I made one for this post, of what I had in mind, more or less.

I didn’t do this earlier, as (I just wanted to get started) the only important point was that all holes MUST be placed at the same distance from the upper/lower edges, or the rods wouldn’t go horisontally across and connect with the opposite positioned slider.

It wasn’t crucial wheter the holes was more or less accurate from the sides.
The holes must offcourse also be drilled in at a right angle on both planes, or the rods would angle either to one of the sides or up or down when mounted.. and thus wouldn’t connect with the slider’s partner on the other side.


I’m not much of an accurate handyman. Get me right, I grew up on a farm and can use pretty much every tool around, but I can’t make anything fancy or overly accurate, which is also why I sourced my Z-stage plate for someone who knew what he and his CNC was doing.

I’m pretty aware of what I can and can’t do though. Normally 🙂

Positioning of the sliders

You can see I have drawn some lines on the sliders, which means I did try to get the holes placed the same on the sliders, but what really matters is the sides.

In order to get the sides completely flat I used 2 pieces of metal used to measure stuff, so they are very flat, and should ensure a pair pretty good planes to position my sliders up against.

I also did my best making the sliders rest firmly on the bottom of the wise.

I started drillin a pilot hole of 3mm. It went in very smoothly while using cutting lubrications – I’ve previously used oil or whatever other lubricant I had on hand, but I can warmly recommend buying some proper cutting oil, if it is somethiing you do now and then.. it really makes a big difference!


Drilled a medium hole on the first slider.. I didn’t repeat this on the other parts as the drills really went through very smoothly.

8mm hole

My 8mm drill was too long to fit into the drill-press, so I actually had to find a grinder and cut off the end of one of my drill bit.. meaning my good one wasn’t in action today.


After shortening up one of my 8mm drill bits I could continue:


Timelaps Video

I didn’t clean the drillbit as much as I normally did as I didn’t want to stop drilling while filming… don’t know why, but that’s the reason…

Result seen from the end. You can see how the slider doesn’t rest a lot on the lower part.

Set-screw holes

I needed to make some holes for set-screws in order to fixate the rods in place once the printer is assembled,

so next up are a quartet of 2,5mm holes.

First some drawing

The actual drilling and end result


Making threads

In order to make some thread for set-screws I use some tapping pieces and my small power-drill set at a low torque.

It’s important to set it at a low torque so it stops if you can’t feel it needs to stop, or you risk stripping your nice threads before they are completely made.

2-step tapping

First up I used the tapping piece with the least grooves in it. You can see it in the machine.. almost looks as if it’s ruined, but it is supposed to look that way.

This bit is put through first, as it requires the least force.

Next up I use the actual m3 tapping bit. You can see how it has threadding grooves all the way along its length.

Ohh, and I made a video here as well

I know the hole is not square with the slider, but these set-screw holes doesn’t need to be square as the screws just needs to hold the 8mm rods in place.

Cleaning the parts

With all the nasty stuff finished I need to clean off the oils metal parts, so washing the rods and sliders using dishwater soap and hot water.

Fitting parts

Made sure the 8mm rods could go through. If there was a small edge or otherwise, I used my dremel to clear the way. Don’t overdo it!

Making sure the rods wenth through as they were supposed to, I tested using the set screws…


…and later found some actual set/grub-screws instead of normal screws.


Time to put everything together.

What went wrong?

Now you might wonder what went wrong, as it all seemed to go just fine.

First thing is how I didn’t bother to make a drawing of what I wanted to do. Having an idea in my head is not the same as actually having formulated it. Lots of things comes to light once you draw it such as:

  1. Putting the 8mm hole all the way through, would mean you can make the same hole on all 4 and not 2 different sets.
  2. It becuase more obvious that you want the set-screw on the other side, meaning up top instead of just the side with least distance.

Revised version

This is how the revised version looks like – with 8mm holes all the way through:

If it was just the 2 above reasons I could live with it, but the main problem was the propability for accuracty issues.

Not Square

I had it completely sorted on the two sides where I put up steel plates, which ensured a completely flat and accuracte grib, but I failed to recognize how the sliders must have been lifted slightly when I tightened up the grib.

I did make sure the nearest corner, which was visible to me, was touching the bottom, but judging by the result, the far corner was not always in the right spot.

It’s the same reason my m3 tapped holes weren’t square…


2 of the sliders seems perfect, while 1 was a bit off and 1 was way off. The rod was pointing off to one side by several centimeter on the far end…

I was supposed to receive the sliders today that I sent to the CNC guy.. but I haven’t received them, so going to post this now, and do a new post on the assembling of the XY axes.