SphereBot update

Since my drawing skills are very limited and easter is approaching at high speed i decided to build a SphereBot. First i thought about ordering the EggBot but it wasn’t available for a long time at Watterott.com (now it is :-D).


I took a look at the SphereBot project and it looks like there was no update since 2011, except for the frame which has received an update on Thingiverse. See here for the first project and here for the updated frame.
UpdateAlexander is working on the SphereBot-UI.

Since i had some RAMPS 1.4 boards around and the SphereBot firmware didn’t compile with Arduino 1.0.5 (i was too lazy to debug  it) i decided to do it with the Marlin firmware. This may seen a little bit overkill but there was no other option.


The EggBot on the left and the SphereBot on the right.

Things you need

Most of the parts can be harvested somewhere else, like the servos, stepper motors, PSU and the things from the hardware store.

  • 3d printed parts.
  • Controller (Arduino Mega in my case). Starts at 20€.
  • 2x A4988. About 10€ each.
  • Servo. 5€
  • 2x Stepper motors. Between 10€-15€ or just harvest some.
  • Stuff from the hardware store (1m M8 thread, M8 nuts, spring, 608 bearing, m3 screws and nuts). Maybe 10€…

It is possible to build this for under 100€.

The software

I recommend installing the EggBot Extension, even if you don’t have an EggBot. It has some really cool features (maze generator :-D).

I used Inkscape to convert svg-files to GCODE with the MakerBot Unicorn G-Code Extension. Since this extension is for the Makerbot some changes had to be made:

  • Change the units. The template for the SVG-file is 3200 x 800 pixel. With this you get 1 pixel = microstep. You need to change the parameters in the svg_parser.py of the inkscape plugin (at line 230).
def parse(self):
    self.svgWidth = self.getLength('width', 3200) * 1
    self.svgHeight = self.getLength('height', 800) * 1
    self.recursivelyTraverseSvg(self.svg, [[1, 0.0, -(self.svgWidth/2.0)], [0.0, -1, (self.svgHeight/2.0)]])
  • Change the GCODE-Generation. The extension sets M300 Svalue as command for the servo but for Marlin you need M280 Pservo Svalue. Change all the commands in the unicorn/context.py file.
    Since the M-Codes are not processed in the same order than the G-Codes which are stored in a buffer and not executed automatically you need an M400-command in front of all servo commands (M400 means: finish all moves bevor you do something else). Without this the pen may be lifted while there ist still some GCODE executed. Either a part is missing or the pen is lowered while doing travel moves.
  • Change the plugin interface, this can be done in the unicorn.inx file. Since the fields have maximum and minimum values you may need to change the maximums since you are not using mm/min but steps/sec.
  • Set the right values in the configuration.h of Marlin. Here the Y-Axis is the pen rotation.
// Travel limits after homing
#define X_MAX_POS 100000000
#define X_MIN_POS -100000000
#define Y_MAX_POS 400
#define Y_MIN_POS -400

You need to play with the following values to find the right settings for your construction.

#define DEFAULT_AXIS_STEPS_PER_UNIT {1,1,1,1} 
#define DEFAULT_MAX_FEEDRATE {5000, 5000, 10, 10} // (mm/sec)

#define DEFAULT_MAX_ACCELERATION {10000,10000,10,10}


The hardware

I didn’t find any good egg-cups so i created some with OpenSCAD. You can download it here or on Thingiverse.

SphereBot first run

The first run. Doesn’t look so bad.

The custom designed parts are in yellow. There is some duct tape (must be present in all your projects) providing a good grip for the plastic egg. It works but they are not as good as the egg couplers from the EggBot.

The results

Print all the eggs

I was able to run the SphereBot at very high speed, so high that there was not enough ink coming through the pen. The key to a nice egg seems to be the right position in the cups. The egg should really fit and sit or the pen will move it around each time it touches the egg.

Make sure that the egg is well centred. Before starting you need to center the arm, the GCODE sets all units to 0 at the beginning.

press-articleAfter the local press had featured the action a person came with a real duck egg in order to get it decorated.


The 3d printed frame is nice but not very rigid. You can see it bending a little bit as soon as you insert an egg. This could be a problem if you use bigger eggs that need higher holding forces. A wooden plate or carbon fiber should be better or you could add another threaded rod. This make the frame stronger but the maximum egg size is reduced an the egg is less accessible than before.

The grip between the motor-end and the egg needs to be really good. I used some duct tape but this doesn’t seen to be the best solution. Double sided tape worked fine.

The axis for the pen arm of the SphereBot is a M4 screw. Without any modifications the arm ash a lot of backlash. I printed one with a smaller hole diameter and mounted washers on the side.

A really cool thing would be an automatic pen changer where you can put multiple colours :-D

About the EggBot

I worked four days over six hours a day with the EggBot and SphereBot side by side. These are my experiences:

  • The EggBot is more versatile since it can be adapted for bigger eggs very quickly. If you have build the SphereBot with threads/nuts you will have to adjust over 12 nuts. A solution would be to use smooth rods but this increases the price.
  • From a software view there isn’t a winner. The EggBot extensions works fine but you can’t use Inkscape while ‘printing’. Sometime Inkscape crashed after the print or the EggBot didn’t stop after we pressed cancel (Debian).
    Since the SphereBot uses GCODE you don’t have this problem, but you need two softwares. You could use a print server or the SD-Card module for RAMPS with the SphereBot.
  • As written before, the couplers from the EggBot are really good.
  • The EggBot has the better frame. See ‘Optimizing’.
  • The EggBot didn’t have an european power plug. This was not really tragic.

Sources, Links, References