- RoboCraft
- 0 комментариев на «“Датчик цвета из RGB-светодиода и фотоэлемента — реальная фотошоповская пипетка”»
- Ардуино: датчик цвета
- Как работает датчик цвета
- Подключение датчика к Ардуино
- Демонстрация работы датчика
- Как сделать датчик цвета
- Детектор цвета на Arduino Uno
- Необходимые компоненты
- Работа схемы и программы
- Исходный код программы
- Распознавание цвета с помощью Arduino и TCS 3200
- Комплектующие
- Идея проекта
- Сенсор цвета TSC 3200
- Схема соединения
- Код Ардуино для распознавания цвета
- Итоговый результат (видео)
RoboCraft
Про самодельный датчик цвета мы уже писали, так что идея использовать RGB-светодиода (или нескольких цветных светодиодов) для поочерёдного освещения объекта и считывания на фоторезисторе напряжения с последующим выбором наилучшего отклика — не нова.
Однако, попытка сделать реальную «фотошоповскую пипетку» (Eyedropper) продолжает ждать своего воплощения 🙂
real world eyedropper: color sensing for the arduino
код Processing-а для визуализации:
остаётся реализовать это в виде плагина для фотошопа или GIMP-а 😉
0 комментариев на «“Датчик цвета из RGB-светодиода и фотоэлемента — реальная фотошоповская пипетка”»
Интересна точность получаемого цвета. И можно ли использовать его в качестве фотоспектрометра для подбора краски, к примеру, в автопокрасочных?
думаю, для этого лучше использовать web-камеру 🙂
Ни в коем случае. Обычные светодиоды не дают нормальных RGB-цветов — можно собрать несложное устройство и сравнить получаемый цвет с его изображением на экране.
Если уж так хочется сделать спектрофотометр своими руками, необходимо использовать датчик из любого недорогого калибратора цвета — цена примерно 3500-5000р (дорогие начинаются от 12-15) и эталонный источник освещения. А описанный девайс сможет только различать принципиально разные цвета, без мельчайших оттенков.
Может быть датчик можно сделать точнее, если использовать белый светодиод (или лучше какой-либо другой источник с более белым светом) и 3 фоторезистора\транзистора\диода с R,G и B фильтрами соответственно?
Источник
Ардуино: датчик цвета
В одном из предыдущих уроков — Ардуино: трехцветный светодиод — RGB — мы разобрали, что такое RGB и научились работать с трёхцветным светодиодом. В этом уроке мы разберёмся, как работать с датчиком цвета, научим нашу Ардуино распознавать красный, синий и зелёный и выведем полученные данные при помощи RGB-светодиода!
Как работает датчик цвета
Датчик TCS230, расположенный в центре платы, состоит из фотодиодов четырёх типов: 16 фотодиодов с красным фильтром, 16 фотодиодов с зелёным фильтром, 16 фотодиодов с синим фильтром и 16 фотодиодов без светофильтра . К датчику подносят образец одного из трёх цветов — красного, зелёного или синего. Образец освещается светодиодами на плате вокруг датчика. Датчик имеет преобразователь тока в частоту, он преобразует показания фотодиодов в квадратную волну с частотой, пропорциональной интенсивности света выбранного цвета. Эта частота затем считывается Arduino.
Распиновка на плате с датчиком TCS230 имеет следующее значение:
- GND – земля;
- OE – контакт включения;
- S1, S0 – настройка масштабирования частоты импульсов.
- S3, S2 – входной сигнал настройки фильтра;
- OUT – выходная частота;
- VCC – напряжение питания.
Для определения цвета, который будет считываться фотодиодами, датчик TCS230 оснащен контактами S2 и S3. Поскольку фотодиоды подключены параллельно, разные типы фотодиодов можно выбирать, переключая контакты S2 и S3 в разные комбинации состояний HIGH и LOW. Правила выбора этих комбинаций для нужных нам цветов следующие:
Тип фотодиода | S2 | S3 |
Красный | LOW | LOW |
Синий | LOW | HIGH |
Без фильтра (чистый) | HIGH | LOW |
Зеленый | HIGH | HIGH |
Контакты S0 и S1 используются для масштабирования выходной частоты. Ее можно масштабировать до трех заранее заданных значений: 100%, 20% и 2%. Масштабирование частоты используется для разных микроконтроллеров, чтобы оптимизировать данные, считанные датчиком.
Масштабирование частоты | S0 | S1 |
Отключение | LOW | LOW |
2% | LOW | HIGH |
20% | HIGH | LOW |
100% | HIGH | HIGH |
Для Ардуино мы будем использовать масштабирование 20%.
Подключение датчика к Ардуино
Для визуального отображения определяемого цвета мы воспользуемся RGB-светодиодом. Схема должна работать следующим образом: к датчику подносят образец выбранного цвета и на светодиоде загорается тот же цвет.
TCS230 | GND | VCC | OUT | S0 | S1 | S2 | S3 |
Arduino Uno | GND | +5V | 8 | 4 | 5 | 6 | 7 |
Принципиальная схема:
Внешний вид макета:
Программа:
Когда мы запустим программу и откроем монитор порта на скорости 9600 бод, то при поднесении к датчику образца мы увидим значения для каждого из трёх цветов и сообщение о том, какой цвет выбран. Следует заметить, что в случае, если сообщение о цвете не соответствует реальному цвету, то необходимо подредактировать значения частот в программе, подстраивая их по значениям R, G и B в мониторе порта:
Демонстрация работы датчика
Внешний вид нашего макета:
Источник
Как сделать датчик цвета
Детектор цвета на Arduino Uno
В этом проекте мы будем подключать датчик цвета TCS3200 к плате Arduino UNO. TCS3200 представляет собой датчик цвета способный обнаруживать любое количество цветов при правильном программировании. TCS3200 содержит массив RGB (красный зеленый синий). Как показано на рисунке ниже под микроскопом на данном датчике можно рассмотреть квадратные элементы на «глазе» датчика. Эти квадратные элементы представляют собой массивы RGB матрицы. Каждый из этих квадратных элементов содержит 3 датчика: один для определения интенсивности красного цвета, второй для определения интенсивности зеленого цвета и третий для определения интенсивности синего цвета.
К каждому из этих элементов массива можно обратиться по отдельности в зависимости от ваших потребностей, поэтому TCS3200 и называют программируемым датчиком. Его можно запрограммировать чтобы он обнаруживал только один определенный цвет и игнорировал остальные цвета. Для этой цели он содержит в своем составе соответствующие фильтры. Существует еще специальный режим без фильтров (forth mode) – в этом режиме датчик обнаруживает белый цвет.
Необходимые компоненты
- Плата Arduino Uno (купить на AliExpress).
- Датчик цвета TCS3200 (купить на AliExpress).
- ЖК дисплей 16х2 (JHD_162ALCD) (купить на AliExpress).
- Светодиод (купить на AliExpress).
- Источник питания с напряжением 5 В.
Работа схемы и программы
В ЖК дисплее 16×2 мы имеем 16 контактов, без использования черного цвета можно использовать 14 контактов. Контакты черного цвета можно запитать или оставить «пустыми». То есть из 14 контактов мы имеем 8 контактов данных (7-14 или D0-D7), 2 контакта питания (1&2 или VSS&VDD или GND&+5v), 3-й контакт для управления контрастностью (VEE-controls определяет насколько толстыми будут выглядеть символы на экране дисплея) и 3 контакта управления (RS&RW&E).
В схеме мы использовали только 2 контакта управления ЖК дисплея. Контакт контраста и контакт READ/WRITE используются редко поэтому в нашем случае их можно просто замкнуть на землю. Это обеспечивает ЖК дисплею максимальную контрастность и переводит его в режим чтения данных. В этом случае нам будет необходимо только управлять контактами ENABLE и RS чтобы передавать на ЖК дисплей символы и данные.
В схеме необходимо будет сделать следующие соединения платы Arduino с ЖК дисплеем:
PIN1 или VSS на землю
PIN2 или VDD или VCC к источнику питания +5 В
PIN3 или VEE на землю (обеспечивает ЖК дисплею максимальную контрастность – удобно для начинающих)
PIN4 или RS (Register Selection – выбор регистра) к контакту PIN8 платы ARDUINO UNO
PIN5 или RW (Read/Write) на землю (переводит ЖК дисплей в режим чтения что упрощает взаимодействие с ним для начинающих)
PIN6 или E (Enable) к контакту PIN9 платы ARDUINO UNO
PIN11 или D4 к контакту PIN7 платы ARDUINO UNO
PIN12 или D5 к контакту PIN11 платы ARDUINO UNO
PIN13 или D6 к контакту PIN12 платы ARDUINO UNO
PIN14 или D7 к контакту PIN13 платы ARDUINO UNO
С датчиком цвета необходимо сделать следующие соединения:
VDD к источнику питания +5V
GND на землю
OE (output Enable) на землю
S0 к контакту pin 2 платы Arduino
S1 к контакту pin 3 платы Arduino
S2 к контакту pin 4 платы Arduino
S3 к контакту pin 5 платы Arduino
OUT к контакту pin 10 платы Arduino
Схема устройства представлена на следующем рисунке.
Цвет, который необходимо будет обнаруживать (детектировать), выбирается с помощью двух контактов — S2 и S3. С помощью этих двух контактов мы можем сообщить датчику интенсивность какого цвета ему необходимо измерять.
Если нам необходимо измерять интенсивность красного цвета (RED), то на эти два контакта необходимо подать низкий уровень. В этом случае датчик будет измерять интенсивность красного цвета и передавать это значение на плату контроля, находящуюся внутри датчика.
Необходимые значения сигналов на этих контактах для обнаружения других цветов представлены в следующей таблице.
S2 | S3 | Photodiode Type |
L | L | Red (красный) |
L | H | Blue |
H | L | Clear (нет фильтра) |
H | H | Green (зеленый) |
Управляющая система внутри модуля датчика представлена на следующем рисунке. Интенсивность цвета, измеряемая массивом фоточувствительных элементов, передается на конвертер частоты, который выдает на выход прямоугольную волну, чья частота пропорциональна значению постоянного тока, поступающего с массива фоточувствительных элементов.
Таким образом, мы имеем систему, которая выдает на выход прямоугольную волну, частота которой зависит от интенсивности цвета, выбранного с помощью контактов S2 и S3.
Частота этой прямоугольной волны может быть отмасштабирована в соответствии с нашими потребностями. В следующей таблице представлены возможные коэффициенты масштабирования.
S0 | S1 | Output Frequency Scaling (f0) |
L | L | Power Down |
L | H | 2% |
H | L | 20% |
H | H | 100% |
Частота масштабирования устанавливается с помощью битов (контактов) S0 и S1. Для удобства в нашем проекте мы применим коэффициент масштабирования 20%. Это делается при помощи подачи на S0 высокого уровня, а на S1 – низкого. Возможность применения масштабирования этой частоты особенно полезна когда мы имеем дело с системами с низкой частотой.
Чувствительность массива элементов к определенным цветам показана на следующем рисунке.
Хотя разные цвета имеют разную чувствительность для обычного использования это не имеет значения.
В представленной схеме плата Arduino Uno передает сигнал на датчик цвета для обнаружения цвета и затем данные, получаемые датчиком цвета, отображаются на ЖК дсиплее.
Плата Arduino Uno по отдельности детектирует (обнаруживает) интенсивность трех цветов и показывает ее на ЖК дисплее.
Плата Arduino Uno может измерять длительность импульсов прямоугольной волны с выхода датчика цвета и, таким образом, измерять частоту этой прямоугольной волны. А, зная эту частоту, мы можем определить интенсивность нужного нам цвета.
Int frequency = pulseIn(10, LOW);
С помощью этой команды плата Arduino Uno считывает продолжительность импульса на своем 10-м контакте и сохраняет ее в переменной целого типа “frequency”.
Мы будем делать эту операцию для распознавания всех трех цветов и затем показывать интенсивность этих цветов на экране ЖК дисплея.
Исходный код программы
Далее представлен полный текст программы, комментарии к отдельным командам поясняют их назначение.
Распознавание цвета с помощью Arduino и TCS 3200
Рассмотрим как обнаруживать и распознавать цвета с помощью Arduino, датчика TCS 3200, и как отображать всё на ЖК-дисплее.
Комплектующие
Ниже перечислим детали, которые используются в этом проекте, чтобы с помощью Ардуино распознавать цвета.
Оборудование
- Arduino Nano × 1
- Модуль датчика цвета TCS 3200 × 1
- Стандартный ЖК-дисплей Adafruit — 16×2, белый на синем × 1
- Макет × 1
- Перемычки
Идея проекта
Это простое руководство, в котором мы рассмотрим, как считывать цвета, используя Arduino и сенсоры, такие как TCS 3200. Идея будет заключаться в том, чтобы обнаружить цвет объекта и отобразить это на ЖК-дисплее.
Этот проект в будущем будет прототипом более крупного проекта, который будет представлять собой манипулятор робота, который выбирает правильное действие в зависимости от цвета объекта. Приведенная выше блок-схема показывает основные компоненты.
В итоге процесс работы данного устройства по распознаванию цвета вы сможете увидеть на видео в конце урока.
Сенсор цвета TSC 3200
Как описано в техническом описании, TCS3200 является программируемым преобразователем цветового света в частоту, который сочетает в себе настраиваемые кремниевые фотодиоды и преобразователь тока в частоту на одной монолитной интегральной схеме CMOS.
На выходе получается прямоугольная волна (коэффициент заполнения 50%) с частотой, прямо пропорциональной интенсивности света (освещенности). Полномасштабная выходная частота может быть масштабирована одним из трех предустановленных значений с помощью двух управляющих входных контактов (S0 и S1).
Цифровые входы и цифровой выход обеспечивают прямой интерфейс с микроконтроллером или другими логическими схемами.
Разрешение выхода (OE, Output enable) переводит выход в состояние высокого импеданса для совместного использования нескольких входных линий микроконтроллера. В TCS3200 преобразователь света в частоту считывает матрицу 8 x 8 фотодиодов.
- 16 фотодиодов имеют синие фильтры
- 16 фотодиодов имеют зеленые фильтры
- 16 фотодиодов имеют красные фильтры
- 16 фотодиодов без фильтров.
Контакты S2 и S3 используются для выбора активной группы фотодиодов (красный, зеленый, синий, прозрачный). Фотодиоды имеют размер 110 х 110 мкм и расположены на 134-мкм центрах.
OE (Enable) должен быть подключен к GND (LOW).
Датчик инкапсулирован и должен питаться от 2,7 до 5,5 В постоянного тока. Мы будем использовать выход Arduino 5 В для питания датчика. Чтобы правильно использовать датчик, мы установим небольшое резиновое кольцо, чтобы изолировать датчик от бокового света. Мы использовали горячий клей для этого.
Схема соединения
Вы можете скачать файл схемы для программы Fritzing ниже:
Соединяем сенсор TSC3200 с Ардуино следующим образом:
Соединяем I2C LCD 2/16 ЖК-дисплей:
Установите Arduino Nano на макетную плату. Подключите выход Nano 5V и GND к обеим силовым шинам.
Код Ардуино для распознавания цвета
Первое, что нужно определить, — это масштабирование частоты, как определено в приведенной выше таблице. Для этого используются контакты S0 и S1. Масштабирование выходной частоты полезно для оптимизации показаний датчиков для различных частотных счетчиков или микроконтроллеров. Мы установим S0 и S1, оба в HIGH (100%):
Следующее, что нужно сделать, это выбрать цвет, который будет считываться фотодиодом (красный, зеленый или синий), для этого мы используем управляющие контакты S2 и S3. Поскольку фотодиоды подключены параллельно, настройка S2 и S3 LOW и HIGH в разных комбинациях позволяет выбирать разные фотодиоды, как показано в таблице выше.
В окончательном коде мы несколько раз прочитаем каждый из компонентов RGB и возьмем среднее значение, чтобы мы могли снизить ошибку, если одно из показаний неверное.
Когда у нас есть 3 компонента (RGB), мы должны определить, какой это цвет. Чтобы сделать это, нужно предварительно откалибровать проект. Вы можете использовать известную цветную тестовую бумагу или объект и прочитать 3 сгенерированных компонента.
Вы можете изначально использовать наш код, изменив параметры для вашего уровня освещенности:
Как вы можете видеть выше, мы предопределили 6 цветов: белый, черный, красный, зеленый, желтый и синий. По мере того, как рассеивается окружающий свет, параметры становятся все выше. Внутри цикла loop() мы определяем показания на ЖК-дисплее каждую 1 секунду.
Все программы, которые нужны для проекта и библиотеки вы можете найти в архиве ниже:
Итоговый результат (видео)
В итоге наш проект Ардуино распознавание цвета работает следующим образом:
Источник