Before you exclaim "Really! Does the world need yet another Spherebot design?" Consider the question "How about a Spherebot with a parts cost under $35?" Regardless of the answer, here it is. Is it accurate? Mostly-ish, Sometimes, Not very. Did I mention it was cheap and easy to build.
The bot is arduino powered using a slightly modified version of the Eggduino Firmware by Joachim Cerny making it compatible with the EggBot extensions for Inkscape. (3 cheers for Joachim) A few modifications allow the bot to use the very inexpensive 28byj-48 5v stepper motors and ULN2003 drivers. A TowerPro 9G servo is used to lift and lower a Ultra Fine Sharpie pen. Two 608RS bearings hold the idler arm and a small spring keeps the arm pressed against the sphere. Nerf dart suction cups are used to hold the sphere. It is assembled with M3 machine screws, nuts, washers, the hardware that came with the 9g servo and a small spring from a local hardware store.
The bot is optimized to print on standard 40mm table tennis balls. It is adjustable and could probably print on small eggs.
The video shows a few printing errors since I didn't have the ping pong ball centered well enough and/or have the servo lifting the pen far enough above the ball during some of the moves. This is a work in progress and I might tweak a few things before writing better documentation.
Update 04/07/16: Uploaded SCAD source files
Uses the following items from thingverse & github:
9G Servo in OpenSCAD by TheCase
Published on September 4, 2012
28BYJ-48 Stepper Motor Model
Mark Benson 23/07/2013
Creative Commons Non Commerical
roundcube_simple module by Daniel "groovenectar" Upshaw
I printed the parts in the orientation they appear in the STL's. The armvert part was printed on it's side to keep the tabs that hold the servo from breaking off (again) when removing it from the printer .
Arduino 1.8.0 compatible firmware source code available from https://github.com/russhughes/EggDuino.
Previous Firmware Modifications
In the EggDuino.ino file around line 40 change the servoPin define to 10:
#define servoPin 10 //Servo
In the EggDuino.ino file around line 50 insert the following function prototypes:
// Function prototypes
#define penUpPosEEAddress ((uint16_t *)0)
#define penDownPosEEAddress ((uint16_t *)2)
In the EggDuino.ino file around line 60 change the AccelStepper declarations to:
AccelStepper rotMotor(AccelStepper::HALF4WIRE, 2,4,3,5, true);
AccelStepper penMotor(AccelStepper::HALF4WIRE, 6,8,7,9, true);
In the Helper_Functions.ino file around line 96 After the "//set Coordinates and Speed line" add:
rotStepsEBB = map(rotStepsEBB, 0, 3200, 0, 4076);
This will set the scale on the rotation axis to match the one the stepper uses.
Connect the Sphere rotation stepper driver board pins IN1,IN2,IN3 and IN4 to the Arduino pins 2,3,4,5 and the Pen stepper driver board pins IN1,IN2,IN3 and IN4 to the Arduino pins 6,7,8,9. Connect the Pen Servo's signal pin the the Arduino Pin 10.
The 2.7.1 release of the EggBot extension only looks for the official eggbot board but we can change that pretty easily. Once you have Inkscape and the 2.7.1 EggBot extensions installed. Edit the "ebb_serial.py" file look around line 49 and find the line that reads:
and change it to:
if port.startswith("EiBotBoard") or port.startswith("Arduino"):
Now it should be able to find Arduino's running the EggDuino Firmware.
Next look around line 67 and find the line that reads:
serialPort = serial.Serial( comPort, timeout=1.0 ) # 1 second timeout!
and increase the timeout to 2 or 3 seconds like this:
serialPort = serial.Serial( comPort, timeout=2.0 ) # 2 second timeout or change to 3 if you still can't connect
That should be all that's needed to make it work. It can be a little slow with the increased timeout if you have many COM ports.