Introduction: LED Umbrella With Arduino
The LED Umbrella with Arduino combines an umbrella, an 8x10 LED matrix and an Arduino microcontroller to create a controllable, programmable LED experience in the privacy of your own umbrella. This project was inspired by the Electric Umbrella by sockmaster and a number of LED matrix instructables on this site, particularly this very complete one by barney_1.
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
There are very few parts for this project and they are mostly generic. They can be easily obtained from any number of online retailers -- Adafruit Industries, DigiKey, Jameco, and All Electronics, among many others. Substitute as seems reasonable.
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
In order to make sure I understood how the LED array should be fabricated, I made a 3x3 array to see if the soldering and programming would work. They did! So I decided to go ahead with the project. If you are sure you understand the LED array, skip this step. Otherwise, invest a couple of LEDs, some wire, shrink wrap, and an hour or so in making the 3x3 array and testing it out. The details of making the array are in the following steps but are applicable to the 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
The first step in making the LED matrix is to construct the chains for the LED cathodes. In the previous step you cut ten (or the number of ribs on your umbrella) black wires and stripped the insulation at the points where the LEDs are soldered. In this step you will solder the cathodes of the LEDs.
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
This step is the longest and most frustrating. Space out you work over several days, or as long as you can take over the dining room table.
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
At this point you should have a completed LED matrix. The cathodes soldered to the black wires, the anodes to the red. It should have the shape of an umbrella. Your fingers are probably burned. Your family thinks you are crazy.
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
Before you trim the red and black wires to length, determine where and how you are going to attach the Arduino to the umbrella. It should fit in the open space at the top. Once determined, cut the wires to length and solder them to the headers.
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 pushbutton switch is used to switch between programs. It triggers an interrupt on the Arduino which advances the program number. The Arduino Diecimilia (and others; check for your version) have two external interrupts that can be enabled on digital pins 2 and 3 using the attachInterrupt(interrupt, function, mode) function. Reserve digital pin 3 for the pushbutton switch. This leaves digital pins 0, 1, and 2 and 4, 5, 6, 7, 8 as blocks for the anode pins.
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
This project uses the Protoshield from Adafruit Industries with a tiny breadboard (although any setup that fits in the umbrella should work). The tiny breadboard has seventeen (17) rows and this project uses them all! Note that the breadboard shown does not include the MIC2981. I don't have one. Yet. The umbrella works well enough without it, that I decided to write this instructable before getting one.
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 probably late in the game to consider testing, but better late than too late. Before installing the LED matrix in the umbrella (next step), hook up the matrix to the Arduino and run the test code included below. The code just runs through each LED and tests it. If any connections are bad or LEDs are broken, fix them now while everything is accessible.
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
With the LED matrix complete and the pin headers and resistors in place, it is time to finish the assembly. The LED matrix has to be positioned between the fabric of the umbrella and the ribs. The fabric of an umbrella is stretched over the ribs and typically sewn in one place to each rib. This will have to cut before the entire LED matrix can be slid up between the ribs and the fabric. After positioning the LED matrix, re-sew what you cut. This will secure the matrix into the umbrella. Don't re-sew if you think you might want to remove the LEDs. Can't imagine why.
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.