Monoprice Select Mini - Part 3: Tuning and Slicing

3D printing Nov 26, 2016

Now that we have our little printer set up and updated, it’s time to get on to the next step. This article will walk you through how to tune the configuration of the printer’s firmware and getting started with our first slicing program, Cura.

No added costs this time around, everything we are going to do uses free software!

Tuning – learning to speak gcode

No matter which 3D printer you start with, they all speak one common dialect, gcode (with a few notable exceptions). Before you get too worried by the name, let me put you at ease: gcode is probably the most simple interface language that’s ever existed.

There are a few forks of gcode, think of these like dialects to a spoken language. The most common is Marlin/Sprinter. Fortunately for us, this is the flavor of gcode that the Select Mini uses.

Also in our favor is that gcode has been around for a very long time and is extremely well documented, largely thanks to the reprap project. If you’re interested in going beyond the basics in this article, have a look at the gcode reference on the reprap wiki.

We are only going to focus on tuning one aspect of the select mini, because it is notoriously poorly configured in the firmware. The hotend is probably the most important mechanical piece of the printer, and out of the box it can vary in temperature by 5-7 degrees Celsius when in use. For comparison, a well tuned hotend should only vary .1-.3 degrees Celsius when set to a steady temperature.

How the hotend works

FDM printers (forced deposition of material) basically work like very precise hot glue guns. They heat up plastic filament until it melts and then is forced through a tiny nozzle and deposited on to a flat surface one layer at a time.

In order to make this process fast, reliable and repeatable we need to ensure that the temperature of the material coming out of the nozzle can be very accurately measured and controlled.

This is done In the firmware by using two pieces of hardware – the heater cartridge and the thermistor. Both are incredibly simple elements. The heater cartridge does just that, converts electricity into heat. It does this very quickly and with a lot of energy. Typical heater cartridges are 30 or 40 watts, enough to heat our hotend by hundreds of degrees in a minute or so.

Herein lies the problem, we have no way to measure how electrical input affects temperature. There are a nearly infinite number of variables that can affect this relationship – changing room temperature, type of material being extruded, distance from the bed, speed of the axes, cooling fans, extrusion speed and many, many more.

The thermistor helps to solve this problem. It is literally a tiny thermometer. But unlike traditional thermometers that used a liquid like mercury to measure temperature differences, a thermistor uses electrical resistance. The hotter the thermistor gets, the less resistance it has to the flow of electricity. We can use this property to measure the temperature of the hotend very accurately.

But there’s still a bit more to complicate matters. The heater cartridge and the thermistor both get mounted to a heater block. The heater block also has a threaded hole where the nozzle Is screwed on and filament flows through it. Because these elements are all a small distance from one another, there is always going to be a small delay and variance between the heat added, the measurement of that heat by the thermistor, and the actual temperature of the filament at the nozzle.

PID Tuning

In order to calculate the temperature of the filament from these elements (heater cartridge, thermistor, heater block and nozzle) we use a PID function.

PID stands for Proportional – Integral – Derivative. (shout out to CoolNamesAllTaken for correcting me on this!). Wikipedia has a really well documented article if you want to understand the math behind it. It made my eyes glaze over, so in this article we are just going to move on set the values for our printer so that it will be able to heat up quickly and still maintain a consistent temperature.

We are able to do this thanks to the incredible work of Michael O’Brien on hackaday. He has done all the hard math and electrical engineering experimentation to find the ideal settings for our little printer. Even if it’s over your head (it was certain way above mine), have a read through his articles and be glad that engineers like him exist in our world.

In order to set these properties, we need to be able to talk to the firmware of our printer. I’m going to be using one of the original products to do this – Pronterface.

Head over to pronterface website, and download the latest version for your operating system.

If you have Windows 10, all you need to do is to plug the USB cable included with your printer into both the printer and a USB port on your computer. It should be automatically recognized as a generic 3D serial printer. This may also be the case for Windows 7 and MacOS, but please drop me a note if not.

Once connected, open pronterface.

If this is your only connected serial device, it should register as COM3. But worst case, simply go through each com port until the connection succeeds. Use the default connection speed of 115200.

With the connection established, it’s time to enter the world of gcode.

Intro to gcode

G-code is the common name for the ubiquitous numerical control programming language. For more about it’s history, have a read through the great reference on Wikipedia:

For 3D printers, g-code does two things.

  1. Control motors – these are the commands that G-code is named for. They all start with a G prefix, the most common being G1, the move command.

  2. Control peripherals – heaters, wifi, thermistors, and everything else. These are the M commands.

In a fully implemented firmware, every setting and operation of a gcode-based printer should be addressable through gcode. In reality this is not always the case, but fortunately for us the Select Mini printer does a pretty good job with its implementation.

We are only going to be doing a couple of specific things in gcode to get the printer up and running. But for reference, have a read through the gcode guide to see everything you can do with gcode!

PID Settings

Setting the PID values for the hotend is actually pretty straightforward.
From the console on the right-hand side of Pronterface, enter the following command:
M301 P36.00 I0.012 D72.00 C0.12 L2

Press send (or press the enter key). You’ll see an OK response with the values.
Then enter:

This command saves the values, you’ll see a response:
echo:Settings Stored

Next enter:
M304 P106.56 I0.024 D96.81

This will set the PID values for the heated bed. Save these values with:

You can verify the settings have been persisted by entering:

This will read out all the saved settings, including the PID parameters we just entered for the hotend and the bed. Finally, just to ensure the settings were saved, power off the printer and turn it back on. Reconnect with pronterface and run M503 once again, then verify the M301 and M304 settings from the output.

Slicing with Cura

There are many different applications that we can use to take 3d models and slice them into the gcode language that the Select Mini uses to print. Cura, Slic3r, Repetierhost and Simplify3D are all good choices with a large community of support.
For the beginner, Cura is by far the best option. It has a robust GUI, a low learning curve, and quite a bit of customization.

If you find yourself really loving the world of 3D printing, Simplify3D is by far the most advanced slicer on the market with a pricetag to match. But it’s worth every penny if you print a lot of models or want to get into more advanced prints.

Download Cura from

After installing Cura, choose to add a new Custom Printer. Give it a name, I like “Select Mini”, and then move on to the Machine Settings screen.

Set the X, Y, and Z each to 120mm and be sure to check the box for Heated Bed.
Make sure the GCode Flavor is set to RepRap (Marlin/Sprinter).
Make sure the Nozzle Size is set to 0.4

Next up, we need to update the Start and End gcode scripts:

For the starting gcode:
G21 ;metric values
G90 ;absolute positioning
M82 ;set extruder to absolute mode
M107 ;start with the fan off
G28 X0 Y0 ;move X/Y to min endstops
G28 Z0 ;move Z to min endstops
G1 Z15.0 F9000 ;move the platform down 15mm
G92 E0 ;zero the extruded length
G1 F200 E3 ;extrude 3mm of feed stock
G92 E0 ;zero the extruded length again
G1 F9000
;Put printing message on LCD screen
M117 Printing...
For the end gcode:
M104 S0 ; turn off extruder
M140 S0 ; turn off bed
G91 ; relative positioning
G1 E-1 F300 ;retract the filament a bit before lifting the nozzle to release some pressure
G1 Z+0.5 E-5 X-20 Y-20 F9000 ;move z up a bit and retract filament even more
G4 P300000 ; wait 5 minutes before turning off the fan
M106 S1 ; turn off fan
G28 X0 Y0 ; move X/Y to min endstops so the head is out of the way
M84 ; disable motor
G90; absolute positioning

With that bit done, we can finish printer setup and move on to our first print.

Initial Settings for a PLA print

Now let’s configure our settings for PLA.

First is the layer height. The defaults for almost every printer are going to be .1mm for fine detail prints and .2mm for general prints. In other words, multiples of .05mm.
But the select mini is different. Because of the pitch of the threading on the lead screw, we need to set the layer height to a multiple of .04375.
For high quality prints, selecting .0875 or .13125 will get you accurate z-height with accurate material deposition.
For normal prints, .175 or .21875 are the layer heights you’ll want to go with. The full list of layer heights that will work well with the Select Mini are below:


I wouldn’t recommend going below .04375 as the printer can’t step less than this amount. Don’t try going above .30625 because the hotend can’t handle pushing much more than that amount of material while holding a consistent temperature.

Wall thickness should always be set to a multiple of the nozzle size, so .4, .8 or 1.2. In other slicers this is called “perimeters”. It’s setting how thick to make the walls of the parts before starting infill. The thinner the walls, the less material used. But below 1.3 (or 3 perimeters) you will often find mechanical strength to be significantly reduced.

Infill density is almost completely dependent on the use of the part. For cosmetic parts, 12-20% is fine. For mechanically durable parts, 50% is a good place to start. 85% infill is equivalent to a solid part. Going above that will quite often result in undesirable effects without any increase in strength.

Print temperature for PLA should be between 195-210c. You’ll need to calibrate this temperate yourself based on the specific PLA filament you have. 200c is usually a great place to start.
Build plate temperature should be 60c.

**Diameter **should be defaulted to 1.75mm. However you should buy a pair of calipers and measure your actual filament diameter between prints to adjust accordingly. Most filaments will have a common variance of .05-.1mm and this can make a visible difference to print quality.

Print speed should be set between 30 and 70 mm/s. 30 for high quality prints. The higher the speed, the lower the quality will be. Beyond about 70 mm/s, it’s likely to get skips and enough backlash to cause issues in your prints. I stick to 50 mm/s.

Enable support for parts that need it, and always leave the skirt enabled to ensure the filament gets primed and any ooze gets cleared before starting the main print.

With all that set, we can save our generated gcode and take it over to the printer.