Датчик освещенности VEML7700 и с чем его едят , два варианта включения
Обратил внимание на датчик освещенности VEML7700 из-за обещанного более высокого предела измерений , заявляется около 120кЛюкс
Пару лет назад немного поигрался с ним и забросил , помню что в одних вариантах включения он на 40кЛюкс затыкался , на других доходил до 65кЛюкс и дальше ни ногой , сейчас вот повторно решил с ним поработать
Вариант первый :
Даю на откуп все мозгам датчика , он в этом режиме на автомате сам определяет для себя и время интегрирования , и усиление , я только итог
Комплектация :
Arduino nano
HD44780 1602 + модуль посл.интерфейса
VEML7700
Схема подключения :
Сборка на макете :
Ну и программа(скетч) :
#include <Wire.h>//библиотека под I2C
#include <LiquidCrystal_I2C.h>//библиотека под LCD
#include "Adafruit_VEML7700.h"//библиотека датчика освещенности
Adafruit_VEML7700 veml = Adafruit_VEML7700();
LiquidCrystal_I2C lcd(0x27,16,2);//прописываем свой LCD дисплей по адресу 27 или 3F и его знакоместам
byte X8[8] = {B00011,B00111,B00101,B00101,B01101,B01001,B11001,B00000,}; // Буква "Л"
byte X15[8] = {B10101,B10101,B10101,B10101,B10101,B10101,B11111,B00001,}; // Буква "Щ"
byte X16[8] = {B10000,B10000,B10000,B11110,B10001,B10001,B11110,B00000,}; // Буква "Ь"
void setup() {
lcd.init();// Инициализация lcd дисплея
lcd.backlight();// Включение подсветки дисплея
veml.begin();
}
void loop()
{
lcd.createChar(1,X8); //1 синтезированный знак (Л)
lcd.createChar(2,X15); //2 синтезированный знак (Щ)
lcd.createChar(3,X16); //3 синтезированный знак (Ь)
lcd.setCursor(2, 0);
lcd.print("OCBE\2EHHOCT\3"); //ОСВЕЩЕННОСТЬ
lcd.setCursor(4, 1);
lcd.print(" ");//затир перед выводом новых значений
lcd.setCursor(4, 1);
lcd.print(veml.readLux(),0);//вывод показаний на экран
lcd.print("\1k");//Лк
delay(1000);
}
Прежде чем перейти к другой сборке приведу тут выдержку из статьи с буржуйского сайта , под спойлер убрал длинно больно , но уж больно подробное досье на этого парня
Датчики внешней освещенности VEML7700 и VEML6030
Сенсорная платформа veml7700 позволяет использовать датчики внешней освещенности Vishay VEML7700 и VEML6030 совместно с ESPHome. Связь с устройством осуществляется по протоколу I2C, который должен присутствовать в вашей конфигурации. VEML7700 и VEML6030 в основном одинаковы, но в разных комплектациях. VEML7700 использует фиксированный адрес 0x10, в то время как меньший по размеру VEML6030 может быть настроен на использование либо 0x10, либо 0x48.
Датчик VEML в пользовательском интерфейсе Home Assistant.
Датчик представляет собой высокоточный цифровой датчик освещенности с разрешением 16 бит и динамическим диапазоном от 0 до 120 000 люкс. Широкий диапазон измерений обеспечивается четырьмя настраиваемыми уровнями усиления и шестью различными вариантами времени интегрирования. Более высокие значения усиления обычно используются в условиях низкой освещенности.
Датчик оснащен двумя фотодиодами с различными спектральными характеристиками, представленными двумя каналами: ALS-каналом и БЕЛЫМ каналом. ALS, или канал рассеянного света, очень точно повторяет так называемую кривую человеческого глаза. БЕЛЫЙ канал охватывает гораздо более широкую длину волны/спектр, улавливая довольно много излучения в ближнем инфракрасном диапазоне.
Спектральная характеристика каналов ALS и WHITE
Рекомендуется использовать режим автоматического измерения этого компонента; в этом режиме соответствующий коэффициент усиления и время интегрирования автоматически выбираются компонентом после проведения нескольких измерений. Для этого используется процедура, рекомендованная производителем.
Если вы хотите управлять этими параметрами вручную, пожалуйста, обратите внимание, что:
в большинстве случаев следует использовать уровни усиления 1/8 и 1/4.
Уровни усиления 1 и 2 предназначены только для использования в условиях низкой освещенности < 100 люкс. При очень высокой освещенности он показывает высокую нелинейность.
В диапазоне от 0 до 1000 люкс измерения датчика строго линейны для коэффициента усиления 1/4 и 1/8, после 1000 люкс он показывает нелинейность.
Для получения более точных показаний при ярком освещении используется формула компенсации яркости. Однако при очень ярком прямом солнечном свете она дает довольно высокую погрешность (вместо 100-120 килолюкс она может давать более 150-200 К).
Режим автоматического измерения
В режиме автоматического измерения компонент запускается с коэффициентом усиления 1/8 и 100 мс (по умолчанию).
Если освещенность превышает 46 лк (100 отсчетов), это постепенно сокращает время интеграции для получения хороших показаний (лучше всего в диапазоне от 100 до 10 000 отсчетов).
В случае низкой освещенности (менее 46 лк) он пытается постепенно увеличить коэффициент усиления и только затем увеличивает время интегрирования.
Пожалуйста, обратите внимание, что в условиях низкой освещенности процесс измерения может занять несколько секунд из-за длительной экспозиции и перенастройки датчика.
Начальные значения можно изменить, установив параметры gain и integration_time. Сначала, по возможности, корректируется значение усиления.
Компенсация яркости
Компенсация яркости выполняется в соответствии с рекомендациями производителя, однако ее можно отключить, установив значение lux_compensation: false в конфигурации вашего устройства.
количество люксов × разрешение (время, коэффициент усиления)
luxcomp
6,0135e × 10-13 × lux4 - 9,3924e × 10-9 × lux3
+8,1488e × 10-5 × люкс2 + 1,0023 × люкс
Где:
подсчитывает
показания датчиков, подсчитывает
разрешение
- разрешение датчика при заданном времени интегрирования и коэффициенте усиления, лк/
количество рассчитанных люксов освещенности, лк
освещенности - компенсацией luxcomp, лк
Доступные данные
Реализация предлагает семь датчиков: - Два из них обеспечивают измерение уровня освещенности, - Два измерения без учета данных непосредственно с устройства, - Два фактических значения коэффициента усиления и времени интегрирования, используемых для измерения (полезно в автоматическом режиме), и - Один полностью искусственный, в некоторой степени представляющий ближнюю инфракрасную часть спектра.
ambient_light: Значение освещенности для канала ALS, представляющего человеческий глаз, лк
full_spectrum: Значение освещенности для БЕЛОГО канала с широким спектром, лк
infrared: Расчетное значение освещенности (БЕЛЫЙ минус ALS), представляющее ближний инфракрасный спектр, лк
ambient_light_counts: Необработанные 16-битные данные из канала ALS, учитываются
full_spectrum_counts: Необработанные 16-битные данные из БЕЛОГО канала, учитываются
actual_gain: Фактическое значение усиления, используемое для сообщаемых значений, множитель
actual_integration_time: Фактическое время интегрирования, используемое для сообщаемых значений, мс
Переменные конфигурации:
auto_mode (необязательно, логическое значение): Автоматический выбор времени усиления и интеграции. Значение по умолчанию равно True.
integration_time (необязательно, время): Время, в течение которого датчик находится в открытом состоянии. Допустимые значения: 25 мс, 50 мс, 100 мс (по умолчанию), 200 мс, 400 мс, 800 мс. В автоматическом режиме устанавливается начальное значение.
коэффициент усиления (необязательно, строка): коэффициент усиления, который устройство будет использовать для внутреннего АЦП. Допустимые значения - 1/8 (по умолчанию), 1/4, 1x, 2x. Более высокие значения лучше использовать в условиях низкой освещенности. В автоматическом режиме устанавливается начальное значение усиления.
lux_compensation (необязательно, логическое значение): Используется формула компенсации яркости, указанная производителем. Значение по умолчанию равно True.
glass_attenuation_factor (необязательно): Коэффициент затухания стекла, если оно находится за стеклянной или пластиковой панелью. Значение по умолчанию 1.0 означает коэффициент пропускания 100%. 2 означает коэффициент пропускания 50% и т.д.
update_interval (необязательно, время): интервал для проверки датчиков. По умолчанию используется значение 60 секунд.
Все остальные опции для устройств I2C описаны в разделе I2C
Датчики
Вы можете настроить все или любое подмножество датчиков, описанных ранее. О каждом сконфигурированном датчике сообщается отдельно в каждом update_interval. Поддерживаются все параметры из Sensor.
Однако, если вам не нужны какие-либо другие параметры, вы можете просто использовать сокращения, подобные этому: ambient_light: Окружающий свет.
ambient_light (необязательно): Освещенность для видимого света (канал ALS), lx.
full_spectrum (опционально): Освещенность датчика полного спектра (БЕЛЫЙ канал), лк.
инфракрасный (опционально): Расчетная освещенность для ближнего ИК-диапазона (БЕЛЫЙ минус ALS), лк.
ambient_light_counts (необязательно): Учитываются показания для видимого света (канал ALS).
full_spectrum_counts (необязательно): Учитываются показания датчика полного спектра (БЕЛЫЙ канал).
actual_gain (необязательно): значение усиления, используемое для сообщаемых значений. Особенно полезно, если выбран “auto_mode”.
actual_integration_time (необязательно): время интеграции, используемое для сообщаемых значений, мс. Особенно полезно, когда выбран “auto_mode”.
https://esphome.io/components/sensor/veml7700.html
Мда , разобрался раз через раз , но главное :
Датчик оснащен двумя фотодиодами с различными спектральными характеристиками, представленными двумя каналами: ALS-каналом и БЕЛЫМ каналом. ALS, или канал рассеянного света, очень точно повторяет так называемую кривую человеческого глаза. БЕЛЫЙ канал охватывает гораздо более широкую длину волны/спектр, улавливая довольно много излучения в ближнем инфракрасном диапазоне.
Рекомендуется использовать режим автоматического измерения этого компонента; в этом режиме соответствующий коэффициент усиления и время интегрирования автоматически выбираются компонентом после проведения нескольких измерений. Для этого используется процедура, рекомендованная производителем.
Если вы хотите управлять этими параметрами вручную, пожалуйста, обратите внимание, что:
в большинстве случаев следует использовать уровни усиления 1/8 и 1/4.
Уровни усиления 1 и 2 предназначены только для использования в условиях низкой освещенности < 100 люкс. При очень высокой освещенности он показывает высокую нелинейность.
В диапазоне от 0 до 1000 люкс измерения датчика строго линейны для коэффициента усиления 1/4 и 1/8, после 1000 люкс он показывает нелинейность.
Для получения более точных показаний при ярком освещении используется формула компенсации яркости. Однако при очень ярком прямом солнечном свете она дает довольно высокую погрешность (вместо 100-120 килолюкс она может давать более 150-200 К).
Вариант второй :
Не смотря на предупреждение : "что не умничай , мы сами настроем как надо" , все же попробовал ручной режим , но и кроме освещенности вывел на дисплей результаты измерений по каналам , чтоб хоть немного осознать от чего пляшет датчик
ALS, (канал рассеянного света, очень точно повторяет так называемую кривую человеческого глаза)
БЕЛЫЙ канал (охватывает гораздо более широкую длину волны/спектр, улавливая довольно много излучения в ближнем инфракрасном диапазоне.)
Комплектация :
Arduino nano
HD44780 2004 + модуль посл.интерфейса
VEML7700
Схема подключения :
Сборка на макете :
Программа(скетч) :
#include <Wire.h>//библиотека под I2C
#include <LiquidCrystal_I2C.h>//библиотека под LCD
#include "Adafruit_VEML7700.h"//библиотека датчика освещенности
Adafruit_VEML7700 veml = Adafruit_VEML7700();
LiquidCrystal_I2C lcd(0x27,20,4);//прописываем свой LCD дисплей по адресу 27 или 3F и его знакоместам
void setup() {
lcd.init();// Инициализация lcd дисплея
lcd.backlight();// Включение подсветки дисплея
veml.begin();
// Можно установить коэффициент усиления и время интеграции, отличные от значения по умолчанию
veml.setGain(VEML7700_GAIN_1_8);// _1 _2 _1_4 _1_8 усиление
veml.setIntegrationTime(VEML7700_IT_25MS);//25,50,100,200,400,800 время интегрирования
}
void loop() {
lcd.setCursor(0, 0);
lcd.print("ALS");
lcd.setCursor(0, 1);
lcd.print("White");
lcd.setCursor(0, 2);
lcd.print("Lux");
lcd.setCursor(6, 0);
lcd.print(" ");
lcd.setCursor(6, 0);
lcd.print(veml.readALS());
lcd.setCursor(6, 1);
lcd.print(" ");
lcd.setCursor(6, 1);
lcd.print(veml.readWhite());
lcd.setCursor(6, 2);
lcd.print(" ");
lcd.setCursor(6, 2);
lcd.print(veml.readLux());
delay(1000);
}
В программе выставлено минимальное усиление и минимальное время интегрирования , хотя это как раз режим под высокие уровни освещенности , чем дома и не пахнет , но этими двумя параметрами я вдоволь поигрался , обратил внимание что в разных режимах измерения выдаваемые значения освещенности заметно гуляют , видно все же надежней довериться их автоматике
А напоследок я решил поиграться разноцветными светодиодиками , поглядеть как на них реагируют оба канала , и что после обработки выплюнет люксметр :
УФ диод 390-400нм , а производитель говорил что "белый" канал лишь в сторону ИК расширен
синий диод ALS канал его больше выделяет
зеленый диод ALS канал так же его лучше принимает
красный , его уже больше "белый" канал любит
ИК диод 850нм , "белый" канал прям тащится от него , но в расчет освещенности мало что попадает
Как же мудрено они считают
Изменено пользователем feniсs
Перейти к содержанию
0 Комментариев
Рекомендуемые комментарии
Комментариев нет
Для публикации сообщений создайте учётную запись или авторизуйтесь
Вы должны быть пользователем, чтобы оставить комментарий
Создать учетную запись
Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!
Регистрация нового пользователяВойти
Уже есть аккаунт? Войти в систему.
Войти