repstosw 18 20 марта Опубликовано 20 марта · Жалоба Есть модуль камеры OV5640, подключенный к плате. И есть яркий светодиод с DC/DC-конвертером в режиме источника тока. Конвертер может диммироваться через PWM от платы. Камера может возвращать среднюю освещённость кадра. Вопрос собственно: возможно ли сделать динамическое освещение: когда окружающего света много - подсветка выключается: PWM=0%, когда совсем темно - подсветка включается на полную PWM=100%. Когда внешнее освещение слабое - PWM варьируется динамически от 10 до 90%. Пробовал это сделать - часто возникает осцилляция: светодиод загорается, камера фиксирует прирост яркости, светодиод отключается, снова темно, и так по кругу. Есть ли способ это обойти? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mitya1698 18 20 марта Опубликовано 20 марта · Жалоба читать в сторону ПИД 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 242 20 марта Опубликовано 20 марта · Жалоба 13 минут назад, repstosw сказал: Пробовал это сделать - часто возникает осцилляция: светодиод загорается, камера фиксирует прирост яркости, светодиод отключается, снова темно, и так по кругу. Есть ли способ это обойти? Так вычитайте из "камера возвращает среднюю освещённость кадра" текущий уровень ШИМ светодиода. И уже полученный результат используйте для вычисления нового уровня ШИМ. + на эту величину можно наложить фильтр (чтобы сгладить резкие изменения). PWM_new = (CAM_out - PWM_old * K1) * K2 PS: Также можно сделать ПИД-регулятор. 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
engel65536 12 20 марта Опубликовано 20 марта · Жалоба Либо, если без ПИД, можно сделать "по-глупому". Задайте целевую освещённость и зону нечувствительности для неё. На каждом "шаге" смотрите, куда попадает текущая освещённость: в зоне нечувствительности ничего не делаем, ниже её увеличиваем ШИМ на заданный шаг, выше неё снижаем ШИМ на тот же заданный шаг. Для корректного задания ширины зоны нечувствительности и величины шага изменения ШИМ нужно будет подумать и снять какие-то экспериментальные данные. Чем лучше подберёте значения, тем лучшее быстродействие получите. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mitya1698 18 20 марта Опубликовано 20 марта · Жалоба В 20.03.2024 в 16:22, engel65536 сказал: Либо, если без ПИД, можно сделать "по-глупому". Задайте целевую освещённость и зону нечувствительности для неё. На каждом "шаге" смотрите, куда попадает текущая освещённость: мне кажется это более сложным решением, чем сделать классический ПИД и подобрать параметры Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Plain 223 20 марта Опубликовано 20 марта · Жалоба 1 час назад, repstosw сказал: Камера может возвращать среднюю освещённость кадра Синхронизируйте процесс покадрово и задавайте требуемую освещённость для следующего кадра, ну и ШИМ разумеется должна быть тоже кратна кадровой. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mitya1698 18 20 марта Опубликовано 20 марта · Жалоба Мне думается лучше будет задрать частоту ШИМ, Камеры обычно умеют понимать мигания на частоте сети и как-то с ними борятся, а на высокочастотный ШИМ визуально не реагируют. Синхронизировать процесс - излишняя сложность. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
repstosw 18 20 марта Опубликовано 20 марта (изменено) · Жалоба Всем спасибо за 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: Мне думается лучше будет задрать частоту ШИМ, Использую мегагерцовый ШИМ Изменено 20 марта пользователем repstosw Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Arlleex 189 20 марта Опубликовано 20 марта · Жалоба 29 минут назад, repstosw сказал: Собственно вопрос - как подобрать коэффициенты? Добро пожаловать в мир теории автоматического управления Если кратко: в Вашем случае лучше методом тыка. Это быстро. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AlexMI 20 20 марта Опубликовано 20 марта · Жалоба Думаю тут не просто ПИД нужен, в наиболее комфортных для меня алгоритмах автоматического управления яркостью дисплеев был некий гистерезис, т.е. внешнее освещение резко увеличилось на значительную величину - яркость плавно поднялась к соответствующему уровню, чем меньше изменение тем больше задержка перед подстройкой, а при незначительных колебаниях освещения яркость вообще остаётся на прежнем уровне, а не постоянно подстраивается. Возможно тут тоже что-то подобное подойдёт. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
alexvu 5 20 марта Опубликовано 20 марта · Жалоба Не знаю, что у Вас в кадре будет, но, скорее всего, из средней освещенности ничего хорошего не получится. Надо использовать результат более или мене интеллектуальной обработки изображения, с выбором важной части и ее проработкой. В фототехнике используются довольно сложные алгоритмы для выбора мощности вспышки. При видеозаписи авто-регулировка подсветки обычно не используется вообще, т.к. от подсветки полностью меняется картина кадра, а не просто яркость. А если Вы собрались человека так снимать, то точечная подсветка (если это видимый свет) ему будет вообще не в кайф. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 242 20 марта Опубликовано 20 марта · Жалоба 4 часа назад, repstosw сказал: Пока смотрю на P- коэффициент. Остальные I,D пока задал нулевыми. Какой же это ПИД? Это не ПИД. 4 часа назад, repstosw сказал: И ещё, если P-коэффициент делать большим, то выходит осцилляция - лицо человека отражает яркий свет на камеру и получается вспышки интервалом 0,3 с. Как избежать этого ? Ну если уж решили делать ПИД, так и делайте его. Или хотя-бы ПИ-регулятор. Как раз интегральная составляющая и должна бороться с осцилляциями. Так как играет роль сглаживающего звена, задержки. PS: Вообще - зря не последовали моему первому совету и сразу решили идти к ПИД. ПИД используют там, где ничего другое невозможно, так как неизвестна зависимость между управляющим воздействием и результатом. И больше нечего делать, только так. Естественно поэтому такой метод будет заведомо хуже работать, чем метод использующий известную зависимость y=f(x). ПИД - это подгонка результата с желаемому, которая естественно работает хуже прямого решения (если таковое имеется). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Джеймс 4 20 марта Опубликовано 20 марта · Жалоба 11 hours ago, repstosw said: Камера может возвращать среднюю освещённость кадра. А что под этим понимается? 11 hours ago, repstosw said: Вопрос собственно: возможно ли сделать динамическое освещение Так а в самой камере есть автоматическая экспозиция? /это комбинация "'электронного затвора" (shutter) и усиления/ Или камера всегда работает с фиксированными, задаваемыми вручную, параметрами shutter-а и усиления? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
repstosw 18 21 марта Опубликовано 21 марта · Жалоба 8 hours ago, alexvu said: А если Вы собрались человека так снимать, то точечная подсветка (если это видимый свет) ему будет вообще не в кайф. Этот вопрос решён применением специальной рассеивающей линзы. 1 hour ago, Джеймс said: А что под этим понимается? Target image luminance average value (AVG). 6 hours ago, jcxz said: PS: Вообще - зря не последовали моему первому совету и сразу решили идти к ПИД. Попробую вашу формулу. Есть какие-либо рекомендации по подбору или расчёту коэффициентов K1,K2 ? Если известен диапазон ШИМ и диапазон показаний камеры. 1 hour ago, Джеймс said: Так а в самой камере есть автоматическая экспозиция? /это комбинация "'электронного затвора" (shutter) и усиления/ Или камера всегда работает с фиксированными, задаваемыми вручную, параметрами shutter-а и усиления? Точно не знаю, но скорее всего есть. Но в темноте я получаю чёрный квадрат с камеры. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
repstosw 18 21 марта Опубликовано 21 марта (изменено) · Жалоба 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 остаётся открытым Изменено 21 марта пользователем repstosw Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться