Drawing Robot - Arduino Uno + CNC Shield + GRBL

by henryarnold, published

Drawing Robot - Arduino Uno + CNC Shield + GRBL by henryarnold May 27, 2017
13 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 which uses GRBL firmware. Approximate cost to build this drawing robot is $100.

Documentation can be found here and by an attached PDF thanks to Jonathan K.

This 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. The drawing robot receives G Code commands that are created inside an Inkscape extension. 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. Also check out the easier to use MI GRBL Extension mentioned below in an update.

When setting up your hardware you must do the following:

  1. Be sure to install 3 jumpers on the CNC Shield for each stepper driver. I have added a photo showing the jumpers.
  2. Replace the "config.h" file with the one I provide which has the correct features enabled before you compile and download from the Arduino IDE.
  3. Set the GRBL parameters to the settings that I provide in one of the photos. This step is missing from the otherwise excellent instructions. You must do this or the robot will not work.

I have posted all parts needed 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

Place this version of GRBL Firmware for the Arduino on your computer. You must use this version of GRBL. Other GRBL versions do not have the control code for the Z axis servo.

Replace the default config.h file in GRBL with the one I supply in the "Thing Files" section

Upload GRBL to your Arduino Uno using these instructions
https://github.com/grbl/grbl/wiki/Compiling-Grbl (Ignore references to GRBL V1.1)
You must copy the config.h which I supply here to the directory where GRBL resides and then do the upload. The new config.h will be used for the compile of the GRBL code.

Inkscape Drawing Software

Source Rabbit G Code Sender

Tutorial on how to generate G Code in Inkscape
There is also an MI Extension which I think is easier to use and generates better G Code:
Use whichever extension you like best.

2x Nema 17
2x Linear rod M8 x 450mm, X Axis
2x Linear rod M8 x 350mm, Y axis
2x Linear rod M3 x 75mm, 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 are two videos

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 not 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 the MI Extension is easier to use and generates better G Code:

Update 6-26-2017: I added the config.h file needed for GRBL for this machine. With this file and the GRBL parameter settings in the screen shot, you should be able to easily get your machine up and running. Don't forget to install the stepper driver jumpers.

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.

Update 11-18-2017
Jonathan K. provided assembly documentation. Thanks you so much. I appreciate your efforts. Checkout the great PDF with excellent photos.

Update 3-11-2018
I'm getting many questions from people that claim their drawing robot doesn't work. Please review all the steps in the description. If your robot doesn't work, you probably have the wrong version of GRBL, did not copy the config.h file, forgot the CNC jumpers, or failed to setup the GRBL parameters. If your Z axis motor isn't working, make sure you have the correct GRBL and that you wired your servo to the correct pins.

More from Art Tools

view more

File Name



All Apps

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

Treatstock is an online platform that offers decentralized manufacturing services such as 3D printing and CNC machining for business-to-business and business-to-consumer sales all over the world. W...

App Info Launch App

3D print your favourite design with NinjaPrototype, a professional 3D manufacture with consistent quality and speed.

App Info Launch App

Bro. Can i generate gcode by any method it does effect on servo motor?

And bro can i use any Nema 17 motor and can i use 12v 5a power source?

Yes, as long as you have at least 2A available. More current is fine.

Bro and you using this formula right Vref= Imax ×(8×Rs)×0.70

No I'm not using that formula but you should use the formula that the manufacturer of your stepper drivers specifies. Please refer to their documentation. I'm not an expert on setting the current for your driver. The formula can vary between manufacturers of the drivers.

Is there any reason I couldn't just leave the rods at 500 mm x 500 mm or 500 mm X 350 mm?

I don't know. It seems like it should work. The reach might be a bit long but I never tried it. Why don't you build it and see what happens. You can always cut the rods shorter. Be sure to allow for extra belt length.

1) Bro the connecting of spring in front section is compulsory?
2) Or where you gets this all sizes of Screws?

The spring can come from a ball point pen or you can use a rubber band like some users have done. All screws can be purchased from Amazon.com or EBay. Which screw are you having trouble finding?

Bro but in your video machine work without spring.. is it not compulsory to use?

It should have a spring which is needed to hold the pen against the paper. It will work with just the weight of the pen but the spring does a better job of holding the pen down.

Can you send the pic how to connect spring in drawing Machine?

I added a photo showing the suggested spring. Photo 8.

And bro are you adjust the voltage of your A4988 stepper motor driver?. And if you adjusted what is the vref value you adjust?

Bro and you ajdust the voltage of A4988 driver?

I adjust them to be 0.5V which should be 1.0Amps. This value is true for most A4988 drivers but you should check the supplier of your module. Some of them are different. Try 0.5V and see how it works.

Bro can you please This is my request can you briefly tell me how did you do that.? The voltage and current increasing decreasing process in A4988 driver? And can i use any Nema 17 motor?. And also can i use 12v 5amp power supply?

You can find it by Googling it. There are several videos showing how to do it.
Here's one example:

I will understand bro but what value of V you set in your driver... Can i set V according to its formula.. according to formula my V is 1.008v.. Can i set this value?

And bro can i use any Nema 17 motor and can i use 12v 5a power source?

Comments deleted.

And also bro this machine in front section i mean the machine can do calligraphy or not?

Yes it can do calligraphy using a calligraphy pen. It will also work with paint pens. Calligraphy pens should be set at an angle.

Really nice.
I saw that the first one has limit switches. This version allows as well ?

I added the limit switches 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 either. 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 not exceed the envelope of the robot, you won't need the limit switches.

Bro in your file missing .stl file of idler pulley.. which is use in your Drawing machine

The original design doesn't use the idler pulley, just the bearings. Some of the users that have built the drawing robot have added idler pulleys. This is the idler some people are using:

Idler Pulley for 624 Bearing and GT2 belt



Totally blown away with this design, and perfect for writing birthday card to add a personal touch as my own handwriting is atrociously & irritatingly terrible lol

Also, i make my own PCB's, home brew - im wanting to make this so i can draw with a sharpie (RED seems to work the best for PCB etching) directly onto copper clad boards

i'd probably need to scale this down though, im not sure, what do you think Henry ? or anyone else ?

Copper clad board is about 1.6mm THICK unless you buy the 0.8mm version, so i think to make even double sided home-brew PCB's are now going to be a precise REALITY !!!

About scaling this down, using the same NEMA 17 motors, maybe using the 0.6 amp ones, what i'd like to know, would it be okay to use 350mm for the X Axis Linear rods and 250mm for the Y Axis Linear rods ??

Mainly to save more on the parts list costs as im on such a stupidly ridiculously low income, its still going to take me a few months to buy all the gear needed, week by week..

Would i need to change anything in firmware due to the shorter X & Y Axis ?

for eg - cost of two 450mm smooth rods is £12 approx, on Aliexpress, but two 350mm rods are £7 approx..

So just the smooth rods alone;

2 x 450mm = £12
2 x 350 = £7
total = £19

also TWO 0.6 Amp stepper motors, £14
Two 1.7 Amp stepper motors, £9

Trying to shave down the price of making one of these as much as possible and for just my needs, which will be generally double sided PCB creation and thats usually A5 paper size max ( 148 x 210 mm / 5.8 x 8.3 in ) , as those are the max size Copper clad boards i have, plus birthday cards are about the same size, roughly.. or under... ISH.. approx.. est..... etc lloll

So for my needs, wouldnt really need it to be very large, have thought about going for smaller NEMA motors but it seems NEMA 17 motors are practically the same price so will try using the lower Current motors

Thanks so much in advance, really cant believe my eyes seeing this device !! been looking for a more repeatably-precise way of making double sided PCB's and i think ive found the answer !!

Plus birthday cards, invitations etc haha !

just buy blank on the inside cards from now on !!

Now started the saving & buying parts for this awesome bit of technology !
Thank you LOADS for sharing and keeping it open source :)

if you ever need a hand making your own PCB, let me know, will be happy to return the favour :)

Thank you for all he comments. You have some great ideas. I think you can increase the envelope withing reason. If the Y axis reach becomes too long , you might get into some problems. I think your plans will be OK.

I assembled x and y motors and did a test run. I am curious about what is (0,0) position. To be safe I positioned both axis in midway. When I start BenFrankline file, my pen moves towards left and forward. Not like videos, where pen is moving in right and backward. My stepper motor connector has blue and red wires are in opposite way when I compare them with pictures in pdf file. Black and green are in same position as shown in pdf.

You can change the X and Y 0,0 location by changing the GRBL Parameters. You may have not set them the same as I have them or your stepper motors are wired differently than mine are. The latter is probably the cause. If you want to change the orientation, change the parameter $3 Dir. invert mask. Read the GRBL documentation for more information.

Thannk for reply, I revert connections and it good now. Another thing I notice is my x and y moving more then 1mm when I click on +x or -x or +y or -y. Do I need to so some calibration? I am using Nema 17 stepper motors.

Did you set up the GRBL parameters?

Hmm servo not moving? And yes I did flash with the grbl-servo lib.

Check that you set the GRBL parameters and that you are using the right setup for the Inkscape Extension. Also check your connections to +5V, Gnd, and +Z.

And check your servo :)
Thanks for letting us know. It may help someone else with the same problem.

Is it possible to implement Adafruit motor shield v 2.3 instead of CNC shield?

The Adafruit motor shield looks like it has the needed resources. They are more than likely not connected to the microprocessor IO pins the same as the CNC Shield. You would need to be able to change the code to allocate the correct pins for each stepper and the pen servo. I can't help you with that.

Any idea why my Arduino would start emitting smoke? It's wired up correctly and I'm using a 12v 7.0a DC power supply.

Maybe it is the power supply? Just a thought, because I am using a 12v 2.0a power supply.

Did you check the polarity of the wall transformer you used. Center post must be positive. You should also check the voltage and that the output is DC not AC. The label should have a small diagram showing what your polarity and voltage is. Unfortunately I think you will need a new Arduino :(

Hey thanks for the awesome print. Having a bit of trouble when sending the gcode though. I'm using these stepper motor drivers and I think they might be the issue
Once I hit send on SourceRabbit it just pulls both X and Y to the corner and jams once it can't move anymore

I have used the DRV8825 drivers. They work fine. Make sure you did the following which is in the instructions:

  1. install the CNC Shield jumpers
  2. copy the config.h file I supply to your GRBL directory before compiling and downloading the Arduino
  3. Use your G-Code sender to set the GRBL Parameters as shown in the photos.

My guess is that you missed either #2 or #3.

Once you make sure all those things are done, try sending one of the files I supplied. That eliminates the possibility that you have a problem with the SVG to G-Code conversion process.

Thanks got it working. Missed the settings step as it wasn't in the PDF.

where can i find the STL files for the idler pulleys?

Was this what you were looking for? https://www.thingiverse.com/thing:2424284

Idler Pulley for 624 Bearing and GT2 belt

The idler pulleys are the 5 624zz Bearings.

yes i know that, but im talking about the 3d printed pulley that goes on the bearings.

On my design the bearing are bare. There is no pulley over the bearings. You may have been looking at someone else's version where they added a pulley.

They are used in assembly instruction which you adopted, see page 11 and 13. These linked by Jonathan_K1906 are too big (too tall) for me. And I have to say that I had a lot of problems with belt clinching between rods, so they are a good addition.

I realized how I should use pulleys linked by Jonathan_K1906. I thought that spacers should go below bearings, but they need to be placed between clamshells. Then there will be enough place for pulleys.

Ok I did the install and I have no motion through gcode sender. Grbl responds ok. Servo moves a little on power up but no controlled movement.

Did you use the supplied config.h file and di you set the GRBL parameters?

Hi! I'm not finding any Nema17 0.4 amp motors in my country. Is it OK if I use any other nema 17 motor and just adjust the current on the driver? Thank you! BTW, thank you for sharing this proyect!! :-D

They are Nema 17 2A motors with the drivers set to 0.4 to 0.5 amps.

Thank you! I just finished putting everything together and it's working! :-D
I'm however having problems trying to make the endstops work. I can't find any mention of them in the config.h file.
Any advice on how to get them to work?

I also added the end stops and found that they don't work very well. Homing doesn't work and hitting an end stop causes an error which stops the machine.

I will investigate. If I find a way I’ll post it here :-)

The GRBL software needs to be improved. There are other users that have reported the dysfunction of the end stops.

where is a source for more draw-able files like you posted here? btw thanks for the work you did!

You should be able to take any JPG file and convert it to SVG. Inkscape is able to convert the SVG file to G-Code as explained in this Thing.

I don't understand what to do with the config.h file? If I am to copy and replace a config file, which stay and which goes? You say you supply here, but that is a link to grbl compile instuction not a download link. I don't know what config file goes in which version. Grbl master and Grbl servo are the only 2 downloads I've found. Which config into which download and what gets uploaded to board via arduino ide

You must download the version of GRBL pointed to in the description.

Once you place GRBL on your computer, you must copy the "config.h" file found in the "Thing Files" section of this Thing to the directory where you placed GRBL. Follow these instructions to program the GRBL into the Arduino:


Im thinking of enlarging this model to draw a 5mx2m section detail. Could it work ? Is there a way to change the parameters in software ? Or are these dimentions set and cannot be changed ?

The software is completely flexible. You can scale the drawing size to as big as you want. I think mechanically you will have problems with an arm that reaches out 2M. You would also need large bearing rods to span that much distance. I think it would be tough to make it work. A frame type plotter like this one is a better solution for large areas.


If you went with 3030 aluminum it would work even better for a larger area.

2020 DRAWbot

bearings have 4mm inner hole , base plate have 3mm inner hole ...

We can use GT2 20 Theet? I cant find 16 Theet pulley in muy country

Comments deleted.

Hi,henry.can i ask you a question?
my belt is always move with one step moto.
when i want to change the x-axis, there is only left moto move.
i have changed all the file.
i dont know whats wrong

Your question is not clear. It sounds like your X and Y axis are not moving like you expect them to. Did you use the config.h file that I supplied when you programmed your Arduino with GRBL? Also, you must use the special version of GRBL that I provide a link to. This project doesn't work with standard GRBL.

Sorry,i just found i upload the wrong file. But the left moto move much slower than the other,
i surely use the right software ,change the config.h file and the grbl setting.

Did you install the jumpers on the CNC board? Do you have the same stepper drivers? You should also make sure your stepper drive currents have been set. Do a search on "Setting stepper drive current for XXXX" where XXXX is your stepper drive type such as 4988 or 8825.

What is the purpose of the threaded rod of 470mm ??

It is used as the backbone for the drawing robot. It holds the two end pieces apart.

Hi. I have a school project and i need prepare a file.But i need solidworks drawing for technical drawing. Can you send me? ( not necessary solidworks just i need technical drawing ) and thanks

You mean a Solidworks drawing of this printer? I don't have any CAD drawings for this printer. I didn't design it. I only enhanced and documented the existing design. Check with the source objects I listed for drawings.

Hello!! I am new here, you could pass me the configuration of the parameters of the grbl.

The parameters are in the 17th and 18th photos.

Hi Mr Arnold, thanks a lot for helping everybody!
Anything special with the z-axis on the software I need to change ? Mine is connected as shown but is not working.
I don’t understand what the “Mxx” commands are. Using Univ Gcode Sender.
Do I have to change the pin 11 (spindle PWM control) in my settings?

You must use the special version of GRBL which I provided the link to. That version handles commands that lift and drop the pen using the servo motor. Connect the servo motor as shown and it should move with the commands.

The commands are:
M05 for pen up
M03S030 for pen down

hi!! first of all, txs for sharing the project. now im printing the files.. but i have some prolems wiht the bottom XY... Repetier says it´s not manifold. is a problem of my repetier? tks again.

There may be something wrong with it but Simplify 3D and Cura can slice it and print it. Try doing a repair and let me know how it goes.

yeah, did a repair and seems it´s working. txs! hope to comment soon with some drawings!

Check out the documentation provided by Jonathan K. It is very helpful for assembling the drawing robot.

I have this working but there appears to be a big delay before it moves from one set of instructions when drawing to the next does anyone else experience this works great though

See the comment below on how to change the speed and delay with the MI Extension.

Same here. It is really slow at drawing but it does a great job.

The MI Extension for Inkscape has a speed and delay setting. Try increasing the speed although 3000 for X and Y work well for me. Make sure the delay is around 0.1 second. See the attached screen capture. The servo angle determines ho much the pen is lifted.

WOW! This is a fantastic manual. I really like it. Would you mind if I posted it as part of the Thing files? Otherwise it may be missed as part of the comments. You may also post it as part of a remake of this drawing robot. If you do, I'll send you a tip for your hard work. Thanks!

hi henry, i want to do it for me.but can you show me the length of nuts? there aren't any description about that.

I added a parts list to the photos. It should give you a good start on what you will need.

How do you do your gcode files ? are there any web ?

The Thing description explains two ways to create G Code files from inside of Inkscape. I now prefer the MI extension.

What version on Inkscape you are using? Is it on Windows or on Linux? I can't get MI extension to work in 0.9.2:
Traceback (most recent call last):
File "servo.py", line 3172, in
File "inkex.py", line 283, in affect
File "servo.py", line 3156, in effect
self.orientation( self.layers[min(0,len(self.layers)-1)] )
File "servo.py", line 3085, in orientation
doc_height = inkex.unittouu(self.document.getroot().get('height'))
AttributeError: 'module' object has no attribute 'unittouu'

I'm using Inkscape 0.92. It looks like you may have a problem with Python. Try installing Python 3.5 You may also try executing one of the GCode files to see if your draw robot works.

Hi I want to do this project for me, I would like you to give me images of the finished connections schematic (everything connected with each connection if you have an image) and I have a question: does this use Arduino ONE? because I do not see it in the images that you put.
Sorry for my English is the translator and it is not very accurate.

This design uses the Arduino Uno. I believe other Arduinos will work but the Uno has been tested to work.

Hello, I want to do this project but I have a question.
I am using universal gcode sender, what parameters do I need to change? the parameters would be $$ (As an example $ 100 = 250)
Thank you so much.
Sorry for my bad English, I'm using the translator!

There is a photo showing the value of each of the parameters. Enter them using the Universal GCode Sender by selecting "Settings", "Firmware Settings", "GRBL".

Hi. firstly Thanks for sharing. How can I find to arduino cod ? please send me...
[email protected]

Thanks for sharing this proect. I almost done all assebly and printing. Can you show how to connect the servo to CNC shield?

The wiring is shown in the 22nd photo. Plug the servos in one way and if the movement is reverse of what you want, reverse the direction of the connectors. Reversing the direction a servo is plugged in reverses the direction of the servo.

Hello, I like this revised version very much, but do you have a step by step instruction of assembling?


I would love one to , everything is printed but I can’t put it together. But it seams that nothing fits right.

No I have not created step by step instructions. The original Drawing Robot also did not have step by step instructions.

Well that is not an excuse not to make one

Here is the link to the instruction manual: https://docs.google.com/presentation/d/1GihJuR7yHVtUPYCp9GVDHLsJUhT2RwPrkIopzYrXYhw/edit?usp=sharing

Thanks to user Jonathan K. for writing the manual.

Comments deleted.

There is one thing that you cant se where to put from you photos.

I got it build but it seams that the top shell and the bottom shell don’t fit that well.

The ball bearings a way to small if you use a GT2 6mm , it slide right off .
I changed them to toothless pullyes.

Do you know if the wire connecting the input power to the arduino vin pin is necessary? I can see other people dont have that wire soldered on here: https://www.thingiverse.com/thing:1517211/#made

Project: DrawingBot
by MakerC

No it is not required. If you don't add it, you will have to supply power to both the CNC board and the Arduino. Many people do that. If you add it, you only have to supply power to the Arduino which then powers the CNC Shield.

Hallo there. Its a very nice designe, but the top shall and bottom shall do not work when I import the STL file into Slic3r.

Check the other comments. Someone else had the same problem with Slic3r. You might try a repair. The design does work on most slicers.

Hi, firstly thanks for sharing edited version of yours

I've done my draw machine just two days ago. However mine works really slowly comparing with yours. Could you share your g-code that you used in the video. I think that the output of g-code I prepared makes my draw machine slower, even though I changed the speed of x and y motors with using $110=1000, $111=1000 commands.


I already posted 3 example files. Here's and example line of G Code:
G02 X92.350578 Y77.988298 Z-1.000000 I-1.815724 J0.869674 F3000.000000

The F3000.00 sets the speed at a fairly good clip. You probably are using F1000.00 which would be much slower. I think that is mm per second.

Hi again,
After following the settings you shared, it has reached the speed that I wish, thank you again!
Although it works great I have another situation which you can see in the picture. it gives some spaces when it's drawing picture,
what do u think what might cause this problem?


It looks like one of your belts is slipping across a drive pulley. Make sure the belts are very tight. Try drawing something simple like a circle. I suspect it will work fine because that doesn't put much stress on the belt and pulleys. That geometric pattern has a lot of directions changes and tight turns.

After streghtening the belts it got better, but I still have another issue: it draws the picture's reverse and with 45 degrees.
Even though i tried writing with a basic letter "a", you can see the results in the pictures.


I am using Minebea Nema 17 stepper motors which are kind of old ones comparing with others on internet however I am not sure that's the problem. Thank you for your help!

It sounds like your stepper directions are reversed. You should be able to fix it in the GRBL parameter settings. There's a screen shot showing how to change the parameters.

I have changed the grbl parameter settings according to the settings here ( https://github.com/grbl/grbl/wiki/Configuring-Grbl-v0.9 ) and i found solution to reverse problem but still have issue with 45 degrees I mean it still draws picture in cross position :/

Please post a make of this Thing with a photo showing your problem. It sounds like you are getting a slanted drawing. Did you turn on the CoreXY option in the config file?

Sorry for not clarifying the problem, the problem is that I get a slanted drawing as you said and here it is the photo:

I guess you mean I needed to do this part to turn on CoreXY option which I did exactly the same as mentioned here:
Arduino code: (compiled and uploaded using the Arduino IDE; make sure to update config.h in your /Arduino/libraries/grbl folder to enable CoreXY !!!)

I don't know why your Drawing Robot is acting strange. All I can tell you is to be sure to replace the "config.h" file with the one I provide which has the correct features enabled. You must also set the GRBL parameters to the settings that I provide and last you must be sure to install the stepping jumpers as shown in one of the photos. None of these things explain why you would get 45 degree printing. Its baffling. Please let us know what you did if you can fix it. If you can't fix it, ask the original designer if he has any ideas. I just built the design with a few mechanical changes and it worked fine.

Hi Henry,
It worked finally! I was not aware of that I needed to change "config.h", I must have missed it :(
Sorry for frustrating progress to figure out what caused this, but at least we know why that happened.

Thank you so much again for your time and share!

Glad you got it working. Be sure to post it as you made one.

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.

Hey there! Thanks for replying! You've really done a fantastic job of helping all of us out. The stepper drivers. Those are the simple chips placed in each of the slots for the X, Y, and Z areas? I actually put all four of the drivers(those chip things) on the board. I didn't think it made a difference. Should I remove the fourth stepper driver? Also, I haven't actually run the Z-axis-wires onto the board yet. I thought that the board would be able to run just the X and Y motions and then I can finalize the Z axis later. I'm not focusing on the Z axis just yet because my Z axis set up(the literal pen holder) is different than yours. Thoughts?

You're welcome. You need two stepper drivers to run this machine. Any extra drivers will not have an effect. Make sure you note the correct orientation when installing them. They can be damaged by a wrong insertion. You should also set the drive currents using the procedure you can find on the web. Your plan to test out the X and Y axis without the Z action is exactly what I did while I was getting my Z axis parts together.

Alright dude... Give me something here. Stepper drivers are installed, the x/y axis works, but only on MM movements. Loading Gcode and hitting run has the motors whine but not move. Is there anything else you think is super valuable in terms of tinkering with? My controller settings match yours perfectly... Help me Help me... I just want a robot to draw a picture of me.

Yes. Did you install the stepper driver jumpers and did you adjust the driver currents on each stepper driver?

ummmm.... adjust the driver currents what now?

So you installed the jumpers and you adjusted the drive currents and your motors still do not work? The next thing is to check that your GRBL parameters are set correctly. There is a screen shot showing how to access the parameters and what the correct settings are.

Also tell me the color order of the wires on your stepper motor connector. There are blue, black. red, and green wires. You may have wires that are in a bad order. This usually doesn't happen but I did receive one motor that was wired incorrectly.

Hahaha... No, I meant, how do I adjust the driver currents? Is this a physical adjustment or a coding adjustment? I didn't see anything like that in the build instructions.

You must do an internet search on your driver type such as "4988 driver current adjust" or "8825 driver current adjust". Each type of driver can be different. You need to se the X and Y axis drivers to deliver 500 MA or 1/2 Amp.

Example Video explaining the setting of the current.

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...

Have you got any luck solving this issue? I can't get with that as well.

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.

I'm using Inkscape 0.92 with Python 3.5.

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/

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?

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.

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!?

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.

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?

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.

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.