TSL2561 — это цифровой датчик освещенности с интерфейсом I2C/TWI. Более подробное описание этого модуля можете найти на странице TSL2561 — Цифровой датчик освещенности (модуль GY-2561). А в этом посте мы подключим по I2C датчик TSL2561 к Arduino, установим необходимую библиотеку и будем выводить значения в последовательный порт компьютера. С помощью TSL2561 можно изготовить самодельный люксметр на Ардуино.
Установка библиотеки Adafruit TSL2561
Для работы с данным модулем необходимо установить библиотеку Adafruit TSL2561. Скачиваем, распаковываем и закидываем в папку Arduino/libraries
. В случае, если на момент добавления библиотеки, Arduino IDE была открытой, перезагружаем среду.
Библиотеку можно установить из среды Arduino следующим образом:
- В Arduino IDE открываем менеджер библиотек: Скетч->Подключить библиотеку->Управлять библиотеками…
- В строке поиска вводим «TSL2561», находим библиотеку от Adafruit, выбираем и устанавливаем последнюю версию.
- Библиотека установлена (INSTALLED).
Не стоит забывать о Adafruit Unified Sensor Library, эту библиотеку также нужно установить.
Подключение TSL2561 к Arduino
Модуль модуль GY-2561 оборудован пяти-пиновым разъемом стандарта 2.54мм
- VCC: «+» питания
- GND: «-» питания
- SCL: последовательная линия тактирования (Serial CLock)
- SDA: последовательная линия данных (Serial DAta)
- INT: выход прерывания
Выводы отвечающие за интерфейс I2C на платах Arduino на базе различных контроллеров разнятся
Arduino Mega | Arduino Uno/Nano/Pro Mini | TSL2561 модуль | Цвет проводов на фото |
---|---|---|---|
GND | GND | GND | Черный |
5V | 5V | VCC | Красный |
20 (SDA) | A4 | SDA | Синий |
21 (SCL) | A5 | SCL | Зелёный |
Схема подключения TSL2561 к Arduino по I2C
Пример скетча
Библиотека довольно проста в использовании. Первая строка кода в примере — это «конструктор», в котором вы можете указать I2C адрес (на случай, если вы захотите его изменить) и уникальный идентификатор для подключения к этому датчику (вы можете просто оставить это значение по умолчанию: 12345 на данный момент). Изменяя адрес I2C, мы можем подключить до трех датчиков TSL2561 к одной плате:
/* Адрес будет отличаться в зависимости от того, оставляете ли вы плавающий вывод ADDR (addr 0x39) или привязываете его к GND или Vcc. В этих случаях используйте TSL2561_ADDR_LOW (0x29) или TSL2561_ADDR_HIGH (0x49) соответственно */ Adafruit_TSL2561_Unified tsl = Adafruit_TSL2561_Unified(TSL2561_ADDR_FLOAT, 12345);
Далее вам нужно будет настроить коэффициент усиления датчика и время интеграции.
Вы можете получить либо усиление 0 (без дополнительного усиления, хорошо в условиях хорошего освещения), либо усиление на 16, которое значительно усилит полученный сигнал с датчика в условиях слабого освещения.
Вы также можете изменить время интеграции, то есть как долго датчик TSL2561 будет собирать данные об освещении. Чем дольше время интеграции, тем выше точность датчика.
Впервые в версии драйвера 2.0 есть опция автоматического изменение коэффициента усиления, которая полезна при измерениях в условиях смешанного освещения. Это автоматически включит или отключит усиление в зависимости от уровня освещенности. Это все еще экспериментальная функция, и уровни переключения могут нуждаться в настройке, но эта функция может быть полезна для сбора света как внутри помещения, так и на улице без необходимости изменения кода самостоятельно.
/* Конфигурация усиления и времени интеграции для TSL2561 */ void configureSensor(void) { /* Вы также можете вручную установить усиление или включить авто-усиление */ /* Нет усиления ... используйте при ярком свете, чтобы избежать насыщения датчика */ // tsl.setGain(TSL2561_GAIN_1X); /* 16-кратное усиление ... используйте при слабом освещении для повышения чувствительности */ // tsl.setGain(TSL2561_GAIN_16X); /* Авто-усиление ... автоматически переключается между 1x и 16x */ tsl.enableAutoRange(true); /* Изменение времени интеграции дает вам лучшее разрешение сенсора (402 мс = 16-битные данные) */ /* быстрое, но низкое разрешение */ tsl.setIntegrationTime(TSL2561_INTEGRATIONTIME_13MS); /* среднее разрешение и скорость */ // tsl.setIntegrationTime(TSL2561_INTEGRATIONTIME_101MS); /* 16-битные данные, но самое медленное преобразование */ // tsl.setIntegrationTime(TSL2561_INTEGRATIONTIME_402MS); /* Обновите эти значения в зависимости от того, что вы установили выше! */ Serial.println("------------------------------------"); Serial.print ("Усиление: "); Serial.println("Auto"); Serial.print ("Времени интеграции: "); Serial.println("13 ms"); Serial.println("------------------------------------"); }
По умолчанию драйвер возвращает свет в стандартных единицах SI lux, которые являются результатом некоторых сложных вычислений на основе обоих фотодиодов на TSL2561 (один для полного спектра и один для ИК). Чувствительность двух диодов можно увидеть на графике ниже:
Когда вы будете готовы, чтобы получить ваши измерения в lux-ах, просто вызовите getEvent()
со ссылкой на объект sensor_event_t
, где будут храниться данные датчика. В этом примере предполагается, что мы используем экземпляр tsl
Adafruit_TSL2561
из верхней части примера кода:
/* Функция цикла Arduino, вызываемая после завершения установки (здесь должен быть указан ваш собственный код) */ void loop(void) { /* Получить новое событие датчика */ sensors_event_t event; tsl.getEvent(&event); /* Показать результаты (Освещённость измеряется в люксах) */ if (event.light) { Serial.print(event.light); Serial.println(" lux"); } else { /* Если event.light = 0 люкса датчик, вероятно, насыщенные и достоверные данные не может быть сгенерированы! */ Serial.println("Sensor overload"); } delay(250); }
Если вы хотите вручную прочитать данные от датчика, вы сможете сделать это, вызвав функцию getLuminosity()
и передав две переменные, в которых будут храниться данные датчика:
uint16_t broadband = 0; uint16_t infrared = 0; getLuminosity (&broadband, &infrared);
Полный код скетча:
#include <Wire.h> #include <Adafruit_TSL2561_U.h> /* Адрес будет отличаться в зависимости от того, оставляете ли вы плавающий вывод ADDR (addr 0x39) или привязываете его к GND или Vcc. В этих случаях используйте TSL2561_ADDR_LOW (0x29) или TSL2561_ADDR_HIGH (0x49) соответственно */ Adafruit_TSL2561_Unified tsl = Adafruit_TSL2561_Unified(TSL2561_ADDR_FLOAT, 12345); /* Отображает некоторую основную информацию об этом датчике */ void displaySensorDetails(void) { sensor_t sensor; tsl.getSensor(&sensor); Serial.println("------------------------------------"); Serial.print ("Датчик: "); Serial.println(sensor.name); Serial.print ("Версия драйвера: "); Serial.println(sensor.version); Serial.print ("Уникальный ID: "); Serial.println(sensor.sensor_id); Serial.print ("Макс. значение: "); Serial.print(sensor.max_value); Serial.println(" lux"); Serial.print ("Мин. значение: "); Serial.print(sensor.min_value); Serial.println(" lux"); Serial.print ("Разрешение: "); Serial.print(sensor.resolution); Serial.println(" lux"); Serial.println("------------------------------------"); Serial.println(""); delay(500); } /* Конфигурация усиления и времени интеграции для TSL2561 */ void configureSensor(void) { /* Вы также можете вручную установить усиление или включить авто-усиление */ /* Нет усиления ... используйте при ярком свете, чтобы избежать насыщения датчика */ // tsl.setGain(TSL2561_GAIN_1X); /* 16-кратное усиление ... используйте при слабом освещении для повышения чувствительности */ // tsl.setGain(TSL2561_GAIN_16X); /* Авто-усиление ... автоматически переключается между 1x и 16x */ tsl.enableAutoRange(true); /* Изменение времени интеграции дает вам лучшее разрешение сенсора (402 мс = 16-битные данные) */ /* быстрое, но низкое разрешение */ tsl.setIntegrationTime(TSL2561_INTEGRATIONTIME_13MS); /* среднее разрешение и скорость */ // tsl.setIntegrationTime(TSL2561_INTEGRATIONTIME_101MS); /* 16-битные данные, но самое медленное преобразование */ // tsl.setIntegrationTime(TSL2561_INTEGRATIONTIME_402MS); /* Обновите эти значения в зависимости от того, что вы установили выше! */ Serial.println("------------------------------------"); Serial.print ("Усиление: "); Serial.println("Auto"); Serial.print ("Времени интеграции: "); Serial.println("13 ms"); Serial.println("------------------------------------"); } /* Функция настройки Arduino (автоматически вызывается при запуске) */ void setup(void) { Serial.begin(9600); Serial.println("Тест датчика света"); Serial.println(""); /* Инициализировать датчик */ /* использовать tsl.begin() to default to Wire, tsl.begin(&Wire2) направляет API для использования Wire2 и т.д. */ if (!tsl.begin()) { /* При обнаружении TSL2561 возникла проблема ... проверьте подключение */ Serial.print("Ooops, no TSL2561 detected ... Check your wiring or I2C ADDR!"); while (1); } /* Показать основную информацию об этом датчике */ displaySensorDetails(); /* Настройка коэффициента усиления датчика и времени интеграции */ configureSensor(); /* Мы готовы к работе! */ Serial.println(""); } /* Функция цикла Arduino, вызываемая после завершения установки (здесь должен быть указан ваш собственный код) */ void loop(void) { /* Получить новое событие датчика */ sensors_event_t event; tsl.getEvent(&event); /* Показать результаты (Освещённость измеряется в люксах) */ if (event.light) { Serial.print(event.light); Serial.println(" lux"); } else { /* Если event.light = 0 люкса датчик, вероятно, насыщенные и достоверные данные не может быть сгенерированы! */ Serial.println("Sensor overload"); } delay(250); }
Результат
Материалы
TSL2561 — Цифровой датчик освещенности (модуль GY-2561)
datasheets_TSL2561.pdf
Arduino Code | TSL2561 Luminosity Sensor | Adafruit Learning System
TSL2560, TSL2561 Light-to-Digital Converter. TAOS059Q. 2009. November.
prednisone 0.5 mg: Prednisone Without Prescription — prednisone steroids
buying clomid tablets: generic clomid — cost of generic clomid price
can you buy amoxicillin over the counter canada: com pharm — over the counter amoxicillin
order prednisone 10mg: raypharm — can i order prednisone
azithromycin amoxicillin amoxil com pharm where can you get amoxicillin
buying generic clomid prices: get clomid no prescription — can you buy cheap clomid pill
order amoxicillin no prescription: Amoxicillin for sale — amoxicillin 500mg capsules uk
can you get generic clomid tablets: rex pharm — can you buy cheap clomid without prescription
prednisone 7.5 mg prednisone 10 mg price prednisone 10mg canada
buy dapoxetine online: priligy max pharm — priligy maxpharm
amoxicillin 500mg capsule buy online Com Pharm amoxicillin 1000 mg capsule
amoxicillin without prescription: com pharm — amoxicillin 500mg capsules uk
buy priligy: buy priligy — Priligy tablets
prednisone in mexico: cheap prednisone — prednisone 30
amoxicillin 200 mg tablet: com pharm — amoxicillin in india
buy prednisone from canada: prednisone ray pharm — generic prednisone 10mg
get clomid online: rex pharm — order clomid price
how can i order prednisone: prednisone — cost of prednisone
where can i get amoxicillin: buy amoxil online — over the counter amoxicillin