Оглавление:

Калибровка яркости светодиода: 5 шагов
Калибровка яркости светодиода: 5 шагов

Видео: Калибровка яркости светодиода: 5 шагов

Видео: Калибровка яркости светодиода: 5 шагов
Видео: Настройка изображения ТВ в 5 шагов 2024, Ноябрь
Anonim
Калибровка яркости светодиода
Калибровка яркости светодиода

Пока я делал сказочный свет, я понял, что значение ШИМ нелинейно пропорционально яркости светодиода. Проще говоря, если значение ШИМ удвоено, яркость не удвоится; особенно, когда ШИМ близок к максимуму, никакие изменения не распознаются моими глазами. Я подумал, это должна быть простая проблема с калибровкой! и именно так я сделал этот проект! Идея состоит в том, чтобы измерить яркость светодиода с помощью какого-либо устройства (датчика яркости или фоторезистора) и найти корреляцию между значением ШИМ и яркостью. Затем, позже, если я установлю яркость на 50%, Arduino вычислит соответствующий ШИМ и соответственно уменьшит яркость светодиода.

Поэтому мне нужен датчик освещенности и светодиод для измерения яркости. Используя SD-карту, я сохраню данные для последующей процедуры настройки. Подгонка будет производиться в Excel (или любой другой программе). Выход будет использован в коде Arduino, и все! Это нужно сделать один раз. Тогда вы можете использовать параметр калибровки навсегда!

Шаг 1: Детали

1- WEMOS mini D1: Aliexpress 3 €

2- TSL 2561 (датчик освещенности): Aliexpress 3 €

3- Модуль SD-карты: Aliexpress 1 €

4- светодиод

5- Резистор 220 Ом

6-проводное

общая стоимость: 8-10 €

Шаг 2: Подключение

Проводка
Проводка
Проводка
Проводка
Проводка
Проводка

Модуль SD-карты и провода датчика освещенности не подлежат замене (большинство из них). Светодиод должен быть подключен к выводу ШИМ.

Шаг 3: Код

Код
Код

Я объединил три части кода:

SD-карта: использованный пример> SD> ReadWrite в Arduino IDE

TSL 2561: использовался пример библиотеки Adafruit TSL2561 (sensorapi); вы найдете это в примерах, если установите библиотеку (я предполагаю, что вы знаете, как установить библиотеку в Arduino IDE).

Светодиодное затухание: использованные примеры> Аналоговый> затухание

Код после инициализации модулей затемняет светодиод, считывает яркость и сохраняет ее на SD-карте. таким образом я соберу некоторые данные для калибровки.

Я изменил каждый код в соответствии со своими потребностями. окончательный код прилагается.

Сигнал должен выглядеть как на прикрепленном изображении. К сожалению, я забыл сделать снимок, поэтому перепечатал его в Excel, чтобы показать вам, каким он должен быть.

ПРИМЕЧАНИЕ: я использую wemo mini D1 вместо Arduino. почему-то, я не знаю, ШИМ находится в диапазоне от 0 до 1023. В Arduino он должен быть в диапазоне от 0 до 255. Если вы хотите использовать код для Arduino, вам следует об этом позаботиться (строка 90).

Шаг 4: установка и использование

Установка и использование
Установка и использование
Установка и использование
Установка и использование

после сбора данных я открыл файл в Excel и построил график данных (посмотрите на картинку). в первом столбце указано значение ШИМ, а во втором - люкс (показания датчика, единицы измерения значения не имеют). Поэтому постройте график зависимости люкс (ось y) от ШИМ (ось x). Как видите, яркость прямо пропорциональна значению ШИМ. Я приспособил к нему линию.

Чтобы подогнать линию, выполните следующие действия:

1- построить данные (вставить> график разброса), я полагаю, вы знаете, как это сделать.

2- щелкните правой кнопкой мыши данные на графике

3- щелкните линию тренда.

4- (в Excel 2013) с правой стороны всплывает панель. Выберите линейный. Внизу выберите «отобразить уравнение на графике».

Линейное отношение отличается от моего восприятия. Поэтому я считаю, что между моим восприятием и яркостью должна быть логарифмическая связь (это самый простой способ пришел мне в голову!). Так что я выбрал наклон подгонки. Перехват не важен, потому что это зависит от окружающего светового загрязнения! вместо этого я добавил 1. Поскольку Log10 (0) бесконечно. Так что мне нужен перехватчик, чтобы решить проблему. В моем случае уравнение выглядит так:

y = Log10 (0,08 x +1), y - яркость, а x - значение ШИМ (0-1023)

Я нормализовал уравнение до максимального значения. тогда выходной диапазон всегда находится в диапазоне от 0 до 100. Таким образом, я могу запросить у Arduino определенную относительную яркость, не касаясь максимальной абсолютной яркости.

y = Log10 (0,08 x +1) * 100 / 1,914

Поскольку в Arduino я вводил относительную яркость, мне нужно переупорядочить уравнение для x (ШИМ):

х = (10 ^ (у * 1,914 / 100) - 1) / 0,08

используя это уравнение в коде, мы можем получить линейное изменение яркости. Таким образом, вы запрашиваете у arduino значение яркости (y) от 0 до 100, и arduino вычисляет соответствующее значение PWM. Таким образом, если яркость удвоится, ваше восприятие останется прежним.

если вы хотите использовать его в своем коде, вам лучше добавить эти строки:

яркость = 50; // в процентах

PWM = pow (10, яркость * 1.914 / 100) -1) /0.0793;

analogWrite (ledpin, ШИМ);

ПРИМЕЧАНИЕ: нормализация выполняется для максимального значения ШИМ 1023 (для Wemos mini D1). Для Arduino PWM находится в пределах от 0 до 255. вам нужно рассчитать его соответственно.

ПРИМЕЧАНИЕ 2: Я добавил лог-линейный график, чтобы показать, как связаны наше восприятие и значение ШИМ. не используйте его для примерки!

Шаг 5: Заключение

калибровка у меня работает нормально. Когда значения ШИМ велики, я вижу разницу. Раньше при больших значениях я не видел эффекта затемнения. В основном большинство изменений было сделано в небольшом диапазоне ШИМ. теперь он откалиброван!

у каждого светодиода, особенно разного цвета, должны быть собственные параметры калибровки. Однако я откалибровал синий светодиод и использовал параметр для белого светодиода, и результат был приемлемым. так что, возможно, вы сможете использовать мой параметр калибровки, не беспокоясь о себе !!

Рекомендуемые: