The Maker movement seems to be all about weekend DIY projects, in the garage, with wires hanging out, and an Arduino stuck in for blog cred. Maybe it shouldn't always stop there.
Purple Squirrel Games is making a very simple product but doing it in an exceptional way.
Their first product is a mancala game board. Mancala has been around for at least 1200 years so one wouldn't think that it's an area ripe for innovation but Purple Squirrel doesn't agree. And their innovation process isn't focused only on the product. In fact, it seems to have the following characteristics:
Innovation in design and build quality.
The board is solid walnut and the seeds are real river stones. The pits and stores are CNC carved in a way to make picking up the seeds easy, avoid manufacturing 'dwell marks' and create a lovely appearance. The board was play-tested to make sure the pit size is just large enough to hold the stones but not too large to waste material. Everything from the raw materials to the packaging has been considered and improvements made wherever possible. The final product is beautiful to look at and feels like a solid piece of craftsmanship.
Innovation in the process.
Purple Squirrel used Maker Redux to build a virtual team around the project and control the manufacturing process. Like all Maker Redux projects the details are there for you to learn from. (full disclosure: I'm involved with Maker Redux and one of the associated companies)
Innovation around the edges.
Purple Squirrel isn't done. They're also innovating around the marketing and distribution. I'll post again about them soon.
So what are the results?
They sold two boards the first day it was listed on Amazon and sold out in a week. Not bad for a product with over 500 competitors.
Here's some of the lessons learned during this "simple" project.
- A simple wooden gameboard isn't simple...or just a game board. This one is; board, finish oil, stones, bag for stones, instruction sheet, feet, box, and shrink wrap.
- The stuff you can't touch includes a UPC license, product liability insurance, and a sales-tax license for the distributors to see.
- Fullfillment by Amazon fulfillment has different pricing for different size boxes. Had the board been an inch larger, it would have cost $4.00 more to store in Amazon fulfillment.
- Wood finishing is complicated.
- River stones can scratch finished walnut if not polished enough.
- CNC tools can create 'dwell marks' in the wood which must be sanded out. This can significantly increase the manufacturing cost and time and require human involvement.
- Sourcing things like the velveteen bag from China seems easy and cheap...unless it's Chinese New year.
- Chinese New Year lasts a month.
- Nothing gets shipped during Chinese New Year.
- Cardboard shipping boxes are a significant per-unit cost. Don't neglect them.
- Cardboard shipping boxes might be opened by Amazon fulfillment by accident. They should be shrink-wrapped to avoid this.
- Shrink-wrapping adds cost.
- Even a 1200 year old wooden game board needs product liability insurance.
- Product liability insurance adds cost.
- Glass beads are sold for filling vases.
- Small polished stones are sold for aquariums.
- There's huge variability in the size of polished stones and glass beads. 6mm isn't always 6mm.
- Getting samples of stones adds cost
- If you want a product to sell well, it needs good photography.
- Good photography adds cost.
- A game board without feet will slide around on the table. This is annoying and can scratch the table.
- People get annoyed about a scratched table.
- Instruction sheets printed on your inkjet printer look like crap.
- Professional printing adds cost.
- No matter how many times you have an instruction sheet proof-read, there will be one typo found after it's printed.
- Product design is hard.
- Good products sell.
- You still have to market good products.
A couple years ago I was flattered to learn that one of my projects was referenced in a TED talk by the guy that invented the Arduino. Today I learned that one of my designs has been incorporated into spray painting drone by the artist/vandal KATSU. The project is fully detailed on the Icarus One website in case you want to build one and make your own social commentary. KATSU is controversial and I'm not sure how I feel about his work but I think it's cool (and surreal) to see my designs remixed and extended like this.
See if this story rings a bell:
My friend is a maker. He's built a 3D printer, owns a Shapeoko, and designed his own circuit boards. None of that is related to his day job - he's a teacher - it's just a hobby. He's a member of the local hackerspace and he's also into ukuleles, and brewing beer, and table-top games.
A couple years ago, he designed a game that he thought would be fun. It's clever and unique and definitely not the kind of thing you'd find in the toy aisle at Wal-Mart. He cut the wood pieces with his Shapeoko and 3D printed the tokens. When he showed it to his gamer friends, they liked it. He took it to the hackerspace and everyone there thought it was pretty cool.
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.
About a year ago I bought a standing desk. The desks are really nice but the options for surfaces are either very basic or expensive. I wanted to do something custom so I bought it without a top. I had an old top (actually a door) to use in the meantime and started thinking about what I wanted.
Time has gone by and my big ideas kept getting pushed down the stack - until recently. A friend owed me a favor and volunteered to help me move the project ahead. I had access to a some remnant strips of walnut and decided to make a "butcher block" surface by gluing them together. After thinking it through, we decided to make the whole surface curved by bending the strips around a form. The finished desk will be about seven feet wide and 24 inches deep. The rough idea:
First we made the form from a couple layers of plywood. The arc has a 110" radius and was cut with a router attached to a board pivoting around a screw. Sorry I didn't get any pics of that process.
Next we ripped and planed strips of walnut and maple. The walnut is 5/8" thick and the maple is about 1/4". There will be a strip of maple about ever three inches of walnut.
Then it's just a process of applying glue, clamping to the form and letting it dry over night. Repeat. I was hoping to be able to glue multiple strips at once, but in the end we could only do that with one strip of walnut and one strip of maple.
Heres a picture after about eleven strips. The form is on the right side.
About this time, we got smart and mounted the whole thing vertically. This way, it's easier to keep the strips in alignment and we don't have to fight with the glue oozing out the back and gluing the desk to the table below.
At one or two strips per day, it took over three weeks to build up the full width of 24" Below, you can see the full piece wiith the form leaning against the wall. A lot of time was spent cleaning up glue and planing the layers flat.
We added one more strip to the front and back edges. These strips are 1.5" thick to give a 'skirt'. This makes the whole desk look thicker and helps hide the attachment to the frame. We started working out details for how to finish the ends. We marked the ends as shown.
And cut them even. You can see the front and back skirt boards on the edge.
To finish the ends, we cut larger blocks of walnut that will be mounted perpendicular to the arc. They'll be attached with screws but otherwise not glued. This will allow the strips to expand and contract with humidity without breaking glue joints. We marked the curve to continue through the sides.
And cut them off to match.
Final planing and touch up (sides removed)
Then sanding and finishing!
After installing on the Uplift frame and mounting monitors. I'm really thrilled with how the whole thing came out. \
Big thanks to my friend Dan for all the help with this project.
For the last few months I've been helping out with a side project to write a CAM workbench for FreeCAD. Being a not-very-good programmer, I've focused on cheer-leading, testing, and trying to stay out of the way. The project has come a long way, but it will still be a long time before the average user sees it. Still, it's a good time to start talking about the workbench, setting expectations, and encouraging folks to take a look.
Don't we already have open-source CAM tools? Why do we need another one?
A quick Google search or browsing through the LinuxCNC wiki would make you think the field is already crowded with alternatives. If you've actually tried to find a functional solution though, you probably already know the answer. Most of the projects out there are stale, offer limited utility, or are very specialized. A lot of them are completely dead. To be fair, some of the projects like BlenderCAM, HeeksCNC, and the Inkscape plugin gcodetools offer decent hobby-level functionality but there's nothing that competes with the commercial alternatives.
To be competitive, an open-source alternative really only needs two things (and time):
First, the application has to be user friendly:
- Cross Platform
- Integrated with CAD
- Reasonably Intuitive
Cross Platform means the application meets the user half way. Learning the application means the user will have to understand new concepts, watch tutorials, read manuals, and suffer through bugs. Asking them to change operating systems or compile from source is unreasonable. Integration with CAD doesn't mean the user should change his primary design tool but the line between CAD and CAM gets kinda fuzzy in practice. Visualizing your tool path as it relates to your base geometry and making minor tweaks to the design to get a usable path are common. Switching tools for minor adjustments is annoying and leads to errors.
The application doesn't have to be a marvel of form and function but it needs to have a reasonable UI. By this I mean that it should work for a hobbyist who needs to set up a simple CNC router job but provide capabilities for an experienced machinist to set up more complex jobs as well. (multiple fixtures, tool tables, and selection planes). It should let users customize their configuration so the output is predictable and works with their machines.
And, of course, it's got to be fast. 'nuff said.
Second, the project has to appeal to the developers:
- Reasonably easy to learn
- Great community
- Clear license policy
Plenty of digital ink has been spilled discussing what it takes to make a great open source project so I'm only talking about those things that I've personally seen kill open-source CAM projects.
The number of people in the world that have both programming skills and machine tools is pretty limited. For open source CAM to succeed, the developers who show up need to be able to get into the project easily and become productive. A great open source CAM project would have a great architecture, robust community, thorough documentation and large user base. It should be easy for a new developer to understand the landscape and figure out how to improve application -even a little bit- and then get their improvements adopted by the project.
I'm not sure anybody including lawyers actually like dealing with licenses but they're a reality we have to live with. If the license landscape isn't unambiguous, packaging and distribution of the application is a non-starter. If the license doesn't protect the developer contributions and make it easy to distribute, why bother?
The things I've listed aren't rocket science and they don't, by themselves, make a great application. But together they create an environment in which a great application can mature. Obviously I'm writing this because I think the FreeCAD Path project has this particular mix.
So where is the project now?
Rather than trying to provide all the functionality of a mature CAM application, Path will initially provide only the basics. In fact, the real focus will be on the underlying infrastructure.
Like other workbenches in FreeCAD, the low level stuff is programmed in C++ and the high level, user-facing, functionality is written in Python. The low-level stuff includes the data structures to represent a single move (command), a group of moves (path) and other structures for organizing projects. It handles representing those things on the screen and provides the interfaces to Python so they can be manipulated by the GUI and macros.
An import framework is provided so path information created externally can be loaded and rendered within FreeCAD. Likewise and export framework exists to get path data out in a usable form.
If importing and exporting were only provided through the compiled C++ application code, it would mean that FreeCAD's ability to read and write gcode would be fixed and difficult to adapt. So the import/export framework is exposed through a set of pre_ and post_ scripts written in Python. This means FreeCAD can play nice with all kinds of other applications. If you already have a program that generates gcode, you can import the code into FreeCAD. If your machine needs gcode in a unique dialect or modified some other way, you can tweak the export post_ script to get exactly the what you need.
This is pretty handy but most users will want to create gcode directly from the things they design in FreeCAD and this is where things get interesting. Experienced CAM users opening the workbench for the first time will be asking questions like, "How do I create a profile or pocket a feature?" CAM operations like this will be implemented as a Path-Python-Feature (PPF). A PPF is a python script that uses the FreeCAD API to generate the path data. Almost everything you will see in the workbench GUI represents a PPF. PPFs can have have icons and dialogs and integrate seamlessly into the workbench GUI and power users can study and extend their functionality.
Now is the time to set expectations. The initial set of PPFs will be limited. Users just looking for a functional CAM system might be disappointed. There will be pocketing, profiling, and drilling operations, but they will have plenty of bugs and missing features. Other kinds of operations, like 3D surfacing, will be missing altogether.
CAM users will also be looking for tools to organize operations into a complete project -- Sequencing, tool management, part nesting, etc. Early users of Path will see some of this but it too will be buggy and incomplete. Users should expect things to change a lot in the near future.
Because all of the PPFs, project structure, and pre/post processing is written in Python its pretty easy to experiment with and improve. No doubt, an active community will mature the operations quickly and add new ones as well.
Once Path is merged into the Master branch of the FreeCAD development repository, it will still be quite a while before end-users see it. Users running the development version will see it, of course, but it might be a year or more before Path makes its way into a stable version. By then, the functionality should be more mature and usable for real CNC projects.
For the last eighteen months I've been working with a group building a way for people with ideas to get things made by people with tools. Here's the big idea:
HeeksCNC can be finicky about profiles. Often I've found that a sketch which should be easily profiled won't generate any gcode at all. When I look in the console, I find an error like this
File "/usr/lib/heekscnc/kurve_funcs.py", line 247, in profileraise Exception, "couldn't offset kurve " + str(offset_curve)Exception: couldn't offset kurve <area.Curve object at 0xb6f4bf2c>
I got the chance to speak about FreeCAD at the Osmoces event near Chicago over the weekend. I had a really good time seeing some of the other presentations and exhibits and just hanging around with some pretty cool people. In addition to the talk, I also taught a workshop where we got hands-on with the software and modeled a simple part.
One theme in my presentation was that this stuff is really hard. It's hard to learn, hard to use, and mistakes have real consequences. This isn't just true of FreeCAD but of any CAD or modeling software. This fact was reinforced for me personally in the workshop where I saw frustration and confusion first hand.
Even though students struggled at first with the interface and the general concepts, most were able to make a lot of progress and judging by the number of students who stayed late and asked about areas I hadn't even covered, the demand for powerful open source design tools is growing.
This was the second time I've taught FreeCAD to a group of new users and I'm starting to get a sense for where they get hung up. I'm hoping to teach this again so I can build on that knowledge and perhaps find better ways to explain the core concepts. If you have anecdotes about learning CAD or teaching it to greenhorns, I'd be interested in your comments.
If you're looking for my slides or notes, they can be found here.
This is still early but it's too cool not to share. Yorik has added a WebGL exporter to the FreeCAD arch module (but it seems to work everywhere in FreeCAD)
Open a model in FreeCAD and select the objects in the tree
Export the objects (File -> Export) and select WebGL
Save the file and open it in a browser: WebGL export (will open in a new window)
(The default view is zoomed up close but clicking and dragging with the mouse buttons will zoom/pan/rotate the object. There's still plenty to be done with materials and lighting but being able to share FreeCAD models through a browser is very cool.)