И снова мы возьмем в руки датчик освещенности BH1750. На этот раз предлагаю не просто снимать данные об уровне освещенности, а ещё и относительно этих данных регулировать яркость какого-либо осветительного прибора. Наподобие регулировки яркости дисплея планшета или смартфона – чем ярче окружающее освещение, тем меньше требуется яркость освещения и наоборот чем темнее, тем ярче будет гореть светодиод, лампочки или что-нибудь еще. Да, это все можно организовать на основе фотодиода, фоторезистора, но такие приборы необходимо настраивать, калибровать и так далее. В случае же с применением цифрового датчика освещенности BH1750 эти действия осуществлять нет необходимости, потому что все уже откалибровано до нас, по шине I2C передаются готовые данные, которые необходимо лишь сопоставить с условием. Простыми словами – включил, и все сразу заработало без лишних телодвижений. Если вам идея интересна, то продолжаем дальше.
Устройство построим по следующей схеме:
Схема получилась как бы зародышем идеи, потому что ее можно и нужно модернизировать под различные случаи использования, но об этом чуть позже.
Здесь уже все привычно для нас. В качестве микроконтроллера используется Atmega8a как наиболее универсальный и популярный микроконтроллер. Использовать микроконтроллер можно в любом корпусе – разницы нет, кроме порядка расположения выводов на корпусах. Индикация осуществляется на ЖК экранчике на базе HD44780. В моем случае используется экран на 4 строки по 20 символов на каждую, однако можно использовать и размер 1602 – информации на экранчик выводится не много, поэтому все помещается. Переменный резистор R2 необходим для регулировки контраста символов на дисплее. Вращением движка этого резистора добиваемся наиболее четких для нас показаний на экране. Подсветка ЖК дисплея организована через вывод «А» и «К» на плате дисплея. Подсветка включается через резистор, ограничивающий ток — R1. Чем больше номинал, тем более тускло будет подсвечиваться дисплей. Но пренебрегать этим резистором не стоит во избежание порчи подсветки. Сам дисплей подключается к микроконтроллеру по 4х битной схеме. Резистор R3 необходим для предотвращения самопроизвольного перезапускания микроконтроллера в случае появления случайных помех на выводе PC6. Резистор R3 подтягивает плюс питания к этому выводу, надежно создавая потенциал на нем. Резистор R4 подтягивает ножку датчика к земле, отвечающую за адрес микросхемы для I2C интерфейса, посмотреть все эти цифры можно в исходном коде, который расположен в конце статьи. Для правильной работы I2C интерфейса необходимы резисторы R7 и R8. С их помощью на линиях образуется логическая единица из-за того, что они подтянуты к плюсу питания. При формировании логического нуля линии прижимаются к земле посредством ведущего или ведомого (микроконтроллера или датчика).
Основное питание схемы составляет 3,3 вольта, что обусловлено электрическими параметрами датчика освещенности BH1750. 5 вольт необходимы лишь для питания дисплея, если применить, например экранчик от nokia 5110, для питания которого необходимо также 3,3 вольта, то можно опустить из схемы стабилизатор напряжения на 5 вольт. Стабилизаторы напряжения на 5 вольт и 3,3 вольта можно применить абсолютно любые на аналогичные напряжения, можно использовать как линейные стабилизаторы, так и импульсные.
Теперь по поводу модернизации схемы. Основой всегда будет сам датчик и микроконтроллер, а также схема питания. ЖК-дисплей, при данном функционале, лишь для отладки необходим по большому счету. Его можно исключить из схемы при автономном использовании. Это первое. Второе это выход схемы, то есть светодиод HL1 – одним светодиодом большое пространство не осветить и нужно использовать что-то более массивное – мощные светодиоды, лампы накаливания или ещё что-нибудь. Так вот подобные осветительные приборы со сравнительно большим потреблением тока, напряжения просто к микроконтроллеру не подсоединить так просто, иначе мы просто сожжем микроконтроллер. Для этого необходимо использовать драйверы или другие схемы. Если лампочки накаливания используют переменное напряжение, нужно использовать оптосимисторную связку и мощный симистор для управления яркостью лампочки (нужно лишь подправить прошивку для управления оптосимистором). Для светодиодных ламп ШИМ можно подавать на затвор полевого транзистора и через него включать светодиоды (не забыв про ограничение или стабилизацию тока), либо использовать управляемые драйверы для них. В общем вариантов очень много – для каждого случая – свой. Представленная схема будет являться исходной с заложенным основным функционалам. Вот такая вот идея.
Собиралась и отлаживалась такая схема на отладочной плате в связке с модулем BH1750:
Логика работы не сложная – считываем значение освещенности из датчика и преобразуем это значение в ШИМ сигнал. Необходимо лишь подобрать соотношение ШИМ сигнала и уровня освещенности.
Для отладки работы использовался карманный фонарик для изменения освещенности.
Также при резком появлении источника света (может быть случайном) светодиод загорался бы резко, что не слишком комфортно, поэтому реализовано плавное регулирование уровня ШИМ. Тое есть, например, было низкое освещение – горел светодиод, случайно на датчик попал короткий импульс света, скажем, от фар автомобиля, светодиод бы резко погас и резко снова загорелся, если бы не плавное регулирование. То есть при резком изменении освещенности ШИМ изменяется не скачкообразно, а стремится достичь рассчитанного значения, увеличиваясь или уменьшаясь всего на одну единичку с небольшой задержкой. И так много кратно идет увеличение или уменьшение, пока не будет достигнуто необходимое значение. Исходник на языке Си можно посмотреть в конце статьи.
Кроме того, для программирования микроконтроллера в данном варианте необходимо знать конфигурацию фьюз битов:
А к статье прилагается прошивка для микроконтроллера по представленной схеме, исходный код в программе AVR Studio и демонстративное видео (плавное изменение яркости светодиода в зависимости от уровня освещенности, который регулируется карманным фонариком).
Список радиоэлементовОбозначение
Тип
Номинал
Количество
ПримечаниеМагазинМой блокнот
IC1
МК AVR 8-битATmega8A1
IC2
Датчик освещенностиBH1750FVI-E1
VR1
Линейный регуляторL7805AB1
VR2
Линейный регуляторAMS1117-3.31
C1, C3, C5, C7
Конденсатор100 нФ4
C2
Электролитический конденсатор470 мкФ1
C4
Электролитический конденсатор220 мкФ1
C6
Электролитический конденсатор10 мкФ1
R1
Резистор22 Ом1
R2
Подстроечный резистор10 кОм1
R3
Резистор10 кОм1
R4, R7, R8
Резистор4.7 кОм3
R5
Резистор390 Ом1
R6
Резистор1 кОм1
HG1
LCD-дисплей2004a1
HD44780HL1
Светодиод1
Или другой осветительный элементS1
Тактовая кнопкаTC-A1091
Добавить все
Скачать список элементов (PDF)
Прикрепленные файлы: