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

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: 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:,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: Another great tool is Wireshark:

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

Remove these adsRemove these ads by Signing Up
1-40 of 97Next »
DanB710 days ago

Cool!...I multiplied every long word by 10 minutes as I read....Impressed but I think I have to find a quicker solution - I have only so many years left and need to get my project up and running too......I am working backwards from the steel frame.....and have a long way to go (further now than I first envisaged..;-).) But thank you especially for your organisational skills.....

cdtaylor51 (author)  DanB710 days ago
DanB7 - I am not sure what you meant with your first sentence, maybe you could clarify that and then I might be able respond. if there is anything that is mot explained well enough let me know and I will try to help. Not sure what the second sentence means either. I guess you believe that my instuctable is too long. Working backwards from a steel frame might mean that you have a machine with a steel frame and you are now looking for a controller for it but I am not sure as the context does not provide any way to know for sure. If that is the case then you could simply purchase a CNC controller system through ebay or elsewhere on the Internet and completely skip building your own. This instuctable is my first attempt to put something like this together. It was meant to help others who might want to do something similar and it is just the way I did it and did not intend to restrict anyone from doing something differently. It also shows some of the prototyping techniques that I have learned and used over the years. My hope was to help others to raise the quality of their projects to a higher level that they would be happier with. I am still learning too. When I read through an instructable about something that I have not done before I always learn about things that I previously did not know. Sometimes the learning curve is high and it is difficult to understand. I am always grateful to learn more especially about things that I knew nothing about before. I hope that my little instructable has added a bit, and elevated the journey's of, the more than 100,000 people who have read it. Thanks for your comments and just ask if I need to explain something better and I will do my best to do so. Please be as specific as possible and I will do the same.
I am in awe at your knowledge, learning and application. You must have spent a long time on it. Your clear words must have been magnified 10 fold in the actual application of your knowledge. I am very impressed by your result but doubt I could emulate it and may have to initially think "simple" to start with.
cdtaylor51 (author)  DanB79 days ago
Well DanB7, I believe you could do this too. Just take one step at a time. Get all of the parts and tools that you need and take you time. I recommend that you start by getting the software working on the Raspberry Pi and the Arduino/Alamode. Then add on the 100% GRBL Compati le CNC Controller. At that point you could temporarily attach you stepper motors and verify that everything works as it should. Then you can start thinking about packaging everything. Thatis really what instuctable is abou. Use expandable sleeving to bundle wires together in a logical way. Expandable sleeving needs to be cut with a hottool to melt the fibers together but further you need to reminate the expandable sleeving with heat shrink tubing. That will help to hold the sleeving in place and protect the ends too - it also looks better. You need to be careful though because you can easily melt the pin housings by getting them too hot (read, voice of experience here). Putting the holes in the box and making the carrier plate were the hardest parts because I had to do those things by hand with my Dremel tool. Read the other commentsfor more info about that. I am sure that youcan do it. Thanks fir your comments.
cdtaylor51 (author)  cdtaylor519 days ago
I read my reply twice to make sure there were no typos, etc. Then posted and read again and there are typos. What can I say?
dgaynor1 month ago

Why didn't you use the 12-36V stepper power supply on the GRBL board? Aren't the stepper motors going to be under powered now?

cdtaylor51 (author)  dgaynor1 month ago
My stepper motors are all 12 volts and so is my spindle. Changing the wiring for other voltages would be pretty easy to do and the CNC Controller board is already able to handle 12 - 36 volts.
branilson2 months ago

Very nice and organized assembling. Congratulations!.

Today with the the new raspberrry Pi B+ with more GPIO lines, i am thinking in use the raspberry to control the drivers directily. I think in use some kind of simplified version of linuxcnc to run into the raspberry pi.

cdtaylor51 (author)  branilson1 month ago
Using the RPI to directly drive the stepper motor drivers should be possible. You would need to use a real time operating system and some custom programming to do that. You would also need to provide some sort of mechanical and electrical interface. The RPI is a low voltage and low power device whereas the steppers are higher voltage and higher power. It could be done and would be a great project but it would also be a lot more complicated than what I did. Good luck, if you decide to do it. I would be interested in seeing how it all came together if you do it.

Hi Chuck,

Very impressive project; I am contemplating a CNC setup myself and I am very interested to hear how your new control setup is working out.



cdtaylor51 (author) months ago
As I mentioned in my previous replies I recently moved and other things have taken priority for a while. I know my controller works as i have tested it but my milling machine is a different matter. I have to custom create some parts to get it back together. It will take me some time to get there. Thanks for your feedback.
Festrada0073 months ago

Really great job, what I would find most useful is where you got the software, how you installed it step by step. That would be truly needed information, as the stuff I am finding is a few years old and the links are old and broken. Thanks!

cdtaylor51 (author)  Festrada0073 months ago
Thanks for your feedback. It took me a while to find everything too.
The i love the way you put it all in a nice box. Its beautiful. It brought a tear to my eye. :) i was able to get GRBL working on my pi and loaded on my Uno. Now if i can make something half as nice as you did ill be happy.
cdtaylor51 (author)  Festrada0073 months ago
Thanks, I am happy to have helped.
jetxu20144 months ago

you can try to use the Banana Pi, i think it will give you suprise. you can know more from:

cdtaylor51 (author)  jetxu20144 months ago
I read about the BananaPi before but thought it was a bit too new and not stable yet. Maybe it would be good in a future project. Thanks for your feedback.
skaufman35 months ago

You wouldnt happen to have a parts list for this design would you?

cdtaylor51 (author)  skaufman35 months ago

No I didn't but I put this together... Hope it helps... Took a while to find everything again.

Step 1:



Advanced IP Scanner:



Grbl Controller software
for Raspberry Pi

Step 2:

Grbl compatible CNC Controller shield

A4988 stepper motor driver


Heatsinks For Stepper Drivers:

3 x Aluminum SMT Heat Sink -
0.4"x0.4" square[ID:1042]

Step 3:


Step 4:

Raspberry Pi Model B 756-8308 Raspberry Pi B

M3 Nylon Hex Spacers Screw Nut Assortment Kit Stand off Plastic Accessories

I replaced most of these with brass.

Raspberry Pi Premium Aluminum Heatsink Kit

Super Glue – I already had

Step 5:


Acetal Sheet:

Sheet,Acetal,Wh,1/8 In T,12x12 In

40mm, 12 VDC, fan:

Gino DC 12V 0.1A 40mm x 40mm 2 Pin
Connector PC CPU Computer Case Brushless DC Fan

Black Plastic Fan
Grill for 40x40mm 40mm 4cm AC DC PC Fan New

5pc Plastic Fan
grill for 4x4 4x4cm 40x40mm AC DC Fan Taiwan

Inlet vents with filters:

EverCool FGP-40 40mm Plastic Fan Filter & Grill, Black

Step 6:

5×New Aviation Plug 8-Pin 16mm GX16-8 Male and Female Panel Metal Connector

I painted bands on
the connectors with model enamel that I already had.

Expandable Sleeving:

- choose the length.

Hookup Wire Assortment 6
x 25 ft. spools of #22 gauge solid, insulated copper wire


1 x Hook Up Wire Set, 24AWG SOLID CORE,
UL / CSA, 6 x 25 ft spools, Black/Red/Yellow/Green/Blue/White (KCW803-STD)

Heat Shrink Tubing

Crimping Tool:

1 x #1928 Crimping Tool: 0.1-1.0 mm² Capacity,
16-28 AWG


1 x #1930 Female Crimp Pins for
0.1" Housings 100-Pack

1 x #1931 Male Crimp Pins for
0.1" Housings 100-Pack

10PCS 2.54mm 2 x 40 Pin Male Double Row Right Angle Pin Header Strip


1 x #1900 0.1" (2.54mm) Crimp
Connector Housing: 1x1-Pin 25-Pack

1 x #1901 0.1" (2.54mm) Crimp
Connector Housing: 1x2-Pin 25-Pack

1 x #1902 0.1" (2.54mm) Crimp
Connector Housing: 1x3-Pin 25-Pack

1 x #1903 0.1" (2.54mm) Crimp
Connector Housing: 1x4-Pin 10-Pack

1 x #1910 0.1" (2.54mm) Crimp
Connector Housing: 2x2-Pin 10-Pack

1 x #1912 0.1" (2.54mm) Crimp
Connector Housing: 2x4-Pin 10-Pack

1 x #1913 0.1" (2.54mm) Crimp
Connector Housing: 2x5-Pin 5-Pack

1 x #1921 0.1" (2.54mm) Crimp
Connector Housing: 2x12-Pin 5-Pack

1 x #1918 0.1" (2.54mm) Crimp
Connector Housing: 2x16-Pin 5-Pack

2 x
USB DIY Connector Shell - Type Micro-B Plug[ID:1390]

Polarized Axes Connectors

4 - PRT-08231 - Polarized
Connectors - Header (4-Pin)

4 - PRT-08097 - Polarized Connectors
- Housing (4-Pin)

4 - PRT-08100 - Polarized
Connectors - Crimp Pins

2 - PRT-11417 - Arduino
Stackable Header Kit - R3

Step 7:


E-Stop or Arduino Reset (Red)

x 16mm Illuminated Pushbutton - Red Latching On/Off Switch[ID:1442]

Abort Reset (Yellow)

x 16mm Illuminated Pushbutton - Yellow Latching On/Off Switch[ID:1444]

Pause / Feed Hold (Blue)

x 16mm Illuminated Pushbutton - Blue Latching On/Off Switch[ID:1476]

Cycle Start / Resume (Green)

x 16mm Illuminated Pushbutton - Green Momentary[ID:1440]

PowerWerks PowerPole connectors can be found here:

Mount for 2 Powerpoles Sets (4 conductors) (Configuration: Unassembled)
Color Powerpole Connectors Kit (Size: 15 Amp, 16-20 GA)
the ideal Powerpole Crimping Tool for 15, 30 and 45 amp contacts
Powerpole Removal, Insertion/Extraction Tool
SNAP-IN PLUGPowerpole Pak Connector; 4 Pole; Snap-In Plug; 30 Amps

Retaining PinPower
Pole, Retaining; Thermoplastic; Black; UL Recognized, CSA Certified
Connector Housingconnector,
housing only, yellow
Connector HousingPowerPole Housings; 2200; UL94 V-0, Black
Connector HousingConn; Rect; High Current Hsg; PP15/45 Ser; Powerpole;
Red; 15A; 600V; Bulk

Emergency Switch:

Step 8:

SN7404 Hex Inverter- I already had some of these

Four Current Limiting
Resistors- 650 Ohms - I already had
some of these

Adafruit Perma-Proto Half-sized Breadboard

Step 9:


Mini 3 Port USB 2.0 Rotate Splitter Adapter Hub for PC Laptop Notebook

Miniature Keyboard

Mini 2.4GHz Wireless PC / Tablet Keyboard Designed for SmartStick

Brick - 5V Relay

Wireless Network Adapter
- I already had a few of these

EdBet6 months ago
There is not much more I can add to what has already been stated, GREAT JOB. I am retired and living in the Philippines and in the process of developing a Maker Space for all the kids in the family, including my grandson. I have ordered a 3D Printer and parts for a CNC Router from OpenBuilds for my workshop and am glad I waited to order the controls. I just placed the order for the controls based on your instructable and hope it will be as easy as it looks. Have you used the controls for a project yet and how did it perform? Do you think a Beaglebone Black or a PCduino would work as good or better than the RPI? I already have a RPI and was just wondering. I sure hope when I am done the kids will learn something using the Maker Space.
cdtaylor51 (author)  EdBet6 months ago

I tried to respond to you previously but my computer hiccupped and I lost my response twice.Thanks for looking over my build and thanks for commenting on it too.I lived in Cavite City outside of Sangley Point Naval Station for my last two years of high school.I really enjoyed living there and will never forget it.I have not used my controller to make anything yet.I have tested it though and everything works as expected.I built a small tester to check that my stepper motor cables are constructed correctly.It is pretty simple.One LED for each wire.Push a button and all of the LEDs turn on.If one of the LEDs does not light
then that wire has a problem.If all of the LEDs light then all is well.I also
built a connector with three LEDs on it to test the spindle connector.I am able to turn on the spindle, set the direction and turn on the cooling circuit with M codes from the RPI.I also plugged a stepper motor into each of the stepper motor connectors, one at a time, and tested that I was able to send commands from the RPI to the motors. I am able to run the motor in both directions on each of the axes.It all works as expected.I have seen the BBB and PCduino approaches
too.I wanted to make a simple CNC controller that did not use a parallel port connection.As I mentioned, I originally thought of using a USB connection but as others have pointed out and I believe too, the USB is not a real time bus and therefore is not suitable for directly controlling motors in real time.The Arduino is
great for controlling motors. It is cheap and easy to use.Grbl is available for the Arduino and the Grbl Controller software is available for the RPI.You certainly could use a BBB or PCduino as a host computer just like I used the RPI.But then you might want to look at LinuxCNC instead of Grbl.I thought that the other approaches were a lot more involved and that going with the Arduino (Alamode) and RPI was just an easier thing to do.

vincent75206 months ago

Beautiful construction …

cdtaylor51 (author)  vincent75206 months ago


daemonic6 months ago

Very nice build and great attention to detail, love the colour coded sleaving :)

Can i ask where you sourced your illuminated switches from?

cdtaylor51 (author)  daemonic6 months ago

Thanks. I got the switches from Adafruit.

try this for switches too

cdtaylor51 (author)  michaelmacnz6 months ago

Thanks for the pointer to Alibabas site. As it turned out the switches that I had from Adafruit (probably came from Alibaba in the first place) worked the way I needed them to work. The LED in the switch is independent of the switch. So it can be set up by external circuitry to illuminate under any condition that is desired. In this case the LED needed to turn on when the voltage on the function pin went to ground. LEDs won't work that way. That is what required me to use the Inverter circuit so that I could have the drive current needed to illuminated the LED. A switch that has the LED tied to the function of the switch won't work because when the switch is taken to ground then there is no drive current on the other side of the LED. As I mentioned, the function pin has a pull up resistor on it inside of the chip and so it is pulled up to near Vcc. The input to the inverter is wired to the function pin and is held high by the pull up resistor too. Pushing the switch pulls the function pin low by connecting it to ground (along with the input of the inverter) that causes the output of the inverter to go hi or close to Vcc (+5VDC) and the LED lights up. Releasing the switch removes the ground and lets the pull up resistor take the function pin (and the inverters input) back up to Vcc and LED goes out.

LED Schematic.jpg
michaelmacnz6 months ago

Wow... so well laid out -- thought out and executed.. well done

cdtaylor51 (author)  michaelmacnz6 months ago


ninjanody6 months ago

One of the best projects in this category i had ever seen.

I must finish mine custom arduino shield for easydrives sometime. :)

cdtaylor51 (author)  ninjanody6 months ago


gumby_kevbo6 months ago
I have implemented a number of industrial control systems. No way do you want windows or even Linux trying to run a real time system. No way to know when exactly anything will happen. QNX, VLC, or TwinCAT can do it no problem. The last two basically rootkit windows, and will keep running fine even if (when!) wibiws bluescreens.

But even then, 5-6 years down the road, the PC dies and is totally obsolete, and nothing you can buy now will work. (Comm ports, windows version, etc etc.)

With a cheap custom controller as in this 'inlet, you can set a lifetime supply of spares on the shelf for $100 or so, and keep your system ticking without ever having to re-do it.
cdtaylor51 (author)  gumby_kevbo6 months ago

You have made some really good points here. Most people are not really very familiar with realtime systems - if they have even heard of them. I believe that getting a replacement for the RPi, if, or when, I need one should be pretty easy - I have two right now. You also have to admit that the way the RPi is supported is pretty impressive too. I feel pretty good about my controller project. Thanks for your comments.

TAWP Tool6 months ago

Chuck, your build is not only beautiful, it is very timely for me. I have collected all of the parts for my CNC engraver/light milling machine. I have many Arduinos and just purchased a GRBL shield. I hadn't considered using my RPi with this setup until reading your Instructable. Thank you for sharing your creation with us in this very clear and well thought out Instructable!

cdtaylor51 (author)  TAWP Tool6 months ago

Thanks for your feedback and good luck on your build.

I'm interested in CNC projects but know nothing about controllers (nor electronics in general). I echo TAWP Tool's comments on the beauty of this design. I was immediately struck by the attention to detail, the care in construction and the overall sense of order that you brought to the final project. Bravo! and I only hope I can pull off something equally as well executed on my own projects.

cdtaylor51 (author)  onesharp6 months ago

Thanks for your comment. I was once a novice at building electronic projects too - albeit that was a few years ago. I was hoping that I could share some of the things that I had learned to do along the way. It does take some pre-planning and thinking it through before you start. You can't completely do that but you can get a lot of general things in order before you get too involved with building a project. I would still do a few things differently but I guess that is just the engineer in me. Good luck with your build.

davisbr96 months ago

You don't need a serial port to run Arduino + GRBL. You can stream g-code direct to the device over a standard USB port, using something like gcodesender.exe or putty, etc. Streaming the gcode from your computer means you're using the existing RTC to help execute the code as well, so no on-board RTC is necessary. If you really wanted to get fancy, you could even build a cable to run it over the HDMI or Ethernet. No Serial needed!

Granted, to use Arduino + GRBL you're basically tethered to a laptop or something, but it's a really nice way to save a ton of money by not building a dedicated machine.

How is cooling in your enclosure? I noticed the fans are placed nicely, but I worry that the wiring and other guts interfere with efficient airflow. Have you noticed heat issues?

cdtaylor51 (author)  davisbr96 months ago

Thanks for your comments. I do not really understand your point in the first paragraph. However, there are some issues with trying to operate a real time system with a time slicing or multiuser system. Also, the USB bus its self is not designed to operate in a real time manner. I have read a lot about these things too. But I am sure that there is a lot that I do not know too. In the second paragraph the idea that I am working with is that I am using a Raspberry Pi - a $35.00 computer rather than a laptop as my host machine. I have a 16 GB SD card in it so it can hold some pretty big design files too. I really do not need to have a laptop or any external computer connected to my CNC Control System once the design file is being executed on the RPi. As for the cooling issue: I am not using any sort of direct display connected to the RPi so it doesn't have to work very hard and doesn't get very hot. I am actually running the fans on 5VDC rather than 12VDC right now. As I said, I have not seen any sort of heat issues yet. If I do then I can move the fans to the 12VDC bus. I am pretty sure that will suffice with the heat sinks in place too. I still have not run the system actually connected to my milling machine yet so I have not put any current through my stepper motor drivers yet. I still have more to learn and understand.

No worries, I'm building one using the Arduino method. But I have a spare laptop laying around. I'm not setting it up to run a design file from the MCU itself, since my laptop has the RTC and plenty of space. The gcode streamer takes care of the transfer, line by line, with an 8-line buffer. It's simple enough for a USB to handle.

I did some cost roll-ups of various options, and for me the Arduino + GRBL shield made more sense considering what I already had laying around.

My Pololu drivers run hot. I have to sink them individually, really well, or they shut down if not burn out. My system uses 12VDC motors rated for 750mA per phase, and my drivers are set to limit the output current to match that. They still get hot. My MCU doesn't heat up much at all.

A stand alone CNC control unit can be purchased on EBay for $80-$125, no stepper motors. RPi @ $35, Alamode adapter @$35, GRBL shield @$35, and drivers at $36 for 3: total cost is $141 without stepper motors.

I do LOVE your enclosure and wiring and buttons and connections, etc. I think packaging was great! I just don't see the cost advantage over either buying a ready-made control scheme or Arduino + GRBL (and a spare laptop).
1-40 of 97Next »