Posted on Leave a comment

Motion Configuration on Ramps 1.4 With Marlin Firmware

Motion Configuration on Ramps 1.4 With Marlin Firmware @section Machine

This is going to be a, hopefully, complete tutorial on configuring Motion Control on 3D printers build on Ramps 1.4 using Marlin firmware. Not having Delta, or CoreXY printers included.

I am going to use Pronterface/Printrun host program to connect to my printer and issue Terminal commands (G-codes). That sounded very hairy, but it is just a simple program with a graphical interface.

Even though I’m going to use Ramps 1.4 and Marlin firmware 1.0.2, this tutorial will most likely be usefull for most setups. We are going to use the newest Arduino IDE to edit the Marlin firmware.

What we cover in this Instructables:

  1. Stepper Direction
    1. Homing Direction
  2. Software Endstops
  3. Some final tweaks
    1. Quick Home
    2. Babystepping
    3. All set

Small change since last:

My last instructable was made using Release Candidate 2 of the Marlin firwmware. Due to some incompatibilities I had to change to the latest stable firwmare, so the layout is a bit changed from the images in the previous Instructables. It means I made brand new images for this one 🙂


  1. It is required/necessary that you have setup your endstops before beginning on this Instructable.
  2. You need to have defined you steps for your steppers. You can find calculators here:

Step 1: Stepper Directions @section Machine


Place your Carriage (hotend assembly) in the middle of your X and Y axes, and connect to your printer using Pronterface/Printrun. Also power it up.

Check Endstop Status

Start by sending M119 to the printer to check endstop status. They should all show Open before continuing.

Pronterface – Check Stepper Directions

Now use the directional arrows in Pronterface to gently move the axes, using 1mm and 10mm. You might only be able to move an axis using the + for that axes.

The main thing here is to write down wheter an axis is moving the right direction or not.

Pro-tip: You might want to keep you finger near the on/off switch on your printer.

Firmware – Stepper Direction

Find INVERT_X_DIR in your Marlin firmware in the Configuration.h tab. If you use a Release Candidate of the firmware, it will be located in the @section Machine.

#define INVERT_X_DIR true    // for Mendel set to false, for Orca set to true
#define INVERT_Y_DIR false    // for Mendel set to true, for Orca set to false
#define INVERT_Z_DIR true     // for Mendel set to false, for Orca set to true

For any axis which moves the wrong way, you change the true to false or vice versa.

Firmware – Homing direction

Next we setup homing direction.

For most printers we want to home it to our front left corner, which we define as our X and Y minimum endstops. We also want our hotend to be close to our bed, which is Z min as well.

These XYZ minimum endstops are also referred to as our Origin and will normally be 0 on their respective axes.

Find X_HOME_DIR in Configuration.h file, and set HOME_DIR for X, Y and Z to -1. – as shown in below code-block.

This tells our axes to home to the minimum endstops.

// Sets direction of endstops when homing; 1=MAX, -1=MIN
#define X_HOME_DIR -1
#define Y_HOME_DIR -1
#define Z_HOME_DIR -1

Some printers use different topologies, so you might need to change this. Ultimaker 2 homes to X min, Y max and Z max.

Verify our changes

Disconnect Pronterface, Upload firwmare and check if the axes move in the right directions. Make changes if neccessary.


When everything moves as it should , you test the homing function. You can test using the icons with a “house (home)” on it for each axis, or use the G28 command followed by the axis you want to home.

If you just type G28; you home all axes.

You can also type G28 X or G28 XY or some other combination.

Step 2: Software Endstops – @section Machine

max-pos.jpgBefore starting on this section we need to make a change in the Configuration_adv.h sketch.

Locate and make sure ENDSTOPS_ONLY_FOR_HOMING is commented out, like so:


We need to complete this step in order to get readings from any max-endstops we might have in place.

If you do not have any max-endstops, you can ignore thisstep.

G28 – Start by homing

  1. Home all axes using G28 (1)
  2. Use M114 (2) to verify that your printer is actually considering itself at 0 n all axes.
  3. Protip: The M84 (3) I send (shown in image) is to turn off motors, as they buzz while I type.

Software endstop – Travel limits after homing

In Configuration.h find max and min_software_endstops, and make sure they are set to true

#define min_software_endstops true // If true, axis won't move to coordinates less than HOME_POS.
#define max_software_endstops true  // If true, axis won't move to coordinates greater than the defined lengths below.

Below is the default settings for software endstops.

For our purpose it is usefull if you change them to something more than your actuall axes lengths in order to move our axes as far as we need to find the max area for the printer.

Pro-tip: If you have your homing endstop at a MAX_POS, you will need to use negative values to indicate how far back it can go in order to reach the MIN_POS

// Travel limits after homing
#define X_MAX_POS 205
#define X_MIN_POS 0
#define Y_MAX_POS 205
#define Y_MIN_POS 0
#define Z_MAX_POS 200
#define Z_MIN_POS 0

Axes MAX positions

Below points are shown in the image numbered blue 1-4

  1. If you havn’t done so allready, you start by homing all axes, using G28 (1)
  2. Issue M114 command to make sure all axes are at 0.
  3. Now move all AXES as far towards MAX as you can. Either untill you hit a MAX endstop, if you have any such, or just as far as you can move it and stay within you bed – you do not have to Count!
    1. If you have Max endstops you can read the position in the terminal window.
  4. Issue M114 to get a read out on posistions. You can see it rounded up.

Update your firmware

Now go update your firmware according to your system. Notice how I substracted some 11mm due to a clip on my heated bed. You might have similar considerations.

Pro-tip: Note how I place // after the mm input and then write notes. This is a good way to keep tabs on what you did for what reason.

// Travel limits after homing
#define X_MAX_POS 227 // 227.81 MAX
#define X_MIN_POS 0
#define Y_MAX_POS 180 // 190.96 MAX - 11 for clip
#define Y_MIN_POS 0
#define Z_MAX_POS 190
#define Z_MIN_POS 0

Step 3: Final Tweaks and Famous Last Words


Some final tweaks

We might want to undo the setting we made to ENDSTOPS_ONLY_FOR_HOMING. Meaning we enable it again, in the Configuration_adv.h file.

I’m enabling it again as I want to be able to use Z-offset to tweak nozzle distance from the bed, which would be impossible with this setting enabled – I’ll see if I can’t make a simpler guide than the one I linked to. If you have no such plans, then keep it disabled as it is an extra safety measure. I’ve used it up untill now and liked it.
Notice I made a comment above the line. It’s to make it easier for me to find it.

// MDN Endstops only for homing
#define ENDSTOPS_ONLY_FOR_HOMING // If defined the endstops will only be used for homing

Quick Home

I do not like waiting for the X and Y axes hóming seperately. Luckily we can make them home at the same time by ennabling (uncommenting) QUICK_HOME in the Configuration_adv.h

// MDN Quick home
#define QUICK_HOME  //if this is defined, if both x and y are to be homed, a diagonal move will be performed initially.


You can also enable BABYSTEPPING, which I do below here – it Means you can use your LCD knob to move the axes in tiny increments to tweak the printer after it has started printing. Very usefull to tweak Z-axis if it is a bit off. There is also a setting to define feedrates when using an ULTIPANEL (lcd).

Pro-tip: If you aren’t aware of it, you can bring up the search box by using CTRL+F og from Edit -> Find…

Pay attention to the warning about this functions ignores Z-min, so you can “crash” the bed against the nozzle.

In reality you have to turn the knob a lot to make the bed move.. like an entire turn to even notice the bed moving, so you have to have very quick fingers to do any harm. I know I’ve played a lot with it and took a while to even figure out that it wasindeed moving.

The Babystepping is only gong to show up in the display after you have startet printing.

// Babystepping enables the user to control the axis in tiny amounts, independently from the normal printing process
// it can e.g. be used to change z-positions in the print startup phase in real-time
// does not respect endstops!
// MDN Babystepping

All set

Now your all set with all the basic movement settings configured 🙂
I’ll recommend you read through the Configuration.h and Configuration_adv.h files and see if you find anything interesting. Like X_HOME_RETRACT_MM which tells the printer how much to retract after hittingendstop, then slowlinggoing back.

Have fun and maybe even follow me here on 🙂

Posted on Leave a comment

Configuring Endstops on Ramps 1.4 With Marlin Firmware – @section Homing

This is going to be a, hopefully, complete tutorial on configuring endstops on 3D printers build on Ramps 1.4 using Marlin firmware.

I am going to use Pronterface/Printrun host program to connect to my printer and issue terminal commands (G-codes). That sounded very hairy, but it is just a simple program with a graphical interface.

Even though I’m going to use Ramps 1.4 and Marlin firmware, this tutoral will most likely be usefull for most setups. We are going to use the newest Arduino IDE to edit the Marlin firmware.

Configuring endstops often boils down to being methodical in finding faults, which is why it is causing so many problems for many people, as many hope they can, and try to, just plug in the printer and hope it works. Which it rarely does.

If it doesn’t Work it can be tempting to do something rash in hope of a quick fix, which in turn tends to compound the issues and make it much worse.

Common symptons of faulty endstops are motors/axes which refuses to move, move in the wrong direction or move a tad this and then that way.

In short: setting up endstops correctly is not just recommended, but is mandatory before beginning to configure movement, including homing -settings for the Axes.

In this tutorial we are going to:

  1. Explorer physical endstop pin-layout on Ramps 1.4 board.
    1. Connect 2 and 3 pin endstops.
  2. Get endstop status and configure Marlin firmware @section homing using Pronterface and the newest Arduino IDE
  3. All done. Ready for motion configuration.

Step 1: Endstop Pin-layout on Ramps 1.4

Our first task is to identify the pins we are going to use on our Ramps 1.4 board.

Endstop pin-layout

When looking at the Ramps 1.4 board with the power-plugs facing left, the endstop-pins are located in the upper right corner as shown in the image.

From left to right we have X-min, X-max, Y-min, Y-max, Z-min, Z-max

The top most pins are Signal pins, the middle pins are ground and the lower pins are 5v/Vcc.

Connecting Endstops

If we use a simple limit-switch as our endstop, shown on an image here, which only uses 2 wires, we are going to connect them to the Signal and Ground pin. It does not matter in which order they are connected. Signal and Ground are the 2 top-most pins.

The limit-switch has 3 legs where 1 is for signal and the other 2 are labeled NC and NO, which means Normally Closed and Normally Open, respectively.

Choosing NC or NO

I prefer using NC which Means a current is running through it all the time. When depressing the arm on the switch the circuit is broken and it triggers a response. It also means a fault is registered if a wire breaks, a connector comes loose, or something similar.

If you use NO the Circuit is closed, a current runs through it, when the arm is depressed. This means that no alarm is triggered if a wire or connector comes.

Some years ago NO was the norm as it wasn’t as sensitve to noise and Thus did not make false positive (triggering the endstop) due to noise from motors.

The Electronics now, even on cheap Ramps 1.4 has imrpoved a lot and the noise should not be an issue any more, so I’ll recommend using the NC pin.

3-pin endstops

More advanced endstops which have LEDS or other Electronics Integrated use 3 wires. One for signal, ground and 5v/vcc.

When connecting these kinds of endstops it is vitally important that the wires are correctly connected. The Signal and Ground becomes important, as opposed to the 2-wire switches, as you risk shorting out the Electronics if you connect the signal to gnd and gnd to signal, while also using the 5v/vcc pin.

Testing wires

When you have soldered the two wires to your endstop, you should test for continuity on the wires using a Multimeter. If you do not have one, I’ll recommend you go buy one. A cheap one will do.

If you use more advanced endstops like IR sensors or similar, you should test it according to the manufacturers documentation.

Step 2: Endstop Status Using Pronterface and Setup Marlin in Arduino


Now we have successfully connected our endstop and it is time to setup our firmware.

Using Pronterface

Fire up Pronterface and connect to your printer.

You can see in the middle of the program, marked by a blue Square, I have added some custom bottoms for actions I use a lot like getting Endstop status, allowing Cold Extrusion and Vis Temperature on Extruder (Vis = show in Danish).

You do not have to create any button, but it is a nice tool. Just click the +, type in some text and the Gcode you want to use. The code for Get Endstop Status is M119

Commands can also just be written in the input boxt in lower right corner, see image, and exectud by pressing enter or send.

Using M119 command

First make sure no endstops are triggered. Move the Axes if neccessary. It makes it much easier to do this if all endstops has the same status. When all is ready you issue the M119 command.

After issueing the command you will most likely see some endstops with the status of OPEN and some with the status TRIGGERED

The ones with the OPEN status are most likely configured correctly, while the other endstops are either defective, activated by your axes or the firmware needs to be corrected.

Fault finding/verifying

Now that we have our status we check to see that all the endstop with OPEN status are working correctly. You do that by manually activating them one by one while issue in the M119 command. If the status does not change when activated it is most likely due to bad pin-wiring on Ramps, but it can also be the firmware.

If you have any endstops not behaving you turn off the printer, unplug the USB and Check the pin-connection.Correct as nesccesary.

Also check for continuity again, using a multimeter.

Make a list of the endstops which shows the staus as TRIGGERED when not triggered, or just keep pronterface open to see the output.

Configuring Marlin firmware in Arduino IDE

Open the Configuration.h file/sketch/tab and scroll Down to the @section homing – around line 330 or so.

Make sure you do not have 2 // in front of #define ENDSTOPPULLUPS. If you have, then remove them, upload the firmware to your printer and redo the tests we just did in Pronterface.

Note: remmeber you have to discconnect in Pronterface before uploading firmware or you will get an error in Arduino IDE

Now go Down a few line to “// Mechanical endstop with COM to ground and NC…” and change the value from false to true or the other way, see image, for the endstops outputting TRIGGERED when not triggered.

// The pullups are needed if you directly connect a mechanical endswitch between the signal and ground pins.
const bool X_MIN_ENDSTOP_INVERTING = false; // set to true to invert... 
const bool Y_MIN_ENDSTOP_INVERTING = true; // set to true to invert...
const bool Z_MIN_ENDSTOP_INVERTING = false; // set to true to invert...
const bool X_MAX_ENDSTOP_INVERTING = true; // set to true to invert...
const bool Y_MAX_ENDSTOP_INVERTING = false; // set to true to invert..
const bool Z_MAX_ENDSTOP_INVERTING = false; // set to true to invert...

Upload the firmware and redo the test in Pronterface.

I changed my Z-min to true from false and it now displays correctly in Pronterface – see image.

Step 3: All Done. Ready for Motion Configuration

Congratulate yourself as you have just setup one of the most important features of your printer.

You actually don’t need to use endstops, but when you do, you really need to have them configured correctly before you can move on and setup the motion of your printer.

Posted on 2 Comments

Smoothieware – MKS Sbase – Controller Basics and Intro


I’m really pleased to see how this basic intro into Smoothieware and the MKS Sbase 1.x controller have gotten so much attention, and really hope it’s going to help people get started or decide not to.

What this is about:

This Instructables is about finding our way around and Configuring the MKS Sbase 1.x 32-bit controller Card basics and intro to Smoothieware. It can be used for Smoothieboards as well in most regards.

I am going to explain and set it up to work as a new controller in my Ultimaker 2 clone with a single extruder.

What this is not going to be:

I am not going to go into the hardware of the board, aside from the need to connect relevant cables.

I am not going to do anything advanced in the firmware/configuration

Table Of Contents:

  1. Connect and install
    1. Connecting USB
    2. Installing firmware
  2. Configuring Smoothieware compared to Marlin
  3. Obvious difference from Marlin
    1. Less obvious differneces
    2. Firmware and Config file(s)
    3. Configuring firmware
  4. Firmware Step 1: Default feed rate
    1. 1/32 Multistepping
    2. Connecting Motors
    3. External Motor Controllers
  5. Firmware Step 2: Cartesian axis speed limits, pins and current
    1. Pins
    2. Current
  6. Firmware Step 3: LCD, SD and Extruder
    1. LCD and SD
    2. Extruder Setup
    3. Delta driver current
  7. Firmware Step 4: Hotend temperature control configuration
    1. Thermistor Type
    2. PID Tuning
    3. Hotend Thermistor – Physical Layout
    4. Hotend Heater Pins – Physical Layout
  8. Firmware Step 5: Heated bed temperature control configuration
    1. Thermistor Type
    2. Temperature Control Bed BANG-BANG
    3. Heated bed thermistor – Physical Layout
    4. Heated bed heater pins – Physical Layout
  9. Firmware Step 6: Configuring Endstops
    1. Homing direction
    2. Disable unused endstops
    3. Define axes size
    4. Reversing endstop output
    5. Fast and slow homing rates
  10. Firmware step 7: Network Settings
  11. Step 8: What’s next?
    1. More advanced setup?
    2. Using Switches

Step 1: Connect and Install

In order to install the drivers for MKS Sbase v1.x (opens shop on Aliexpress) board on our computer we first need to go and download the necessary drivers from the makerbase makerbase-mks on

Note: You do not want to use MKS firmware as it is redacted. Always use firmware from Smoothieware. If confused about the name “Repository”, then just look at it as a folder of files.

Click the file and click the Download in Github and save it somewhere on your computer, then extract it to a folder.

Conencting USB

Plug in USB to the board and look at the LEDs at the upper left corner.
Immediately the D7 led lights up. After a bit D1 also starts lightning while D2 and D3 blinks rapidly.

Open device manager and update drivers for the new Smoothie/Seriel USB device with the signed drivers you just downloaded from Github located in the easy to find folder:

Mine installed fine on Windows 10 x64 pro.

Installing firmware

  1. Firmware from MKS are just and old copy of Smoothieware, so we always just want to use the newest version from Smoothieware.
    1. In other words: always use firmware from Smoothieware.
    2. If you can’t find config.txt file from original smoothieware, just use the one from MKS.
  2. Download official firmware from Smoothiewares firmware page which is a subpage on their own Github page (you might want to download their full github repository (folder) in order to find their config.txt file)
    1. Start by using the Stable version. When everything is working fine, you can use the Nightly version instead. It is the newest version, but not fully tested yet, and considered as beta/test.
  3. Insert the SD Card into the MKS Sbase board and plug in the USB Cable. Your SD Card is now going to show in your file-Explorer.
    1. If not, you need to make sure you have the Drivers installed.
  4. If you can’t find the config.txt file from Smoothieware, just locate the config.txt in \MKS Sbase\MKS-SBASE-master\MKSSBase-firmware and copy it to your SD Card.
    1. Smoothieware suggest disabling auto-Mount on the SD when connecting to USB. Especially when using a MAC, as MAC OSX tends to do funky stuff at strange times.
    2. I have changed nothing on my win10. And nothing bad has happened the past year.
  5. The D7 lights up, shortly after D1 follows. D2, D3, D4 blinks and then D4 turns steady while D2 and D3 continues blinking.
    1. At this point, the firmware.binchanged had changed to firmware.cur file on the SD card
  6. After successful updated, the file name will turn into firmware.cur.

Changing or Updating firmware

Just delete the firmware.cur file from your SD, or rename to firmware.cur.old or similar, and copy on the new firmware.bin file to your SD. Powercycle your printer (also unplug USB) and you can see your new firmware.cur file on your SD card.

Note:After making any changes to your config.txt file in the future, you need to power-cycle your controller, meaning disconnect both power (if in use) and USB. You can send a reset command, but only through true terminal use and not through Printrun/Pronterface or similar.

You can use the edge firmware which is eseentially a realease candidate, which has more features, but also might contain some errors. This goes beyound this Instructables.

Step 2: Configuring Smoothieware Compared to Marlin


I’ve been using Marlin firmware on Arduino+Ramps for a long while, same as the majority of 3D people, so I’ll use Marlin as comparative source for configuring firmware.

Obvious difference from Marlin

Configuring Smoothieware is done in a single config.txt file which is saved directly to the SD card, using notepad instead of a big program like Arduino IDE. The firmware settings are updated by power-cycling the printer or sending a reset command to it. This compared to Marlin with a very large amount of sketches (files) we need to keep track of and modify – see Photo for settings the printer I’m actively upgrading here!

Less obvious differneces

There are some less obvious differences between Marlin and Smoothieware, where the most notable are:

  1. Speeds are rather confusingly listed as a scattering of mm/sec and mm/min in Smoothieware and Marlin, so have to be aware of this. No clear pattern is in place.
  2. The axes in Marlin are listed as XYZ and Extruder while the axes in Smoothieware is listed as Alpha, Beta, Gamma and Delta/E0 and E1

Firmware and Config file(s)

As you might have gathered, the Smoothieware firmware is based on 2 files. A firmware.bin and a config.txt file. There is a base config.txt file and a bunch of preconfigured configuration files present in the repository from MKS, located in a subfolder. The Config file can also be named without the .txt extension.

Note:This is a template and not just something to put in and use.

You can pick the one that most resemble your printer, like Delta or Cartesian. I’m just going with the basic Config.txt file.

Configuring firmware

First make a backup of your config.txt file, then open config.txt using notepad. Disable “Word wrap” as it might confuse you some.

Note: Smoothieware warns against Notepad++.

Also remember to take your microstepping multiplier into account. My setup here is based on 1/32 multistepping to take advantage of the build in DRV8825 drivers. Multistepping jumper is placed in upper right corner. (1)


You can make your own comments by writing # at the start of your line and then your text. This is very usefull to remember what something is about.

I’m adding a line to the start of the file: # Ultimaker 2

Step 3: Firmware Step 1: Default Feed Rate

I have 300mm/sec in Marlin, which translates to 18000mm/min, so I’ll change the preconfigured 4000 to 18000. My Ultimaker is very well tuned, so you might have much lower setting – or higher if using a Delta.
Default_feed is translated to DEFAULT_MAX_FEEDRATE in Marlin.

alpha_steps_per_mm and beta_steps_per_mm needs to be changed to 160 while gamme_steps_per_mm is changed to 800.

acceleration is changed to 300 and z_acceleration to 80

1/32 multistepping

All of the above are 1/32 multistepping. In order to use 1/32 you also need to set the correct jumper on your Controller. It is located almost at the upper right corner with 16|32 next to it. The pins are named J3.

Note:Do not change any jumper with power on. Including connected USB cable

Connecting Motors

There is really not much to it. You need to have some 4 pin XH 2.54 4-pin connectors. You can use dupont as well, but they tend to fall out.

The Controller board is clearly labeled X (Cm2_M2), Y (Cm3_M3), Z (Cm2_M4), E0 (Cm2_M1) and E1 (Cm3_m5).

External Motor Controllers

If you need to hook up some external motor controller, you can do it using the pins just below the big heatsink over the drivers.

The pin-outs are labeled Jc_M2, Jc_M3, Jc_M4, Jc_M1 and Jc_M5 listed in order of above motor conenctors.

Step 4: Firmware Step 2: Cartesian Axis Speed Limits, Pins and Current

Defaults are 10000mm/min which translates to 166mm/sec (to keep reference to Marlin users) which is enough for many printers. Note how I write down defaults/current value in notes after the setting. This is a good idea in case (when) you need to make changes.

I have 300mm/sec on my Ultimaker 2 though, so I’ll put in 18000 for XY and 4800 for my Z axis.


I’m not changing any pins at the moment, but we have to type in the _max_rate for each axis, which on a cartesian printer i the same as _axis_max_speed. This is not the case for Delta printers.

So for alpha_max_rate and beta_max_rate I enter 18000 and for gamma_max_rate I enter 4800.

Take note of the ! listed after each _dir_pin – this denotes the direction of an axis, which means you can remove or add ! if your axes is going the wrong way.

Go back and modify this later as needed instead of swapping around the cables, which you can’t do, if you use the proper connectors in any case.


My XYZ Nema motors are rated at 3.2 voltage and 1.7amp.

If I wanted to feed my motors max current, I’ll set the _current to 1.7 amp, but the motors would run rather hot then, so I’ll try out using the 1 instead which should be plenty.

I have set my Z-motor to 0.8 amp as it really isn’t doing much Work, translating to: gamma_current 0.8

Step 5: Firmware Step 3: LCD, SD and Extruder

LCD and SD

I’m not going to change anything regarding LCD and SD.

Extruder setup

I am not using the original extruder, so my numbers will be different here!.

I have uncommented two settings here: extruder.hotend.retract_length and extruder.hotend.retract_feedrate but I must admit I do not know wheter this is necessary or not, since we configure this in our slizer in any case.

Delta driver current

One thing of note here is the current for our delta driver, which translates to our Extruder 01 motor.

My Extruder motor is rated at 2.5amp. I want to give it some juice, but not running it too hot, so I’ll put it at 1.5amp. I am running a 5.1 geared extruder, so I do not really need to pressure it. 1.5amp is probably too much as well.

Step 6: Firmware Step 4: Hotend Temperature Control Configuration

I’m not changing the pins or connector we use, but stick to the default.

Thermistor type

I do change the type of thermistor used. I am using E3D hotend, which comes with a Semitec thermistor, so I need to change that.

To find the correct thermistor, we look at:

PID tuning

We do need to configure this, but we cant really do it at this stage since we need everything setup first.

When you are ready to do it, the command is slightly different than with Marlin firmware.

In Smoothiware the command is M303 E0 S60 to test at 60c. I did a test at 60 and then Again at 200 with new values.

Hotend thermistor – physical layout

In order to actually connect our thermistor we take a look at our pins image to figure out where we connect it.

Default connector for hotend thermistor is the one named TH2 on the board.

  1. TH1 is P0.23 – Heated bed
  2. TH2 is P0.24 – Hotend
  3. TH3 is P0.25 – Unassigned
  4. TH4 is P0.26 – Unassigned

I have made a small comment in the config.txt file to remind me that 0.24 is TH2

Hotend heater pins – physical layout 2.7 is the screw-terminals labeled Heater1 on the board

Below chart looks rather unorderly, but is listed as left to right on the controller-board. It is listed on the board itself, which makes it not as bad as it might seem.

  1. Hot-bed is P2.5 – Heated bed
  2. Heater1 is P2.7 – Hotend01
  3. Heater2 is P2.6 – Hotend02
  4. FAN is P2.4 – FAN

Step 7: Firmware Step 5: Heated Bed Temperature Control Configuration

There was no comment to clearly state the start of the heated bed section, so I made a start comment #Heated bed temperature control configuration to match the start of hotend section.

Thermistor Type

You might need to change the Thermistor to the appropriate type for your setup. Nothing else to it really.

To find the correct thermistor, we look at:

Temperature Control Bed BANG-BANG

I am running my heated bed through a SSR (Solid State Relay) which is not very good at handling PID, which uses higher PWM signals. I could do it by turning signals down to 20 (according to smoothiewares site), but I honestly don’t know how to do a PID tuning of my Heated-bed?

If I wanted to specify my frequency for the bed, it would be like this:

temperature_control.bed.pwm_frequency            20

I uncomment and change the setting for temperature_control.bed.bang_bang to true and also uncomment the next line temperature_control.bed.hysteresis

Heated bed thermistor – Physical Layout

Here we once Again take a look at our pins image to figure out where we connect the thermistor.

Default connector for heated bed thermistor is the one named TH1 on the board.

  • TH1 is P0.23 – Hot-bed
  • TH2 is P0.24 – Hotend
  • TH3 is P0.25 – Unassigned
  • TH4 is P0.26 – Unassigned

I have made a small comment in the config.txt file to remind me that 0.23 is TH1

To find the correct thermistor, we look at:

Heated bed heater pins – Physical Layout

temperature_control.bed.heater_pin 2.5 is the HOT-BED screw-terminals. This is the large screw-terminal right next to power input.

Below chart looks rather unorderly, but is listed as left to right on the controller-board

  1. Hot-bed is P2.5 – Heated bed
  2. Heater1 is P2.7 – Hotend01
  3. Heater2 is P2.6 – Hotend02
  4. FAN is P2.4 – FAN

Heated bed is default set as bang_bang which is fine for large areas like a heated bed.

Step 8: Firmware Step 6: Configuring Endstops

This sections looks very confusing at first glance, but it really not bad, when you first figure out how it is ordered.

Smoothieware source:

Homing direction

Lets setup homing direction for our Ultimaker style printer. We know it homes to X min, Y max and Z max. This translates to:

  • alpha_homing_direction home_to_min
  • beta_homing_direction home_to_max
  • gamma_homing_direction home_to_max

Disable unused endstops

We do not use X max, Y min and Z min endstops, so lets disable those, by typing nc, which translates to Not Connected.

  • alpha_max_endstop nc
  • beta_min_endstop nc
  • gamma_min_endstop nc

Define axes size

We need to define the size of our printer. This translates to Software endstops in Marlin.

  • alpha_max 213
  • beta_max 179
  • gamma_max 195.8

Reversing endstop output

Test output by issuing a M119 command to it. This looks different than when using Marlin, so instead of triggered, you get an 1 if the endstop is signalling a hit.

If you get a false positive you need to revert the endstop signal by adding an ! after the pin number.

You can see how I removed the ! from my alpha_min_endstop and how it changed the output when issuing M119 command.

Hint: Just don’t focus on 1.24, 1.27 or 1.29 which are the pin numbers, but just look at the !

Fast and slow homing rates

Homing rate transfers directly to move speed mm/sec.

I upped the _fast_homing_rate for X and Y to 100 and Z to 20. The Ultimaker 2 homes to Z max and it really just takes ages for it to home if you keep it at its default.

I actually had double this in Marlin, but want to test it out a bit, before raising it, since I just changed my heated bed to something heavier.

When hitting the endstop the axes retracts a bit, where the distance i defined in _homing_retract_mm, and then moves slowly back. This is defined by _slow_homing_rate some. I upped these well, especially for my Z axes.

Step 9: Firmware Step 7: Network Settings

If you are going to use the networked option you can go with automatic setup, where you enabled DHCP and your printer is given an IP from your router/DNS server.

If you want to configure your printer with a static address instead, you simply type in the IP address and subnet mask here.

I have changed it to something fitting for my subnet. Yours might be looking different.

I can now connecto to the printer using both a standard internet browser or using Pronterface.

Using an Explorer we get a simplified Pronterface GUI for our use.

I have kept telnet enabled as I want to see what options it gives me.

Note: Do disable any networking service you do not use, aa it will open a security breach where people might take over your machine. Especially disable Telnet if you do not use it.

Step 10: What’s Next?

This is it for now!

I hoped it helped you get started, or helped you decide wheter to make the leap for Smoothie-type boards and Smoothieware or stay away.

I believe I have fullfilled the purpose of this Instructables by getting started using the Sbase 1.2 controller and using Smoothieware.

We should by now have a functional printer, albit some tuning is stillneeded.

More advanced setup?

I allready did setup a Hotend Temperature and -fanswitch (2 switches), which I will cover in an upcoming Instructables.

Using switches

1) Fanswitch :: Be able to turn on/off my fan used to cool my hotend heatsink – I do not want it ON all the time unless it is needed, as it can be rather noisy.

2) A switch that polls the temperature for our hotend and then use the fanswitch to turn on the fan at temperatures at or above 50c and then off again, when temperature gets below 50.

Posted on 2 Comments

Lets build an Ultimaker 2+ Extended clone – Part 3 – Buy stuff 1

Buy Stuff 1

I originally thought to make just 1 post about buying items, but I quickly realized it wouldn’t be feasible, so I’m splitting it up into parts and doing a sum up in the end.

It’s time to start buying stuff!

I’ll go through the individual items and talk some about what to pay attention to and give a link to the items I bought, and a generic link with search results, but please note that the links might not work when you read this, so you might need to make your own generic search on Aliexpress instead.

Many items can be bought in different versions, so pay attention to the details, like material of the frame and size of filament for the hotend etc.

Ultimaker 2+ Extended frame/case

This is the most expensive piece on our build and it is of course very important.

Things to note:

  • These things can be found in a various materials. We want to get Dibond, which is a sandwich material with aluminium for each side and hard plastic for the center, for all the parts except for the sides of the frame, which are made from acrylic plates.
  • You can get them with Dibond for the sides, but that is up to you. The original is with acrylic sides, for light to shine through. Also heavier when using Dibond sides. It might be more rigid, but I don’t think so.
  • Many sellers feature wooden and all acrylic cases. You do not want to buy these. They are not as rigid and they are much more noisy.
  • They are sold in 3+1 basic versions:
    • Frame including all screws and nuts and the 8x F688-2RS flanged bearings used for the end of each 8mm rod.
    • Frame including all screws.
    • Frame without anything included.
      • The Print Table Back cover for the heated bed should be included with the frame. I have not seen this sold seperately.
        If you don’t see it on the photos and in the description of the item, then ask for it to make sure.
  • I talked about shipping options in Part 2 of this series, and it is very relevant here. I like to buy using DHL, UPS or similar shipping to make sure it all goes smoothly. It also says something about the seriousness of the seller to use a proper shipping company for these kinds of items.

Links for Ultimaker 2 Frame

You might want to search for “Case” as well).

8x Flanged Bearings

If they are not included in your frame, you need to buy 8x F688-2RS bearings.


Experient with free shipping and buying lots instead of individual bearings.

6, 8 and 12mm rods

These are tricky as all the rods I’ve ever bought from China has been bad.

I have not bought any from Aliexpress for a long time, so my advice is that if you do decide to buy rods from Aliexpress you MUST buy them from the same place you buy the above mentioned 8x flanged bearings. Why? Because the “bad” part of the rods is the tolerance that’s been way off, so bearings can’t go over the ends of the rods.

Buying from the same place will place the blame on the seller. If you buy from seperate sellers they can always say it is the other products’ that’s to blame.

These tolerance issues has been because the rods has been coated with some chromeplating (most likely not the right technical terms) put on rods that allready met the right diameters, resulting in rods that are effectively too thick and does not fit into the flanged bearings!

You might have bought rods and used on Prusa printers or other printers where you used ball bearings and not put on snug bearings… yes, that would work fine, but not for our usage.


Either buy rods and flanged bearings from same seller, or better yet, buy the rods from a known good supplier. I strongly recommend using if you live in Europe, or other similar quality supplier.


Ulticontroller, LCD and SD reader

Things to note:

  • Can be found for around $100 including shipping. Some shops still lists at $140 though, but talk to them about it, if you found a favorite shop or something. They are highly likely to lower the price to match competing shops.
  • The controller is pretty much just an 8bit Arduino Mega r2560 and Ramps build into one and primed for 24v usage. This board does not use normal thermistors though, and has build in 3x pt100 sensor amplifiers, which are rather costly on their own at £15 a piece from E3D!
    • All in all, it means that $100 is really not high price for this controller including lcd and sd reader + cables.
    • A very nice thing about it is how it’s very neat and ordred, so not a lot of wires and stuff sticking out with risk of falling out and ruining your controller.
  • Unless you buy everything at the same place, I’d like to wait a bit with buying this, as it is handy to have 2x PT100 sensors on hand to test it. These two sensors are found on the Heated bed and in the Hotend respectively, and you can’t really test it without these two as the controller is going to just give an error message.
  • You need sensors, motors and an SD card in order to test this. Preferebly some LED’s and a multimeter device as well, to test various output voltages.
  • You can use any 24v psu with at least 16amp, but I recommend buying an original one. I buy mine from an authorized Ultimaker reseller for about $75 including shipping, so it’s actually cheaper than buying on Aliexpress!

Links to Ulticontroller etc.

Current version is 2.1.4 for the Ulticontroller and v2.1.1 for the LCD/SD controller

I’ll strongly recommend you buy the parts as a single package as you’ll find it impossible to prove what went wrong if controller is from one and lcd from another, and something went and died when powered on.


I’m not sure the correct name is Z-stage, but I’m using it to describe the entire moving printbed construction. Ultimaker seems to call it Heated Bed Build platform.

You can buy it assembled/complete but these tends to be very expensive and the individual parts has dropped a lot lately, so either buy them individually or at least talk to the sellers to get the price lowered for the complete sets.

Print Table Base Plate

This is the base plate of the z-stage assembly. Meaning the aluminium plate everything is screwed on to.


Bearings for Z axis

We need 2x LMK12LUU bearings for the Z-axis. You want/need the square models or it wont fit on the Base Plate.


Print table Heated Plate

Special attentions needs to be made when buying the Print Table Heated Plate, as it comes with and without asscessories.

Things to note:

  • The black side with Ultimaker name is actually the underside.
  • Most plates comes without the screw terminals for wires (lengths in link are for normal ultimaker2, so correct as needed.) and the ones with the terminals are often much more expensive. Most comes witout wires as well, which means you need to do some soldering.
  • It is very important that the plate comes equipped with a PT100 sensor as it does not work with the Ulticontroller otherwise. Some comes with nomral Thermistors or without any sensors!
  • The screw holes on the blank sides must be countersunk, or you have to do it yourself.


Print Table Glass

This Print Table Glass plate is actually a pretty expensive piece as it is made from Borosilicate glass. It means you can take it directly from the printer, while it’s hot, and stuff it into your fridge or freezer to make the items pop loose.

You can use plain glass, just don’t stuff it into your oven.

There are Build Platform Glass Retainer clips mounted on the heated plate to hold the glass in place. These are designed for 4mm glass thickness. I’m personally using bulldog clips instead on sides and front, as the original clips are very hard on the fingers.


Expect a price at around $25

Heated Bed Cable Clip

I recommend you just print this Heated Bed Cable Clip. If you don’t own a printer to do it, just use a plastic ziptie untill you can print your own.

You can find the model on my thingiverse collection for Ultimaker 2.



The Ultimaker machines use 3 Fingerscrews to adjust the Print Bed.

They are made up of 3x Knurled Nut Platform, 3x Table Springs with dimensions of 15mm long, 9.2mm outer diameter and 1.2mm thick steel. You also need 3x m3 20mm screws with xxx head and 3x M6 washers (6,4mm inner diameter, 12mm od)

The Fingerscrew Knurled Nuts are normally sold alone or along with the springs. I don’t think I’ve ever seen washers and screws included. Notice that some nuts are golden instead of metallic looking.


Heated Bed Glass Retainer Clips

The glass on the print platform is held in place with 4x Heated Bed Glass Retainer Clips. The rear ones are installed using 4x m3 x8mm screws and 4x m3 lock nuts.

The 2 front clips are held in place using the Fingerscrews in one of the holes on the clips – resulting in the clips can be turned open to release the glass. I personally do not use the front clips, as they just kill my fingers, so I’m using the rear 2 clips and use bulldog clips on the sides and front, to keep the glass in place.

I have not seen these be sold along with screws and nuts.


Posted on 17 Comments

Lets build an Ultimaker 2+ Extended clone – Part 2 – Using Aliexpress

Welcome to Part 2 of the blog-post series with the never ending name of Lets build an Ultimaker 2+ Extended clone 🙂

This Part 2 is going to be about how to use Aliexpress, and what to keep an eye on.

  1. Ammendment – Ultimaker 2 assembly manua
  2. Lets get down to it – Picking suppliers
    1. Don’t just pick the first the best
      1. Sold By and Visit Store
      2. Product Name and Descriptionv
      3. Shipping and Shipping Price
      4. Total Price
      5. Positive Feedback
  3. Known good suppliers
  4. Common telltale to keep away

First a bit of an ammendment

I forgot to talk about the existing Ultimaker 2 Assembly manual, which is located on the official Github repository.

You might, rightly so, wonder why on earth I’m creating this blog-post series when a manual allready exists?

Well, that is a good question, and the reason why I havn’t got around to writing sooner. Not because of the question, but because of the existence of this manual, but the thing is: Just because you get an assembly manual, doesn’t mean all the small things are taken into account, nor, and especially, are there any things related to how to actually obtain the various parts.

This is the true heart of what I’m trying to do here: Descriping how and what parts you need to get, and what prices you can expect, along with advice on how to do this, or more particularily, what to avoid when shopping on Aliexpress along with some tricks on purchacing bundles.

Lets get down to it – Picking suppliers

I’m almost exclusively buying parts on – if you are new to it, you need to create an account and associate a credit card or paypal account. I’ve never had any issues regarding money been withdrawn when I hadn’t bought something. I’ve also always get my money refunded when relevant.

So, why make a section on picking suppliers, when it’s so easy?

Not all suppliers are created equal, and nor are their products.

When searching for items, you can sort by price, then do spend some time looking at the various items. You can also put a tick in free shipping, but that is not always favorable, so experiment some on this.

Don’t just pick the first the best

Do not just pick the first cheapest item that shows up in your search and buy it without doing a bit of investigation into the reseller.

Lets go through what to look for, using the seller from which I bought the frame and many of the parts as an example:

SANJIUPrinter 3D Research Center Store

Sold by and Visit Store

After a while you’ll get to recognize several resellers name listed under Sold by (Number 1), which is good, but untill then, you should use the Visit Store (Number 2) and browse through it.

If they sell all kinds of (junk) non 3D and CNC parts like fishing equipment, parts for various craft hobbies etc, you most likely don’t want to buy your stuff from that one – why? Because they likely just got a big batch of the items you look at, at a very low price, and just pass them on without any Quality Control. You might get lucky of course, and I’ve bought some minor items from such.

Product Name and Description

Product name and Decription (Number 3 and 4) are extremely important here. Yea sure! you might say, of course the name and description are important, but it is much more than as such. A good deal of suppliers use stock photos, so while it might show 2 pieces of something the name might say 1, or even worse, the name actually does say 2 pieces while the description states that you are only going to recieve 1 item.

This means you always must go through name and description for such discrepancies and take proper care. If in any way in doubt you should either pick a new store or Contact Seller (Number 5) and ask to make sure.

Also the seller might have special discounts listed in the Description. Our example seller here gives you discount if you add the item to a Wish list and add the shop to your Favorite Shop.

Note: in order to take advantage of rebates, you still need to add to basket, then click Buy (do not use one-click buying option), but choose a different payment method from normal, but not another card. This way the order is going to be placed, but awaiting payment. The seller can now go in and modify the price before you pay.

Simple, ehh? Not really, but it does work.

Shipping and Shipping price

Pay attention to the Shipping price and method (Number 6). This seller has free shipping using DHL on the frame, which is worth a lot. Also means it might just pay off to pick several other items from this shop, as you are guaranteed to get the items quickly, instead of waiting a month, and without most of the potential problems that might occur with missing packages slow toll/vat and such.

Total Price

The Total Price (Number 7) is the price of the item + shipping. It’s rather obvious, but I’m mentioning this, as the shipping price might be rather significant on smaller items, so stacking on a large free shipping items often pays off.

Positive Feedback

Feedback is everything on Aliexpress and the sellers are going very far to get a positive rating. It means you should contact them if you have any problems with the product, which often leads to some sort of partial refund.

After recieving your product you firstly need to confirm you have recieved it. You should give feedback, as it also rates the other way. The sellers are rating you as well, so keep that in mind! If you have problems, contact the seller and if you can’t find a solution you can Open a Dispute and 3rd party from Aliexpress judges the case.

Be resonable: you can’t get full refund for a functioning but slightly damaged product, like scratches etc.

Known good suppliers

As mentioned earlier, you are going to learn to recognize certain resellers. Don’t be afraid to shop from many different sellers, but I’ll put up a short list of shops I dare recommend. Also for more expensive parts.

Listed in no particular order

Common telltales to keep away

When searcing for a product you know is manufactured by a certain manufacturer, like the MKS-Makerbase controllers I’ve written about on instructables, you really should never buy such things from 3rd party stores. It does require you keep your eyes open, as multiple shops, also some of the Known good suppliers above, are selling copies of these things, but they can never give the same service and it’s often bad quality or a completely diffferent product alltogether.

Why have them on the Known good suppliers if they act like this? There are bad, and there are bad. Allways keep your eyes open 🙂

Another thing you really must keep your eyes on, is when you are looking for the Ultimaker 2 frame. It should be created from Dibond plates (sandwich of aluminium on either side and hard plastic as core) and acrylic plates for the sides, but you are going to see a lot of wooden and even all acrylic frames. Don’t go there! Some are assembled, meaning screws and nuts are included, while others are not, so take that into consideration.

Some shops include parts, you might see as 100% part of the object, but which is viewed as an extra by the resellers. Like the piece of Dibond for the Ultimaker 2 bed, hiding the bearings and lead screw nut. These things are worth money, and looks matters as well.

Posted on 2 Comments

Lets build an Ultimaker 2+ Extended clone – Part 1 – Source files and BOM

I know I know, I allready have too many printers and unfinished projects, but I have a squirrel brain and tends to jump from one thing to the next, while my printers are busy trying to keep up with my ideas! 😀

This Lets build an Ultimaker 2+ Extended clone is actually an old idea of mine as a follow up project to my venerable Complete Newbie Step by Step, 3D Printer With All Parts Lists printer project back in the days.

I just made the mistake of mixing 2 projects together: Ultimaker build guide and Detaield explanation on 3D Printers, so it quickly got out of hand and sidetracked.


  1. What is this going to contain?
  2. Open-source and license
  3. BOM and using Ultimaker Github repository
    1. BOM
    2. Models of the parts
    3. Complete model
  4. What’s next?

What is this going to contain?

This time I’ll focus solely on building the Ultimaker 2+ Extended, show all the parts used, the price I paid for them and provide some links. Just remember that prices change, often to the better though, but it will provide an idea on what it will cost to build your own Ultimaker 2+ Extended.

This guide can be used to build the non-extended as well. Just get a normal frame, shorter Z rods and z-motor with shorter lead-screw.

Open-source and license

Please remember the license on these things!

While Ultimakers are open source, and you are allowed to build for yourself, you are not allowed to build them with the goal of being a reseller.

The Ultimaker robot and name are also trademarked, so be sure to mention yours is a clone if you decide to sell your machine in the future. I’m not in any way a legal advisor, so please contact Ultimaker if you have any questions regarding this.

BOM and using Ultimaker Github repository

I’ve build and rebuild a lot of machines by now, so I don’t really much need a BOM (Bill Of Material) to go on, but I am using the official Ultimaker Github repository as a source of information. To be more precise, we need to scroll down, go to page 2 and click on Ultimaker2ExtendedPlus

…but oh no! Lots of unnamed files.. all but impossible to use this as any sort of sensible source of information.. fear not, lets go through what’s what:


There is a folder named BOM where you can find BOM 9407 Ultimaker Heated Bed assembled.pdf and BOM Ultimaker2extended+.pdf

I had an excell file once, but can’t find it now.. please let me know if you find it 🙂

To be honest, they are not that usefull.. or, they are, but I think you’ll find the links with images I’m going to post later on, somewhat easier to use!

Models of the parts:

All the STEP files in the Ultimaker2ExtendedPlus directory are 3D models of the individual printer parts… unfortunately it is all but impossible to find your way around there, so I’ll recommend using the normal Ultimaker 2 folder if you want to view individual parts, as they are named for the parts used.

It’s usefull if you want to make sure of lengths of rods, size of glass plate, specifications on bearings, building your own 3D printed parts to match and so on.

I’ve used one of the STEP files to print my own motor spacers instead of buying them for instanec. Just upload it to Fusion and then save it as STL file 🙂

I’ve created a collection on my thingiverse profile where I add the various items 3D printable items for Ultimaker 2 machines. I’m not recommending using these over injection molded parts pr say, but it is a nice way to save money. Just be sure to use ABS for the parts you are going to put inside the frame.

Complete model:

In the folder 3D model Ultimaker2extended+ you can find a model of the printer in STEP format, which you can Upload into Autodesk Fusion 360 (free – says trial which means you have to accept the licens once pr. year) or similar.

Be aware that it does require a bit of an ok CPU and graphics card to handle the full model.

What’s next?

In part 2 of this series, I’ll start posting images of the parts I’ve bought, prices and some links and advice.