Перейти к содержанию
    

Динамическая подсветка для веб-камеры

Есть модуль камеры OV5640, подключенный к плате. И есть яркий светодиод с DC/DC-конвертером в режиме источника тока.  Конвертер может диммироваться через PWM от платы.

Камера может возвращать среднюю освещённость кадра.

Вопрос собственно:  возможно ли сделать динамическое освещение:  когда окружающего света  много - подсветка выключается: PWM=0%, когда совсем темно - подсветка включается на полную PWM=100%. Когда внешнее освещение  слабое - PWM варьируется динамически от 10 до 90%.

Пробовал это сделать - часто возникает осцилляция:  светодиод загорается, камера фиксирует прирост яркости, светодиод отключается, снова темно, и так по кругу.

Есть ли способ это обойти?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

13 минут назад, repstosw сказал:

Пробовал это сделать - часто возникает осцилляция:  светодиод загорается, камера фиксирует прирост яркости, светодиод отключается, снова темно, и так по кругу.

Есть ли способ это обойти?

Так вычитайте из "камера возвращает среднюю освещённость кадра" текущий уровень ШИМ светодиода. И уже полученный результат используйте для вычисления нового уровня ШИМ. + на эту величину можно наложить фильтр (чтобы сгладить резкие изменения).
PWM_new = (CAM_out - PWM_old * K1) * K2

PS:  Также можно сделать ПИД-регулятор.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Либо, если без ПИД, можно сделать "по-глупому". Задайте целевую освещённость и зону нечувствительности для неё. На каждом "шаге" смотрите, куда попадает текущая освещённость: в зоне нечувствительности ничего не делаем, ниже её увеличиваем ШИМ на заданный шаг, выше неё снижаем ШИМ на тот же заданный шаг. Для корректного задания ширины зоны нечувствительности и величины шага изменения ШИМ нужно будет подумать и снять какие-то экспериментальные данные. Чем лучше подберёте значения, тем лучшее быстродействие получите.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В 20.03.2024 в 16:22, engel65536 сказал:

Либо, если без ПИД, можно сделать "по-глупому". Задайте целевую освещённость и зону нечувствительности для неё. На каждом "шаге" смотрите, куда попадает текущая освещённость:

мне кажется это более сложным решением, чем сделать классический ПИД и подобрать параметры

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 час назад, repstosw сказал:

Камера может возвращать среднюю освещённость кадра

Синхронизируйте процесс покадрово и задавайте требуемую освещённость для следующего кадра, ну и ШИМ разумеется должна быть тоже кратна кадровой.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Мне думается лучше будет задрать частоту ШИМ,

Камеры обычно умеют понимать мигания на частоте сети и как-то с ними борятся, а на высокочастотный ШИМ визуально не реагируют.

Синхронизировать процесс - излишняя сложность.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Всем спасибо за PID-регулятор!  Не знал, что есть такой.   До создания этой темы гуглил "динамическая/адаптивная подсветка/освещение" - всё не то:  там всё касается дискотечного оформления залов, но никак не то, что я искал.

Нашёл статью про PID-регулятор:

https://alexgyver.ru/lessons/pid/

 

Как я понял, фильтровать показания средней освещённости с камеры мне не нужно - относительно медленно-меняющееся значение: камера даёт 15 FPS (больше мне не требуется) - это dt=0.0667 с

 

Пока смотрю на P- коэффициент.  Остальные I,D пока задал нулевыми.

Целевое значение с камеры: 0x2C - это освещенность при нормальном дневном свете.  Пределы для ШИМ выставил 10 и 90%. avg - текущее показание камеры.

Функция с аргументами:

Quote

 PWM_Camera(computePID((float)avg,(float)0x2С,1.0,0.0,0.0,0.0667,10,90));

 

Собственно вопрос - как подобрать коэффициенты?

 

И ещё, если P-коэффициент делать большим, то выходит осцилляция - лицо человека отражает яркий свет на камеру и получается вспышки интервалом 0,3 с.  Как избежать этого ?

26 minutes ago, mitya1698 said:

Мне думается лучше будет задрать частоту ШИМ,

Использую мегагерцовый ШИМ

Изменено пользователем repstosw

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

29 минут назад, repstosw сказал:

Собственно вопрос - как подобрать коэффициенты?

Добро пожаловать в мир теории автоматического управления:biggrin:

Если кратко: в Вашем случае лучше методом тыка. Это быстро.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Думаю тут не просто ПИД нужен, в наиболее комфортных для меня алгоритмах автоматического управления яркостью дисплеев был некий гистерезис, т.е. внешнее освещение резко увеличилось на значительную величину - яркость плавно поднялась к соответствующему уровню, чем меньше изменение тем больше задержка перед подстройкой, а при незначительных колебаниях освещения яркость вообще остаётся на прежнем уровне, а не постоянно подстраивается. Возможно тут тоже что-то подобное подойдёт.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Не знаю, что у Вас в кадре будет, но, скорее всего, из средней освещенности ничего хорошего не получится.

Надо использовать результат более или мене интеллектуальной обработки изображения, с выбором важной части и ее проработкой. В фототехнике используются довольно сложные алгоритмы для выбора мощности вспышки. При видеозаписи авто-регулировка подсветки обычно не используется вообще, т.к. от подсветки полностью меняется картина кадра, а не просто яркость.

А если Вы собрались человека так снимать, то точечная подсветка (если это видимый свет) ему будет вообще не в кайф.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

4 часа назад, repstosw сказал:

Пока смотрю на P- коэффициент.  Остальные I,D пока задал нулевыми.

Какой же это ПИД? Это не ПИД.

4 часа назад, repstosw сказал:

И ещё, если P-коэффициент делать большим, то выходит осцилляция - лицо человека отражает яркий свет на камеру и получается вспышки интервалом 0,3 с.  Как избежать этого ?

Ну если уж решили делать ПИД, так и делайте его. Или хотя-бы ПИ-регулятор. Как раз интегральная составляющая и должна бороться с осцилляциями. Так как играет роль сглаживающего звена, задержки.

 

PS: Вообще - зря не последовали моему первому совету и сразу решили идти к ПИД. ПИД используют там, где ничего другое невозможно, так как неизвестна зависимость между управляющим воздействием и результатом. И больше нечего делать, только так. Естественно поэтому такой метод будет заведомо хуже работать, чем метод использующий известную зависимость y=f(x). ПИД - это подгонка результата с желаемому, которая естественно работает хуже прямого решения (если таковое имеется).

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

11 hours ago, repstosw said:

 

Камера может возвращать среднюю освещённость кадра.

 

А что под этим понимается?

11 hours ago, repstosw said:

Вопрос собственно:  возможно ли сделать динамическое освещение

Так а в самой камере есть автоматическая экспозиция? /это комбинация "'электронного затвора" (shutter)  и усиления/ 
Или камера всегда работает с фиксированными, задаваемыми вручную, параметрами shutter-а и усиления?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

8 hours ago, alexvu said:

А если Вы собрались человека так снимать, то точечная подсветка (если это видимый свет) ему будет вообще не в кайф.

Этот вопрос решён применением специальной рассеивающей линзы.

image.png.8e74d20c683239fb2048932b8be38b72.png

 

1 hour ago, Джеймс said:

А что под этим понимается?

Target image luminance average value (AVG).

 

6 hours ago, jcxz said:

PS: Вообще - зря не последовали моему первому совету и сразу решили идти к ПИД.

Попробую вашу формулу.  Есть какие-либо рекомендации по подбору или расчёту коэффициентов K1,K2 ?   Если известен диапазон ШИМ и диапазон показаний камеры.

 

1 hour ago, Джеймс said:

Так а в самой камере есть автоматическая экспозиция? /это комбинация "'электронного затвора" (shutter)  и усиления/ 
Или камера всегда работает с фиксированными, задаваемыми вручную, параметрами shutter-а и усиления?

Точно не знаю, но скорее всего есть.

Но в темноте я получаю чёрный квадрат с камеры.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

14 hours ago, jcxz said:

PWM_new = (CAM_out - PWM_old * K1) * K2

Работает с точностью наоборот: когда темно - гаснет, когда светло - горит на максимуме.

Исправил так:

PWM_new = ((CAM_max-CAM_out) - PWM_old * K1) * K2

 

Избавился от осцилляции (миганий на двух состояниях : минимум-максимум) - нужно усреднять два смежных показания камеры:

 #define constrain(x,min,max)  (((x)<(min))?(min):(((x)>(max))?(max):(x)))
  
 u8 avg;
 ov5640_read_reg(OV5640_AVG_READOUT,&avg);

 static float AVG=0.0;

 AVG+=(float)avg;
 AVG/=2.0;

 #define k1 0.05
 #define k2 1.0

 static s32 pwm=0;

 pwm=constrain(((((float)(0x30-AVG))-(((float)pwm)*k1))*k2),0,100);

 PWM_Camera(pwm);

 

Вопрос о подборе коэффициентов k1, k2 остаётся открытым

Изменено пользователем repstosw

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...