/******************************************************************************* Projeto 103 - Medir luminosidade em lux sem biblioteca - BH1750 Autor: Angelo Luis Ferreira Data: 28/06/2022 http://squids.com.br/arduino *******************************************************************************/ #include // biblioteca requerida para rodar I2C //Endereço do sensor BH1750 byte BH1750addr = 0x23; //Pino ADDR em nível lógico 0 //byte BH1750addr = 0x5c; //Pino ADDR em nível lógico 1 // Instruções de modo de leitura do sensor (medição contínua) byte mode_LowResolution = 0x13; //Modo de baixa precisão com 4 lux de resolução byte mode_HighResolution_1 = 0x10; //Modo de alta precisão com 1 lux de resolução byte mode_HighResolution_2 = 0x11; //Modo de alta precisão com 0.5 lux de resolução // Variáveis globais iniciais uint16_t result = 0; // variável que carrega os valores lidos void setup() { Serial.begin(9600); // inicializa comunicação serial Wire.begin(); // inicializa a biblioteca Wire.h (a biblioteca BH1750 não faz isso automaticamente) Serial.println(F("LUMINOSIDADE COM SENSOR BH1750")); } void loop() { read_sensor(); // chama a função read_sensor (lê sensor) delay(2000); // espera de 2000ms (2seg) } void read_sensor() { //Inicia a comunicação I2C no endereço selecionado Wire.beginTransmission(BH1750addr); //Configura o sensor para o modo de operação Wire.write(mode_HighResolution_1); // altere para o modo de leitura desejado //Finaliza a comunicação Wire.endTransmission(); //Faz a requisição de leitura do sensor, esperando 2 bytes de resposta Wire.requestFrom(BH1750addr, 2); // //Espera a chegada dos 2 bytes (reslução de 16bits) if (2 <= Wire.available()) { result = Wire.read(); result = result << 8; result = result | Wire.read(); } // Exibe resultado no Monitor Serial Serial.print(result); Serial.println(" lx"); }