Compré un tablero de ruptura TSL2591 y quería escribir un controlador para mi tablero.
Después de consultar la documentación, descubrí que no puedo calcular el valor de iluminancia (en Lux) ya que no se dio su algoritmo.
Probé el código Arduino de Adafruit TSL2591 pero no hay descripción. Intenté obtener una nota de la aplicación sobre cómo usar el dispositivo o alguna descripción física, Nada. También probé el foro de Adafruit (sin respuesta aceptable ~ 2 días) y envío por correo electrónico de AMS (sin respuesta ~ 2 días).
uint32_t Adafruit_TSL2591::calculateLux(uint16_t ch0, uint16_t ch1)
{
uint16_t atime, again;
float cpl, lux1, lux2, lux;
uint32_t chan0, chan1;
// Check for overflow conditions first
if ((ch0 == 0xFFFF) | (ch1 == 0xFFFF))
{
// Signal an overflow
return 0;
}
// Note: This algorithm is based on preliminary coefficients
// provided by AMS and may need to be updated in the future
switch (_integration)
{
case TSL2591_INTEGRATIONTIME_100MS :
atime = 100.0F;
break;
case TSL2591_INTEGRATIONTIME_200MS :
atime = 200.0F;
break;
case TSL2591_INTEGRATIONTIME_300MS :
atime = 300.0F;
break;
case TSL2591_INTEGRATIONTIME_400MS :
atime = 400.0F;
break;
case TSL2591_INTEGRATIONTIME_500MS :
atime = 500.0F;
break;
case TSL2591_INTEGRATIONTIME_600MS :
atime = 600.0F;
break;
default: // 100ms
atime = 100.0F;
break;
}
switch (_gain)
{
case TSL2591_GAIN_LOW :
again = 1.0F;
break;
case TSL2591_GAIN_MED :
again = 25.0F;
break;
case TSL2591_GAIN_HIGH :
again = 428.0F;
break;
case TSL2591_GAIN_MAX :
again = 9876.0F;
break;
default:
again = 1.0F;
break;
}
// cpl = (ATIME * AGAIN) / DF
cpl = (atime * again) / TSL2591_LUX_DF;
lux1 = ( (float)ch0 - (TSL2591_LUX_COEFB * (float)ch1) ) / cpl;
lux2 = ( ( TSL2591_LUX_COEFC * (float)ch0 ) - ( TSL2591_LUX_COEFD * (float)ch1 ) ) / cpl;
// The highest value is the approximate lux equivalent
lux = lux1 > lux2 ? lux1 : lux2;
// Signal I2C had no errors
return (uint32_t)lux;
}
la consulta es:
- lo que es "cpl"
- por qué calcular cpl (aunque, relacionado con lo anterior)
- ¿Qué es "TSL2591_LUX_DF"
- ¿Qué es "lux1", "lux2" (está relacionado con el infrarrojo? y es visible?).
- por qué la comparación entre "lux1", "lux2"
cualquier puntero de algoritmo o la física real detrás del cálculo sería útil (me encantaría leer / conocer la física detrás del sensor).