Learn how to read and write binary numbers in 5 minutes.

Over the years I’ve been asked to explain this to many people and most of the times as I was done explaining this, people would say “Huh, I thought it was harder!”. I think the reason is that when people are taught how to do this they are shown the math behind it and they immediately get bored and switch to “don’t know, don’t care” mode.  I’m not going to go over the math behind binary numbers because you can look that up anywhere but I’m going to show you a quick and dirty way that works every time.

The fact is, you can learn how to read and write binary numbers just by doing simple additions.

First of all, let’s build our mental cheat sheet. You will be writing a sequence of numbers starting from 1. The next number in the sequence will be the previous one times two. You will put each successive number to the left of the previous one. If you didn’t understand the previous two sentences don’t bother reading them back, just look at the picture and see if you can deduce the sequence because this is as hard as it gets. The rest is downhill:

binary_cheat_sheet

As you can see, if you take any number in the sequence and double it you get the number to the left. If you half your number, you get the number to your right.
Now write your binary number on top of your cheat sheet. Let’s take the number 10111 and write it on your cheat sheet. It’s OK if you have extra numbers on your cheat sheet, you can just leave them blank as we are not going to use them.

binary_10111

Now you add whatever numbers you have under every 1 and discard the numbers under every 0. Like this:

binary_23

It’s that simple.

Here are some other few examples if you want to try this out for yourself.

  1. 11
  2. 1001
  3. 10010
  4. 10000011

(Click the spoiler alert to show the answers)

Answers:
1) 3
2) 9
3) 18
4) 131

PCB Comparison: OSH Park vs. iTeadStudio

I took my 8 RGB LED Controller prototype and decided to try to make a PCB of it (my first attempt at a PCB, that is).

Most people at the Arduino forums had recommended I do this in EAGLE but they warned me that the learning curve was steep. So I tried doing it in Fritzing and failed miserably; couldn’t get the damn thing to do what I wanted. Then I gave EAGLE a try and thanks to Jeremy Blum’s tutorials could get a nice schematic done:

8 RGB LED Controller EAGLE schematic

Holy crap, that took me forever to do. When they say that EAGLE’s learning curve is steep they meant to say really f$#*@ing steep.

But the schematic is half the battle. After that you have to create the actual board layout which, again, took me forever to do. After many hours of getting cryptic errors and solving them by reading random forums, I got this:

8 RGB LED Controller EAGLE PCB

So far so good. Now I had to send them out to get printed.

A lot of people recommended iTeadStudio (a Chinese PCB manufacturer) and some other recommended OSH Park (US based), so I ordered a set of PCBs of each well aware that my design could easily be flawed and end up with a bunch of duds. For the same money OSH Park gives you 3 boards and iTeadStudio gives you 10. I was very curious to see what the quality difference was.

Note: A week after sending my order to iTeadStudio they wrote back saying that my design was 2mm over the limits of my chosen PCB size and they put my order on hold until I sent them the mind boggling amount of $2.90 extra. Yes, they put the order on hold for less than $3!

Three weeks later both orders arrived just a couple days apart. And this is what I got:

OSH Park vs iTeadStudio

Even to the untrained eye (like mine) there are a few differences worth noting. Both providers happily ignored the boundaries I set on my PCB. Note that the word “Controller” is cutoff on both boards (top right). You might be going back to the EAGLE board screenshot above and seeing that there is no word “Controller” there and you’d be right; I took that screenshot a few minutes ago from a more recent version of the board, but trust me, that word was well withing the boundaries of the board. Also note how iTeadStudio’s is much taller and also better trimmed while OSH Park’s is shorter and you can clearly see the marks where they cut the PCB off the neighboring boards.
Another thing to note is that OSH Parks’ board has “golden” pads while iTeadStudio’s has silver pads. I have no idea (and don’t really care) what the material is but the only thing I can say is that the OSH Park board required much less heat for the solder to “attach” to the pads so I guess it was easier to work with. The overall glossy purple finish looks way cooler too.
A funny thing on iTeadStudio: I paid for 10 boards but they’ve sent me 13. After reading around a bit I learned that this is not uncommon for them. Cool, I’ve got 3 more boards to mess with.

So I put it together and after a few minutes of soldering, got this:

8 RGB LED Controller PCB

Those SMD resistors were a bitch to solder, that’s for sure!

Now for the maiden voyage. I hooked it up with some LEDs and the Arduino fully programmed and ready to go… hmmm… why is NOTHING happenning? It didn’t work at all. I checked and double checked everything and every single cable was working correctly. So I soldered the OSH Park version of the board and tried it. Exact same results! Everything was pointing at a fail of epic proportions on my PCB design. So I gave up and went at it the next day.

Armed with my wimpy RadioShack multimeter and the prototype in hand, I soon realized that I had screwed up 2 things on my design:

  1. That “Sensor” label I put there to be able to hook up a button? It was wrong but easily solved by adding just a jumper cable from +5V to “Sensor”.
  2. I must have been really tired when I labeled the screw terminals as I reversed the ST_CP and DS on the shift registers. Nice.

So I hooked up everything like I should have to begin with and, oh yes, the damned thing started to work.

Next step, make this into an Arduino shield!

8 RGB LED Controller

UPDATE: I’ve now made a custom PCB out of this.

This is my first experiment with Arduino. Like most people starting out with Arduino, I wanted to make stuff blink! So after finishing up the Arduino Starter Project Book I started hooking up LEDs to my Uno’s outputs. I very quickly ran out of outputs and a quick search through the Arduino Forum led me to the wonders of shift registers. These are basically serial to parallel ICs that allow you to just use three pins on the Arduino to control eight outputs. You can daisy chain them like I did and if you do, you can control many more outputs yet still using three pins to control them. I few days later, my SparkFun order had arrived and it was time to test my spanking new 74HC595N set.

Ingredients:

  • 3 x 74HC595N shift registers.
  • 8 x RGB LEDs, diffused.
  • 8 x 200Ω resistors
  • Lots of jumper cables
  • 1 x Solderable PC Breadboard.

After some trial and error, I arrived at this. The gray cables are telephone cables that connect the controller to the LEDs.

8 RGB LED Controller prototype

Yikes, that looks ugly. I soon realized that I shouldn’t have soldered the LED cables to the board as it makes it very impractical to repair any LEDs or reuse parts. Even though it looks flimsy, so far it’s still in one piece.

I’ve put together a video that shows some of the build process and also the whole thing put together and working. At the end of the video you can see the presets that come with Elco Jacobs’ awesome ShiftPWM library which is what I used to control the LEDs.