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 92Next »
dgaynor17 days 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)  dgaynor17 days 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.
branilson1 month 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)  branilson24 days 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) month 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.
jetxu20143 months ago

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

cdtaylor51 (author)  jetxu20143 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

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

vincent75205 months ago

Beautiful construction …

cdtaylor51 (author)  vincent75205 months ago


daemonic5 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)  daemonic5 months ago

Thanks. I got the switches from Adafruit.

try this for switches too

cdtaylor51 (author)  michaelmacnz5 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
michaelmacnz5 months ago

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

cdtaylor51 (author)  michaelmacnz5 months ago


ninjanody5 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)  ninjanody5 months ago


gumby_kevbo5 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_kevbo5 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 Tool5 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 Tool5 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)  onesharp5 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.

davisbr95 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)  davisbr95 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).
cdtaylor51 (author)  davisbr95 months ago

I understand your thinking but I didn't really do this to save any money or anything like that. I believe that most people spend more on hobbies than they actually need to because that is the nature of hobbies. I did this because I like building things and this just seemed like a great project that I could be happy with. There certainly are multiple ways to control a CNC machine. I think that my build is about as good as any other professionally built CNC Controller that I have come across and it is better than many that I have seen too. I also wanted a package that I could move from one machine to another if I wanted to. I might not move it around in the end. I might just make a new one for each of the machines that I am going to use - I do not have any spare laptops laying around. As I said, once the design is loaded on the RPi and started then I no longer need to be connected to the machine with another computer. If I build more of these then I could have multiple things being done on multiple machines at the same time. Each one completely independent of the other ones. I am happier with having spent a bit more money and built my own system than I would have been if I would have just bought a system from someone else; and I have learned a lot in the process. To me the CNC world is still a huge mystery to me and I am learning more about it all of the time. The same idea holds for the CNC milling machine that I bought. I tried to use it to make some printed circuit boards but the machine was just not accurate enough and when I tried to run a hole drill file after the circuit was engraved the holes did not end up where they needed to be. So I had to figure out what was wrong with my machine. I have done that and I am reworking my machine now to make it more accurate and more repeatable. Figuring out what was wrong with my machine and this project have been great learning experiences for me. What is that worth? To me it is worth a lot more than the difference between the price of my controller and a cheap controller from eBay or the difference in price between my machine and a much better machine like the Shapeoko 2 kit. The learning experience has been the driving force behind this project for me. Plus, I just love this stuff...

urant5 months ago

One word


cdtaylor51 (author)  urant5 months ago


3rdpig5 months ago

I'm not sure what to say other than "Wow!". I have an old Micromill 2000 that came with the original control box with two parallel ports and DOS software. I had the box upgraded so it only had one parallel port and could use Windows software, but it only works with XP so I've got a dedicated XP computer for it. I would dearly love to try to create a controller like you did, but while I've got the computer skills, I'm not sure I have the electronic skills. I might try it anyway, I'd love to get rid of the XP box and the parallel cables. Thanks for this, you did absolutely fantastic job and when you get your mill together please update this so we can see how it all works together!

cdtaylor51 (author)  3rdpig5 months ago

Thanks for your comments. The very hardest thing to do in this project was to solder the wires to the connectors. You have to get them in the right order to match up with the other side that goes to the stepper motors and the limit switches. I guess the power distribution board was a bit of a soldering task too. On that you have to plan out where everything goes and connects. The best thing to do it put the circuit together on a temporary breadboard and then transfer that to a permanent one like I did. It is a challenge but I am pretty sure you could do it too. The rest of the project is really mechanical not electronic. This project might be a bit advanced for a first project but even so I believe that most people could do it. Actually one of the most challenging aspects was working with the Linux/Unix like operating system on the RPi. But if you are used to that sort of environment then that should not be a problem either.

1-40 of 92Next »