Drawing Robot - Arduino Uno + CNC Shield + GRBL

by henryarnold, published

Drawing Robot - Arduino Uno + CNC Shield + GRBL by henryarnold May 27, 2017
2 Share
Download All Files

Thing Apps Enabled

Order This Printed View All Apps


This drawing robot is similar to the commercially available AxiDraw. It is powered by an Arduino Uno controller and a CNC Shield and uses GRBL firmware. This drawing robot receives G Code commands that are created by a drawing program called Inkscape. The robot was put together using two other people's designs. I added the improved pen slider and the controller enclosure. This drawing robot allows you to draw things in Inkscape and then plot them out. Below are the links to the software I used. Avanhanegem's design has a great tutorial on how to generate G Code within Inkscape and then send it to the drawing robot using Source Rabbit G Code Sender.

When setting up your hardware, be sure to install 3 jumpers on the CNC Shield for each stepper driver. I have added a photo showing the jumpers. If you have any questions post them and I'll try to answer them.

I have posted all needed parts from the two source designs. There are only 15 parts to print and none of them are very large. I added a stronger pen slider and a controller enclosure. I also clarified the names that were in Spanish. I have posted all needed files so that there isn't confusion regarding which parts are needed from each of the original designs.

My drawing robot is modified version of this one

GRBL Firmware for the Arduino

Inkscape Drawing Software

Source Rabbit G Code Sender

Tutorial on how to generate G Code in Inkscape

2x Nema 17
2x Linear rod M8 x 450mm, X Axis
2x Linear rod M8 x 350mm, Y axis
2x Linear rod 3.0mm of CDROM, Z Axis
(You can find them in any old CDROM or purchase on EBay)
1x M8x470mm threaded rod
8x LM8UU or printed
1x Servo sg90
2x GT2 Pulley 16 teeth
5x Bearing 624zz
1x 2000mm GT2 belt

misc M3 and M4 screws and nuts
M8 nuts

Arduino Uno
CNC Shield
12V 2A Wall Transformer
2-4 limit switches ( optional. Suggest to leave them off and add later if you want them)

Inkscape which is the graphics design software (Includes G Code Extension)
Source Rabbit which is the G Code Sender (sends the machine commands from a file)
GRBL which is the Arduino firmware (programmed into the Arduino Uno)

I have supplied a few G Code files that work with this drawing robot. If yours is identical to this design, the G Code files should also work with yours.

Here's a video

Update 6-15-2017: I added the limit switches about 10 days ago and they don't add much to the functionality. When GRBL sees a limit switch hit, it just stops with an alarm condition. You must soft reset the robot and your drawing cannot be continued. The homing feature doesn't seem to work. I read in another persons post that they could not get home to work in GRBL 0.9. At this point I suggest building the drawing robot without the limit switches. As long as your drawing does exceed the envelope of the robot, you won't need the limit switches.

Update 6-19-2017: My friend found a better Inkscape Extension for generating G Code.
I think it is easier to use and generates better G Code:

Update 6-26-2017: I added the config.h file from GRBL for this machine. With this file and the parameter settings in the screen shot, you should be able to easily get your machine up and running.

Update 7-4-2017:
The top and bottom clam shells did not fit without pushing the LM8UU bearings slightly out of alignment. I removed a small amount of material from the top clamshell to allow clearance for the bottom clamshell posts. The old Top_XY_clamshell.stl file has been removed and replaced with the Top_XY_clamshell_V4.stl file. Thanks to rocketmannate who caught this problem.

More from Art 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

Auto-magically prepare your 3D models for 3D printing. A cloud based 3D models Preparing and Healing solution for 3D Printing, MakePrintable provides features for model repairing, wall thickness...

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

Print through a distributed network of 3D printing enthusiasts from across the US, at a fraction of the cost of the competitors. We want to change the world for the better through technology, an...

App Info Launch App

Quickly Scale, Mirror or Cut your 3D Models

App Info Launch App

3D Print a wide range of designs with Treatstock. Easy to use tools to get the perfect result. The global 3D printing network that connects you with high-quality and fast working print services nea...

App Info Launch App

So, I've used your config.h, and I'm testing the X and Y motors. My stepper motors move mm's but not full inches. Any distance greater than 4 mm and the motors just squeel. I've uploaded the geometric code, and the motors just squeel. I'm at a loss with how to debug here. Thoughts?

Did you install the jumpers on your CNC Shield? This is my fault. I think I need to create a document that gives all the steps of setting this machine up. For my stepper drivers, all three jumpers need to be installed.

Which version of inkscape are you using for adding the extension. I tried the mi extension with the latest but gives some error while converting to gcode. Is any particular version of inkscape only supports the extension? Pls reply...

I'm using Inkscape 0.92. The MI extension works fine. I'm not very expert at using Inkscape or the MI extension. Try testing with the samples I provided and beyond that you'll have to resolve software problems with a Google search.

4 days ago - Modified 4 days ago

I have done the same thing but the on board regulator is over heated and now the arduino got fried... Now it is not detecting by the ide

You must have wired it wrong. Vin of the Arduino doesn't come from the regulator. It is a direct connection to the power connector. The jumper I suggested just connects the two power ins of the Arduino and the CNC Shield.

how are you providing the 12volt power. at the uno power socket or the cnc power connecter??

There are two pictures are two photos in this "Thing" showing how to wire power and motors. The second photo shows how to add a jumper that connects Vin to the CNC Shield power. Once you do this a 12V 2A power supply plugged into the Arduino powers everything.

Just checked your hint for the new extension for Inkscape and trapped into a bug. After changing 1 Line in Server.py it works fine now: Check the Bug here : http://www.tylerforsythe.com/2015/02/inkscape-laser-engraver-bug/

Aug 7, 2017 - Modified 4 days ago

There are two pictures in this "Thing" showing how to wire power and motors. The second photo shows how to add a jumper that connects Vin to the CNC Shield power. Once you do this a 12V 2A power supply plugged into the Arduino powers everything.

How specifically did you wire for power? I ave the arduino uno power cord, but I'm not sure how to wire up to the cnc shield. Can you demonstrate with pictures of your actual device?

Comments deleted.

I'm confused, why did you use two motors on the x axis instead of using a pulley on one end?

Check out this article on CoreXY. It uses two motors total to move the pen in both X and Y directions while neither motor is mount on an axis.

That's awesome! I had no idea that was even possible. Great design!

Thank you for sharing the updated designs.
I am planning to adapt this to the size of a dollartree foam board. 40"x30". I figured that instead of 8mm smooth rod, I should switch the x axis to .5" smooth rod & bushings. This will allow adding the weight of the 2500mw laser module & fan to the head. What changes to the bottom clamshell do you recommend?

Aug 3, 2017 - Modified Aug 3, 2017
henryarnold - in reply to peddiparth

I don't have any experience with scaling a machine up that big so I'm not sure what it will take. If you haven't already done so, I suggest you build the Drawing Robot in the stock size so that you can learn where its weaknesses may lie. I think you will be fine with the X axis frame but the carriage reach of 30" may be a problem. My friend and I are working on a different version of a drawing robot that may be better suited to scaling as large as you want to go. You can look at it here:

The software and controller are the same between the two machines.

2020 DRAWbot

Hi henryarnold,

I had to repair the top & bottom camshells to work in Slic3r. I am building the current version to spec to test with pen & laser module. My ultimate goal is to scale the current design to foam board size. Local availability of 2020 extrusion in the Tampa Bay area is the only reason why I am going with the current design.

Yes but I don't see any reason that other versions wouldn't work.

I have redone the top clam shell to make sure that it planar with the print surface. The only change to the original design is a small amount of additional clearance for the post from the bottom clam shell. The Top Clam Shell is Version 4

Comments deleted.
Jul 23, 2017 - Modified Jul 24, 2017

What specifically sized screws and nuts(hardware) did you use and of what quantity? I couldn't find the specific sizes needed for this project and how many. Thanks in advance.

The original thing didn't have a complete parts list and I didn't put one together either. You'll just have to print the parts and figure out what you need as you build it. Maybe you could put the parts list together and share it with all.

is there any problem for printing the top clamshell v3. i couldnt sucessfully print it. adherence issues any suggestions

Yes there have been problems but I thought I took care of them. I suggest printing the top clam shell from the original Thing. Sorry for the inconvenience.

slicing with s3d is problematic but cura did it well and sucessfully printed, thanks.....

i added now tje 3 bridges unter the driver, but the steppers only make a noise, no rotation!

Check your config.h file and that you set the parameters to those in the screen shot. Both are required to have a functional controller.

i could not find These Settings, i know too Little about it, sorry!
Can you upload a working config.h file?

The config.h file is in the "Thing Files: section of this design. You can download it from there. The parameters are shown on one of the photos with Source Rabbit. Source Rabbit or Universal G-Code sender lets you set the GRBL parameters. If you are not familiar with these files, you should read about how to use GRBL. Try this link for more help:


Thanks, but i dont know where to set the Parameters from the photo in the config.h file, i think thats the Problem! or maybe my english ;-)

From the Source Rabbit "System" menu pick "GRBL Settings" and the screen shown will pop up. Edit each parameter so it matches the parameter shown on the screen shot. I added a screen shot showing the menu selection.

i made this already, but i could not find these parameters in the config.h file, because you said, both are required for a functional controller!
The Motor is getting something when i click on the X or Y axis, but there is no rotation!

Comments deleted.

I'm not an expert on adding extensions. Apparently you did something wrong when adding it.
One trick I found out is that you add only the files inside the extension to the extension directory. You don't add the whole extension directory. Review the instructions again.

Comments deleted.

Have you already done all of your EEPROM setup? It sounds like it's either trying to home (with an endstop switch) or it's trying to move further than it's supposed to, as if it's not calibrated correctly. Did you add the jumpers to the headers under the stepper drivers to enable microstepping?

I've uploaded the firmware and done the settings as it shown in the screenshot! But i thought the same, its trying to home!? And no, i've done anything unter the stepper drivers? can you send me a picture, because i cant see anything like that!?

Jul 18, 2017 - Modified Jul 19, 2017
rocketmannate - in reply to Friggy

Follow this link to find a photo of what I'm talking about. This isn't my photo (credit to 3dpBurner), but shows the jumper configuration to enable microstepping:

Ignore the yellow "ground" marking as it's unrelated to our discussion.

Thanks for the info, I overlooked

Thanks for sharing this project...
I'm part way through printing the parts.
Although this old guy knows nothing about GRBL, I'm working through the set up and I think I have the firmware set OK
on my Arduino. I have replaced the config.H file with the one on here.
At least the GcodeSender is "talking" to it....
So far so good, will shout if I get stuck :)

One thing, what is deemed to be the home position for the pen at start of print?
Great fun!

Sounds like you are doing fine. There are two things that set the configuration. The config.h file which you have swapped. You also need to set the parameters which the G-Code Sender (Either Source Rabbit or Universal) allow you to set. I provided the screen shot with the parameters. Basically the config.h sets the behavior such as the fact that this is a CoreXY machine and the parameters set things like the number of stepper steps for a millimeter. Also: Be sure to install 3 jumpers on the CNC Shield for each stepper driver.

The G-Code Sender allows you to set the home position. Using the direction arrows, move the pen to where you want home to be and then set home. On Source Rabbit it is "Reset Work Position". For the configuration I have provided, it will be witht he arm extended and in the left position on the carriage.

Thanks for the response :)
Yes, I set the parameters as per your screen shot...
Would have missed the three jumpers so cheers for the heads up on that.
Is that for setting micro stepping?

Nearly done all the printing except for the top XY clamshell which has gone wrong twice by lifting off the bed and
messing up during the first couple of minutes printing...

Will sort it...


Also: The printing of the two clamshells is critical because any curvature will lead to incorrect spacing of the bearings. I posted an updated top clam shell with a fix for clearance for bottom clam shell posts. Make sure you have the latest.

Yes, the 3 jumpers are for 16 pulse stepping. I forgot to add them on another build I'm doing so it reminded me to add the note to this thing.

Still having trouble with printing the top XY clamshell.
It keeps lifting off the base and fouling up..
Sent the file to a mate of mine to get him to print it for me on his 3D printer..

Similar thing is happening to him.
He says that he thinks in the design, not all of the clamshell is sitting properly on the base..
Could that be right?


I"M SO SORRY. YOU WERE RIGHT!!! The top clam shell had a very slight angle to it. It was literally 0.2 degrees. I didn't notice it. I somehow was able to print it with this angle. The original part was standing up and introduced the angle when I rotated it flat. I have posted the new file with the angle corrected. My sincere apologies for this mistake.

No problem...
I printed one this morning from the origonal files and that went OK..
Pleased you spotted it as my mate was sure it was off the bed at one side..
Just wiring the steppers :)
Onwards and upwards


Comments deleted.

I printed it on BuildTak with 30 % infill. It stuck so well I had to pry it off. Design is fine.

Good to know, I'll put fresh eyes on it tomorrow :)
Just had a thought that given you modded it slightly to make a better fit for the bearings that something
might have gone wrong then...
Anyhoo, all the other bits have printed so I'm well on the way now and looking forward to running it..

Thanks for your response, much appreciated..


The mod I made was minor. You could print the original source version just to make sure.

Will do later today..
Just out of interest, did you print this part flat on the bed or vertical?


Definitely flat. With the logo facing down which is how the file is presented and the photo is displayed.

Just to chime in: I had problems printing it on glass/blue tape. There's just so much surface area that the thermal contraction causes lifting in the corners. So I switched to another of my printers that has a GeckoTek HT build plate and it worked beautifully. BuildTak would work well too, as Henryarnold said, but I always have problems removing parts with high bed-adhesion area from BuildTak surfaces so I didn't risk it.

Long-story-short: If you've got access to some kind of specialty build plate surface (I.E. BuildTak, GeckoTek, etc...), try that for better bed adhesion. And, as always, make sure the bed is nice and clean before you start by wiping it down with rubbing alcohol (or acetone if your build surface will handle it).

Also, thanks for mentioning the jumpers; I'd forgotten to put them on. I was wondering why it had calibrated at 5.4 steps/mm :-P

Unfortunately this problem is my fault. I introduced a small angle in the part when I rotated it to the flat position. USE REV 3 of the Top Clam Shell

I'm interested in building this. I was wondering if 20 toothed pulleys would work or if there's an important reason for 16 teeth.

Jul 5, 2017 - Modified Jul 5, 2017
henryarnold - in reply to Haryeti

20 tooth pulleys will work. You will have to adjust the X/Y step mm in the configuration. See the GRBL controller settings. Once you get the drawing robot together, direct the X axis to move 100 mm. Measure it and you will probably find that it moves 125 mm because 20 teeth are 25% more than 16 teeth. Entering 160 instead of 200 for the steps per mm should compensate for the difference in pulleys.

Did anyone else have problems with the clamshell parts? The LM8UUs don't really fit in it, and the two halves of the clamshell don't line up. With a bit of force, I was able to get the bearings in, and get the clamshell together, but then the bearings wouldn't line up, and the rods were binding badly. I know that my printer is properly calibrated, as I use it for mechanical parts on a regular basis.

Any ideas?

Jul 1, 2017 - Modified Jul 4, 2017
henryarnold - in reply to rocketmannate

Yes, I had some minor problems. I took a Dremel tool and opened the area where the posts on the bottom of the clam shell line up with the holes on the top of the clam shell. This keeps the bearings from being pushed out of alignment. I only had to remove a small amount of material.

Jul 4, 2017 - Modified Jul 4, 2017
henryarnold - in reply to henryarnold

I have fixed the problem with the top clam shell file by removing a small amount of material that conflicts with the bottom clam shell posts. The new file has been posted and is Top_XY_clamshell_V2.stl

Thank you rocketmannate for catching this problem.

Amazing build had fun building this thanks for this

I just added the config.h file from GRBL for this machine. That and the configuration parameters should making bringing up your machine easier.

Hello !
Congrats for your work. I'm just printing mine and i have a question : Are you using support material to print the slider ?
I'll post when i have finish

Yes I had to use supports and I printed it vertically. This part is a difficult print because it has protrusions on both sides so you can't easily print it flat. My vertical print had supports for the 3 posts. I had to clean up those posts before the pen holder would fit onto the posts. Another possibility is to print it laying down with the 3 posts facing up and supports on the side with the servo tab. Let me know what you end up doing.

I just wanted to say thanks for the design and the thorough explanations! This is great! I'm currently in the process of building mine. I'll post when I'm done.

You're welcome. I enjoyed building mine. It is a fun project. My plans are to experiment with a laser mount and a mount for a swivel blade for cutting materials.

That's a good idea! I have owned several vinyl cutters over the years. For this setup, I'd recommend the Roland style blade and holder, such as the one found here: http://www.uscutter.com/USCutter-SC-TC-Series-Blade-Holder . They're inexpensive, readily available, and designed to be clamped into a machine such as this.

I plan to experiment with using wire wheels on a small rotary/engraving tool to do a patterned brush on sheet metal. I'm also using this as my introduction to GRBL. I've used Marlin quite a bit, so I expect to learn quickly, but this seemed like a fun project :-)

I checked the link and they have no stock on the blade holders. Do you have any suggestions on a design for a mount for the blade holder? I want to design something where the pen holder and the blade holder are easy to swap out. I perceive that the it would be an advantage to have a fine adjustment of the blade depth in addition to the robot lifting the blade. Any other thoughts?

Here's a link to another similar one. It's made of plastic instead of aluminum, but should still be plenty strong:

Coincidentally, the features you mentioned are exactly the reasons that I suggested the Roland style blade holders. It's possible that the blade holder will be able to be clamped into the pen holder without any modifications to the pen holder, though the blade holder may need some sort of adapter to make it longer and more pen-shaped. Whether it requires a different pen holder or not will depend on the range of motion of the slider (the Z-depth, if you will), as the blade holder is only about 2-3" in length.

Also, the cutting depth in the blade holder can be adjusted precisely using the threaded barrels on the back of the blade holder. One of the most critical adjustments on a normal vinyl plotter is the cutting force. It's possible that you could just add weight to the pen holder to account for this, but I'm not sure. I don't really have a solution for it at the moment, but it's something to consider.

I'll finish my build in the next day or two (once my LM8UUs arrive) and I'll try it out with one of my blade holders and let you know how it goes.

Thanks for the suggestions and information. I think an adjustable downward force could be useful for both the knife holder and for pens. I'm going to try to come up with something.

Very nice this desing is better than others in my opinion, i like it

Would this work acceptable wall mounted?

Yes as long as you have a spring to keep the pen on the paper. I'm currently using the weight of the pen to keep it on the paper. Some of my photos show springs which I removed. You will need some kind of spring or springs.