Primeiro, você especifica um único fabricante e número de peça de LED. O intervalo em Vf de uma parte para outra não será tão grande quanto você sugere (não 0,5V).
Segundo, pequenas variações no brilho não são facilmente detectáveis pelo olho. Portanto, você não precisa se preocupar com pequenas variações de unidade para unidade.
Terceiro, quando possível, você alimenta os LEDs a partir de uma tensão regulada, não a bateria, para remover uma fonte de variação.
Quarto, quando a única fonte de energia disponível é variável (como uma bateria), você aciona o LED com uma fonte de corrente em vez de uma fonte de tensão com um resistor limitador de corrente. Se houver pelo menos uma tensão regulada disponível (mesmo que seja baixa tensão), é muito fácil criar uma fonte de corrente satisfatória para acionar um indicador LED usando apenas um transistor e alguns resistores. Isso é barato, mas ocupa espaço em projetos com restrições de espaço.
Se não houver sequer uma única tensão regulada disponível, você ainda poderá criar uma fonte de corrente decente usando dois diodos em série como referência de tensão.
Não tenho certeza se sou um engenheiro de verdade, mas tive que fazer tudo isso ao projetar produtos de consumo, e foi assim que lidei com isso. Outra coisa que realmente pode ajudá-lo com os indicadores LED é quando cargas pesadas fazem a tensão da bateria diminuir. Por exemplo, um motor de vibração ou alto-falante pode causar a queda da tensão da bateria em alguns produtos. Essa queda pode causar uma oscilação perceptível ou variação no brilho do LED quando o LED é acionado pela bateria. Esse é outro motivo para usar uma fonte atual.
Aqui está uma fonte de corrente para quando o LED é alimentado pela bateria, mas você tem um sinal GPIO disponível, derivado de uma tensão regulada:
simular este circuito - esquemático criado usando o CircuitLab
No esquema acima, não importa se o LED é alimentado a partir de 3.3V ou VBATT ou o que for, desde que o GPIO seja alimentado por uma fonte regulada. Copiei isso de outra resposta. Você deseja ajustar o resistor do emissor para obter a corrente específica que está procurando. Quando não há muita sobrecarga disponível, você também pode reduzir o R2 para que a tensão de base seja menor que 1V.
Aqui está um circuito para quando não há tensão regulada disponível:
simule este circuito
No circuito acima, D1 e D2 atuam como uma referência de tensão. A voltagem varia, mas não tanto quanto a voltagem da bateria. Essa tensão constante na base de Q1 é então alavancada em uma tensão constante em R3 e, portanto, em corrente constante do coletor (o transistor não será saturado, a menos que o VBATT seja muito baixo). Na verdade, não fiz isso em um design de produção, mas acredito que funcionaria bem.
Comparado com um simples interruptor saturado, ambos os circuitos mantêm um bom trabalho em manter a corrente desejada, mesmo quando há pouca tensão disponível para manter o LED aceso.
Aqui estão alguns resultados de simulação comparando a chave saturada simples com o resistor limitador de corrente (D1) versus o circuito de referência do divisor de tensão (D2) vs a referência de dois diodos (D5). Isso é com um LED de 3V. Observe que os valores do resistor foram ajustados para obter cerca de 9mA em VBATT = 4,2V.
Como você pode ver, a fonte de corrente com a referência do divisor de tensão manteve um bom desempenho, digamos 3,35V. Portanto, ele precisa apenas de 350mV de sobrecarga.
O circuito de referência de dois diodos manteve um bom desempenho em torno de 3,45V, ou seja, em torno de 450mV de sobrecarga.
O circuito padrão realmente não mantém uma corrente regulada. A corrente cai linearmente com a tensão da bateria.
Observe também que o circuito de referência de dois diodos e o circuito de referência do divisor de tensão possuem corrente mais alta em todas as tensões da bateria em comparação com o circuito padrão, exceto na tensão máxima da bateria.