1$ датчик цвета.
Мои приключения в электронике продолжаются. Разговаривая с другом о цветах, он рассказал мне о датчиках цвета. Позже я вспомнил видео, где умников сортируют, и мне захотелось узнать больше. Просматривая несколько видео, я нашел один с LDR и светодиодом RGB. Говорят, что это не точно. Глядя на различные сборки этих датчиков, я думаю, что часть проблем связана с корпусом, который скрепляет все вместе. У большинства из них между LDR и цветной поверхностью есть большое пространство, у некоторых светодиоды расположены перед LDR... это не работает.
Следует избегать прямого освещения rgb. Чтобы получить хороший однородный цвет, я поставил перед светодиодом белый полупрозрачный кусок пластика.
LDR должен получать только отраженный свет. Поместите датчик поверх белого пластика. Свет должен быть позади LDR!.
Это не может работать для всего. Вы можете использовать его только для определенных поверхностей. Например, я использую глянцевую фотобумагу. Непрозрачный, наверное, лучше. но у меня было немного фотобумаги в принтере, поэтому я напечатал цветовую палитру и черно-белую палитру.
Вам нужно знать больше о Led & LDR. Это в основном проблема. Красный, зеленый и синий, излучаемые светодиодом, не являются на 100% красным, зеленым и синим. LDR не может идеально поглощать все цвета.
Не глядя на другие коды, я подключил этот датчик цвета к Arduino... и измерил, сколько времени ему нужно, чтобы включить разные цвета. Я закончил с 50 мс для каждого цвета. Готово, я просто позволяю LDR печатать некоторые значения на экране. Черное и белое... какой у меня диапазон от черного до белого? Я написал код, в котором он автоматически калибрует черный и белый. В основном я измерял поглощение света на ранее напечатанной черно-белой фотобумаге. Я был действительно впечатлен тем, насколько большой диапазон я мог бы иметь. Из общего диапазона 1023, доступных на Arduino, я выбираю черный около 30-50 для всех цветов и белый около 700. Это означает, что датчик цвета теоретически имеет точность, скажем, средний диапазон 650 для каждого цвета, 650 * 650 * 650 = 274 625 000, около 270 миллионов цветов. Это много... RGB имеет 16 миллионов цветов. Я лично знаю около 5-6 цветов. В этот момент я начал тестировать. чтобы упростить задачу, я поместил на плату еще один RGB-светодиод, а на светодиод — белую пластиковую насадку. Цвета казались уже похожими, но слишком светлыми. Также на темных поверхностях у меня включается светодиод. Затем я уменьшил диапазон примерно на 10% внизу и на 10% сверху. И ничего себе .. цвет выглядит так же. Но давайте посмотрим на цифры. Печать значений rgb на экране дала числа, отличные от тех, которые я измерил... но открытие селектора цветов rgb на экране и его отображение... показало примерно правильный цвет... так что на самом деле это было очень правильно. Даже если мой принтер фотопринтер это не значит, что цвета печатаются правильно. Я никогда не калибровал принтер или монитор... Так что может быть большая разница. Поэтому я попытался откалибровать различные цвета на основе распечатанной палитры. Включил красный свет и уменьшил диапазон зеленого и синего до 0 при включенном красном... то же самое для зеленого и синего. Наконец-то я нашел настоящие проблемы. Красный почти идеален. Синий немного смещен в сторону красного. Зеленому не хватает света? Когда на зеленом мне нужно поставить уровни красного и синего очень низко. Но это сильно снижает точность. Я получаю идеальный красный (255,0,0), синий (0,0,255), зеленый (0,255,0), желтый (255,255,0), фуксия (255,0,255), цвет морской волны (0,255,255). диапазон каждого цвета падает настолько, что в конце я, вероятно, могу измерить только около 10-15 основных цветов. Зеленому не хватает света? Когда на зеленом мне нужно поставить уровни красного и синего очень низко. Но это сильно снижает точность. Я получаю идеальный красный (255,0,0), синий (0,0,255), зеленый (0,255,0), желтый (255,255,0), фуксия (255,0,255), цвет морской волны (0,255,255). диапазон каждого цвета падает настолько, что в конце я, вероятно, могу измерить только около 10-15 основных цветов. Зеленому не хватает света? Когда на зеленом мне нужно поставить уровни красного и синего очень низко. Но это сильно снижает точность. Я получаю идеальный красный (255,0,0), синий (0,0,255), зеленый (0,255,0), желтый (255,255,0), фуксия (255,0,255), цвет морской волны (0,255,255). диапазон каждого цвета падает настолько, что в конце я, вероятно, могу измерить только около 10-15 основных цветов.
Как я могу откалибровать датчик цвета за 1 доллар?
Каждый цвет светодиода немного смещается.
Зеленый не дает достаточно света.
Мой принтер печатал не те цвета.
LDR не считывает правильно каждый цвет (длина волны, свет....)
Я думаю, что где-то существует математический расчет, который позволяет виртуально смещать каждый цвет.
Я разместил это здесь, потому что это обширный вопрос, требующий основ электроники. Хотя я думаю, что большинство проблем можно решить с помощью сложной математической функции, я могу ошибаться и решить проблему с помощью простого затемнения светодиода, добавления дополнительных светодиодов, возможно, фильтрации источника света или просто перемещения датчика вверх или вниз внутри трубки. а если просто поменять резисторы? Во всех случаях требуется инженер-электронщик. То, как светодиоды излучают свет, а датчик поглощает его, связано с индивидуальной длиной волны ... я не инженер-электронщик.
Я думаю, что также стоит спросить из-за того, что датчики цвета обычно не такие уж и дешевые.
Вы пытаетесь сопоставить тройку значений (отклики LDR на ваши светодиоды RGB) с другой тройкой (значения RGB, которые вы использовали для печати цветов на бумаге). Есть множество значений окружающей среды, которые будут влиять на это отображение. ИМО лучшее, что вы можете сделать, это
Убедитесь, что каждый светодиод дает достойный и сравнимый эффект. В зависимости от ваших светодиодов и чувствительности вашего LDR к различным цветам это может означать, что вам придется использовать разные токи (последовательные резисторы) для светодиодов.
Установите калибровочные значения для ваших цветов (как вы это сделали) и используйте их для «линеаризации» значений R, G и B.
Сведите внешние воздействия к минимуму. (вы, кажется, сделали это)
Именно это я использую в качестве упражнения для своих учеников. У меня репутация человека, который не любит своих учеников. Они проходят, когда уверенно различают 3 цвета :) Один лист из этого задания:
1) На самом деле вам не нужно знать точное напряжение для каждого цвета. Просто выберите удобный набор чисел и придерживайтесь его. Скорее всего, вы используете одно напряжение для всех трех светодиодов с разными резисторами для каждого цвета. Вам не нужно использовать одинаковое сопротивление для каждого светодиода. В частности, вы можете использовать меньший резистор на зеленом, чтобы получить большую яркость. Насколько мал? Это будет зависеть от светодиода, и вы ДОЛЖНЫ научиться рассчитывать соотношение между напряжением, током и сопротивлением. Он называется Законом Ома, и этот ответ не место для его преподавания.
2) Вам также не нужно знать точный ответ для LDR. Все, что вам нужно знать, это относительная реакция на разные уровни освещенности каждого цвета. Вы можете сделать это, откалибровав свои ответы. Поскольку вы используете Arduino, не просто включайте и выключайте 3 светодиода, как вы делаете сейчас. Вместо этого используйте ШИМ, чтобы получить разные уровни освещенности, и используйте «стандартную» белую мишень (она стандартна, потому что вы говорите, что это ВАШ стандарт). Управляйте светодиодами с разными уровнями освещенности, равными рабочему циклу ШИМ, и записывайте выходной сигнал LDR. LDR довольно медленные. Я рекомендую увеличить время включения для каждого цвета до 0,1 секунды и измерить показания LDR в конце этого времени. Исходя из этого, вы можете составить таблицу того, сколько света данного цвета соответствует каждому показанию LDR.
3) Вы можете использовать LDR для калибровки выходных светодиодов. Посветите выходным светодиодом в ваш LDR (убедитесь, что окружающий свет не проникает в них с помощью рукава вокруг них). Переведите выходные светодиоды на разные уровни и запишите выходной сигнал LDR. Вы можете использовать это для компенсации выходного сигнала, чтобы для заданного показания LDR датчика вы получали такое же показание, когда LDR смотрит на выходной сигнал.
4) Наконец, вы никогда не сможете получить идеальный отклик в реальном мире, особенно с вашей настройкой. Подумайте, что произошло бы, если бы ваш образец цвета был чисто желтым. Он отражает только желтый цвет, поэтому не будет реагировать ни на один из ваших трех светодиодов, а датчик сообщит, что он черный. В этом случае хорошо, что ваши светодиоды не являются чистыми цветами, и что очень немногие реальные материалы обладают сверхчистым отражением цвета. Как бы то ни было, человеческий глаз не имеет чрезвычайно избирательных цветовых рецепторов. Из http://en.wikipedia.org/wiki/Color_vision вы можете видеть, что между тремя типами рецепторов существует много совпадений цветов. И просто для того, чтобы сделать жизнь интереснее, есть некоторые цвета, которые просто невозможно воспроизвести с помощью 3-х цветных светодиодов, например, коричневый.
геометрический
кокко
кокко
кокко
Спехро Пефхани
кокко
Мэтт Янг