Picture of Raspberry Pi Alamode CNC Controller
CNC Diagram.jpg

This is my first attempt at an instructable. I hope it helps someone else.

Switches and Lights and fans, oh my...

Please read through the comments for more details.

I bought a CNC machine some time ago and I was never happy with it. It used a traditional parallel port controller and of course no modern computers have those. So it was always a point of frustration. I used an old Pentium based computer and ran LinuxCNC on it for a while but was still not happy with that. So I started looking for another solution. I decided that I would try to put together an Arduino based controller and try to use USB to communicate with it.

After studying that for a while I came to realize the Arduino was just not going to be able to do all that needed to be done on its own. The Arduino UNO just does not have enough memory or processing capacity to process a design file by itself. So I modified my solution and started working on using a Raspberry Pi as my host computer.

I created a Visio drawing of what I intended to do: It didn't turn out that way and the drawing continued to evolve as I learned more. It kept on changing until I finally got my project completed.

I have now built an Arduino based CNC Controller system that uses a Raspberry Pi as its host computer. The Raspberry Pi processes an "nc" file that contains a design that is described in GCode commands that can be understood by the Arduino. I have used a few tools on my Windows 8.1 Pro laptop to design a few simple things (like tutorials in makercam here: http://www.makercam.com/). This is a great introduction to designing things for CAD/CAM and it is really easy to use.

After creating a design that I wanted to use I wirelessly connected to the Raspberry Pi using WinSCP to transfer design files to the Raspberry Pi. You can get WinSCP here: http://www.soft-now.com/listing/123823/WinSCP?did=11055&pid=1&ppd=search,44532390848,winscp20download,e,,c,0,,,&gclid=CJuIkNHds74CFagWMgodpxMAJw. Its great, you can just drag a file from one window to the other to move files between systems. You will have to know the IP address of your Raspberry Pi to connect to it. If you have gone through the initial setup of the Raspberry Pi and setup a network connection you can get the IP address by using the ifconfig command on the Raspberry PI. A really helpful tool for getting your IP address and seeing that your Pi is online is a tool called the Advanced IP Scanner here: http://www.advanced-ip-scanner.com/. Another great tool is Wireshark: http://www.wireshark.org/

I then used Remote Desktop Connection (Remote Desktop connection is part of Windows and should be on your Windows machine. It can be run by entering mstsc in the Run Open: box) to connect to my Raspberry Pi. Otherwise you could use VNC or TightVNC: http://www.tightvnc.com/. TightVNC is what you need to put on your Raspberry Pi to allow you to use Remote Desktop Connection from another machine. I can now run the Grbl Controller on the Raspberry Pi which in turn connects to an Alamode (an Arduino like board that plugs directly into the GPIO connector on the Raspberry Pi and provides automatic voltage level translation. So that the Arduino can communicate with the Raspberry Pi directly. The Alamode also provides Arduino headers to allow for Arduino shields to be plugged directly into it. So I ended up with a stack of three boards that are tightly integrated due to being plugged directly into each other. The Alamode (Arduino) processes the GCode commands from the Raspberry Pi into signals that are sent to the CNC Controller shield to run the stepper motors and passes the various function signals on to the CNC Controller shield too. They can then be accessed from the external world. All is well so far... But now I have to connect these things to the external world.

1-40 of 156Next »

This is, without a doubt, one of the neatest, best-looking wiring harnesses I've seen on Instructables in a long time.

cdtaylor51 (author)  AJMansfield6 days ago
Lawrence931 month ago

Hi cdtaylor, how did you wire the 8 pin aviation plugs? i cannot find a solution for both sides, sorry for the silly question.

cdtaylor51 (author) made it! Lawrence9313 days ago

Here is the graphic showing how the aviation plugs are wired.

Connector Diagram.jpg
cdtaylor51 (author)  Lawrence931 month ago
Please take a look at images that are attached to the comment dated May 24, 2014. There is a key in the upper right corner of the wiring diagram showing which wire I attached to each pin on the connector and what each wire is connected to. I am not at my computer and cannot attach the image again at this time. I used wires the colors I have indicated. It is best to attach the center wire to the connector first after that it really doesn't matter just stick with the color code the rest of the way around. I used some twisted pair shielded wire that I had for the limit switches. There is a limit switch at each end of travel on each axis. So there are two switches or four wires for the stepper motor and two wires each for the limit switches for a total of eight wires. Just remember that you are connecting these wires between the stepper motors and the stepper motor drivers - it is very important that you get them connected correctly or you could damage you drivers and your motors too. I made a little tester with an led for each wire to make sure that the cables worked correctly before I installed them in the box. I hope this helps.
OrozcoJ22 days ago

Just wanted to lead you know I enjoy reading your material and I'm going
to try my own control following your model, I thing I´m goint to try
the protoner raspberri pi CNC and see how it goes.

Thanks for sharing and inspire!

cdtaylor51 (author)  OrozcoJ22 days ago
That's great. The Alamode board made everything go together so nicely. I know there are other solutions out there that do the signal translation too. Don't really know much about them. I can tell you that the Alamode board does work as advertised and so does the 100% GRBL Compatible CNC board. Good luck with your project and thanks for your comments.
brightled2 months ago
Hello, For the last 4 years I have been running a desktop cnc machine using an arduino due with atmega328 loaded with GRBL,now my machine originally came with a parallel port connector and all I had to do was wire the step and dir pins from the arduino to the driver board that came with my machine and load GRBL controller into my computer and it worked perfect ,for the drawing part I use corral draw and save as DFX or BMP,then I use Fengrave and/or potrace to convert my drawing to gcode,the code is than checked with notepad and loaded into GRBL controller or gcode sender and press run,I do not use a dongle as the screen controls work perfect.My control computer is an old xp machine.....WCH I think you did a lot more work than necessary....WCH
cdtaylor51 (author)  brightled1 month ago
What does WCH mean? I am also a bit confused by the succesive periods. An ellipsis is usually three periods in succession. I am not sure what you are trying to say.
cdtaylor51 (author)  brightled1 month ago
Ok, I guess. Thanks for looking at my instructable. Perhaps you should publish one youself - if you haven't already. I started with a concept and a clean slate. What is in my instructable is what I came up with. Take it or leave it or whatever. You might read through the comments. They contain a lot of information too. I specifically did not want to dedicate an external machine to run my mill. So that drove some of my design criteria. My machine is wireless now and I like it that way - and apparently so do a few others. It's easy to critique other peoples work. I am trying to encourage others to try new things too and I am willing to allow their enthuasim and their comments. This was never about the cost or the part count or even the wireing. It is about helping others to just see what I did and tell them a bit about how I did it. Hopefully, at least a few others have been inspired to do something their own way - with maybe a few suggested improvements along the way.
mark.buttle1 made it!3 months ago

Hi Great machine - I'm doing very well on the final stages of my machine following a very similar pattern to you. Using a Raspberry Pi - Arduino UNO and CNC Shield with A4988 driver and NEMA 17 motors.

I have a question before I turn all my kit on - its about the 4 wires going into the A4988

You have the following 4 wire colour coding

Pin 2B = Black +

Pin 2A = Green -

Pin 1A = Red +

Pin 1B = Blue -

(+ - + - )

However - I have seen someone else wire it

Pin 2B = Red +

Pin 2A = Blue -

Pin 1A = Green -

Pin 1B = Black +

(+ - - +)

I know keeping the pairs together for each coil is important but is the - + as important as I'm seeing many different ways to wire these A4988?

Any advice much appreciated.

The other bit of advice is what is the best way to calculate and set the max current of the A4988 I have

JKM NEMA17 Two Phase Hybrid Stepper Motor 78 Oz-in/48MM/1.8A Motif motors and again finding different calculations and formula - what did you use please?


Hi Mark, congrats on your project? I'm doing basically the same thing but I'm new to this. Would you mind answering a couple questions that might help me get through mine?

did you have all of your boards assembled...the pi, the uno and cnc shield before you started loading all of the software, or did you load the pi, save, shut down and then put the boards together before transfering data to the arduino? What link for loading the boards did you follow? I'm using an alamode/arduino board as per this instructible and performing the steps on the zapmaker link to load the software, Grbl and cnc files and have been having all kinds of trouble getting through it. I'm not sure what I'm doing wrong.

cdtaylor51 (author)  JohnM573 months ago
Not addressed to me but on my Instructable. You really need to following instructions on the Alamode site here: http://wyolum.com/projects/alamode/

I didn't put the CNC Controller board on the stack until quite late in the project. Except for test fitting it. Didn't get driver boards till later on either. But neither of those itemshas much to do with getting te software working either.

Hope this helps. Make sure you go through the web pages for the CNC Controller too.

what did you use for labeling on your enclosure?

Thanks, I have it running the grbl now. Had to combine some of the commands I got off of Wyolum and Zapmaker. I think it was the later model pi I'm using. I left the alamode connected through the entire process. I added the cnc shield after everything was loaded and like I said its working now. Thanks again for your help... i'm sure I'll have more questions later.

cdtaylor51 (author)  mark.buttle13 months ago

Congratulations on building a really nice project. Your project is larger than mine is. What do you anticipate making with it? One thing I thought about while looking over your pictures is that with that heavy spindle you might want to use two motors on the axis that moves the spindle. That is really easy to do with the CNC Controller shield that I used. Not sure if you used the same shield or not. I really like the LCD and that illuminated switches. One other switch that you might want to consider is an emergency stop/kill switch just in case something goes wrong. Some people have built what they refer to as a "pendant" for that purpose and to have a means of directly controlling the system too. I am thinking about doing that just for the experience of being able to used it. Otherwise, what a great project. I would really like to see it in action. Thanks for your comments and interest in my project.

Thank you I'm pleased they way it's going.
I'm planning on using it for most of my DIY woodworking projects - and thought I could use something like PhotoVCarve making presents for family. I also have 3 children and thought I could get them into CAD and CNCing!

The motor on the Z axis is being replaced with a bigger stepper - however with the balancing and easy of movement on that axis I'm surprised the pilot .350 amp stepper moves it really well.

BIG RED EMERGENCY button is a must and will be fitted before I turn all on.

Not sure if pendant is the same thing as what I'm thinking but was trying to think of adding like a small joystick to control the axis's like to find 0,0 of work - what's a pendant?

I'm using the v3 Andruino CNC Shield from Hobby Components
I'm having issues with getting the end stops to work I got basic open switches - I don't think it's the switch or wiring personally I think it's the GRBL Controller config but when I set the Boolean to 1 on the hard limits $21=1 it errors about homing and sets it back to zero. Not played with it much yesterday but will try again later on and see what's it's doing.

Thanks for your quick and helpful responses
cdtaylor51 (author)  mark.buttle13 months ago

Thanks for looking over my project. I think that the best thing for you to do about the stepper motor wiring is to read through the page for the part and read the FAQ page that is mentioned on the Pololu website for their Allegro’s A4988 stepper motor driver carrier.


There is a very good and thorough video about how to set the current limit for the motor drivers on the product page above and I encourage you to watch and go through the steps carefully as is done in the video.


The wiring is explained on the FAQ page in detail as is a procedure for setting the current limits for your motors. The pairing of the wires with respect to the winding is really important (meaning: if you get it wrong the motors will not turn or worse you may damage the driver and the motor).

I attached two pictures. In the first one you can see that I used keyed connectors for the stepper motors cables (the white connectors). In the other picture you can see the order of the wires that I used. Mine are wired Blue(1B), Red(1A), Green(2A), Black(2B). I have not looked at my controller for some time as we have moved and other things have taken priority. I looked at my controller to be sure. I miss wired the blue connector for the Z-Axis. I have now corrected that. If you look at the Allegro schematic for the A4988 that should clear it up. I had to rebuild that cable when I changed the order of the of the cables to match the correct color code. No camera at present or I would add a corrected picture. I will try to add another picture when I get my phone back. Sorry if my mistake caused any confusion.

JohnM573 months ago

Of all things, I'm having a very difficult time setting up my Realtek wireless module.The instructions that came with it instructed to download and exe setup file and the raspberry won't open it. It directs me to the raspberry site. Could use some assistance. Thanks

cdtaylor51 (author)  JohnM573 months ago

My original Wi-Fi dongle is a D-Link DWA121. I plugged it in and it worked right away. I am not sure that I did anything to get it working at all. I just purchased four other dongles and I am in the process of rebuilding the kernel for the second time trying to get this thing to work. The DWA121 is based on the RealTek chipset the new ones I bought are based on the RALink chipset. You might want to go and take a look at the supported devices list on the RPi site to reduce your problems with getting your device to work. Thanks for looking at my project. I think you will have to go to the manufacturers site or search for an answer on the internet.

cdtaylor51 (author) 3 months ago
A pendant is a sort of remote control to "manually" control a machine. I have seen wired as well as wireless pendants. Custom made and purchased ones. I have also seen a game controller used as a pendant. Some have displays and some don't. Google CNC PENDANT for more info... Thanks for posting.
VidurM13 months ago

Hi cdtaylor, this is probably the most advanced instructable ever... I wanted to ask however....
in your raspberry pi are you creating drawings for each part?
is there a way to interface or import AutoCAD models into the Pi??
Or going further what about importing/converting 3D files directly?? Something like a Step file or some such.... That would have some incredible applications...
Thanks any comments by you will be much appreciated!!

cdtaylor51 (author)  VidurM13 months ago
The only software running on the RPi is the grbl controller. It has specific requirements of what is in its input. I would like to refer you to the grbl wiki for more information about what it can accept. For me sometimes I have more than one file to make a part. For example a Printed Circuit Board might have a trace isolation file, a hole drill file and a router file to remove excess material or to cut the perimeter of the board.
mark.buttle13 months ago

Here is a couple of pics of my plywood DIY CNC Router rig - I've just got a couple more tweaks and bits to make - then its wire it all up so any advice on my previous post would be most appreciated - however no rush as I'm waiting for a nema 23 L bracket to arrive before I can actually finish and turn it on.

Thank you

ZdravkoP3 months ago
I am interested to make such controller for 250T metal press?
cdtaylor51 (author)  ZdravkoP3 months ago
Not sure if you are asking a question for me. If you make post a picture and tell us about it. Good luck with your project and thanks for your comment.
JohnM574 months ago

Thanks for you response. My machine is simiIiar in table design to a plasma, or router CNC except it is being used for pressure testing of foam materials. That's why the Z axis is just a actuator with a load cell. The table moves to a location and then the actuator drops to mutliple depths while the load cell readings are recorded. I was expecting that the drivers and power supply would be outside of your enclosure design and in a separate one. Ultimately, I'm wanting to input the control signal into my set of drivers. It seems like this should work. The signal going to the driver should be the same regardless of the driver correct?

Can you tell me what value your current limiting resistors are and also the model of your fans.

cdtaylor51 (author)  JohnM574 months ago
I believe that you are correct about there driver signals but you need to confirm what your particular drivers are expecting. The current limiting resistors for the leds are about 500 Ohms. Just check out an led resistor calculator on the internet and decide how much current you want to light up the led and the led calculator will give you the value of the resistor to use. I didn't want leds to be very bright and I want them to last a long time so I used the resistors that I used. You might want the leds to be brighter or less bright. I would suggest that you use a breadboard and try some different resistor values and see what you prefer. I hope this helps.

Your input is a great help, Thank you! I have about 1/3 of the compnents in. I didn't realize the CNC shield had to be assembled, but the supplier sent the link to the assembly instructions so I'll be ok. Adafruit was an awesome find! I really like their approach to marketing their products by educating their viewers on their products and applications. Great for novices like myself. Since I started this project i'm fiinding all kinds of educational stuff on youtube, and the raspberry pi site as well!

cdtaylor51 (author)  JohnM574 months ago
No problem. I would like to see a picture of your build when you get it finished.
cdtaylor51 (author)  JohnM574 months ago
The model number of the fans is in the parts list that I posted in response to a previous comment. Nothing special, just 40x40x10 mm 12VDC case fans.

That is an awesome CNC controller and your wiring is perfect! Thanks for the explaination..
How do you find the grbl controller software? have you compared it to something like LInuxCNC or Mach3/4? Also this would work with a larger stepper motor driver for the likes of a Nema23 or 34 right? or is the output voltages not enough to fire the drivers? Thanks!

cdtaylor51 (author)  troy.dawson.779855 months ago
Thanks for the feedback. You can just Google for grbl and then read the Wiki pages for info on grbl. Grbl is available on github. As for larger motors: the grbl controller board is designed to handle 12 to 36 volts (you would want to read their pages too). There are a few different Pololu stepper driver modules that you can use at different voltage and current settings. Of course you would need to modify the wiring and perhaps provide better cooling if you used different power levels than I did. Just changing the power and the driver modules would be pretty easy to do. My build just used 5 volts and 12 volts. To use 36 volts you would have to bring 36 volts in from an external 36 volt power supply to the CNC controller board and you would need to replace the stepper driver modules with appropriate 36 volt modules. I also used 12 volts for my spindle functions. You may have different requirements than I have.

This is really an awesome CNC project. Thank you for sharing all of this hard work. I'm working on a 3 axis gantry style CNC project now and have been thinking about how to use your design. Instead of a spindle on the z axis i'm using a actuator powered with a servo motor (so I'm not needing any relays for spindle speed, direction or coolant since there is no spindle motor), and stepper motors for the xy. A load cell is set on the end of the actuator. I'm looking to use nema 34 steppers with R1025 drivers. I'm still researching the servo for the Z axis since I need more torque for the actuator. Any thoughts or suggestions?

cdtaylor51 (author)  JohnM574 months ago
Thanks for your interest in my project. There are a lot of things in my project that might be applicable to yours. However it is clear that your project would not fit into a small enclosure like mine did. As for the z-axis, you might be able to use a rotory solenoid actuator to get higher torque. I don't really know what you are doing so I can't really say that would work but it might be worth looking at. Thanks again for your comments and questions.

Sweet Thanks for the reply. I know I would need to use external motor drivers. But I wasnt sure if it works as a relay and therefore could be driven by a lower voltage or if I need to run the actual voltage through the board.

My requirements are to convert a Optimum BF20L Mill which would require Nema34 motor and 2 Nema 23 motors. But the raised voltage may mean I need to use a conventional board as opposed to a GRBL/Arduino setup.

cdtaylor51 (author)  troy.dawson.779855 months ago
You could certainly try using a CNC controller just like mine if you wanted to. As I mentioned previously you would need to provide the right voltage for your motors but there are driver modules that can handle up to 36 volts and 2.2 amps per coil. You could try that and Grbl if you wanted to. If it's too much then you could do something else and still have this controller as a backup or to test with or to use on another project. Personally I think my CNC controller would work (use the 8825 drivers at the correct voltage for your motors and leave the top off of the box until you understand the thermal issues). Alternatively, you may need functions that are not available in Grbl. So you might want to go with Mach or EMC or LinuxCNC or something else and that would mean that you wkuld not be able to use this controller. By the way, I really like the mill you chose. I would suggest that the first thing you do is install a good Digital ReadOut (DRO) on it. Then learn to use it manually. Then upgrade it to a CNC controlled machine. Make the parts to adapt it yourself. Learn all you can about using the machine first. Then you will understand what happened and why it happened when something goes wrong and you will be able to compensate for that intelligently.
cdtaylor51 (author)  cdtaylor515 months ago
Check out this site for a great DIY DRO project:
mark.buttle15 months ago

This is an awesome CNC controller - thank you for spending time and effort sharing the results in such great detail.

I too am going to make a similar CNC controller and if possible would like to know a bit more about your S port and the relay(s) you used and how you have them wired in.

cdtaylor51 (author)  mark.buttle15 months ago
I am not sure what you are asking me here. I reread what I wrote and I don't know what else I could add to that. Here is where I got my relay modules: http://imall.iteadstudio.com/im120710007.html.

They are just relay boards that are controlled with 5 volts and can switch up to 24 volts DC or 120 volts AC. You can get more information on their Wiki page here: http://wiki.iteadstudio.com/5V_Relay.

I replaced the 3-pin header on each module with a polarized locking connector that I had.

As I said, you can do whatever you want or need to do with the relays. I connected them to the functions that are broken out on the CNC controller board. If you needed to do something else then you certainly could but I believe that those are the functions that Grbl is expecting. You could also connect any of the relays to an external solid state relay to control a higher power device.

One thing that I do not yet understand is how to deal with variable speed spindles. The connector that I used for the spindle functions has eight pins, and I used six, so adding additional functions or features should not be too difficult. But I don't know how the Grbl guys are going to bring that function out yet either. There are new versions of things all the time.

I hope that this is what you wanted to know. Thanks for your comment and for reading about my controller.
1-40 of 156Next »