Cost to build:
Time to build:
- Actuators / output devices: Dremel tool, 4 x 7.5 degrees/step 24 volt cheap stepper motors
- Control method: Serial connection from PC to Arduino, I2C for Arduino to motor controllers
- CPU: Attiny 2313, Arduino
- Operating system: none on the rest, Linux on the PC
- Power source: Good old Compaq AT PSU 12v
- Programming language: AVR C, Arduino C++
- Sensors / input devices: none yet
- Target environment: Indoor maybe garage/barn
This is the second version of a homemade CNC machine build using mostly off the shelve parts.
The first one aka "The beast" had a lot of precision issues due to play in most parts which in turn was caused by mostly bad cutting. Also one of the biggest problems was that when I have build it I did not think to allow later adjustments to be done.
So this time almost every part of it allows for some adjustments. It is also easier to build due to the different design.
- 250 by 160 mm work area
- 50 by 35 by 35 cm machine size (could sit on my desktop :))
- with the material I have tested (laminate wood pretty tough material) it can cut at around 80 to 100 mm per minute
The main material used is 16 mm MDF - I used about a square meter all together.
The rails are 10 by 20 mm aluminum corners used for ... I don't know for what but the margins are slanted at an angle - I used 3 meters of it.
The lead screws are standard M8 type threaded, nothing fancy - 3 meters.
The bearings used are two types because I did not have enough of them, but you can get away with ABEC7 bearings - 16 for the X-axis + 8 for Y-axis + 8 for Z-axis + 8 for the lead screws = 40 bearings.
The motors I used are 7.5 degrees per step, 24 volt, canstack stepper motors, the kind you should find in almost all older printers.
The electronics used are all home build. The brain of the machine is an Arduino (the single sided version), and the motor drivers are created around Attiny 2313 paired with an l298.
The wires used are CAT 5 pairs used for power, and pairs from an old SCSI flat cable for data.
The screws used in the constructions are standard M8 of different lengths and M6 screws to fix the rails.
A. Lead screws
The design is as simple as it gets, it is all based on lead screw transmission.
I chose to use this kind of transmission because it has three advantages:
1. Force ratio is high - to move the nut along the screw the rotational force applied is low compared to the output. That allows the use of those small motors
2. Precision - even with the large step angles provided by the motors I still get pretty good sub millimeter precision: 76,8 steps/mm - good enough for my requirements for now at least.
3. Ease of implementation - you only need two bearings at the ends of the screw, two normal nuts to hold it in place, one long nut to move around.
The linear rail system allows the axes to move freely along their axis and ensure there is no side load on the lead screws.
B. Rail system
On this machine the linear rails are using a different system as on the first version, inspired by the new version of the CNC machines created by the guy here. Obviously the new system is a lot easier to implement than the one before due to it's simplicity. The only drawback is that it requires a strange type of bearing called a V-groove bearing which comes with a V shaped groove along the center of the other housing. I could not find any of those, so I used a pair of normal bearings put side by side to create a small groove in the center.
The electronics of this thing are composed of two parts: the Arduino board and the motor boards.
The Arduino is just a standard single side board, not much to say about it, if you want to build your own see here.
The motor botor boards I designed myself, they are based on an Attiny 2313 and l298. You can find more info and the schematics here. (it needs updating I know ..)
I have built my own controller because I did not want to have a mess of wires around the machine from the Arduino to the drivers. This way I can control all 3 axis by using just two wires trough the I2C protocol.
The software is divided in three parts:
- pc side
- Arduino side
- motor controller side
On the pc side I'm using the excellent Inkscape to draw the shapes, and a plugin to convert them to G-Code coordonates. Then I'm using a simple python script to send the G-Code to the Arduino, over the serial link.
On the Arduino I have a modified version of the code from the RepRap project (www.reprap.org), adapted to use I2C to command the motors instead of driving pins directly.
On the motor controller side the software takes different commands trough I2C and executes them.