Простейший люксметр на ESP8266 и датчике освещенности MAX44009

Простейший люксметр на ESP8266 и датчике освещенности MAX44009

Дата Автор 7 комментариев 10 559 просмотров

Недавно я публиковал проект простой метеостанции с OLED-дисплеем на ESP8266 и датчике BME280.

Сегодня хочу опубликовать еще более простой проект: люксметр на ESP8266 и датчике освещенности MAX44009 производства калифорнийской компании Maxim Integrated.

Себестоимость используемых компонентов примерно $6, процесс сборки и запуска устройства займет не более 30 минут.

Что нам понадобится

Для реализации описываемого в статье проекта понадобится:

Датчик поставляется в комплекте с нераспаянными ножками. После покупки их потребуется подпаять самостоятельно.

Про люксы и уровень освещенности

Люкс (Лк) — единица измерения освещенности.

Освещенность — соотношение светового потока к площади поверхности, на которую падает свет.

Для того чтобы соотнести уровень освещенности в люксах с субъективным восприятием освещенности (тем, что мы привыкли видеть своими глазами) можно взглянуть на следующую таблицу:

Простейший люксметр на ESP8266 и датчике освещенности MAX44009

А вот требования к освещенности жилых и рабочих помещений согласно СНиПам:

Простейший люксметр на ESP8266 и датчике освещенности MAX44009

Недостаточное количество света плохо влияет на самочувствие человека. Быстрее устают глаза, снижается производительность труда, ухудшается настроение. Даже такое расстройство как «сезонная депрессия» непосредственно связано с недостаточным воздействием света на человеческий организм в северных широтах осенью и зимой.

Сборка схемы

Простейший люксметр на ESP8266 и датчике освещенности MAX44009

Конструкция предельно простая. Используется ESP8266, датчик освещенности MAX44009, 4 провода.. и все.

Обратите внимание, что всего мест под ножки на модуле датчика 6, а подписано только 4. Если очень интересно, то предназначение неподписанных ножек можно посмотреть в даташите на MAX44009, но подпаивать их не нужно. Для использования датчика они не нужны.

Подключение MAX44009 к ESP8266:
3V — VIN
GND — GND
D1 — SCL
D2 — SDA

Простейший люксметр на ESP8266 и датчике освещенности MAX44009

Примерно так схема будет смотреться вживую.

Скетч для MAX44009

Для работы с датчиком освещенности используется стандартная библиотека Wire.h и не требуется установки дополнительных библиотек.

Достаточно просто загрузить следующий скетч в ESP8266 через Arduino IDE:

#include<Wire.h>
 
#define Addr 0x4A
 
void setup()
{
 
Wire.begin();
// Initialise serial communication
Serial.begin(9600);
 
Wire.beginTransmission(Addr);
Wire.write(0x02);
Wire.write(0x40);
Wire.endTransmission();
delay(300);
}
 
void loop()
{
unsigned int data[2];
Wire.beginTransmission(Addr);
Wire.write(0x03);
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.045;
 
Serial.print("Ambient Light luminance :");
Serial.print(luminance);
Serial.println(" lux");
delay(500);
}

И можно проверить работоспособность устройства.

Данный скетч не предполагает вывод данных на дисплей или через веб-сервер, так что воспользуемся встроенным в Arduino IDE монитором порта («Инструменты» -> «Монитор порта», или сочетание клавиш Ctrl+Shift+M).

Вот такие результаты получились у меня:

Простейший люксметр на ESP8266 и датчике освещенности MAX44009

Уровень освещенности на подоконнике в пасмурный день.

Простейший люксметр на ESP8266 и датчике освещенности MAX44009

Люксметр лежит на столе под включенной на полную яркость Xiaomi Smart LED Desk Lamp.

Простейший люксметр на ESP8266 и датчике освещенности MAX44009

Пасмурный день, послеобеденное время, включено верхнее освещение.

Простейший люксметр на ESP8266 и датчике освещенности MAX44009

Пасмурный день, послеобеденное время, шторы открыты, верхнее освещение выключено.

Простейший люксметр на ESP8266 и датчике освещенности MAX44009

Пасмурный день, послеобеденное время, шторы закрыты, верхнее освещение выключено.

P.S.: если вместо адекватного текста отображаются кракозябры, то в правом нижнем углу монитора порта нужно сменить скорость на 9600 бод.

Заключение

Вот так на основе ESP8266 и одного недорогого датчика можно собрать люксметр.

Я хочу превратить его в датчик уровня освещенности для «умного дома», поэтому не вижу смысла (для себя) настраивать вывод получаемых значений на дисплей или веб-страницу. Данные с датчиков планирую отправлять на сервер по MQTT, о чем со временем напишу отдельную статью.

Но если есть потребность, то можно подключить дисплей, взять кусок скетча от метеостанции и переделать его на вывод информации с MAX44009.

Автор статьи:
Дмитрий
Руководитель отдела в IT-компании. Веду этот блог с 2013 года, пишу о гаджетах и домашней автоматизации, обозреваю одноплатные компьютеры, неспешно собираю «умный дом».

7 комментария на «Простейший люксметр на ESP8266 и датчике освещенности MAX44009»

  1. А как можно подключить 2 датчика освещенности GY-49 max44009 ? А0 я подключил к Vcc. Нужно два разных адреса указывать? 1001 010х и 1001 011 ? Как отразить эти адреса в скетче. И нужно ли корректировать библиотеку?

    • Затрудняюсь что-то ответить, и поэкспериментировать не могу, т.к. в наличии только один датчик сейчас.

  2. Здравствуйте.
    В этом модуле есть возможность настраивать частоту измерений. Для этого нужно на модуль подавать код, что бы он переключился в ручной режим. Как это можно настроить в вашем скетче?

    Из даташита
    BIT 7 = 0 — Default mode. The IC measures lux intensity only once every 800ms regardless of integration time.
    BIT 7 = 1 — Continuous mode. The IC continuously measures lux intensity. That is, as soon as one reading is finished, a new one begins. If integration time is 6.25ms, readings are taken every 6.25ms.
    Manual Configuration Mode
    In automatic mode (MANUAL = 0), reading the contents of TIM[2:0] and CDR bits reflects the automatically generated values from an internal timing register and are read-only. In manual mode (MANUAL = 1), the contents of TIM[2:0] and CDR bits can be modified by the users through the I2C bus.
    TIM[2:0] — это биты 2, 1, 0. Код 000 по дефолту время 800мс, код 001-400мс, код 010-200мс и т.д.

  3. Здравствуйте.
    А почему максимум 2913 lux ?
    В упор под фонари/лампы ставил, везде один максимум.

  4. Добрый день!
    Не подскажете, что изменить в программе, чтобы SDA подключить к D1, а SCL — к D2?
    Спасибо.

  5. Спасибо, Дмитрий. Подключил gy-49 к arduino mini, залил Ваш скетч, все сразу заработало. Модуль gy-49 запитал от 5-ти вольт, в модуле для этого все есть.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

[Хамство, оскорбления и попытки крауд-маркетинга будут удалены]