Introduction: Angstrom - a Tuneable LED Light Source

Angstrom is a 12 channel tuneable LED light source that can be built for under £100. It features 12 PWM controlled LED channels spanning 390nm-780nm and offers both the ability to mix multiple channels to a single 6mm fibre-coupled output as well as the capability of outputting any or all channels simultaneously to individual 3mm fibre outputs.

Applications include microscopy, forensics, colorimetry, document scanning etc. You can easily simulate the spectrum of various light sources such as compact fluorescent lamps (CFL).

Additionally the light sources could be used for interesting theatrical lighting effects. The power channels are more than capable of handling additional LEDs with a higher rated power supply, and the multiple wavelengths create a beautiful and unique multicoloured shadow effect that normal white or RGB LED sources cannot duplicate. It's a whole rainbow in a box!.

Step 1: Parts Required - Baseboard, Power, Controller and LED Assembly

Baseboard: The unit is assembled on a wooden base, approximately 600mm X 200mm x 20mm. Additionally, a stress relief wooden block 180mm X 60mm X 20mm is used to align the optical fibres.

A 5V 60W power supply is connected to the mains power via a fused IEC plug, fitted with a 700mA fuse, and a small toggle switch rated at least 1A 240V is used as the main power switch.

The main circuit board is constructed from standard phenolic copper-clad stripboard, 0.1 inch pitch. In the prototype, this board measures approximately 130mm X 100mm. An optional second board, of around 100mm X 100mm was fitted to the prototype but this is only to fit additional circuitry, such as signal processing logic for spectroscopy etc and is not required for the base unit.

The main LED assembly constitutes 12 3W star LEDs, each a different wavelength. These are discussed in more detail in the section on the LED assembly below.

The LEDs are mounted on two aluminium heatsinks which in the prototype were 85mm x 50mm x 35mm deep.

A Raspberry Pi Zero W is used to control the unit. It is fitted with a header and plugs into a matching 40 pin socket on the main circuit board.

Step 2: Parts Required: LEDs

The 12 LEDs have the following centre wavelengths. They are 3W star LEDS with a 20mm heatsink base.


All but the 560nm unit were sourced from FutureEden. The 560nm unit was sourced from eBay as FutureEden do not have a device covering this wavelength. Note that this unit will ship from China so allow time for delivery.

The LEDs are attached to the heatsink using Akasa thermal tape. Cut 20mm squares and then simply stick one side to the LED and the other to the heatsink, ensuring you follow the manufacturer's instructions as to which side of the tape goes to the LED heatsink.

Step 3: Parts Required: LED Control Circuitry

Each LED channel is controlled from a GPIO pin on the Raspberry Pi. PWM is used to control the LED intensity. A power MOSFET (Infineon IPD060N03LG) drives each LED via a 2W power resistor to limit LED current.

Values of R4 for each device and measured current are shown below. The resistor value changes because the voltage drop across the shorter wavelength LEDs is higher than for the longer wavelength LEDs. R4 is a 2W resistor. It will get quite warm during operation so be sure to mount the resistors clear of the controller board, keeping the leads long enough so that the resistor body is at least 5mm clear of the board.

The Infineon devices are available cheaply on eBay and are also stocked by suppliers such as Mouser. They are rated at 30V 50A which is a huge margin but they are cheap and easy to work with, being DPAK devices and therefore easily hand-solderable. If you want to substitute devices, be sure to pick one with appropriate current margins and with a gate threshold such that at 2-2.5V the device is fully on, since this matches the logic levels (3.3V max) available from the Pi GPIO pins. The gate/source capacitance is 1700pf for these devices and any replacement should have roughly similar capacitance.

The snubber network across the MOSFET (10nF capacitor and 10 ohm 1/4W resistor) are to control rise and fall times. Without these components and the 330 ohm gate resistor, there was evidence of ringing and overshoot on the output which could have lead to unwanted electromagnetic interference (EMI).

Table of resistor values for R4, the 2W power resistor

385nm 2.2 ohm 560mA
415nm 2.7 ohm 520mA
440nm 2.7 ohm 550mA
460nm 2.7 ohm 540mA
500nm 2.7 ohm 590mA
525nm 3.3 ohm 545mA
560nm 3.3 ohm 550mA
590nm 3.9 ohm 570mA
610nm 3.3 ohm 630mA
630nm 3.9 ohm 610mA
660nm 3.9 ohm 630mA
780nm 5.6 ohm 500mA

Step 4: Parts Required: Fibre Optics and Combiner

The LEDs are coupled to an optical combiner via 3mm plastic fibre. This is available from a number of suppliers but the cheaper products may have excessive attenuation at short wavelengths. I purchased some fibre on eBay which was excellent but some cheaper fibre on amazon which had significant attenuation at around 420nm and lower. The fibre I purchased from eBay was from this source. 10 metres should be ample. You need only 4 metres to couple the LEDs assuming 12 X 300mm lengths, but one of the options when building this unit is to also couple individual wavelengths out to 3mm output fibre so it's handy to have extra for this option.

The output fibre is flexible 6mm fibre encased in a tough plastic outer sheath. It's available from here. A 1 metre length will probably suffice in most cases.

The optical combiner is a tapered plastic lightguide which is made from a piece of 15 x 15mm square rod, cut to approximately 73mm and sanded down so that the output end of the guide is 6mm x 6mm.

Again,note that some grades of acrylic can have excessive attenuation at short wavelengths. Unfortunately it's hard to determine what you're going to get, but rod from this source worked well

However rod from this source had excessive attenuation and was almost completely opaque to 390nm UV light.

Step 5: Parts Required: 3d Printed Parts

Some parts are 3d printed. They are

The LED fibre adaptors

The fibre mounting plate

The (optional) fibre output adaptor (for individual outs). This is just the fibre mounting plate re-printed.

The optical coupler mounting plate

All parts are printed in standard PLA except the fibre adaptors. I recommend PETG for these as PLA softens too much; the LEDs get quite warm.

All the STLs for these parts are included in the attached files for the project. See the step on configuring the Raspberry Pi for the zip file which contains all the project assets.

Print the fibre adaptors for the LEDs with 100% infill. The others can be printed with 20% infill.

All parts were printed at a layer height of 0.15mm using a standard 0.4mm nozzle at 60mm/sec on a Creality Ender 3 and also a Biqu Magician. Any low-cost 3D printer should do the job.

The parts should all be printed vertically with the holes pointing up - this gives the best precision. You can skip supports for them; it'll make the main coupler mounting plate look a little ragged on the trailing edge but this is just cosmetic; a touch of sandpaper will tidy it up.

Important: Print the fibre mounting plate (and the optional second copy of it for the individual fibre output adaptor) at a scale of 1.05 i.e 5% enlarged. This ensures the holes for the fibre have sufficient clearance.

Step 6: Assembling the Main Controller Board

The controller board is fabricated from standard copper stripboard (sometimes known as veroboard). I am not including a detailed layout because the board design I ended up with got a bit untidy due to having to add components like the snubber network that I had not originally planned. The top of the board, shown above partially built, has the power resistors and the socket for the Raspberry Pi. I used a right angle header for the Pi so it sits at right angles to the main board but if you use a normal straight header then it will simply sit parallel to the board instead. It will occupy a little more room that way so plan accordingly.

Veropins were used to connect wires to the board. To cut tracks a small twist drill bit is useful. For the Pi socket use a sharp craft knife to cut the tracks as you don't have a spare hole between the two sets of socket pins.

Note the double row of 1mm copper wire. This is to provide a low impedance path for the nearly 7 amps of current that the LEDs consume at full power. These wires go to the source terminals of the power MOSFETs and thence to ground.

There is only a small 5V wire on this board supplying power to the Pi. This is because the 5V main power feed goes to the anodes of the LEDs, which are connected via a standard PC IDE disk cable on a second board in my prototype. However you don't need to do this and can just wire them up directly to a socket on the first board. In that case you will be running a duplicate set of copper wires along the anode side to handle the current on the +5V side. In the prototype these wires were on the second board.

Step 7: The Power MOSFETs

The MOSFETs were mounted on the copper side of the board. They are DPAK devices and so the tab must be soldered directly to the board. To do this, use an appropriately large tip on the soldering iron and quickly tin the tab lightly. Tin the copper tracks where you're going to attach the device. Place it on the board and heat the tab up again. The solder will melt and the device will be attached. Try and do this reasonably quickly so as not to overheat the device; it will tolerate several seconds of heat so don't panic. Once the tab (drain) is soldered you can then solder the gate and source leads to the board. Don't forget to cut the tracks first for the gate and source leads so they don't short out to the drain tab!. You can't see from the picture but the cuts are underneath the leads towards the body of the device.

Eagle-eyed readers will note only 11 MOSFETs. This is because the 12th was added later when I got the 560nm LEDs. It doesn't fit on the board due to the width, so was placed elsewhere.

Step 8: LEDs and Heatsinks

Here is a closeup picture of the LEDs and heatsinks. The controller board wiring was from an earlier version of the prototype before I switched to using an IDE cable to connect the LEDs to the controller.

As mentioned previously, the LEDs are attached using squares of Akasa thermal tape. This has the advantage that if a LED fails, it's easy to remove it using a sharp knife to cut through the tape.

As long as the heatsink is sufficiently large, there's nothing to stop you mounting all the LEDs on a single heatsink. On the heatsinks shown, at full power, the heatsink temperature reaches 50 degrees C and so these heatsinks are probably slightly smaller than optimal. In hindsight it would probably also have been a good idea to put three of the longer wavelength LEDs on each heatsink rather than put all six of the shorter wavelength emitters on one and the longer wavelength emitters on the other. This is because, for a given forward current, the short wavelength emitters dissipate more power due to their higher forward voltage drop, and hence get warmer.

You could of course add fan cooling. If you plan to fully enclose the LED assembly this would be wise.

Step 9: LED Wiring

The LEDs are connected to the controller board via a standard 40 pin IDE cable. Not all the cable pairs are used, allowing room for expansion.

The wiring diagrams above show the IDE connector wiring and also the wiring to the Raspberry Pi itself.

The LEDs are denoted by their colours (UV = ultraviolet, V = violet, RB = royal blue, B = blue, C = cyan, G = green, YG = yellow-green, Y = yellow, A = amber, R = bright red, DR = deep red, IR = infrared), i.e by ascending wavelength.

Note: don't forget to ensure that the +5V connection side of the cable socket has 2 x 1mm thick wires running in parallel down the stripboard to provide a high current path. Similarly the source connections to the MOSFETs, which are grounded, should have similar wires run to provide the high current path to ground.

Step 10: Testing the Controller Board

Without plugging the Raspberry Pi into the board, you can test that your LED drivers are working correctly by connecting the GPIO pins via a cliplead, to the +5V rail. The appropriate LED should light.

Never connect the GPIO pins to +5V when the Pi is plugged in. You will damage the device, it runs internally on 3.3V.

Once you are confident that the power drivers and LEDs are working correctly, you can proceed with the next step, which is to configure the Raspberry Pi.

Do not look directly into the end of the optical fibres with the LEDs running at full power. They are extremely bright.

Step 11: Fibre Optic Coupling the LEDs

Each LED is coupled via 3mm optical fibre. The 3d printed fibre adaptor fits snugly over the LED assembly and guides the fibre. The strain relief block is mounted approximately 65mm in front of the LED heatsinks.

This provides enough room to get your fingers in and push the fibre adaptors onto the LEDs and then fit the fibre.

Drill 4mm holes through the strain relief block in line with the LEDs.

Each length of fibre is approximately 250mm long, However because each fibre takes a different path, the actual fitted length will vary. The easiest way to get this right is to cut fibre lengths of 300mm. You must then straighten the fibre or it will be impossible to manage. It's like 3mm thick perspex rod, and is much stiffer than you imagine.

To straighten the fibre, I used a 300mm length (approx) of 4mm OD brass rod. The inside diameter of the rod is sufficient for the fibre to slide smoothly into the rod. Ensure both ends of the rod are smooth, so you don't scratch the fibre while sliding it in and out of the rod.

Push the fibre into the rod so that it is flush at one end and with a little length sticking out the other, or all the way in if the rod is longer than the fibre. Then dip the rod into a deep saucepan filled with boiling water for about 15 seconds. Remove the rod and reposition the fibre if necessary so that the other end is flush with the rod end, then heat that end in the same way.

You should now have a perfectly straight piece of fibre. Remove by pushing another piece of fibre through until you can grip and remove the straightened fibre.

When you have straightened all twelve pieces of fibre, cut a further twelve pieces approx 70mm long. These will be used to guide the fibres through the coupling plate. Then when construction is complete, they will be used to populate the individual fibre out coupler, so they are not wasted.

Straighten these cut pieces in the same way. Then fit them to the coupler plate. You can see how they should look in the photo above. The staggered layout is to minimise the area occupied by the fibres (minimal spherical packing density). This ensures that the fibre combiner can operate as efficiently as possible.

Take each full length piece of cut fibre and sand one end flat, working up to 800 and then 1500 grit sandpaper. Then polish with metal or plastic polish - a small rotary tool with a polishing pad is handy here.

Now remove ONE cut fibre and slide the full length fibre into the coupler plate. Then fit it back through the strain relief so that the polished end is touching the LED lens front via the LED fibre coupler. Repeat for each fibre. Keeping the short pieces of fibre in the holes makes sure each long fibre is easy to get in exactly the right place.

NOTE: Don't push too hard on the violet and ultraviolet LEDs They are encapsulated with a soft polymer material unlike the other LEDs, which are epoxy encapsulated. It's easy to deform the lens and cause the bonding wires to break. Trust me, I learned this the hard way. So be gentle when fitting the fibres to these two LEDs.

It doesn't much matter what order you route the fibres through the coupler but try and layer the fibres so that they don't cross over each other. In my design the bottom six LEDs were routed to the lowest three holes for the left three LEDs and then the next three holes for the right three LEDs and so forth.

When you have all the fibres routed through the coupler, position it on the base board and drill two mounting holes, then screw it down.

Then, using a very sharp pair of diagonal cutters, cut each piece of fibre as close to the coupler face as possible. Then pull each piece out, sand and polish the cut end and replace it, before moving on to the next fibre.

Don't worry if the fibres aren't all exactly flush with the coupler face. It's best to err on the side of having them slightly recessed rather than protruding but a millimetre or two difference won't really matter.

Step 12: Configuring the Raspberry Pi

The Raspberry Pi configuration process is documented in the attached rtf document which is part of the zip file attachment. You do not need any additional hardware to configure the Pi other than a spare USB port on a PC to plug it in, a suitable USB cable and an SD card reader to create the MicroSD card image. You also need a MicroSD card; 8G is more than large enough.

When you have configured the Pi, and plugged it into the main controller board, it should come up as a WiFi access point. When you connect your PC to this AP and browse to http://raspberrypi.local or you should see the above page. Simply slide the sliders to set up the intensity and wavelengths of light you wish to see.

Note that the minimum intensity is 2; this is a peculiarity of the Pi PWM library.

The second picture shows the unit emulating the spectrum of a CFL lamp, with emissions at approximately 420nm, 490nm and 590nm (violet, turquoise and amber) corresponding to the typical three phosphor coating lamps.

Step 13: The Fibre Combiner

The fibre beam combiner is made from a 15 x 15mm square acrylic rod. Note that some acrylic plastics have excessive absorption in the spectrum from 420nm and below; to check this before you start, shine the UV LED through the rod and verify that it does not excessively attenuate the beam (use a piece of white paper so you can see the blue glow from the optical whiteners in the paper).

You can print off the 3D printable jig for sanding the rod down or construct your own from some suitable plastic sheet. Cut the rod to approximately 73mm and sand and polish both ends. Then fix the jig to two opposite sides of the rod using double sided adhesive tape. Sand using 40 grit paper until you are within 0.5mm or so of the jig lines, then progressively increase to 80,160,400,800,1500,3000,5000 and finally 7000 grit paper to get a tapered polished surface. Then remove the jig and reposition to sand the other two sides. You should now have a tapered pyramid suitable for mounting in the fibre combiner plate. The narrow end is 6mm x 6mm to match the fibre takeoff.

Note: in my case I didn't quite sand down to 6mm x 6mm so the combiner sticks out a bit from the mounting plate. This doesn't matter as the 6mm fibre is a press fit and will butt with the narrow end of the combiner if pushed in far enough.

Strip back about 1 inch of the outer jacket from the 6mm fibre, taking care not to damage the fibre itself. Then, if the outer jacket of the fibre isn't a snug enough fit into the coupler plate, just wrap a piece of tape round it. It should then be able to be pushed in and snugly bed with the combiner pyramid. Mount the whole assembly to the baseplate in line with the fibre outputs.

Note that you do lose some light when combining. You can see the reason from the optical traces above, because concentrating the light down also causes the beam angle to increase and we lose some light in the process. For maximum intensity at a single wavelength, use the optional fibre coupler plate to pick off a LED or LEDs directly to 3mm fibre.

Step 14: The Individual Fibre Output Coupler Plate

This is just a second print of the main fibre guide. Again, remember to print at 105% scale to allow clearance for the fibres through the holes. You simply screw this plate down in line with the main fibre guide, unscrewing the combiner assembly and replacing it with this plate. Don't forget to fit it the right way round, the holes only line up in one direction!.

Now put those 12 pieces of fibre you cut off into the holes in the plate. To pick off one or more wavelengths, just remove one piece of fibre and place a longer length into the hole. You can pick off all 12 wavelengths simultaneously if you wish.

Step 15: More Power!. More Wavelengths!

The Pi can drive more channels if you wish. However availability of LEDs in other wavelengths is likely to be a challenge. You can get 365nm UV LEDs cheaply but the flexible fibre 6mm cable starts to absorb strongly even at 390nm. However I did find that individual fibres would work with that wavelength, so if you wanted, you could add or replace a LED to give you a shorter UV wavelength.

Another possibility is to increase brightness by doubling up on the LEDs. You could, for example, design and print a 5 X 5 fibre coupler (or 4 X 6) and have 2 LEDs per channel. Note that you'd need a much larger power supply as you'll be drawing nearly 20 amps. Each LED needs its own dropping resistor; don't parallel the LEDs directly. The MOSFETs have more than enough capacity to drive two or even several LEDs per channel.

You can't really use higher power LEDs because they don't emit light from a small area like the 3W LEDs and so you can't efficiently fibre couple them. Look up 'conservation of etendue' to understand why this is.

The light loss through the combiner is quite high. This is unfortunately a consequence of the laws of physics. In reducing the beam radius we also increase its divergence angle and so some light escapes because the light guide and fibre only have an acceptance angle around 45 degrees. Note that the power output from individual fibre outputs is significantly higher than the combined wavelength coupler.