Hey! This thing is still a Work in Progress. Files, instructions, and other stuff might change!

Another printable Spherebot / Eggbot, but NOW with fully INKSCAPE-Integration - EGGDUINO

by cocktailyogi, published

Another printable Spherebot / Eggbot, but NOW with fully INKSCAPE-Integration - EGGDUINO by cocktailyogi Apr 17, 2014


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

27989Views 1488Downloads Found in Robotics


There are many printable Eggbot-Derivates outside, but after building one, I noticed that the Software-Toolchain for Eggbot-like devices, based on Arduino-Platform, without the original EBB-Electronics is very complicated and not userfriendly. So I decided to create a new firmware, which simulates the original Eggbot (EBB)- Serial Protocol.

I will not talk much about hardware, because here in Thinkiverse are lots of people, who have created a good 3D-printable basis. This thing gives you the ability to fill them with life. (Software)

This is fully functional, but I marked it as "Work in Progress", because there could be some minor tweaks done....


There plenty of good builds available. Here some suggestions:
The Prototype, the Spherebot from Zaggo:
Another ptinable version:

I made this one, which is okay:

I have build Zaggos version with an Arduino Uno. Yust move the servo Wire from Pin D2 to D3. (Pinout is in my Arduino-Code, as well). Here are more details: http://pleasantsoftware.com/developer/3d/spherebot/ (I hope, this link is okay?)

But you can use any Arduino and define your PIN-config in my Sketch "Eggduino.ino". Make sure to use PWM-Pin for Servo.

Until this point, I repeated only old stuff, and the credit goes to other people. Let us say Zaggo et al :-)


You will find my Arduino-Firmware here:

  • Yust download and install Eggduino.ino with Arduino-IDE
  • Setup Inkscape for Eggbot (with Eggbot-Extension)
  • Make a tiny patch
    (Everything ist described in the instructions)

Voila, enjoy your EggDuino with fully Inkscape-Integration.

You can also try the communication manually to make sure your Eggduino is responding:

Use any Serial-Terminal (i.e. Putty)

  • open Com-port with 9600 baud
  • make sure, your terminal sends CR + LF on "enter"-key
  • type v and press enter
  • Eggduino should respond with Init-String "EBB ...."

More from Robotics

view more

All Apps

Upgrade this Thing with Thingiverse Apps

No results.

I'm having issues with connecting to inkscape. I would like to try the inkscape portable solution but can't find the files. Can someone help me out? I have been trying to get this to work all day. Thanks

I don´t get it- I always get errormessages that some functions are not declerad. they are but not in the main-sketch. What is wrong on my setup ?

Arduino: 1.6.9 (Windows 10), Board: "Arduino/Genuino Uno"
C:\Users\asd_o\Documents\Arduino\EggDuino-master\EggDuino\EggDuino.ino: In function 'void setup()':
EggDuino:92: error: 'makeComInterface' was not declared in this scope


EggDuino:93: error: 'initHardware' was not declared in this scope

C:\Users\asd_o\Documents\Arduino\EggDuino-master\EggDuino\EggDuino.ino: In function 'void loop()':
EggDuino:97: error: 'moveOneStep' was not declared in this scope

C:\Users\asd_o\Documents\Arduino\EggDuino-master\EggDuino\Functions.ino: In function 'void sendAck()':
Functions:4: error: a function-definition is not allowed here before '{' token
void makeComInterface(){

Functions:24: error: a function-definition is not allowed here before '{' token
void queryPen() {

Functions:34: error: a function-definition is not allowed here before '{' token
void queryButton() {

Functions:40: error: a function-definition is not allowed here before '{' token
void queryLayer() {

Functions:45: error: a function-definition is not allowed here before '{' token
void setLayer() {

Helper_Functions:135: error: expected '}' at end of input
exit status 1
'makeComInterface' was not declared in this scope

Comments deleted.

Thanks for the great project.I really love this stuff.
Has anyone solved the jerky stepper motion?
i built a version using a protoneer v3 cnc shield with repurposed nema 17 motors from retired commercial thermal printers.
I can confirm 3200 rotation steps and 800 pen steps,per eggbot faq,but the pen motor still seems to"jump" from step to step,worse than your pix.

I have tried...swapping motors/stepsticks,adjusting currents,baud rates,microsteps,reassigning channels on the v3,extension feedrates,different power supplies,different fw,stepper libs,inkscape/extension versions.
I'm sure the motors are capable,direct drive 2mm text printers. I've even tried some budget motors with the same results.
The only thing that seems to change is motor noise.
Although I could not find specs for either motor type they are labeled 12v 1.8 degrees/step.
I don't know a lot about stepper drivers yet.

I am out of ideas,desperate to get it working right,my last thought is the enable pins. The sketch defines 2 separate pins but the v3 board allows only 1 en/dis pin for all channels.

So far my spherebot project is 98% upcycled....even down to most of the hardware.
I would love to keep this project around $15 for the uno,v3 shield,4988 combo.

Sorry for the long post but I am desperate

Thanks in advance.

Thanks for great job. I want to build one of this eggbots. So I tried your firmware. But upon compiling it I received the following errors:

Helper_Functions.ino: In function 'void storePenUpPosInEE()':
Helper_Functions:26: error: 'eeprom_update_word' was not declared in this scope
Helper_Functions.ino: In function 'void storePenDownPosInEE()':
Helper_Functions:30: error: 'eeprom_update_word' was not declared in this scope

Could you please help me in understanding the source of these errors?!! Thanks :-)

I get the same errors when compiling with IDE 1.0.5
Compiles OK with IDE v1.6.5
Good Luck

So i managed to get it running on Sandys Polagraph Board, however I have one Problem left:
Whenever I start a print, the pen lowers and gets to the drawings start position, leaving a line behinde.
After that it starts drawing fine, even does the return home and raise pen at the end,

Any Ideas?

Ok so I changed the "self.bPenIsUp" in the eggbot.py to "False".
Now it only leaves a small dot on the egg before starting. Good enough for now :)

So I printed out the eggbot and assymbly it. Now the only issue I have I'm using spherebot firmware and using the gui for spherebot I can control all axis and servo. But can't seem to get the gcode generated. Any videos around on how to use the software? I did use engrave and got gcode but it tries.to use g0 zxx for servo instead of m300 etc. I would really appreciate any help. My 4 yr old asked me to build it and she's been helpin up until the software and electronics. Loves putting nuts and washers on lol.

Comments deleted.

Hi Yogi
First of all thanks! This is really cool stuff.
Like Rick_S and also Bryscus, I have significant jitter when printing arcs (like in the HELLO WORLD template) all the rounded parts (D, O etc.) come out quite "steppi" if you know what I mean. Also I think that this is timing related and not hardware related. When drawing lines they turn out perfect.

Any news on this?


Not really, With the last Firmware, we managed to get Jitter-problems better. You should try different speed-settings (steprates) in Inkscape-Plugin.

Also make sure, your currentsettings on your steppers are properly and you use 8th or 16th microstepping.


okay. I have not yet tried different speed settings so far, allways took the default steprates in the plugin. Great hint. Should I go slower generally? What's your experiance there.

I can almost rule out the steppers / motors and current settings as I have virtualy tried everything allready as I initially thought it's my steppers. But they are in 16th microstepping etc. Also I switched motors and steppers (penmotor / arm) and can confirm it is the same behaviour. Also I changed every pin on the UNO to another etc. just to rule out any HW issues. But of course you can never be 100% certain.

I can also confirm that with the new firmware is a bit better now.

Thank you very much for all your great effort on this, it's really cool to beeing able to print directly from inkscape to my printed EggBot Pro "CLONE" :)!


Hi, try to go as fast as possible, but not beyond 1000 Steps/s because that Eggbot-Inkscape plugin has a bug...

Hi there,
When I try to upload I get the error "SELFPRGENwas not declared in this scope" and it highlights SELFPRGEN in the Helper_functions file. Im new to this game can you help me?


First off, hats off to cocktailyogi for your firmware - works a treat in free air and will be getting some cheap table tennis balls soon!

In reply to the above comment - SELFPRGEN is called SPMEN in the later atmega chips (eg in leonardos) - so a simple change in the Helper_functions tab will fix this.

I'm using a leonardo and cnc shield (they're so cheap on ebay that it seems pointless to roll my own shield) with a few changes to the pin assignments to suit the board.

Hi, seems to be related to your Arduino-Board. Which one are you using?

Hi Guys,

new Firmware release: v1.6 on github

thx to Bartebor!

Please test and report, what you find :-)

Like Bryscus, I too had noticed the pen motor jitter. I used a Ramps 1.4 board with a4988 drivers. It almost seems like a timing issue where the pen motor is playing catch-up with the axis motor. I'd really love to see this solved as I hate the idea of shelling out $50 for the official board. I know the motors I am using work well with the 16X microstepping since I also use them on my 3d printer and have tested them with the marlin firmware on my ramps board using the same drivers. So for my instance, I can rule the hardware out.

Secondly, I found that with another simple modification of the eggbot.py file, the autoreset on my ramps didn't have to be turned off. This change is made in the testSerialPort function as shown here.

def testSerialPort( self, strComPort ):
    look at COM1 to COM20 and return a SerialPort object
    for the first port with an EBB (eggbot board).

    YOU are responsible for closing this serial port!

        serialPort = serial.Serial( strComPort, timeout=1 ) # 1 second timeout!

        #Added False parameter to the setDTR function and put a 2 second sleep after it to allow for 
        #Arduino restart time.  This allowed my Ramps 1.4 board with Eggduino firmware to function
        #without changing the auto restart on the arduino mega board.
        serialPort.setRTS()  # ??? remove
        serialPort.setDTR(False)  # ??? remove

        time.sleep( 0.1 )

        serialPort.write( 'v\r' )
        strVersion = serialPort.readline()

        if strVersion and strVersion.startswith( 'EBB' ):
            # do version control here to check the firmware...
            return serialPort
    except serial.SerialException:
    return None

By adding the False parameter to setDTR, and a small sleep time, it gave the arduinio enough time and kept me from having to modify the autoreset on the arduino itself.

Nice find. I'll have to try it out after unmodifying my nano board. :)


maybe you are right and that scattering-problem is really timing-related. I am using Accelstepper-lib. It was a plug-and-play job to implement it. All timing is done by that lib.

Actually I do not have time to develop on that code with much testing. Maybe somebody has another motion-control-lib for steppers we could test? Hav is Marlin doing it?



in the ACCELSTEPPER-Group I found an ingteresting post:

"Making different steppers with different speeds and accelerations all coordainte
their actions is not supported."

So, conclusion is: The actual used motion-lib ACCELSTEPPER is not usable for this project. We have to change motion code. If somebody explains to me, how Repetier or Marlin have implemented motion-control, I will integrate it into this project.

Wow. I applaud the dedication. Unfortunately, my 9 to 5 job has been really hectic lately and I haven't been able to devote much time to this. I'd love to delve deep into Marlin when I have time. If I end up finding something I'll let you know. I think the eggbot source is available too. I wonder how they do it.

Hi Bryscus,

me too, I exactly know, what you mean. And in addition we are expecting twins ;-)

So we might put in some common effort in this project. I think your idea is better than mine. We should start with that eggbotcode and look, how it is done there (Motion part). Maybe you could look onto that code and identify the important codelines/modules.

I got a pullrequest on github to my code. In the meantime I will check that code see, what we can use from that side. There seems to be a communication issue, as well.


I managed to build an eggbot with arduino UNO but i'm not albe to find any working Files for it sadly. Every single one that i'm using have got this wierd motors problem where the movement is not smooth. Is there any way to fix it?

Hi Przemysław,

please read.... We are working on it, please keep in mind, that this is opensource and everybody is responsible for the quality. We are not a service-hotline. So where is your idea of the cause to this problem?


Comments deleted.

I ran my eggbot (one of these: http://www.thingiverse.com/thing:299483) this weekend using a cheap Chinese Arduino nano laser controller board that I bought on eBay. For the most part everything was excellent. I'd like to add, since I couldn't really find any info online, that you can replace the pull-up resistor on the reset switch with a 0.1uF cap on the nano in order to disable auto-reset.

One problem I ran into is chatter in the pen arm while rotation seemed smooth. I'll play some more to try and fix that, but I did notice something strange. I had a very stepped response when drawing arcs, but straight lines (even diagonal ones that use both rotation and pen axis) were fast and fluid. It did just occur to me that I might be using an older version of the eggbot extension. I downloaded a portable version of Inkscape that already had the extension installed: https://github.com/thunderbug1/Inkscape_portable_for_Spherebot. I guess I should try again from scratch.

I am using NEMA17 motors (pretty beefy) with 1/16 microstepping A4988 controllers. I adjusted the current limiting to what makes sense for these motors. Is it normal to have chatter during arcs? My original hypothesis was that the Eggbot extension could be breaking down the arcs into individual line segments causing the data to lag (causing momentary blips that stop the pen movement). Is this something normal or do I have setting problems or old software maybe? Could it be that I'm running a portable version of Inkscape? Maybe my USB driver (for the CH340 chipset on the nano) isn't very good? Does the software receive arcs and then interpolate the movement or does it receive many short line segments? It looks like the serial port is at 9600 baud - can this be increased? I'm up for any suggestions.

Referencing your 3 egg (red, orange, blue) picture, it looks to me like you had some chatter when plotting those designs as well. Maybe this is an old picture? I know the software has undergone a lot of development. Thanks.

My setup:

One Piece printed Eggbot/Spherebot

So, I tried again last night with the eggbot. I turned down the feed rates and I got less pen chatter. Apparently, I increased the feed rates originally and caused some issues. I still think the whole system could run much faster and smoother though. Basically, I reinstalled v0.91 of Inkscape and v2.5.0 of the eggbot extension and ran the default values (except that I lowered the wait times on pen raising and lowering to 1ms). This is of course along with v1.4 of Eggduino.

I did come across something interesting. I was looking for the line of code that sets the baud rate for the eggbot in the extension and low and behold it appears that it doesn't! It just assumes the default settings in serialutil.py (which is 9600 baud). I changed the value to 115200 in both eggduino and serialutil.py and it appears to talk just fine. I'll see if this yields any improvement tonight if I have time but I only have a controller to play with at the moment, not the whole setup. I wonder if gearing the pen arm and turning up the number of steps per revolution would make a difference - a larger number of steps would be required to move a certain distance. This would only solve mechanical problems if they exist, but wouldn't help a data stream bottleneck.

I know GRBL keeps a running buffer of about 6 or 7 commands. This makes movements more fluid. Is this a possibility or does it already exist? Thanks again.

Hi Bryscus,

I have the same problem with that pen chatter and tried to figure it out. Then I decided to release that code and wait, how many people would complain about this. You are the first person beside myself.

I have a couple of ideas, what could cause this:

  • Too strong/bad stepper. I use NEMA17 1.7A stepper which is more than oversized for that job. If I move my pen arm, it is rattling and it seems, like stepper is always glitching into next fullstep. I am not sure if a stepper really can HOLD a microstepping position. And Eggbot-speeds are quiet slow. So we can expect it as quasi-stationary. What kind of steppers are you using? I would like to try it with an Nema17 0.4A Stepper, but I do not have one.
    For me best Feedrate is 1000 Steps/s. I would prefer faster speeds, but unfortunately Eggbotextension in Inkscape has a bug, which does not allow faster speeds.

  • I also considered Baudrate, but I guess it is not the problem, because EBB-Board seems also using that baudrate. Please tets it with your setup.

  • Command Buffer: Eggduino has no command buffer. Implmenting one would conflict with the actual implementation "Query Button" command. For sure it is possible to implement one. But I will only move to this argument, if I am sure, that it is not a stepper/driver-problem or too strong stepper.



Thanks for the response! Last night I increased the baudrate on my setup to 115200 at home and I have to say that the whole system seems to make fewer little stops while plotting and seems much smoother overall. I turned the rapid moves up to 1000 and I think went up to 600 for the pen down moves. I think my problem at this point is mechanical. Unfortunately the design I have printed has just a little bit of slop in the pen arm that shows up at a higher speeds - it seems like it even it even goes resonant at times, which makes it even worse. At the slower speeds I have a pretty high quality plot, I'd say, but I think the whole system can work much faster. Looking at some eggbot videos on youtube I see some pretty high feed rates being used.

As for the steppers, I don't think that's the problem, but I'll try turning down the current on the coils. Mine are pretty big, probably rated for 2A or so (I pulled them from a 3d printer build). They look to be maybe half an inch or so longer than yours. I'm under the impression that if you use the pot on your DRV8825 (or in my case A4988) stepper drivers to turn down the drive current the motors should work the same or at least similar to weaker motors. I do have mine turned up pretty high because my original thinking was that they needed to be stiffer. It might be the opposite now. I'll try turning them down tonight.

I started looking at the EBB commands late last night and I tend to agree with you about the buffer. It would conflict and it also isn't required for the eggbot, so it shouldn't be necessary. I'll have to look into the eggbot source code at some point and note the differences.

One thing I did notice is that the pen slams down pretty hard. I guess there is currently no adjustment for servo movement speed? I mostly noticed it because originally my spring wasn't strong enough and the pen movement would actually knock the egg out of position. The fast downward motion does create small artifacts which are more pronounced when the pen is farthest from center because it isn't making perpendicular contact at the plotting extremes - but again, this would be less obvious if I had a stiffer pen arm. This is only a secondary concern. It might cause premature wear of pens though. This is mostly an issue because I use a rubber band to create a slight pull on the pen arm, ensuring good pen contact.

So I'll have to see if I can turn down the motors and print a new pen arm tonight. Thanks!

Hi, in my case turning down the motor current did not solve the problem. If I watch mine, it really seems to glitch into next fullstep. Is it in theory possible to hold a stepper in a microstep? Really to stop and hold a microstepping-posiiton? I am not sure. We should find somebody who uses smaller steppers.


Yes, I believe it can be held in microstep. However, the motors have less torque when holding in a microstep and more potential variation from step to step. 1/8 of a step may be a little more or less than 1/8th. While a full step will be pretty consistent.

Yust do a small test. Drive it into a Microstep Position and move that pen arm by hand. You will notice, that it is pretty strong and always stucks only in fullsteps. I am wondering if this is related to the cheap chineese quality of that steppers? Or maybe they are really oversized for that job.

I understand what you're saying. Maybe when you move the full step you're moving into the next set of 1/16th steps. So you're skipping from 1/16th to 17/16ths to 33/16ths. Or maybe skipping by 1/8ths. Not sure. I know I can move my CNC mill in much finer increments than the 200 steps of the motor and it holds pretty well, so it must be able to hold a microstep. It is set to 1/8th stepping.

Looks like you can change

serialPort = serial.Serial( strComPort, timeout=1 ) # 1 second timeout!


serialPort = serial.Serial( strComPort, baudrate=115200, timeout=1 ) # 1 second timeout!

for a 115200 baud rate. It's line 1326 in my eggbot.py file.

If anyone is having any issues with " Unable to find an Eggbot on any serial port. "

You MUST use the " Disable Auto Reset " fix. For my UNO you must use a 10uf electrolytic capacitor from the RESET pin to ground!! For some other Uno's and other Arduino's, you'll need a 120k resistor between Reset and 5v. There are tutorials online if you need additional help.

Lastly, THANK YOU SO MUCH cocktailyogi!!!!! Great Easter present for everyone!

Yes, this is the most common fault. And keep in mind, every arduino has its owm method.

Hi, nice work. Before I was crazy with Inkscape and Spherebot and now your project is a easy mode to simplified the question.
But now I've a question for you.
When I start plotting from eggbot extension in Inkscape the pen arc is too large and it go to hit the lateral part of hardware.
How I can reduce that course: reduce the page size (Y) in Inkscape or reduce the pen microstep in EggDuino.ino or other best solution?

If I reduce the microstep The run is not fluid or is my impression?
If I reduce the resolution the drawings area become too small

Which resolution of page in inkscape for a medium egg you, or anybody else, suggest ( one step in one pixel? )

Sorry for my english :)
Happy Eastern

There is an Eggbot template for Spherebot. You should use that. The optimal resolutions is also mentioned here somewhere in this comments. I recommend to use 16-Microsteping mode in your hardware and also set it in firmware.


Hello! Excellent work. I was wondering if you have any tips on using this software with the Adafruit motor shield. I know I will have to include the libraries, but as an amateur programmer your advanced structure is hard for me to understand. I think I'd have to find the function call to the current stepper library and change it to call the adafruit library instead. But your software structure might allow for such changes to be easily made. Can you suggest what I might be looking for? I will do all the hard work but I thought I'd ask if you had any pointers. Thanks!

Hi, basically you will have to replace that ACCELSTEPPER-Lib and its interface with your own stuff. My firmware sends move and speed commands to that LIB. You could first check, if accelstepper-project, which I am using already supports your type of motor-control. Then it might be easy to adept.


I love how you support your EggBot, cocktailyogi! Thanks so much!
I´m using the portable Inksape Version 0.48 on Windows 7. I installed the new 1.4 Firmware on my Arduino Uno and followed the instructions in the read-me file. I´m using Nema17 stepper motors and two Pololu A4988 stepper driver.

But the results I´m getting look quiet weird. The motor rotating the egg seems to work fine. The motor rotating the pen arm, however, makes very large steps and seems to go only in direction. I uploaded the Firmware to the Arduino without any changes regarding the microstepping or anything else. I already changed the stepper drivers, because I thought one of them was broken, but it made no difference.

Please watch the video for better understanding:

Thanks for any help :)

Hi MakeIt3D,

good idea with that video. I do not think, it is related to software.
I guess, you have a problem with your hardware. 3 things to check:

  • check your mircostepping-settings on your Stepper-Drivers. Eggduino 1.4 by default is 16th-microstepping. So your Driver MS0, ms1 and ms2 must be configured properly.
  • Adjust your current with the driverpot properly
  • my best guess is, you driection signal for the penarm is missing/wrong. It should be connected to Arduino Pin 7


It finally works, just ready for Eastern! I can´t tell you how happy I´m now!!!!!!!!!!!!! It seems like it was a wiring issue.

Thanks for the quik replay! I´ll try that right now

New patch-instructions:

  • Because of an bug in the Eggbot-extension (Function findEiBotBoards()), the Eggduino cannot be detected by default.
    Hopefully, the guys will fix this later on. But we can fix it on our own.
    It is quiete easy:

    - Go to your Inkscape-Installationfolder and navigate to subfolder .\App\Inkscape\share\extensions
    - open File "eggbot.py" in texteditor and search for line:
        "Try any devices which seem to have EBB boards attached"
            - uncomment that block like this:
                    # Try any devices which seem to have EBB boards attached
            # for strComPort in eggbot_scan.findEiBotBoards():
            #   serialPort = self.testSerialPort( strComPort )
            #   if serialPort:
            #       self.svgSerialPort = strComPort
            #       return serialPort
    - In my version lines 1355-1360

Hi Yogi, you mean "comment" not "uncomment" - right? :)

Sure, you are right, I fixed it, thx

Firmware update to Version 1.3 released !
Warning: Now 16th microstepping by default.

Hi Yogi,

unfortunately on my Windows 7 and my MAC I get the same message from Inkscape: "Unable to find an Eggbot on any serial port. :(
Error reading serial data.". This is the message from your portable Inkscape. If I connect to my Arduino with a serial monitor, type "v" and Enter I get: "EBBv13_and_above Protocol emulated by Eggduino-Firmware V1.2". Seems fine for me. Not sure what the issue is. I wanted to try your promoted Version 1.3, but I cannot find it on github. Any Ideas?


Sorry, it is now only with version 1.4, my fault.

Comments deleted.

SOLVED! - I forgot to disable Autoreset - works now.

Beautiful. There is a new Firmware again. Version 1.4

"Cancel" on EggBot Control does not work ...

Yes, but you should tell that to the Eggbot-Plugin developmentteam... and if you read their comment in Inkscape, you will see that it is known to them.

Success! I just added my pictures to "I Made One". My first tests are giving me very "stair-steppy" results. The rotation of the egg seems to be smooth but the pen arm moves in large steps. What am I doing wrong? Any tips?

Here is a video of the first test:

I am using the following:
Arduino UNO with Eggduino firmware (100uF cap between RST and GND to disable serial reset)
Dual Stepper Shield (Easy Driver based) set for 1/8 th microstepping
Mac OSX, Inkscape 0.48 + Eggbot extensions with the manual patch for the serial port in eggbot.py

Your bot does not run smooth. Try to lower the power on your stepsticks and also set them for 1/16 micro stepping

I have it running smoothly now. I changed out the steppers and now am using the Big Easy drivers (support 1/16th microstepping). Works perfectly.

Hi, yogi. I've been trying to get this running on my Duemilanove, but my 2 windows machines (7 home premium and 10 beta) tell me that there is no module named serial. I've tried fresh installs of inkscape.47 and.49 along with .49 portable along with the latest eggbot software and the latest eggduino firmware (installed twice due to troubleshooting, also installed on a mega). I have also tried on 2 of my linux machines (crunchbang wheezy) with the latest everything and have fixed the serial module issue by installing pyserial, though it still won't connect. in all cases, the device(s) is(are) found by the computer and arduino, but not by inkscape. I've patched eggbot.py for the respective operating systems as per what I've found (com port4 = 3, "/dev/ttyUSB0"), and I modded the board to accept a jumper on the reset_en pads (yes, it is properly cut so there isn't a short). I have all my peripherals connected properly as well. I just can't seem to get anything to communicate once inkscape gets a hold of it. I've tried 2 separate USB cables and I'm getting ready to mod the board again to accept a more common USB cable. did I miss something? Really, I want it to work on windows, but I can't seem to get past the serial module issue.

Hi laserburn,

I am glad, that you are using my Firmware. Now, let us do it step by step.

I would recommend the following:
Forget for a moment about Inkscape and pyserial. Try to connect to your Eggduino via Terminal with 9600 baud, like putty or Hyperterminal and see, if you can get EGGDUINOS Initstring "EBBv13_and_above Protocol emulated by Eggduino-Firmware V1.2"
If this DOES NOT WORK, then you have a problem with your Arduino-Board or Arduino Driver

If this DOES TEST PASSES, then you should EXACTLY read and follow my instrcutions and try my "Inkscape portable package", which is tested with Eggduino. No support from my side for your in installations or newer versions of Inkscape or anything else. This is only about the firmware, which exactly behaves same way as Eggbot EBB-Board.

But first do that test, then we will come to next step.


Ok, now, I've completely uninstalled and reinstalled inkscape and eggbot software, and I'm getting this error

Traceback (most recent call last):
File "eggbot.py", line 1406, in
File "C:\Program Files (x86)\Inkscape\share\extensions\inkex.py", line 221, in affect
File "eggbot.py", line 314, in effect
File "eggbot.py", line 1299, in EggbotOpenSerial
self.serialPort = self.getSerialPort()
File "eggbot.py", line 1356, in getSerialPort
for strComPort in eggbot_scan.findEiBotBoards():
File "C:\Program Files (x86)\Inkscape\share\extensions\eggbot_scanwin32.py", line 6, in findEiBotBoards
hKey = _winreg.OpenKey( hReg, r"SYSTEM\CurrentControlSet\Enum\USB\VID_04D8&PID_FD92" )WindowsError: [Error 2] The system cannot find the file specified

I've searched quite a bit, but can't seem to find a definitive answer as to what's causing it.

Thanks for the reply!

So, I have connected both boards to PuTTY, and am getting the same results, a blank screen with a cursor. However, if I type in the terminal, the Rx LED blinks on every keystroke, and will blink the Tx LED when sending something back (so far, only "unknown CMD"). so, it is communicating, to a point. but I never did see 'EGGDUINOS Initstring "EBBv13_and_above Protocol emulated by Eggduino-Firmware V1.2"'

I got it, sorry, I didn't know to type "v" to get that return. so, my board IS good, I'll uninstall everything inkscape and retry your instructions verbatim and see if I can get rid of the "serial module not found" issue


first try it with my "Inkscape portable package". You will find a download link in the download-section here within that textfile. It is fully tested.


In the .SCH, it links me to your eggduino page, but it isn't in there. I tried your root directory, but it's just a couple more firmwares. the only link in the readme links to the eggbot's page. unless I'm missing something. I've actually tried finding it before coming to you.

Hi Laserburn,

I am sorry. You are right, the Softwarepackage is missing.... Maybe they have removed it....

Now it is in my Dropbox for you:

Awesome! that did it for me! I just had to modify the code for my custom drivers, and it ran without issue! Thanks, Yogi! I thought it would be okay to do single step controllers, but it's hard to do anything decent looking with them, lol. I'm gonna pick up a couple microsteppers before I do any uploads. Thanks again, though!


Great job, Thanks for sharing.

Thanks ( and merry Christmas)

Hi Durga,

I have received an Email from yours, but that comment did not show up here!??

Do still have a problem with your setup? I have two suggestions:

  • Use my Inkscape-Portable-Version, because it is known to be functional (at least until we have solved your problem)
  • Disable Arduino Autoreset like recommended (120 Ohm Resistor should be fine, better would be to cut the trace....)

Merry Christmas,

Hi Yogi,
Thanks for your enquiry, I have changed the comment as I found the answers ( also feel stupid as one of the issue was about com number very well explained in your site),

The main issue was on auto-reset, the 120ohm do not works, I have tried 10UF capacitor and same results, I ended with 100uf capacitor and it works.

I have used the extension included in your inkscape portable version with the new release of inkscape and it works perfectly ( I do not understand the language version and dont know how to change it...). However the version use, this is a great idea and very good job to have created this portable working version.

I have soldered all on stripboard using nano clone, just need to find a way to get better alignment of egg ( I am using motor with 2mn axes instead of regular 5mm need to tune a piece) and maybe look on how to cut the trace to get better solution for autoreset.

Once again thanks for your work and support

Thanks a lot for your code!

I have tried this and it works great. I have used 1/16 microstep and also work good, but I will try 1/8 - maybe it will be smoother action?

I have more important question: pen lowering/raising speed can be controlled by Eggbot's Inkscape plugin.
My settings for now is 17/24 (down/up) and lowering speed 20%/s (or even 10%) but pen goed up/down too fast (beat the egg).
It looks like it is not working on Eggduino firmware. Am I wrong?

Hi yurasin,

I am happy, that you have a working setup. There is no SpeedControl for Pen raising/lowering in Edduino. I also have not seen any commands regarding this. For your setup you should check your spring and pen-adjustment, if eggs are cracking. There is and will be not Speedcontrol on the software-side because commands are missing and we are using a servo which is controlled by PWM.


Hi, thanks for making this. I have made a spherebot but the steppers are all over the place. Is there a way to calibrate them in your code?

What do you mean? Homing is easy, yust put the steppers in home-Pos, before turning on eggbot.... No need of endstops...or any complicated sequence.... If your steps/degree are wrong, please check micrpstep settings. My code is actually only tested with 1/8 microstepping. Eggbot has by default 1/16


fwiw, I got this to work with the RBBB board (This one: http://www.thingiverse.com/thing:22438)http://www.thingiverse.com/thi..., a $3 USB/TTL, and Linux by removing the C4 capacitor near the RX pin (disabling auto-reset), and putting the whole port name (rather than just a number) into the script file:
serialPort = self.testSerialPort( "/dev/ttyUSB0" ) # in .config/inkscape/extensions/http://eggbot.pyeggbot.py, line 1348
Thanks for the great work here, cocktailyogi!

Modified Endplate for Fully Printable Eggbot

Sorry about my previous mail, I have found the solution
On the sketch of mine arduino :
I had # define rotMicrostep put on 2 and

define penMicrestep put on 4, I thought that the microswitch were pens, stupid of me, sorry

Now I put them both on 8 and looks much better 8 = 1/8 step
It was a big mistake of my
My smiley is a now a smiley and not a banana
Kind Regards

Once again a fantastic project, I have one question
I have download eggbot pictures https://github.com/matthewbeckler/HackPittsburghMediahttps://github.com/matthewbeck... and place it in inkscape , it work but the pictures are little very small on my tennisball / egg how kan I fic it
My microsteps are H H L = 1/8 step , the steppenmotors are nema17 200steps / 1,8°
Must I somewhere in the photo file to change something
Kind Regards
https//http://code.google.com/p/eggbotcode/downloads/list?q=stipplegencode.google.com/p/eggbotcode/d... this is my favorite this is what I will do

Thanks for this very good explanation, it worked for me at once
Between reset and ground, I placed a 100?F/25V
What do the two microswitches, to me they are connected as NO?? ( is this correct)
On which pin is the PRG Button
Kind Regards

Hi Sembot,
your build looks very nice. I am glad, you succeeded with Eggduino.
The Microswitches are not used in my design.
And the PRG-Button is not implemented yet.
Kind Regards,

Hi all and thanks cocktailyogi for a great project!
i tried it and it connects to inkscape once i did the the "cut trace" to disable auto reset.
But i can't figure out why my movement are so big/small. 200/3200 steps per rev
If i do a Manual control from the tab in the inkscape extension "Walk Motor 1 (pen)" 400 steps the pen rotates 1 complete revolution, same for the (egg) 400 steps = 1 rev (My steppers are 1.8 so 200 steps should be 1 rev if no microsteping was present)
How many steps should i expect for 1 revolution here. is it with or without microstepping?
Is there a good way to figure out if my stepsticks (with ms1 2 3 to ground 1/16microsteps) are misbehaving or if i missed some patch?
Or could it be the #define penMicrostep 8 from the eggduino sketch?
8/16=0.5*400=200 which is a full revolution on a degree stepper?
/Balthazar Lang

Found my issue above.
I was using zaggos wiring diagram which seems to be wrong for my stepper drivers.
Zaggos original diagram: https://plus.google.com/photos/102739719986242997095/albums/5593135557574912081/5693719868500192194?banner=pwa&pid=5693719868500192194&oid=102739719986242997095https://plus.google.com/photos...
But after some hours of googleing and reading up on my the A4988 and my stepstick i realize that in order for it to be 1/16 MS1 MS2 MS3 needs to got to 5V and not gnd.
So this morning i reconnected MS1 and MS2 to +5V and left MS3 open(not connected) running at 1/8 it "works"
But something is still off since manual control in inkscape turning a stepper 3200 steps gives me a full revolution when my stepstick is at 1/8. If I put all MS123 to 5V = 1/16 the manual control of 3200 steps gives me half a revolution. But i guess this is caused by "uint8_t penStepCorrection = penStepMode/penMicrostep ;" which in halfs the movement by default in version 1.2
Best regards

Hi Balthazar,
your design looks great. Inscape/Eggbot are expecting 1/16 microstepping --> 3200/turn. My Firmware adapts is to you rpersonal needs and microsteppping configuration. YOu can set it to your needs with parameter

define rotMicrostep and #define penMicrostep in my firmware.Eggduino will do the transformation. To check it, you can send 3200 Steps in Inkscape, which must result in 1 turn.

With the github repo settings for microstepping i needed wire my steppers for 1/8 to make it work perfectly:
Video: https://www.youtube.com/watch?v=95L3g1Ww028https://www.youtube.com/watch?...
Sadly when i try to change and upload rotMicrostep and penMicrostep to my original arduino R3 it says something like "avrdude: stk500_getsync(): not in sync" and cancels the upload. So i will have to Google why it is not accepting new sketches. The arduino is obviosly working just wont take new uploads currently

1/8 Microsteps is default for Eggduino. So aýour setup is perfect, why do you want to change it?
"avrdude: stk500_getsync(): not in sync" means communication error, it has nothing to do with changes you made. Check your USB-COnnection and press Reset-Button yust before uploading starts to activate Arduino-Bootloader.

Please click "I made one"

I will definately do so, with pictures, once I have mine going. Thanks for all your contributions!

yust in time for Christmas 2014 comes my update with better precision:
Verison 1.2 with improvements on:
Please test and let me know your thoughts.

This is on my list of things to finish, this weekend. Looking forward to playing with it!

Good day together,
thanks for all your feedback, testing and debugging-help for the Eggduino-Firmware.
I am aware, that the result is already useable, but not perfect.
I have released Firmware-Version 1.1 on Github. It should have fixed the problem with loosing steps. Please fell free to test it. If you have problems with the motion interface, please post feedback and tell us your Microstepping-Configuration.
You should also make sure, that your Stepperdriver-Current is set proberly and the mechanics are running well.

I volontair to test it but it seems it is still version 1.0 on github and last code change (except readme) updated 5 days ago. Have you synced it to github or just a local commit?

Sorry, sync failed, it is fixed now. Thanks for testing it!

No problem but from reading the code I think it may be invalid anyway and needs another (but simple) approach. Say that the calculated value for rotSteps becomes 0.5 units and that that move is executed four times. Host expect a movement of 0.5x4=2.0 units but due to rounding the movement will become 0 each time, in total 0 units of movement - given that the host then wants to go back (-2.0 units) in one move we will not come back to the place we started but -2.0 units due to the accumulated rounding error.
I think the following approach I used in my software (not a fork of yours) will do the trick for you without acumulating rounding errors.

xpos_wanted = ((float) (rotMicrostep/rotStepMode)) * rotStepsEBB;
deltasteps = xpos_wanted - xpos_current;
xpos_current += deltasteps;


  • xpos_wanted (float) is the ("exact") value where we want to be (with decimals if needed)
  • xpos_current (long) is accumulated delta moves
  • deltasteps (long) is the number of steps to move in this movement

I am not sure, if your example is useable for this project. Eggbot is sending relative coordinates. Your code seems to expect absolute coordinates. I see the idea, but at the moment I am unsure how to adapt it. xpos_current should be modified to keep the position error. Is there a function in c, which gives us only the fractional part of a number?

Okay, you are right, it needs adaptation, and perhaps we should first confirm that the rounding issue is the real issue so we are hunting he right thing. It could easily also loosing step due to low current (so just lower the speed of the steppers might resolve the major issue).
Nevertheless, if rotMicrostep=8 and rotStepMode=16 and rotStepsEBB is an odd value it will currently result in a rounding error which eventually may sum up to a noticable error.

confirmed, it is independed from speed and current. In V1.1 is implemented proper rounding, but smaller posiiton errors could still sum up.
I think I will try to tweak the algorithm with a micture of your routine and the modf() function. But it needs time, because my holdays are over and I have to go to work.

No problem.... it's plenty of time to next easter holiday :-)
(and don't feel any presure from me to resolve it)

I had a feeling you couldn't resist to fix that final bit. ;-)
I haven't tested it yet but I looked thru the code (diff) and it really looks like you addressed the real issue plus improved it further! Great work! Thanks!

Just the software I was looking for. Perfect timing!
I have played with it for a few minutes and it's working almost great. However it seems that it is "drifting" a little in the "penMotor" - I'm not sure if it is my setup or the software but at a closer look your title image also shows that the bottom line of the text seems to move slightly up sometimes (at letter d, i and o).
I haven't looked into the source to track the error down yet, and it's getting late now, but perhaps you have a clue already of some rounding error or reset position after a path or similar?..

You are right, it is drifting in the pen axis in my setup two. I was guessing it is related to my Motor/Driver setup, but you might be right.
It might be possible, that in my Firmware the math for the unit-conversion (function movesteppers) gives a problem. Rounding of float/integers.... I will check later.

Yep that did it although I had to use a capacitor on my Mega.
Still got some issues with the motors (Nema 17) Pen seems to be going to far each way, But getting connected was the first hurdle.

Check Microstepping Configuration... Eggduino Default is 1/8 Stepping, but you could change it...

Cool. I'll have to try that tonight. Thank you for your continuous effort to help us.
Question...Could the http://eggbot.pyeggbot.py script be given a line that will do this: "If a sketch running on the board receives one-time configuration or other data when it first starts, make sure that the software with which it communicates waits a second after opening the connection and before sending this data. " Which was suggested at http://arduino.cc/en/Main/arduinoBoardUnohttp://arduino.cc/en/Main/ardu...

I am pretty sure, it is possible, but I have no Python-Knowledge....
and I prefer cutting a trace or add a capacitor, because it is simple, cheap and gives no disadvantage.
The main goal of this Thing is to emulate an Eggbot without modification of the Eggbot-Toolchain. The reason, why we have to patch http://eggbot.pyeggbot.py, is a bug in the extension. I am pretty sure, it will get fixed in the future and then my patch is obsolete.

Hey people, I have the solution for you. I had the same problem in the beginneing and forgot abput it.... SORRY!
You have to disable Auto-Reset on your Arduino-Board!!! Arduino-Boards have Autoreset enabled by default and it resets on every connection-attempt. On Arduino Uno, you will have to cut a trace, or to install a capacitor.

Yogi, Ive got an Uno R3, did you go the "install a capacitor" route, can you provide any details. I am an Arduino newbie and a little confused on the documentation. Thanks

Hi Plangdon,
Sorry no Arduino Support here.... You will find anything you need in the Arduino forum or on their website.
I did "Trace-Cut", not the capacitor-mod

Ahhh...that's why it worked for me; I'm using an Arduino Micro, which like the Leondardo, doesn't auto reset.

Hi cocktailyogi
Get this on com 6 so that seems fine
EBB 2.1.0+ Protocol emulated by Eggduino-Firmware V1.0
So not sure why the Eggbot plugin won't pick it up.
Where do I find your portable inkscape?

Hi Malpett,
I removed Inkscape, because it was exactly the same like you can download on their website and I have no software-rights from that guys. Make sure to apply my patch with a proper texteditor like "Notepad++" or something similar, not the Windows-Buildin Editor. Your hardware seems to be fine.

Could the problem be the Editor then? I'm using an IDE editor that I honestly don't know where it came from...it might be the Windows Built - in editor.

I am using notepad ++
Don't think that is the issue...
I should try a machine reset it is windows after all

He took the inkscape portable link away. I'm having the same problems that you are. I tried the inkscape portable with no luck. I'm going to uninstall inkscape and reinstall it, hopefully tonight. Just kinda start over.

Added simple Communication-Test to Instructions. With this you can check your hardware and figure out, if your problem is related to Software or Hardware/Arduino-Side

Hi cocktailyogi
Thanks for this project unfortunately I can not get it to work either on my XP machine (this is my experimental computer) have read through all posts below but still get the ""Unable to find an Eggbot on any serial port." when using the egg bot control.
I can not find the portable version of inkscape you said you have added to the download...although I have no clue about what the file is attached to the "thing Files" I presumed you just added that because you had to add some sort of file to the project.
I have changed the pins around in the arduino sketch but I don't think that would cause the above error.
My system is on com 6 and I have changed it like this...
serialPort = self.testSerialPort(5)
if serialPort:
return serialPort

Try any devices which seem to have EBB boards attached

    #for strComPort in eggbot_scan.findEiBotBoards():
        #serialPort = self.testSerialPort( strComPort )
        #if serialPort:
        #   self.svgSerialPort = strComPort
            #return serialPort
    # Try any likely ports
    for strComPort in eggbot_scan.findPorts():
        serialPort = self.testSerialPort(5)
        if serialPort:
            self.svgSerialPort = strComPort
            return serialPort
    return None

If you have any other ideas can you let me know.
By the way I am using V 0.48 of Inkscape.

No, I haven't posted my files anywhere yet. Now that I've missed my Easter goal, I'm going to take extra time to improve things a bit. I want to emphasize that my spherebot isn't better in terms of mechanics or drawing quality. It is easier to adjust (for different sized spheres/eggs) than other designs, though, and can hold up to 120mm diameter spheres if they aren't too heavy. Though it wasn't a goal, It's also entirely printable except for the electronics, mounting screws, and rubber for gripping the spheres.
The actual goal was to make something more stylish than the existing construction-set looking versions out there already. Too bad I'm an old nerd, and to me "stylish" means something like from a 1950's science fiction movie. (see my robot clock for reference - http://www.thingiverse.com/thing:38444http://www.thingiverse.com/thi... ).

Kongotronic 3000 TIME DEFENDER Robot Clock

Got Eggduino running from my Raspberry Pi lapdock conversion, too! I followed EMSL's instructions for installing their stuff on Debian Wheezy - http://wiki.evilmadscientist.com/Installing_softwarehttp://wiki.evilmadscientist.c... - and dropped in the patched script. The extension found the 'bot no problem.

Also, installtion of phyton or http://serial.pyserial.py doe not seem to be nessecary.

Hi guys,
I have some news. The Eggduino is working fine, if you apply the patch to "http://eggbot.pyeggbot.py", as I described. I have tested it in a clean install of Windows 7 with actual downloaded versions of Inkscape and Eggbot Extension. No problem at all. Modification of http://Eggbot.pyEggbot.py Script is essential.
Have fun.

I too had the "unable to find" error initially. I then changed http://eggbot.pyeggbot.py as you suggested (telling it which COM port to use), and it connected and sent data fine. I then came back here and saw you posted your portable Inkscape, tried it, and it worked for me without any changes.
Thanks for this! Anything that makes the toolchain easier is surely welcome. I'm working on an spherebot design that is a bit more fancy (in appearance) than others published previously. I was hoping to release it before Easter, but it's not going to happen. :-( I guess it's now for Christmas ornaments rather than Easter eggs.
Your work is appreciated, Cocktailyogi! Keep it up!

That didn't work either. I appreciate all the help you are giving. I did some research. Isn't there something about having to download a certain lib for python to be able to detect serial ports?

And make sure not to change the Initstring in my script! It is important for the detection algorithm.

As a short term fix you could set Serial-Port manually in Script, but this is not very comfortable:
Replace "self.svgSerialPort" in "line serialPort = self.testSerialPort( self.svgSerialPort )" with your COM-port-number.
COM1 is 0
COM2 is 1
COM3 is 2 etc....
So for COM3 it should look like:
"line serialPort = self.testSerialPort(2)"
Please try, if it is detecting your Eggduino then.
Happy Easter!

Essential comment that should get more focus. Maybe in the instruction?

Sorry, this is about Eggduino, which is behaving very well (regarding initsequence). serialPort-issue is about Inkscape-Plugin. Other people are supporting it. I am quiet sure, that they have had a bug. That is the reason why I have uploaded a working portable-version. That is all I can do.


I saw now that it mentioned in the Gtihub.

But I think your desciption in the comment here was the better. Apart from the awful fromatting these comments get. It soved it for me when i installed it on a new machine.

Replace "self.svgSerialPort" in "line serialPort = self.testSerialPort( self.svgSerialPort )" with your COM-port-number.COM1 is 0COM2 is 1COM3 is 2 etc....
So for COM3 it should look like:
"line serialPort = self.testSerialPort(2)"Please try, if it is detecting your Eggduino then.Happy Easter!

I'm having the same problem as plangdon. Getting the same error code. Any new thoughts on this. Is there a way to direct it to the right serial port instead of it searching for it?

Did you use the portable package from this download section or install Inkscape and Extension ? It is importtant for me to know, because i would like to fix there problem. I have tested my plugin on a brandnew installed Windows 7 and Windows XP, it works perfect.

Yes, I even tried the portable package with the same results. I'm using python 2.7, I believe. Could that be a problem?

I've done all the steps described on GitHub but I get "Unable to find an Eggbot on any serial port. :(" when I try anything in the Eggbot control. I'm using an Uno, Windows 8.1. EggDuino.ino compiled clean and installed. Any thought? Thanks.

Hi Plangdon,
there are only two possiblities to your problem:

  1. Make sure, your Arduino Uno gets recognised and USB-Driver for Arsuino is installed porperly. It should show an COM-Port in Device-Manager
  2. Did you apply the mod to file http://eggbot.pyeggbot.py in Inkscape-Extension? Please post the relevant lines here or send the file to me. I will check for you.
    Happy Easter,

It shows up under serial port as COM4, is that the problem? should it be USB?
I did make the http://eggbot.pyeggbot.py changes as you very nicely documented.

Before searching, first check to see if the last known

    # serial port is still good.
    serialPort = self.testSerialPort( self.svgSerialPort )
    if serialPort:
        return serialPort
    # Try any devices which seem to have EBB boards attached
    #for strComPort in eggbot_scan.findEiBotBoards():
        #serialPort = self.testSerialPort( strComPort )
        #if serialPort:
            #self.svgSerialPort = strComPort
            #return serialPort
    # Try any likely ports
    for strComPort in eggbot_scan.findPorts():
        serialPort = self.testSerialPort( strComPort )
        if serialPort:
            self.svgSerialPort = strComPort
            return serialPort

Thanks so much!

if it shows up as Comport, it is al right. The change also looks good. Unfortunately I have no idea, what is going on. In my system it it going very well.
Within the next minutes I will upload my portable package for you. You could try this version, which is wirking for. Yust extract it and exectue inscape.exe. No installation needed. Try that one.

Thanks, I'll give it a try.

I have uploaded my complete portable package, which is fully functional under Windows 7. You will find it in Downloads. Please test it.

Do we use the Function.ino for anything?

Yes, Function.ino and Helper.ino are used by the Main-Sketch. Yust leave them in the same folder, Arduino-IDE will OPen and Import them automatically. They are very important. These sketches are not designed to run on their own.