Mini proiect (45) - Citirea unui senzor de luminozitate GY-49/MAX44009 folosind ESP32 și afișarea datelor pe bluetooth
Citirea unui senzor de luminozitate GY-49/MAX44009 folosind ESP32 și afișarea datelor pe bluetooth
GY-49/MAX44009 este un senzor de lumină ambientală ce folosește fotodiodă integrată și ADC cu o interfață digitală I2C. Pentru măsurarea cât mai exactă a luminii ambientale, chipul GY-49/MAX44009 este plasat în interiorul unui pachet transparent.
O fotodiodă din interiorul chipului convertește lumina într-un curent care este apoi procesat de circuite de putere redusă într-un curent digital , și care mai departe setează valorile unui registru digital. Acest registru se poate citi de o interfață I2C de către ESP32.
Funcția de întrerupere programabilă elimină necesitatea interogării continue a dispozitivului pentru date și are ca rezultat reducerea semnificativă a consumului de energie.
Formula de calcul specificată în datasheet este detaliată mai jos și se calculează din datele registrului Lux.Lux=2exponent∗mantissa∗0.72
- Exponent=8∗E3+4∗E2+2∗E1+E0
- Mantissa=8∗M7+4∗M6+2∗M5+M4
Exponent (E[3:0]): biții exponent ai citirii lux (de la 0000 la 1110). Notă: O citire de 1111 reprezintă o depășire și practic o eroare de citire.
Mantissa (M[7:4]): Patru biți cei mai semnificativi de octet reprezintă mantisa citirii lux (de la 0000 la 1111).
Componentele proiectului
- Placa dezvoltare ESP-WROOM-32 ESP-32S
- https://ardushop.ro/ro/home/1308-modul-lumina-ambientala-gy-49-max44009-4-pini.html?gclid=Cj0KCQiA4aacBhCUARIsAI55maEihg_B6Aj_0sHLloPin9V0G8V7A1PyEH8mFtKhhEUfLFPF1Pho2SwaAsYKEALw_wcB
- 10 x Fire Dupont mama-mama 10cm
- Telefon mobil Motorola Moto g32, Dual SIM, 128GB, 6GB RAM, 4G, Satin Maroon
Schema electronica/sistem

Cod de test
/* | |
Florin Simedru | |
Complete project details at https://automatic-house.blogspot.com | |
Permission is hereby granted, free of charge, to any person obtaining a copy | |
of this software and associated documentation files. | |
The above copyright notice and this permission notice shall be included in all | |
copies or substantial portions of the Software. | |
*/ | |
/* | |
; PlatformIO Project Configuration File | |
; | |
; Build options: build flags, source filter | |
; Upload options: custom upload port, speed and extra flags | |
; Library options: dependencies, extra library storages | |
; Advanced options: extra scripting | |
; | |
; Please visit documentation for the other options and examples | |
; https://docs.platformio.org/page/projectconf.html | |
[platformio] | |
default_envs = esp32doit-devkit-v1 | |
[env] | |
monitor_port = COM7 | |
[env:esp32doit-devkit-v1] | |
platform = espressif32 | |
board = esp32doit-devkit-v1 | |
framework = arduino | |
monitor_speed = 115200 | |
upload_port = COM7 | |
lib_deps = mbed-components/BluetoothSerial@0.0.0+sha.cf4d7779d9d6 | |
*/ | |
#include <Arduino.h> | |
#include "BluetoothSerial.h" | |
#include<Wire.h> | |
// Check if Bluetooth configs are enabled | |
#if !defined(CONFIG_BT_ENABLED) || !defined(CONFIG_BLUEDROID_ENABLED) | |
#error Bluetooth is not enabled! Please run `make menuconfig` to and enable it | |
#endif | |
// MAX44009 I2C address is 0x4A(74) | |
#define Addr 0x4A | |
#define LED_PIN LED_BUILTIN | |
// Bluetooth Serial object | |
BluetoothSerial SerialBT; | |
// Handle received and sent messages | |
String message = ""; | |
char incomingChar; | |
String lightString; | |
// Timer: auxiliar variables | |
unsigned long previousMillis = 0; // Stores last time temperature was published | |
const long interval = 10000; // interval at which to publish sensor readings | |
void setup() | |
{ | |
// Initialise I2C communication as MASTER | |
Wire.begin(); | |
// Initialise serial communication, set baud rate = 9600 | |
Serial.begin(115200); | |
// Bluetooth device name | |
SerialBT.begin("ESP32_LIGH_SENZOR"); | |
// Start I2C Transmission | |
Wire.beginTransmission(Addr); | |
// Select configuration register | |
Wire.write(0x02); | |
// Continuous mode, Integration time = 800 ms | |
Wire.write(0x40); | |
// Stop I2C transmission | |
Wire.endTransmission(); | |
/* Initialize Buildin led pin (D2) for output */ | |
pinMode(LED_PIN,OUTPUT); | |
delay(300); | |
} | |
void loop() | |
{ | |
unsigned int data[2]; | |
unsigned long currentMillis = millis(); | |
// Start I2C Transmission | |
Wire.beginTransmission(Addr); | |
// Select data register | |
Wire.write(0x03); | |
// Stop I2C transmission | |
Wire.endTransmission(); | |
// Request 2 bytes of data | |
Wire.requestFrom(Addr, 2); | |
// Read 2 bytes of data | |
// luminance msb, luminance lsb | |
if (Wire.available() == 2) | |
{ | |
data[0] = Wire.read(); | |
data[1] = Wire.read(); | |
} | |
// Convert the data to lux | |
int exponent = (data[0] & 0xF0) >> 4; | |
int mantissa = ((data[0] & 0x0F) << 4) | (data[1] & 0x0F); | |
float luminance = pow(2, exponent) * mantissa * 0.72; | |
// Output data to serial monitor | |
lightString = "Ambient Light luminance : "+String(luminance)+" lux"; | |
Serial.println(lightString); | |
// Send light luminance readings | |
if (currentMillis - previousMillis >= interval){ | |
previousMillis = currentMillis; | |
SerialBT.println(lightString); | |
} | |
// Read received messages (LED control command) | |
if (SerialBT.available()){ | |
char incomingChar = SerialBT.read(); | |
if (incomingChar != '\n'){ | |
message += String(incomingChar); | |
} | |
else{ | |
message = ""; | |
} | |
} | |
if(message.isEmpty()==false) | |
{ | |
// Check received message and control output accordingly | |
if (message.equals("led_on") && message.endsWith("n")) | |
{ | |
digitalWrite(LED_PIN, HIGH); | |
Serial.println(message); | |
} | |
else if (message.equals("led_off")&& message.endsWith("f")) | |
{ | |
digitalWrite(LED_PIN, LOW); | |
Serial.println(message); | |
} | |
} | |
delay(500); | |
} |
Rezultatul
Aplicații GY-49/MAX44009
- Tablet PCs/Notebook Computers
- TVs/Projectors/Displays
- Digital Lighting Management
- Portable Devices
- Cellular Phones/Smartphones
- Security Systems
Documentatie proiect
- http://wiki.sunfounder.cc/index.php?title=Digital_Light_Intensity_Sensor_Module_%28GY-49%29
- https://kirillyatsenko.medium.com/esp32-i2c-light-senor-gy-49-49fb3fdc0833
- https://datasheets.maximintegrated.com/en/ds/MAX44009.pdf
- https://en.wikipedia.org/wiki/Bluetooth
Afiliere eMag:
Linkurile de la secțiunea "Componente" conțin adresa mea de afiliere la eMag.ro, iar dacă cumperi folosind aceste linkuri vei susține blogul meu. Mulțumesc!eMag Genius:
Hai și tu în Genius! Abonează-te la Genius 12 luni și primești beneficii premium și 20 lei card cadou eMAG. Profită acum! eMag Genius
Pentru întrebari și/sau consultanță tehnică vă stau la dispozitie pe blog mai jos în secțiunea de comentarii sau pe email simedruflorin@automatic-house.ro. O zi și seară plăcută tuturor !