About a year ago, I built my DUMBo display board (post 1 post 2 post 3). It has functioned flawlessly since; I haven’t touched the hardware or the firmware for the last 13 months.
It isn’t, however, the nicest looking thing out there; it’s hand-wired on perfboard, and it uses what I would call normal-sized (and most people would call giant) transistors and resistors. I’d wanted to have another one but didn’t want to hand-wire it, I wanted to do some pc-design work, and I wanted to ramp up on SMD components. So, building a real version of DUMBo seemed like a nice thing to do.
Eagle
The first step was doing the design, which meant choosing a design program. I settled on Cadsoft EAGLE, partly because it’s commonly used, but mostly because it’s free if you limit yourself to 2-sided boards that are no bigger than 100mm x 80mm (4” x 3.2”) and don’t use it commercially. There are also hobbyist and (of course) standard versions.
Eagle is fairly typical to many CAD programs, which means the UI approach will make you scratch your head at times. CAD companies invented UI paradigms before the standard Xerox PARC/Windows/Mac ones became popular, and it’s not uncommon for them to still follow those sorts of approaches. In instead of doing a “select/modify” approach (common in Visio/Word/PP), it uses a “choose tool/apply” paradigm.
Using Eagle basically has two steps. First, you go to the schematic for the board that you are working on, and add items to it. There are lots of built-in libraries, and there are other ones available. In this case, I was building an Arduino shield, so I downloaded the Adafruit library, and used their shield as a starting point. Note that their arduino is lacking some of the additional pins from newer revisions. I also had 12 resistors (I chose 1206 SMD resistors as they looked doable; there are some that are much smaller) and 4 NPN transistors (I chose SOT-23 devices). The 1” common-cathode 7 segment LED displays (green, but they also come in red, yellow, and blue, though you may need to change your resistor values) I’m using from Futurelec didn’t have a eagle definition I could find, so I modified one of the other displays based on the data sheet to have the proper dimensions and pinout, and then added those to my schematic. After I had placed all the components in the schematic (the placement is arbitrary), I started wiring them together. This is a simple manner of connecting the devices together appropriately. After a few iterations, I was left with the following:
The design is pretty simple; each of the displays has 7 segments plus a decimal point, so there are 8 resistors. I choose 150 ohms to be conservative, but after looking at the result, I think that’s not bright enough. The displays are multiplexed, with a separate NPN transistor turning them on and off.
There is a 4-pin header for an LPD8806 RGB LED string, which merely has +5V, ground, a clock pin, and a data pin. And finally, there is a connection for a Adafruit XBee adapter board, so you can make it wireless if you’d like, along with two headers that control whether the xbee is set up or not (if they are connected, you can’t program the arduino). And, of course, the arduino, though it’s only an R2 so it is missing a few pins.
Routing
Once the schematic is drawn, you can switch to the board layout page and start laying out the board. Initially, you see the empty board with all the components off to the side. In my case, I had some fixed components; the arduino pin layout is fixed, and the displays need to be next to each other as well. Also, the pin headers for the LED strip and the XBee have a preferred location as well.
When you add each component, Eagle will draw lines between pins that need to be connected by traces. If you are feeling lucky, you can ask Eagle to autoroute, but unless the board is simple, you probably won’t excited by the result. You can also draw routes by hand, and whenever you complete a route, it will get rid of the line saying it needs to be connected.
Routing is a puzzle, and for me, it’s a fun puzzle. Start with the simple lines, and go from there. Don’t be afraid to rip existing traces up to make them better. Pro Tip: If, in the middle of a route, you click the center wheel on the mouse, Eagle will switch the route from one layer to another and create a via automatically. This is much easier.
Here is the board layout:
The routing for Q1/Q2/Q3 was quite interesting. To get the drive signal to Q2 and Q3, I ended up looping the signals up and around, and then I rotated Q1 to make it work around.
Rules
Eagle has a set of rules that you can use to verify that your design is workable. You may also be able to download a different set of rules from your PCB maker to verify that they can make it.
Fabrication
I’ve etched a few boards on my own in the past, but it’s so much easier to have somebody else do it for you. In this case, I chose to use OSH Park (which has taken over for SparkFun’s BatchPCB service). It is very simple to do; you upload your Eagle board file, their system verifies it, batches it up with other designs in a single big order, and then sends it out. A few weeks later, you get your boards in the mail. The cost is currently $5 per square inch for 3 boards.
Here are the boards:
Front side
Back side
The boards have a purple solder mask on them, and are very nicely made.
Populating the board
I did some reading on hand-soldering SMDs, and ordered some fine-pitch tweezers and other supplies. I already have reading glasses and a 2x head magnifier.
My workbench is a nice golden quartz, which makes it hard to see normal components sometimes. I put a sheet of paper down so I could see everything better.
I started with the resistors. I put a small drop of solder on each pad, held the resistor on top of the solder pads, and then touched it with the iron. Did that on both ends, and the resistor was done. I did that on the first four, and got a bit better, but I wasn’t excited about the result.
For the bottom components, I got out the solder paste. Solder paste is a mix of very tiny solder balls and flux. You put a bit of it on all the pads, carefully put the component on the board, hold down the component with the tweezers, and just touch the fluxed end with the iron. This heats the flux and melts the solder, and you get a very nice joint. Getting the right amount of solder paste takes a bit of experimenting but is relatively easy to do. I finished the resistors and started the SOT-23 transistors. Those went pretty well.
I went on to add the displays and the headers. Because this is a top board (ie you would never plug another shield into this one), I used normal headers rather than the plug-through male/female ones. Headers can be hard to get in straight; normally this is hard to do because you need three hands; one to hold the header in, one to hold the solder, one to hold the iron. However, you can hold the header in, put a bit of solder paste on one of the pins, and then solder it. Only two hands needed, though I would recommend not holding the pin you are soldering. After that gets the header tacked in place, solder all the pin headers normally.
Here’s the front of the board:
Okay, so those aren’t the nicest SMD soldering examples I’ve ever seen, but they aren’t bad for a first try *and* every one was functional; no bad connections, no bridged pins.
Back of the board:
At lower left, you’ll see a female header. This is used to connect the XBee breakout board.
Final View
Here are the final views of the board, with the arduino and xbee breakout board attached.
Issues/future improvements:
- It would be nice to use the additional arduino pins that aren’t on the Adafruit library layout.
- Add a triple header (5V on the outside, ground on the middle) to supply regulated 5V, so a longer LED string can be used.
- Calculate resistor values for the different color displays, and put those values on the silkscreen layer.
- The Arduino ethernet connector has a metal shield around it, which can short out the pins for one of the LEDs display if the shield is tightly pushed against the arduino. This is a common problem. It *might* be possible to shift the displays up enough on the shield to fix this issue.
So, what do you think ?