SphereBot - Full Project

by BorisLandoni, published

SphereBot - Full Project by BorisLandoni Dec 11, 2013
7 Share
Download All Files

Thing Apps Enabled

Order This Printed View All Apps


Use This Project

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

49938Views 10749Downloads Found in Machine Tools


This project allows you to write on the spherical surfaces such as Christmas balls or eggs.
This machine is in fact known in the internet as Eggbot or Spherebot .

More info



The mechanics
The mechanical part is composed of parts made with a 3D printer , by some threaded rods and a pair of bearings.
Compared to the versions available on the net, our spherebot presents "print area" greater , so you can draw even on christmas balls with a diameter of 7/8 inches.
You can download and modify also Sketchup files to make it bigger or smaller.

The software
As most of the numerical control machines also our spherebot is able to handle the codes Gcode.
A usable software can be downloaded from here or Github
and has a nice user interface. The software is very intuitive and also allows you to move all three engines to properly position the marker.

Getting the Gcode file
To be able to turn your ideas into prints, need to go through a simple sofware conversion, capable of transforming into Gcode your design or text.
A free software that can help you is INKSCAPE
The special feature of this software is that it can be modified and adapted to the various needs through scripts written in python .
Once again the comunity helped us and made available an extension to export our image vector in Gcode. In the download section you can download the plugin, which is the same that are available on Github
Installation is simple, just copy the files located under the SRC folder, under the extensions folder of Inkscape , usually C:\Programfiles\Inkscape\share\extensions
Restart Inkscape and the extension is installed .

To transform a written into Gcode is necessary create a path that our marker must follow in order to achieve the inscription. From the Path menu select the item from the object to track.
Now save the file in Gcode: from the menu File select Save as and save the file with the extension *.Gcode .
Confirming it will open a window where we can define some parameters such as the speed, the angle that defines the pen raised , lowered , and other parameters .

The electronics
The spherebot is composed of two stepper motors and a servo.
A motor is used to rotate the ball on the axis , the second motor allows to move the marker around the circumference of the sphere.
The servomotor finally serves to raise and lower the pen.
In addition, to allow anyone to easily edit the software without the need for programmers or compilers would be ideal to have a board based on the Arduino .
All of these needs are met by the board of the printer 3Drag.

The firmware
Being an open source project did not have to write all the code, but it was enough to find someone who worked there and make any changes.
A big hand has given it Eberhard Rensch
We desired, however, that the sketch also worked with the latest Arduino IDE (version > 1.0) so we had to modify it a bit. In the Download section you will find the firmware.
The sketch is concerned directly manage the two stepper motors and servo according to the commands received GCode via the USB port. The combination of the three engines allows you to write on the ball without any problems.

More info

More from Machine Tools

view more

File Name



All Apps

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

App Info Launch App

This App connects Thingiverse with Makeprintable, a cloud-based mesh repair service that analyzes, validates and repairs most common mesh errors that can occur when preparing a 3D design file for p...

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

Does anyone know an existing detailed mechanical parts list or BOM with part numbers/sizes?

Is it possible to run this unit using Arduino Mega and RAMPS, without modifying the Arduino sketch?

I would love to build one of these but my printer is limited to 120³ How could this be modified to reduce the 140mm but still function?

I can't seem to find anywhere on what size bearings are used for this?

NVM, went back to the original this was modeled after. 608ZZ if anyone else is wondering...

How long are the M8 rods?
How long are the springs?

I found that 30cm for the three longer rods works out.

I have made this and almost have it printing, I am running the uno with 4988 drivers, I have everything working but the servo goes up on M300 S30 and down on M300 S50, can figure out how to reverse it.

Comments deleted.

I have built one of these, and it is way cool!! :)
one suggestion would be to raise the stepper motor for the pen to the same height as the rotation stepper. It would help with up down travel on spheres. With It sitting lower, the pen must travel farther to reach the sphere when it is close to the end.. Great Job!!

I have Problems with my serial line. I get errors which ruin every longer print.There a version of the Arduino FW which actually use the checksums and LineNumbers. I tried to hack the SphereBotUI and it seems to work (havn't implemented the resend) BUT after approx 300 lines the SphereBotUI.exe crashes.... I guess I FUBARed it whith my poking and converting QStrings to char* and whatever (I am a Python/PHP dev, no clue about cpp/QT). Any help welcome.

The interesting Part:

QString tmp;
char* cm;
if(lineCounter <= lineMax)
    tmp = QString ("N%1 ").arg(lineCounter+1);
            ignoreFirstM01 = false;
            emit layerTransmitted();
    cm = new char[tmp.toLocal8Bit().size()];
    // checksum code from reprap wiki
    unsigned short cs = 0;
    int j = 0;
    for(j = 0; cm[j] != '*' && cm[j] != NULL; j++)
    cs = cs ^ cm[j];
    cs &= 0xff;  // Defensive programming...
    tmp.append(QString ("*%1").arg(cs));

Use the controller and arduino firmware from thunderbug.. Boris has a link to it in the about section of this thing.. If you send information too quickly, the arduino runs out of buffer space. Thunderbugs firmware uses checksums and responds ok to commands that have been processed. Don't send commands until ok is received.

Yes, all the info is very scattered around.... unfortunately the checksum version did not solve my problem. I suspect a bad servo now as the source of my problems, brown out the arduino or something. This was the most prominent change I did since my first experiments which were not showing this bug ;-) Anyway its near easter and I think I will did a bit more into the next days.

I had a problem with servos over powering the board.. This is how I fixed it. It uses a 7805 regulator from radio shack to convert input power to 5 volts.. Works like a charm.

Yes. Thanks. I will try a similar aproach.


I have Spherebot printed and made ??with my Prusa Mendel

Now I have a question, I use Spherebot ui.exe, everything works perfectly manually
but now I would like to have a calibrate test file in Gcode

Who give a calibrating Gcode file that I can use to work as it should (something like a circle or square or text .....??)
Full step and quarter step as it can be
Micro Step Resolution = Full step or and quarter step
Egg = 6cm long and 42mm diameter

The final stop should be to the left or right are ( i think left ???)
Kind Regards

Hello Boris i've found an error in the "Pen_Arm_Pivot_springy.stl" and i'm not able to print the object, the same thing append with the skp converted can you fix it? E' possibile scrivere in italianno on questo spazio?

I've fond the bug is an half circle inside the structure that cause problemsin the slicing. I've cancelled it with a cad program ad re-converted in stl.

Hello Boris

How can I set the stepper motors so that they proceed exactly 20mm.

Have a square painted and found 20 x 20 mm on a ball that rotates the stepper motor for the pen holder only 18mm and the stepper motor for rotating the ball rotates only 16mm. Even with fonts and circles, it does not fit.

Thank you for your response.


Hi probably you have to change the limits in the sketch. I don't found this problem

Hi Boris, I want to ask you if there's a kit available to buy. Thanks.

digdug - in reply to awen

There are the printed parts available on ebay.

I'm sorry no kit available, only the board and the motors in our store:

Hi Bernd and all the others with the

Now I have a new error.

SoftwareServo.cpp: In member function 'uint8_t Software Servo :: attach (int)':
SoftwareServo.cpp: 27: error: 'digitalWrite' was not a declared in this scope



In SoftwareServo.h, This: #include <wprogram.h>
Needs replacing with:#include "Arduino.h"</wprogram.h>

Hi Boris,

I guess I oversee something :) - I am looking for a BOM for this machine, but was not successful yet. For sure I can guess most of the mechanical parts (not the printed ones) but it would help a lot if there would be a BOM. Especially the red "whatever" which keeps the egg/ball in place I am not sure where you got it from. Looks like the end of a toy arrow...


Hello Boris

I think I'm too stupid for Arduino library.
That with the library I figure it not at all.
In my RepRap 3D printer PRotos everything worked right away.
But simply add a new library, I do not get. Something I'll always wrong.
Can you help me please. Thank you. Thank you.

LG. Bernd

Under Spherebot3Drag.zip you find all file you need to compile the Arduino sketch. Install the library and use these file.

Hello Boris

Now I have a new error.

SoftwareServo.cpp: In member function 'uint8_t Software Servo :: attach (int)':
SoftwareServo.cpp: 27: error: 'digitalWrite' was not a declared in this scope
SoftwareServo.cpp: 28: error: 'OUTPUT' was not a declared in this scope
SoftwareServo.cpp: 28: error: 'pinMode' was not a declared in this scope
SoftwareServo.cpp: In member function 'void Software Servo :: write (int)':
SoftwareServo.cpp: 51: error: 'clockCyclesPerMicrosecond' what not-declared in this scope
SoftwareServo.cpp: In static member function 'static void Software Servo :: refresh ()':
SoftwareServo.cpp: 73: error: 'millis' was not a declared in this scope
SoftwareServo.cpp: 106: error: 'digitalWrite' was not a declared in this scope
SoftwareServo.cpp: 108: error: 'TCNT0' what not-declared in this scope
SoftwareServo.cpp: 123: error: 'digitalWrite' was not a declared in this scope

I'm desperate. Can you please help me

Thank you very much right. Bernd

Hello Boris

Have done everything as in "http://www.open-electronics.org/spherebot-reloaded-customize-your-xmas/http://www.open-electronics.or..."

But can the firmware does not play on the Arduino, always get the same error.

("StepperModel does not name a type".)

Haveyou add the library?

Hi Boris,
I've downloaded all the files, even Inkscape. But I can MakerBot Unicorn the G-code is not in the extensions
Install. Do not go on, can you help me maybe.
Thank you

I need help with the software for this Thing. How, specifically, do i get it setup?

Have you tried this with just a sanguinololu? How about just a motor driver and an Arduino?

Hi, Probably with Sanguinololu works without problem.
Could be a good solution an Arduino and a stepper shield.
On Open-electronics we sell this one

adn this one has also the pin for servomotors

nice summary ;)

I´m just curious which changes to the firmware were necessary to make it compatible with the latest Arduino IDE?

Hi,just change the include, I insert Arduino.h.
Then I changed the movement of the servo to make it slower.

great project! great write up, thx again!!