With the 3D printer, I’ve been vexed by the problem of deconstructing a volume into layers, then layers into a fill by path; all the while dealing with voids, unsupported regions and hashing of solid parts for stability. I haven’t seen much written about the theory.It hit me tonight (couldn’t sleep; darn head cold) that the solution to this problem isn’t with the trivial slicing, but reduction to primitives.When designing a physics engine in a modern game, it is often easier to think of world objects in terms of simple geometric figures. Instead of representing a human as a single object, the physics engine represents the human as a collection of cuboids, connected by movable joints.The theory goes something like this:Slice the object into layers by the intersection of a cuboid of extrusion unit thickness. Subdivide this layer by column of unit thickness, then by row. The end result is a volume represented as voxels. Voxel is a volumetric pixel, an older method of representing landscapes popularized by the game Comanche (I did a college dissertation on the game technique, applying it to Mars surface data).Assuming we have a set of “printable” primitives – such as cuboid, line, point, we can break the volume into a collection of these primitives. The algorithm should be aggressive in attempting to maximize the size of primitives, while minimizing unsupported regions, and point primitives (as they may not be printable individually).Once this process is complete, the algorithm can generate a collection of unsupported polyhedra, and inject primitives to support them.For each layer of unit thickness, iterate over the primitive list, and draw the primitives which intersect the layer. The primitive at this point can be sure that it is supported, and enclosed, and can optimized itself by hashing as required.Hashing is a technique for minimizing the amount of material used to represent a solid area, while improving the structural integrity of the solid. A hash is literally a torsion box made from plastic. One of the undesirable properties of plastic extrusion is the tendency to warp when cooling, and this hashing is a way of working around this problem.Now that I have the theory, I’ll attempt to reduce to practice; while learning the Sketchup API.
Just before my son’s 4th birthday, my wife and I purged some of his toys. We looked for things he didn’t play with any more, stuff our younger son wasn’t interested in, broken toys, and toys with missing parts. The amount of stuff we found was staggering. What we could – we donated; what we couldn’t donate we removed non-recyclable parts and recycled the rest – but we still ended up with lots of stuff that went right into the landfill. There has got to be a better way. With the recent spat of recalls related to lead or dangerous products, I wanted to be more aware of the life cycle of the toys my kids play with.
- What if you could make your own toys?
- And have the ability to directly recycle them into new toys when the children get bored or break them?
- What if you could share your toy designs with a community?
These thoughts have driven me to start designing and building my own 3D printer. I’ve been following the RepRap dev team with enthusiasm, but wanted to take a slightly different approach to the problem. The RepRap’s goal is to achieve self replication – but in order to build your own RepRap, at the moment you need access to a real 3d printer.I designed Fabr as a 3D printer which uses commonly available parts, requires minimal part fabrication, is highly accurate, and has enough power to not only extrude plastic, but can be used to mill metal, wood or plastic.Here are some of Fabr’s key components:
- 80/20 extruded aluminum Bars and Fasteners (purchased from the 80/20 Garage Sale on eBay)
- Anti-backlash nuts and drive Couplers from DumpsterCNC
- from Jameco
- Screws, bearings, and aluminum bars from McMaster-Carr
- Timing belts, and Pulleys from SmallParts
- A custom stepper motor controller board based on EasyDriver3
- Interfaces with Sketchup
Here’s a Sketchup of the latest design:
I’ve been developing an arduino shield based on the EasyDriver which uses an Allegro 3967 Microstepping stepper motor controller. Essentially the board has 3 drivers, and connectors for end stops. The first board is currently being made at Batch PCB – an offshoot of SparkFun; I expect it any day now. Once complete, I’ll solder it up, and run it through its paces. I’m looking into using the 3977 which would allow a 2.5 amp motor – a project for another time.
The next part of the project is the extruder. I’m currently determining if I want to route a cord, or have a granule hopper directly on the extruder head. Stay tuned. And yes, it has a funky Web 2.0 name – domains are hard to come by…. Fabr.org currently redirects to ooeygui.com.