- Введение в модуль цифрового датчика освещенности BH1750
- Ардуино
- Программирование Arduino для взаимодействия с датчиком освещенности BH1750
Когда вы берете телефон на солнце или при ярком освещении, он автоматически регулирует яркость в соответствии с условиями освещения. Большинство устройств отображения в наши дни, будь то телевизор или мобильный телефон, имеют внутри датчик внешней освещенности для автоматической регулировки яркости. Сегодня в этом уроке мы будем использовать один такой датчик BH1750 Light Sensor Module, соединить его с Arduino и показать значение люкс на ЖК-дисплее 16x2.
Введение в модуль цифрового датчика освещенности BH1750
BH1750 - это цифровой датчик внешней освещенности или датчик интенсивности света, который можно использовать для автоматической регулировки яркости дисплея на мобильных телефонах, ЖК-дисплеях или для включения / выключения фар в автомобилях в зависимости от условий наружного освещения.
Датчик использует протокол последовательной связи I 2 C, что упрощает его использование с микроконтроллерами. Для связи I2C он имеет контакты SDI и SDA. Цоколёвка BH1750 Ambient Light Sensor показана ниже:
Выходной сигнал этого датчика выражен в люксах (лк), поэтому дальнейшие вычисления не требуются. Люкс - это единица измерения силы света. Он измеряет интенсивность в зависимости от количества света, падающего на определенную область. Один люкс равен одному люмену на квадратный метр.
Датчик работает при напряжении от 2,4 В до 3,6 В (обычно 3,0 В) и потребляет ток 0,12 мА. Этот датчик имеет широкий диапазон и высокое разрешение (1-65535 лк), и, кроме того, разброс измерения также невелик (около +/- 20%). Он также может работать независимо без каких-либо внешних компонентов.
Хотя датчик LDR также может использоваться для управления устройствами в зависимости от условий освещения, но это не так точно. Мы использовали датчик LDR для создания многих приложений с контролем света:
- Схема датчика освещенности Arduino с использованием LDR
- Детектор темноты с использованием LDR и таймера 555 IC
- Простая схема LDR для обнаружения света
- Лампа для смешивания цветов Arduino с использованием светодиодов RGB и LDR
Ардуино
Принципиальная схема подключения датчика освещенности BH1750 к Arduino показана ниже.
Контакты I2C SDA и SCL BH1750 подключены к контактам A4 и A5 Arduino соответственно для связи I 2 C. Как мы знаем, рабочее напряжение для датчика составляет 3,3 В, поэтому VCC и GND BH1750 подключены к 3,3 В и GND Arduino. Для ЖК-дисплея контакты данных (D4-D7) подключены к цифровым контактам D2-D5 Arduino, а контакты RS и EN подключены к D6 и D7 Arduino. V0 ЖК-дисплея подключен к потенциометру, а потенциометр 10k используется для управления яркостью ЖК-дисплея.
Программирование Arduino для взаимодействия с датчиком освещенности BH1750
Часть программирования для использования этого датчика LUX с Arduino очень проста. Хотя для этого датчика есть библиотека, но мы можем использовать ее и без нее.
Во-первых, мы включили файлы заголовков для LCD и протокола I 2 C.
#включают
В функции настройки мы инициализировали и ЖК-дисплей, и датчик и распечатали открывающее сообщение на ЖК-дисплее.
пустая настройка () { Wire.begin (); lcd.begin (16,2); lcd.print («BH1750 Light»); lcd.setCursor (0,1); lcd.print («Датчик интенсивности»); задержка (2000); }
Здесь BH1750_Read и BH1750_Init функция используется для чтения и записи значений Lux соответственно. Функция Wire.beginTransmission () используется для начала передачи, а функция Wire.requestFrom (address, 2) используется для чтения регистров, где 2 указывает количество регистров.
Далее Wire.endTransmission () используется для завершения передачи, а функция Wire.write () используется для перехода к желаемому регистру путем ввода в него адреса этого регистра.
int BH1750_Read (int адрес) { int я = 0; Wire.beginTransmission (адрес); Wire.requestFrom (адрес, 2); в то время как (Wire.available ()) { buff = Wire.read (); i ++; } Wire.endTransmission (); вернуть я; } void BH1750_Init (int адрес) { Wire.beginTransmission (адрес); Wire.write (0x10); Wire.endTransmission (); }
В функции цикла мы печатаем значения люкс в реальном времени на ЖК-дисплее. Сначала сравните возвращаемое значение функции BH1750_Read с 2, а затем начните выводить на печать значения Lux, если оно равно 2. Здесь значения сравниваются с 2, потому что функция BH1750_Read возвращает значение счетчика регистров, а мы читаем только 2 регистра. Таким образом, когда оно достигает значения 2, программа начинает распечатывать значения интенсивности света в люксах.
Затем используется формула для получения значений из обоих регистров и деления их на 1,2, что является точностью измерения.
void loop () { int я; uint16_t значение = 0; BH1750_Init (адрес BH1750); задержка (200); если (2 == BH1750_Read (BH1750address)) { значение = ((buff << 8) -buff) /1.2; lcd.clear (); lcd.print («Интенсивность в люксах»); lcd.setCursor (6,1); lcd.print (значение); } задержка (150); }
Наконец, включите Arduino и загрузите программу в Arduino. Как только программа загружена, ЖК-дисплей начинает показывать интенсивность света в люксах. Вы также можете изменить значения, изменив интенсивность света вокруг датчика, как показано на видео ниже.