Posted on

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

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

Duet WiFi – Configuration walkthrough and adjust – Part 1

We allready did a basic setup using the online RepRapFirmware Configuration Tool and it’s time to take a look at the config.g file and see what it all means and make sure it all works as it should.

Don’t be depressed if, say, your object cooling fan is blowing as soon as you turn on your printer or one or more axes are moving the wrong way.

Before continuing you should go get some coffee or similar, as this blog-post ended up as a huge post with lots of information.

I also hope you appreciate how I managed to get rid of the right hand column, so the reading quality on this site improved a lot!

For more technical info, you should take a look at the official Configuring RepRapFirmware for a Cartesian printer wiki page.

Duet WiFi overview.

Lets start by putting up the Duet WiFi overview I made for my previous blog-post: Duet WiFi controller from the previous Duet WiFi – Intro & Explained.

General preferences


These are all set from the online configurator and we really only need to adjust the M208 axis min and max.

You can change the M555 Pn if you want to change the compatiblity mode, ie. if you want it to respond in a certain way when you input commands in the Terminal.

We will however let this be for the moment, as we need to verify our movement settings before doing this.

Note: I’ve later discovered that we should remove or comment out the M83 line as it is causing all kinds of problems. From what I gather I believe it’s a bug, that this command is in there in the first place.


Lets take a look at what is going on here.

First we have M574  which is used to define the XYZ endstop parameters. A setting of 1 after axis letter denotes an endstop placed at the minium of that axis, a 2 if it is placed at the max. If you do not have an endstop, you insert a 0.

Meaning we have X at minium and Y and Z and maximum.

Sn – Active low or high

S1 defines the switches as Normally Closed (NC), which means current is running through when the switch is not engaged, and the circuit is broken when the switch arm is engaged. This is also called “Active high” in the Duet documentation.
S0 defines the switch as Normally Open (NO), which means there is no current running through the endstop when not engaged. When the endstop is activated a current will go through. This is also called “active low” in the Duet documentation

Sum up Endstop M574

It all means we have X at minium and Y and Z at maxium and the endstop switches are normally closed.

; Endstops
M574 X1 Y2 Z2 S1 ; Define active high microswitches

Z-Probe Type

The M558 Gcode defines Z-probe type and settings. Insert ; in front of it, as we do not have a Z-probe.

Z-Probe Status

The G31 Gcode can be used several times to define different probe types (i.e. 0+4 for switches, 1+2 for IR probes and 3 for alternative sensors).

We are not using any Z.probe, so uncomment it, by placing a ; in front of the line.

Set Z-probe point or define probing grid

The M557 is also used for use with a Z-probe to define a mesh grid.

As before, we do not use a Z-probe, so we’ll put a ; in front of the line to uncomment it.

Endstops final settings

Since we do not use a Z-probe, we really only need 1 line in the Endstops section

; Endstops
M574 X1 Y2 Z2 S1 ; Define active high microswitches

Here’s the entire Endstops’ section

I  have left the z-probe part in place, as I might use a z-probe later, and it’s nice to have as a reference.

; Endstops
M574 X1 Y2 Z2 S1                  ; Define active high microswitches

; M558 P1 X0 Y0 Z0 H5 F120 T6000  ; Set Z probe type to unmodulated, the axes for which
; it is used and the probe + travel speeds
; G31 P600 X0 Y0 Z2.5             ; Set Z probe trigger value, offset and trigger height
; M557 X15:215 Y15:195 S20        ; Define mesh grid


Next up we look at the movement of our printer.

When using the RepRapFirmware our motors are listed as Drives. The first 4 lines each denotes a motor, where the first three from 0 to 2 are our XY and Z drive, while number 3 is our extruder.

Movement direction

Lets go to machine control and test each axis by pressing the associated +1 buttons for each axis.

Yours is probably different, but my X axis is going the wrong way, so I’ll have to 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

Extruder direction

I also hit the extruder bottom, but since my hotend are cool I recieed this error:

We’ll let this be for now, and return to it once we have configured our hotend heater.

Save the changes, click yes to reboot and check your new configuration.

Microstepping mode

Next up is the configuration of microstepping mode using M350.

We start by issuing the M350 command and list each drive followed by microstepping mode.

The trailing In denotes wheter or not we have interpolation mode enabled. I1 to enable and I0 to disable it.

After running through the Web Configurator I learned that only by running at 16 microstepping the I1 parameter causes the microstepping to be interpolated to 256x.

Allthough you can turn on interpolation and set microstepping at 32, I have come to believe interpolation is in fact not enabled, so 32 would generate more noise than 16 with interpolation enabled.

I means I change

M350 X32 Y32 Z32 E32 I1        ; Configure microstepping with interpolation
M350 X16 Y16 Z16 E16 I1        ; Configure microstepping with interpolation

Steps pr mm

Since I just changed microstepping from 32 to 16, I need to change the line, where I used the M92 Gcode to define steps pr mm.

My current setting is 160 steps pr mm for XY, 800 for Z and 2050 for E:

M92 X160 Y160 Z800 E2050       ; Set steps per mm

I’ll change that to 80 steps pr mm for XY, 400 for Z and 1025 for E

M92 X80 Y80 Z400 E1025       ; Set steps per mm

Speed configurations

Last part of the Drivers section consists of settings for instantaneous speed changes, which roughly translates to marlins jerk setting. the maximum speeds, accelerations, motor current and motor idle current and lastly idle timeout for how long the motors stays engaged before turning off.

Allowable instantaneous speed changes

The M566 sets the allowable instantaneous speed changes. I’lll leave this as is, as I need to test some.

M566 X900 Y900 Z12 E120        ; Set maximum instantaneous speed changes (mm/min)

Maximum feedrate

The M203 set maximum feedrate pr mm/min as opposed the more commonly used mm/sec, so keep that in mind.

M203 X12000 Y12000 Z6000 E1200 ; Set maximum speeds (mm/min)


The M201 is used to set max printing acceleration. Instead of mm/sec, or even mm/min, this now uses mm/ s^2. I personally find this an odd size, as it is very hard to relate to. I’ll leave it as is.

M201 X500 Y500 Z250 E250       ; Set accelerations (mm/s^2)

Motor current

The M906 command is required. Without it, motor currents will remain at zero.

We have listed 800 for each of our motors, which stands for 800 miliamp for each.

A risk of going too low is that if you get a blob or curl up on your print and the head hits it, at lower currents the motor is more likely to skip steps. Also at very low currents, the microsteps are less uniform because the detent torque becomes significant in comparison to the torque due to current. That’s why the suggested minimum is 50% of rated current.

The last I parameter is % of power for the motors on idle.

In our case we have set idle power at 30% by using the I parameter followed by 30.

M906 X800 Y800 Z800 E800 I30   ; Set motor currents (mA) and motor idle factor in per cent

Note/quote: The I parameter is the percentage of normal that the motor currents should be reduced to when the printer becomes idle but the motors have not been switched off. The default value is 30%.

You can use an optional H parameter to issue seperate power a z-probe should use if you have one such.

Drives settings.

This leaves us with this setting:

; Drives
M569 P0 S0               ; Drive 0 goes forwards
M569 P1 S1               ; Drive 1 goes forwards
M569 P2 S1               ; Drive 2 goes forwards
M569 P3 S1               ; Drive 3 goes forwards
M350 X16 Y16 Z16 E16 I1  ; Configure microstepping with interpolation
M92 X80 Y80 Z400 E1025   ; Set steps per mm
M566 X900 Y900 Z12 E120  ; Set maximum instantaneous speed changes (mm/min)
M203 X12000 Y12000 Z6000 E1200 ; Set maximum speeds (mm/min)
M201 X500 Y500 Z250 E250       ; Set accelerations (mm/s^2)
M906 X800 Y800 Z800 E800 I30   ; Set motor currents (mA) and motor idle factor in per cent
M84 S30                        ; Set idle timeout

Click Save Changes and choose Yes to reboot your Duet WiFi in order for the changes to take effect.


In this section we are going to configure both of our heaters: Hotend P1 and Heated Bed P0

We use thje M143 gcode to configure maximum temperature for all our heaters.

During our tour through the Web Configurator, we set our hotends’ maximum temperature at 320c by using the parameter S. Note: how we do not need to specify heater number for this. It’s due to our hotend as heater 1 being default when none is specified.

We want to add maximum temperature for our heated bed as well. This is also done using the M143 command. This time we need to use the Parameter H to specify the heater in question, and 0 as the number of heater in question.

I need my bed very hot, as I print Polycarbonate, so I’ll set it at 140. You probably want it somewhat lower.

Note: From RepRapFirmware 1.17 onwards, the default maximum temperatures are 262C for extruders and 125C for the bed.

; Heaters
M143 S320 ; Set maximum heater temperature to 320C
M143 H0 S140   ; set the maximum bed temperature to 140C

PID Tuning

PID tuning in RepRapFirmware is very different from marlin and smoothieware where you basically just set target temperature and number of cycles to test, and the system runs its test-cycles and output the variables for our use.

There is a usefull page at the Duet Wiki Tuning the Heater Temperature Control and a Duet forum post you might find usefull as well.

First we have our M301 gcode which is used to define the parameters for our heaters.

The H parameter is used to specify the heater in question, and heater 1 (hotend) is once again default if none is entered. Here we see the output for our heated bed, so H0 is used to specify the bed heater.

M301 H0 S1.00 P10 I0.1 D200 T0.4 W180 B30 ; Use PID on bed heater

Configuring Heated Bed

The output from the Web Configurator only has values from our bed, but we really need to run a new PID tuning cycle using M304 to get the proper parameters for our Heated bed.

Lets start by taking a look at the running configuration of the Heated bed using the M307 command that sets or report the heating process parameters.

I got the following output:

M307 H0
Heater 0 model: gain 90.0, time constant 700.0, dead time 10.0, max PWM 1.00, mode: bang-bang

Lets be honest, I really do not know what it all means, but we don’t need to either.

The important things here for our purpose are Heater 0, which matche the above H0 and the max PWM 1.00 which corrolates to S1.00.

A setting of S1 means we run at 100% power. If you want it at 50% power, you set it at S0.5

PID Tuning Heated Bed

I want my Heated Bed to use PID since I use a powerfull 500w AC heater, so lets run a PID tuning cycle using the M304 gcode.

If we just run M304 on it’s own, we get the message that it currently is in Bang-Bang mode, so we need to change that.
Heater 0 is in bang-bang mode

The Heated Bed is by default started up as Bang-Bang. In order to change it, we insert a line in our heaters section, after the M301 line.

The M307 command I use here, defines H as 0 (heated bed) to start up in PID mode, by using B0.

Note: Do not confuse the B parameters in M301 and M307, as they are not the same.
; Heaters
M143 S320 ; Set maximum heater temperature to 320C
M301 H0 S1.00 P10 I0.1 D200 T0.4 W180 B30; Use PID on bed heater (may require further tuning)
M307 H0 B0
M305 P0 T100000 B3988 C0 R4700 ; Set thermistor + ADC parameters for heater 0 ; BED
M305 P1 T100000 B4138 C0 R4700 ; Set thermistor + ADC parameters for heater 1 ; Heater 1

After saving and rebooting the Duet, we run the M307 H0 again, to check the status of our Heated Bed.

Our Heated Bed is now in PID mode, so lets continue to use M303 to run PID tuning.

We use the parameters:

  • H = Heater. H0 for heated bed.
  • P = Power in %. Default is 50%, written as 0.5.
  • S = Maximum temperature. Default is 225, so it’s important for bed, which I set at 100c here.

M303 H0 P0.5 S100

Here we witness a hugely annoying part of RepRapFirmware… it fails tuning if temperature exceeds the maximum temperature. As opposed to Marlin, which automatically compensate and turn the heater on/off, this one just fails, so we have to wait for temperature to drop before trying again with a lower power setting than our current P0.5

I did 0.4, 0.3, 0.2 before succeeding at 0.1 after an hour and 5 minutes!

You have to wait some time after each failed attempt, or the tuning is cancelled as you see here.

An hour and 5 minutes later, I manged to finish the PID tuning at 10% power, along with a warning about it being overpowered.

I really hope this function is tweaked asap as it’s a huge bother and doesn’t take into consideration the large part of people starting to use faster heaters as we don’t want to wait 15 or more minutes for the bed to heat up.

Now that the PID tuning completed, we use the M307 H0 command to see the result.

Our parameters and variables are:

  • Heater = 0
  • Gain = A
  • Time Constant = C
  • Dead time = D
  • Mode ( 0 for PID) = B

Which results in this line for our config.g file.
M307 H0 A252.2 C635.5 D7 B0

Saving PID settings

First we remove or uncomment the old M301 line.
; M301 H0 S1.00 P10 I0.1 D200 T0.4 W180 B30; Use PID on bed heater

.. and we are going to replace the snippet we inserted in order to change Heated Bed to PID mode

M307 H0 B0
M307 H0 A252.2 C635.5 D7 B0

Instead of writing it in our config.g file, we could also use M500 command, which would save it to save the heater parameters in config-override.g, which is supported in firmware 1.17 and later.

Save Changes and reboot before continuing

Configuring Hotend PID

The output from the Web Configurator only has values from our bed, so we really need to run a new PID tuning cycle using M303 to get the proper parameters for our hotend.

PID Tuning Hotend

In order to setup our tuning of the hotend PID we use M303 and these parameters:

  • H = Heater. H1 for Hotend
  • P = Power in %. Default is 50%, written as 0.5.
  • S = Maximum temperature. Default is 225, so it’s important for bed, which I set at 100c here.

M303 H1 P0.5 S240

Aww, thought I was safe as I use standard E3Dv6 and used standard power settings at 50%, but it still overshot, so have to wait for it to cool down and try again.

After completing the tuning, which luckily is much faster than tuning the bed, we get a nice output like this:

As with the bed, we now need to use the M307 to have the result displayed. This time using H1 instead of H0
M307 H1

Lets sort out the parameters and variables here:

Our parameters and variables are:

  • Heater = 1
  • Gain = A
  • Time Constant = C
  • Dead time = D
  • max PWM = 1 (1= 100% power. 0.8 equals 80%)
  • Mode ( 0 for PID) = B

This results in the following line, which we need to put into our config.g file in our heaters section.
M307 H1 A352.6 C122.2 D8.0 S1 B0

Note: after updating thermistor settings farther down this blog-post to accurate settings, the code looks like:
M307 H1 A313.8 C118.7 D8.1 S1 B0

Thermistor and ADC parameters

Before wrapping up our Heaters section, we might want to look at the M305 command.

If you have some experience in configuring these kinds of things, you might miss some parameters. More precicely the ones related to ADC. It’s because the Duet WiFi have automatic ADC calibration so you should not need to use the H or L parameter.

Heated bed sensor configuration

I’m using a 500w 220AC Keenovo silicone heater, which comes equipped with a NTC 100K thermistor ( Beta 25/50 3950K-1%) as temperature control sensor ( Click Here (pdf file) also for thermistor R-T Datasheet.)

It means it has a restiance of 100.000 and beta coefficent of 3950.

These matches up to:

  • P = Sensor number
  • T = Thermistor resistance at 25oC
  • B= Beta value, or the reciprocal of the Steinhart-Hart thermistor model B coefficient
  • C = Steinhart-Hart C coefficient, default 0
  • R = Series resistor value, which is R4700 for Duet WiFi

So, lets make a command based on our parameters and variables for our heated bed sensor:
M305 P0 T100000 B3950 C0 R4700

Hotend sensor configuration

I am using a genuine full metal 24v bowden E3Dv6 hotend, which comes equipped with a Semitec 104GT-2 thermistor. It has a quoted B value of 4267, but the actual value over 25C to 220C is 4388 (quoted source).

Looking at Configuring Firmware documentation on E3D site it says:
For firmware versions 1.16 and earlier, set the B parameter (beta value) to 4388. This value gives better accuracy at typical printing temperatures in the range 190 to 250C than the B value of 4267 quoted in the datasheet.

For firmware versions 1.17 and later, set the B parameter to 4725 and the C parameter to 7.06e-8.

I’m not sure about that C parameter to 7.06e-8, but it doesn’t give an error when used.. I’ve posted on the Duet forum to get an answer

It means I’ll change the B value for temperature sensor 1 from 4138 to 4725 and C from 0 to 7.06e-8
M305 P1 T100000 B4725 C7.06e-8 R4700

This results in two new lines of codes for our config.g file:
M305 P0 T100000 B3950 C0 R4700 ; Set thermistor + ADC parameters for heater 0 ; BED
M305 P1 T100000 B4725 C7.06e-8 R4700 ; Set thermistor + ADC parameters for heater 1 ; Heater 1

So, what does it mean?

Yes, we need to run PID Tuning again… I’ll not post about that, as we just spend 2 hours doing it 🙂

I’ll post the complete Heaters section though:
; Heaters
M143 S320 ; Set maximum heater temperature to 320C
; M301 H0 S1.00 P10 I0.1 D200 T0.4 W180 B30; Use PID on bed heater
M307 H0 A252.2 C635.5 D7 B0
M307 H1 A352.6 C122.2 D8.0 S1 B0
M305 P0 T100000 B3950 C0 R4700 ; Set thermistor for heater 0 ; BED
M305 P1 T100000 B4725 C7.06e-8 R4700 ; Set thermistor for heater 1 ; Heater 1

Using Thermocoupler or PT100 sensor.

Using a Thermocoupler or PT100 sensor is a great way to avoid annoying temperature measuring issues. I normally use either one and is going to make a blog-post about it at a later date.

In both cases we would need an expansions board, which can be bought from the addons page.

Coming up

I had hoped to finish up everything, but this is is for now.

In the next part, i’ll write about the rest of the items in the config.g file

  • Tools
  • Network
  • Fans
  • Custom settings
  • Miscellaneous
Posted on

Duet WiFi – binary “iap4e.bin” not found

Making a short post, as this seems to happen fairly often.

In short, I wanted to update my Duet WiFi Firmware from 1.17c to 1.17e and recieved a pop-up error message while doing so.

iap4e.bin missing

Contrary to previous error messages when updating the three-part firmware, this error prevents the firmware update from completion.

Finding iap4e.bin

At first I thought the missing file ought to be in the RepRapFirmware Repository, but I had no such luck, so went to the next best place: Google.

It turned up a Duet3D wiki page about Updating Firmware where the missing iap4.bin file under the section Fallback procedure #1 with the description:

  • Copy the new DuetWiFiFirmware.bin file to the /sys folder. It must be called exactly DuetWiFiFirmware.bin on the SD card. Also make sure that file iap4e.bin is present in /sys.

Ok, so I now know I need to find the iap4e.bin file, and copy it to the /sys folder on the SD

Back to my Google search, which also returned a post on Duet3D forum named missing iap4e.bin. This in turn pointed to a Duet wiki page labeled Where to get Duet and Duet WiFi firmware and tools.

Download and “install” iap4e.bin

Go to the DietiAPI page the above page linked to, and download the iap4e.bin file.

We can’t yet copy files via the Web Panel, so you have to take out the SD card and insert it into your computer, and copy over the file to the Sys directory.

Restart your controller and reconnect to your Web Panel to see the file lsited under Settings and System Editor


I don’t know why this happens, but at least we can fix it now 🙂

Posted on

Duet WiFi – Generating firmware using Configurator

Configuring our printer for use

  1. Intro to RepRapFirmware
  2. Setup preparations
  3. RepRapFirmware Configuration
    1. Start
    2. General
    3. Motors
      1. Axes setup
    4. Extruders
      1. Motor current
    5. Endstops
    6. Homing Preferences
      1. Z-probe
    7. Heaters
      1. Heaters setup
      2. Tools
    8. Compensation
    9. Network
    10. Cooling Fans
    11. Configuration Finished
    12. Upload Configurations
    13. Conclusion

Intro to RepRapFirmware

Now that we have connected to our Duet WiFi controller and updated all relevant firmware we are going to configure it to our needs. In this case as a classic 3D printer movement mechanisms as a Cartesian source  printer.

I am setting it up same as an Ultimaker 2 works, meaning XY axes are moving up top, and bed are going up and down. Z homes to MAX.

The Duet WiFi uses RepRapFirmware which is drastically different from the Marlin and Smoothieware setup I’m used to, as all setups are done using regular Gcodes and Gcodes specific for RepRapFirmware, which are put into files and in turn are executed (read into memory of the controller) on startup.

You can change any settings by issuing new Gcodes via a Gcode terminal either in the webpanel or by using Pronterface over USB or similar. Any Gcodes issued this way are not retained after a reboot (unless current running configuration is saved).

Duet WiFi terminal in webpanel

Any changes you want kept after reboot must be entered into a file. Either into the general config.g file or as macro files, if you use any such.

It’s a big change from the Marlin and Smoothieware, but luckily we can find a lot of information in the RepRap Firmware FAQ, which is quiet extensive.

Setup preparations

Before continuing we are going to clean up in our files, as some of them are really meant for Delta printers.

Files listed under System Editor tab with description.

  • bed.g is autoleveling for Delta printers – Removing this.
  • config.g our – This is our primary configuration file, where the core configs are stored.
  • deployprobe.g is for deploying a probe for Delta printers – Removing this.
  • DuetWebControl.bin – our Web Interface firmware file.
  • DuetWiFiServer.bin – our WiFi Server firmware file.
  • homedelta.g is a file for homing on a Delta printers – Removing this.
  • iap4e.bin – our Electronics firmware file.
  • pause.g is for pausing the printer.
  • rResume.g Resume file.
  • retractprobe.g is to retract a probe – Removing this.Deleting the following 4 files.

RepRapFirmware Configuration

We are going to use the RepRapFirmware Configuration Tool to do our initial setup and will refer to the Duet WiFi overview I made for my previous blog-post: Duet WiFi controller from the previous Duet WiFi – Intro & Explained.


As you can see, they have a nice and clear start page, where we are going to start our setup by choosing the Custom configuration option and click next.


Next up we setup some basic settings, like board type, firmware version and compatibilty.

Our board is Duet WiFi, and Firmware version is the newest if you updated firmware before this point.

Enable non-volatile memory enables the use of custom commands loaded during startup, which we havn’t put into the firmware – I hanv’t looked much into this to be honest (yet), so leaving it unchecked.*

The compatibility really means how the printer is going to print outputs to terminal when you issue commands, and not as it operates.

In short, it emulates output responses. You can choose from several systems of your chouse: RepRapFirmware, Marlin, Teacup, Sprinter and Repetier.

Marlin is default, but we are selecting RepRapFirmware here.

Type of Ultimaker printer is Cartesian. I’m leaving distance at default and find the exact length of each axis later.

I only changed Firmware compatibility in this step.


In the motors section we have a lot of options. Here’s a screenshot of default settings.

I’m changing the Microstepping for each axis to x32 and enable interpolation.


In order to find steps/mm we will click on the Calculate steps per mm on the far top-right side/corner.

We’ll be presented by a pop-up window where we can insert our parameters.

Our XY motors are the same, using standard 1.8 motors driven by standard GT2 belts using 20-GT2 pulleys.

This leads to 160mm pr steps for x32 microstepping for our X motor.

Click on Y, to check settings and then go to Z.

An 8mm standard (most common cheap) lead screw used on the Ultimakers, also called Trapezoidal screws are rightly named TR8*8 (the ones I have), which means it is 8mm diameter and has, according to this calculator, at pitch of 8mm.

Rightly this leadscrew has a pitch(distance between the raised ridges) of just 2mm and 4 starts (seperate ridges).

Multiplying pitch and starts on a lead-screw equals the length of travel for a full revolution of the screw, which is 8mm.

The last 8 in TR8*8 denotes this travel length. We are using this 8mm as pitch in the configurator.

You can also buy TR8*4 and TR8*2 screws, but the 8mm is the most commonly used and the cheapest.

Click Apply this value botton and the values are automatically inserted into your Steps pr mm section.

Our steps are now updated:

Axes setup

Next we change our Y axis to match X and update maximum for Z axis to 100. I’m leaving the Motor current at 800mA as that is matching what I used on Smoothieware. Drivers are different though, so it might be subject for a future change. But the same applies for  the instantaneous speed change, Maximum speed and Acceleration.

The Motor driver is the variable used in the Gcodes used to setup everything.


I’m using just 1 extruder which is my own Belted Extruder. It is highly geared on it’s own and silent, so I don’t need high microstepping for any of these reasons.

I’ll set it at 32(on) to try out the new driver and change it later if I feel the need. If you follow the above link, and look all the way at the bottom of the page, you can see the steps needed.

In my case I’ll set the steps at 2050 – still need to tune it later.

I’m only changing microstepping and steps here. I really have no idea about the other settings for now, but might change by testing.

Motor current should match my motor just fine.

Motor Current

I have no experience in using this feature, so leaving it at default.

I can see how it might help keep the Z-stage in place if it tends to drop. On the other hand it makes manual movement all but impossible, say if you want to change filament in the middle of a print and need to manually retract and insert new filament.

Subject for change later as much else 🙂


Next stop on our way is configuring our Endstops.

Here’s the Default settings shown.

I always use Normally Closed on my endstops as they trigger if some error happens, like broken wire or switch – Ie. they are carrying a small amount of current through always and if this is broken, the switch is seen as triggered.

The endstops are located at X min and YZ max on my Ultimaker clone, as is regular ultimakers.

Homing Preferences

Making changes to the speed to more closely fit an ultimaker style printer.


Since I do not have a z-probe, I just leave as is and click next.


The default settings for heaters are show here:

I only have 1 heater, so leaving that alone.

I’m raising maximum heater temperature to 320 as I do print Polycarbonate now and then.

People using the full metal E3D hotends should raise it to at least 290c in order to be able to tighten the nozzle as recommended by E3D.

I’m changing the control method of the bed to PID from Bang-bang, as I’m using a powerfull 500w AC heater and it needs to be tightly controlled.

Heaters Setup

Now it gets hairy! In all honesty, I really hope this section is tweaked in the future to make it more userfriendly by implementing some options of thermistors, brands and thermocouplers + pt100 settings.

As it is now It’s completely above all but the most expert users and there’s no links to more userfriendly info, so it will leave most users pretty stumped.

In short we just leave it alone.

The Output scale factor is later modified when do a PID-tuning after applying these configurations.

The Series resistance refers to onboard components, so I’m a bit at a loss why we have this option here.

The first value under Thermistor coefficients is how much resistance your thermistor is having at 25c degrees. Not much worth when using PT100 or Thermocoupler though, but just leaving as is.
Note: I later found I had to put in the same number for Bed as for E0 here.

Second value K, is based on type of thermistor used, while the third C, is coefficent of steinhart-hart equation! I can’t explain this, so just leave as is.

The Sensor channel denotes the channel we connect our sensors to. We leave the Bed sensor channel at ADC0 and E0 at ADC1

Note: You might wonder at my top temperature at 320 and now I use thermistor! I’m normally using a thermocoupler, but using thermistor for the case of this configuration.

From the Duet Wifi documentation on Heater and Thermistor settings, the B value (K) of the Semitec 104GT-2 thermistor is 4388 at 220c.

For the sake of ease, I leave it as is for now and click Next.


Here’s the default settings show for our tools.

For each hotend, or maybe for each color on a multi-color hotend, we define a tool.

I only have a single E3Dv6 on my setup, so leaving Number of tools as is.

I’m putting a mark in Select first tool on start-up, which makes it available as default and define which tool I select, which is just Tool number 1.

I only have 1 extruder E0, so can’t pick and choose any different extruders.

Leaving offset as is and click Next.


Next up is the compensation settings.

This is the section for setting up the popular BLTouch probe, the Duet mini IR probe or other similar system you might have.

Compensation and autolevel is used by many people interchangeably, but that is for another time.

I’m leaving as is, as I have nothing of the sort on this machine, and just press Next.


Here you can disable the network.. maybe you would want this for security reasons and only use it over USB if in a school or company.

I’m configuring the Printer Name as DuetUM2 and do not type a password. It’s really annoying having a password during setup, but do what fits your usage scenario.

You can leave DHCP on, if you want the printer to aquire IP automatically (or if you configure it on your router/dhcp server).

Note how the default gateway is set at the last IP in the range, and not as the first IP which is more commonly accepted standard by Cisco, so you might need to change this as well.

Subnet mask should not be changed in most normal home networks.

Cooling Fans

We have several options for our fans and the setup GUI here, is really nice to handle it.

Before continuing, lets take a look at our Duet WiFi controller from the previous Duet WiFi – Intro & Explained blog-post, to see where the fan connectors are located:


If you want to read some more about Duet WiFi fans there is a nice section about Connecting and configuring fans on Duet Wiki.

In order to choose, we have 1 piece of important information: FAN1 is always on at bootup, so this one is ideally used as heatsink fan for the hotend.

That one picked, we choose FAN0 as our object cooling fan and FAN2 as control for the fans I have on my motors to cool them when my bed is heating up my printer case, as a sort of “passive” heating chamber.

Value: I’m leaving FAN0 at default 30% and set Fan1 and Fan2 at 50%

Invert output: This is required for 4pin pwm fans, so leaving them at No.

Frequency: I don’t honestly know how to figure out what to pick, so leaving it at 500 Hz. By using Mouse-over, it says PWM should be put at 25000 Hz instead.

Thermostatic Control: No for my FAN0 as we need to control this more dynamically to cool our objects. FAN1 and FAN0 is on Yes.

Monitored Heaters: This denotes the heater a fan is looking at when thermostatic control is on. FAN1 which is for Hotend Heatsink, it is set to E0, while FAN2 which is for the fans on my motors, which needs cooling when heated bed is hot, is set to Bed.

Thermostatic mode trigger temperature (heat controlled): Default is 45c, but I’m just used to having it at 50c for Hotend Heatsink, so I’ll do that for FAN1. I put FAN2 at 60c for Bed.

I do not have any Custom settings for config.g now, so just pressing Finish.

Configuration Finished

You’ll be presented with this pop up window with some help text. We are allready using Duet Web Control and is choosing Download files as ZIP.


See this page for further information about the purpose of these files.

Navigate to your downloaded file, which is named

Click here to download the files I just generated: config,zip

Upload Configurations

In your Duet Web Panel, click on Settings and either click on Upload File(s) and pick your, or simply drag and drop the file onto the Upload File(s) section.

The files will be uploaded super fast, so fast I didn’t have time to capture it, and you are presented with a dialogue box about rebooting the Duet. Click Yes.

Lets take a look at our files in Settings -> System Editor

Here we now have a full compliment of files to control our printer.


As it is right now, you should have basic usage of the printer, but many things might need to be modified like:

  • Direction of motor/axis movement
  • Temperature measurements
  • Speed of movement
  • Fans
  • etc

We are going to do the final adjustments in the next blog-post, where we are going to set all of these things right, by digging into the config.g file.

Posted on

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.

Posted on

Use a SSR or Power-Expander to externally power Heated bed – Part 1

I’ve had a few inquiries about how exactly to use a Solid State Relay and an extra powersupply or main power, so decided to write about how to make it work, and explain some while at it


  • Solid State Relay :: SSR from now on
  • powersupply :: PSU from now on
  • Mains power :: AC

Silicone Heater

Here’s my 500w silicone heater from Keenovo (opes eBay shop) powered using AC power. It comes with an attached pad of 3M MP386 heat resistant and transferring extremely sticky tape. You can have them made with other types of sensors, like a thermocoupler if you like.

I decided to include the Power-Expander (opens link to as it is a great alternative to a DC-DC SSR, and because you are sure not to get a counterfit SSR.

I have personally only used SSR from RobotDigg (opens their shop), but the brand Fotek is also a good quality. Problem is lots of counterfits (open UL site) & here (instructables) around, so be carefull where you buy your stuff.

Types of relays – usage scenarioes

We allready touched on the subject above, so lets take a look at the different options we have.


The denomination before the – is the input or control type. We are only talking about DC- here.

The listing after the – is the LOAD type. So if it is listed as DC-AC, it means we control it using DC from the output on controller and the LOAD we are using is AC if we have a silicone heater as listed at the top of this page.

  • DC-DC SSR or Power-Expander are interchangeable in most cases, so I’ll list them as such.
    • Notice the input type and range listed at the lower end. In this case 3-32 Volt and the type is DC
      Load type os listed at the upper end, and is 6-220 volt and also DC, so we really have some power here.
      Amperage is listed in the center, and this SSR is rated at 25A. It means the LOAD can be current up to 25amperage
    • Option 1: if your main powersupply is not powerfull enough to power a heated bed in addition to the electronics. It might also be used
    • Option 2: if you just want to use 2 seperate powersupplies for the electronics and heated bed: you might be running electronics at 12v but want 24v on heated bed.
    • You want a DC-AC SSR if you have a heated bed powered using AC. Most common if you have bought an AC silicone heater.
  • Shield
    The SSRs I’ve bought comes equipped with a clear shield/cover.
    It is important to use this to avoid accidents, as the terminals are open and easy to get to.
  • Heatsink
    Read on the specifications and compare to your needs wheter you need a heatsink or cooling. I have not needed this on my build as a 500w AC heater only use 2-2.5amperage at most.

Wiring up

The next big question is how to wire it.

If you use an AC heater, you might want to add a grounding wire. You might also want to do it if you use DC, but in any case, I have added one here, as you can see.

I must admit I can’t see a scenario where it would be needed, but better safe than sorry, and it’s easy to just add an extra wire.

Here’s the wiring braided and sleeved up with the Silicone heater taped to the plate. It takes 24 hours for the glue to fully harden, so put it under pressure a day or so, before putting it upside down – don’t put pressure on the center part where the thermistor lives.

Ground Wire

People have aruged that I should have attached the ground wire to the black print-plate, but I admit I simply only had in mind to ground the entire Z-stage, so bolted it to the z-stage liftplate…

If an AC wire comes loose I guess it would it the plate.. in any case.. I leave it to you, how you want to attach it.


Next parts…

In the next part of this, we will go through the complete wiring of controller, psu, ssr and heated bed.

Posted on

BeTrue3D Printer build part 5 – LEDs

You might have read my part 3 where I had a section on installing LEDs.

Here are some thumbnails from the previous post.

This blog-post is all about getting it to work, including installing a front-mounted simple mechanical switch.

  1. Planning
  2. Execution
  3. Mounting
  4. Getting 12v in 24v system?
  5. Testing and wiring
  6. LED Installation
  7. LED Testing
  8. Video testing LEDs

I’ve tried taking some more photos due to popular demand 🙂


I had a hope the small on/off switch could be placed as you see on the photo. I removed the bracket, measured up, and drew some lines. I made 0,5mm extra space between the switch and extrusions – giving me some margin of error to work with.


I started out using a small quality drill from proxxon with a pointy tip to get an accurate starting point (I don’t know one of those fancy tools to make a small indentations)

After I had it going I switched to a more sturdy drill and worked on it. Using plenty of cutting oil and cleaning away aluminium parts all the time.

I used a tray as a drill-platform as I do not own a proper workbench (I have a small portable one, but it was packed away). I’ve put it over the sink in the kitchen. Worked great as the metal parts just ended up in the sink, and the drill didn’t go down into a tabletop or similar.


After finishing the pilot hole I measured the diameter I needed for the switch and used the right sized drill for the job.



The on/off switch is within the bracket, so that’s as planned. I had previously used the switch, so allready had in and output wires on it. I use the male plug (2 exposed pins) as input and the female connector as output. Doing it like this, so any wires/plugs with active current is not in the form of bared metal pins.


I soldered on male connectors to the wires coming from the LED strips. Using a portable gas weller solderpen I had from my time as network techie 🙂

I took a photo of the small hand tool, as that is enough of a tool to crimp on most connectors. A proper crimping tool is prefereble, but if you only need it for 1 project it is fine to skip buying it.


Getting 12v in 24v system?

So, the next step is to get 12v in my 24v system, as the LEDs are running on 12v. The Duex5 can be configured to output 12v, so I might go that route eventually, but I’d like to initially have power available to the LEDs as soon as the PSU is on, regardless of setup.

I’m using a small “hardwired” 24v DC to 12v DC step down. It can even output at 3amp, which is a lot for such a small thing! I like these things compared to the one you adjust manually, as they never put out that annoying high pitch coil whine you sometimes get from “normal” DC-DC step down modules.

Photo shows front and rear of the board.


I’m going to solder on small pins, as I’m not sure what I want in the longer run regarding these. Alternative is to just solder on the wires.

Using the foam pads to keep the pins in place while soldering them on.


Ready, get, set go, and finished. The fan is homemade with a carbon filter.. it’s really super nice.


Testing and wiring

I’m using standard female dupont connectors and just using standard  tools.

I have a super nice Lambda Vega-Lite 550 powersupply I found at a bargain price. Going to convert it into a proper “lab psu” at some point with banana plugs etc.

I’m making sure the output is in fact 12v and not something else.

Putting the wires in place using duct-tape (untill I can print some other cable-management things) and mounting the small Step Down below the Duex5. I’ve just used double-sided tape for now, and have not wired it up any further.. propably going to be directly hooked up to the PSU though.

LED installation

This should had been in the previous post, but since I didn’t take any photos of it, I do it now. You can see how the power input comes up through the floor paneling through a small indentation, and each section of the LEDs are conneted using a small piece of wire.

I’ve put white heatshrink over the exposed solderpads.

LED testing

It might be hard to see, but here are 2 photos showing the BeTrue3D Printer with LEDs on and off.

Video showing a test of the LEDs

Posted on

BeTrue3D Printer build part 4 – Printbed

This post is about my brand new super nice PEI-Coated black oxidized 5mm aluminium plate with lasered logo/url and about a lot of wiring I’ve spent time doing.

I also put in the last paneling. I ran out of the white 5mm card board material and am using some whiteish acrylic I had untill I can get some more of the white plates.


First up is the printbed. This is the single most expensive item in my printer at around €85 including shipping! Especially when combined with the 500w AC heater at around €35. You can get the plate much cheaper if you get it in natural color instead of black though.

Here’s the finished result, which I’ll go through in steps, to show how I did it.

I’m very pleased with the result, if I might say so 🙂

Keenovo heater used

I’m using a 500w AC heater from Keenovo. You can get it in custom sizes at no extra prize, and they really deliver high quality. Included is 1 big pad of preapplied heat resistant and -conducting 3M MP486 tape, which is the best for the job.

It comes with premounted 2 wires for AC power and 2 wires for the build in thermistor. It generally reads 10c above actual surface temp of the printbed.. guess its due to heat dissipation. You can get other sensor types as well

The CE is “China Export”, so it doesn’t mean it is CE certified

Ground and sleeving

I wanted to ground/earth my Z-gantry directly, in case of a mishap, so needed an extra wire. I also enlarged one of my 3mm holes to 4mm to make it fit perfectly.

I drilled an extra small hole where I can zip-tie the cables onto the lift-plate for stress-relief for the wires/headpad. It is places so the wires does not grind on the edge of the plate.

I originally wanted to use a cable drag-chain, so hadn’t planned on using zip ties.

I braided the cables and sleeved the part that’ll be visible ind the print chamber.

I do not insulate the bottom of the plate, as I want the increased heat output to act as a sort of “passive” heater element for the heat-chamber effect I’ll get by doing this.



I’ve planned to use the Ultimaker 2 fingerscrew system. I really like it, as it is discreet and runs very nicely, while at the same time can be tightened down really tight so the bed doesn’t wobble.

It means I’ve had 3 holes at 6.5mm made in the lift-plate for the fingerscrews, which lines up with corrosponding countersunk holes on the print bed.

The fingerscrew assemblies are made up of the fingerscrews, spacers, springs and m3 scews.

For best result I have put on lithiumgrease between the fingerscrews and spacer, and again on top of the spacer.

Note: I’ve used some other types of grease on other printers with great result as well, so no need for special grease. Just use something.


After fixing the cables at the back edge of the bed, as shown in photo a bit above, I placed the springs at the right spots, and placed the bed on top of them (took a bit of balancing in order not to knocking around the springs with the plate).

The springs are 20mm long and has an inner diameter of 7mm.

I used a caliber I can lock into place and put it at 10mm. This means I can do a rough calibration of the bed. It’s not precise, but close enough to start calibrating using printer software.

Note: The distance I used might not fit on other printers, due to thickness of plates and length of m3 screws and springs. So tighten down the springs untill you can depress the corners with your fingers, but not so easily that the bed can wobble. The springs must be tightened down good, but not all the way.

The give in the sprigns is an insurance if you accidentailly have the hotend smash down onto the plate. If the plate can’t move, something else is likely to break.

Clean it up using Acetone or Isopropyl alcohol when done. Can see my sticky fingers on the photo above 🙂


I originally wanted to use a dragchain… but I’m just not that big a fan of them, and found it looked bulky in there.. even a thin one. I know this is a subjective view, but there it is. I liked the sleeved version I made, so stuck with it.

I drilled an 8mm hole for the wires to get out to the back compartment, along with 2x 3mm holes for a ziptie to hold the cable in place.

The cable can flex up behind the z-stage.. even if it wanted to get under the bed, there is plenty of space for it in there, so it can’t cause any troubles.

Cables out back

I couldn’t get good photos of cables out back, but one of the AC wires went to the Load side of the SSR module at the connector labeled 1. The other AC cable went to my PSU at the AC N connector.

The Ground/Earth cable went to the AC earth connector, while the 2 thermistor wires went to the bed thermistor.

Cabling – Wire harness.

So much wiring when custom building printer!

As I created a connector plate for the 5 extruder motors, I did the same for my wire harness going to the carriage/hotend. It’s a LOT of wires for sure, but they are needed.

The 6-pin plug to the left is for BLTouch. 2 of those pins are for z-min and 3 for servo. 1 is unused.

The big 9 pin plug is for heater (2), heatsink fan (2), printobject fan (2), thermistor/thermocoupler (2-3 – some thermocouplers has 3 or even 4 wires)

The handdrawn “labels” are meant for my reference untill I get it working. I plan on printing some nice versions at some point.


Internal view

So many wires! I had a lot of cable clips from my old Um2 extrusion clone project, but recently threw them away… need to print some new to get rid of the duct tape when I find the time 🙂

Rear connectors

Here we can see how the new connectors looks; with and without the matching wire-harnesses hooked in.

I havn’t put connectors on the far end (at hotend) which’ll wait till I get the last parts I need to make the Y axis and carriage in order to make the correct length.

That’s it for now.

Hope you liked it, and thank you for following my proejct. 🙂

Posted on

BeTrue3D Printer build part 3 – Assembling everything (almost)

Time for a new blogpost on the build-process of the BeTrue3D Printer, since last.

I’ve kept my facebook users updated, via regular posts to my facebook page, but it has mostly been photos, while I’ll explain what has happened and talk about the decisions made in this post.

  1. Parts Used
  2. Z-stage parts
  3. Z-stage Gantry plate
  4. Printbed
  5. Building the BeTrue3D Printer
  6. Overengineered?
  7. Lots of extra alu-extrusions?
  8. Panelling
  9. Mounting electronics
  10. Extruder connector panel
  11. Extruders
  12. LEDS
  13. Front LCD planning
  14. Handles
  15. Conclusion

Lets start by looking at the status right now, and see if it matches my projected result.

I’d say it’s a success. Means I was either lucky my planning worked, or that I was thorough when doing my design and planning. I prefer to pick the last one.

Parts used

I AM going to make a complete BOM (Bill Of Material). I had created a parts list, on my open builds page, but it disappeared since I worked in 2 tabs at the same time, which isn’t working for that site.

I am going to fill it in again when I find the time to do so 🙂

I did create a small  youtube video when unpacking the big box of goodies from RobotDigg, where I bought most of the parts aside from alu-extrusions and metal rods.

Z-stage parts

Here you can see the incredible nice hollow Nema 17 motors along with the bespoke 1204 300mm ballscrews and BF10 part used to fixated the ballscrews in the top. I don’t need support block near the motor, as the shaft goes through the motor and is fixated in the bottom, as you can see from the images.

Z-stage Gantry plate.

This is one of the few custom items I’ve had made for this project. I simply just had no way of making this myself, but was lucky I found someone who could manufacture it for me.

I learned a lot doing this project. Not least that it’s important to mark it m3 and not ø3 when I wanted a hole with threadding. Meaning mark endresult and let the professional figure out the hole-size, unless you want to do the threadding yourself.

After recieving it, someone asked me if I wanted to use motor-alignment on z-axis! Uhh? I talked some to the maker of RepRapFirmware and was told he planned to add this in a later firmware version, so I decided I’d make mine compatible for such a day, which meant I had to make a hole for an additional long m3 screw to hit a second z-max limit switch to facility this motor-alignment thing.

I carefully measured up, used some painters tape, and then drilled a 2,5mm hole and then tapped m3 using my trusty Makita hand tool. First time I use powertool for this, so was pretty exciting. Remember to use some cutting-lubrication if you do this kind of thing 🙂

I had one last thing I needed modifying, as the hole for the ballsc were 21,5mm and the ballscrew actually ways 22mm, so had to enlarge it slightly.

You can see how it doesn’t fit in the hole. I carefully used my dremel and a small file. Was actually pretty easy to do 🙂


This is the second custom item for the BeTrue3D Printer build. I had a PEI-coated, black oxidized plate made with a “logo” lasered onto it by
Note: Price is much higher as soon as you move away from natural color. Lasered logo is only like €3 though! He makes custom sizes at no extra charge, so it’s perfect for any printer project. He also offered to make the z-lift plate at a resonable price, which I would had taken if I hadn’t found one nearby who could do it for me, so this is a nice source for custom aluplate work.

It looks absolutely awesome! unfortunately the rear hole was not completely centered. My plate is 29cm long and the hole should be at 14,5cm, but was placed at 15cm. Guess the mechanic just had a 30cm plate in mind, when he ‘centered’ the hole.

While I was rather bummed by it, Frank from set right out and made me a new one without complaining, which is incoming now.

I did not have to return the faulty plate, as some shops insist on doing, which is a huge bother.

Building the BeTrue3D Printer

In my last blog post I talked a lot about dimensions and why I did what I did. One thing I didn’t talk much about was the reason for the 2 layers of alu-extrusion bars at either end, up top. I did it in order to maximize the XY plane, as the sliders can slide in over the mechanics of the Z-stage.

Doing it like this also ensured I had some flexibility on the placement of the bars fixing 16mm rods in place, without compromizing the rest of the structure, as these rods might vary a bit in length.

I have used 12mm rods for the X-axis to avoid any bending. I can bend the 8mm rods in my Ultimaker 2 machines using a finger deemed 8mm too small for longer runs. I couldn’t be sure about 10mm so went with 12mm.

I’ve used 2x SCS12UU with bushings for each side. They each have a selfgraphite block instead of ballbearings to reduce noise and to raise accuracy as well.


I’ve heard this quite a few times. And yes, you can say it is. I’ve done it for a reason though, which is an attempt at ensuring squareness and rigidity. I’ve had multiple checks build in, meaning if one thing doesn’t fit, it means something is wrong in a differnet place.. meant a lot of time putting it together, but also that I had some “early warnings” if I had done something wrong, and could fix.

If you are a professional mechanic with relevant skills, I’m sure all this precation is unnessary, but for me, as a novice-builder, it has proven quite usefull 🙂

Lots of extra alu-extrusions?

Even aside from the build in “fail-safes” I’ve added a lot of extra aluminium bars. To be more exact, I have 4 extra at the “floor” and 1 extra at the top almost- rear.

Alle these bars are put in place to mount panels and electronics on, and also to hide facility the wiring in an orderly fashion. I used the bars, as it was a cheap and easy way to do it since I was ordering a lot anyway.


I originally planned to have some acrylic plates lasercut, but I decided to cut some costs and make some myself. While browsing for material to use, I stumbled across some nice “hobby plate” made of 5mm thick white paper material. It’s pretty sturdy, but very easy to cut and much cheaper than anything else I looked at.


Mounting electronics

The big job of mounting electronics started. I had the PSU placed in the center, but since the GND on the Duex5 to psu must not be longer than 100mm, I moved it to the side, for shorter wirering.

I also modified the space between the Duet WiFi and the Duex5 in order to accomodate the wide connector cable between the two.

I didn’t use the ferrules that came with the board as I simply just couldn’t get them right.

I even bought a special tool for it, but didn’t get good results. I know ferrules are the professionals’ choice, but I just couldn’t get it to work.

I used some basic clamp on metal pieces instead. I really don’t know what they are named, but for the PSU end I used the O-ring style and straight pin for the terminal end on the electronics parts. I used some heatshrink on each end.

I did this using some basic tools. The crimp tool was bought in a local hardwareshop for $12 or so.

You can see the DC-AC Solid State Relay next to my PSU. I’m going to use this for my AC Silicone heater for the heated bed. I have a small fuse between the PSU and SSR in case something goes bad.

Next photo shows how I’ve mounted my 5 extruder-bar (albit mounted wrong here), and also done some of the back paneling, including power connector and off/on switch. It has build in fuses. AC earth is connected to the frame of the printer as well in case some short is happening.

Extruder connector panel

I rather don’t like hard-wiring my external components to internal parts, as it is really hard to remove or repair parts, so I set out to make a panel with connectors for each of the extruders.

You might spot I have moved up the extruder-bar. I had to do this, or the bowdne output would interfere with the belt running for the CoreXY mechanics. I had planned this, but didn’t look at my plans while executing.. that’ll teach me. Need to find a fitting piece of material for the gap now!

The connectors are 4-pin Mini-molex 3.0


In case you wondered what kind of extruders I’m using. I’m using Belted Extruder V3 1,75mm which I desinged myself.

I designed them after I tried a wealth of different extruders, but most required special parts, which only the designer sold, or other exotic hard to come by parts.

Every single extruder I could find contained printed gears, which I came to dislike, after using them for a while, as they do deterioate, so they must be replaced. Replacing them is not as easy as it sounds, as it really takes some skill and effort to get them perfect. I usually had to print at least 3 to get 1 perfect gear. And my printers are calibrated well.

In other words, I wanted to design an Extruder everyone could build. The printed parts are very forgiving if the printer used to print them aren’t perfect, and the other parts are easy to come by and of good quality, like the E3D hobbed bolt, instead of some generic bad quality hobbed bolt, without being overly expensive.

I wanted a geared extruder to make it more powerfull and accurate while at the same time having the option to use a small motor to save space and weight.

I did not want gears grinding at each other, as it makes noise and are more prone to backlash than aluminium GT2 Pulleys and belts.

Why not use E3D Titan Extruders? They are smaller, true. But they weight twice as much, unless you don’t use their recommended motor, and have gears instead of belts. While gears instead of belts might not mean a lot, for most people, the price of Titan is double that of the one I published. Times 5 and it means a lot.

I also created mine before Titan was published 🙂 Titan has a genius tract for the filament though, which is awesome!


I just have to have some lightning in my printers, so LEDs it is. Some years ago I bought a big roll of leds, which this is the last I’m now using. Really nice to just cut it into fitting pieces, solder them together and attach to your printer or similar.

I cleaned up the alu-extrusions using Acetone first before attaching the Leds.

Front LCD planning.

I sort of forgot it at first, but remembered I needed some wiring for the planned Panel Due 4.3 touch screen, which I want mounted up top right-side.

Using my trusty dremel to cut out a hole for the connector in the panel and also had to cut away small bit of the alu-extrusion to make room for it in there. I used some shielded 4-wire cable I had, which were perfect for this.


You might noticed it above – handles!

After adding the extruders the BeTrue3D printer got rather heavy but was ok to lift.. untill I put on sidepanels, which left me nowhere to to grab onto it.

I sawed a handle on each side, and aligned the holes up with the lower top-alu extrusion to give me a good grib. The panels holes are 1mm above the alu-extrusion and I’ve rounded the cut to make it comfortable to use.


I’m waiting for the new printbed from, and also the Y sliders. I am also waiting to recieve the 5 new heatsinks from, which I hope to get any day, so I can plan a carriage for it.

Last but not least, I need to setup the RepRapFirmware, which I’ve also had time to make a new blogpost about 🙂

That’s it for now, so have a good one untill next time.