Pentru a detecta nivelul de luminozitate existent intr-un anumit loc putem folosi un modul creat cu ajutorul circuitului integrat BH1750. Acest circuit integrat detecteaza nivelul luminozitatii si returneaza valoare in lux cu ajutorul magistralei I2C.

    Acest modul se poate alimenta cu tensiune cuprinsa intre 3,3V si 5V. Pretul unui astfel de modul este de 18 lei si poate fi achizitionat de aici.

    O imagine cu acest modul se poate vedea mai jos:

    Pentru a putea folosi acest modul vom avea nevoie si de o librarie aditionala. Aceasta librarie se numeste hp_BH1750 si se poate descarca de pe acest site. Dupa descarcarea acestei librarii vom proceda la instalarea ei accesand meniul Schita > Incarcare biblioteca > Adauga biblioteca.zip.

    Pentru o prima testare a modulului vom folosi urmatorul sketch:

#include <Arduino.h>
#include <hp_BH1750.h>  //includem libraria externa
hp_BH1750 BH1750;       //creem metoda de apelare a functiilor din libraria externa 

void setup()
{
  Serial.begin(9600);
  //initializam senzorul cu pinul ADD conectat la GND
  //se va returna false daca senzorul nu este detectat
  bool avail = BH1750.begin(BH1750_TO_GROUND);
  if (!avail) {
    Serial.println("Senzorul BH1750 nu este detectat!");
    while (true) {};                                        
  } else {
    Serial.println("Senzorul BH1750 a fost detectat cu succes!");
  }
}

void loop()
{
  BH1750.start();   //incepem masuratorile
  float lux=BH1750.getLux();  //obtinem numarul de lucsi in virgula mobila
  Serial.print("Valoare detectata: ");
  Serial.print(lux);
  Serial.println(" lux");
  delay(1000);        
}

    La rularea acestui sketch in terminalul serial vom obtine urmatorul rezultat:

    Un sketch cu mai multe functii disponibile este cel de mai jos:

#include <Arduino.h>
#include <hp_BH1750.h>  //includem libraria externa
hp_BH1750 BH1750;       //creem metoda de apelare a functiilor din libraria externa 

void setup()
{
  Serial.begin(9600);
  //initializam senzorul cu pinul ADD conectat la GND
  //se va returna false daca senzorul nu este detectat
  bool avail = BH1750.begin(BH1750_TO_GROUND);
  if (!avail) {
    Serial.println("Senzorul BH1750 nu este detectat!");
    while (true) {};                                        
  } else {
    Serial.println("Senzorul BH1750 a fost detectat cu succes!");
  }
}

void loop()
{
  BH1750.start(BH1750_QUALITY_HIGH, 100);   //incepem masuratorile
  float lux=BH1750.getLux();  //obtinem numarul de lucsi in virgula mobila
  Serial.print("Valoare detectata: ");
  Serial.print(lux);
  Serial.println(" lux");
  delay(1000); 
  BH1750.powerOff(); //oprim functionarea senzorului
  Serial.println("Oprim senzorul pentru 2 secunde");
  delay(2000);
  BH1750.powerOn();  //pornim senzorul
  Serial.println("Pornire senzor...");
  delay(1000);
  lux=BH1750.getLux();
  Serial.print("Valoare detectata: ");
  Serial.print(lux);
  Serial.println(" lux");
  delay(1000); 
  bool valoare = BH1750.hasValue();  //setam variabila valoare ca booleana pentru a detecta daca senzorul returneaza ceva sau nu
  if (!valoare) {
    Serial.println("Senzorul nu returneaza nici o valoare!");
  } else {
    Serial.println("Senzorul returneaza o valoare.");
    //obtinem valoarea bruta
    unsigned int raw = BH1750.getRaw();
    Serial.print("Valoare bruta returnata de catre senzor: ");
    Serial.println(raw);
  }
  delay(2000);
  //setam calitatea detectiei pe HIGH
  BH1750.start(BH1750_QUALITY_HIGH2, 254);
  float valoareHigh = BH1750.getLux();
  Serial.print("Valoare HIGH2 detectata: ");
  Serial.print(valoareHigh);
  Serial.println(" lux");
  delay(2000);
  //setam calitatea detectiei pe LOW
  BH1750.start(BH1750_QUALITY_LOW, 31);
  float valoareLow = BH1750.getLux();
  Serial.print("Valoare LOW detectata: ");
  Serial.print(valoareLow);
  Serial.println(" lux");
  delay(2000);
  Serial.println("------------------------------------------------");
}

    Acest sketch returneaza in terminalul serial urmatorul rezultat:

 

 

Nu sunt comentarii

Acest website foloseste cookie-uri pentru o experienta placuta in timpul navigarii.