Get ready to Pimp My Umbrella!
Anyone undertaking this project should have access to standard soldering tools -- pliers, diagonal cutters, wire cutters and strippers, soldering iron and solder, multimeter -- and have experiencing working with the Arduino. The Arduino setup is not difficult and a program including several different animations of the LEDs is included in this instructible.
Video is on the way! Sample code (see last step) is also on the way, too. The code that I do have does not take advantage of the pushbutton switch and I am working on that now.
Step 1: Parts
1 x Microcontroller -- Arduino Diecimilia
1 x Umbrella
1 x MIC2981 -- 8-channel, high-voltage, high-current source driver array -- 576-1158-ND
1 x Protoshield for Arduino with tiny breadboard -- Adafruit Industries
80 x LED -- many options are possible
8 x resistors -- depends on choice of LED and source voltage
Lots of wire is needed for this project. Each rib of the umbrella has a black wire (for the cathodes of the LEDs) and each circle of LEDs around the umbrella requires a full length of red wire (for the anodes of the LEDs). Some is also necessary to return the ends of the chains back to the Arduino.
24 feet black wire for cathode chains (follow ribs back to center)
70 feet red wire for anode rings (rings around umbrella)
Standard male headers --
Heat shrink tubing 1/16" -- about seven feet of tubing is needed
Tactile switch -- Off-Mom
...and soldering skills. The matrix of LEDs has to be carefully constructed and the anodes and cathodes insulated from one another with heat shrink tubing. This can take a while.
Step 2: Afterthoughts -- Forewarned Is Forearmed
Don't use your best umbrella! Or even someone else's best umbrella. The umbrella is committed to the project and, while you could take the LED matrix out, you won't want to by the time you are finished.
Although the LEDs provide a personalizable experience under the umbrella, they are not particularly visible from outside/above the umbrella. Consider whether you want the LEDs on the outside of the umbrella. They would be far more visible and the installation would be a lot easier. You would have to poke holes in the fabric to feed the wires down into the Arduino. Style in this case trumps waterproofing.
Pick a nice color before you put a lot of time into making this thing. LEDs are apparently cheaper on eBay than through catalogs, so explore your options.
Smaller gauge or multi-stranded wire is probably better than AWG xxx solid wire. I used solid wire and it makes folding up the umbrella almost impossible. Also, I wouldn't use red wire for the anode rings. I would have picked a darker color that is less visible.
Step 3: Design Considerations
I chose to use the Arduino rather than a different Atmel AVR microcontroller to make this project accessible. With the Arduino, there is no need to design a custom board and programming and customization is much easier with the Arduino platform. The only downside of the Arduino is that it is big and doesn't fit well into an umbrella. The benefits, however, outweigh the costs.
This project is based on the Arduino Diecimilia but (I think) the pinouts are the same on newer versions. In any case, if you undertake this project, make sure you have a clear understanding of the states and pins of the Arduino model you are using. This will make any changes between what is describe here and what you need to do easy to implement.
The MIC2981 chip from Micrel can power 8 chains of LEDs. This means that the 8 circular rows/rings of ten LEDs going around the umbrella have their anodes linked to the MIC2981 (one pin powering each row/ring) and the LEDs in the chains along the ribs (the columns) have their cathodes linked to a pin on the Arduino. This allows for the possibility that the 10 LEDs in a row/ring are simultaneously on with enough current to uniformly light them.
This chip is currently not used in this project. I have plans to use it to power and brighten the LED rings.
Proto Shield for the Arduino from AdaFruit Industries
I used this protoshield with a tiny breadboard so that I could detach the Arduino from the umbrella for other projects. The tiny breadboard has just enough room for the connections needed for this project.
Step 4: MockUp
To create the 3x3 LED matrix, follow and modify the steps Making the LED Matrix that describe the full matrix.
The sample code below for the mockup does not take advantage of the MIC2981 (I wrote it before I had one :-). Each LED is illuminated in turn. This works for a 3x3 array but does not scale well. [Actually, it scales reasonably well to the full matrix but the LEDs are a bit dim.]
Step 5: Making the LED Matrix -- Preparing the Parts
Prepare the LEDs by bending their leads. The following orients the LEDs with their flat edges facing in the same direction. The choice is arbitrary, but standardizing an orientation reduces the risk of error.
Hold the LED with its flat side (cathode side) turned to your right. Bend the cathode toward you. This points the cathodes to ground, the direction electricity wants to flow :-). Create the bend about 1-2 mm below the bottom of the LED. This will allow the LED to stand proud of the wire.
The anode will be bent to the left after the cathodes are soldered into place. This will prevent confusion when soldering. The two leads should form a right angle with the cathode pointing towards you and the anode pointing toward your left.
Heat shring tubing
Cut two 1/2" long pieces of 1/16" heat shrink tubing for each LED. That's one hundred sixty pieces and requires about seven feet just for these. Cut an additional eighteen (18) pieces for the headers.
Cut black wires equal in number to the ribs on the umbrella. Make them enough longer than the ribs so that there is enough wire to create the headers that connect to the Arduino.
There are 8 rings of LEDs that go around the umbrella (this is the number of output pins on the MIC2981) so each cathode chain or column will consist of 8 LEDs. Lay the wires out and mark the locations for the LEDs along the ribs. Spacing at this point establishes the distance between the concentric rings.
Strip a small piece of insulation (about 3mm) at each point. Cut through the insulation with wire strippers at two places about one-quarter of an inch apart. Then crush the insulation with pliers and cut the insulation out with a utility knife or pull it out with your fingers. In each open space, put a small amount of solder. This is in preparation for soldering the LED cathodes to these spots.
Step 6: Making the LED Matrix -- Cathode Chains
Get a small blob of solder on the tip of your iron. Position the LED so that the wire passes between the two leads of the LED and apply the hot iron to solder the cathode. The solder on the iron and the wire should flow to make a connection. You will burn your finger and they will taze you. After soldering, trim the anode so that it is as short as possible.
To prevent short circuits, each solder joint is covered with a piece of heat shrink tubing. The tubing has to be applied after a connection is made and before the next LED is attached (any confusion? you will soon understand :-) so slide a piece on now. Heat to shrink into place.
Repeat for the remaining LEDs in the chain and the remaining chains.
Note In this instructable, the chains of LEDs that follow the ribs of the umbrella are referred to as columns and each terminates on a pin of the Arduino. The LED cathodes are soldered to these (black) wires. The rings of LEDs that circle around the umbrella are referred to as rows and each begins at one of the MIC2981 output pins. The LED anodes are soldered to these (red) wires.
Step 7: Making the LED Matrix -- Anode Rings
The LED matrix is completed by soldering the anodes of the LEDs on the cathode chains to the circular rows/rings of red wires. The measuring at this stage is somewhat more complicated than for the cathode chains because each ring is a different radius and the LED spacing is different for each ring.
Calculate the correct length by locating where each ring falls on the umbrella and measure the distance between ribs of the umbrella. You will also use this measurement to determine the spacing on the ring. Multiply this distance by the number of ribs and then calculate the length of the return. Each ring needs to have a return to the Arduino. The outermost ring has the longest return, and the returns get progressively shorter as the rings get smaller. Cut eight (8) pieces of red wire of appropriate length.
As in the previous step, mark the wires at the correct spacings, crush and remove the insulation, and put a bit of solder in each opening. The cathode chains sit on top of the red wires (which is why the bend in the LED lead is a little bit lower). Solder as before and put heat shrink tubing over each joint before moving on to the next chain.
Hot glue the wires at these junctions to secure the LED leads from stress and breakage. This is extremely important since working the matrix into the umbrella puts a considerably amount of stress on the joints.
At the end of this step you should have a circular array of LEDs with two sets of wires (one black, one red) coming back to the middle of the circle. In the next step, you will make pin headers to attach these wires to the Arduino and driver.
Step 8: Making the LED Matrix -- Completed Matrix
The mockup version is shown below. The full version is unwieldy at best and I did not stop to take pictures. Look at pictures of the umbrella with the matrix installed to see the finished LED matrix.
Step 9: Making the LED Matrix -- Pin Headers and Resistors
Slide pieces of heat shrink tubing onto the eight red wires, solder them to an 8-pin header, and heat shrink the tubing. Be sure to make the connections in a logical fashion. I consider the smallest inner ring to be row 1 so it gets attached to pin 1 on the header and the appropriate pin on the MIC2981. If you make a mistake, you can either resolder the wires or correct in code. Don't make a mistake. [I bunched the anode wires together and was too lazy to sort out the logical order. It turns out to be just as easy to control in code. See notes in programming section.]
Similarly make headers for the cathode chains. This time, however, the pin locations on the Arduino dictate that you make two headers. You also have to solder a single resistor in line. The resistor depends on the LED and voltage -- consult an online LED-resistor calculator for the proper value. Each header should have five (5) pins. Be sure to make the connections in a logical fashion.
Hot glue the connections as these will undergo bending and stress.
The picture below is of the mockup.
Step 10: Pushbutton Switch for Changing Programs
The interrupt is set to trigger when pin 3 goes low. It must therefore be held high until the button is pushed, at which the pin goes low. This requires a 10K pull-up resistor to hold the pin high. See the breadboard image and read about pull-up and pull-down resistors.
Step 11: Breadboarding
Many different configurations are possible so use this as a guide. Note, however, the location of the pushbutton switch. Two pins on the Arduino can be (easily) configured as interrupts, and the pushbutton switch has to connect to one of them.
The picture below is WITHOUT the MIC2981 chip. I will upload an image when I get the part and modify the breadboard accordingly.
Step 12: Testing the LED Matrix
This is also the time to determine which pin corresponds to which row or column. If you were careful when making the pin headers, you already know. Otherwise, you will need to figure it out by slowing down the animation and determining which pin controls which row or column. You set an array in code which contains the pin numbers in the correct order.
Step 13: Assembling the LEDs in the Umbrella
This is a very time consuming process. If you haven't already hot glued the LED leads, do so now. If you don't you will certainly break a few LEDs during the installation. I worked with the umbrella hanging from a broom stick suspended between two chairs (no picture :-). The umbrella was held open by gravity and the fabric was not stretched tight. I could move around.
Start by sliding a complete column under one of the ribs. Advance it and the next column. Repeat. It is a tedious process. When you finally position the LEDs make sure to have the ribs rest on the heat shrink tubing. This will minimize the chance of abrasion.
The umbrella won't close nicely. I suppose I should have mentioned this earlier. Although I haven't done this yet, I am going to sew a few loops around the LEDs and into the seam of the fabric to hold them in place. Look carefully at the seams of the panels and you will see a bit of material into which you can sew.