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=2exponentmantissa0.72 

  • Exponent=8E3+4E2+2E1+E0 
  • Mantissa=8M7+4M6+2M5+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).

Pe lângă citirea senzorului de luminozitate cu ESP32 am mai implementat și o conexiune simplă pe bluetooth. Practic după realizarea conexiunii datele senzorului de luminozitate se trimit periodic către un telefon mobil și sunt afișate folosind aplicația Serial Bluetooth terminal.   

Componentele proiectului


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

 Conectarea plăcuței GY49/MAX44009 este destul de simplă după cum se observă în imaginea de mai jos.
  • VIN -> 5 V ESP32
  • GND -> GND ESP32
  • SCL -> D22 ESP32
  • SDA -> D21 ESP32
 


Mai jos se pot vedea datele de la senzorul de luminozitate primite prin intermediul bluetooth.

Aplicații GY-49/MAX44009

  • Tablet PCs/Notebook Computers
  • TVs/Projectors/Displays
  • Digital Lighting Management
  • Portable Devices
  • Cellular Phones/Smartphones
  • Security Systems

 Documentatie proiect

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

Mulțumesc pentru atenție!

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 !  

 Back to top of page


Etichete

Afișați mai multe

Arhiva

Afișați mai multe