Arduino CNC Shield – 100% GRBL Compatable


Do it yourself CNC projects are popping up everywhere and we decided that we wanted to contribute to the growth.

Here are a few of our design goals:

  • Modular Design – We wanted to do more than just keep cost down. We wanted things to be reusable and up-gradable. (Arduino , Individual Stepper Motor Drivers and more…)
  • Compact Design – Squeezing a 4 axis design into a board the same size and Arduino Uno.
  • Opensource Software – 100% GRBL compatible (G-Code Interpreter)
  • Opensource Hardware – Arduino has opened up the power of micro-controllers to everyone. (Easy but powerful computing)
  • Evolving Development – We are keen to improve on the design and welcome all feedback.

NOW AVAILABLE at our Ebay store…
… or in assembled form from

Arduino CNC Shield V3.00Arduino CNC Shield V3 Arduino CNC Shield   100% GRBL Compatable

Arduino CNC Shield V2.00Arduino CNC Shield Pololu Stepper Drivers Installed Arduino CNC Shield   100% GRBL Compatable


NOW AVAILABLE at our Ebay store…
… or in assembled form from

If you are interested in updates please add your email address to the following mailing list and we will send you more details as the shield develops.

Arduino CNC Shield – Mailing List

Board Layout

The following image displays the functionality of the Arduino pins as used by GRBL.

Grbl Pin Layout Arduino CNC Shield   100% GRBL Compatable

GRBL Pin Layout

We have designed the Arduino CNC Shield to use all the pins that GRBL implemented. We have also added a few extra pins to make things a little easier.



Extra pins:

  • Limit switch pins have been doubled up so that each axis has a “Top/+” and “Bottom/-“. This makes it easier to install two limit switches for each axis. (For use with a normally open switch)
  • EStop – These pins can be connected  to an emergency stop switch. This does the same as the RESET button on the Arduino board. (We do advice that an extra emergency button also be installed that cuts power to all machinery. A REAL EMERGENCY BUTTON)
  • Spindle  and coolant control has their own pins.
  • External GRBL Command Pins have been broken out allowing you to add buttons for Pause/Hold , Resume  and Abort.
  • Serial Pins (D0-1) and I2C Pins (A4-5) have their own break out pins for future extensions. I2C can later be implemented by software to control things like spindle speed or heat control.
  • Version 3.00 of the board added a jumpers to configure the 4th axis(Clone the other axis’s or run from Pin D12-13), Comms Header(RX+TX , I2C) and a Stepper Control Header(All Pins needed to run 4 steppers)

Bill Of Materials

Assembly Instructions

Click here for the Assembly instructions for the Arduino CNC Shield V3.XX
Click here for the Assembly instructions for the Arduino CNC Shield V2.XX

GRBL Software/Firmware

GRBL is opensource software that runs on an Arduino Uno that takes G-Code commands via Serial and turns the commands into motor signals.

The GRBL source Code is located here.

I have also written a few turorials on uploading the firmware onto an Arduino Board:


  • Version 3.00 (4 Axis)
    • Enlarged board to add a 4th Axis that can clone the X,Y or Z axis. With a 4th option to use pin D12-13 to control it.(Setting up the 4th Axis)
    • Added a breakout header for all the Axis’s.
    • Added a communication header for UART(Serail) and I2C.
    • Added the a connector for an optional fuse.(Fuse not supplies as it needs to be selected for the current that will be used.)
    • Capacitors are mounted horizontally giving more clearance between them and the stepper drivers. Good for ventilation.
    • Added a pull-up resistor on the axis enable pins. This prevents the pin from being in a floating state.
    • Added 2 mounting holes
  • Version 2.02 (3 Axis)
    • Fixed High Voltage label
    • Removed Diode D1.
    • Reduced the number of Via’s.
  • Version 2.01
    • Added a 5V Breakout
    • Filled in both sides with Ground Copper
    • Moved RX/TX pins to the side so that 26-Pin header can be used. Same as the headers on a Raspberry Pi.
    • Small Text Changes
  • Version 2.00
    • First official version of the CNC Shield.
    • All pins used by GRBL has been broken out.

Gerber Files

Arduino CNC Shield Ver3.00 – Gerber Files

Arduino CNC Shield Ver2.xx – Gerber Files

License and Warnings

This is a work in progress design. All liabilities are on the users at their own risk and they take full responsibility for any harm that might happen to them or their property.

88x31 Arduino CNC Shield   100% GRBL Compatable
CNC Shield by is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License.
Based on a work at

Extra Reading

Leave a Reply

  1. Nice looking shield. Any links to retailers, or better yet the board design?
    I can’t find it in your online store.

    • Thanks for the complements. We are in the process of beta testing the shield so that we can finalize the design.

      Would you be interested in being a Beta Tester?

      • Bert,
        Definitely, I have actually designed a board and made my own prototype shield, but yours is more compact and better laid out.
        Will even pay for it if necessary. Send a private e-mail if interested.

  2. Hi Bert!
    I have finished bild my cnc project and looking for control board. I plan to use Arduino Uno controller. You board is nice I could try to use device as a Beta tester .

  3. Hi, im VERY keen on your CNC board, Im going to turn my old mill into a CNC and also thinking about building my own CNC foam cutter for work. im happy to pay for this board, also happy to beta test. cheers Ben

  4. VERY keen to get my hands on this, i have a few CNC projects i want to build and this looks like it will be perfect. please email me about purchasing and beta testing.

    • haha… That’s exactly why I designed this little shield. I wanted a CNC board that’s modular and as reusable as possible.

      Also have a few more ideas for extensions but I will work on that after I have received so feedback from users.

  5. Pingback: GRBL compatible Arduino CNC shield - RaspberryPiBoards

  6. Pingback: GRBL compatible Arduino CNC shield | Blog of MPRosa

  7. Pingback: How to create an Open Source CNC | Alan C. Assis

  8. Hi, I am building 2 CNC’s. One for milling and one for Laser cutting, etching. I am using 5Volt Nema 17’s.

    This would be perfect if it could use the DRV8834 module.

    Can I be a beta tester or can you sell me a bare board or the files to have it made?

    • Thanks Robert… I have sent you an email with the details. At the moment there are a lot of people asking to be beta testers so I can only do one kit at the moment.

      I have also uploaded the Gerber files if you would rather get the boards made…. Kind regards,Bertus.

  9. Nice looking shield. I am a long time user of GRBL and one thing that comes in handy on a GRBL shield is a socket for an optional 4rth stepper driver that can be used for a second motor on the Y-axis. Jumpers that can slave this 4th driver to the standard Y-axis stepper signal, and ideally, an optional logic inverter on the direction pin for the 4th driver.

    • Yes… I was looking at that option, but I was running out of room on the shield. :)

      A nice option would be to have a jumper configuration of some kind that allows you to select what axis you want to double up.

      • How exactly does “doubling up” work? Does that mean that whatever steps are sent to the one driver are sent to the other, or what? If you wanted to have a fourth axis separate, like for an Extruder or something, you could have take the spindle enable pin, and the spindle direction pin, and make those direction and step.

        How hard would this be to do in GRBL? I know it would be doable outside of GRBL in your own sketch.

        (Also, I want to beta test, but the other post hasn’t showed up yet, and I don’t know why)

        • Thanks for the question. I have added a little section on Beta testing.

          By doubling up you are basically just connecting 2+ stepper drivers up to the same stepper and direction pins.

          Using those pins would be an option. But the way GRBL was designed will not make it easy. GRBL is very efficient at what it does and
          sends pin changes in one call. So stepping pins need to be on the same I/O port as I understand it. (The Spindle pins are not on the same port as the stepper pins)

          I however still think we need to work on adding I2C support to GRBL so that you can extend it with custom hardware till kingdom come.

        • I though about it a bit more. You might be able to get away with the current GRBL code as it is.

          By using the Spindle enable, direction and the coolant control pins for signals I can create a shield that activates an extra extruder stepper driver with the spindle enable pin. Set the direction of the extruder with the spindle direction pin and turns the extruder heater on and off via the coolant pin. You could also interact with the pause pins on GRBL to make the setup wait for the heater to reach the right temp before starting.

          It will take a bit of effort but its more than doable.

          The best solution though would be if we could enable I2C in GRBL. But that will take a lot of effort.

    • This is a hardware function and from looking at the code it looks like an interrupt is linked to the pin stopping the movement queue.

      • I see, gotta be careful with that then. Some operations are not meant to be stopped in the middle, with feed off and spindle (or whatever is controlled as a spindle) still running. If this is a real emergency, then I suspect the RESET is the right button for that. But if it’s a convenience thing, I would much rather see it stop at a preset point in the program.

        Do you know by chance if Grbl recognizes M-codes, and specifically M1?


        • Mmmmm it supports the following g-codes . From the looks of it it,it does not have M1… But it does have M0 that’s a program pause. What you also need to consider with GRBl is that it does not just take a g-code file and run it. You need to constantly feed it with new g-code commands.

          For that reason I designed a Raspberry Pi to Arduino Bridge shield.

          The Raspberry Pi is excellent for streaming g-code commands to GRBL and with a bit of effort you can create a nice Web-interface for the rPi that you can upload g-code files to and it will send it off to your CNC machine.

          • I do the same thing with my 3d printer, except I don’t use a shield, I just send it over USB. I use a to control the 3d printer. I just send it a stl file, and it slices it and sends it to the printer. You can also send raw gcode if you want to. I’d like to get one of those shields you are talking about and make sure BotQueue can work with it.

            I’m assuming these are the boards you’re talking about:

          • Yes, that’s the one. It should work because instead of pointing the to the USB serial port you just point to the rPi’s hardware serial port. Will send you an email in the next day or so about beta testing. Just remind me about the rPi Bridge if I forget about it.

  10. Pingback: » Shield CNC para Arduino -

  11. I have spare A4988 stepper motor driver carriers used on 3d printer Reprap RAMPS, will these work on the shield?

    I’m looking to use this board on a Sumpod 3d printer and a small hobby lathe I just got.

    • Thanks Mark, I have sent you an email. Like your website by the way.

      (I have always wondered if it was possible to hack cheap digital scales like you have done on your site. )

  12. Add me to the list of beta testers please, already have the pololus that I never wound up using for the printer parts plotter/laser cutter because I got frustrated.

  13. Your shield looks really good. Can you post the schematics? I would love to take a closer look at your design.

    • Thanks for the request Jan. I have uploaded it for you… Please let me know if you have any suggestions on how I can improve the circuit.

  14. Pingback: Znowu o CNC czyli DIY Arduino CNC -

  15. Pingback: Microcontrollers & Boards | Pearltrees

  16. Very interested in this shield for testing. Our cnc is finished, just choosing electronics. Please give me more info on getting one of these.
    Thank you

  17. Hi!
    I want to build my own cnc machine with arduino, and this is a very interesting board. I want to make a PCB for me, so can I get the more details in e-mail?

    • Hi Daniel,

      I have sent you a quick email. Most of the stuff has been covered with this webpage. The GERBER files is the important stuff you need to get the boards made.

    • Thanks for your comments…. The Stepper Shield was one of my first inspirations.

      Interesting… Can you provide a bit more details on your setup. I have seen lots of machine with double-stepper Z axis.

      I have also seen that you can run 2 stepper motors from one Pololu Driver. Could that solve your issue or do you need to run two separate Pololu stepper drivers on the Y axis?

    • Hi there….

      Its pretty easy. It depends on the driver you use. A4988 – if you scroll halfway down the page to “Step (and microstep) size” you will see a table with M1,M2,M3. The table explains how to set the micro stepping.

      For Example having all three jumpers inserted will give you the smallest micro-stepping your driver can do. Removing all the jumpers will remove micro-stepping and the driver will run on full steps.

      The DRV8825 works on the same system but has a bigger range of micro-stepping.

      Does that make sense?

  18. Hi Bertus
    Really like this board and I have downloaded the gerber files.
    Being new to milling pcb boards i have no idea what software works best to take your files and generate g code for milling. Not even sure what program you used to create the files themselves. I downloaded eagle and seems it cant open the drl file.
    Is there a better software you use to drill and cut the pcb? or am i stuck making a cnc board using another process? I would love to cnc mill this board using a grbl cnc.

    any help would be greatly appreciated.

  19. johan..
    i want to know where i can buy this arduino shield for the cnc
    and what are the cost for shipping to the netherlands

    I hope for an answer

  20. Pingback: Protoneer CNC Shield | CADduino

  21. Hi Bert,

    I have a question about the GRBL controller.
    What for a GRBL controller to use you?
    Your new shield (v3.0) has the option for X/Y/Z end stop and spindle DIR/EN, but I have no idea what for a software work and supported these options.
    MACH3 use a shield which support the parallel port (no compatible with arduino), and the GRBL controller (v3.5) not supported these options.
    Do you have a configured or a special software?
    It´s fantastic if you can help!
    The shield I have buy over eBay and if it´s received I will use this with my cnc mill.

    Thank you in advanced!


  22. Hi,

    I am just checking out the GRBL shield V3.
    I use the board together with 3 polulu DRV8825 stepper drivers.
    On the polulu website I found out that in order to use the driver, the reset and sleep input should be put high. Based on the GRBL shield schematic I think the normal operations is low for reset and sleep. Does anyone know if I can configure something or set a jumper in order to get them high?

    Thanks in advance,


    • Hi.

      The DRV8825 driver works with the V3 board and does not need any modification. Just make sure you use the second version of the DRV8825 as the first one needs an extra resistor to be compatable with the A4988 footprint.

  23. hi witch one one of the drv8825 is the sec version i have one with md20b is this the newer version
    and if this is not how can change to let it work
    ps is there of de version 3 a schematiclayout i see onely version 2 schematic layout on your site

  24. Pingback: BLOG | New Product Post – 3D Printer Accessories

  25. Hello, can I use the Pololu A4988 and 5V Stepper Motors like this


    with it ?

  26. Hi , recently I’ve bought one of your amazing shield to use it with DRV8825 polol driver . and when testing the steppers with shield by making them rotate only once , the motor rotate for half a rotation then vibrate then continues to rotate .

    Can you please suggest a solution for this issue .

    • Hi…

      There could be a few issues. You will have to play with the max speed and acceleration or steps per mm in GRBL. It could also be that you are not giving it enough current. Using full stepping can also cause this issue(Try 1/2 step or less if thats the case).


    • I had a similar symptom when using the same setup and Nema17 4800g/cm steppers. The problem went away with a very slight load on the stepper shaft. I’m picking that, under no load, the current draw is at it’s minimum, and that’s not quite enough to bring the stepper into the next step (that bump you feel when rotating the shaft by hand) It then appears to sit there and bounce between 2 steps, giving off a really disconcerting buzz/vibration. By applying a small load, the current draw is increased, and the motor starts to behave.

  27. I have set this up to slave the A to the Y axis and am getting movement on A but not on Y. If I remove the A driver and send commands to the Y/A I just get a hiss but no movement. I’ve shifted the Pololu DRV8825 from the A to the Y and no change.

    Any suggestions?

    • Hi. The A axis can only clone other axes or run of the D12 and D13 pins. Hissing is a good sign cause that means the drivers have been enabled but is waiting for stepper signals. Are you using GRBL or writing custom code by the way?

  28. Hello,
    I have the 3.0 version.
    The stepper on the x axis moves much slover as the one that is on the y or z axis.
    If i connect the stepper from the x to the y or z axis with the same driver it turns normal.
    If i clone tbe x axis to the A axis it is the same Problem.
    Hope you understand what i mean :)
    Do you have any solutions for the problem?
    Best regards.

      • Hi,
        This is it!
        I found it out yestetday evenig.

        Must be a long time ago, where i hab changed it *confused*
        But now it works pretty well.
        Thank you for your help ;)

  29. Hello there

    I have just started playing with the CNC shield version 3.03.
    I’m currently struggling with the end stops:

    Until now I only managed to stop the axis when one of the end stop switches is reached. Then I have to reset the board which is fine. After that the axis will move to both directions. I think that’s a bit odd.
    Wouldn’t i be more convinient / safe in this cenario if the axis would only be able to travel away from the reached end stop?

    For example:
    – The X-axis travels positive and reaches the positive end switch
    – The X-axis is being stopped
    – I press reset
    – The X-axis is enabled to travel to the negative direction only as long as the positive end stop is still active.

    Is this possible with the current shield? Am I missing something?

    Kind Regards

  30. This is a very good board. I am using it very successfully for about 3 months with my Shapeoko 2. 4-Stepsticks and Nema17 70oz/in motors @ 12V (pc power supply) driving a dremel tool as the spindle.
    I plan to upgrade to 8825’s to drive Nema 23 140oz/in motors @ 24V shortly to support a much bigger Dewalt 611 router. It is nice to be able to use the same board/firmware. I have used GRBL 0.8c and 0.9b successfully. The shipment got to me in the US without any problem or delay.
    The assembly was very easy and followed the supplied directions perfectly.
    My Shapeoko build log is here:

  31. Hi, i bought the 3.03 on ebay, it works great, but endstops doesn’t works.
    I try with normaly open contacts, like this ( X+ ._. dots are connectors and _ a wire, so normally the motor X+ stop but not mine)
    Do you have a schematic or a picture to wire it ?

  32. Pingback: Cheap Chinese Laser Cutters – Buying one |

  33. Pingback: Sneak preview : LPCDuino |

  34. Pingback: Protoneer CNC Shield + Alamode + Raspberry Pi CNC Controller |

    • Hi. The limit sits with the Stepper drivers that you use… The A4988 and DRV8825 Max out at 2Amps. So they will only work efficiently with motors in that range say a Nema17/23. For bigger motors you can still use the board will have to use the headers on the left side that breaks out the stepping and direction pins for each axis.

  35. I’m a cnc machinest and I recently stumbled on the ardunio and related info. I am very interested but want to finish the research before I jump in. Looking at the Nema 23 from Phidgets # 3307. But how do you supply power to 4 stepper controls? Do you use a 24 volt w/ 6 amp power supply with 4 taps of only about 1.5 amps out for each or do you use a 6 amp and connect each shield in parallel? and hope that everything equals out!
    Thanks for the help. I’ve been hoping something like this ardunio and GRBL etc would come along for a long time. I want to play at home on my stuff.

    • Measure twice cut once… ;) To driver 3x 2A motors I suggest you get at least a 6-8Amp power supply. Need to add the max current per stepper driver times n-number of drivers. Extra amps will ensure the Power supply does not get stressed to much. The shield has a single power input for the stepping driver side of it and the logic bit gets powered by the Arduino. 2A Nema 23 is about max that the Pololu Driver can run. For more you will have to look at external Stepper drivers like Gecko’s… But that gets very expensive and multiple power supplies might be needed.

  36. Pingback: Arduino shield for CNC-machine with GRBL | Swedish Prototype

  37. I need to be able to enable X and disable A and/or enable A and disable X. I am making a 4 axis table top router and will be “faking” rotery (A). The A drive will be a built in drive running at the same time that X is. I need to disable X so the table doesn’t move and hit the limit switches. If I apply 5 volts to any EN pin, will that disable all four drivers? Thanks, Carl

    • Hi Carl,

      One of the artifact with GRBL is that because there are a lack of pins on the Arduino Uno one pin enables/disables all of the stepper drivers. So yes, driving the EN high will disable all. You can however cut the enable track on the A-Axis and control that individually.(A 10K pull-up resistor would be good to keep it stable and and extra control pin will be needed to drive it.)

      • Thanks for your answer. I was also thinking that if I cut off the EN pin from the driver board and solder it sticking up I could use it like a male plug and wire that to an EN switch. I hate to cut your board. Thanks, Carl

      • I have the enable pins working fine now. I pulled the en. pins from the driver boards and put them on top as a male plugs.
        I do have one more question, WHAT DOES G R B L stand for? I can’t find the meaning anyware. Carl

  38. Hello. the shield is great! works fine with nema17. But I need to upgrade to nema23. I have a 24v 30A power… with nema 17 works fine, but when i change the stepper…. when I put the nema23 don’t work… I am frustated… any idea???
    thanks all.
    sorry for my english

  39. hello! thanks for anwser…. the problem was ldo steper wiring!!! Ldo has 3 different datasheet with different wiring colors!!!! Now move!

    Another questions…. with me pololu a4998 I can only use 2A…. Nema23 is 2.8A per phase…. another compatible driver????

    Thanks for all
    great project!!!!!! works fine!!!

    • The A4988 will driver the 2.8Amp steppers. The next bigger step is to get external drivers like Gecko drives but they are very dear and might be an over kill. (The breakout pins on the left were designed for external drivers.)

  40. Pingback: Raspberry Pi Alamode CNC Controller -Use Arduino for Projects

  41. Pingback: Axis Motion: Design Choices II | CNC Design Blog

    • Hi Titus,

      The shield is a little more complex with it being able to control 3-4 stepper motors. Code wise its not that hard to control and will use similar code to the library you mentioned.(All that the codes does is sent an enable pin, direction pin and then toggles a step pin to create movement.)

      Sounds interesting :) let me know if you need help.

  42. I am not a technical guy. How do I connect this shield to the computer and how do I connect the steppers to the shield.
    I would very much appreciate a tutorial with the necessary info to assemble the whole thing.

    • Hi Ed. I would start by paying around with Arduino’s. Once you understand how they connect to your computer it would make much more sense.(They just plug into your computer like a printer via USB cable). My little shield/board plugs into the Arduino Micro Controller. On top of my shield/board are headers to plug in stepper more to drivers made by a company called Pololu. The Stepper motors them self plug into my shield/board. From there all you have to do is open up a serial terminal app like putty or even better with GRBL you can use Universal G-Code sender that will allow you to easily connect to the CNC board. Hope this helps. There are also plenty of tutorials online, just google GRBL or shapeoko .

  43. i am interested in using this and i am willing to beta test it. my big easy drivers keep burning out and im sick of wasting money so you just might have an answer. at 2 amps this should easily run my steppers. correct me if im wrong but i believe it states that your board runs at a max of 35v? thats plenty for me but i was wondering if it can go higher? (my psu is a 50v 1.5A) if not it is fine. i will just step it down a bit. this is a cnc im using for a school robotics team so a quick reply is requested.

    • Hi Joshua, the rated voltage on the board is for the supported Pololu A4988 drivers that can take a max voltage of 35v. ITs likely that you are supplying your Easydriver to much voltage as they are rated up to 30v.

  44. Hey!

    I’m trying to install a micro servo on a CNC shield V 3.03, But I do have a problem, I don’t know where to put the 3 pin connector on the board? I’ve already watched some youtube vids to get to know some of the basics, however our main problem is where to connect the signal wire. Could you help me out?

    Thanks in advance!

    • GRBL is the software I use with the shield and it works with Stepper motors instead of servo’s. I would suggest this shield if you want to drive servo’s ->

  45. Pingback: [News & CNC] Elle est enfin là (et ça promet du lourd) | Skyduino - Le DIY à la française