I have a whole pile of old Altoid tins that I use to store small screws and such. The tins had migrated into a physical pile on top of another storage container and were occasionally knocked over while I was looking for something. I thought it would be nice to have them in a rack mounted on the slat-wall.
Laser cut acrylic seemed the natural choice. The glued finger joints are plenty strong but need to be accurately cut. Since the project was pretty simple, I decided to try to do the whole thing in FreeCAD including the gcode generation with the new Path module. I know Path is still incomplete but I've been watching the improvements for months and thought I might be possible. Here's how it went.
The parts were simple sketches padded to the thickness of the acrylic - 3mm. The important thing is to make the depth dimension of the tabs match the acrylic thickness and the position match the corresponding slots.
I used the assembly2 workbench and built the assembly. Assembly2 is very slick and I caught several boneheaded mistakes that would have cost time and plastic otherwise.
I used Assembly2 again to make a second assembly. I didn't set any constraints, I just laid out the pieces to fit on the raw stock in the laser cutter. This way, if I need to change any of the parts, I can just refresh the assembly and regenerate the gcode.
Next I built the profile operations. This was the hardest part because Path is very new and only the simplest operations are working. I ended up with separate operations for each outside profile and each hole.
I hid the solids and just focused on the gcode backplot. It's very easy to see any problems with operations and make whatever changes are necessary.
When things started looking good, I tried exporting the gcode and loading it in LinuxCNC. There were a few problems that I could easily have fixed by hand but decided to try automating the process as much as possible.
My laser needs a couple commands in the preamble to set the power output. I copied the linuxcnc_post.py file to my FreeCAD macro directory and renamed it laser_post.py. For FreeCAD to see it as a post processor, it needs that name format. The first part can be anything you want but it must end with _post.py. Editing was just a matter of pasting the lines into the preamble section.
At this point, I could select the project node in the tree and use the export menu. Select 'GCode' for filetype and give it a name. FreeCAD will prompt with a list of post processors. I select my new customized post, and click 'ok' The code is written and ready to be loaded in to LinuxCNC.
That last part is a lot of clicks and I tend to repeat it many times as I'm working out the last little bugs. FreeCAD has a couple conveniences to simplify things. The project node has a property for the output file and the Machine node (see picture above) has a property to pre-select the post processor. With these set, you can click the 'Post process' icon on the toolbar and it's done!
The pieces cut out beautifully. I glued them together like so:
This was a quick one-day project while I was cleaning up the workshop. The toughest part of a project like this with my other tools would be the fine tuning to get the slots and tabs to align right. With FreeCAD, that was really easy. The Path workbench still has a long way to go and it's not usable for anything but the simplest operations right now, but it's improving fast.
My interests in CNC and machining developed over a period of years in a very organic way. I have no formal training in either engineering or manufacturing --my interests were born out of necessity. Learning that way is great if you have the time and patience. Sometimes, however, it's just frustrating. You find yourself struggling with something that should be easy and only later find out that all kinds of people have the same issue and either they know how to work around it or perhaps they just feel each other's pain. But you, the loner, are left banging your head against the wall feeling like an idiot.
Meet the Spider
This post is about a perennial problem that I've faced in lots of CNC projects. It's something newbies like me are going to see eventually so this post is for you. I don't know if this problem has a name so I call it the 'spider problem'. If you know anything about this or how other CAM packages address it, leave a comment.
The first time I saw it was when I was playing with the HeeksCNC zigzag operation. To mill the spider, a lot of material needs to be removed but there are some areas that are very small and require a small cutter to reach. And there lies the problem. If you use a big cutter to go fast, you can't get into all the nooks and crannies like the space between the legs. You end up with a tool path that looks like this:
If you choose a small cutter that can get in there, your step over and step-down values have to be small. The run-time on the job is going to be excessively long - really REALLY long.
Roughing and Finishing
The intuitive solution is to rough the spider out with the big cutter, then do a finishing pass with the small cutter. With a model that doesn't have all those tight corners, this works great. It's exactly the technique I used on this pinewood derby car.
But it doesn't work here. Finishing assumes that the roughing phase has left a small, roughly uniform amount of material all over the model. The finish pass doesn't limit step-down because it doesn't have to. Ideally you're already within one step-down distance of the model everywhere. Cutting our spider, we're within one-step-down everywhere except the small areas between the legs. There, the remaining material is 5, 10, or more step increments away -- we're still roughing in those areas.
Of course you can limit the step down value but now you're back to where you started. You're either spending a LOT of time milling air, or you're plunging your cutter and breaking it off.
The fundamental problem is that the CAM software doesn't know what material has been removed.
Manually controlling the boundaries.
The only other solution I've found, and one I use regularly, is to artificially limit the boundaries of the operation. This means creating some geometry -- a sketch -- to limit the work area of of a roughing operation. For instance, I could create a boundary sketch like this:
The resulting toolpath will focus on the problem areas. This works but it's a compromise. If the model is complicated with lots of small problem areas, it can be difficult or impossible to create the right kinds of boundaries. It's also manually intensive and, at least in my case, that means mistakes are likely.
Not just about 3D sculpting.
The example I've given might make it seem like this problem is only about milling 3D irregular models but it isn't. Imagine cutting a simple rectangular pocket. If the pocket is large, you'll want to use a big cutter to remove a lot of material but you'll have rounded corners with the radius of the cutter. If you use a small cutter to get in tighter, you'll either spend a lot of time milling or you'll have to add some artificial bounding geometry to keep your itty-bitty cutter working in the corner and not milling air that the big cutter already cleared. The problem is the same and the available solutions are the same too. All compromises.
What would a better solution look like?
A smarter CAM tool would remember where previous operations had sent the tool and avoid re-milling those areas in subsequent operations. The workflow I would like to see would look like this:
1) The user selects the model and creates a roughing operation, specifying the tool to use and the feeds and speeds. The boundaries of the model are used to determine the work envelope. The step-over and step-down could be suggested from the tool or overriden by the user.
2) The user selects the previous operation and creates a refinement operation. The user selects the tool, feeds,speeds, and step-overs just like above.
3) Optionally, additional refinements can be added with progressively smaller tools, each time, the refinement references the previous operation not the original model.
4) When the tool path is generated, the system first generates the roughing operation tool path. It then constructs a solid in memory using the bounds of the path - the area swept out be the tool. It performs a boolean operation comparing the new solid to the original model to see where material still remains to be cleared. The resulting area, or its perimeter at least, is used as the bounding box for the refinement operation.
5). The user selects the original model and adds a finishing operation, which works just like it does today.
I'm sure there's a lot I'm missing in this approach -- maybe even some legitimate reasons it won't work at all -- but I'm listening and willing to learn.
Well, not quite....yet.
I found an old Universal Laser Systems model 25A for sale at a surplus auction. It looked to be in good shape and went cheap. After I got it home and cleaned up, I found that I couldn't get the laser head to fire. I called in some expert assistance from Columbia Gadget Works, but no luck was to be had. I've since learned that RF laser tubes have a life expectancy of about 10 years before they need to be re-gassed. Re-gassing this one is prohibitively expensive and would *only* get it back to 25W. Instead, I'm looking at replacing the RF laser with a chinese glass tube. This should take it to 40W.
Either way, this looks to be a fun project. Here's a picture.
Designing the thing you want to make takes a lot time, thought, and expertise earned by trial and error. Designing a way to actually make the thing is the same. I'm amazed at how much effort and creativity I have to put into holding strategies. So when it comes right down to it, am I too proud to screw the block right to the machine table?
Nope. I'm not.
I'm still tuning the new foundry but it's working pretty well now. I did my first real casting with it yesterday. This was also my first full cycle project. Design in CAD, Cut in foam on the CNC router, cast in aluminum.
I wish the finish was a little nicer. Next time I'll take more time coating it with drywall mud and ramming it in sand better.
The corners are just a simple curve and the profile operation is similarly simple. Since I don't want the cutter to travel all the way around the plaque but rather just cut the corners, I have to move those arcs and line segments into a new sketch. Then I select the sketch and add a profile operations. I'm cutting in red oak which is quite hard so I want the cutter to step down just a little bit at a time and make many passes.
With profiling operations, one thing to consider, is what will happen at the end of the cut when the stock and the part are no longer connected. The profile operation has a feature for 'tags' which are just material left uncut that can be removed by hand. Without them, the part might move into or away from the cutter and be damaged. In this case, the stock is well secured and the pieces cut off shouldn't cause a problem.
O.K. It's time to get this project rolling. I've already finished the design, now it's time to turn it into some plaques. I'm going to be making nine plaques and each plaque is going to have numerous operations including
- Pocketing the holes
- Profiling the curved edges
- Engraving the names and other information
- Drilling the holes for the arrow holders
- Drilling a keyhole for the wall hanger on the back
The first problem I have to solve is holding and alignment. Since I'd like to do the same operation on all nine before moving to the next operation, I need to find a way to hold the stock material securely and repeatably. Here's the solution I've come up with: I'll attach a piece of MDF to the router table and pocket out a large area to exactly fit the stock. The pocket will only be a 1/4" deep or so to keep the stock from sliding sideways with the force of the cutter. Then I'll attach each piece of stock in the pocket with double-sided tape.
The other advantage of this is that I can cut the stock to the exact dimensions on the table saw and avoid having to profile the entire edge. The only section that will have to be profiled is the two curved corners. This will help speed up the machine time.
In the picture above, you can see the design for the 'jig pocket'. The pocket has round corners to let the cutter move in. Without that, the corners would be cut round at the radius of the cutter and wouldn't accommodate the square corners of the stock.
My first CNC router was a JGRO built entirely by hand. It did a lot but wasn't very accurate or durable. Its biggest job was cutting out parts for a Joe's 2006 replacement for itself. I've almost finished assembling the new machine. Here's a purdy picture.
This is my first CNC machine. Built on the JGRO design. Lots of information on cnczone.