LED Landing Light for Experimental Aircraft

Written by: roboguru

Picture of LED Landing Light for Experimental Aircraft

So... I discovered that the landing light bulb on my canard pusher Velocity experimental airplane had failed.

I had two choices.... spend $6 bucks and buy a new one... or ... design my own! I must be crazy! But then, I did build the airplane in the first place, which I guess makes me certifiable!

I've been intrigued by the brightness & intensity of Cree LED flashlights. Upon investigating, I found that the LEDs used in those flashlights are, well, weeny, compared to the big ones Cree makes. The one I selected is from the XML series. Each one of these bad boys outputs 135 lumens/watt, and can be driven up to 10 watts. I created an array of 7 of these LEDs mounted on a heatsink, and I'm driving the 7 LEDs at a total of 5 amps, or just 714ma/LED. Even at that current, each LED is outputting approximately 275 lumens, for a total of about 2000 lumens for all 7 LEDs.... VERY bright... the comparable 100W incandescent bulb outputs, at it's very best, perhaps 1700 lumens. A typical landing light consumes about 60W (I couldn't find a lumen rating), but scaling from an ideal 100W lightbulb, that'd be about 1020 lumens). 

Then, of course, I complicated things by deciding to make my light either flash or stay on full time. In an airplane, in daylight, flashing is a really, really good thing, since a strobing light in the nose of the plane makes me more visible and therefore helps other pilots (and birds) see me coming, and (hopefully) get out of the way!

The instructable below will walk you through what I've done. I believe I've got this pretty well nailed, but here are the things I'd still like to improve if I can ever find the time. 

First, brighter is always better, and I designed the lamp part of this system with even more drive current in mind. 5 amps is about the best that this particular configuration of a linear current regulator and the mosfet I chose can do.

A switching regulator would be more efficient and generate less heat than the linear regulator I use. I chose not to design one in this pass of the design because of the greater size, higher component count, and also because switching regulators can create electrical noise which can be a problem for aircraft radio and navigation systems. Those issues can be resolved - It just would have involved more time than I was willing to put into this project right now.

Finally, the location of the light in the nose of my airplane shoots the light mostly downward, which is what you want for a landing light, but certainly not optimal for a strobe. Not much I'm prepared to do about that. 

So... if you are still interested... on with the show!

Step 1: Theory of Operation

Picture of Theory of Operation

Not that this is particularly complex, but here's the theory of operation... I chose to use a simple and cheap PIC controller (PIC12F1501) to do the flashing for me... the L78L05 is a small 5V regulator that drops the ship power (13.6V) to 5 volts for the PIC controller. 

The output of the PIC controller (RA2, pin 5) drives a small NPN switching transistor (the 2N2222... which I chose only because I had a drawer of them... there are many NPN transistors that would work). The 220K resistor (R1) serves to limit base current. The 10K resistor (R3) limits the collector current. 

When the PIC output RA2 is high, the transistor is switched on, which pulls the IRF510 mosfet gate down (and so the mosfet is turned off). When the PIC RA2 output is low, the transistor is turned off, the mosfet gate is pulled up by the 10K resistor R3, and the mosfet is turned on.

The LM338 is used as a current limiter, and the resistor between it's Vout and Adjust pins serves to set the current limit. More on that resistor later. 

The PIC controller RA4 (pin 3) is configured as an input. When the switch is open, the 10K resistor (R2) pulls the input high, and when the switch is closed RA4 is pulled low. The RA4 input tells the PIC controller to either flash (switch open, RA4 high), or stay on constantly (switch closed, RA4 low).

The LM338 has a minimum peak current capability of 5 amps, with 8 amps typical. The mosfet (IRF510A) has a peak current capability of 7 amps minimum (12 A typical)... So, recognize two things... running these devices at 5 amps in "landing" mode (not strobing)... is running them hard. For that reason, everything has a heat sink... Heat is the enemy of all electronics!

Step 2: Circuit Implementation

I chose to implement the circuit using two separate small PCBs, because, well, one of the two, the one containing the LM338 current limiter and the IRF510 mosfet gets HOT! I used Eagle 6.5.0 to implement the two cards (attached). The Signal board contains the PIC controller, it's voltage regulator (L78L05), the 2N2222 switching transistor, and the small current limiting resistors (R1, R2, R3). The design is very straight forward.

The second small PCB is the Hot Board. It contains the LED current limiter (LM338), the IRF510 mosfet, and the current limiting resistors... yes, resistors... I used three in parallel. Why? Remember I said I'd discuss that resistor later? Well... two things... first, changing the value of these resistors (or for simplicity the net parallel resistance) changes the LED drive current, and therefore changes the light output (and how hot the LEDs get). The power of these resistors needs to be sized based on the current desired.

I chose to plan for three resistors in parallel for two simple reasons... first, it gives great flexibility in that you can mix and match three different value resistors to get the current limit you want. Secondly, the resistors do drop some power (and therefore get hot)... using three allows the power (and therefore heat) to be distributed across three different resistors.

Here's the math, it's very simple:
The LM338 current limit setting is equal to 1.25 / net parallel resistance (or, conversely, net parallel resistance = 1.25 / desired current limit).
So, in my design, for a current limit of 5 amps, the net resistance has to be 1.25 / 5, or 0.25 ohms.

The resistors drop power (and therefore get hot). Here's the calculation... using ohms law (V=IR), a 5 amp current flowing through a 0.25 ohm resistance generates 1.25 volts. Power = VI, or in this case, P = 1.25 * 5, or 6.25 watts. 

To get a 0.25 ohm 6.25 watt resistor is a pain... so, instead, I chose to use three .75 ohm resistors in parallel, which gives me the advantage of being able to use small resistors since each resistor will only see one third of 6.25 watts or about 2.1watts. Turns out I had a drawer of 0.75 ohm 3W resistors...

Remember, in strobe mode, the power (and therefore heat) will be much less than in landing mode. The program is set for 5 flashes at about 100ms/flash... i.e., about a 50% duty cycle... therefore, in strobe mode much less heat is generated. In landing mode, with the LEDs constantly on, there is significant heat generated. 



Step 3: PIC Programming

The PIC program is simple enough that even a neophyte like me could get it done (with significant plagiarization from Peter Shabino and others - thanks, Pete!)

Please note... I am NOT a programmer. As a programmer friend often tells me, "programmers program - engineers just write code"....

First, here are the includes:

/* Main Files to Include */ /******************************************************************************

/ PIC12F1501 Configuration Bit Settings

// 'C' source line config statements


// #pragma config statements should precede project file includes. // Use project enums instead of #define for ON and OFF.


#pragma config FOSC = INTOSC // Oscillator Selection Bits (INTOSC oscillator: I/O function on CLKIN pin) #pragma config WDTE = OFF // Watchdog Timer Enable (WDT disabled)

#pragma config PWRTE = OFF // Power-up Timer Enable (PWRT disabled)

#pragma config MCLRE = ON // MCLR Pin Function Select (MCLR/VPP pin function is MCLR) #pragma config CP = OFF // Flash Program Memory Code Protection (Program memory code protection is disabled)

#pragma config BOREN = OFF // Brown-out Reset Enable (Brown-out Reset disabled)

#pragma config CLKOUTEN = OFF // Clock Out Enable (CLKOUT function is disabled. I/O or oscillator function on the CLKOUT pin)


#pragma config WRT = OFF // Flash Memory Self-Write Protection (Write protection off)

#pragma config STVREN = ON // Stack Overflow/Underflow Reset Enable (Stack Overflow or Underflow will cause a Reset)

#pragma config BORV = LO // Brown-out Reset Voltage Selection (Brown-out Reset Voltage (Vbor), low trip point selected.)

#pragma config LPBOR = OFF // Low-Power Brown Out Reset (Low-Power BOR is disabled)

#pragma config LVP = OFF // Low-Voltage Programming Enable (High-voltage on MCLR/VPP must be used for programming)

OK, next, here is the "main.c":

/* Files to Include */ /******************************************************************************/

#if defined(__XC)

#include /* XC8 General Include File */

#elif defined(HI_TECH_C)

#include /* HiTech General Include File */

#endif `

#include /* For uint8_t definition */

#include /* For true/false definition */

#include "system.h" /* System funct/params, like osc/peripheral config */

#include "user.h" /* User funct/params, such as InitApp *


/* User Global Variable Declaration */ /******************************************************************************

* i.e. uint8_t ; *


/* Main Program */ /******************************************************************************/

int loop;

void main(void)


/* Configure the oscillator for the device */


/* Initialize I/O and Peripherals for application */


TRISAbits.TRISA2 = 0; // setting RA2 as an output

TRISAbits.TRISA4 = 1; // setting RA4 as an input

ANSELAbits.ANSA4 = 0; // setting RA4 as a digital pin

while(1) { if (PORTAbits.RA4 == 1) // Is switch open?

{ for (loop = 0; loop <= 5; loop = loop + 1)


LATAbits.LATA2 = 0; // turn LED on

wait_ms(3); // wait 100 ms

LATAbits.LATA2 = 1; // turn it back off

wait_ms(3); // wait 100 ms



loop = 0;




LATAbits.LATA2 = 0; // turn LED on









Step 4: Circuit Implementation

Picture of Circuit Implementation

As mentioned there are two small PCBs, the controller card, and the HOT card.

Build the controller card with standard techniques - do a good job of soldering, and all should be well.

I built the HOT card a little differently... as you can see in the picture, I mounted the components (IRF510, LM338, and the three resistors)... on the BACK of the card, ... FACING FORWARD! I did this so that the heat sink mounting surface on both of the regulator and the mosfet could mount directly to the heatsink. Please see the pictures.

I mounted a scrap heatsink I had onto the outside of a RadioShack 3x2x1 project enclosure aluminum cover plate using thermal grease and nylon screws. The HOT board was then mounted to the inside of the aluminum cover plate using TO-220 phenolic insulators (Wakefield solutions 173-7-220P, or just google "TO-220 Insulator"). The insulator is required because the backs of both the LM338 and the IRF510 are electrically active, and we don't want them connected to each other or to the aluminum case & heatsink! Again, use more thermal paste on both sides of the insulator, on the backs of the LM338 and the IRF510, etc. I even put some on the resistors, since in my implementation they contact the coverplate/heatsink assembly.

I drilled a hole in the outside of the project box for the wires to exit, and riveted some lightweight aluminum angle to the ends of the project box to provide for mounting into the airplane. The controller is complete!

Step 5: Landing light implementation

Picture of Landing light implementation

For the landing light itself, I cut a round piece of 1/8 inch think aluminum plate to the same diameter as my landing light (). I then glued 7 "Cree Xlamp XML U2 white 10W emitters with 20mm star heatsinks" onto the plate using thermal epoxy (MG Chemicals Thermal Interface Material 8329TCM-6ML). After allowing the epoxy to cure, I soldered the LEDs into a parallel configuration using 22 gauge aircraft wire.

Next, I snapped on the reflector lenses (15 degree 21mm Reflector Collimator LED lense for Cree T6 U2 XML LED). After getting the lenses installed, I hit 'em with small drops of epoxy (JB weld) to hold them in place.

One tip regarding gluing with either the thermal or normal epoxy - I go to the local "Fleet Farm" store & buy syringes that I then use for all kinds of things - like accurately placing glue where you need it. They're cheap and disposable.

I also glued down some small tubes around the periphery of the new landing light to match the ridges on the old store-bought light (and thereby keep my light in position).

Finally, again using thermal epoxy, I glued another scrap heatsink to the back of the new landing light to ensure the LEDs would stay cool. Each one is consuming about 2 watts... the total is about 14 watts... if you don't think that's hot, try holding a 14W light bulb in your hand!

One other change I made after having this deployed... I drilled small holes near the edge of the landing light and ran safety wire through the holes and across the heatsink to safety the heatsink in case the epoxy failed. I wouldn't want that heatsink to depart the airplane (and potentially hit my prop!).

Step 6: Installation

Picture of Installation

The controller box and landing light are both mounted in the nose of the airplane. I installed a simple 6 pin connector (5 pins used) between the controller box, the light, and the aircraft so that the controller box could be removed if necessary. Find a good place to mount the controller, and ensure (DOUBLE CHECK) that the box and the wiring can never, ever, EVER interact in any way with your control system, landing gear, etc.

I added the control box to my strobe circuit (for power), and used my existing landing light switch (to control strobe mode). The strobe circuit provides the power and is fused. The landing light switch is wired between ground and the switch input to the controller box. If the switch is closed, the controller box switch input is grounded, which tells the PIC to keep the light on full time. If the switch is open, the input the PIC is pulled up, and the PIC is in strobe mode.

I'm not sure I'll keep it this way... I'm worried that if I'm flying IFR ("in the milk bottle" as they say), the flashing strobe will be too distracting... If so, I'll just add a separate switch to control the landing light separately from the wingtip strobes.

Step 7: Testing & Results

Again... check, double check, and re-double check that the light, controller, or any of the wiring can ever, ever come in contact with any of your control or landing gear systems...

While the landing light is incredibly bright, and heat appears to be under control, because of the particular installation on my airplane, it's visible from directly ahead but not so much from ahead and to the side, or ahead and above. Your installation may vary. The local tower can see the light at about 3 -5 miles, which is good... but brighter is always better.

Future enhancements may include:

- A switching regulator capable of greater than 5 amps output

- A similar set up to replace my Whelen strobe system (the power supply for the flash tubes failed...)