During festivals and marriages I have seen some decorations with LEDs which are hundreds in numbers (see attached image). Could you please provide some insights on the ICs used to drive such LEDs in large numbers. Also on the methods to sequentially light the LEDs.
How to drive hundreds of LEDs
ledled-driver
Related Solutions
TL;DR: The kits you link to will not work with the big 7-segment display you propose. In my personal estimation, the complexity of the ICL7107 design (the Canakit and the Contrad kits are based on this chip) and the Arduino design will roughly be similar, if you build the simplest possible design. However, either design in the simplest version might not you to use the referenced 7-segment display at full brightness, and in fact the referenced 7-segment display might be too dim. Therefore, (depending on the display), you might as well go with the Arduino design, because the Intersil chip is really designed to run the 7-segment displays directly, something you cannot do if you want full brightness.
The large 7-segment LED display
The characterists of the 7-segment displays will in large part drive your design. There are two characterisits of concern here:
- The foreward voltage drop of each segment. If the Vcc supplied to the LEDs is less than this value, the LED will not turn on.
- The maximum forward current across each segment. To display at maximum brightness, you will want to supply something close to this value.
The datasheet I found for the Kingbright SA40-19EWA references two types of large 7-segment displays:
- High Efficiency Red: Forward V / segment: 8V typical, 10V max. Maximum forward current is not referenced, but the test conditions suggest that 20mA is typical. The charts on page three imply that 30mA is maximum.
- Super Bright Green: Forward V / segment: not reference. Maximum forward current: 60mA, suggests that 40-50mA current would be appropriate to drive it at full brightness.
If the above characteristics are correct, then you could build an ICL7106/ICL7107/ICL7107s-based circuit for the red 7-segment display, but not the green one if you want to run at full brightness.
Using the large 7-segment display with pre-packaged kits
The Canakit you link to is designed to run off 5V. Given that the forward voltage of the Kingbright SA40-19EWA is 8-10V, the result is likely to be a non-working digital LED thermometer. These kits are also not designed for the kind of current the super bright 7-segment display needs to be on at full brightness (, see below), and this is a problem inherent to the chip at the heart of the circuit, the ICL7106/ICL7107/ICL7107s
Building a new ICL7106/ICL7107/ICL7107s-based circuit from skratch
Using the ICL7107, the temperature probe signal is compared to reference voltage, and the result is processed by the ADC on the ICL7107 and then output on 7-segment LEDs. The ICL7106 runs off +15V, so you could use the 8V LEDs with this design. As you can see from the kit image there are not a lot of supporting components you need:
Note, however, that ICL7106/ICL7107/ICL7107s can only sink around 16mA of current from the 7-segment displays. This means that you will not be able to drive the super bright display at full brightness from the Intersil chips, and given the nature of ICL7106/ICL7107/ICL7107s, interfacing them to a driver that could allow more current from the 7-segment displays may be difficult.
Modifying a reference Arduino kit
The Arduino kit you referenced will likewise need extensive modifications in order to a) support the voltage required by the 7-segment display you reference and b) supply the current needed to run the large 7-segment display at full brightness.
Building a new Arduino temperature display from scratch
For an Arduino-based design, (assuming, at first, the underpowered design as above), you should have enough pins to do everything. The cheapest Arduino (Arduino nano) has 22 GPIO pins, of which you'd be using 1 to read the temperature sensor. This will leave you with 21 pins to drive your 7-segment LEDs. The way such displays are usually constructed is by multiplexing the LED displays (for instance the MAX7219 works this way). Specifically, what happens is first the first 7-segment display is drawn to display the correct digit, then the second, and then the third. If the cycle happens at more than, say, 30Hz, then the result is a seamless display as far as the human eye is concerned. To do this, you will only need 8 GPIO lines to paint the segments plus 4 GPIO lines to select the 7-segment display. The alternative (non-multiplexed display) is not possible on Arduino nano, since you'll need 8 lines / 7-segment display times 4 displays = 32 GPIO lines. It would be possible to do this on a beefier Arduino, but that will cost more. On the Nano you could use a shift register, or some other serial-to-parallel IC, such as the 74HC595 to give yourself more pins, so to speak.
The LED you are looking at is common anode, so you could use the Arduino to drive it directly buy sinking the LED current into the GPIO chips. At the same time, the LED you reference can take up to 320mA of current per segment, so if you want to drive it at full brightness, the Arduino solution will require external circuitry, such as a darlington array, as described here, for instance.
With the Arduino design, there will be some programming involved. You'll have to write a small program to read the temperature, and then to drive the LEDs. If you want full brightness, the Arduino will control discrete transistors (ugh) or a darlington array which will drive the LEDs directly. So you'll have to write code (or borrow one from an existing Arduino project) for converting your temperature data to 7-segment control lines. It isn't particularly difficult, but does take a bit of time. Additionally, combining this code with the multiplexing code is adds to the code complexity, but there are Arduino libraries for doing this.
I think this is a really great project, but I also think you need to check your arithmetic. A 50 x 50 grid is 2500 LEDs. You need very high brightness to do what you want. An example of what you might use is https://www.superbrightleds.com/moreinfo/through-hole/rl5-rgb-clear-tricolor-led/298/1225/. The problem is that these will run you (with quantity discounts) in the range of $1 apiece.
I think you'd be much better off using separate LEDs. In part this is because standard Life displays only use red and green (red for birth, green for survival), so the blue goes unused. It's perfectly possible (and pretty) to use blue to indicate a cell which has just died, but it's unusual.
Given your quantities, you should be able to get 2,000 - 10,000 mcd red and green 5 mm LEDs for around $.10 ea, although this will eat up $500. It's still better than $2500, and the LEDs will be brighter. If you mount the LEDs in a piece of 1/4" plywood, you can drill your mounting holes in pairs with a pair-spacing of about 1/4 inch, so I don't think a viewer will notice the offset with a cell spacing of 2". And two sheets of 1/4" plywood and 2 sheets of diffuser plexiglass is going to cost some, too. Plus, I hope you have access to a surplus source of cheap wire - you won't believe how much you'll need. Most of it will be small-gauge wire, so it won't be terribly expensive on a per-foot basis, but it adds up. Also, just as a construction tip, make sure you tie your wire harness to mounting plate with screws at regular intervals. If you don't, when you mount the display vertically, you risk the harness shifting and either shorting out exposed LED pins or even ripping wires loose.
You'll want to pick your diffuser characteristics carefully, keeping the density as low as you can while getting an acceptable diffusion. Diffusers come in various degrees diffusivity, so check out the available choices. I'd recommend not trying to fill the cell spaces completely with LED illumination. For a 2 x 2 spacing, I'd go for a nominal 1" diameter spot. For a 30 degree LED, that would mean a 2" spacing between the mounting board and the diffuser. Smaller spacing will, of course, produce smaller, brighter spots.
Multiplexing at this scale gets a bit iffy. On a 4' x 4' subpanel, if you multiplex between rows you will cut the brightness of each LED by a factor of 25. And, just as a practical matter, I'd recommend sizing your display to 48 x 48 cells. This will allow an even 1" spacing AND the efficient use of octal driver ICs like the 595. On this scale, anything which makes construction easier is a good idea. You have the right idea about doing the multiplexing, but be aware that 74HC595s are only rated for an output current of about 6 mA. The absolute max is 35 mA, and most Arduino projects routinely ignore the data sheet. You can probably get away with it, but if you want to be safe, buffer the column outputs with a transistor per channel.
EDIT - Ignacio Vazquez-Abrams has kindly suggest the use of the TIP6C595 in place of the 74HC595, and I'd recommend it. However, it does have its own tradeoffs, particularly price. The TIP6C595 in DIP package is available from Digikey for about $1 ea. The 74HC595 in DIP from Jameco will run about $.40. If you go the risky route you can save about $35 for a complete display using 8x8 subregions. Whether or not this is worth it to you is a classic engineering tradeoff. Just thought I'd mention it. END EDIT
I'd recommend that you subdivide your 4' x 4' panels into (9) 8x8 regions. This will keep your multiplexing losses down to 1 in 8.
Your current calculation is correct, although with only 2 colors it drops to 1 amp. On the other hand, if you go to 8 x 8 subregions, each 4' x 4' panel will need a maximum of 3 amps for the LEDs. This reflects a basic, inescapable truth: if you want more light, you need more power.
Also note that you may need to worry about cooling. If you use a 5-volt supply and 8 x 8 subregions, each panel will dissipate about 15 watts, including the current-limiting resistors which have simply been assumed and not discussed. While this may not seem like much, if each panel is enclosed, and then stood on end, 15 watts worth of warm air will collect at the top, and it may get pretty toasty for the upper LEDs.
Overall, I think you can do what you want, and within budget. As long as your time is free, of course. Even assuming minimum wage for your time, this is going to go waaay over.
FURTHER EDIT - If you need even more brightness, there is no need to multiplex. Simply use an 8-bit shift register for each 8 LEDs, connect them in series, then use each output to drive one LED to 10 mA. With a 1 MHz clock, updating the entire 2500 cells will only take 2.5 msec. At 1 update every second, the apparent brightness of a dark cell will only be increased by about 1/400 of full scale. A 74HC164 only costs about $.25 in hundreds, and the system would need 625, so total cost would be about $175. This would compare very favorably with the cost of a multiplexed system due to the lack of row drivers. Of course, worst-case current draw is now 25 amps, but as I've commented before, if you want more light you need more power. One further complication of this scheme is the need to provide either repeaters at regular intervals to regenerate the clock, since it cannot propagate accurately over the long signal path which this would produce, or a central driver to send clocks out over a twisted pair to each shift register. But such a system should be fairly cheap. It would also require 8 to 25 more current limit resistors than a multiplexed system.
Best Answer
There is a concept called "multiplexing" to control large numbers of LED's with few power pins.
In the above image, you can see that for lighting 16 LED's, only 8 pins are used for control. In the picture, you consider a matrix to glow a specific LED, say, for example you wanna glow A1 LED, then you need to give +Ve voltage to terminal A and ground to terminal 1. This way you can control LED a specific LED.
There is a limitation here. If you wanna glow two LEDs, say for example A1 and C4, then the LED C1 and A4 will also glow. So to avoid such things, we use concept called "Multiplexing". Assume that you have a microcontroller with 8 I/O pins. Now, to glow A1 you give supply to A terminal and ground 1 terminal. Now turn off supply to A terminal and move to terminal, nothing will glow, then move to terminal C, now ground terminal 4. LED C4 will glow. Now move to terminal D. Nothing will glow. When you give supplies to terminal A, B, C, D so fast, you cannot notice that the LED A4 and C1 will glow.
This may seem to be explaining in 2D, but you can make it in linear way and control based on it. All you need is a microcontroller with more I/O pins and programming knowledge. If you want to control about 50 rows of LEDs, you can use many serial to parallel shift registers like 74HC595 cascaded and also in the same way in the columns also. This way, you can save large number of I/O pins, but it needs to be operated very fast in the range of microseconds.
The same concepts is used in television to display a picture. Some LCD TV's use TFT (thin film transistors) to switch on and off a specific row. In CRT TV's, the deflection coils in horizontal will manage to show a single line.