The first part of a guide to learning CAD. Includes reflections on generalizations of the skill acquisition process.
October 5, 2020
This is the first part of a field report describing how a hacker with terrible spatial skills learned how to create and print useful 3D parts. Having the ability to create accurate prototypes for your electronic projects allows you to create so many things that were previously out of reach and is an invaluable skill for any maker.
I describe how I determined what I needed to learn to make 3D parts and how I figured out the best way to acquire those skills. This process is something that I’ve spent a lot of time reflecting on; most of my job as a Security Engineer is to learn new skills quickly. I hope that others can use this as a framework when learning challenging and unfamiliar skills.
Why Learn Cad?
I have a need to make novel and useful things that I can hold in my hands. Unfortunately my 700 square foot apartment is already topped off with tools. I need something that will let me create custom prototypes for my electronics projects with mechanical precision and a very small form factor.
Let me introduce you to the wild world of 3d resin printing. I was very early on the 3D printing revolution; I built my own makerbot cupcake back in high school. Back then printers were loud, slow, and very prone to issues. Cheap resin based printers like the Phrozen Sonic Mini have totally changed the game, reducing the amount of mechanical variance and making printing useful parts accessible to people who don’t want to spend hours tinkering with the printer.
I have big plans for this techology, but first I needed to learn how to use a 3D printer and what exactly that entailed. Around this time, my wife ran out of razor blades for her razor brand. I have plenty of extras, but my blades use a propriety mount and won’t fit on the handle of her razor. I saw this as the perfect project which would let me learn the CAD workflow and iron out the kinks of printing to help me meet my high level goal of learning how to make custom parts.
Phases Of Skill Acquisition
Here’s a summary of the process that I use when tackling complex projects that require me to learn new skills:
Set SMART Goals
Determine Lacking Skills
Enumerate and Compare Implementations
Find and Connect With the Community
Iterate / Troubleshoot
When I start a new project that requires skills I don’t yet have, the first step is always to determine exactly what I’m trying to achieve. I like to use the SMART goal setting system to ensure that my projects have a concrete success / failure indicator. Starting the project with clear requirements also helps me to understand what skills I’ll need to learn to complete the project.
My specific goal is to create a razor handle that is compatible with the “Harry’s” brand of razor and to print that model with a functional degree of precision. By stating the project in concrete terms, I can take my high level goal of learning how to create custom parts for my projects and transform it to a measurable and achievable goal. It’s also relevant as my wife does not have a razor!
I gave myself 1 week to attempt this goal. I spent the first day understanding the high level requirements of the razor and listed the skills that I would need to learn in order to complete this goal. The second and third days were spent learning the tools associated with those skills in order to learn which tool would be best suited to my needs.
Once I had settled on a tool, I connected with the tool’s community and looked for quality content creators to learn from. I followed the easiest tutorials from those creators until I had a basic grasp of the tool. Only then did I start applying my new skills to the project at hand.
That’s the bird’s eye view of the way I approach the skills acquisition process. Now let’s examine the details of each section to see where this plan succeeded and where I hit implementation problems.
Determine Lacking Skills
I know that I need to create a computer model of the razor handle for the 3D printer to consume, so I began by looking at the available software that would allow me to create this model.
Back in high school I worked with OpenScad to create programmatically generated models, so my first instinct was to check if the tool that I already knew would be suitable for this project.
I began looking at the Open-Source Printing Course which seemed to be taught by a reputable professor and used OpenScad for the lectures. I decided the best way to see if OpenScad could work for this project was to complete the first home work assignment for this course. Gaining real experience with a tool is the only way to understand its limitations and strengths.
Not my proudest creation, but it was pretty fun to make! With a simple primitive system, it’s very easy to get started with OpenScad. I did find that there were times when the bare bones interface made trouble-shooting difficult and I was quickly getting lost as to which piece of the code related to which portion of the design.
Despite my reservations I moved forward with OpenScad. This was my first deviation from my plan. At this point I should have still been comparing options. By preemptively choosing a tool without looking at the other options, I lost a lot of time. It’s a good reminder for not to take local maxima (using a tool you know instead of looking for the best tool) when at the start of projects.
Enumerate and Compare Options
Armed with my OpenScad knowledge, I dove into the razor design. I quickly realized that the simple nature of OpenScad was a two edged sword. Although it made creating simple prototypes easy, it also lacked core functionality. Building smooth curves required importing a library and parsing through difficult to read OpenScad code to determine the interface.
The best result I could get from the program was functional, but technically and aesthetically displeasing:
The larger issue is that OpenScad does not have a good method to work with offsets, create construction planes, or model constraints. At this point I didn’t know that this was what I was missing, but I had a sense that this design process was more difficult than it needed to be. I did know that the process of determining the position and size of components in particular was bothering me.
I thought about writing a library which outputs OpenScad code to create a more robust relation system. Whenever I think I have a good idea I always check to see if someone has had it already. Sure enough there is a Python library which does just that: SolidPython
Getting Back On Track
At this point I took a step back and realized where I had deviated from my plan. By not taking the time to examine all the strengths and weaknesses of the tools available to me, I lost time working in OpenScad. I could have doubled down and tried to make the tool work by learning SolidPython but the package didn’t seem to have clear documentation.
There was a real chance that I would end up learning this tool and finding similar limitations. One lesson that I keep learning is that you only have so many innovation tokens to spend on a project if you want to finish in a reasonable time. I already spent my tokens on learning OpenScad, and I didn’t feel comfortable investing more just to get the baseline functionality that I need.
So it’s back to comparing options and looking for a better tool. The core issue with OpenScad for me is that 3D modeling is an inherently visual process, and working in text requires a lot of mental overhead (even for a programmer!). This led me to look for the industry standard tooling where I learned that AutoDesk’s Fusion 360 software was free, and solved all the complaints that I had with OpenScad.
Sometimes when you are working to learn new skills, you make mis-steps that lead you down paths which don’t lead to your immediate goal. Learning OpenScad was one of these moments for me, but the effort was far from wasted. Struggling to express the relations between objects in OpenScad helped me understand what features I wanted out of a CAD tool. Getting hands-on practice with the modeling process in a bare-bones software let me learn the core skills of planning sweeps, extrudes and rotations that are also used in Fusion 360.
In the second part of this series, I’ll explain how I got back on track by finding the best content creators for Fusion 360, and defined small projects that gave me the experience I needed to create the final razor. I’ll also describe some of the most common issues that come up when printing with resin-based printers and how you can troubleshoot them to dial in your print quality.