Laser Pointer Rocking Mount for ZWobble Compensation

by tealvince, published

Laser Pointer Rocking Mount for ZWobble Compensation by tealvince Feb 25, 2013
0 Share
Download All Files

Thing Apps Enabled

Order This Printed View All Apps


Liked By

View All

Give a Shout Out

If you print this Thing and display it in public proudly give attribution by printing and displaying this tag.

Print Thing Tag

Thing Statistics

3645Views 442Downloads Found in 3D Printer Accessories


Use this rocking laser pointer mount in place of a dial gauge in conjunction with the z-wobble calibration feature in the latest firmware to measure and eliminate ZWobble (periodic banding) in prints on the Solidoodle 2.


The primary cause of periodic "wobble" in prints on the Solidoodle 2--particular at high resolution--is due to periodic non-linear movement of the print bed when moving in the Z-direction.

The latest Solidoodle firmware ( at https://github.com/mlaws/solidoodle2-marlin ) adds a new "Z-Wobble" compensation feature that allows you to define a custom compensation curve. The firmware applies the inverse of this curve when moving the bed, leading to virtually wobble-free prints when properly calibrated.

Since the firmware automatically scales the input values when defining the custom compensation curve, one can use a rocking laser pointer to hugely amplify the bed movement, easily measure the position with a ruler or tape measure, then directly enter these enlarged values to define a compensation curve.

Instructions (from http://www.soliwiki.com/Calibration_of_the_Z_wobble)

  • If necessary, install a version of the firmware with z-wobble compensation

  • Print the laser rocker, making any modifications necessary to fit your laser pointer

  • Home the print head and fit the rocker on the bed with a laser pointer aimed at a sheet of paper taped to a wall about 10-20 ft away. Rest the point of the rocker near the end of the bed and hook the far end underneath the near x-axis rod.

  • Send the following codes to home the print head and clear any previous compensation, and move the bed down one full rotation of the z-axis threaded rod (1.411mm):

M97 A0
G1 Z1.411

  • To avoid any backlash, start measurements from this location (one revolution away from home) instead of at zero. Undo any backlash by manually stepping the bed up (head down) a few .1mm steps and then back down (head up) the same number of steps.

  • Mark the laser point (base point), then make an additional 14 marks, continuing to move the bed down (head up) .1mm between each mark.

  • Measure the distance (in mm or any unit) of each of the 14 marks from the initial point.

  • For convenience, copy the following gcode into a text file entering the 14 numbers into the indicated spaces (or edit the attached example gcode file):

M97 A0 ; turn off any previous wobble compensation
M96 ; print settings
M97 W1.411 P0 ; set period to 1/18th inch
M97 Z0.0 L0 ; enter deflection measurements in last column
M97 Z0.1 L[distance between 1st and base point]
M97 Z0.2 L[distance between 2nd and base point]
M97 Z0.3 L[distance between 3rd and base point]
M97 Z0.4 L[distance between 4th and base point]
M97 Z0.5 L[distance between 5th and base point]
M97 Z0.6 L[distance between 6th and base point]
M97 Z0.7 L[distance between 7th and base point]
M97 Z0.8 L[distance between 8th and base point]
M97 Z0.9 L[distance between 9th and base point]
M97 Z1.0 L[distance between 10th and base point]
M97 Z1.1 L[distance between 11th and base point]
M97 Z1.2 L[distance between 12th and base point]
M97 Z1.3 L[distance between 13th and base point]
M97 Z1.4 L[distance between 14th and base point]
M96 ; print compensation curve

  • To send the compensation values to the printer, just load the gcode file above and "print" it. The M96 command at the bottom should print the defined curve, which will typically take the form of a sinusoidal-like wave. As these settings are not persistent (i.e. will be lost when the Solidoodle USB cable is unplugged) you should do this at the start of each session or may wish to add it to your slicing app's starting gcode.

  • (optional) use the laser rocker again with compensation enabled to verify that bed movements are now equally spaced.

If recalibration is ever necessary in the future (if printer is jostled or the stop screw changed), restart at step 3.

More from 3D Printer Accessories

view more

All Apps

3D Print your file with 3D Hubs, the world’s largest online marketplace for 3D printing services.

App Info Launch App

Auto-magically prepare your 3D models for 3D printing. A cloud based 3D models Preparing and Healing solution for 3D Printing, MakePrintable provides features for model repairing, wall thickness...

App Info Launch App

Kiri:Moto is an integrated cloud-based slicer and tool-path generator for 3D Printing, CAM / CNC and Laser cutting. *** 3D printing mode provides model slicing and GCode output using built-in...

App Info Launch App
KiriMoto Thing App

With 3D Slash, you can edit 3d models like a stonecutter. A unique interface: as fun as a building game! The perfect tool for non-designers and children to create in 3D.

App Info Launch App

Print through a distributed network of 3D printing enthusiasts from across the US, at a fraction of the cost of the competitors. We want to change the world for the better through technology, an...

App Info Launch App

Quickly Scale, Mirror or Cut your 3D Models

App Info Launch App

3D Print a wide range of designs with Treatstock. Easy to use tools to get the perfect result. The global 3D printing network that connects you with high-quality and fast working print services nea...

App Info Launch App

This is not working for me anymore. I get this error code:
22:57:19.322 : ZWobble Amp (A) 0.00 phase (P) 0.00 period (W) 1.41 puls 4.45 Warning! Inconsistent parameters!
Any thoughts?

Are you getting this when you "print" the compensation file? The compensation isn't persistent; you need to re-send it every time you power off/on the printer

I just have it in the "start code" menu in Repetier. This should reset and add it to each print, right?

That should work. What are the exact commands you are sending?

I've been watching this in Soliforum and I just want to know if this still a reliable solution.

The wobble-compensation? Absolutely. IMHO It's the easiest way to definitively fix any periodic error in the layer height because it does so regardless of the actual hardware cause. It just requires a way to measure the non-linearity in the z-carriage movement and the laser rocker does that. The updated software does the rest by inverting the measured non-linearity curve when sending z-coordinates to the printer.

I only ask because it seems that near the end of a couple of those discussions, it sounded like some were starting to have doubts.
Do I just add this to the "start code" menu in the "g-code editor" tab in Repetier, after I find my laser pointer and get the measurements?

You can do that (and that's what I did at first). But now I just load the completed separate code file into pronterface and "Print" it (i.e. send it to the printer) before starting any printing. The compensation settings will then stay active until the printer logic board is powered down or reset, so you only have to send it before the first print. I did, however, add an "M96" command to my start gcode so that whenever a start a print, it dumps out the current compensation curve so I know that compensation is on.

I never found my laser pointer so I just used the Gcode example you had posted in Solifourum and you know what, it works. I'm sure if I did my own measurements it would be better but I am satisfied with this. Z banding is undetectable at .3 and at .1 it can be seen but barely. You have done some fine work here (or in Soliforum anyway). If you're ever in Denver call me, I owe you a beer. : )