Spherebot Reloaded: Customize Your Xmas

By on December 17, 2013
Pin It

Let’s create a plotter to decorate Christmas Tree balls with writing and drawings.

Christmas is coming you dusted off your xmas tree and decorated it: everybody try to make it different, buying new decorations and balls of different colors. Well, if you are looking for something original, think of making your personalized balls with drawings and writings at will.

Here comes this machine: a printer, or better to say a plotter, which will draw with a marker on spheres at will, derived from models transformed into G-code files. The machine is easily doable with a few 3D printable pieces (we’ll provide the relative models in a special Thingiverse page) and a control board which is the same of the 3Drag. A computer will be needed for the appropriate printing software.


A bit of history

The machine that we aim to realize is known in the internet world as Eggbot or Spherebot. The first (which takes its name from the fact that it was born to draw and write on eggs) is one is the famous creation of Evil Mad Scientist that also made​​ all the project opensource (see http://egg-bot.com/). The suggested control board (http://www.schmalzhaus.com/EBB/) is based on a Microchip microcontroller, thus many makers have striven trying to realize something similar based on Arduino, because, however good, the Microchip hardware can not rely on the same amount of information exchange and community. The result is a version of the printer that has taken the name of Spherebot and which substantially shares the mechanical structure of the EggBot but differs in the electronics.

Unfortunately, the documentation of this creation is quite fragmented, sometimes incomplete and often outdated: the firmware available did not work, for example, with the latest versions of the Arduino IDE. This is the reason that prompted us to review the entire project trying to create guidelines that would allow anyone to make their own Spherebot.

The printer are based on a system of ball grips that rotate the ball (egg) and on a servomotor mounted on a carriage that drives the pen: the servomotor lifts the pen when not required to write and lowers it when must draw; the gripping system relies on a kind of clamp that locks the ball by two rubber suckers and makes it rotate (by a stepper motor) at a constant speed, in synchronization with the pen movement. The pen is guided by a second stepper motor. To draw lettering and designs, the pen, once the servomotor has let it ​​descend until the tip touches the ball, moves laterally, while the gripping system rotates in one direction or another, so as to create the vertical line.


Our machine


The mechanics of the plotter that we propose is similar to that of the mentioned machines and consists of pieces made ​​with a 3D printer (you can find the models in a separate page of Thingverse, some threaded rods and a couple of ball bearings; in this page you will find the complete list of the parts that compose it.

Compared to the versions available on the Internet, our Spherebot shows a greater “printing area”, so we can also draw on Christmas balls with a bigger diameter of 6÷7 cm.




As most of the numerical control machines also our Spherebot is able to manage the G-code. To pass them to the machine you must use a special software.

This software can be downloaded from Github, from the web page https://github.com/thunderbug1/Spherebot-Host-GUI, which has a convenient user interface. The software is very intuitive and also allows you to move all three engines to properly position the marker.

Obtain the Gcode file


To print the Christmas tree balls with our version of Spherebot, you need to turn your ideas into prints,  is therefore necessary to go through a simple conversion software, that can transform into G-code your design or text.
Let’s start again with a completely free software: Inkscape. You can download it from http://inkscape.org/en. Inkscape is a vector drawing software based on Scalable Vector Graphics (SVG) format.
Inkscape can import different kind of files of various types and, thanks to a special extension, export our vector drawings in Gcode. This is achieved precisely by the plugin downloadable and available on the Github page https://github.com/martymcguire/inkscape-unicorn.

Installation is easy: just copy the files located in the SRC folder of the downloaded ZIP under Inkscape extensions folder, which by default is C:\Program Files\Inkscape\share\extensions; complete the procedure by restarting Inkscape.

Online you will find many tutorials to learn how to use Inkscape, here we will show you how to transform the writings in Gcode in order to be able to add them to your Christmas decorations. First of all you need to define a correct working area in order to realize if the word has the right size. To do this, from the File menu, choose Document Properties. Here you will find several standard formats available. Our Christmas ball is not exactly standard, hence we define a custom size, such as 10 cm x 5 cm (Fig.3).

Now, with the text tool (selectable with F8 key), type your text by selecting the character you like. In order to be correctly drawn the text should be rotated 180 degrees, thus select it with the tool Select and transforms objects (F1) and from the menu, Object click twice on the item Rotate 90 clockwise. Center the writing in the page and eventually resize it using the appropriate anchors (Fig.6).

Now we have to create the route that our marker must follow in order to create the writing. Pick the item from object to route from the Route menu (Fig.7).

Now there is nothing left than save in Gcode.

A will prompt you to define some parameters such as the speed of execution, the angle that defines the marker raised, lowered, and other parameters that we recommend to copy from the figures that we report (Fig.4 and Fig .5).




Our Spherebot is made of two stepper motors and a servomotor; as mentioned, a motor serves to rotate the ball on the axis, while the second motor allows to move the marker around the circumference of the sphere. The servomotor is used to raise and lower the pen. To allow anyone to easily edit the software without the need for programmers or compilers a bit of Arduino would be ideal.

So that’s it! The 3Drag printer controlled make by us: in fact this control board is based on ATmega2560 (the same microcontroller of Arduino MEGA) and is able to drive up to 4 stepper motors.

We assemble, in this case, only 2 drivers and we use only the motors provided for the X and Y axes, the first to drive the ball rotation on the axis and the second to move the pen. To the servo instead we use the pins provided for the end-stop. In fact, these pins provide for male strip where you can attach easily to the servo connector.

The only change to be made ​​is to close the bridge that allows you to bring the 5V on the strip.spherebot_2



The firmware

Since the3Drag hardware is used to control a machine with a different function from that expected, it is clear that a specific firmware must be loaded into the ATmega 2560 . This will govern the two stepper-motor and the servo commander. Being an open source project, we had to write all the code, but it was enough to find someone who worked on it and make the changes.

A big hand was given us by Eberhard Rensch http://pleasantsoftware.com/developer/3d

However to let the sketch work with the latest Arduino IDE (version 1.0 above) we had to change it a bit.

The sketch deals directly with the two stepper motors and the servo according to the GCode commands received via the USB port. The combination of the three engines allows you to write on the ball without problems.

Chose the board, modify the sketch and you’ll only need to connect it to the USB port of the PC and upload the firmware.


Download the SphereBot project


In the store

3Drag controller
Driver for stepper motor
3Drag (to print parts)

About Boris Landoni

Boris Landoni is the technical manager of Open-Electronics.org. Skilled in the GSM field, embraces the Open Source philosophy and its projects are available to the community.
  • Pingback: Custom Christmas Ornaments with Spherebot - Hacked Gadgets – DIY Tech Blog()

  • Pingback: Spherebot: Decorating Xmas Baubles - RaspberryPiBoards()

  • Pingback: IT青年舍 » Spherebot: Decorating Xmas Baubles()

  • B Gray

    What would I need to adapt this for an arduino 328 with stepsticks? Can this work on a ramps 1.4 as is?

  • Pingback: Emiliano Martin Valdez (elmimiliano) | Pearltrees()

  • Pingback: Custom Christmas Ornaments with Spherebot | Hi-tech news()

  • Nischi


    really cool project.

    >some threaded rods and a couple of ball bearings;
    >in this page you will find the complete list of the parts that compose it

    i will try to build it but where can i the mentioned BOM list?


  • onkelgeorg


    where can I find the lengths of the threaded rods? Is there a BOm or a list of required parts for the mechanics? Which bearings have been used?

    Thank you in advance.


  • Davide Pernulla

    while I build with Arduino
    during the test gives me error on line 75
    softwareservo does not name a type
    What can I do?…

    • BorisLandoni

      Have you included the right library?

  • Steve Steiner

    Where is the BoM?

    • BorisLandoni

      print the parts from thingverse

      • Steve Steiner

        I was really looking for the hardware materials list. Fortunately, another spherebot on Thingiverse has a fairly detailed list of hardware that I’ll adapt to be non-metric (as those are easier to find in the US).

  • I have Problems with my serial line. I get errors which ruin every longer print. Is there a chance you can enhance the SphereBot UI Sender to actually use the checksums and LineNumbers? I tried 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)

    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));

  • Pingback: Projets étudiants | Pearltrees()

  • Leela

    Hello, I only have an Arduino mega board and somewhere an Adafruit motor stepper. I want to know if this firmware is compatible with what I have. Thank you.