Измерение освещенности  является важным параметром при создании приложений домашней автоматики и Интернета вещей. Освещенность измеряют в люксах (lx). Люкс равен освещённости поверхности площадью 1 м2 при световом потоке падающего на неё излучения, равном 1 лм. Самым распространенным датчиком измерения освещенности у любителей Arduino является фоторезистор аналоговый датчик, меняющий свое сопротивление в зависимости от интенсивности света, однако точность его невысока и значение от выдает не в люксах. В отличие от него, модуль GY302 на базе чипа BH1750, представляет собой высокоточный цифровой датчик интенсивности света, выдающий значение как раз в люксах.

Модуль GY-302 на базе чипа BH1750

 Модуль GY-302 на базе чипа BH1750

Технические характеристики GY-302 (BH1750)

  • Напряжение питания - 5 В
  • Интерфейс: I2C
  • Чип: BH1750FVI
  • АЦП: 16 бит
  • Точность: 1 люкс
  • Чувствительность: 65536 градаций
  • Калибровка: не требуется
  • Размеры: 19 х 13 х 2 мм
  • Вес: 5 г

Подключение к Arduino

Модуль имеет 5 выводов:

  • VCC — питание 5 В
  • GND — земля
  • SDA — данные I2C
  • SCL—  синхронизация I2C
  • ADDR — выбор адреса для протокола I2C

Выводы модуля GY-302

Выводы модуля GY-302

Разберемся с возможными адресами датчика BH1750. Есть два варианта подключения датчика BH1750 к шине I2C.
 

Подключение датчика BH1750 к Arduino

Подключение датчика BH1750 к Arduino


Для получения адресов загрузим на Arduino скетч из листинга 1 (сканирование устройств, которые подключены к плате Arduino по шине I2C).

#include "Wire.h"
void setup() {
Wire.begin();
Serial.begin(9600);  // запуск последовательного порта
}
void loop() {
int devices;
byte err, add;
Serial.println("Start scan I2C bus...");
devices = 0;
Serial.print("  00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F");
for(add = 0; addr<= 127; addr++ ) {
if((addr% 0x10) == 0) {
Serial.println();
if(addr< 16)
Serial.print('0');
Serial.print(addr, 16);
Serial.print(" ");
}
Wire.beginTransmission(addr);err = Wire.endTransmission();
if (err == 0) {
if (addr<16)
Serial.print("0");
Serial.print(addr, HEX);
devices++;
}
else {
Serial.print("--");
}
Serial.print(" ");
delay(1); 
}
Serial.println();
if (nDevices == 0)
Serial.println("No I2C devices found\n");
delay(2500);
}

Скетч сканирует шину I2C и выводит в последовательный порт Arduino таблицу с адресами подключенных устройств.
 

Сканер I2C устройств

Сканер I2C устройств

Как видим, модуль BH1750 может иметь, в зависимости от уровня сигнала на входе ADDR два адреса (0x23 и 0x5C). Это значит, что к одной плате Arduino можно подсоединить одновременно два датчика BH1750.

Пример использования

Рассмотрим пример подключения датчика BH1750 к плате Arduino и вывода показаний на экран дисплея Nokia 5110. Нам понадобятся следующие детали:

  • плата Arduino Uno
  • датчик BH1750
  • дисплей Nokia 5110
  • макетная плата
  • провода

Соберем схему соединений согласно рисунку.
 

Схема подсоединения к Arduino датчика BH1750 и дисплея Nokia 5110

Схема подсоединения к Arduino датчика BH1750 и дисплея Nokia 5110

Для работы с Arduino написано несколько  библиотек. Будем использовать одну из них – BH1750FVI (https://github.com/enjoyneering/BH1750FVI). Данная библиотека поддерживает все режимы датчика BH1750, позволяет производить измерения освещенности с несколькими параметрами чувствительности (0.45 – 3.68) и разрешающей способности (0.5 – 4 lx), а также в режиме энергосбережения. К библиотеке прилагается пример (BH1750FVI_Demo) вывода в последовательный порт Arduino данных с датчика BH1750 при различных режимах измерения.
 

Пример вывода данных с датчика BH1750 в последовательный порт Arduino при различных режимах измерения

Пример вывода данных с датчика BH1750 в последовательный порт Arduino при различных режимах измерения

Текущие значения освещенности будем выводить на дисплей Nokia 5110. Нам понадобятся Arduino библиотеки Adafruit_GFX и Adafruit_PCD8544. Данные с датчика BH1750 будем получать со следующими настройками:

  • чувствительность
  • точность 0.5 lx

Периодичность измерения 5 секунд. Создадим в Arduino IDE новый скетч, занесем в него код из листинга и загрузим скетч на на плату Arduino.

// подключение библиотек для nokia 5110
#include <Adafruit_GFX.h>
#include <Adafruit_PCD8544.h>
// подключение библиотеки Wire (для I2C)
#include <Wire.h>
// подключение библиотеки для bh1750
#include <BH1750FVI.h>
// Nokia 5110
// pin 13 - SCLK
// pin 12 - DIN
// pin 11 - D/C
// pin 10 - CS
// pin 8 - RST
Adafruit_PCD8544 Nokia5110 = Adafruit_PCD8544(13, 12, 11, 10, 8);
// bh1750
BH1750FVI myBH1750;
// для периода опроса датчика
unsigned long millis1=0;
void setup()
{
// запуск последовательного порта
Serial.begin(9600);
// инициализация дисплея
Nokia5110.begin();
// установить контраст фона экрана
Nokia5110.setContrast(60);
Nokia5110.clearDisplay();
Nokia5110.setTextSize(1);
Nokia5110.setTextColor(BLACK);
// начальный экран
Nokia5110.setCursor(10,5);
Nokia5110.print("3d-diy.ru");
Nokia5110.setCursor(30,15);
Nokia5110.print("BH1750");
Nokia5110.display();
// запуск bh1750
myBH1750.begin();
// пауза для заставки
delay(2000);
}
void loop() {
// раз в 5 секунд
if(millis()-millis1>=5000) {
Serial.println(F("Sensitivity - 1.0, Continuous Mode (default settings)"));
myBH1750.setSensitivity(1);
Serial.print(F("Light level: "));
Serial.print(myBH1750.readLightLevel());
Serial.println(F(" +-0.5 lx"));
Serial.println(F(""));
// вывод на дисплей
Nokia5110.clearDisplay();
Nokia5110.setCursor(10,5);
Nokia5110.print("3d-diy.ru");
Nokia5110.setCursor(15,15);
Nokia5110.print("Light level: ");
Nokia5110.setCursor(35,25);
Nokia5110.print(myBH1750.readLightLevel());
Nokia5110.setCursor(20,35);
Nokia5110.print(" +-0.5 lx");
Nokia5110.display();
millis1=millis();
}
}

Вывод данных в монитор последовательного порта Arduino.
 

Вывод данных с датчика BH1750 в монитор последовательного порта

Вывод данных с датчика BH1750 в монитор последовательного порта


Что делать если

Сканер I2C устройств не находит датчика BH1750 или нет данных с датчика

Проверьте правильность подключения датчика BH1750 к плате Arduino.

Данные не выводятся на экран дисплея Nokia 5110

Проверьте правильность подключения дисплея Nokia 5110 к плате Arduino.


 

Рекомендуемые товары

Комментарии 0