Рейтинг@Mail.ru
Модуль GY-302 c датчиком BH1750
Модуль GY-302 c датчиком BH1750

Как подключить датчик освещённости BH1750 к Arduino

Print Friendly, PDF & Email

Подключим цифровой 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 можно оставить не подключённым или соединить с землёй.

Схема подключения модуля GY-302 с датчиком BH1750 к Arduino
Схема подключения модуля GY-302 с датчиком BH1750 к Arduino

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.

Модуль GY-302 с датчиком BH1750 подключён к Arduino
Модуль GY-302 с датчиком BH1750 подключён к Arduino

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

4Взаимодействие с сенсором BH1750 в деталях

Давайте попробуем взаимодействовать с датчиком BH1750 без использования специальных библиотек. Для этого нам понадобится техническое описание на него, которое можно скачать по ссылке под статьёй.

Для управления датчиком мы должны по его I2C адресу записать код команды. Под управлением понимается изменение режима работы, изменение чувствительности, сброс и т.д. Команды можно передавать только по одной. Для чтения мы должны запросить из датчика 2 байта. Датчик хранит всегда значение в виде 16-битного числа, но его интерпретация зависит от текущей чувствительности.

Последовательность обмена с датчиком BH1750
Последовательность обмена с датчиком BH1750

На следующем рисунке представлен список команд, необходимых для работы с датчиком BH1750:

Команды управления датчиком BH1750
Команды управления датчиком BH1750

Как мы знаем, управление и обмен данными с датчиком BH1750 происходит по протоколу I2C. Мне нравится использовать для быстрых тестов общения с устройствами I2C и SPI отладочную плату с микросхемой FT2232H. Подключим SCL датчика к SCL микросхемы FT2232H, SDA датчика – к SDA и SDO микросхемы. Питание 5В возьмём с Arduino Nano, а все земли объединим.

Модуль с датчиком BH1750 управляется микросхемой FTDI
Модуль с датчиком BH1750 управляется микросхемой FTDI

Теперь запустим программу SPI via FTDI и попробуем прочитать значения, хранящиеся в регистрах сенсора.

Чтение единичного показания датчика BH1750 с помощью FT2232H
Чтение единичного показания датчика BH1750 с помощью FT2232H
Непрерывное считывание показаний датчика BH1750 с помощью FT2232H
Непрерывное считывание показаний датчика BH1750 с помощью FT2232H
Считывание показаний датчика BH1750 с помощью микросхемы FT2232

Скачать вложения:

Последнее изменениеВоскресенье, 11 Февраль 2024 14:23 Прочитано 27170 раз

Поблагодарить автора:

Поделиться

Print Friendly, PDF & Email

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