Как подключить датчик освещённости BH1750 к Arduino
Подключим цифровой 16-битный датчик освещённости BH1750 (люксометр), реализованный на модуле GY-302 или аналогичном, к Arduino.
Нам понадобится:
- Arduino UNO или иная совместимая плата;
- модуль GY-302 с цифровым датчиком освещённости BH1750;
- соединительные провода (вот хороший набор);
- персональный компьютер со средой разработки Arduino IDE.
1Схема подключения датчика BH1750 к Arduino
Рассмотрим модуль GY-302 с сенсором BH1750. Сенсор BH1750 представляет собой цифровой 16-битный цифровой датчик освещённости, что задаёт диапазон его измерений: от 1 до 65535 люкс. Согласно техническому описанию, датчик BH1750 чувствителен к видимому свету и практически не подвержен влиянию инфракрасного излучения, т.е. реагирует примерно на тот же спектральный диапазон, что и человеческий глаз. Вследствие этого такие сенсоры получили широкое распространение в современной электронной аппаратуре – мобильных устройствах, фото- и видеокамерах, в системах «умный дом» и многих других.
Подключение модуля производится по двухпроводному интерфейсу I2C, а питание осуществляется от +5 В. Интерфейс I2C в платах Arduino реализован на аналоговых пинах A4 и A5, которые отвечают за SDA (шина данных) и SCL (шина тактирования), соответственно. Вывод ADDR модуля GY-302 можно оставить не подключённым или соединить с землёй.
2 Библиотека и скетчдля датчика BH1750
Для начала не будем углубляться в тонкости реализации интерфейса взаимодействия датчика BH1750 с Arduino, а воспользуемся готовой библиотекой для BH1750. Скачанный архив распакуем в директорию со средой разработки Arduino IDE/libraries/.
Напишем вот такой скетч и загрузим его в Arduino.
// подключаем библиотеку I2C: #include <Wire.h> // подключаем библиотеку датчика BH1750: #include <BH1750.h> // объявляем объект lightMeter: BH1750 lightMeter; void setup() { Serial.begin(9600); //инициализация послед. порта lightMeter.begin(); //инициализация датчика BH1750 } void loop() { //считываем показания с BH1750: uint16_t lux = lightMeter.readLightLevel(); //выводим показания в послед. порт: Serial.println(String(lux) + " lx"); delay(100); //задержка 100 мсек }
В скетче мы каждые 100 мсек считываем с датчика BH1750 показания освещённости в люксах и выводим эти данные в последовательный порт.
3Сенсор BH1750 и Arduino в работе
Подключим датчик освещённости BH1750 к Arduino по приведённой выше схеме. Подключим Ардуино к компьютеру. Запустим среду разработки Arduino IDE и откроем монитор последовательного порта сочетанием клавиш Ctrl+Shift+M или через меню Инструменты. В мониторе последовательного порта побегут значения освещённости с нашего датчика BH1750.
Направьте датчик на источник света, потом закройте его от света, и вы увидите, как меняются показания.
4Взаимодействие с сенсором BH1750 в деталях
Давайте попробуем взаимодействовать с датчиком BH1750 без использования специальных библиотек. Для этого нам понадобится техническое описание на него, которое можно скачать по ссылке под статьёй.
Для управления датчиком мы должны по его I2C адресу записать код команды. Под управлением понимается изменение режима работы, изменение чувствительности, сброс и т.д. Команды можно передавать только по одной. Для чтения мы должны запросить из датчика 2 байта. Датчик хранит всегда значение в виде 16-битного числа, но его интерпретация зависит от текущей чувствительности.
На следующем рисунке представлен список команд, необходимых для работы с датчиком BH1750:
Как мы знаем, управление и обмен данными с датчиком BH1750 происходит по протоколу I2C. Мне нравится использовать для быстрых тестов общения с устройствами I2C и SPI отладочную плату с микросхемой FT2232H. Подключим SCL датчика к SCL микросхемы FT2232H, SDA датчика – к SDA и SDO микросхемы. Питание 5В возьмём с Arduino Nano, а все земли объединим.
Теперь запустим программу SPI via FTDI и попробуем прочитать значения, хранящиеся в регистрах сенсора.
Download attachments:
- Скачать datasheet на BH1750 (888 Downloads)