I had a lucky break! I discovered that if you give the 3 Watt LEDs 9 Volts they take 150mA, which is 1.35 Watts. And, given the smaller frame and having one LED per side per face (10 LEDs in total), 1.35 Watts is more than bright enough.
This is very convenient, because, unlike with the previous projects, I can simply connect the LEDs directly to the power supply. There’s no need for anything to reduce the voltage and no concerns about their taking too much current when hot, as they won’t get hot and there’s plenty of leeway between 150mA and their maximum of 300mA.
9 Volts is also a suitable voltage to power the Arduino (it needs 7 – 12 Volts, or a well regulated 5 Volts). (I bought a 9 Volt, 2 Amp power adapter from eBay, but it got very hot when running at a continuous 1.5 Amps (i.e. too hot to touch after an hour). So I got a refund and sent off for a 3 Amp one intended for a BT modem. This one works just fine.)
As with the previous project, I had the Arduino check the power supply voltage it turns on the LEDs. This was to protect them from damage in case somebody plugs in a 12 Volt power adapter (easily done!) or if the 9 Volt power supply were to develop a fault. So, there’s a potential divider (two 33K resistors in series – I used this value because I once bought 50 of them!) across the 9Volt power supply. The mid-point should be at 4.5 Volts (i.e. half way). This is connected to one of the Arduino’s analogue-in pins. (I also connected a 5 Volt zener diode to negative because 5 Volts in the maximum value allowed on an input pin.) The software checks the voltage on power-up and from time-to-time.
Actually, there’s a bit of a problem with this. When power is first applied to the Arduino it runs through an initialisation process before it starts executing the user code. During this initialisation period, it seems to set all the outputs to High for a second or so. Thus, all the LEDs turn on briefly at full brightness. Since this happens before the user code begins there’s nothing I can do with the code to prevent it from happening. It’s something the the Arduino nano does, but the Uno does not. It would be possible to prevent this behaviour using additional hardware, or possibly by modifying the Arduino’s bootloader, which is not for the feint-hearted! Nonetheless, checking the voltage would limit any overload to what is probably a survivable time.
I wanted to place five LEDs down each side of the artwork. Again, luck was with me, because it turned out that the 25x25mm right-angled aluminium strip I used for the previous project is just the right size for the frame! (The LED is slightly larger in diameter, but they are only running at half power so there should still be plenty of cooling.)
I did consider cutting and bending the strip so that each LED pointed more directly at the section it was tasked to light, but this would have been much more work. So I just attached the five LEDs to each metal strip and used paper shades to control the light direction.
The completed strips each hold five LEDs, dissipating a total of approximately 7.5 Watts over 70 cm. I sprayed parts of the metal strips black in parts, using a thin coat of car paint, to maximise the heat dissipation. In practice, the metal strip heatsinks just get nicely warm.