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

 

Измеритель освещенности на 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, датчик освещенности



   Благодарим Вас за интерес к информационному проекту digitrode.ru.
   Если Вы хотите, чтобы интересные и полезные материалы выходили чаще, и было меньше рекламы,
   Вы можее поддержать наш проект, пожертвовав любую сумму на его развитие.


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

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

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