Introduction: DIY Arduino Based EggBot

About: Hi, my name is Nikodem Bartnik. I'm 19 years old. I am into designing, making, programming and electronics. In the future, I want to start a company and make my own products. As for now, you can find my work o…

In 2015 as I was just starting with Arduino and coming up with different project ideas I found online a small machine that was drawing on eggs. That was probably the first time I saw an EggBot, I started searching the internet for a tutorial or at least some information on how to build something like this. I found a few pictures and some old blog posts but none of that was complete or easy to follow. At this point I was just playing with Arduino boards for fun for about a year so the idea of building such project started to fade away, it seemed too hard.

But giving up easily is not my thing. Every few days the idea of building this project was getting back to me. So in the end I tried, it took me (and my dad who helped a lot) a lot of time, the amount of problems to solve was just incredible (back at the time, I had no 3D printer so this project was a serious DIY). Here is a link to that project.

I got it to work, somehow. It wasn't really that detailed, stepper motors movement was really choppy, it wasn't looking that great and was quite hard for others to replicate. But still at that point of my life this project was really important and helped me to develop all the other projects in the future. Around that time I also noticed that the best part of a new project is not when it finally works, it's when it doesn't, you have no idea why and everything seems impossible (maybe it's just a case for me :)).

5 years later I decided to try again. Over the years of building my projects and sharing them on the internet, for example here on Instructables I collected a lot more equipment (some of the things I won in amazing contests here on Instructables!) and more importantly knowledge so this time I decided to fix all the problems with the first version of egg bot. In this Instructable, I will take you on a journey through that to show you how I have done it and how you can build it yourself.

My Instagram:

And patreon:

Step 1: Parts

The list of parts is quite short for this project, basic soldering skills might be required. I am adding links to some parts, some parts (laser cut and 3D printed are explained in depth in next steps):

  • Arduino UNO - you can use any Arduino board you want, Arduino is the most basic one and is very popular. You can use a clone board (not a original board from Arduino, in most cases it will work just fine)
  • Stepper motors (Nema17) - I tried experimenting with 28BYJ48 but the backlash is so terrible that there is just no way to get it working fine in such a project. You can see 28BYJ48 on the image above, I took this picture while starting to work on a project, I advise you not to use these motors.
  • Micro servo motor - the most popular 9g blue micro servo
  • A4988 stepper motor drivers - incredibly cheap stepper driver that was widely used in 3D printers, you can also use some TMC drivers if you want it to be silent.
  • Breadboard - here we will attach stepper drivers to the Arduino, alternatively, you can use a GRBL shield or a proto shield with breadboard mounted on top.
  • Some cables - breadboard male to male cables.
  • 608 bearing - this will let the egg rotate
  • Some M3 screws
  • 3D printed parts and laser cut plywood parts - you can buy a kit of those parts from my store:

More explanation about 3D printed and laser cut parts and files in the next steps.

We will also need some basic tools like screwdrivers, tongs, some wood glue and lastly the pen that will be used to draw on eggs.

Step 2: How It Works?

It's basically a CNC machine.

But it's not really an explanation, is it? The principle of operation is very similar (or even the same) as in a CNC machine, 3D printer or plotters. In fact I am using GRBL as a firmware on Arduino UNO which is often used in hobby CNC machines. The eggbot is like a 2D plotter but wrapped around a cylindrical object with a servo acting as a pen lifting mechanism. By rotating one of the stepper motors we are moving the open over the surface of the egg and with the other motor the egg is rotated, that acts as X and Y axis.

But how does it know how to move the motors? For that we need a Gcode that is a file with set of commands that may look something like this:

X10 Y10
X20 Y10

This is a very simplified example of a Gcode, but it's easy to understand. We can create Gcode like this from an SVG file and send through serial port to Arduino with CNCjs (just like a CNC machine). And finally EggBot by executing each line of the code will slowly draw the image you want on an egg!

Step 3: Plywood Parts

As mentioned in the parts section we will need plywood parts for this project. The best way to make plywood parts is to use a laser. I am lucky enough to have a laser cutter (huge thanks to Instructables contests!). Parts should be cut from 3mm laser plywood. If you don't have access to a laser cutter try to ask at a local maker space or school, searching online for a company that will do that is also an option.

I am also selling plywood parts together with 3D printed parts in my store:

So if you don't have access to a laser cutter/3D printer or it's cheaper or you just want to support my work you can check out my store. I am also selling here parts for another project of mine - an open-source CNC machine called IndyMill which also can be used to cut plywood parts for this project but it's easier and faster to do with a laser.

Below you can find DXF files of the project (unit: mm), that's what you will need to cut the parts on a laser.

Step 4: 3D Printed Parts

You will also need to 3D print a few parts for this project. Most of them can be printed with PLA (basic settings, 3 perimeters 30% infill or more). Two parts must be printed with flexible filament also called TPU (bearing_plug.stl and egg holder.stl), those are used to grip an egg and hold it in place while printing. STL files are attached below. Print orientation is shown in the picture above.

For the flexible filament print slow 30-40% of normal speed, disable retraction, and maybe increase the extrusion multiplier a bit. You don't need a direct extruder for that, most bowden extruders can print this material too (for example Ender3).

Step 5: Assembly

Start with gluing the whole plywood frame together. Standard wood glue will do the job, there are just a few pieces so it shouldn't be hard to put it together. It doesn't matter if you put the motor on the left or right (I have it on the left). With some M3 screws, you can attach motors and 3D printed parts. You will also need to cut M8 threaded rod to a proper length and screw it into 3D printed parts on the right-hand side of the eggbot.

The whole assembly process is shown in detail in the video and it's probably easier to understand it that way than read my explanation :)

After connecting the electronics you can gently squeeze it into the bottom of the wooden frame, screw the Arduino to the bottom plywood piece, fix the breadboard with double-sided tape, and glue the bottom parts together. USB and DC jack can be accessed through holes on the side.

Step 6: Electronics

To keep the electronics part as simple and accessible for others as possible I sticked to the breadboard. Making a custom PCB is the best way to make a project really professional and long lasting but it's hard for others to make or order it. Since this project is meant to be built by everyone, including beginners, using breadboard is a good compromise. If you want to learn how to design a PCB this is possibly a great opportunity to add something to the project and challenge yourself.

Schematic for connection on a PCB is presented above. You can use larger breadboard especially if you want to add something to the circuit.

With the potentiometers on top of stepper drivers you have to adjust current for the motors. There is a method to do that with a multimeter and a simple formula but I know it can be overwhelming for beginners and there is a possibility of shorting something on the driver while measuring with the multimeter. Because of that for a project like this I would recommend to adjust the current experimentally, try to slowly rotate the potentiometers while controlling the motors through CNCjs (I explained how to do that in next steps). Try to find a setting where motors can still move and are not that easily stopped by hand. The moment shouldn't be choppy, motors shouldn't overheat.

Step 7: Arduino Firmware (code)

The first version of eggbot that I build in 2015 used some piece of firmware I found online. It was working only with a certain kind of Gcode sender, it just wasn't even a good solution in any way. This time I decided to go with GRBL widely used in CNC machines. This firmware is very popular, tested and works great with Arduino UNO. It's also worth to know how to set it up if you later want to get into CNC machines, it also works with a lot of Gcode senders.

You can read more about GRBL an dhow to install it here:

Installing is just about importing a library to Arduino UNO, then you open one of the examples and upload it to the board. But before uploading to the Arduino we have to modify one thing.

GRBL is not designed to be used with servo motors, we need a servo to lift the pen. Fortunately the power of open source projects will helps us! All you have to do is to download files from this GitHub repo:

and put them in the GRBL folder (the one in Arduino libraries folder) it will overwrite some files and add the servo functionality. As we can read on the GitHub of this project:

The servo will have two positions representing up and down. You use normal gcode. Any time the work Z is above 0 the servo will move to the pen up position. If it is at Z 0 or below it will be in the pen down position.

So we don't even need to create a special Gcode, when Z = 0 then pen is down and when it is any higher value the pen is up.

Now it's time to upload GRBL to Arduino UNO (or any other that you are using). Now the firmware is ready, we still have to configure it that's what we will do in the next step.

Step 8: Configuring GRBL

To set proper number of steps per mm, max speeds and acceleration we need to send few commands to GRBL. Those values will be stored on Arduino's EEPROM, it will "remember" the values so we have to do that just once. To send the values you can use Serial Monitor from Arduino IDE or console in CNCjs. I will tell you a bit more about CNCjs in the next step (so you may want to read that now if you don't know what that is).

We need to send following commands (one line at a time):


That's it, GRBL should reply with 'ok' after each command is send.

Step 9: Controlling Software

Software that I always recommend for controlling CNC machines is CNCjs so that was an obvious choice for this project. CNCjs is open source, all platform, nicely designed and very intuitive.

More info and download links on the official website of the project:

On the left you can choose serial port and firmware that you use, select GRBL and serial port where your Arduino board is connected.Click connect. Sometimes if the board is autodetected it will automatically connect on startup.

On the right with axes buttons labeled with + and - you can move each axis, you can try to do that, it should work at this point.

On the left you have the console where you can see what's been send to the Arduino and sometimes see some error messages, that's very useful for debugging. This console is also used in the previous step to send the commands.

In the centre you can see tool paths and live view as you are machining (or drawing in this case). With the blue button on top you can import the code file.

Step 10: Preparing the Grpahics

The first step is to prepare the files, we will need SVG files that we will later convert to Gcode. To create or modify SVG files (or even create SVG files out of PNG and JPG) I recommend using Inkscape as it is free and not that hard to use.

In the Inkscape set the width to 80mm and height to 26mm. That is the "area of an egg where we can draw". You can import different vector drawings here, resize, move add text and do whatever you want. Once your design is ready export it as SVG.

The next step is to open the browser and go to jscut. With this online tool, we will generate Gcode based on an SVG file. This little web app is quite cable and can be used to generate simple Gcodes for a CNC machine, I also used it in my Raspberry Pi Pico plotter. Modify settings here according to your machine, the pen that you are using, and the effect you want to achieve. Click create operation and generate Gcode, you can take a look at the simulation tab to make sure that it looks fine. Save the file on your computer and import to CNCjs.

Preparing the machine is quite easy just move the pen to the corner, that's like setting a zero point of the machine. Once you are ready click start!

Step 11: Time to Draw!

It's not only about drawing on eggs, you can draw on many spherical objects! As long as it fits in the machine, and it is possible to draw on the surface with a simple pen you can do that!

I am attaching some sample images of what can be drawn, for some inspiration google whatever you want to draw, go to google graphics and limit the search to vector images only. If you are a talented artist you can draw something in Inkscape or illustrator yourself! Don't forget to share it with the community :)

If something is not 100% clear in this instructable check out my video as I explain a lot of things in here too. If after reading this instructable and watching the video you still have some questions, post a comment and I will try to help!

If you made it this far, thanks a lot for reading! If you are interested in seeing a live demo of this project and some Q&A on Twitch you can follow me here: maybe I will do something like this within the next few days!

It's been a long time since I have made my last instructable, it's good to be back! I hope you enjoyed this one :)

Happy making!