Repetier – Update

There is one more change to make for Repetier to work right.  In the firmware, under the Configuration.H tab, look for this setting-


// The position of the homing switches. Use MAX_LENGTH * -0.5 if the center should be 0, 0, 0
#define X_HOME_POS 0
#define Y_HOME_POS 0
#define Z_HOME_POS 0
and change it to:
// The position of the homing switches. Use MAX_LENGTH * -0.5 if the center should be 0, 0, 0
#define X_HOME_POS 158
#define Y_HOME_POS 150
#define Z_HOME_POS 0
Hopefully the firmware on Github will be updated soon, but until then check this setting in your firmware and change it if it hasn’t already been.
Also the Mac version of Repetier does not have the check boxes for “Home is at X max” and “Home is at Y max”.  Because of this, the start code needs to be a little different.  Use this instead-
G92 X158 Y150 Z0 E0

Repetier Host and Skeinforge

There is a little more work to be done to get Skeinforge working smoothly with Repetier.  It isn’t as easy to change start gcodes around with Skeinforge as it is with Slic3r, and if you are still switching back and forth between Repetier and Pronterface to try things out, it can be a problem.

To keep things separate, make a new Skeinforge that will only be used with Repetier.  Find the Skeinforge directory that came with the Solidoodle download, wherever you put it.  It would be something like:


Copy the Skeinforge folder and name it something like Skeinforge_39_for_Repetier.

In Repetier, click the Setup button under Skeinforge.

Point it to the files it wants in the new skeinforge folder-




The last line is for PyPy.  PyPy is a faster version of python that speeds up slicing with Skeinforge.  Leave this as is, but if you get an error when you try to slice a model, come back and make this field blank.  We’ll figure it out later.

Now you need to change the start.gcode to work with Repetier.  Find it in-


and change it to:

G92 E0
After you slice a model, I find that there is always an error dialog and Python crashes.  When you run Skeinforge, it opens the GUI and a log window.  If you close the log window first, Python crashes, rather than going peacefully as it does when you close the GUI first.  Apparently Repetier prefers to kill the log window first which causes all those crash messages.  The gcode still gets saved, so everything is still fine, just a bit messy.

Setting Up Repetier Host

Update- Solidoodle officially supports Repetier and has a pre-configured download with Slic3r profiles available here.

Here is a long, but thorough video walk through of setting up Repetier Host.  Repetier is a complete printing software solution, from loading and orienting STLs to slicing in Slic3r or Skeinforge, to controlling the printer and running the print.  It also has a great 3D visualization of the gcode itself so you can get a preview of how the model will be drawn out.

Please excuse my pronunciation of Repetier, I had assumed it was a French word (as did Google Translate) but it is in fact German.

Configuring Repetier:

Slic3r Settings:

Using Repetier:

The current Marlin firmware, configured for Solidoodle – mlaws/solidoodle2-marlin

The download page for Repetier Host – Downloads · repetier/Repetier-Host

Repetier for Mac –

Here is the config for Slic3r.  There is a preset in the Printer Settings section which has the start code for Repetier-  Slic3r Config for Solidoodle

The start gcode-

G92 E0


The X Home position on the Solidoodle is actually about 9mm past the edge of the printbed, so if you set the size to 150mm wide, the center will be off by 9mm to the right, anything placed in the rightmost 9mm will fall off, and the left 9mm will go unused.  Setting the printer width to 159 will bring that left side back, but it will also allow STLs to get placed into that open space on the right.

Repetier has a feature called Dump Area, which is a section that can be defined as off limits for printing.  Rather than draw a skirt, you can have the nozzle go to this area before a print and extrude some plastic into space, to fill it up and replace what might have oozed out.  We can use Dump Area to account for that open space between X Home and the edge of the bed-

Setting the Flow Rate

Once you get your extruder calibrated, you know that the right amount of plastic is going in, but you still need to make sure that the right amount of plastic is coming out.  Slic3r will run the extruder at the speed that it has calculated will deliver the right amount of plastic to create the thread width it has planned for.  However the real world doesn’t always match up to those calculations.

When you are printing at .3mm layers, a good Width over Thickness Ratio is 1.4, meaning the thread is 1.4x wider than its height.  This would be .42mm, and if the flow setting is right, the printer should be delivering threads at this width.  Simply running the extruder and measuring the filament that comes out isn’t enough, because the thread is shaped by getting pushed down onto the layer below it.

The best way to check that a given flow rate is delivering the right amount of plastic is to print a single walled part.  Pick something like a cube, and slice it with settings for one perimeter, 2 solid layers and 0 fill.  When it prints, the walls of the cube should be no thicker than a single thread.

Under Layers and Perimeters, set the minimum perimeters to 1, and the layer height to .3. Make sure the “Generate extra perimeters when needed” is unchecked, or else every few layers Slic3r will throw in an additional perimeter. Set Solid Layers to at least 2.  You can discount the first layer because that is affected by the Z offset, but you want to see it run at least one solid layer on top of that to judge how well the threads are fitting together.

Set the fill density to 0, so nothing gets in the way of measuring the wall.

Under Advanced, set the Default Extrusion Width to .42.  Slic3r  can calculate this automatically, but if we set it explicitly, we will know what width we are looking for.

Extrusion Multiplier should be set to 1.  This is where you make adjustments in case the flow calculations are not quite correct.  We will see how it prints at 1, and then change it if needed.

Print the cube and stop it before it begins printing the solid layers for the top.  Find the most perfect, best aligned wall and measure it with a caliper.

The first try came out to .51, which means too much plastic is getting extruded.  It’s a small difference, but if you want to make high resolution prints at a .1mm layer height it can become noticeable.  Our target of .42 is about 82% of .51, so set I set the Extrusion Multiplier to .82.  This will tell Slic3r to scale back the results of its computations by 82%.

In Skeinforge, this is a matter of adjusting the Flow Rate under the Speed tab.  You could try changing the current setting by the same percentage as calculated above.  For instance if my setting in Skeinforge was 2.7, I could try dropping it by 82% to 2.21.  I haven’t tried it with Skeinforge to see how well it works, but I suspect it would take a little more trial and error.

Extruder Calibration

One of the most important aspects of printing with the Solidoodle is the rate of flow of the plastic through the extruder.  When laying out the tool paths, the slicing software will space the lines based on the width of the plastic thread.  The thread width is determined by a combination of the distance from the nozzle to the bed (layer height), the speed of travel (feed rate), and the amount of plastic coming through the nozzle (flow rate).

The closer to the bed the nozzle is, the more squished the plastic gets making a wider thread.  Faster movement means less plastic at a given point making a thinner thread, and speeding up the flow makes a wider thread.  Since layer height stays the same most of the time, feed and flow rate need to be balanced.  If you set the slicer to print slower on the perimeters, flow rate will need to decrease, and if you set fill to print faster, then flow will need to increase to keep up.

Slic3r and the later versions of Skeinforge (41+) can calculate the flow rate automatically and adjust it as needed.  They figure out how much plastic is coming out of the nozzle based on the filament diameter, nozzle size, and speed of the filament drive gear.  To print correctly, when the gcode tells the printer to draw 1mm of plastic the printer needs to actually draw 1mm of plastic.

There is a setting in firmware call Default Axis Steps per Unit.  This tells the motor how many steps to turn for every millimeter it is commanded.  In the video below I demonstrate how to determine the correct number.  Don’t upload the firmware as demonstrated in the video.   In Repetier go to Config>Firmware EEPROM Configuration and enter the new values in the fields there.  Anything you enter into EEPROM will stay, and not be overwritten if you update the firmware later.

You can also update the steps by manually entering M92 E(# of steps).  This will be overwritten when the board is restarted unless you save to EEPROM as above.  If you are using Pronterface, or the EEPROM Config window isn’t working (happens on the Mac sometimes) you can save the current values to EEPROM by entering M500.  Entering M501 will read back the values currently stored there.

As an alternative to changing the steps/mm, you can use a fudge factor in the Slic3r settings called Extrusion Multiplier.  If you have determined that your extruder pulls 25% more plastic than it is supposed to, you can set the multiplier to .75 to compensate, telling Slic3r to scale back its computations by 25%.  However that setting is really there to adjust for the differences between plastics.  If you did your calibration using ABS, you might need to adjust a little for PLA due to the difference in how far the gear teeth cut into it.  It’s best to start from a point where you know everything is calibrated correctly, then go from there.


First Layers

Here is a collection of first layers at different Z offsets to give you an idea of what to look for.

This one has been smeared on the bed.  The nozzle is pretty much making contact, and the extruder skipped a few steps trying to cram plastic into the kapton.  If you have an unheated acrylic bed, you are in for some serious scraping to get this off, and you may never get it all.

This is pretty flat, and will give you a little bit of a lip at the bottom.  If you are having trouble with corners peeling up, you might try going this flat to get some extra stick.  Be aware that  it will make holes a bit smaller at one end, for one layer.  If you don’t have a heated bed, this might be want you want to shoot for.

This is pretty good.  It’s a little flattened to give the thread more area in contact with the bed, but not enough to affect the dimensions too much.

This is getting a bit too high.  It would probably be fine for this part on a heated bed, but if it were tall and narrow with a small footprint, it would probably come unstuck.  If it was maybe 100mm wide and flat, there could be warping at the corners.

This is too high.  The thread is too round for very much plastic to be pressed down on the bed.  When the extruder changes direction, it pulls the thread along with it, “cutting corners.”  That is why the circles are misshapen, and if the straight lines were bumped into they would come loose and start flying around the bed.  If you started this print and walked away, you would come back to a giant ball of plastic orbiting the bed on the end of the extruder.

Each of these changes represented about a quarter turn of the Z offset screw.





Dial Indicator in Action

Here some video of my leveling the bed using the dial indicator.  I have also posted the mount to Thingiverse –

I start with the bed below the plunger and slowly raise it up.  When the bed gets close I move it .1mm at a time so it only lifts the plunger .3mm or so.  I want it to touch as lightly as possible so it doesn’t drag too much as it moves across the bed.

I also used it to set the Z Offset at a known amount.  It can be hard to tell when the nozzle and bed touch.  You can’t see a gap of .05mm, and if you see the extruder bump, the bed has already pushed it past the 0 point.  To find the exact place were they touch, I used contact between the nozzle and bed to complete a circuit.

I touched one lead of my multimeter to the bed, and touched the other lead to the barrel, under the insulator.  This area is easier to reach, and easier to maintain contact without slipping off.  I moved the bed up .1mm at a time, and once the multimeter showed a reading for resistance, I knew that contact had been made.

I set the indicator to zero, and then moved the bed up and down, adjusting the Z Offset screw each time until the dial indicator showed the distance I wanted.

It’s cool to see the actual offset distance, but it still comes down to watching the first layer and tweaking the distance until it looks the way you want.