Manual

do

Maker

.

com

Sensor de luminosidade TSL2561

Sensor de luminosidade TSL2561

O sensor de luminosidade TSL2561 é uma excelente opção para quem deseja acurácia na aferição de uma medida de luz. É um sensor digital que se comunica pelo barramento I2C, o que facilita, simplifica e com certeza dá muito mais confiança do que um LDR.

Assim como os diversos outros sensores que tenho escrito ultimamente, esse sensor é vendido pelo nosso parceiro CurtoCircuito, eis o link direto para o menu de sensores.

Sensor de Luminosidade TSL2561

Sua faixa de medição vai de 0.1 à 40.000 lux. Se não conhece a medida, escrevi há algum tempo um artigo sobre candela, lumen e lux. É uma boa leitura.

Uma boa razão para adquirir esses sensores é principalmente em empresas, onde  fiscalização é (desnecessariamente) pesada. Existem algumas convenções sobre a quantidade de iluminação ideal em cada ambiente. Em escritórios por exemplo, 300 lux. Esses padrões você encontra em uma breve pesquisa no Google, não vou descrever todos eles, mas se pretende implantar alarmes ou fazer um dispositivo para aferição, é bom ter esses parâmetros e exibí-los em um display para dar um charme. Inclusive você pode gerar gráfico, seguindo esse outro artigo.

Conectar o sensor de luminosidade TSL2561 ao ESP32

Qualquer sensor pode ser montado a um circuito que lhe possibilite trabalhar em diferentes níveis lógicos. Algumas placas tem regulador de tensão, em alguns casos a placa trabalha em ambos, 3v3 ou 5v, mas aqui estou o conectando ao 3v3 por duas razões; não vi nada que evidencie um LLC e também o ESP32 tem o nível lógico de 3v3.

 

Wiring do sensor

Segue o padrão; GPIO21 para SDA e GPIO22 para SCL. No Arduino é A2 e A3. Como citando anteriormente, VCC vai a 3V3 e GND ao GND.

Código para o sensor de luminosidade TSL2561

Esse código roda tanto no ESP32 quanto no Arduino ou ESP8266 e está disponível nos exemplos da biblioteca, apenas adicionei informações relacionadas ao wiring e endereço:

#include <Arduino.h>

#include <Wire.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_TSL2561_U.h>

/* 
SDA -21
SCL - 22
VCC - 3.3V
GND

ADDR: 0x39 ou 0x49, depende se está flutuando ou ao GND.
*/
   //aqui pode ser FLOAT, HIGH ou LOW para ajustar os endereços
Adafruit_TSL2561_Unified tsl = Adafruit_TSL2561_Unified(TSL2561_ADDR_FLOAT, 12345);


void displaySensorDetails(void)
{
  sensor_t sensor;
  tsl.getSensor(&sensor);
  Serial.println("------------------------------------");
  Serial.print  ("Sensor:       "); Serial.println(sensor.name);
  Serial.print  ("Driver Ver:   "); Serial.println(sensor.version);
  Serial.print  ("Unique ID:    "); Serial.println(sensor.sensor_id);
  Serial.print  ("Max Value:    "); Serial.print(sensor.max_value); Serial.println(" lux");
  Serial.print  ("Min Value:    "); Serial.print(sensor.min_value); Serial.println(" lux");
  Serial.print  ("Resolution:   "); Serial.print(sensor.resolution); Serial.println(" lux");  
  Serial.println("------------------------------------");
  Serial.println("");
  delay(500);
}

/**************************************************************************/
/*
    Configures the gain and integration time for the TSL2561
*/
/**************************************************************************/
void configureSensor(void)
{
  /* You can also manually set the gain or enable auto-gain support */
  // tsl.setGain(TSL2561_GAIN_1X);      /* No gain ... use in bright light to avoid sensor saturation */
  // tsl.setGain(TSL2561_GAIN_16X);     /* 16x gain ... use in low light to boost sensitivity */
  tsl.enableAutoRange(true);            /* Auto-gain ... switches automatically between 1x and 16x */
  
  /* Changing the integration time gives you better sensor resolution (402ms = 16-bit data) */
  tsl.setIntegrationTime(TSL2561_INTEGRATIONTIME_13MS);      /* fast but low resolution */
  // tsl.setIntegrationTime(TSL2561_INTEGRATIONTIME_101MS);  /* medium resolution and speed   */
  // tsl.setIntegrationTime(TSL2561_INTEGRATIONTIME_402MS);  /* 16-bit data but slowest conversions */

  /* Update these values depending on what you've set above! */  
  Serial.println("------------------------------------");
  Serial.print  ("Gain:         "); Serial.println("Auto");
  Serial.print  ("Timing:       "); Serial.println("13 ms");
  Serial.println("------------------------------------");
}

/**************************************************************************/
/*
    Arduino setup function (automatically called at startup)
*/
/**************************************************************************/
void setup(void) 
{
  Serial.begin(9600);
  Serial.println("Light Sensor Test"); Serial.println("");
  
  /* Initialise the sensor */
  //use tsl.begin() to default to Wire, 
  //tsl.begin(&Wire2) directs api to use Wire2, etc.
  if(!tsl.begin())
  {
    /* There was a problem detecting the TSL2561 ... check your connections */
    Serial.print("Ooops, no TSL2561 detected ... Check your wiring or I2C ADDR!");
    while(1);
  }
  
  /* Display some basic information on this sensor */
  displaySensorDetails();
  
  /* Setup the sensor gain and integration time */
  configureSensor();
  
  /* We're ready to go! */
  Serial.println("");
}

/**************************************************************************/
/*
    Arduino loop function, called once 'setup' is complete (your own code
    should go here)
*/
/**************************************************************************/
void loop(void) 
{  
  /* Get a new sensor event */ 
  sensors_event_t event;
  tsl.getEvent(&event);
 
  /* Display the results (light is measured in lux) */
  if (event.light)
  {
    Serial.print(event.light); Serial.println(" lux");
  }
  else
  {
    /* If event.light = 0 lux the sensor is probably saturated
       and no reliable data could be generated! */
    Serial.println("Sensor overload");
  }
  delay(250);
}

O resultado será mostrado no terminal:

tsl2561.webp

Ela é bastante estável, aqui eu tirei um shot enquanto movia o sensor em direção à luz. Mais fácil que isso? Não tem!

Nome do Autor

Djames Suhanko

Autor do blog "Do bit Ao Byte / Manual do Maker".

Viciado em embarcados desde 2006.
LinuxUser 158.760, desde 1997.