With some help from Chris and Sector67, I've been able to work out a process for getting to a custom-fabricated printed-circuit board (PCB) that's amazingly simple and straight-forward, even for people who aren't "hardware guys". This article gives an over-view of how and why you might want to use at least part of this process...
My background is 30-odd years in software engineering. From the time I was in high school (and managed to sneak out of the college-prep track long enough to take an electronics class or two with the "shop kids"), I'd struggled to learn electronic design and troubleshooting, mostly to no avail. It always felt like one of those "there's two kinds of people in this world" issues: my brain seemed wired to "get" software, but not hardware. Oh, I picked up enough to do simple projects and basic Ohms-Law stuff, but just barely.
So when I joined Sector67 a year or so ago, I homed in on Arduino and Electronics 101 classes. You may have seen me present at a monthly meeting on my automatic chicken-door (http://www.sector67.org/forum/viewtopic.php?f=10&t=85
) or my RF remote appliance controller http://www.sector67.org/forum/viewtopic.php?f=10&t=129
I decided a couple of months ago to run with the RF remote control project as a test-bed to try to learn how to lay out a custom PCB and have it manufactured. I had tried taking Chris's class in Eagle CAD and had found the interface to be pretty annoying and difficult. Chris had suggested looking at another tool, called Fritzing, but it took me a couple of months and seeing a couple of articles online about it before I finally downloaded the (free) software and tried it out: Bingo!
Fritzing is a very easy to use tool that let's you capture (or design up-front) a breadboard circuit. With a breadboard, you just stick jumpers in holes to make connections; no soldering needed, easy to make changes until you get it working right. Fritzing lets you just drag wires into place with your mouse, on a graphic display that looks just like your breadboard:
fritz_bb.jpg [ 105.84 KiB | Viewed 1041 times ]
bb.jpg [ 85.64 KiB | Viewed 1041 times ]
[I actually used two different Arduinos during this project: the Boarduino version is very handy for breadboard work, as it plugs right into a breadboard for quick & easy prototyping. For the actual PCB, I wanted to make an Arduino shield, so in Fritzing I used a standard Arduino Uno. Plus, Fritzing doesn't have a predefined part definition for the Boarduino...]
perf.jpg [ 82.01 KiB | Viewed 1041 times ]
[I also made a perf-board version of this circuit. I've called perf-boards "needle-point with a soldering iron", and building this one convinced me I just had to learn to make PCBs!]
Fritzing includes predefined parts definitions for hundreds of common parts, including multiple Arduino versions and most of the parts in the the Sparkfun catalog. It also provides a "mystery" chip feature (the black box with the question-mark above) that lets you define the number and names of an arbitrary set of pins.
I was overjoyed to even get this far: just using Fritzing to document a breadboard design is incredibly valuable. I had been struggling to find some easy way to capture and document projects; Fritzing meets that need beautifully, even if you never need the schematic or board-layout features.
But that's where the magic of Fritzing comes in: once you've drawn your breadboard design, a click of a button switches to a schematic view:
fritz_sc.jpg [ 87.85 KiB | Viewed 1041 times ]
Since I tend to not use the schematic view at all (personal preference), this schematic is a default, non-prettified view. You can easily drag the chips around and reposition the wires to "look nice", if you care to...
The final view in Fritzing is the PCB view, which makes the schematic/breadboard design into actual traces on a circuit board:
fritz_pcb.jpg [ 82.51 KiB | Viewed 1041 times ]
This shows my final design, omitting some intermediate steps. Fritzing has an "auto-route" feature that tries to lay out all the traces on the board so that they don't overlap each other, using a double-sided board design if you need it (as this one did). Most likely it will fail to find a workable route for a few of the connections, but easily allows you to manually shift things around until you get a workable design. It can feel kind of like doing Rubic's Cube at first, but with a little practice it isn't too hard, at least for relatively simple circuits. Plus, Fritzing has a "check design rules" feature that validates nothing's crossed and things are far enough apart to actually build and function properly.
Once you have a PCB laid out, you can export it as "Gerber files", an industry-standard format for specifying how to build a PCB. There are several companies online that will accept these files, build some finished PCBs, and mail them back to you.
I identified two leading vendors: one in Germany (http://fab.fritzing.org/fritzing-fab
) would make me one (1) PCB for 28 Euros. The other in China (http://iteadstudio.com/
) would make me ten (10) PCBs for $26. I couldn't convince myself to spend more money for 10% as many boards, so I emailed my Gerber files off to China on New Years morning. And 22 days later, the mailman had me sign for a small box of PCBs.
I promptly ran over to Sector67 and started soldering parts onto the board. I plugged it on top of my Arduino, downloaded the application code that I had written and tested using the breadboard circuit, and WOW: it worked first try!
pcb.jpg [ 84.35 KiB | Viewed 1041 times ]
Once I recovered from the shock of "worked first try", I quickly realized that this was a Big Thing: even a software guy can make inexpensive custom PCBs almost painlessly, using a free, user-friendly open-source tool. As soon as Chris saw how excited I was, he told me I needed to write it up for the S67 forum. So here it is...