It has been some time since we last updated the website. MakeIt Labs members have been very busy working on many different projects. If you have not stopped by MakeIt in some time, come on in and see all of the changes. We have been cleaning, sorting, organizing, building things, and blowing things up (with science!).
Cabinets full of electronic components
Welding area tools all sorted and labeled
Cabinets coming into the space for future use
One of the major organizing efforts is all of the new high quality cabinets that we have in the “clean” and “dirty” spaces. With a contact from Harvard University Recycling we were able to acquire these expensive cabinets as a donation to us. Members went into Cambridge and brought back a truckload of them. We have been filling them with all of the components and tools that we have in the shops. This is a wonderful addition as it keeps them dust free and organized well.
After the people, one of the greatest resources we have at MakeIt is the shelving full of “junk” and parts, free for any members to pillage for projects. Many of these treasures were scavenged out of the trash/recycling, including most of the electrical components. Thousands of dollars worth of unused parts that would have been wasted now have a second chance!
Thousands of parts, free for members to use
With a bit of reverse engineering, whole sub-assemblies can be also reused. In this post I’ll demonstrate how an indicator board from a junked UPS (uninterruptible power supply) can easily be modified to create an interface for an array of LEDs.
Here’s the bit I found in the recycling. It’s the front panel to a UPS and has 16 LEDs of various colors and two soft buttons:
Front Panel of UPS
Holding it all together is a single screw and some plastic tabs. Here’s the panel broken down into its parts:
CC from top left: PCB Assembly, Buttons, Light Pipes, Insulator, Plastic Housing
For this project, we’re only interested in the PCB Assembly, so the rest can be returned to the recycle pile. Here’s the front and back of the PCB:
Front of PCB Assembly
Back of PCB Assembly
It’s a fairly simple board. On the front you can see the 16 SMD LEDs and two ICs. The back only has a handful of SMD capacitors and resistors. The board also has an 8 pin ribbon cable attached to it. This is the only way this board interfaces to the rest of the UPS. Right away this gives an important clue. Of the 8 pins, 2 are almost surely power and ground, leaving only 6 for signals. 16 LEDs and 2 buttons is 18 I/O devices, so it stands to reason that one or both of the ICs on the board are being used to handle the I/O, and that these other lines control the IC. This is very useful when you want to control a large number of I/O lines since I/O pins on an Arduino (or other micro-controller) are a limited resource. Let’s take a look at those two ICs and see if we can figure out what they do.
ICs on the PCB Assembly
First let’s investigate the large IC since it seems to be connected to the LEDs. The markings on the top of the IC read “MBI5026GD” and “A3P05511EA”. Figuring out what chip this is used to involve flipping through phone book sized catalogs, but now it’s as easy as Googling those two markings, starting with the top one. “A3P05511EA” is likely a manufacturing code that specifies manufacture date, lot, location, etc. It probably won’t give any good info. “MBI5026GD” gets a bunch of results though, including a link to a pdf titled “16-bit Constant Current LED Sink Driver“. Hmm, LED driver? That sounds like what we’re looking at! I happen to have a few of these boards, and one of the other ones uses a chip of the same size and shape, but marked “A6276ELWT”. Searching for this yields a pin and function compatible chip made by a different manufacturer. This is pretty common, as most designers try to find multiple sources for their components to minimize risk of part shortages. Here are the data sheets for both parts:
Let’s take a closer look at the datasheets. Here’s a block diagram from the Allegro datasheet:
The Product Description reads as follows:
MBI5026 is designed for LED displays. MBI5026 exploits PrecisionDrive™ technology to enhance its output characteristics. It contains a serial buffer and data latches which convert serial input data into parallel output format. At MBI5026 output stage, sixteen regulated current ports are designed to provide uniform and constant current sinks for driving LEDs within a large range of VF variations. Users may adjust the output current from 5 mA to 90 mA through an external resistor, Rext, which gives users flexibility in controlling the light intensity of LEDs. MBI5026 guarantees to endure maximum 17V at the output port. The high clock frequency, 25 MHz, also satisfies the system requirements of high volume data transmission.
Datasheets product descriptions are a great example of what happens when you mix engineers with marketing folk.
Here’s what that block distills down to:
This is an LED driver IC that uses a serially interfaced latch to drive 16 LEDs at a current of 5-90mA. Drive current is fixed by a resistor connected to the chip.
This chip has 3 main parts: The serial interface, the latch, and the output driver. Here’s what each component does.
Serial interface The serial interface is a simple 16 bit shift register. It uses three pins – Serial Data In (SDI), Serial Data Out (SDO), and Clock (CLK). Each time the signal on the Clock pin transitions from low to high (GND to+5V), the value on the SDI pin is shifted into the first bit of the 16 bit shift register, pushing each of the 16 bits in the register over one spot. The last bit in the register is pushed out and onto the SDO pin. Think of it like a shelf only wide enough to hold 16 blocks. If you slide a block onto the shelf from the left, the blocks on the shelf are each forced over and the 16th one will be forced off the shelf. The SDO pin exists so that multiple shift registers can be connected in daisy chain fashion with the SDO pin of the first tied to the SDI pin of the second. This is like putting two of the previously mentioned shelves next to each other to make one 32 block wide shelf.
Instead of falling off, the 16th block on the first shelf becomes the first block on the second shelf.
The latch is used to store the value of the shift register. It uses a single pin – Latch Enable (LE). When LE is high (+5V), the output of the latch matches the input. When LE is low (GND), the output is locked, or “latched” and the input can be changed without affecting the output. This enables you to output the current state of the latch while you are setting up the shift register with the next value. Once this new value is ready, the LE line is switched high and the latch output changes to the new value. The LE line is then switched low again to latch the value and the process starts over.
The output driver takes the value stored in the latch and uses it to set the state (high or low) of output pins. This translates into turning the LEDs off and on. It uses a total of 18 pins – Rext, Output Enable (~OE), and the 16 output pins. The output driver also regulates the current to each LED based on the value of a resistor connected between GND and Rext. Typically, each LED would need its own current limiting resistor, but this way the LEDs can all be directly driven by the IC. The state of ~OE determines if the output is enabled or not. This is an active low pin, which means that it must be low to enable the output and high to disable it.
OK, enough of the electronics lecture, let’s get back to the hacking!
Now that we know what’s driving those 16 LEDs, we can make a few more guesses about the ribbon cable attached to the board. The LED driver definitely needs CLK and SDI signals or it’s useless. LE is also probably used, but ~OE may be directly connected to GND since there’s no reason to disable the outputs. SDO probably isn’t connected since there’s no reason to chain these boards. So out of the 8 signals on the ribbon we’ve now likely figured out at least half of them. Now it’s time to check our work. We could probe everything out with a multimeter, but there’s another trick to help trace out connections on simpler boards like this one.
Take a photo of each side of the board, then flip one photo and layer it on top of the other in a photo editing program like GIMP or Photoshop. By adjusting the transparency of the top layer you can easily trace out lines that transition from one side of the board to the other. Using a multimeter to verify the endpoints is still a good idea though.
Layered Photos With Transparency
From a combination of probing and tracing I was able to determine where each of the pins on the ribbon went. Pin 1 is designated by a square pad and is the farthest to the left when looking at the back:
GND through R527 (a 0 ohm resistor acting as a jumper)
VDD (+5V) through R526 (a 0 ohm resistor acting as a jumper)
IC47 Pin 13 through R524 (2k resistor)
IC47 Pin 11 through R522 (2k resistor)
IC47 Pin 9 through R520 (2k resistor)
Pin 1 wasn’t connected to anything, meaning we only have 7 lines in use on the ribbon cable instead of 8. Pins 2 and 3 were ground and power, and pins 6 and 7 went to the buttons. That leaves pins 4, 5, and 8 to control the LEDs. They all go to IC47, so it’s time to see what that IC does. Googling the part marking “CD40106″ reveals that this is a Hex Schmitt Trigger IC. This chip is a collection of 6 inverting buffers – a signal coming into it high leaves low and signals coming in low leave high. According to the datasheet, the outputs of the Schmitt Trigger gates connected to pins 13, 11, and 9 are 12, 10, and 8, respectively. Going back to the probing and tracing we can update the list:
Serial Data In
Now we know enough to test things out! I had an Arduino handy, so I wrote a quick sketch to walk an alternating bit pattern (01010101…) through the shift register with one second delays between each bit.
Success! We’ve figured out how the board works and we know how to control it. What’s left? Turn it into something cool!
The board is of limited use in its present state, but the LEDs can be unsoldered and replaced with wires to drive other LEDs. Since the board switches the GND side of each LED, we’ll need one wire per LED plus a wire to feed +5V to all of them. With the help of Adam B., I used the Sherline CNC to mill out a disc of aluminum and drill 16 holes in a circle around the edge. I won’t go into detail now on that process (maybe in a future post!), but here’s a few action shots:
Sherline Mill with Aluminum Plate
Facing the Plate to Smooth It
Facing is Done, Drilling Pilot Holes
Almost Done Drilling Pilots
Drilling Out the Holes to LED Size
Holes All Drilled
Adam B. Changing the Drill to a Cutting Tool
Cutting Out the Disc, LED for Reference
I mounted 16 LEDs in the disc, and housed it in an old cordless phone charging station that was also picked out of the trash. I wired the the board to these LEDs and crammed everything into the charger base with 5 wires coming out the back for SDI, CLK, LE, +5V, and GND.
Aluminum Disc With LEDs Wired to Board
I then wrote another Arduino sketch that allows me to send different patterns (including random ones) to it at different rates. Here’s a video of the results:
These boards can also be combined to drive even more LEDs. One method would be to chain them by connecting the SDO line from the first to the SDI line of the second, and so on. This is slightly difficult because the SDO line isn’t used by these boards and would need to be brought out. The ribbon does have an unused pin (pin 8), which would be a good option. Multiple boards could also be driven in parallel. The LE and CLK lines could be shared, but a separate SDI line would be needed for each board. The advantage here is that data can be written faster. Rather than having to clock 32 bits of data through 2 chained boards, 16 bits could be clocked into each at the same time if they were in a parallel configuration.
That’s what I ended up doing in my maze box project.
Maze Game Made With 4 Boards Driving 64 LEDs
I used 4 of these boards, with each SDI going to a separate I/O pin on my microcontroller. Each board controls 2 rows of LEDs in the 8×8 display. I wrote the code to keep track of the screen as a whole and adjust each board as needed. This way I could modify the entire screen without having to keep track of each individual piece. The end result is a maze made up of 64 8×8 screens arranged as a square. With each “pixel” represented by a single bit, the maze data takes up only 4,096 bits (512 bytes) of memory.
Additional IO lines on the micro are used for the directional buttons and center bi-color LED.
In both of these projects, the only thing I had to buy was the microcontroller. Everything else was salvaged from the scrap heap and parts bins at MakeIt. There’s tons of treasure just waiting for someone to find it. Go take something apart!
P.S. There are a bunch more of these LED Boards available at MakeIt, free to any members!
The legs were loose on this awesome painted stool, so I set about fixing them. In this case all that was needed was to tighten the hex bolts holding the legs on, but I had to re-set one of them, and in the process I dropped the fastener that anchors the bolt into the leg.
I dropped it in the somewhat cluttered laundry room of my house where I also have a small workspace. This room is no more than 8′x8′, yet even after I carefully searched through everything in the drop zone (cleaning the room as I went) and checked behind and under the workbench, furnace, washer, and dryer, it was no where to be found. My best guess is that it rolled too close to the dryer and got sucked through the missing sock wormhole. This thing had simply winked out of existence.
I had no idea what this part was called, or where I could find another one. I could probably hunt one down at the hardware store, but why buy one when I could make it from scratch and had MakeIt Labs (complete with its machining tools) and a half hour of free time at my disposal?
To get started, I unscrewed another leg, being extra careful not to drop anything this time, and took it along with the bolt and fastener to the shop.
Fastener, Leg, and Bolt
The fastener is simply a metal rod with a threaded hole drilled through the side and a slot on one end to align it in the stool leg. I measured the diameter of the fastener with a set of calipers and found it to be 3/8″. I had a good hunch we’d have at least one 3/8″ bolt laying around, so I went to the big blue bucket of bolts and dug around a little.
Bucket of Bolts
In a few seconds I had a perfect match:
Calipers on Bolt
The only portion of the 3/8″ bolt I cared about was the smooth, unthreaded shaft. This was the stock material I planned to use to make the new fastener. In order to make the threaded hole I first had to drill out a rough opening, and then use a tap to cut the threads into the drilled opening.
I measured the bolt from the stool and found that the threading on it was 1/4″-20 NC. This means the the bolt was 1/4-inch in diameter with 20 National Coarse (a standard) threads per inch. I opened our tap and die set and grabbed the 1/4NC20 tap and the tap handle. According to this chart I’d need a #7 drill bit to make the hole I planned to tap, so I grabbed one of those too and headed over to the drill press.
I clamped the stock bolt into the vise at the drill press, put the bit in the drill, and centered it over the shaft of the bolt:
Then I squirted on some cutting fluid and slowly drilled the hole:
Drilling Hole in Bolt
After cleaning off the shavings here’s the result:
This would be good enough for what I needed to do, but at this point I decided to try and make my replacement fastener match the old one as much as possible. The old one had a taper leading from the surface to the hole, to help guide the leg bolt in. To add this I put a larger drill bit into the drill press and drilled slightly into each side, using the hole as a centering guide.
Now I was ready to tap the hole.
Tap and Bolt
I left the bolt clamped in the vise, added a bit of cutting fluid, and slowly started to thread the tap into the hole. If it felt like it was binding at all, I’d back it out, clean away any cuttings, add more fluid, and re-thread. Eventually I could turn the tap smoothly the whole way through and the threads were done:
To test the threads, I took the bolt from the stool and screwed it into the freshly tapped hole. Perfect fit!:
Now I needed to get rid of the extra parts of the stock bolt. I used the old fastener as a rough guide to estimate the first cut, clamped the bolt in the small chop saw, and cut off one end:
Cutting on the Chopsaw
Then I clamped it the other way, again using the old fastener as a guide, and cut off the other side:
Both Ends Cut Off
The newly cut one is a bit longer than the old one, but this is fine since I planned to grind the ends a bit to smooth them out. To grind the ends I clamped the piece in the jaws of a hand drill and used it to hold the end at an angle to a bench grinder while I spun the piece with the drill.
Using a Drill and a Bench Grinder
This made a nice taper to the end
I flipped the piece around the other way and did the same thing to the other end. Here is the new one next to the old one. You can see it’s still slightly longer, but since the tolerance in the stool leg is low it won’t be an issue at all.
Both Ends Tapered
The last thing to add was a slot on one end of the piece. This slot is used to turn the fastener in the stool leg so that it will be aligned with the bolt. I did this by clamping the piece in a vise and cutting a shallow groove with a hacksaw.
Now all that was left was to reassemble the stool. Everything fit great and the stool is now as good as new!
Brian Learns to use the CAD interface on Plasmacam. This allows you to make custom parts fast out of steel, stainless steel, and aluminium.
Special Marker Holding Jig
Before we cut anything, we use a special marker holder to allow plotting of geometry to “preview” the cut. This saves material as everyone learns what geometry does.
Basics Drawn Out by Marker
Basic geometry is simple. In order to sketch, you need to simplify your ideas into lines and arcs. This is what we got to in a few hours. We also went over how to locate your work and how to make sure you don’t cut into thin air.
Plotting some words. Separating the cutting and control steps allows participants to learn one skill at a time. By the end of the day everyone was able to make some parts.
Travel Path Traced by Marker
The pen drags at the bottom of travel so you can see how the “rapid” travel paths work.
Design Modified From Image
A few minutes of work and we were able to make this robot figurine from am image with some added geometry to accentuate the 3d features.
Sparks Fly as the Metal is Cut
Sparks! At 20 amps, shade 5 eye protection is needed to protect from flash. Safety of participants and by-standers was emphasized to keep everyone safe.
Plasma Cut Sign
Brian made this awesome sign for the bar he works at.