loading

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.

Step 1: 100% Grbl Compatible CNC Controller

First, I purchased the 100% Grbl compatible CNC Controller shield from: http://blog.protoneer.co.nz/arduino-cnc-shield. I already had an Arduino and intended to use that with the CNC Controller shield and run something on my laptop to control everything. Then I found out that the Arduino would not be able to process an entire design file all by itself. This is due to it not having enough memory to handle more than one GCode command at a time. In fact not all GCode commands are currently completely implemented in the Arduino Grbl software. However, the Arduino does directly interface with the CNC Controller shield and can pass commands to the stepper drivers on the CNC Controller shield without any additional circuitry.

The sets of three yellow jumpers that you see in the pictures set the micro stepping for the stepper motors. The one single yellow jumper selects how the limit switches work. Mine are set up so that when the switch closes a ground is detected (the default). The alternative is to sense a hi when Vcc is selected. That is to say that the limit switch logic can be set to sense a hi or lo, your choice. The two yellow jumpers on the left side of the picture are for selecting which axis the A-axis mirrors (two motors on one axis).

I used polarized headers to connect to the stepper drivers so that I would not be able to plug in my stepper motors backwards - that's pretty important.

The 100% Grbl compatible CNC Controller shield does not actually include any stepper motor drivers. It is only a means of integrating the stepper motor drivers into an Arduino shield conveniently and it works great for that purpose. The CNC Controller shield is designed to use the Pololu type step driver modules like the A4988 stepper motor driver carrier that is shown here: http://www.pololu.com/product/1182

I purchased some from China that were about $4.00 each and appear to be exactly the same (we shall see when I actually try to use them). They came with some heat sinks too but I decided to use the ones you see (from Adafruit) instead of the ones that were included instead. You actually only need to populate the X, Y and Z stepper driver carriers on the CNC Controller board (because the Grbl software on the Arduino only knows about three axes). Unless you intend to use the A-Axis too (for a second motor on one of the primary axes). The CNC Controller allows you to mirror the control signals from X, Y or Z to the A axis by using jumpers. I am not using the fourth axis. I just included the fourth stepper driver carrier so that I would have a spare in case one of the others stops working. Then again who knows what might be in the future?

Advertisement

Step 2: Raspberry Pi

It became clear that I needed some way to process a complete design file and break it into individual GCode commands that the Arduino could then pass on to the CNC Controller shield. Many articles are available on the internet about running the Grbl Controller software which provides this specific function on a Raspberry Pi. I had a Raspberry Pi that I had played with a bit, some time ago, but it was an older version. I am sure it would have worked but I decided to get a new one and dedicate the new one to being the host in my new CNC Controller system. For more information about running the Grbl Controller software on a Raspberry Pi look here: http://zapmaker.org/raspberry-pi/running-grbl-controller-on-raspberry-pi/

Due to reading a lot of those articles that I mentioned I became concerned that the Raspberry Pi would overheat when inside of an enclosure so I put heat sinks on it. Then I had to trim down the heat sink on the processor as it was too tall.

I also came to realize that the Arduino and the Raspberry Pi are slightly, electrically incompatible. The Arduino operates with 5V logic and the Raspberry Pi operates with 3.3 V logic. So a voltage level translator of some sort is required as an interface between the two environments. I looked around for a solution and found a few. I didn't really like anything that I was finding and it took a while to get to what I wanted but I eventually found the Raspberry Pi Alamode board.

Step 3: Raspberry Pi Alamode

The Alamode board plugs directly into the GPIO connector on the Raspberry Pi and provides the level shifting function that is needed for the Arudino to communicate with it. It also provides Arduino compatible headers so that any standard Arduino shield can be plugged into it too. Including the CNC Controller shield. So it now appeared that I could have a stack of three boards that communicate with each other properly and elegantly - with no additional circuitry required.

Some quick features of the Alamode - that I am interested in: The Alamode has a real time clock that is directly available to the Raspberry Pi (with a coin cell battery backup). The Alamode can be powered from the Raspberry Pi or it can be powered directly through its own micro USB connector. There is a tiny jumper that allows you to select how you want to power it. The jumper header fell off of my board (probably my own fault). I looked at it and decided I just didn't need it as I intended on powering it through its own micro USB port anyway. The big deal is that the Alamode includes the signal level shifting that is required for an Arduino to communicate with a Raspberry Pi.

Once the Alamode is connected to the Raspberry PI you can then load the Grbl software onto the Alamode. The Grbl code is loaded into the Alamode with the Arduino IDE. You need to load the Arduino IDE onto the Raspberry Pi to load the Grbl code into the Alamode. The Getting Started instructions at the Alamode site are very good and complete: http://wyolum.com/projects/alamode. Refer to the User Guide for instructions on how to set up the real time clock.

Let me just say that it works exactly as they say it does. It is a bit of a task to get everything together to actually use it but once it is set up (mostly on the Raspberry Pi) it works great.

Step 4: Stack 'em Up

So now I have a stack of three boards. With the Raspberry Pi on the bottom, the Alamode in the middle and the CNC Controller shield on the top. All plugged together. One problem for me was that the Alamode does not provide any mounting holes. It does provide a rubber pad that goes on the top of the RJ-45 Ethernet connector on the Raspberry Pi and is the right height (must be very carefully positioned on the RJ-45 connector) but there is no solid connection point other than the GPIO connector. The CNC Controller shield is like most other Arduino shields and is very well held in place due to the friction of the header extenders that are on the Arduino. My original Raspberry Pi did not have mounting holes in it either. That is part of the reason why I decided to get a new one and use it instead. Later on, I purchased an assortment of nylon standoffs and attached a couple of them to the Raspberry Pi - with a couple of washers to get the height right. Then I very carefully put a drop of super glue on the top of each of the nylon standoffs and put the Alamode onto the Raspberry Pi. I then left it alone for a while. I was later able to take the screws out of the bottom of the Raspberry Pi and take the Alamode off with the standoffs attached to the Alamode - it worked! I also attached a standoff between the Alamode and the CNC Controller shield as there was a hole in a place that made that possible on both boards. So now I have all three boards securely connected together.

Step 5: An Enclosure

Early on I decided to use some sort of enclosure to protect my finished project. So I bought one and then came to realize it was not large enough and had to measure everything and buy another one. The one I used is is nice box but turned out to be a challenge anyway. This box is made by Bud and I got through Amazon here: http://www.amazon.com/dp/B005T7ARB6/ref=pe_385040_30332190_TE_M3T1_ST1_dp_1. It is a BUD Industries PN-1339-DG High-Impact ABS NEMA 4x Indoor Box, 6-19/64" Length x 6-19/64" Width x 3-17/32" Height, Dark Gray Finish enclosure.

There are some nice brass threaded mounting holes in the corners inside of the box and the box comes with screws to secure the top to the bottom with the brass threaded holes in the outside corners. The box also has a gasket to make it waterproof if you need that. In my case it just makes for a very nicely sealed box.

I came to believe that I needed to have some sort of carrier to mount my "stack" to inside of the box. So I bought a sheet of acetal from Zoro Tools: http://www.zoro.com/g/Acetal%20Sheet%20Stock/00153128/. Acetal is supposed to be somewhat ESD safe but I have not studied that out entirely either. After I got the sheet of acetal I cut a piece that would fit inside of the enclosure with my Dremel tool. It isn't pretty and this is one of the things I plan to replace when I finally get my milling machine working again. I ended up having to cut cutouts on both sides of my initial carrier to provide better access for the wires and cables that connect the "stack" to the external world.

I also felt that it was important to make sure that there is adequate ventilation in the box. So I mounted two 40mm, 12 VDC, exhaust fans on the top and two inlet vents with filters on the bottom.

In the pictures you can see that there are a couple of extra holes in the carrier - Oops.

I made a 1:1 scale drawings of the openings to be put into the box in Visio and then printed those out on my printer. Then I cut out the printed drawings and taped them to the box and used them as templates. It wasn't perfect, of course, but was pretty good. I started each modification to the box by using an Exacto knife to carefully mark through the templates and then used a Sharpie to make sure I got it right. Then I used my Dremel to cut out the various openings in the box. Not too difficult to do but you have to be patient and let the Dremel do the work or you will end up with a lot of melted plastic on your hands and the nib that you are using in the Dremel will try to dig into the material occasionally. My only advice is be patient, take you time, don't press to hard, cut in the right direction and it will all work out acceptably - no one is perfect. The hardest openings to cut were the ones for the switches and the connectors. Each of the connectors and switches have flat spots on opposite sides. All of my switches and connectors are 16mm. The flat spots keep the switches or connectors from turning in the chassis. That is great if you are using chassis punches but I do not know of any of those that are designed to work on plastic. So I had to very carefully cut the holes by hand with my Dremel. I cut them and test fitted each connector one at a time and as soon as I was able to get the switch or connector in the hole I stopped. They are pretty good but a nice CNC machine would have done a better job than I did - maybe next time I will have a working CNC machine and I can try that.

Step 6: The Hard Part

So here is the hard part. Most CNC machines (milling machines, laser cutters, engravers, water jets, etc.) use stepper motors to position the axes. The CNC Controller board provides X, Y and Z axes as well as an A-Axis that can be used to supplement one of the other axes if needed with an additional motor or a fourth axis could be implemented (but Grbl only knows about three axes right now). My implementation is only going to use three axes at this time. However, I decided that I needed to bring the A-Axis out because I might someday want to use it. Further, the CNC Controller board provides for the control functions to enable the spindle as well as two other functions. By default they are spindle cooling and spindle direction (alternately these functions can be used to control a laser, a vacuum hold down or a blower / fume extractor and a heating mat for a 3D printer). I did not know what I might want to control later on so I decided to bring those signals out of the box too. I ended up with five connectors on one side of my box that can be used to connect to the machine that I want to control. I have labelled everything and everything is also color coded.

I want to mention that I used expandable sleeving to bundle wires together where ever possible and to reduce the number of unbundled wires in the build. It helps in a lot of ways and protects the wires a bit but most importantly it makes it really clear what each of the bundles is for. It also makes the entire project a lot better looking. Here is one place that you can get expandable sleeving: https://www.parts-express.com/Search.aspx?keyword=expandable%20sleeving&sitesearch=true. NTE provides wire and heat shrink tubing assortments that are really useful in building electronics.

NTE / Elenco hookup wire assortment: http://www.amazon.com/Elenco-Electronics-WK-106-Storage-25-Feet/dp/B008L3QJAS/ref=sr_1_1?ie=UTF8&qid=1400363023&sr=8-1&keywords=elenco+wire

Heat shrink tubing assortment: http://www.amazon.com/NTE-Heat-Shrink-Assorted-Colors/dp/B000FIDTYG

Other useful things are like these:

Crimping Tool to put pins onto the ends of wires to be plugged into the various places: http://www.pololu.com/product/1928. This is a really nice tool and works better than a lot of other crimpers that are a lot more expensive. Of course, you need to have pins and housings to complete a connection. You can see that I used many pins and housings in building my CNC Controller.

Step 7: The External World

The next thing that had to be done was to connect the inside of the box to the external world. Switches to control the system and plugs to get the signals to the stepper motors and the spindle and finally a connection to a power supply.

The switches are all connected to one header that plugs into the CNC Controller shield and another one that plugs into the power distribution board for the LEDs that are in the switches. So the switches have a connection both below the carrier and above the carrier.

The switches are E-Stop or Arduino Reset (Red), Abort Reset (Yellow), Pause / Feed Hold (Blue) and Cycle Start / Resume (Green). The Reset, Abort and Hold switches are push-push switches. That is they stay pushed in until you push them again. That gives a positive indication of whether or not a button was pushed. The Resume button is a momentary push button and only stays in as long as you hold it in. Each button illuminates so that you can clearly see if it is pushed in or not. As you can see in the pictures I used colored expandable sleeving and shrink tubing of the same color as the button for each function to make it easier for me to keep everything straight.

The connectors on the other side of the box are color coded too. They are X-Axis (Green), Y-Axis (Blue), Z-Axis (Red), A-Axis (Purple) and Spindle (Yellow). These colors match up with the cables on my milling machine. The X, Y and Z axes contain the wires for the stepper motors and for the limit switches. The A-Axis is only stepper motor wires and will not be used on my milling machine. The Spindle connector has the Spindle Enable, Spindle Direction and Cooling Enable wires in it. Again you can see that I tried to use the same color expandable sleeving and heat shrink tubing as much as possible.

I connected the two 12 VDC exhaust fans to a header that eventually connects to the power distribution board.

Finally, I used a PowerWerks PowerPole snap-in chassis mount that provides 5 VDC through a red connector and red cable, 12 VDC through a yellow connector and yellow cable and a ground for each side through black connectors. The chassis mount holds the PowerPole connector housings in place inside of the snap-in chassis mount with a pin and these connectors are very well made. More information about the PowerWerks PowerPole connectors can be found here: http://www.powerwerx.com/powerpole-accessories/pow...

Externally I am using an ATX power supply that has been slightly modified to provide power for my milling machine (it came with my machine). I built a cable with the PowerWerks PowerPole connections on it that match up to my CNC Controller box PowerPole snap-in chassis mount. Later on I added an emergency power off switch to my power supply. You can see the emergency switch here: http://www.sourcingmap.com/red-mushroom-cap-1no-1nc-dpst-emergency-stop-push-button-switch-ac-660v-10a-p-256918.html

Hooking up the switches and the connectors was the most time consuming part of the build.

Step 8: Power Distribution

The next issue was how to get power to my "stack". I decided to build a power distribution board. I also had an issue with the switches that I used. As you can see they have LEDs inside of them. The LEDs are completely separate from the switches. On top of that the switches just provide a path to ground for the CNC Controller / Alamode. So, to get the LEDs to light up when the switch is depressed I had to use an inverter (SN7404 Hex Inverter). The LED power function is most of the circuitry on the prototype board. Power is on the edges with 5 VDC on one edge and 12 VDC on the other edge. The four resistors are current limiting resistors to limit the current going through the LEDs. The 12 pin header is where the switches plug into the board. The headers provide power for everything in the box. 5 VDC for the Raspberry Pi and the Alamode. 12 VDC for the fans and the 12 VDC circuitry on the CNC Controller shield and for the 12 VDC path through the relays. The black connector on the prototype board is used to provide the grounds for the signals being controlled by the relay stack. Notice that I tied all of the grounds together on the power distribution board.

I used a temporary breadboard to figure out how to get the LEDs to work the way I wanted them to work. Then I moved the circuit to an Adafruit Perma-Proto Half-sized Breadboard PCB. It went pretty quickly and easily.

There are pull up resistors in the Alamode (Arduino) that pull up the voltage to near Vcc on the Alamode for each of the functions. A function change of state is sensed when the voltage is pulled lo or to ground. The CNC Controller shield provides the function pins and matching ground pins. Shorting the function to ground changes the state of the function and is sensed by the Arduino code. I wired up the switches to do just that. Press the switch and the function is connected to its respective ground pin. However, I also ran a wire from each of the switches to one of the four Inverters that I used (two of the inverters in the HEX Inverter chip are not used). So that when the switch is open a high or Vcc is on the input to the inverter which results in a low is on the output and the LED is off. Pressing the switch puts a low or ground on the input to the inverter and hence the output of the inverter transitions to a hi and the LED turns on.

Step 9: Putting it all together

I looked into connecting a video display to the enclosure but did not have enough USB ports. So I bought a 3-port USB hub. It came in a black plastic housing but that was way too big to fit into my box. So I took it out of its housing and then used a zip tie to anchor it to my carrier. Now I have four usable USB ports. One has a wireless network adapter in it. I also used one with a miniature keyboard but I am not using it now as I am using the Remote Desktop Connection instead. I also looked at adding an LCD display to the box but found that I just do not have enough room in the box. Another of the USB ports would have been used to connect a touch screen to the system.

Next I attached the stack to the top side of the carrier and the power distribution board to the bottom side with nylon standoffs.

The last pieces to go onto the carrier were the relays. There are three relays. One for the spindle, One for spindle direction and the last one for spindle cooling. They got put into a stack and mounted on the carrier with nylon standoffs too.

Step 10: Wiring the carrier

After getting all of the pieces mounted on the carrier they needed to be connected electrically. I built a small wiring harness to connect the relays to the power distribution board and to the CNC Controller board. Each relay connects to its control pin on the CNC Controller board (the white expandable sleeving bundle). Then each relay gets connected to the power distribution board for 12 VDC power. On the other side of the relays I made a couple of cables that provide the ground for the signals being controlled by the relays and a very small cable to connect the relays to the spindle connector. It is sleeved with yellow on this side as it connects directly to the Spindle connector on the side of the box. I used inline connections to allow me to more easily disconnect the cables and get the carrier into and out of the box.

The relays are controlled directly from the Alamode via the CNC Controller shield. Of course, you could use these three relays to control the functions mentioned but they could also be used to control the functions of the print head and heat pad on a 3D printer or a LASER in a laser engraver along with a fume extractor or whatever. I plan on being able to move this control system between all of those environments in the future - unless I decide to dedicate this one and build more of them for my future machines. It would also be really easy to use the 5 VDC relays to switch 12 VDC and then use that to control a solid state relay or whatever is wanted.

I built another small wiring harness to connect 12 VDC from the power distribution board to the CNC Controller shield. This 12 VDC is used to power the stepper motors.

Step 11: Installing the carrier

Now it was time to install the carrier with all of its boards and cables into the enclosure. The hardest part is connecting the power to the power distribution board. First I plugged in the connector to the LEDs that are in the switches. Next comes the fans and finally the power. Everything is color coded because I am notorious for incorrectly connecting things. The cables that are attached to the switches and the connectors have to be gently pushed and pulled to get the carrier in the box but once there is sits comfortably.

Step 12: Connecting to the external world

After getting the carrier board connected and in place and then screwed down at its corners the remaining steps are to connect the switches to the CNC Controller shield. Followed by connecting the axes cables to the CNC Controller shield. Finally the last connections are the relays and the ground for the spindle connection. It is tight but there is enough room for everything to fit nicely into the box.

Step 13: Testing

After getting everything hooked up I powered up the box and started testing everything. The switches worked and I was able to control the system as I thought it should work.

Next I went to my laptop and used the Remote Desktop Connection to log into my Raspberry Pi.

I had already installed the Arduino IDE on the Raspberry Pi and done a lot to prepare to run the system. It was a learning experience and I did not know what else I might need to do to make everything work. So I got the software working before I ever put anything in the box. The biggest difference between my getting the software working and the current state is that I now have the switches too and can control the system by pressing those buttons and it all works.

I ran the Grbl Control program on my Raspberry Pi and connected to the Grbl program that is running on the Alamode. I opened a file that I had created (a modified coaster tutorial) and ran the program. It ran all the way through and stopped as I expected it to.

I checked to make sure that nothing got hot. Now I have to get out my milling machine and get it back together and try to make something.

Thanks for reading my instructable.

Let me know what might have done differently. Maybe I will make another one.

<p> It was a great help for me. I am trying to make one.</p><p>I have a request and a question please.</p><p>Question</p><p>Can I disconnect my PC or Laptop from the RPi after upload the G-Code into the RPi. I don't want to monitor the process but I want to run the machine without allocating a PC for the operation continuously.</p><p>Request</p><p>Can you please provide the necessary codes for the arduino and RPi.</p><p>Thanks in advance. </p>
If you built a system like mine then you should be able to test your theory to see if it works - I am able to connect wirelessly to my RPi, transfer files, start Grbl and connect to the Arduino (Alamode) and then set up the machines and eventually start making the part. I can disconnect from my RPi at any time and reconnect at any time. <br><br>I am not sure as to how to answer your request. <br><br>There are newer versions of the Grbl code that you might be interested in on the GitHub Grbl site here:<br><br>https://github.com/grbl/grbl<br><br>The code for the Alamode is available from the WyoLum site here: <br><br>http://wyolum.com/projects/alamode/<br><br>How to setup the Grbl code is available from the Protoneer site here:<br><br>http://blog.protoneer.co.nz/arduino-cnc-shield/ <br><br>I like the new CNC hat from Protoneer that works with the newer RPi's because it does not need the Alamode functions as they are incorporated into the CNC hat (so the Alamode is not needed) and it includes an Arduino Nano that is pre-programmed with the Grbl software. They, Protoneer, also have a link to download their own customized version of the software for the RPi (includes everything you need on the RPi already installed and ready to go) with just one download. You download it and then install it on your SD/TF memory module and then boot your RPi and you are up and running. Only thing left to do it set up you wireless networking on you RPi (make sure that you get a wireless module that is known to work with the RPi to avoid a lot of frustration). Good luck, I hope I answered your questions as you needed to have them answered.
<p>Your box looks great, inside and outside. Like a pro, you could sell them! Thank you so much for sharing and for giving additional information that I also will need. Very nice instructable!</p>
Thanks, I hope you build one too.
<p>Thank you for your quick reply with concern.</p><p>I think you made it clear what I have needed. Thank you so much</p>
<p>A great write up. Many thanks for taking the time to compile this. Very helpful</p>
Your welcome.
Your welcome.
This is a very nice description of all the guts of a CNC controller. But if you want to dodge most of the bits and pieces to assemble this, you can buy a 4 channel CNC controller board from http://synthetos.myshopify.com/products/tinyg. It sells from their store for $129.00. It has a USB input and can be driven from most any computer using the free Chili Pepper software. You will still need fans, a power supply, case and switches etc, but going this route will result in a much more compact and complete CNC controller. If this idea has been described further down in the comments, I apologize. In addition I have no connection with Synthetos other that being a very happy customer.
Thanks for letting us know about that. There are many solutions out there for building a CNC controller, this certainly is not the only way to do it. It is how I did it and it works well, and I learned a lot doing it. Why not write you own instructible about what you are proposing? I am sure that others would like to see how you did it and what it looks like along the way.
<p>Nice work! Can I ask where you got your panel mount cable connectors? ...and buttons while we're at it.</p>
You can try the ones that I mentioned in a previous comment: <br><br>http://m.ebay.com/itm/110983775612?_mwBanner=1<br><br>The buttons came from Adafruit.<br><br>Hope that helps.
Is it possible to just connect to the arduino through a usb cable on the pi? I already have the arduino and cnc shield set up and using my PC to control.<br><br>Also, can a touch screen be used to display and control the jogging of the machine with the pi?<br><br>Looks awesome!
The communications between the RPi and the Arduino happens through the UART on the RPi and the UART on the Arduino. In my project this connection is provided by the Alamode boad (including the required voltage translation between the RPi and the Arduino). It doesn't necessarily have to be that way but the software expects it to be that way. Could you use the USB to communicate between the RPi and the Arduino - I am sure it could be done but you would probably have to write some extensive code to do that. I also believe that you would loose some functionality on the Arduino. Someone else might have better insight into doing that sort of thing than I do. What I did was use the software that I found as easily as possible - I was not interested in trying to invent an alternate way, I was just interested in trying to get everything to work together. As for the touchscreen monitor to run the machine: I have done that on several occasions. I just connected an HDMI touchscreen to the RPi and could control everthing - actually, I never got the touchscreen to work correctly with the RPi so I just used a miniature wireless USB keyboard that has a touchpad built in to run everything. I have not tried to get the touchscreen to work in a while. Using the remote desktop is just so much easier that I just have no desire to try to get the touchscreen working any longer. Touchscreens have their own set of problems on top of everything else. So I just dropped it and went with the remote desktop instead. My HDMI monitor is something like 5 inches wide and the touchscreen was More accurate enough for me to use it effectively. If you have a larger screen thenyou might have better results. I hope I answered your questions. Perhaps others might give you different answers. Check out what the Grbl guys have to say on Github too. Good luck.
I meant LESS ACCURATE More More accurate. Auto correct strikes again!
<p>Hello, cdtaylor51 very good job. I work with a CNC in my day to day and want to build one for me to be able to test work that may be made no real scale. I have ordered some stuff, I have a raspberry pi, ordered the shield alamode, and cnc, lack ordering stepmotors but do not know what type / model to buy, you can provide me a link? Now I have more technical issues in my day to day use the PC to design and create the G code and send to as the machine is operating the machine with some switches and a touch screen of 15 &quot;wanted my cnc could have a screen to show me what you're doing, but more importantly as the grbl only supports 3 axes would be possible to double the system to have 6-axis? X, Y, Z to the movements a and C to swivel and tilt head and an extra lathe with interpolation with the other 5-axis, using either a PC or another raspberry pi to control the other 2 raspberry pi, or using one raspberry pi but two alamode shells and two cnc, it would be interesting to create a CNC complete the small scale.</p>
I believe that I understand your question and I have to say that you are already far beyond my knowledge level about CNC. I would suggest that you get in touch with the guys who are working on Grbl on github. As for the stepper motors: you have to match up the stepper motors with the drivers that you want to use and the motors need to have enough power to move the axes at the speed you want and enough torque to hold as you need. The most important factors are the maximum current specified for the motors and the maximum voltage and current that the drivers can handle also microstepping is an important feature (as you no doubt already know). You will need to understand these relationships to get everything you work. Otherwise buy a kit that has the motors, matching drivers and the high current power supply included - that is the easiest way to go. If you want to build a controller like mine then you may want to consider the new CNC Controller board from Protoneer (no Alamode board needed). I have a couple of them and I am working on a new version of my controller using that new board (look at some of the other comments for more information about the new board). I don't work for them or anything but I really like the way these boards are made and work. You can use the A4988 type plug-in drivers or external drivers that can handle much higher current and voltage (meaning larger, more powerful motors).<br>I am not sure if I answered all of your questions or not but good luck. I would really like to see what you come up with. I am still trying to learn about CNC... Maybe I will take a class or something...
<p>Hi <a href="http://www.instructables.com/member/cdtaylor51/" rel="nofollow">cdtaylor51</a>,</p><p>Thank you for your great instruction!</p><p>I just have a quick question. You were saying an arduino is not able to process itself, and thus u have to include a raspberry pi, is that because you are running the nc file totally without a laptop or a desktop to generate and command the gcode? <br>If I want to use laptop to create, process and command gcode directly to the arduino, do I still need a raspberry pi?</p><p>Thank you very much!</p>
Your question is interesting. I have discussed it before but maybe not directly as you asked. There are a few reasons for the RPi to be part of the project. The Arduino/Alamode is pretty busy. It is taking care of the &quot;real time&quot; management of the signals that are causing the motion in the CNC machine. It is also monitoring the limit switches continuously. On the other hand the RPI is not doing very much. It parses the .nc file and sends one gcode statement at a time to the Arduino. It also keeps track of what has been done and what is yet to be done. The RPi also provides a means to monitor the progress of a design that is being processed. Of course, I monitor that progress on a separate computer that has a monitor as there is no monitor on my controller. I like being able to just kick off a design and let it go without monitoring it at all. If I want to then I can reconnect to RPi at any time I desire to see how far along it is.<br><br>Does it have to be that way? Not at all. It is just the way that I did it. You need to have something that sends the gcode statements to the Arduino. The RPi does that by running the Grbl Controller. There are other software tools that you could use or you could write something to do that yourself. Finally I suggest that you take a look at the Grbl wiki for more insight into what else the Grbl Controller does - it does not have to be run on an RPi. It could be run on a separate computer instead. <br><br>You would not want to do any design work on the RPi. It is just much too slow for that. So my advise is that you do your design work on the fastest computer you can use. Then you can run the Grbl Controller on that computer or some other one that will stay connected to the Arduino for the entire time that the design is being processed on your CNC machine. I chose to let the RPi stay connected all of the time and just connect my laptop to it (wirelessly) when I wanted to copy a file to it for processing or to start the processing or to monitor the processing. It works well. It also off loads the requirement of keeping my laptop tied to my CNC machine for the entire time it takes to make a part. Still, other options are possible. This is just what I did. I hope you get the idea.<br>
<p>Thanks a lot for your detailed comment! I quite got the idea now. I'll try do do more research on Grbl!</p>
<p>Yes The Raspberry pi is just acting like computer . You can use lap top and arduino + arduino cnc shield for making cnc <br>Search on google GRBL arduino </p>
<p>Hi Mile,</p><p>Thanks a lot for your comment. I'm very new to this stuffs, but u've made it a lot clearer!</p>
<p>hello, really amazing, I'm 13 years old, I built a 3 axis cnc controller with grbl, I would like to build a 5-axis I do not very well understand the links you send me a diagram as much detail as possible? what have you loaded into rasperry more 2? softwere that you use? I would like to know as much as possible! thank you so much for your help! my email stefanodimaria03@gmail.com excuse for my English I'm utillizando google translator thanks again.</p>
<p>Okay, I have read your messages. I do not have any information on building a 3D printer or any other 5-axis machine. Grbl is limited to 3-axes. You might want to look at the RepRap wiki as it is essentially a 5-axis machine. Grbl is the only thing that I have loaded on the RPi in addition to the operating system.</p>
<p>I made this diagram based off of what I could see from your Instructable, could you tell me if this is wired correctly or not?</p>
<p>I like your diagram. It is pretty much accurate however it appears that there a couple of things that I think may need to be cleared up. Of course, you can do whatever you want to do. In my build I used 8-pin aviation connectors and the Endstop / Limit switch wires are connected to four of the pins of the aviation connectors. In your diagram you ran all of the limit switches to a separate 6-pin connector. That's okay by me but it is not the way that I did it in my build. I also noticed that you tied the limit switches together in your diagram. I did not do that in my build. Each of the switches are completely separate. I don't know that it matters. That would be a question that the would have to be posed to the Grbl guys.</p><p>Another thing that I would like to draw your attention to is that the colors for the axes are not correct. X should be red, Y should be green and Z should be blue. I got it wrong in my build but because of some of the feedback that I got (read the earlier comments for more info about the colors coding of the axes). The purple and yellow were completely arbitrary on my part. There may be some standard for those too but I am not aware of what it might be.</p><p>It might be more useful if you labelled the USB connectors for the different things that they go to. One goes to the Raspberry Pi and the other one goes to the Alamode. It might also be useful to label the switches.</p><p>I got the wires going to the steppers a bit mixed up in my photos too. Pin 1 in my build is blue, Pin 2 is red, pin 3 is green and pin 4 is black.</p><p>Just in case is was not noticed: There are four current limiting resistors on the power distribution board that are there to limit the current that goes through the LEDs in the switches.</p><p>I have attached a few pictures to this reply to show some of what I have mentioned.</p>
<p>Hi, first of all congratulations, you did a very good work.</p><p>My question is if I don't have the Alamode shield for raspberry, it's possible to use Arduino UNO, I have seen in new RPI CNC BOARD that just connect 10 pin from RPI, to RPI this pins are I2C and UART I think they are the principals.</p><p>I have your cnc shield (the red one) but I don't have Alamode shield.</p><p>Thanks, I hope your answer.</p><p>Sorry for my English. :)</p>
Yes, you can use an Arduino UNO if you want to. You will still have to use a voltage translator so that the RPi and the UNO can communicate with each other. Its no big deal but it is required that you provide some way for the +5V on the Arduino UNO to work with the +3.3V on the RPi. Otherwise, you run the risk of destroying either or both of the boards. A voltage translator can easily be made with a couple of MOSFETs for each pin that is going to be connected to the other device. You could also use the voltage translators that are provided by Sparkfun or Adafruit or something of your own design. Take a look at these, I think that either one will work.<br> <br> <a href="https://www.sparkfun.com/products/11771" rel="nofollow">SparkFun Voltage-Level Translator Breakout - TXB0104&nbsp;</a><br> <br> <a href="https://www.adafruit.com/products/757" rel="nofollow">Adafruit 4-channel I2C-safe Bi-directional Logic Level Converter - BSS138&nbsp;</a><br> <br> I have attached an image that shows what each of the pins on the new CNC board are used for (it only uses 7 of the 10 pins). The new board that you mentioned has the voltage translators built in and it includes a pre-programmed Arduino Nano in the price. That might be your simplest choice depending on what you are trying to do.<br> <br> As I have mentioned previously, the Alamode board made it easy for me to tightly couple the RPi to the Arduino and the CNC shield. &nbsp;I didn't want to have an extra PCB in my solution. &nbsp;You could easily put the voltage translator underneath with the power distribution board - that is probably what I would have done if I would not have had the Alamode. You could also make your own voltage translator PCB or build a voltage translator on an Arduino prototype PCB.<br> <br> I have to tell you that the RPI CNC board is really nice too. &nbsp;If it would have been available I probably would have gone with that solution rather than what I did. &nbsp;I did not use most of the functionality that is built into the Alamode but I did use the real time clock and the voltage translators.<br> <br> I am in the process of building a new controller using the new board. &nbsp;I will be making a new instructable too but it will take a few more weeks for me to get that done. &nbsp;In the mean time you might want to look at the new card too. &nbsp;It solves the voltage translation problem very nicely.<br> <br> <br>
With a local display you could control the system locally. I personally don't see that as very useful. You could also monitor the progress of your project. That might be more useful but definitely not essential. As I mentioned previously I can completely control and/or monitor my system with my Remote Desktop Connection. I do not have a display on my system locally. I just use my laptop to do everything. I might someday decide to build a pendant to do things &quot;manually&quot;. Then a local display might be more advantageous.<br><br>Replacing the push buttons with touch screen buttons would be an interesting thing to do. The push buttons are physically connected to the Arduino not the Raspberry Pi. So you would have to change the way things are wired up and then you would have to write some code to capture the touch screen button functions press / release / hold (or whatever you need) and then follow that up with some code that would send the captured event to the Arduino to effect the press of the button. Lastly, you would have to write something to run on the Arduino to &quot;hear&quot; the button presses on the Pi. I would suggest that this might be the hardest part as you would not want to interfere with Grbl which is already loaded and running on the Arduino (you might be able to control relays from the Pi to effect the button actions on the Arduino). It would be a substantial amount of work but I think it could be done - you might find some libraries on the Internet to help. I have not researched this at all. It is so much easier to just connect the buttons to the Arduino at this point. The code on the Arduino (Alamode) is already there and works. If you decide to do that sort of thing, I am sure that others would be interested in that too. Good luck with your project.
if i was to add a touch screen would it be wired to Pi or to Arduino
It would be easiest to just plug a touch screen LCD into the HDMI port on the Pi. The touch screen itself would actually get plugged into one of the USB ports on the Pi. I don't think it would be possible to run it with the Arduino - it is already very busy controlling the stepper motors and the spindle and at the same time monitoring the buttons and the limit switches. On the other hand the Pi is not very busy. Don't expect very fast response times on a local display and you will need to monitor the temperature on the Pi with a local display running. Those are the concerns that I had that pushed me towards using a Remote Desktop Connection. Hope that helps. I probably would have put a local LCD/Touchscreen on my build if I would have had a bit larger enclosure.
<p>2 questions, one is silly and one serious.</p><p>Silly Question:<br>Would you have put an LCD for the cool factor or do you so an actual need?</p><p>Seriously though:<br>I was curious if the push-buttons can be replaced by touch screen buttons? </p><p>BTW, thank you for your prompt reply. You rock my friend.</p>
<p>wow!!!! very,very nice.... appreciate the way the wires were harnessed, the placement of the boards...thumbs up!!! </p>
Thanks for your omments.
I am also new to these electronics; so I am sorry if my questions are dumb.<br>1. would the Rasberry Pi be able to control a CNC through a breakout board and into stepper motor boards without using an arduino? <br>2. you mentioned in another comment that there was a new controller board that takes the place of the Alamode. Can you post the link for it?<br><br>Thanks for posting this awesome build.
<p>There are no dumb questions.</p><p>First - This system is based on Grbl. You can learn more about Grbl at GitHub Here: <a href="https://github.com/grbl/grbl" rel="nofollow">https://github.com/grbl/grbl</a>. Grbl actually runs on the Arduino. The part of Grbl that runs on the RPi is the Grbl Controller. It is a G-Code sender. The Grbl Controller takes a design file and breaks it into individual Grbl statements that are then passed on to the Arduino where Grbl interprets the statements and causes the Arduino to generate various electrical signals which are sent to stepper motor drives to cause motion or other functions to occur. It is significantly more complicated that but basically that is how it works.</p><p>I am not aware of any other system that would run on something like an RPi without using an Arduino or something like that to process the Grbl statements. It is very difficult to run real time code (to control the stepper motors for example) on a time slicing device like the RPi. I have read about people who have wanted to do that sort of thing but I am not aware of anything like that at this time. The closest thing to that would be LinuxCNC but I do not believe that will run on an RPi. You could do it if you could get a real time operating system for the RPi and then wrote something equivalent to Grbl to process the G-Codes. Electrically it would be pretty easy to do but the software would be pretty complicated. I believe that is why Grbl is so widely used. It is simple, easy to set up and use and it already exists.</p><p>Second - You can find the new board from Protoneer here: <a href="http://www.ebay.com/itm/271901344091" rel="nofollow">http://www.ebay.com/itm/271901344091</a></p><p>If the link doesn't work then Google for: <em>Raspberry Pi CNC Board </em></p><p>The new board (hat) is really nice and provides access to the new features of Grbl. It also includes an Arduino Nano that is pre-programmed for you with the latest version of Grbl. Just add a RPi B+ and some Pololu stepper motor driver boards and you are pretty much ready to run some stepper motors. Of course, you need to have a power supply for the stepper motors and all of the wiring too.</p><p>I hope this helps...</p>
Sure, you can put any size screen you like on the RPi as its output is HDMI. Of course, you would also need to have a keyboard and mouse to manipulate your system. That is actually the reason that I went with a WiFi connection instead of a local display, mouse and keyboard - the screen was too small and I ran out of room. I just use the Remote Desktop application in Windows to connect to my RPi and I can then manipulate my CNC system with my laptop. I have a 17 inch laptop and the remote desktop looks really great and is very responsive. You can certainly run everything on the RPi with a local display, mouse and keyboard. However, I would not try to do any CAD, CAM or design work on the RPi. It just does not have the speed that you need to work on a 2D or 3D image. It is best to do your design work on some other machine and then just send the G-Code, deisgn file to the RPi to be processed by Grbl.<br><br>The second question is significantly more difficult to answer. If the rated current of the motors is less than about 2.2 Amps and you want to run the motors with less than 36 Volts then you can use the Pololu stepper motor drivers. The CNC hat claims that it can handle up to 36 volts. If you need more voltage or more current than that then you will need to use external stepper motor drivers. You might want to look at the M542T or TB6600HG based drivers. You should not have any problems using either of those drivers with the new CNC hat. It has pins so that you can connect to the control lines of the drivers. Of course, you would not populate the CNC hat with Pololu drivers in that sort of configuration. You would not connect the stepper motor power supply to the CNC hat either. So you could go to as high a voltage as the driver allows, typically about 50 volts, and most of the external drivers will provide 4.5 to 5.1 Amps to your stepper motors. If you need more current than that then you will probably need to look at something like the Gecko Drive stepper motor drivers - really great stuff from all I have heard but expensive.<br><br>I am building up a new milling machine (and maybe a new lathe that I have too) as CNC machines and I have spent a lot of time trying to decide what I am going to do about stepper motors and stepper motor drivers. The motors that you mentioned are really powerful. My new motors are NEMA 23 size and only 425 oz-in. They have a rated current of 3 Amps. I believe I can run them at 2.2 Amps so I am going to try running them with the Pololu DRV8825 stepper motor drivers. If I don't get the performance I want then I can pretty easily change over to external stepper motor drivers, as I mentioned earlier.<br><br>Hope this helps.
thank you for clearing that up. I was under the impression that the rasp pi was running cnc linux and passing commands to grbl on the arduino. thanks for the link as well.<br><br>If i may ask a few more questions:<br>i plan on making a 4'x8' cnc router and i want it to be run with your setup, but with a small screen so i can run everything straight from the rasp pi. is that possible?<br><br>also, can the control boards handle the amperage of these large motors?<br>2 NEMA 34 Stepping Motor (651 oz-in 1/2&quot; dual shaft)<br><br>NEMA 24 Stepping Motor (425 oz-in 1/4&quot; single shaft)<br><br>again, i apologize for bombarding you with questions.
<p>Just a quick question, what type of Raspberry Pi did you use in your build? I am new to the whole Raspberry Pi/Arduino scene and would really like to know. Im sorry in advance if I missed a part in your awesome write up.</p>
I used an RPi Model B. Take a look at the image in step 2. As I said I am pretty sure that you could use any RPi (A, A+ or B, B+) with the Alamode and the CNC Controller boards. The Alamode is expecting to see the 26 GPIO pins that the RPi provides. The Alamode provides the voltage level translation that is necessary for the RPi to communicate directly with the Atmega chip (Arduino) that is on the Alamode.<br><br>A new version of the CNC Controller is coming out soon that incorporates the functions that were needed from the Alamode directly on the CNC Controller board and includes an Arduino Nano on the CNC Controller board too. I will be doing a new instructable on it sometime in the next month or so.<br><br>I hope this answers your question. I would suggest that you get an RPi so you can get familiar with it. It is a very typical Linux based device and not very fast. The Arduino is a really easy to use device. I would suggest you get one of those too. There are starter kits that aren't too expensive and they provide lots of experiments and examples to get you up to speed really quickly.<br><br>Good luck and I think you will have a good time getting to know these devices.
<p>Thank you for the detailed write-up. Why were you unhappy with LinuxCNC?</p>
Actually LinuxCNC worked pretty well when I last used it. There are many people who use it all the time. What I had a problem with was the requirement of using a parallel port to communicate with the CNC machine. Parallel ports were already very difficult to find on new computers and my new computer was a laptop that didn't have a parallel port. So I started looking for some other way to communicate with my CNC machine. I actually got a USB-to-Parallel port adapter but it didn't work. It ended up that I eventually went to GRBL on an Arduino/Alamode and a wireless connection to a Raspberry Pi. It works so well that I really have no complaints. I believe that LinuxCNC is more feature packed than GRBL is at this time but GRBL is working okay for me so far, also new features are being added periodically.
Thank you very much!
I would suggest that you take a look at the GRBL website for deeper information about how GRBL works (also new versions have been released with new features). As I recall, the &quot;home&quot; location is completely virtual. That is it can be defined anywhere. That is the way it actually has to be because the software eventually has to be set to the actual parameters of the physical hardware of the machine. It could also be set to be a subset of the dimensions of the actual machine. Please read the info on the GRBL site about the z-axis touch mechanism. You could always make a z-axis touch sensor yourself. You could use a thin feeler guage blade. Attach a wire to it with an led (and resistor) or a buzzer in series with a battery. Attach the other side of the battery to your tool bit after it is installed in your spindle with an aligator clip. Knowing the thickness of the feeler guage you can find the z-axis zero by placing the feeler guage on the material you are working on or on your table and then lowering the tool bit until it touches the feeler guage and the led turns on or the buzzer sounds. Don't forget to account for the thickness of the feeler guage. I hope this is understandable. Good luck.
Legendary instructable!<br><br>I am not much familiar with GRBL or RPi so, many questions are popping up in my mind. Do you have a video of this awesome controller running the machine? How fast rapid travel this system supports? As I have said that I'm not familiar with the hardware or software could you please clear some air for me, I did not notice any feature related to Z axis tool job touch zero? And also you did not use homing switches.
Okay, lets see. I will try to answer your questions as I can. I do not have a video. I will try to make one soon. The movements of the machine are limited by the hardware - the machine itself, not a software limit but a machine limit. However you can limit the machines speed in the software so that it does not move too fast. Depending on what material you are working on the travel speed might need to be much, much slower than the machine is capable of. The machine will always be able to move too fast to produce a smooth surface. So the software controls the speed based on your inputs. There are two components to the z-axis. The physical movement of the z-axis, up and down, and the spindle, on or off. The z-axis is the third connector from the top. The spindle is the bottom connector and is yellow. Each axis connector contains eight wires, four are connected to the stepper motor and four are connected to the limit switches for that axis. There are six limit switches, two on each axis. I do not have a z-axis touch zero mechanism in my system. I believe that the new version of GRBL might have that built in but I am not sure how it would be implemented in my build. I might have to rebuild my controller to include that someday. I hope this has helped.
Thank you for your reply. Nicely answered all by doubts. It is because of the people like you, the community grows positively every day. Just one small thing about GRBL does it have a manual system for z axis touch zero for example if we jog slowly towards the material surface n when the tool touches it can we manually change the reading of z axis DRO to zero?
<p>This is an awesome instructable! Great Job!</p><p>I do have one question though. Does the CNC Shield actually &quot;plug&quot; into the alamode board? I see in your pictures that it looks like the pins do plug into the bottom header. And do they plug in on both sides? Sorry if I missed something in your awesome write up. </p><p>If they do plug in, I will be learning how to de-solder, as I soldered the non stackable headers in place.</p><p>Thanks!</p><p>Jon</p>
If you look at the pictures in step 3 you can see the stacking headers. <br>You can remove the old pins one ar a time with a soldering iron and something to grip the pin. Important: make sure that you clean up the holes after removing the old pins. Otherwise you could end up with bad solder joints later on.

About This Instructable

380,906views

1,323favorites

License:

Bio: Viet Nam War Veteran
More by cdtaylor51:Raspberry Pi Alamode CNC Controller 
Add instructable to: