MakerBot Print is our newest print-prepration software, which supports native CAD files and STL assemblies,
allows you to interact with all your printers via the Cloud, and many other exciting new features.

Download Now


Drawing Robot - Arduino Uno + CNC Shield + GRBL

by henryarnold May 27, 2017
Download All Files

Thing Apps Enabled

Please Login to Comment

are I can use motors with steps: 96 per revolution (3.75 deg / step)?

Hi so I fixed all my parameters and it draws the sample codes very well, but as I try to make my own images through inkscape, it prints funny and it also has problems with the servo. is there any way to fix it?

The problem you had with incorrect GRBL parameters can also occur with the MI Extension parameters which control the creation of G-Codes. Check that the MI Extension pop up has the correct parameters based on the screen shot found with the description. Incorrect codes will affect the Z servo and the X and Y motions. From your screen shot I can see that your pen is not lifting enough. Try increasing the angle to servo from 35 to either 45 or 60. This is the angle the servo arm moves.

Hi, I am having a problem with the X and Y axis when drawing. I followed the steps to generate the gcode for the plane image in inkscape and it shows up properly in sourcerabbit. The gcode log shows no errors so the gcode should be correct, I also checked my parameters and they match yours. My robot draws a diagonal line but then stops and just draws a straight line all the way to one side and continues to try and go further. All drivers are installed and physically connected the way it is shown and my motors are connected in the correct spot and facing the correct way. Also, in sourcerabbit there are buttons to add or subtract X,Y, and Z. When I add X it moves diagonal and when i subtract it, it moves left. When i add or subtract Y axis, nothing happens. Help would be much appreciated, thanks.

Did you zero the X and Y axis using the G-Code Sender?

To zero the position, you must manually move the pen using the jog control to the corner that would 0,0 and then "zero" that position using the Universal G-Code Sender software.

You should also try zeroing the position and printing one of the example files. If that works, there's something wrong with your G-Code generation.

Hi! First, thank you so much for share this!! The robot works fine, except that it draw more little than the archive. example: i draw a square on inkscape of 80mm, but the robot draw it of 45mm. I move one axis 50mm in panel control and the robot move 50mm... how can i solve this? i think its some wrong with inkscape, but i do not found what.. Apologies for my english. thanks a lot! Best regards!

I've noticed the same thing. It has to do with the scaling from Inkscape. To be sure do a 100 mm X or Y move and measure the the distance your robot moves the pen. If it is correct, the problem is not with the robot. If it is not correct, check the GRBL parameters from Universal G-Code Sender. The number of pulse per mm controls the scaling.

thanks for answering. I did that, I moved the 50mm x axis and the robot moved 50mm. But the gcode that I generate with the inkscape is not of the correct measurement. What do I have to modify in the inkscape? I hope to have explained .. Thank you!

I have noticed the same thing. It is a problem with Inkscape or the G-Code translation process. I don't know how to fix it. Let me know if you figure it out.

I did it this way: In FILE-DOCUMENT PROPERTIES, I change the VISUALIZATION UNIT to pixels (px), then lower, in ADJUST PAGE TO CONTENT - SCALE X I put the number 1, then I change again the VISUALIZATION UNIT to mm and I close the box. When making the gcode again, the drawing came quite close to the corresponding size; I made rule of 3 to clear the value of SCALE X, where with 3.95mm I draw the actual measurements. The issue with this is that every time the inkscape is closed, when opening it, you have to place that value again before generating the gcode. But in this way you can make the drawings in real scale ... Thank you very much !!!

Thanks for the solution! I'll add your text to the description so everyone can easily see it.

note to all new people attempting this project;
I could not get the power to work when connected to the Vin pin on the CNC board, but did once connected directly from power supply to the board itself.

To power both the CNC and the UNO through one connection you must add the jumper as shown in one of the photos.

Hello, how are you?
I copied his project and so far I just had a problem, when he starts to draw the servo motor turns to the corner and does not move anymore, it gets stuck.
what should I do to fix this.
Thank you!

I did it the way you showed it, IT HAPPENS that the SERVO ENGINE DOES NOT move.



Your message is not clear. Is one of the steppers not moving or is the servo that lifts the pen not moving?

Comments deleted.

Did you zero the X and Y axis using the G-Code Sender? Did you set the GRBL Controller settings. This is described in the documentation and in one of the photos.

To zero the position, you must manually move the pen using the jog control to the corner that would 0,0 and then "zero" that position using the Universal G-Code Sender software.

When I attempt to draw one of your examples, it tries to draw farther than the arm extends... I am not sure if it is something to do with the wiring and hardware or the coding. Please Help!!!

Two things come to mind. Did you zero the X and Y axis using the G-Code Sender? The other thought is did you set the GRBL Controller settings. this is described in the documentation and in one of the photos.

The zero position depends on two things. The positive direction of each motor tells you which corner your drawing robot will have a zero position. You must manually move the pen using the jog control to the corner that would 0,0 and then "zero" that position.

I have zeroed the position, but when I sent in the geometric and the Minnie mouse sample code, it still traveled beyond the parameters. I am not sure if I am adding the corrected parameters. Which ID value would I change to correct these parameters?

Thanks alot for the great project !

I have now the problem of the diagonal movement of xy axis .. I use the correct version of gbrl .. replace the correct config.h file and it works fine and no diagonal movement occurs .. the next day I found that the diagonal movement came back " I didn't upload a different code " .. I tried to fix this unknown error but no response and the diagonal movement can't be changed !!

Beware before doing this project, that the documentation isn't very good, and the hardware list is more than impossible to get right on your first try. I went back to the store about 6 times because the knucklehead that wrote the list did such a crappy job. If you're in the U.S like me get ready to just figure out your own hardware.

I built mine and the servo was reversed. All they said in the instructions was use a special S340 command. WTF does that mean. The documentation is so bad.

Also whoever designed the clamshell bearing holder design where the top and bottom meet to made it very weak and prone to cracking. Not a good design. I had to reprint the bearing holders 3 times because the legs broke when I went to assemble them.

Also nowhere in the documentation do they mention that you need to print special spacers and bearings. Because with this design, you cant assemble it without those pieces.

I had to custom design the bearings because the bearings that people are linking in these comments will make the belt slip off during a print.

If you have a lot of time and a tolerance to frustration, this is the perfect project for you. I build mine and it works well but It took me months to do and a lot of filament.

Comments deleted.

Hello! Thanks for the project! Where is zero position? Because i broke arduino when stepped motor blocked :)
So how to use it without limit switches?

The zero position depends on two things. The positive direction of each motor tells you which corner your drawing robot will have a zero position. You must manually move the pen using the jog control to the corner that would 0,0 and then "zero" that position. If you don't like which corner ends up being zero, you can change the direction of the motors by selecting 0,1,2, or 3 for the GRBL parameter $3. The two binary bits select the direction of the Y and X motors respectively. Try playing around with it. For your case, the important thing is to zero the position otherwise you are likely to slam into the end of travel. The limit switches are more of a safety feature. When one is tripped, plotting stops and the robot must be reset. They don't help in finding the zero position.

Maybe you can help me with another problem?
I`m writing a text in Inkscape, after that Shift+CTRL+C, so i have two contours for one letter. And after drawing i get this.
How to convert text to 1 contour?

I'm not very good with Inkscape. My guess is that you have outlines of the letters being drawn. If correct, you need to find an option to draw the letters with zero width lines. Sorry I can't be more helpful.


is it possible to run it with Arduino NANO on the CNC shield v4 ? I have one spare.thank you.

This article says yes but it requires steps to make it fit in the Nano flash memory. Evidently the Arduino Nano has a larger boot loader leaving less flash memory for programs. You can do a Google Search using "GRBL on Nano" to find more information.

Sorry to repeat again but I can not find the solution for many hours. I always move diagonally despite the change of config.h several times and color changes of pins. I do not know what to do . Thank you for helping me please

You must not being modifying the config.h that is compiled and downloaded. It should look like the attached screenshot.

I supply the file needed but it needs to be copied to the directory that you are compiling Marlin from.

ERROR: see new comment below. Sorry about that.

thanks again for your answers and helping . But my config.h is good , i attached yours and compiled in the marlin. i try to change the color on my nema , nothing is good .

THANK YOU FOR YOUR ANSWER . THE config.h I do not have 418 lines. I have however replaced the attached one.

Sorry, that was the wrong file! Attached is the correct screenshot which comes from the config.h file that I supply in the files section.

I checked again on arduino library and it's good one. I checked everything ...don't understand my problem

Your Arduino IDE must be pointing to a different GRBL Library that the one where you have modified the config.h
Select "File" and then "Preferences" and Show verbose output during compilation. Compile your code and check the last line in the output window at the bottom of the IDE screen. It will tell you the location of the GRBL library which is being used. I have attached two screenshots to help you.

Another thing to check: Make sure both stepper motors are moving. If only one stepper is being driven, you will get diagonal motions.

HI SIR, i'm not able to set this machine:
if I move the y-axis, only one motor moves. With x the same thing. He doesn't hear the end thing. Help me? do you have a video guide? Can you help me on teamviewer? Kind regards

so i change right nema motor because i see the movement is not fluid but still the same . the other one turn perfect . about marlin i did manytimes and nochange . i have attached screenshots.
Thanks you again

You may have a faulty stepper driver.


What is the preferred microstepping, 1/16 or 1/32?
Installing all three jumpers can lead to both, depending on the actual drivers used.

What is the purpose/intended location for the bracket for strips?

Use 1/16 micro-stepping. The bracket supports the cable that goes out to the servo motor. It's part of the original design. It could be better.


Great project again! I am just curious that has anyone tried using conductive ink pen with this project before?
Thanks for sharing

I didn't think of that!

Another possibility is to draw a circuit board layout on a copper board using a resist pen and then etch it. I've made circuit boards before so either technique would be useful. Thanks for the idea.

You are welcome!
Yes you're right, using resist pen would have good results which I haven't tried yet.
However, if this technique would work then etching step could be off the table, so it will provide much more time for diy users.
But I have doubts that it will be successfull as much as circuit board layout technique, as I saw from internet, conductive pens have thick pen point and their resistance could be high in long distances which probably causes current decrasing.

Hello Thanks a lot for the design! love it.
I got it working but for some reason when using source rabbit (the one in the instructions from Jonathan K) the pen goes way out of its area when starting the drawing, but i'm not having that problem when using Universal Gcode Sender. I wanted to ask you about how to properly set up the file on Inkscape , because when following your images and Jonathan's the machine apparently sends data to the Z axis as if it was cnc milling, so for each starting point of the path it takes like 8 seconds as if it was going down and since im sending that to the motors and they do nothing but a high pitch noise i feel that, that isnt a good thing. I hope i was clear, let me know if you need images or guide me as to what parameter should i change to not have that. Thanks a lot!!

I also had problems with Source Rabbit so I stopped using it. If you need to keep using it, try resetting and zero axis before every new drawing. That helps.

Hey Henry thanks fore replying, i think i will stick with UGS.

i have an issue with the xy clamshel, where the grooves for the linear bearings are not wide enough for them, do i have to print these at a different size? eg 105%?

It's always start drawing in 45 degree ,How can I fix this issue?

I had an issue where it would only move in diagonals. It could either be that your stepper motor wire pinout is not the same color code(swapping red and blue might do the trick) or that one of your motors is not working. Also henryarnolds suggestion of the config.h is probably the most common reason for this, so the corexy is defined.

You forgot to copy the config.h file to your GRBL directory. Read the tips in the description.

No they are too big.

I just finished this project, great tutorial, thanks a lot! GRBL, CNC Shield, stepper drives were all new to me and with this project I could learn a lot from them!

At first my motors didn't run as well, in my case it was an issue of power cable connection. I bought finished cables with a length of 1 meter with 6p JST connector on one side, and 4p dupont on the other side which fits perfectly the CNC Shield. Unfortunately the cables were made for a different system, so it took me a while to find out and had to reorder the pins. After that it worked like a charm.

I used DRV8825 stepper drivers and also put 3 jumpers, this seems correct.

An issue I have with GRBL is that it only accepts lower case m3sxxx commands. Uppercase result in error 23 G-code command in block requires an integer value. I think there is something wrong with my spindle/servo configuration, as it lets the lowercase pass where it rejects the highercase M3. M5 is no problem, M3S0 is also not a problem.

Here is a video of my setup: https://www.youtube.com/watch?v=HqNNfz5rJiE

Thanks for the feedback and the tip on fixing the Python problem below:

yes HaCo81, that goes double for me as well, because I had the same problem, and even tho I had no idea how to put the solution into practice, I eventually worked it out and now have a fully functioning machine and a huge thank you to henryarnold also for the great work he did

I am about to start assembly of my unit, but have come across a small problem. According to Jonathan K the pots on the stepper drivers should face away from the blue power connector, yet according to Protoneers website they show the pots facing the direction of the power connector. Well bugger me if I didn't just find the solution to my own problem,it depends on what version of the shield is used
If you have version 3.0 or above you DO NOT follow Jonathans pinout but if you have any version below 3.0 then you DO follow Jonathans pinout, maybe you should amend your instructions, here is a link to protoneers own webpage showing correct pinouts

Thank you for this wonderful work.
I am almost OK. I can send to the robot (and draw nicely) your examples (Mouse, BenjaminFranklinsignature, castle, geometric) but I cannot myself transform into GCODE from INSKAPE (0.92 or later ) with the MI extension. The process shows an error (see below) How can fix it? Any idea ? Thank a lot
(The link about MI GRBL extension indicated in your PDF seems dead)
Eric ;-)

Here you will find the fix for this, also had to do this: http://www.tylerforsythe.com/2015/02/inkscape-laser-engraver-bug/
Kind regards

I am not able to work out how to do this fix, I am an absolute newbie, would you mind telling me and others that have this problem a step by step solution as I don't even know where to start

It's OK ;-) Thank you !

Is that machine the exact same as that one you show in the assembly pdf?
Did you insert the spacers (grey ones from the pdf) into this machine on the website?
I wonder because I just realized after printing out the whole thing that the bearing in the top clampshell are only retained by the slots.
That means if there is a bit too much pressure on the Y rails, the bearings snap out of their slots.
The original Misan build had the X and Y bearings push against each other. Which was smart.
Those spacers you linked in the pdf prevent the bearings from fixing each other in place because there is too much clearence between them. But without the 624zz idlers would slide on the rails. Generally I would say this walkaround is below sub-optimal.
I must remind myself to triple check on designs from thingiverse before printing them.

I printed them PLA.. doesn’t work for me . Maybe I’m wrong the orientation I printed ? I just present with my hands and broke it

But I just tightened the rods to the X supports and on each end the filament delaminated just as on your build.
Also the mechanism for the 624zz bearings with the M3 screws is terrible. If you apply too much tension to the belt the bearing idlers tend to bend and so does the screws because they are only screwed into the bottom clampshell.

The original 4xiDraw by Misan is way better. I had that before and wanted to try a newer version. But apperently iterations and/or remixes doesn't necessarily mean that something is getting better. This design by MakerC is probably one of the worse.
Better check out Misan's (https://www.thingiverse.com/thing:1444216) or maybe EEZYxyDRAW https://www.thingiverse.com/thing:2936872
EEZYxyDRAW has some nice ideas and should print more convenient (see X support).

4xiDraw Drawing machine
by misan

Maybe too low temperature while printing?

What Infill do you recommend for the parts?

50% should be adequate.

after each servo down the machine waits for a small amount of time before moving but after writing the machine moves before pulling up the servo this leaves a small mark on the drawing, is there any way I can add a small delay so that the servo (pen) can move up before moving,?

The delay is set in the GRBL MI Extension. Take a look at the screen shot and try playing with "delay". I suggest 0.1 which is 100ms. You may want to make it a little longer.

Sanity check:
Can you confirm that your settings of 200 steps/mm are correct?
Using your hardware specs (GT2 16 teeth pulley + GT belt) and assuming you are using 1.8° Nema 17 with 200 full steps per rev. with 1/16 micro stepping I get 100 steps/mm and not 200 steps/mm.
200 steps/mm would be used with a 8 teeth pulley while everything else stays GT2.

I used this calculator https://www.prusaprinters.org/calculator/

Second question. Why do you use M3 screws for the 624ZZ bearings? These bearings have a 4mm center hole diameter.

You can check that your steps per mm is correct by sending a manual move of 100mm and checking it with a ruler. I didn't use a calculator but I did verify that it was correct.

I must have used 4mm screws and didn't realize it. Good catch. Thank you.

Thank you for your publication on Thingiverse
I finish printing the parts soon but I have a problem with the top_XY_clamshell_V4, the tenth layer of 0.15 is shifted by 3 mm with a bad noise and the stem of my bltouch which goes down and comes crooked against the edge of the room l 'horror.
I made 3 tests by changing the orientation in cura and the same problem arises.
Have you ever had any comments on this?
Do you think Cura or Octoprint please me or does my CR-10 printer have a problem?
All other parts are correctly printed.
thank you in advance for your help

I haven't had a report of the problem you are seeing. Sometimes one slicer may have problems with a file while others do not. Try running a slicer fix on the file to see if that helps. I doubt that it is your printer.

I finally have the machine working. https://youtu.be/n1DBWHvsTFY

I had so many issues with different stepper motors. I finally found some great, high torque steppers that can power this thing while mounted on the wall. Super stoked!! Thanks henryarnold for posting this project and helping me troubleshoot issues. :)

Hey man! Awesome work! Any chance you could post links to all the parts you purchased to build this?

Hey bud, any chance you could post the links for the parts to purchase online? I've found some on ebay, but am having some issues finding all.

I'm stuck at:
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 linear bearings or printed bearing

Any chance you could post links for all the parts?

Can't wait to build it!

Thank you,

Yes I'll add some links later today.

AWESOME! Thank you so much!

Hey bud, did you ever get the links for purchasing all the parts? Greatly appreciate it!

I'm having trouble resetting the machine, from where the machine should start?
Another question, when I am using the Rabbit, the Y + buttons make the machine go in a diagonal direction, the Y- in another diagonal, X + in another, and X-in another, should not they walk in horizontal and vertical directions?
it is possible that the colors of the motor cables came in different configurations because they were bought from different places?
Sorry for bad English.

A drawing robot that moves diagonally for either an X or Y motion doesn't have the COREXY option set in the config.h file. Are you sure you copied the config.h file supplied to the GRBL directory?

Yes, Matador seems to have the same problem.:/

i disconnected the belt from the steppers so I could see if both the steppers are moving and found out that I have a bad stepper motor. If it only moves diagonally that means that either corexy is not enabled or only one stepper it working.

Thanks for the excellent observation. It hadn't occurred to me that a bad stepper or driver would cause diagonal movements. Did you get it fixed? Was it the stepper or the driver?

Bro can you please sell all parts online?

It would take a lot of time to document sources plus I would have to maintain it since vendors come and go. i suggest that you buy a kit from one of the EBay vendors that sell drawing robots.

Bro i am saying Send me the all just Parts of your drawing machine i want to make exact like you. i will pay you


Inspiring from this wonderfuyl tutorial, i made a small drawbot for the kids with cdrom stepermotor (xmax,ymax)=(4mm,4mm)...
Quite small but fun !

i am using grbl 0.9i
Everythings is working fine on x and y.
My problem is on gcode processing z servo command.

I am using the mi extension as explained in the pdf but it systematicly fail on generating gcode with the following error.
Traceback (most recent call last):
File "servo.py", line 3172, in
File "inkex.py", line 283, in affect
File "servo.py", line 3153, in effect
File "servo.py", line 2883, in get_info
File "servo.py", line 2864, in recursive_search
File "servo.py", line 2866, in recursive_search
points = self.get_orientation_points(i)
File "servo.py", line 2906, in get_orientation_points
r = re.match(r'(?i)\s(\s(-?\s\d(?:,|.)\d)\s;\s(-?\s\d(?:,|.)\d)\s;\s(-?\s\d(?:,|.)\d)\s)\s',node.text)
File "C:\Program Files\Inkscape\lib\python2.7/re.py", line 141, in match
return _compile(pattern, flags).match(string)
TypeError: expected string or buffer

Any idea, maybe on an alternative way to generate simple gcode with servo command would be nice or a link to complete tutotial ?

Thanks for your help


It looks like you need to install Python. You should do a Google search on Python for Windows.

Im having some strange problems. Not sure exactly what happened or when it happened. This machine worked just fine at one point. I loaded a gcode file into UGS and the steppers started making a strange noise and not moving in all their directions. I thought since it was wall mounted that maybe there wasnt enough tourque in my steppers. So I bought some higher powered steppers and still get the noise with them. I've also tried several Arduino boards and CNC shields and get the same results. I've tried everything. Any suggestions???

Here's a video of the noise. In the video im using keyboard controls in UGS to move 10mm at a time in each direction. you'll notice it only moves in two directions.


Did you set the stepper drive current using the small potentiometer on each of the drivers?

Yes I have set the current on both the stepper drivers. The formula I used for this is:

Current Limit = VRef x 2

The specs for my steppers show them rated at 0.9Amp so the VRef should equal 0.36v. Thats the voltage I set on my A4988's. Please correct me if thats wrong.

I set mine to 0.5V for 1A of drive current. Your setting should work but you might try bumping it up to see if it helps. You should also try running the drawing robot flat on a table to see if the problem goes away.

So i set the stepper drivers to .5v and still get same result, maybe a little louder noise from the machine with a higher voltage. I thought that maybe the noise was coming from the 'Clamshell' part. I modified the idler wheels to be a little taller, thinking that maybe the belt is rubbing somewhere. And that actually brought the grinding noise to a stop. One problem solved. The only problem now is that the pen only moves diagonally in two directions. Either down to the left, or up to the right. I've tried rearranging stepper motor wires on the CNC shield, more new stepper drivers, and even deleting the arduino IDE and starting fresh. I also tried taking the plotter off the wall and laying it flat on my table. It acts exactly the same in either location. This is so frustrating. I think im out of options....

I missed that you have diagonal motion. This is caused by the COREXY setting not being enabled in the config.h file. I supply the config.h file with all the correct settings. Your Arduino download didn't have the correct config.h file in place.

I definitely used the included config.h file. the only change in the included one is that corexy is enabled. Still not sure whats going on.

Try running on a table. I just haven't tried running on a wall so I don't know if it works.

I've taken it off the wall and have it sitting on the floor. I disconnected the LED strips, they are feed off the same 12v power as the CNC Shield. I deleted the grbl-servo-master from the arduino library and re downloaded it(version 0.9) and added it to the arduino library again. Then downloaded the config.h file from here and replaced the one in the library folder. I compiled and uploaded it to the arduino uno and still get the same results. When I first got this working I ended up having to swap my red and blue stepper wires on the CNC shield to get this to work. I've tried that again with the new steppers, same movements as before I swapped them. The voltage on my stepper drivers are set to 0.5vdc. They are 1A steppers. My belt doesnt feel too loose or too tight, I've tried playing with the tension and nothing seems to help with this problem. My CNC shield is set up per the instructions. The only jumpers I have on the board are the three at each driver to allow the proper micro stepping. I have two different types of stepper drivers (both are a4988), one kind are on a red pcb and the other are on a green pcb. They both act the same. I have three of these CNC shields and they all act the same. The only thing I havent tried swapping is the Arduino Uno. I have a bunch of them lying around so I'll swap it out and see if for some reason its a bad arduino. It is a clone so maybe theres bad components... Im out of ideas :)

I finally figured out why im having so much trouble. I took the belt off and tested movement. Only one motor is moving no matter what direction I tell it to move. Now I just have to figure out why that motor doesnt work.

I was thinking of making a special gift that uses this bot but I am unsure if the idea is possible. I wish to store Gcode for multiple drawings on board and a timer that will activate the bot and draw these different Gcode files at different times of the day. Essentially I would like the Draw bot to draw a picture wait 5 hours or whatever time specified and then draw another picture without any intervention from me and without any software open on a computer running in the background. If anyone has any ideas on how this may be possible I would appreciate the incite.

I looked into if it is possible to have an Uno Arduino read files from an SD card and then plot them. The consensus is that a regular Uno doesn't have the horsepower to that task. It would require a Mega Arduino. GRBL is not written for the Mega. There are two logical paths that I would investigate. One is to use the Mega plus the Marlin software used for 3D printing to drive the drawing robot. Another solution is to use a Raspberry PI to feed the files to the drawing robot.

Both X supports are the same so why are they called Left and Right? Or am I missing something :P

It looks you may be correct. My design is a remix of another design which had right and left parts.

Amazing build man! I've looked through all the documents multiple times, and will start the build tonight!

When 3d printing the parts, I presuming nothing requires supports? I want to get these prints right the first time because it is a lot of filament, and more important to me, TIME hahaha.

Have fun with your build!

No supports except for the pen holder. I think i used supports for that part. I suggest using the remix pen holder which is stronger.

hello experts, I need your help. How to set all MS1,MS2,MS3 to be HIGH in order to get 16 microsteps? I'm using Arduino CNC shield V3 with A4988 step motor driver.

/* MS1 | MS2 | MS3 Microstepping Resolution
L | L | L -> Full Step
H | L | L -> Half Step
L | H | L -> Quarter Step
H | H | L -> Eighth Step
H | H | H -> Sixteenth Step


Install all three jumpers under each 4988 driver.

Got it, man thanks!

So I've successfully got my drawbot working bar one issue (and probably an easy one to resolve if you know how). Everything is coming out in reverse (ie text is mirror imaged) and so I need to either reverse the x-axis or the y-axis to correctly orientate things.

Any ideas what I've done wrong?

Yes it is easy. There is GRBL parameter $3 (dir port invert mask) that allows you to reverse the direction of each axis. Try changing the value from 3 to either 2, 1, or 0. Each bit reverses one of the axis's. Be sure to save the change otherwise the G-Code sender will only change it temporarily.

Comments deleted.

Thank you for this thing! Thumbs up to you!

  • Posted with 3D Geeks Thingiverse Browser App

Some of the parts are available at the site you pointed to but not the CNC Shield.

ok, I'm going to put it into practice, thanks for your quick response, thanks

Hi, I want to congratulate you for the exile work, and I would like to ask you a question, I want to print text with inkscape and the extension My GRBL z axis servo controler and I want to know how to print in order: example: I write the word HELLO and I want it print first the H then the O then the L and finally the A, you know how I can do, thank you very much and congratulations again, and greetings from Argentina.

In order to control the order of plotting a file I suggest that you do the following:
Create the Inkscape file with "H", "E", "L", "L", and "O" as separate graphics objects. This may not be necessary but it may make the G-Code file easier to read,
Make sure you follow the instructions for creating a vector file.
Do the MI Extension conversion.
Plot the file. You will likely find that it does not plot in the order, H, E, L, L, then "O".
Edit the G-Code file and look for the sections of code separated by the G-Code command M3S030 (or similar)
That command is where the pen is lifted copy and move those sections around until you get the plotting order you desire.

Good Luck. Let us know how it goes. Others may want to do the same thing. I did this with the standalone Benjamin Franklin signature.

I have a strange problem connecting to gcode sender software. I can upload the sketch just fine to the arduino following the instructions, but the universal gcode sender will not connect to the arduino. I have found that if I remove the cnc shield from the arduino it will establish a connection to universal gcode sender. But that dose me no good. Any suggestions?

It sounds like the CNC shield is disabling the Arduino. Check for +5V at the Arduino with and without the CNC shield. Make sure the shield is getting power. I explain a jumper in the instructions for routing power from the Arduino to the shield. If you do not add that jumper, you must power both the Arduino and the CNC Shield with separate connections. Make sure the Z axis servo is connected to the correct pins. There's also a possibility that you have a bad CNC shield.

I got a new CNC shield, and it works now. I did have to set the current on my drivers and also had to swap the red and blue stepper wires on the shield. Now I just have to figure out inkscape :) Thanks for your help

MI extension doesnt work. I dont understand.Not create file.

It looks like you may have a problem with Python or the extension is not installed correctly. I suggest a search on on Inkscape Python Extension.

Heĺlo, i plan To copy your wonderfull build with my son.
Let me first congratulate the great job you are doing there.
To draw largef format, Do you think i can modify up (x2) x and y rod?
Do you think there is x and y limit To not cross?
Many thanks for your answer

Thanks. I haven't built this design in a larger format. I think it will work up to 2X as large but you may experience sloppier drawings because the bearing rods will be long and less stiff. The belts will be very long which may also compromise the plot quality. I suggest building it as presented. Get it working and then move up to the longer bearing rods and belts. If you have problems you will know it from the experience of building it stock. You can then back off the size until it works to your satisfaction. You may also find out that 2X the size is no problem. Be sure to report back what you find. I'll be interested in what you find.

Thanks for your clever advise.
I il report back my upscaling test.

Hi, I'm new here, I want this robot but I'm having problems slicing some STL files with Repetier, does anybody something about this? thanks

You should try a different slicer such as Cura. If you must use your slicer, you could try repair software.

No answer for my last question?

I answered below. You must copy the config.h I supply to the documents/Arduino/Libraries/grbl-servo-master directory.

Also recheck all of the following. Many people whose robots did not work missed one of the following:

Make sure you have the correct version of GRBL (the one pointed to in the description)
Make sure you copied the config.h file to your GRBL directory
Check your CNC jumpers. All three should be installed
Check that you entered the GRBL parameters using Universal G-Code sender
If your Z axis motor isn't working, make sure you have the correct version of GRBL and that you wired your servo to the correct pins.
Make sure you used the MI extension parameters shown in screenshot specifically M3 and M5 for up and down on Z servo
If after doing all the above, you find that your stepper motors just buzz, there's a good chance the motors are wired wrong for the drivers. Try swapping the leads around until you find a combination that works. This occurs because the manufacturers are not always consistent in wiring the motor to the connector.

unfortunately did all the above already and checked them about thousand times, checking everything online to see if it starts working correctly or not, tonight I will check the driver output is the right current or not (last hope), will update if it starts working maybe someone else has the same problem ;)
thanks for all the info

Please summarize your robot's current symptoms. Does the robot move under manual control? Does both the X and Y axis move when you use manual control to move only the X axis? Have you tried printing one of the example files that I provided?

It's working correctly, had to put the pot on the driver for the right current, thanks mate

Great! I'm happy you figured it out. I'll add your fix to my list of things to check. Thanks for telling me what you found.

Please be sure to post your robot as a build of this Thing.

Comments deleted.

thanks, sorry for all the troubles. Looking forward to hear from you

Try this (this work for me): uninstall the library from your pc, then download the grbl library 0.9i, unzip and replace the config.h. When you do this, install the lib from this folder and, when the folder appears on your document folder, replace the file again here. Then upload the example file to your arduino and be sure if the config of Sourcerabbit is the same like the images (this last thing was my fault).

will test it for sure, but there is no lib file in the folder

It's not a file, it's a folder (in my case). I followed the file Project_Drawing_RobotV1.0.pdf step by step and, doing this to load de grbl and config the Sourcerabbit like the img at the top of this page, it works propperly :)

could you please send me the library that you have mine doesn't have the lib folder

You should have a Documents/Arduino/Libraries/grbl-servo-master directory which is where the config.h file I supply must be copied. If yitou do not, something went wrong with your installation.

Hello, I have a very big problem: stepper motors work correctly, but servo don't (
It's move but not correctly(only down)
Waiting for your reply :)

If the servo is working incorrectly you probably didn't setup the M5 and M3 commands for the GRBL MI extension. One command raises the pen. The other lowers it. You can also change the angle using for example S030 for 30 degrees.

I followed these instructions.
Only M03 S030 works
M5 - not working :(((

I don't understand why it's not working. Instead of M5 try M3 S000 which should move to the angle 0 degrees. The M3 S030 moves the servo to 30 degrees. You may have a mechanical problem with servo.

I understood why the z axis didn't work.
I placed the motor in the wrong way :DDDDDDDD

Thank You for fast reply and for this model!!


Please be sure to post your robot as a build of this Thing.

Did you get them to move them achieving the steps I explained below?

I used the GRBL version that the author of the model wrote.
I don't understand how to manipulate Z axis with G-Code

Use the G-Code commands M5 for servo down. M3 S030 is servo up (30 degrees). You can change the angle. These commands are entered in the GRBL MI Extension to generate the G-Code for a drawing.

Great design, assembled everything unfortunately the steppers are not working. Already have the jumpers installed, replaced the config.h, checked the wirings and even the motors, but they are not working. Sometimes in the motor section of universal gcode sender it's moving when I set steps to 20. What do you think I'm doing wrong?

I connected the power adapter directly to the cnc shield but don't think it makes any difference

Did you set the GRBL Parameters. They include a parameter fo pulses per mm which makes the steppers move.

Did that already too, dunno what seems to be the problem

Its moving from machine control and not, and sometimes both axis move together when I move only the x axis for example

It sounds like you didn't copy config.h to the correct location. Review the instructions for compiling and downloading GRBL.

Isn't it copying and replacing it with the one in the library of arduino in the documents of windows? Btw thanks for all the infos and quick answers

No. You must use the config.h I supply with this thing. It must be in bnb the correct location of GRBL. Also make sure to use correct version of GRBL otherwise the Z axis servo will not work.

sorry for all the troubles and questions (couldn't find anything online about it so you are the only hope), here is what I did, installed the grbl version that you had in the description (0.9) and add it as a library in the arduino software and download the config.h and before compiling and uploading, I copied and replaced your config.h (in the things section) with the one from the library (C:\Users......\Documents\Arduino\libraries\grbl-servo-master) and then upload the example (grblupload) to the arduino.
Did I miss anything?

Yes you did miss something. It sounds like you did not copy the config.h which I supply to the GRBL directory. You need to replace the original with the one I supply.

Here are some important tips which I already stated but find that people sometimes miss.

Make sure you have the correct version of GRBL (the one pointed to in the description)
Make sure you copied the config.h file to your GRBL directory
Check your CNC jumpers. All three should be installed
Check that you entered the GRBL parameters using Universal G-Code sender
If your Z axis motor isn't working, make sure you have the correct version of GRBL and that you wired your servo to the correct pins.
Make sure you used the MI extension parameters shown in screenshot specifically M3 and M5 for up and down on Z servo
If after doing all the above, you find that your stepper motors just buzz, there's a good chance the motors are wired wrong for the drivers. Try swapping the leads around until you find a combination that works. This occurs because the manufacturers are not always consistent in wiring the motor to the connector.

Comments deleted.

Awesome work on this. Super fun build!
I'm having one problem I haven't seen anyone else in these comments experience and I'm not sure how to solve it.
When the pen holder is fully extended, it's almost 1/4 inch lower than it is when it's retracted. The height difference is great enough that if I position the pen to be a hair off the page in it's lifted position at full extension, about halfway up the page it will no longer touch the paper when in it's drawing position.
The weight of the head section is dragging it down pretty significantly at full extension but I have no idea what to adjust to keep that from happening.

You can adjust the angle of the pen servo in the MI Extension. Suggested is 30 degrees but 40 or 50 degrees may work better for you.

Two of my engines are not moving. The Nema 17s are just vibrating. I'm using a 2a 12v power supply. Do we need to make a change in config.h or do we have to // get it? Thanks...

Im using drv8825 and 3 micro jumper connection.

Comments deleted.

So no matter what motors or stepper drivers I use, my Name17s just vibrate and do not move. I have checked the stepper voltage and both are set to .85volts. The GBRL board is new and using an Arduino Uno.

Any thoughts on what I am doing wrong?

Did you install the jumpers? Did you connect power to the CNC shield? Last; try reversing 2 of the four leads to the stepper motors. I've seen cases where the steppers were wired wrong for the drivers.

I'm almost sure that you have a wiring problem between motors and the drivers. Try swapping wires with power off otherwise you will blow the driver.


So when I start my drawing, (with the servo arm up) it will drop the arm and begin ti drawn. Once complete, the arm never lifts. (I can lift it by sending the code M03S040)

I am using the "Sample" gcodes, so I assume those should have all been processed correctly. What am I missing here?

I looked at one of the sample files and the M3 and M5 codes are present including the final M5 to raise the pen up. You claim that M3 raises your pen. That is backwards. Is your servo installed in the wrong direction?

Yep... Silly me, that was it.

Last question! I get long pauses after each path. Any idea how to make this better? Maybe it's the software I am using. I am using source rabbit to send the gcode.

The MI GRBL Extension has a parameter called Delay which needs to be set to 0.1s
You probably left it at the default 1.0s It is shown on one of the photos with red arrows.

Here is the Google Translate:
According to your tutorial, the final Universal G Code Sender error, open SourceRabbit GCode Sender error "Unable to establish connection with the CNC controller! please check if you are using the correct port". Ask for guidance.

Henry its me again. I wanted to know where can I get the improved pen holder as shown in the assembly instructions.

This is a much better pen holder. I plan to make one for my drawing robot.

Heavy Duty Pen Slider

Thanks a lot again.

I have [problem with the files 'Bottom_XY_clamshell_V2' and 'Top_XY_clamshell_V4' . I am using Slic3r and the part is defective in my slic3r. But the STL files seems good.

I have tested the files with both Simplify3D and Cura without problems. There must be an incompatibility between the STL and your slicer. Try a different slicer or try a repair. If you find a problem and can fix the STL, let me know and I'll post the fixed STL.

Thanks for the quick reply, I really appreciate it. Also, I love your machine design. I also have Simplify3D but I find it too complicated. I will try some other Slicer. I wanted to ask you, can I make it a little bigger by using 500mm rod instead of 450mm and also 400mm instead of 350mm for the X and Y axis respectively ?

Yes, you can make it a little bit bigger by lengthening the rods. If you need to go much bigger, you will need to go to larger bearing rods.The numbers you mention are OK.

Simplify3D is worth learning. It gives you a lot of control over the process. I particularly like the excellent support structure editing it provides.

Thanks a lot, I will try learning Simplify3D.

Hello again, when I have the robot wants to draw something, he lowers the pen and moves to this place drawing a line(returned by raising the pen). What must I do

Try drawing one of the gcode files supplied with this thing. If it works, there's something wrong with your GRBL MI Extension processing.

with your files going it does not draw a line when moving to a drawing. What should I fix in inkscape?

Here are some things to check If your robot doesn't work:
Make sure you have the correct version of GRBL (the one pointed to in the description)
Make sure you copied the config.h file to your GRBL directory
Check your CNC jumpers. All three should be installed
Check that you entered the GRBL parameters using Universal G-Code sender
If your Z axis motor isn't working, make sure you have the correct version of GRBL and that you wired your servo to the correct pins.
Make sure you used the MI extension parameters shown in screenshot specifically M3 and M5 for up and down on Z servo

Hello, I have a problem in translating images from Inkscape to universal gocode sender. The problem is that my servo motor rises and does not fall. In tools library did everything as in your image. What to do?

The servo action depends on a special version of GRBL. This Thing points to the correct version. You also need to set the GRBL parameters. Also, did you add the spring that pushes down on the pen holder?

Hello, I have with your files the servomotor normally works. I installed the spring. GRBL introduced everything as in your image.

Your drawing robot still doesn't work?

Hello, with your files the robot works fine. But when I translate a drawing from Inkscape into Universal code sender, my servo motor rises and is fixed in this position, then the robot draws everything in the air.

Recheck that you are entering the correct parameters in the GRBL MI Extension pop up. You must have M3 and M5 defined for servo up and servo down and I suggest an angle of 30 for the servo motion. You may have set those numbers incorrectly.

Thank you for your help now all normally works

Great! Be sure to post your drawing robot as a make of this Thing.

Can it make fills or only shape drawing?

The drawings I have done are all line drawings with no fills. I have seen the Axidraw do filling of areas so it is possible but it is more a function of the software you use than the robot.

I really like this design. Does having the motors on top cause more vibration than being on the bottom?

It makes no difference because there is little to no vibration. The motors operate very smoothly. It is possible to modify the design to put the motors on the bottom or you could search for another design with that configuration.

Hey Henry!

First off, thank you very much for the awesome work and support on this project.
The documentation is really good.

Now. I have just finished building the robot, but somehow when I move my pen for example: 10mm on the x axis, it moves about 25mm. From this i assume that somehow, within the firmware there is a setting that sets the unit of the steps per unit to inches or something like that..

Do you have any idea what my issue might be? I also thought it could be the axis steps per unit maybe for the specific drivers i used (maybe the microstepping would be doubled or so) but the 2.5 times greater distance pointed me to the inches to mm idea.

Any help would be appreciated.

Again thank you for the beautiful work you have done.

Kind regards,
Elias from stereolab.gr

Did you open the Universal G-Code Sender and set the GRBL Parameters? There are a couple of photos that explain how to set the parameters which define things like pulses per mm for the steppers. Not setting those parameters would explain your problem.

Here are some things to check If your robot doesn't work:
Make sure you have the correct version of GRBL (the one pointed to in the description)
Make sure you copied the config.h file to your GRBL directory
Check your CNC jumpers. All three should be installed
Check that you entered the GRBL parameters using Universal G-Code sender
If your Z axis motor isn't working, make sure you have the correct version of GRBL and that you wired your servo to the correct pins.
Make sure you used the MI extension parameters shown in screenshot specifically M3 and M5 for up and down on Z servo


on the bootom x-y, the screw holes for the bearings are diameter 3 mm?

while the bearing axis is 4 mm


I checked the screw hole size with a CAD program and they are exactly 4 mm. They should probably be 4.2 mm to provide clearance but those parts were inherited from the earlier referenced design so I won't make changes unless necessary. You should check the calibration of your printer.


verif avec sketchup, les trous sont bien de 3mm


There is no grbl folder in download. Does the instructions mean the grblupload folder? I just have the 3 folders. CPU map, defaults, examples.

GRBL is downloaded from here:

Overwrite the file "config.h" in GRBL with the one supplied in the "Files" section oft his Thing.
The location of GRBL should be in your home directory Documents/Arduino/libraries as shown in the attachment

Hi! I have a problem... hope someone can help... My robot works as if the page is in diagonal. In gcode sender, if I write 'X10', both axis X and Y moves. But if I write 'X10 Y-10' the robot move only the X axis. It may be that the program in my arduino is wrong???
I tried in first with the examples, the signature of B. Franklin... It's a perfect 45-degrees-angled signature!!!
-----please help me---- Thank you

You forgot to use the config.h file which is supplied in the Files section. It turns CoreXY on which is explained in the instructions. The config.h file must be copied to your GRBL directory before you do the download.

Yes. Now it work properly!! I missed to copy the config file inside the folder. And a special thanks to Nanobot331. I had had the same problem with the wrong line in Python. Now it is all OK!!!
Great!! Very good job, and thanks again!!!

Be sure to post your Drawing Robot as a make of this design.

can someone share a link to idler pulleys that fit. the ones ive tried rub on plastic next to lm8uu mount.

The idler pulleys are a 624zz Bearings which fit fine. Some users have added a pulley with a flange but I believe that they also added spacers to the clam shell. Here's an example where you can see spacers added to the gap of the clam shell.
This is the pulley:

Idler Pulley for 624 Bearing and GT2 belt
Drawing Robot - Arduino Uno + CNC Shield + GRBL

Can someone post a picture of the cable and jumper settings? Because the One in the pdf file isn't very clear. Thank you so much

These photos are also posted with the description.

Hi, do you think that it could be a good idea to use hollow tubes instead of the normal ones to reduce the weight?

I've used 10mm hollow aluminium tube on mine, 10mm is the only size available in my HW store.
8mm like yours would be much nicer.
Advantages of hollow aluminium is cheaper and lighter,

You should consider publishing a remix of the parts needed for 10 mm tubes. With my solid 8 mm rods, I run my robot at 3000 mm/min. It would be interesting to see how much faster it would go with the hollow aluminum tubes.

Yes, you could use 8 mm aluminum tubes to lower the mass so that the drawing robot can move faster. I haven't checked to see if 8 mm aluminum tubes exist. They would only be needed on the Y axis since the X axis tubes don't move.

I'll try 8 mm aluminum tubes as they are like half the price of linear rods. We'll see :D

They exist!! I found the tubes at a local hobby store; they are cheaper, lighter and also easier to cut

I was wondering if I could alter this build to work for a larger area of drawing - is it as simple as longer bars and drive belts, and then just altering the max. work area in the GRBL settings?

Yes it is possible to increase (or decrease) the size. As the drawing robot gets bigger there is more strain on everything including the cantilevered arm which would get longer and heavier. Too big and the bearing rods will not be strong enough. As you increase the size of the bearing rods and weight of the cantilevered arm the motors will have problems moving it all. I'm just guessing but I think you could build it 50% bigger in each direction without running into problems.

hello! I have looked through a lot of comments and still can't figure out why I keep getting this error when I try using the inkscape MI extension.

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 found a very simple solution to this problem^

Go into "servo.py" and replace line 3085 with:

doc_height = self.unittouu(self.document.getroot().xpath('@height', namespaces=inkex.NSS)[0])

I am a beginner and had the same problem. Now it is fixed, I can make own gcode from pictures and text within inkscape.
Tank you very much for this help.

Dude, thanks for that info. I was going crazy trying to figure out why I couldn't generate a gcode file with inkscape. That worked great!!

This worked for me too. Looks like the most recent update to Inkscape causes it.

Thanks for finding this! :)

I haven't run into this problem. Thanks for posting a solution for those that encounter the problem.

I just built this and all works well except....
The servo turns in the wrong direction. I have tried switching the +/gnd pin but it only shorts out my board and nothing works. Any suggestions?

You should change the polarity of your servo; search how to do it on youtube. It's not so difficult

Take the servo arm off. Flip the servo over 180 degrees and reinstall the servo arm. That should make the arm move in the opposite direction.

ty... ive actually done that numerous time and none of which worked. Just figured it a few minutes ago. I had the arm in the wrong spot in relation to 0 on the servo. Working great now

Hi man,
i fnished to assembly and test it. Nice work, but can you tell me how it can set the real size of object? In inkscape have one misure and the machine draw another. For photo i use laser script, because the MI not work e if it work no real size. Any help? Or any software to render an image?

I'm not an expert on using Inkscape. If you do a Google search, you will find many tutorials and tips on using Inkscape including this one which explains how to size drawings.



I have a problem in operating when a servo motor is moving (Z)
The program stops and I do not understand the SourceRabbit GCode Sender program well
I do not choose $$ I do not know the best

Bro in my 3D printed parts in some places holes are filled.. can i drill to make holes?

Yes you may drill the holes. You should check the calibration of your printer.

initially where should be pen holder rest (i meant auto home)

It should be lower left corner but you may find that your drawing robot has axis that move differently. This can happen because the stepper motors can be wired differently between manufacturers. You can reverse the direction of the X and Y axis by changing GRBL parameter 3.

do the pieces have dimentions tolerance already?

Yes. A calibrated printer should be able to print all the parts which will smoothly fit together.

In the instructions, it says that their is optional use of a limit switch. What would it be used for in this build and where would i install it?

I had hoped that the limit switches would provide automatic homing. I could not get it to work. The limit switches don't appear to provide any automatic adjustment of the print envelope. They just stop the drawing robot if one of the switches is hit. You must reset the robot to start again. For me it is better to just not draw anything that will exceed the drawing area and skip the switches.

Do a Google search of "GRBL limit switches" and you will find out more about this feature.

The limit switches are added on each end of the X axis in the small pocket where the belt runs to the pulley and on the Y axis inside the clamshell.

Bro can i use any bipolar Nema 17 motor?

Bro can i use 3mm×75mm carbon fibre rod instead of stainless steel rod.

What is your cooling method for Arduino and Cnc shield.. in this video you are not installed any fan in uno case... Or doesn't have any space to install fan

No fan is needed if you use heat sinks. The slots in the case provide enough air flow to keep the drivers cool. You could add a fan if you find that your drivers are getting hot. I haven't had a problem.

1) If your using drawing Machine long time the driver doesn't heat?
2) Which Dc adapter you use as power source?

Please use a fan if you think you need one.

this is the adapter I purchased.
https://www.amazon.com search for "B019Q3U72M"

Please tell me how to alter the firmware for the MEGA2560+RAMPS 1.4

I don't think GRBL supports MEGA2560+RAMPS 1.4. I think its possible but would be a big rewrite of the code.

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

You must use the version of GRBL that I pointed to. It has the servo code. Once you have that, you can use either of the Inkscape extensions to generate G-Code for a drawing.

Bro... Are you using PLA or ABS material which is better?

I used PLA for this build. ABS or PETG are better but are more difficult to print. The choice is up to you.

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 Drawing Robot

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

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'm building this machine and I have the same isues, slow mottors and picture's reverse 45 degrees. How do you solve them???
Thanks :)

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 Drawing Robot

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.