![]() |
![]() |
#1 |
Senior Member
Регистрация: 14.06.2015
Адрес: СССР
Сообщений: 122
Вес репутации: 0 ![]() |
![]()
Примерно такой: http://duino.ru/Datchik-cveta.html
Пример программы на arduino.cc можно использовать исключительно в ознакомительных целях, поскольку подсчет частоты прерываниями нормально работает только в отсутствии иных прерываний (millis(), delay(), Serial, etc. !), а если учесть что датчик генерит частоты в диапазоне 10-600_000гц, то надо помнить что отклик на прерывание длится до 50 тактов МК .. то есть начиная с частот в 200-300кГц - гарантированы пропуски в подсчетах частоты даже при отсутствии иных событий. Замечания по датчику и программе, если кто захочет его использовать в своих проектах: 1. Чем выше режим частоты (2%, 20%, 100%), тем шустрее определение цветов. Как-бы понятно, что желательно выставлять s0=s1=1; 2. В переводе на люксы, сам датчик вполне тянет на измерительный прибор: шумы не более 0.1-0.2лк (2-10гц), диапазон измерений 0.4 - 12000лк, и при неравномерности 0.2% рабочий диапазон в районе 100-1000лк (типовое освещение внутри помещений) что само по себе очень даже нефигово. Какие люксы и когда - есть табличка в википедии: "освещенность", их очень любят фотографы. Перевод примерен поскольку зависит от спектра сигнала; 3. Высокая чувствительность всех(!) каналов к ИК засветке .. которую производят светодиоды платы тоже. Применение без ИК отсекающего светофильтра - проблематично. Есть версии с отсекающим ИК фильтром; 4. Высокая засветка от своих же светодиодов. Применение без изолирующей трубки - проблематично. Есть версии с защитой от засветки (и фильтром); 5. Отсутствие управления светодиодами. По-хорошему, надо бы включать светодиоды того цвета (ставить управляемые мультиколор на плату), замер которого производится согласно ногам s2,s3. Тем более, что сам прибор имеет режим энергосбережения, но таковых не встречал вовсе; 6. Замер на прерываниях полезен только как демо-режим. Ибо реакция на него у ардуино около 50тактов, что может дать "пропуски" в подсчете уже с 2-3тыс. люксов. Есть 2 способа: считать частоту счетчиком по внешнему входу или считать длину периода счетчиком по сигналу ICP аппаратно; 6. Замер периода даст ошибку подсчета начиная с частоты 160кГц (100%) более 1% даже с базовой в 16Мгц - т.е. полезен только на слабых освещенностях; 7. Подсчет импульсов даст ошибку в 1% на частотах ниже 100гц для 10мсек интервала; 8. Фильтры имеют "перекрытие", которое надо вычитать с учетом относительной яркости каналов (от белого) .. что усложняет программу замера; 9. Датчик "дрожит" (даташит), что требует усреднения нескольких замеров, и соответственно снижает скорость получения результатов; 10. Светодиоды на плате посажены "на корпус", что не позволяет сосредоточить их освещение на нормальном расстоянии от датчика, а "в дали" яркость освещения падает согласно квадрату расстояния - что резко снижает полезность подсветки; В целом, для нешустрых измерений (500мсек - 5мсек от освещенности) и, с учетом вышеизложенного, вполне может использоваться как чувствительный прибор (0.4-12_000лк) для домашнего применения с точность до 0.5%, что очень немало. Наиболее полезен адаптивный алгоритм измерений, который по замеру уровня белого будет принимать решение о способе измерений остальных каналов и количестве попыток усреднения в зависимости от интегральной яркости белого. А также будет приводить полученные значения к "очищенным" результатам согласно данным о фильтрах в даташите. В этом случае, можно будет реализовать скорость получения результатов согласно текущей освещенности при сохранении заявленной точности и линейности самого прибора. Всякие примитивные алгоритмы "на прерываниях" - только как проверка работоспособности самого прибора. Последний раз редактировалось Arhat109; 09.03.2016 в 09:06. |
![]() |
![]() |
![]() |
#2 |
Senior Member
Регистрация: 14.06.2015
Адрес: СССР
Сообщений: 122
Вес репутации: 0 ![]() |
![]()
Вау! Оно работает! Сделал обработку датчика через таймер и обратил матрицу цветового баланса из средних значений даташита, заодно отмасштабировал к люксам.
Итог: точность определения цвета ожидаю в районе 1%. Надо искать на чем поверить. |
![]() |
![]() |
![]() |
#3 |
Administrator
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,618
Вес репутации: 9824 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
![]()
А спектр или температуру света, сможет определять?
|
![]() |
![]() |
![]() |
#4 |
Senior Member
Регистрация: 14.06.2015
Адрес: СССР
Сообщений: 122
Вес репутации: 0 ![]() |
![]()
Нет конечно же. Он же RGB только. Мне он нужен был для "самокатных тележек" и всяческих "хватательных ручек" для определения цвета "куда ехать и что хватать/куда класть".
![]() Обжегшись с датчиками линии/препятствия, тут подошел основательно и оказалось, что прибочик очень даже ничего себе. Получать цвет в виде составляющих RGB вполне можно с точностями в 1% и хорошей линейностью по освещенности. Например можно сделать пипетку для фотожабы .. или какой фонарь-хамелеон как повторитель цвета. Кстати, оказалось что "зеленая бумажка" из детских наборов может быть вовсе и не зеленой даже .. датчик её опознает как сильно серо-зеленую, особенно под своим освещением. Ну и ещё: пытался выйти в режим насыщения засветив датчик хорошим фонариком на обыкновенной лампочке накаливания, прямо "в морду" .. фиг-то там! Показал уровни в районе 8-10 тыс. люксов, но признака "пересвет" (частота с датчика выше 550кГц) так и не выдал. Неплохо определяет цвет предметов и при очень слабой освещенности - в темноте зажег обыкновенную свечку. Берет цвет на расстоянии около 5-10см от свечи - очень устойчиво. ![]() P.S. под свечкой, его собственные светодиоды закрывались бумажкой "напрочь". Последний раз редактировалось Arhat109; 10.03.2016 в 14:55. |
![]() |
![]() |
![]() |
#5 | |
Administrator
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,618
Вес репутации: 9824 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
![]() Цитата:
|
|
![]() |
![]() |
![]() |
#6 |
Senior Member
Регистрация: 14.06.2015
Адрес: СССР
Сообщений: 122
Вес репутации: 0 ![]() |
![]()
Ну .. тогда не знаю. Вчера сделал "эталонные" цвета на мониторе (255,0,0), (0,255,0) и т.д., без подсветки родными светодиодами и, с удивлением обнаружил, что восстановление баланса белого через обратную матрицу дает резко заниженное значение для зеленого канала и почти вдвое завышенное для синего. При том, что прямые данные о частоте - на белом идут куда как ровней .. ни чё не понял.
Гуглил, но толком ничего не нашел. Может я "что не так сделал"? В даташите есть доли в % от белого на монохромное излучение в каналах по каждому каналу .. то бишь каков будет отклик каналов на тот или иной монохром .. матрица чувствительности датчиков по каналам. Для восстановления верного цвета посчитал обратную матрицу и проверил на тестовых данных - восстановление исходного цвета в пределах 1% (целочисленная арифметика и сдвиговые операции и только, к-ты округлены до 1/32) .. а на практике получается такая вот фигня .. или это у меня монитор так "откалиброван"? Да, и освещение белого листа офисной бумаги родными светодиодами с комнатным освещением обычной лампой накаливания в смеси тоже дает провал в зеленом (почти в 2 раза) и избыток синего (в 1.25) .. Пришлось корректировать по белому листу, уже после вычислений по обратной матрице. После чего экранные пробы стали давать приемлемые результаты. Время подсчета частоты выбрано таким, что дает ошибку не более 0.5%, ошибки восстановления баланса - 1%, усреднение датчиков - 4 замера, снижение дрожания в 2 раза .. и такая фигня с балансом.. монитор стоит на R=50%, G=50%, B=50%. Что я сделал не так? P.S. Да, фонарик помощнее таки засвечивает датчик "на ура", при этом частота его растет, доходил до 1.5Мгц. Цвета различает очень устойчиво, начиная с 5-6лк., но на таких величинах разница очень невелика, но есть и устойчива. От своих светодиодов создает интергальнцую освещенность на расстоянии 1.5-3см в районе 800лк., что более чем достаточно для относительно скоростной работы, при моих режимах усреднения - около 32мс на замер. Маловато для движения по линии, но для прочих работ - очень даже ничего. Последний раз редактировалось Arhat109; 11.03.2016 в 07:18. |
![]() |
![]() |
![]() |
#7 |
Administrator
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,618
Вес репутации: 9824 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
![]()
У монитора есть частота обновления, может быть она как то влияет на замер?
|
![]() |
![]() |
![]() |
#8 |
Senior Member
Регистрация: 14.06.2015
Адрес: СССР
Сообщений: 122
Вес репутации: 0 ![]() |
![]()
Врядли. После восстановления цветов по обратной матрице чувствительностей получается систематический провал в зеленом и избыток синего, но чистота цветов заметно выше, примерно так, на память:
1. Прямой цвет без коррекции у квадратов на мониторе (255,0,0), (0,255,0),(0,0,255),(255,255,0)..: Красный: 55,12,17; Зеленый: 15,45,18; Синий: 15,12,75 .. и т.д. 2. После коррекции по обратной матрице: Красный: 48,2,5; Зеленый: 1,25,3; Синий: 2,0,70 .. и т.д. особенно фиолетовый (255,0,255): 48,-1,68! 3. Корректировка баланса белого после коррекции: Красный: 50,1,2; Зеленый: 2,50,3; Синий: 1,0,50 То есть после коррекции цветов по обратной матрице общая фоновая засветка существенно ниже и последующая корректировка баланса белого по имеющемуся освещению - не ухудшает результат в целом. Да, белый квадрат на мониторе в последнем случае дает примерно такие чиселки: 50,49,48 очень стабильно. Пересчетные к-ты баланса белого вычислялись по белому листу офисной бумаги, освещенному светодиодами + в комнатым освещением с исходными чиселками типа таких: W=577, R=141, G=71, B=221, и после корректировки: (577,185,186,184) В темноте имеем такие значения на красной бумаге: W=6-8, R=3-4, G=0-1, B=0-2 достаточно надежно и стабильно. Белый канал (W) масштабирован к люксам (примерно) из соображений даташита: 47.2мквт/кв.см (=325лк) дает частоту белого 15.6кГц (*20 = 312 = *(16+4)! вот с этим занижением и сделано, дабы не считать float). И далее каждый микроватт (0.146лк) дает 330 герц частоты. В общем, решил забить. Для моих целей вполне достаточно, разве что ещё добавлю повышение цветовой контрастности путем вычитания 1/4(1/2,1/8..) от канала с наименьшей яркостью из всех. Будет полезно, поскольку в боевых условиях всегда будет присутствовать общая фоновая засветка. Ну и добавить блокировку отрицательных чиселок цветах в каналов. Да, и ещё: нестабильность показаний при неизменных условиях не превышает 2-4 на уровнях 600,200,200,200, что дает ошибку около 0.5% в яркостном канале и 2% в цветовых. По-моему на этом можно остановиться. ![]() Последний раз редактировалось Arhat109; 11.03.2016 в 11:12. |
![]() |
![]() |
![]() |
#9 |
Moderator
Регистрация: 20.07.2014
Адрес: МСК
Сообщений: 991
Вес репутации: 1031 ![]() ![]() ![]() |
![]()
Мысль: а не попробовать ли на солнышке? Комнатное освещение лампами накаливания? У светодиодов в подсветке монитора спектр тоже не идеален.
Вопрос-просьба: А можно ли с его помощью заснять рассвет в ясную погоду(желательно в сельской местности, чтоб без паразитной засветки)? Интервал снятия показаний 1 раз в минуту более чем достаточный. Данные нужны для исскуственного рассвета А для полноты картины и закат. |
![]() |
![]() |
![]() |
#10 |
Senior Member
Регистрация: 14.06.2015
Адрес: СССР
Сообщений: 122
Вес репутации: 0 ![]() |
![]()
На солнышке - проблематично пока: когда приезжаю с работы - его уже нет.
![]() Заснять динамику изменения освещенности в цвете для рассветов - наверное можно, но в это время я - сплю. Совсем сплю. Хотите, делайте сами. Это та тестовая программа замеров датчика для Ардуино Мега2560, которую "мучал" (последняя версия): PHP код:
Либа, которой пользуюсь - самописная, тут есть про неё тема. Последнюю версию можно брать с гитхаба. Но, там тоже по большей части всё типовое, заменить на wiring, думаю труда не составит. Вот так выглядит один датчик с нашей мегой, в оформлении "Ардуино для Лего": ![]() ![]() Сама ардуинка давно уже одета в лего-детальки и на фото видно, что возле ШИМ-ног допаяны разъемы для прямого подключения серводвигателей, а возле 14-21 ног допаяны линии питания для подключения разных датчиков напрямую. Также видны развязочные конденсаторы, дабы стабилизировать питание от батареек при работе моторов. |
![]() |
![]() |
![]() |
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1) | |
|
|