The first major challenge of this project was to develop a cnc machine that can orient a brush in any position relative to a horizontal canvas. There are two parts to this challenge -> 1) develop a cnc machine design capable of achieving six degrees of freedom, 2) identify a microcontroller and a gcode interpreter that can be used to operate the machine.
At the start of the six axis cnc machine design effort, I committed to the following mechanical design constraints:
- Laser cut fabrication of 1/8in Baltic birch plywood for all structural components. 1/8in Baltic birch plywood is readily available through specialty lumber suppliers in Kansas City. It is a common material for laser cutting because of its relatively low price and high stiffness to thickness ratio. 1/8in Baltic birch seemed to be stiff enough based on my previous wall plotter project.
- A maximum laser cutter bed size of 300x600mm (12x24in). At the time, 300x600mm was the maximum bed size of the laser cutter at the Johnson County Central Resource Library in Overland Park, Kansas. Laser cutting is free at the library. Yes, I did all the laser cutting for this project at a library and it didn't cost me anything but taxes and time (guessing 10+ hours total).
- Tongue and groove with a 100mm zip tie method to fasten all structural components together. This fastening method worked really well for my wall plotter project, so I ran with it on this project as well.
- 4x13x6mm v-bearings for all linear rails. Once again, this was a carry over from the wall plotter project. It is a cheap solution that gets the job done.
I was able to get away with using a structural material with low stiffness (at least compared to other cnc machines) because the end effector of this application (i.e. a brush) is so light weight. The large electric motor at the end effector typical of cnc mills was not needed. In addition, cnc canvas painting is not a precision machining operation. A little wobble or flex in the machine structure during operation is acceptable. Maybe even desirable if it makes the painting look less robotic.
The development of the mechanical design began at the end effector, progressed to the three axis head, and finished with the three axis gantry. Hundreds of design decisions were made throughout the process. It doesn't seem practical to document all of those details here. In fact, it's probably even quicker if you just take a look at the design and use your best mechanical intuition to make a guess on why something was done one way and not the other. The tip I will give you is that at no point were aesthetics considered in the design. The form of all structural components is purely a result of function. A solid model .step file of the six axis cnc painter is attached to this project.
Additional notes about the mechanical design:
- A wire slip ring is used between the three axis head and three axis gantry to allow infinite rotation of the three axis head.
- Wire management rails are used on the x, y, and z axes.
- Limit switches are placed at both ends of each linear gantry axis for homing and preventing damage to the machine during operation. No limit switches are incorporated into the three axis head rotatory axes. Instead, each rotary axis has a physical method for setting the zero position.
- Outside dimesions of the six axis cnc painting machine are approximately 710x710x915mm (28x28x36in)
- Total workspace area when the brush is in the vertical position is approximately 300x400mm (12x16in)
- Z-axis movement: 205mm
- Three axis gantry accelerations should be adjusted so that the machine does not shake during operation.
Identifying a microcontroller and gcode interpreter were the next part of this challenge. I initially started out using Mach3 and it worked great. But I really wanted a cheap open source option. I ended up making my own branch of grbl-Mega-5X and made modifications to allow six axes control and six limit switch inputs (https://github.com/johnopsahl/grbl-Mega-5X). An Arduino Mega 2650 microcontroller is needed to run grbl. There are still a few issues with the homing routine but otherwise it has worked great so far. I use the cncjs Gcode sender because it is open source and supports up to six axes (https://cnc.js.org/).
It was an exciting moment when all six axes moved using one gcode command.
Discussions
Become a Hackaday.io Member
Create an account to leave a comment. Already have an account? Log In.