ResisTeacher Design and Evolution
One thing I have come to learn from being around electronics students is that far too many take the time to learn the standard 5% resistor color code. For as common as resistors are and as much as we use them to design everything from simple blinking LED circuits to more advanced things, you'd think that people would finally start to learn what those little colored bands actually mean instead of reaching for the nearest ohmmeter every two seconds! I myself am no exception! I consider myself a decent mechatronic engineer, and even I still don't have my resistor color codes memorized! So with this project, I set out to change that: I wanted to create a small, portable device with a a tangible interface that would allow students of electronics, young and old, to better learn their resistor color codes. Hence, the ResisTeacher (for lack of a better name...) was born!
(Image Source: http://www.rsandas.com/P2_Session_3-1.html)
For those who aren't familiar, a resistor is a common electrical component that converts electrical energy into heat, limiting current flow and manifesting in a voltage drop between its two terminals. They are used in almost EVERY circuit that does anything useful. Each resistor has a particular value of its resistance, measured in Ohms (or often kOhms or MOhms, where k = kilo = 1,000x and M = mega = 1,000,000x). The figure above shows an example of a common form-factor for a resistor, and presents the color code table that governs the amount of resistance that resistor has. This code consists of a series of colored bands painted onto the resistor. Each band has a different meaning, and each color corresponds to a different number. For instance, a resistor with a 5% tolerance resistance of 2.2 kOhms would have a color band pattern of RED - RED - RED - GOLD, because the first two bands correspond to the first two numbers (2 and 2),and the third band is a multiplier for the concatenation of the first two numbers (2 and 2 concatenated is 22, and multiplied by 10^2 = 2,200 Ohms, which is equivalent to 2.2 kOhms). The fourth band is much less interesting, it just tells you how tight the tolerance is on the resistance value of the resistor. The most common tolerance is probably 5% (GOLD). Essentially, I wanted my device to be a tangible, physical version of this chart.
The way I thought would be neat to accomplish this was by creating a device that actually resembled a resistor where you could change the colored bands and in turn get immediate feedback on the values corresponding to the color for each band, as well as the total resulting resistance value. Imagine if you sliced a resistor in half along its longest axis, then, what you would have is something like a half-cylinder. I decided to create this half cylinder, on top of a box to hold the display and electronics, and put slots into this half cylinder where different colored half-discs representing the bands could be placed to represent different resistors with different values. Concept in mind, I went straight to my favorite CAD package, Solidworks, and started drafting it up. Here's what the result looked like:
Screengrabs of Solidworks Model
This device is a great example of mechatronic design, involving mechanical, electrical, and software aspects all working together to achieve its function. The mechanical design of the case was extremely important because that is half-cylinder profile on the top and the slots for the half-discs representing the bands are what actually define the device as relating to resistors. The electronics were important because they allowed the color information from the half-discs to be sensed and converted into the corresponding number and resistance information and in turn displayed to the user. And the software was important because it allowed for the real-time information conversion and resistance calculation to be done on board. All of this had to come together in order for the device to work.
Essentially, the device works because each of the colored half-discs has a different pattern cut out into the flat side corresponding to its color. The patterns are designed such that there are four potential extensions that, if they are present, activate a corresponding switch in the slot of the main unit, and if they are not present, don't activate the switch. Each slot has four switches, each of which has two possible states, activated (pressed) or deactivated (not pressed). This gives me a total of 2^4 combinations for each slot, which means I could have up to 16 different colors. The resistor color code chart only requires me to have 10 colors, and I also used the combination of no switches activated to mean that there is no disc present. I came up with my own correspondence table between the colors and the patterns, and embedded that information into my microcontroller, the brain of the device. This, when I place a red disc in the first slot, the microcontroller can sense the pattern based on which switches are pressed, and in turn know what color the disc is. The microcontroller also has knowledge of the standard resistor code table, and so it knows that a red disc corresponds to the number 2, and can display that on the 7-segment display corresponding to and lined up with the first slot. It can similarly do this for the other remaining 2 slots, and it can then calculate what the total resistance value is, and display that on the 5 lower 7-segment displays.
The microcontroller that I used for this project was an Ardunio Duemilanove that I had lying around. The reason I chose the Arduino, rather than something cheaper like a small, mid-range PIC or something else, was because somebody had already created a library for the Arduino software that directly would allow me to communicate with the MAX7219 7-Segment Display driver chip that I wanted to use to drive the 7-segment displays. This saved me quite a bit of software development time. The MAX7219 is a pretty cool chip in a 24 pin DIP package that communicates with a microcontroller over a synchronous serial interface like SPI and then can drive either an 8x8 LED matrix or up to eight 7-segment displays with decimal points. So, for 3 microcontroller I/O ports (a SerialDataIn line, a Clock Line, and a Latch Line) you can control a total of 64 individual LEDs, or more if you cascade the chips! It's a pretty cool little device! This did, however, still require some pretty intricate and detailed soldering to get all of the 7-segment displays wired up properly. Have a look for yourselves at the circuit boards in the slideshow...
Here is a link to the Arduino Sketch code for this device: ResistorTangible.pde
The Finished Product!
And pictured above is the final device! As you can see, it pretty much looks like the Solidworks Model! I also cut, painted, and glued magnets to 3 copies of each colored half-disc, so there are a total of 30 different bands to choose from. Using the device proved to be incredibly easy! Check out the Youtube video father down the page to see it in action!
Below is a slideshow showing a number of pictures of the ResisTeacher device. Some are of individual components, and some are of different phases in the design and assembly process, and some are of the finished product.