Определение количества света в окружающем пространстве (освещенности) востребовано во многих областях современной жизни. Эту задачу решают устройства, которые называются датчиками света/освещенности – в самом простейшем случае эту функцию может выполнять фоторезистор. Но современная промышленность выпускает и более продвинутые версии подобных датчиков, которые находят применение в системах автоматической регулировки уровня света, в смартфонах и других "умных" устройствах.
Наиболее известный вам сценарий применения подобных датчиков – это автоматическая регулировка яркости экрана смартфона или ноутбука. Они измеряют количество света в окружающем пространстве и на основе этого настраивается яркость экрана устройства. Помимо очевидных преимуществ данного решения для ваших глаз оно еще продляет и время работы устройства от аккумулятора. Одним из популярных датчиков для измерения количества света/уровня освещенности является модуль TSL25911. Его подключение к плате Arduino мы рассмотрим в данной статье.
Также на нашем сайте вы можете посмотреть подключение к плате Arduino таких датчиков освещенности как TEMT6000 и BH1750.
Необходимые компоненты
- Плата Arduino Uno (купить на AliExpress).
- Модуль датчика освещенности (Ambient Light Sensor Module) TSL25911 (купить на AliExpress).
Принципы работы модуля датчика освещенности TSL25911
Данный модуль представляет собой цифровой высокочувствительный датчик освещенности, основанный на чипе TSL25911fn от компании AMS. Он измеряет интенсивность окружающего света и передает ее значение через интерфейс I2C. Освещенность (интенсивность окружающего света) датчик измеряет в люксах (lux), что достаточно хорошо соответствует характеристике человеческого глаза. Ранее на нашем сайте мы рассматривали подключение аналогичного по функциям датчика BH1750 к плате Arduino, который также измеряет уровень освещенности в люксах.
Особенности модуля датчика освещенности TSL25911:
- содержит чип TSL25911FN, измеряет интенсивность инфракрасного и видимого света;
- встроенный АЦП (аналого-цифровой преобразователь), уменьшает уровень шумов, передает выходной сигнал через интерфейс I2C;
- высокая чувствительность – до 188 микролюкс (uLux), широкий динамический диапазон – до 600M:1;
- встроенный инфракрасный светодиод, позволяет работать с высокой точностью даже в условиях сильной инфракрасной зашумленности;
- выходной сигнал с программно настраиваемыми верхней и нижней границами;
- встроенный преобразователь напряжения, что дает датчику возможность работы от питающих напряжений 3.3V/5V.
Распиновка датчика TSL25911
Модуль датчика TSL25911 содержит 5 контактов: 2 контакта для подачи питания, один контакт прерывания и два контакта интерфейса I2C. Его распиновка показана на следующем рисунке.
Назначение контактов датчика:
VCC – контакт подачи питания. В нашем проекте его необходимо подключить к контакту 5V платы Arduino.
GND – общий провод (земля). Необходимо подключить к земле платы Arduino.
SCL – линия синхронизации интерфейса I2C.
SDA – линия передачи данных интерфейса I2C.
INT – контакт прерывания (Interrupt Pin).
Компоненты датчика TSL25911
Модуль датчика TSL25911 содержит небольшое количество компонентов, среди которых чип TSL25911FN от компании AMS, регулятор напряжения и схема сдвига уровня напряжения. Также датчик содержит несколько конденсаторов для фильтрации возможных шумов в цепи питания.
Наиболее часто задаваемые вопросы про датчик TSL25911
Какая чувствительность у датчика TSL25911?
Датчик TSL25911 обладает чувствительностью в 188µLux (микролюкс).
Какие основные преимущества датчика интенсивности света (освещенности) TSL25911 по сравнению с другими аналогичными датчиками:
- гибкость применения, можно применять под темным стеклом;
- способность работы в инфракрасном диапазоне;
- возможность работы как в темной комнате, так и на ярком солнечном свете;
- повышенная точность в условиях присутствия нескольких источников света.
Где используются датчики освещенности?
Везде, где необходимо измерять интенсивность света. Среди привычных нам вещей они используются в смартфонах, ноутбуках, умных часах и т.д.
Схема датчика TSL25911
Схема модуля датчика TSL25911 показана на рисунке ниже. Основными ее элементами являются чип TSL25911, регулятор напряжения и схема сдвига уровня напряжения.
Для получения напряжения 3.3V для чипа TSL25911 используется понижающий регулятор RT9193-33 от компании Richtek. Он способен обеспечивать ток до 300mA и оптимизирован для применения в устройствах, получающих питание от батареек/аккумуляторов. Обеспечивает низкйи уровень шума и постоянное значение тока. Для уменьшения выходного шума может быть использован контакт обхода шума (noise bypass pin).
Схема сдвига уровня напряжения (level shifter circuit) построена на основе двухканального MOSFET NDC7002N с каналом N-типа. Данная схема позволяет запитывать модуль от напряжения 5V. Также на плате модуля присутствует ряд конденсаторов, предназначенных для уменьшения шумов в цепи питания.
Как работает датчик TSL25911
Датчик TSL25911 содержит два АЦП, которые интегрируют (накапливают) ток от двух фотодиодов. Интегрирование обоих каналов происходит одновременно. После завершения цикла преобразования результат преобразования передается на регистры данных каналов Channel 0 и Channel 1 соответственно. После завершения передачи данных модуль автоматически начинает новый цикл интегрирования. Поскольку выход у датчика цифровой это обеспечивает ему повышенную помехоустойчивость по сравнению с использованием аналоговых сигналов. Структурная схема работы датчика освещенности TSL25911 представлена на следующем рисунке.
Датчик TSL2591 также поддерживает использование прерываний, что упрощает и увеличивает его эффективность поскольку в данном случае отпадает необходимость в постоянном считывании с датчика значения интенсивности света. Основная цель использования прерываний в данном случае – обнаружение значительных изменений интенсивности света, которые можно сконфигурировать по уровню и времени. Для модуля можно установить две границы уровня тока – верхнюю и нижнюю. Прерывание происходит когда фиксируется нарушение одной из этих границ. Можно настроить работу модуля так, чтобы прерывание срабатывало только когда интенсивность света превышает границу заданное время, либо же чтобы прерывание срабатывало по мгновенному значению интенсивности.
Схема проекта
Схема подключения датчика освещенности TSL25911 к плате Arduino представлена на следующем рисунке.
Для соединения мы использовали всего 4 провода. Контакты VCC и GND датчика TSL25911 мы подключили к контактам 5V и GND платы Arduino. А контакты SDA и SCL датчика мы соединили с контактами A4 и A5 платы Arduino.
Внешний вид собранной конструкции проекта представлен на следующем рисунке.
Объяснение программы для Arduino
Полный код программы приведен в конце статьи, здесь же мы кратко рассмотрим его основные фрагменты.
Первым делом в программе мы подключим библиотеку для работы с датчиком TSL25911. В функции setup() мы будем инициализировать последовательную связь (с ее помощью мы будем выводить на экран считываемые значения) и датчик TSL25911 с помощью вызова функции DEV_ModuleInit().
1 2 3 4 5 6 7 8 |
#include "DEV_Config.h" #include "TSL2591.h" UWORD Lux = 0; void setup() { DEV_ModuleInit(); Serial.print("TSL2591_Init\r\n"); TSL2591_Init(); } |
В функции loop() мы будем непрерывно считывать данные с датчика и выводить их в окно монитора последовательной связи.
1 2 3 4 5 6 7 |
void loop() { Lux = TSL2591_Read_Lux(); Serial.print("Lux = "); Serial.print(Lux); Serial.print("\r\n"); TSL2591_SET_LuxInterrupt(50,200); } |
Работа проекта показана на следующем видео.
Исходный код программы (скетча)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
#include "DEV_Config.h" #include "TSL2591.h" UWORD Lux = 0; void setup() { DEV_ModuleInit(); Serial.print("TSL2591_Init\r\n"); TSL2591_Init(); } void loop() { Lux = TSL2591_Read_Lux(); Serial.print("Lux = "); Serial.print(Lux); Serial.print("\r\n"); TSL2591_SET_LuxInterrupt(50,200); } |
Все необходимые файлы для проекта можно скачать по следующей ссылке.