цифровая электроника
вычислительная техника
встраиваемые системы

 

Измеритель освещенности на Arduino своими руками

Автор: Mike(admin) от 10-10-2017, 20:35

Измеритель освещенности (люксметр, экспонометр, фотометр) представляет собой устройство для определения уровня и распределения освещённости, иными словам для измерения интенсивности света. В наши дни такие приборы уже не являются редкостью, и их можно приобрести в специализированных магазинах электроники.


Но такие устройства стоят не так дешево, чтобы их мог купить каждый. Впрочем, всегда можно сделать измеритель освещенности своими руками на основе популярной платы Arduino и цифрового датчика окружающего света BH1750FVI компании ROHM.


В Интернете можно найти несколько различных модулей с датчиком BH1750, и хорошим моментом является то, что все они почти одинаковы. Для этого проекта был использован модуль регистрации интенсивности света GY-30. Модуль, по сути, является компактной платой с BH1750FVI и со встроенным 16-разрядным АЦП, который может напрямую выводить цифровой сигнал, поэтому в данном случае нет необходимости в применении сложной математики. Этот модуль с интерфейсом I2C выводит данные непосредственно в люксах (lx). В дополнение к хорошо откалиброванному датчику освещенности на плате можно найти низковольтный регулятор и преобразователь логических уровней. Модуль может питаться от источника с напряжением от 3.3 до 5.0 В. GY-30 имеет пять контактов, в то время как нам нужны два для источника питания (VCC и GND) и два для интерфейса I2C (SCL и SDA). Дополнительный контакт (ADD) может использоваться для установки адреса I2C датчика. Болтающийся в воздухе или подключенный к GND, этот контакт установит адрес I2C в 0x23 (по умолчанию), а если он будет подключен к VCC, адрес станет 0x5C.


GY-30 с датчиком BH1750

Для вывода данных подсоединим к Arduino (в данном случае Arduino Nano) небольшой OLED-дисплей с разрешением 128 x 64 (0.96 дюйма). Благодаря малым размерам платы Arduino Nano, дисплея и модуля GY-30 конечное устройство получается очень компактным и легким. В качестве источника питания можно использовать какой-нибудь небольшой аккумулятор (Li-ion или LiPo) с выходным напряжением 7.4 В. Схема подключения Arduino, модуля GY-30 и дисплея представлена ниже.


Измеритель освещенности на Arduino своими руками. Схема подключения

Далее приведен код (скетч) для Arduino, который позволяет реализовать измеритель интенсивности света. Эта программа довольно проста в понимании. Следует заметить, что для работы с OLED-дисплеем в данном случае используется библиотека «u8glib library». Адрес датчика BH1750 установлен в 0x23.



#include "U8glib.h"
 
U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_NONE | U8G_I2C_OPT_DEV_0);
 
int BH17_add = 0x23; // I2C адрес датчика BH1750
 
byte buff[2];
 
void setup() {
 
Wire.begin();
 
BH750_Init(BH17_add);
 
delay(200);
 
}
 
 
 
 
void light() {
 
float valf = 0;
 
u8g.setFont(u8g_font_unifont);
 
u8g.setPrintPos(0, 50);
 
if (BH1750_Read(BH17_add) == 2) {
 
valf = ((buff[0] << 8) | buff[1]) / 1.2;
 
if (valf < 0)u8g.print("> 65535");
 
else
 
u8g.setPrintPos(0, 30);
 
u8g.print("--------------");
 
u8g.setPrintPos(0, 40);
 
u8g.print("Light Meter");
 
u8g.setPrintPos(0, 60);
 
u8g.print((int)valf, DEC);
 
u8g.print(" LX/SI"); //
 
}
 
delay(100);
 
}
 
 
 
 
void loop() {
 
u8g.firstPage();
 
do {
 
light();
 
} while (u8g.nextPage());
 
 
 
 
}
 
 
 
 
void BH750_Init(int address) {
 
Wire.beginTransmission(address);
 
Wire.write(0x10);
 
Wire.endTransmission();
 
}
 
 
 
 
byte BH1750_Read(int address) {
 
byte i = 0;
 
Wire.beginTransmission(address);
 
Wire.requestFrom(address, 2);
 
while (Wire.available()) {
 
buff[i] = Wire.read();
 
i++;
 
}
 
Wire.endTransmission();
 
return i;
 
}



© digitrode.ru


Теги: Arduino, датчик освещенности




Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь.
Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.

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

Оставить комментарий