Close
0%
0%

Why I built an LED luminosity tuner

It's annoying to guess at the brightness of an indicator when calculating for an LED.

Similar projects worth following
LEDs are annoying 5mA is very different from LED to LED. What works for one LED doesn't work for another. But goal isn't to calculate the current but to actually get the brightness you want. None of the calculations give you empirical results. Each situation demands a different approach. Whether it's a UI, or perhaps some indicators inside an enclosure, you're trying to ensure visibility in bright environments or trying to optimize power for a >1yr on a coin cell. I'm sure you've seen examples of non-ideal implementation. Have you ever tried to explain how to calculate this to a non engineer? I'm sure there are makers, artists and hobbyists that would love an easier way. In doing so, I discovered that it is a very useful device.

THE PROBLEM:

Here is a comparison for forward voltage and luminosity (mcd) at 20mA for an 0603 green LED that might be used for indicators, note the variance in forward voltage and the amount of light produced.  There are also variations between different components from the same manufacturer!  So picking 10mA isn't always a good option for designing indicators. 

Our eyes have a logarithmic response to light.  

Source: https://www.telescope-optics.net/eye_intensity_response.htm

LED I-V curve is non linear.  

SOLUTION:

Design a device that lets you adjust the luminosity of the LED while showing all the measurements at that brightness for whatever system voltage I'm working with.  Simply put, light an LED, dim it and measure for the current to determine the current limiting resistor for a given system voltage. 

The Analog Dimming Circuit:

The original circuit was designed built around the Analog Devices LT3085 (diagram below) to provide the constant current dimming circuit.  It worked well but was expensive and since it's integrated, limited to what can be done with it.

So I designed my own constant current dimming circuit. 

The final design is within 70PPM error between 10-80C, utilizing a thermally compensated JFET current source. 

The LED forward voltage measurement is within 0.5% (<= 0.016V of 3.27V forward voltage and usually within 0.01V!) of my calibrated FLUKE 87!  To provide a margin of error I claim 1%. 

The curve is linear for the entire throw of the dimming potentiometer.  

To simulate the changing resistance in LTSpice.  Place a formula like this in the RESISTANCE field:    R=100k-(100k*time)

PRECISION Measurements:

The measurement is achieved by measuring the LED voltage against the 5V reference.   In order to maximize resolution a 30Ω, 0.1% shunt is measured against the 1.1V internal bandgap reference.  Since bandgaps can have variations in manufacturing (+/-10%), the bandgap is compared and calibrated against the 5V reference given by a precision 5V LDO at AVCC.  This ensure that there's no drift and that each device stays calibrated out of the box and over time.  Once calibrated, the bandgap reference provides precise measurements.

Parameter Value
ADC reference 1.1 V (nom)
Resolution 14-bit  (16,384 steps)
Shunt resistor 30 Ω,  0.1%,  25ppm/C             
Voltage LSB 67.14 µV
Current LSB 2.24 µA
Full-scale current 36.67 mA
25 mA utilization 68.2% of range

Putting it all together:

I am not a mechanical engineer.  My work on Solidworks seems to be more time-consuming than productive.  I used tinkercad to generate the 3D printed case.  It took about 5 tries to get everything the way I wanted it.  Apparently this is not a complicated part to get injected molded if it ever becomes a thing.  I will probably have to redesign for molding as the lines are parallel in this model.  I will likely have to redo it in Solidworks. 

This project was challenging in many ways:

1. Originally designed as 2 PCBs sandwiched with standoffs but my wife said it looked unfinished (although I liked the exposed look of it).  This took my usual 2 dimensional design into 3 dimensions and took a few iterations to get right.

2. The analog design is challenging and very touchy.  Many simulations, calculations, and test circuits brought me to this point.

3. To get precision from the ADC required some interesting solutions.  The debugging was fun also. 

4. Final design to improve accuracy and make calibration easy as well as put it into a nice case.

Outtakes :

The journey was long with a lot of mistakes and challenges.  For...

Read more »

eeZ-LED Datasheet.pdf

Datasheet

Adobe Portable Document Format - 1.23 MB - 05/02/2026 at 18:00

Preview

  • Project completed

    Charlie Kim6 days ago 0 comments

    5/31/26   -  Project completed

    The device is testing very well, accuracy is right on, it's temperature and displayed readings are stable.  The LEDs are within the tolerance of my light meter when measured on the eeZ LED and powered by lab supply with the resistor values shown. 

    It looks like I started this over 6 years ago! Glad I finally found some time to finish, the folks who have one love them.

  • Kelvin Assessment

    Charlie Kim05/16/2026 at 14:53 0 comments

    5/16/26
    Worst case scenario: A 48" round trip for 28ga wires to check SMD LED in position:

    28 ga wire is 64.9Ω/1000 ft @ ambient, which comes to 64.9mΩ per ft.  Total resistance for 48" is 259.6 mΩ

    At 20mA, we are at 5.19mV of voltage drop across the wire, this amounts to a  173uA error at max current (this is 0.8% error)

    At 1 mA, the drop is 260uV which is 8.6uA 

    At this time, the error introduced by 4 ft of 28ga wire (worst case) is within the margin of error and not significant to justify kelvin connection. 

  • R&D notes

    Charlie Kim05/13/2026 at 20:02 0 comments

    5/13/26 
    1. Experimenting with log amplifier so that the lower current gets more throw since the human eyes see logarithmically, this is challenging as adding a diode to the feedback limits the dimming range, I will have to possibly drive a BJT and add a subcircuit that provides delta R to the feedback.  This will take some thought and experimentation. 

    2. Some of the feedback from a design review on LinkedIn has brought up the topic of adding easy SMD support.  There are several features I would like to implement when this is done

      a. kelvin connection

      b. A method of providing hands free clips so that 0603 SMD LEDs can be measured in place for LEDs under a control panel and or diffusers. 

    NOTE:  this can be achieved by soldering wires to the LED and attaching to the eeZ LED as it is currently designed.  However without kelvin connectors, the measurements are slightly off due to the voltage drop on the wire leads.   Analysis and assessment needed to understand the effect on variance and significance.

  • Updates

    Charlie Kim05/07/2026 at 16:11 0 comments

    UPDATES:

    5/3/26  -     Software update: 

    Show resistance as 1% E96 values available on the market.  

    Implemented 96 value array was saved to flash (free up RAM)

    const int E96_TABLE[] PROGMEM = { 100, 102, 105, 107, 110, 113, 115, 118, 121, 124, 127, 130, 133, 137, 140, 143, 147, 150, 154, 158, 162, 165, 169, 174, 178, 182, 187, 191, 196, 200, 205, 210, 215, 221, 226, 232, 237, 243, 249, 255, 261, 267, 274, 280, 287, 294, 301, 309, 316, 324, 332, 340, 348, 357, 365, 374, 383, 392, 402, 412, 422, 432, 442, 453, 464, 475, 487, 499, 511, 523, 536, 549, 562, 576, 590, 604, 619, 634, 649, 665, 681, 698, 715, 732, 750, 768, 787, 806, 825, 845, 866, 887, 909, 931, 953, 976 };

    The measured resistance is converted to 100's value and is compared with a switch case to next highest value.  Then the value is changed back to show the correct decade. 

    5/5/26 -   Implemented 14 bit oversampling of the 10 bit ADC.  It brings the current resolution from 35uA to 2.2uA. I had a lot of math overflow issues to contend with, have had to use 32bit UL casting to ensure no overflow. 

View all 4 project logs

Enjoy this project?

Share

Discussions

Jim wrote 05/28/2026 at 20:46 point

Are the software updates you mentioned available somewhere?

  Are you sure? yes | no

Ken Yap wrote 05/03/2026 at 21:01 point

It's interesting that you picked the green LEDs for your example. You'll find that you actually have two types of green LEDs in your table. The Wurth, Feztek and Vishay green LEDs have a different material which is more efficient and the forward voltage is around 3V compared to the 2+V of the others. They cost more and the colour is usually described as emerald.

  Are you sure? yes | no

Charlie Kim wrote 05/05/2026 at 13:53 point

That's a great point! You run into the same issues with other colors.  I'm not a semiconductor designer, GaAsP RED LEDs have different qualities than GaAlAs RED LEDs.  Usually we just filter by red LED and read datasheets when we look for one.  Where this device comes in handy is to just for setting luminosity for LEDs (brightness or power conservation).   

  Are you sure? yes | no

Similar Projects

Does this project spark your interest?

Become a member to follow this project and never miss any updates