The Hell Ya Beller Fun with hot, pointy, sharp, and caustic stuff.


Fun in the shop

I spent the Thanksgiving holiday at my brother's place.  It was a very relaxing weekend spent eating too much and shooting stuff.  (I'm not very into guns but this stuff is fun!)

My brother recently bought a jealousy inducing lathe like this:


This thing was barely out of the crate.  The DRO hadn't even been installed yet and and he was just getting familiar with it.  So, of course, we decided we needed to make something  -- preferably a piece of high-precision technology.


Armed with a healthy disregard for prior planning, a can-do attitude, and the proper fluids:



we started making chips.



Two days (and late nights) later, the world's first tactical yo-yo.  Heavy enough to take your head clean off.



The first field test was less than impressive


So, back to the drawing board:


In the end, the device functioned within specification.  It's a bit heavy for normal use but there's plenty of material that can still be removed to improve it.

All joking aside, I really enjoyed this project. Too often we think through a project and, figuring that we could do it, we declare it done.  Actually DOING it unearths all kinds of tricky problems but that's where real experience is developed.  I know my meager skills on the lathe were improved greatly.   And I had a blast.


Tagged as: , , No Comments

Keeping Good Company.

A reader on my Magic Clock site made me aware of this TED talk by Massimo Banzi, Co-inventor of the Arduino.  He lists some really cool projects ranging from the important to the silly.  I might be closer to the Farting Chair end of the scale, but hey, I made the list.  Fast forward to 10:25 to skip all that nonsense about 14 year old kids changing the world by detecting earthquakes.


Understanding My Enemy


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.



Understanding Tool Path Generation in HeeksCNC

When I first started using HeeksCNC I was totally confused.  It seemed overly complex.  When I finally understood it, I realized what a great model it is.  I still won't claim to be an expert but from my perspective it meets three really big objectives.  One of these is compromised in every other solution I've seen:

1) It keeps the computationally intensive algorithms in C++ where they run fast.   Other systems that are flexible and customizable are written in interpreted languages and that means they're slow for computationally intensive tasks.  Generating a complex path can tax a processor and really needs to be fast.

2) It provides a scriptable interface in a friendly language (Python).  No matter how good the developer was, there's no way he can anticipate every need.  That's why we like applications like blender, inkscape, gimp, and FreeCAD.  These apps assume that the user may want to extend the application.  Making the tool path generation accessible through a scripting language unleashes a lot of power.

3) It allows customization for the machine specific output without recompiling.  This is the Post-processor.  Not all machines are created equal.  Different capabilities and different controllers mean the final output must be tailored.

Dan Falck did a great write-up of how Python is used in HeeksCNC to generate tool paths using the C++ libraries.  I hope a future CAM workbench for FreeCAD has a structure like this.

Tagged as: , 1 Comment

Casting Demo

I think the thing that got me into this hobby in the first place was reading the [amazon_link id="0960433007" target="_blank" ]The charcoal foundry (Build your own metal working shop from scrap)[/amazon_link]. It's the first of an awesome series that led me to casting aluminum which, somehow, got me into CNC.  I don't do much casting these days but At the last meeting of the Columbia Gadget Works at my place I did a little casting demo.  One of our members took some incredible pictures:








A couple other guys also brought a Rubens Tube they've been working on.  So much fire for one night!


My son edited this one and I think the effect is cool!


Tagged as: , , , No Comments

FreeCAD Book Published!


 Dan Falck and I spent the last couple months working the Packt Publishing to write this book.  The book is written as a series of recipes to guide new users through some of the basic concepts in FreeCAD.  The later chapters get into how Python can be used to automate and extend the application.

I hope the book will be a benefit to the community and make it easier for new users to get productive with this great application.

BTW, Packt Publishing is very supportive of Open Source software.  According to their website, a portion of the royalties will go directly to the project.

Tagged as: No Comments

FreeCAD hidden gems – setting colors for individual faces.

This is one I'm documenting here because it's come up twice on the #freecad channel and because I keep forgetting it myself.

FreeCAD has a bunch of different ways to change the appearance of solids.

You could change the properties on the objects view tab:


You could use the appearance... tool from the object context menu


You could use the random color button from the object context menu


You could use the appearance... tool from the view menu (this is the same as the context menu.  Why it's in 'view' and not 'edit' I'll never understand.


You could use the random color item from the view menu (see above)


There's at least one more that's different than all the rest.  If you select the object and right click over the tree (not the 3D window, but the object tree) you get a menu item called set colors...



This one opens a task panel.  With the task panel open, you can Ctrl-click individual faces in the object and then set different colors for them.






Tagged as: 4 Comments

Simple Assemblies in FreeCAD

FreeCAD's assembly module is still in development.  By all reports, this is going to be an amazing feature just dripping with awesome sauce.  Alas, it's not here yet.

In the meantime, if you want to design anything with multiple parts, your options are pretty limited.  Here's a technique I've been using on the OpenROV project:


1) Design each of the parts in a separate FreeCAD project file.

2) Export the part as a STEP 214 file (.stp)

3) Import all the step files into a new FreeCAD file just for the assembly.

4) Duplicate any parts you need multiple instance of.

5) Use the placement dialog to rotate and position the parts together.



Step 1 - Design each of the parts in a separate FreeCAD project file.

You can certainly design multiple parts in the same file but this causes problems if you need two instance of a part for the assembly.  You can select a pad object and duplicate it, but the duplicated part will not be linked to the sketch so any downstream changes will not be incorporated into the duplicates.  I use my FreeCAD designs in other software like HeeksCNC for generating gcode and I find that the .step files are more portable.

In the image below, I have three FreeCAD files open.  bulkhead, ductingbracemount, and a new empty assembly file.



Step 2 - Export the part as a STEP 214 file (.stp)

Step files  are widely supported by different CAD/CAM applications.  FreeCAD is no exception.  Both import and export have worked flawlessly for me.  Simply select the solid in the project tree and click the menu item File->Export...  Then, when the dialog appears, select STEP 214 from the file type and give it a name.  Repeat for the other parts too.

Note: I use the same name as the file and the extension .stp.  If you don't include the extension, FreeCAD won't write the file.  I think that's a bug.



Now in my project directory I have bulkhead.fcstd bulkhead.stp ductingbracemount.fcstd, and ductingbracemount.stp.  If I make changes to the part, I have to export again.

Step 3 - Import all the step files into a new FreeCAD file just for the assembly.

Switch to the empty assembly file and import the .stp files.  This is just the reverse of the previous step.  File->import.  The import dialog will let you select multiple files at once and import them all.  This is nice.

One thing to note about the import export:  STEP files preserve the position and orientation of the parts in the global coordinate system.  Once the parts are imported, you can adjust these properties.  It's really helpful, though if you at least get your parts drawn in the right plane before exporting them.  I find adjusting position to be relatively painless but getting the rotation correct is more frustrating.  Once imported, the step files will behave like other objects.  You can run boolean operations on them, adjust colors, make them invisible, etc.



4) Duplicate any parts you need multiple instance of.

In my example, I need two ductingbracemounts.  Select the part in the tree and use Edit -> Duplicate selection.  The duplicate will be in the same position as the original so it will be invisible until moved.


5) Use the placement dialog to rotate and position the parts together.

Select each part in the tree and use the placement dialog Edit->Placement... 

to fine tune to rotation and location of the part.  Most users will fine the Euler angles (Yaw, Pitch, and Roll) more comfortable than the default "Rotation axis with angle" for setting the rotation of the part.


Bonus step - Make pretty output.

Actually this is more of a teaser since it isn't in master branch yet but mrlukeparry has been doing some really cool stuff with the raytracing workbench and soon we'll be able to generate nice pictures like this:


*Feature Ideas:

Here's some things that would make this a lot easier

  • FreeCAD should be able to import from other FreeCAD files.  It would be nice to import a solid, sketch, or part from one file into another without having to export to step.  Step is useful for going to other applications, but it would be nice to stay native whenever possible.
  • When exporting, FreeCAD should give some help with the filename.  Default the extension based on the type selected and default the filename to the current part name.
  • Can anyone calculate the rotaton with angle in their head?  I know it's superior to avoid gimble lock, but it's not very human friendly.  Maybe I'm wrong.
Tagged as: 9 Comments

Cutting Plastic

I finally started laser cutting the plastic pieces for the chassis.

I happened to have some orange 3mm acrylic and thought it would make a nice accent color.


Unlike the standard shell, mine is cut in three pieces and glued together.  I had some worries that this wouldn't be very strong but it turns out that the glued joint is extremely tough.  With acrylic, we're basically welding the pieces together.  The solvent cement softens the plastic and the fused joint is incredibly tough.  Even so, I reinforced it with a couple pieces I'd cut to calibrate the laser.  These are just glued in underneath to add some thickness to the glued surface.  I don't know how durable it will be over time, especially flexing it from time to time to assemble, but so far, so good.




Electronics Chassis Modeled.

I have all the little bits for the electronics chassis modeled now.  I think all these parts will be cuttable for me.  I still have to model the endcaps for the tube and some minor cleanup.  Then it should be ready to cut.

In the full assembly picture below, I don't know why the edge of the tube is showing through the wall of the shell.  It isn't penetrating and the shell isn't set to transparent but FreeCAD's rendering is goofy.




Tagged as: No Comments