Датчики цвета
Принцип работы датчиков цвета основан на методе определения трех цветов. Датчик излучает три цвета (красный, синий, зеленый), рассчитывает хроматичность и насыщенность отраженного луча и сравнивает полученные результаты с ранее заданными значениями цветовых координат. Если результаты сравнительного анализа находятся в пределах допустимых отклонений, генерируется выходной электрический сигнал.
Датчики SICK позволяют измерять цветность как непрозрачных объектов (посредством отраженного излучения), так и прозрачных материалов (посредством проходящего света) при использовании отражателя. Также, датчики воспринимают цвета блестящих объектов, не обладающих цветностью при отраженном излучении. Данная проблема может быть решена посредством изменения наклона датчика.
Детектируемый цвет (от одного до трех) программируется в режиме teach-in, где также задается и возможный уровень отклонения от цвета. Датчики цвета выпускаются в прочных металлических корпусах и соответствуют всем промышленным стандартам безопасности.
Датчики одного цвета
| Наимен. | Расст. сканир-я, мм |
Размер свет. пятна, мм |
Тип выхода | Частота переклю-чения, кГц | Тип соеди-нения | Док-ция |
|---|---|---|---|---|---|---|
| CSL1-P11 | 9.0 | оптоволоконный кабель | PNP | 1.0 | M12*5-pin | |
| CSL1-N11 | 9.0 | NPN | 1.0 | M12*5-pin | ||
| CS1-N1111 | 12.5 | 2 х 4 | NPN | 1.0 | M12*5-pin | |
| CS1-P1111 | 12.5 | 2 х 4 | PNP | 1.0 | M12*5-pin | |
| CS1-N3611 | 60.0 | D13 | NPN | 1.0 | M12*5-pin | |
| CS1-P3611 | 60.0 | D13 | PNP | 1.0 | M12*5-pin | |
| CS81-N1112 | 12.5 | 4 x 2 | NPN | 1.0, 3.0, 6.0 | M12*5-pin | |
| CS81-P1112 | 12.5 | 4 x 2 | PNP | 1.0, 3.0, 6.0 | M12*5-pin | |
| CS81-N3612 | 60.0 | 13 x 13 | NPN | 1.0, 3.0, 6.0 | M12*5-pin | |
| CS81-P3612 | 60.0 | 13 x 13 | PNP | 1.0, 3.0, 6.0 | M12*5-pin | |
| CSM1-N1114 | 12.5 | 1.5 х 6.5 | NPN | 1.5 | M12*5-pin | |
| CSM1-P1114 | 12.5 | 1.5 х 6.5 | PNP | 1.5 | M12*5-pin | |
Датчики трех цветов
| Наимен. | Расст. сканир-я, мм | Размер светов. пятна, мм | Тип выхода | Частота переклю- чения, кГц |
Тип соеди-нения | Док-ция |
|---|---|---|---|---|---|---|
| CS3-N1132 | 12.5 | 2 х 4 | NPN | 300 | M12*8-pin | |
| CS3-P1132 | 12.5 | 2 х 4 | PNP | 300 | M12*8-pin | |
| CS3-N3632 | 60.0 | D13 | NPN | 300 | M12*8-pin | |
| CS3-P3632 | 60.0 | D13 | PNP | 300 | M12*8-pin | |
Четырехцветные датчики цвета
| Наимен. | Расст. сканир-я, мм | Размер свето-вого пятна, мм | Тип выхода | Частота перек-лючения, кГц | Тип соеди-нения | Док-ция |
|---|---|---|---|---|---|---|
![]() |
||||||
| CS84-N1112 | 12.5 | 4 х 2 | NPN | 0.5, 1.0, 3.5 | M12*8-pin | |
| CS84-P1112 | 12.5 | 4 х 2 | PNP | 0.5, 1.0, 3.5 | M12*8-pin | |
| CS84-N3612 | 60.0 | 13 х 13 | NPN | 0.5, 1.0, 3.5 | M12*8-pin | |
| CS84-P3612 | 60.0 | 13 х 13 | PNP | 0.5, 1.0, 3.5 | M12*8-pin | |
Описание

Датчик цвета позволяет определять цвет поверхности. По сути это два устройства в одном — трехцветный светодиод и датчик освещенности, которые можно использовать по отдельности.

Принцип работы: Датчик цвета имеет два основных компонента -трехцветный (RGB) светодиод, который излучает красный, синий и зеленый свет, а также светочувствительный датчик (фоторезистор), который определяет интенсивность падающего на него света.
Белый свет состоит из всех цветов радуги. Когда свет падает на поверхность, некоторые цвета поглощаются, а некоторые отражаются. Отраженные цвета – это цвета воспринимаемого нами объекта. Для измерения и определения количества цвета с помощью электронной схемы, вам необходимо измерить интенсивность различных длин волн света, отраженного от поверхности. Самый простой способ сделать это – осветить поверхность разными цветами и измерить, какой из цветов поверхность отражает лучше. Измеряя отраженный свет для каждого цвета можно вычислить цвет объекта.
Для улучшения результатов измерений следуйте следующим советам:
Избегайте попадания на фоторезистор прямых лучей и яркого света
Располагайте датчик так, чтобы фоторезистор был максимально в тени
Не производите измерения постоянно, делайте между измерениями небольшие паузы.
Составляйте программу так, чтобы измерения начинались тогда, когда объект в поле зрения датчика и не двигается.
Каждое измерение занимает около 0.4 секунды. Если измерение началось, когда в поле зрения был объект одного цвета (или его не было совсем), а закончилось на другом объекте, результат будет с большой вероятностью неверным.
Подносите объект максимально близко к датчику, он может даже упираться в светодиод — так будет максимально изолироваться внешнее освещение.
При конструировании модели помещайте датчик в короб, собранный из конструктора. Это увеличит точность измерения.
Подключение
Датчик использует два стандартных 3-пиновых разъема, однако, подключается не совсем обычно:
Коннектор 1 (без цветового обозначения) подключается в любой из портов IN контроллера «Трекдуино», сигнальный провод этой шины подключен к фоторезистору, поэтому, подключив только эту шину, вы сможете использовать датчик как датчик освещенности.
Коннектор 2 (с цветовой маркировкой) служит для управления трехцветным светодиодом. Каждый из проводов подключен напрямую соответствующему каналу светодиода. Наклейка с цветовой маркировкой на коннекторе указывает, к какому из каналов соответствует каждый из проводов. Подключается в любые три порта OUT и в любые порты IN контроллера «Трекдуино». Подключается горизонтально в верхнюю (сигнальную, «S») линию контактов.. Для того, чтобы использовать только RGB-светодиод, коннектор №1 все равно придется подключить, т.к. земляной провод (GND) общий для светодиода и фоторезистора.


Подключение коннектора 1


Подключение коннектора 2
Программирование
Блоки, необходимые для работы с датчиком цвета, расположены в группе блоков «Датчики».
Калибровка
Каждый раз при перезагрузке программы, использующей датчик цвета, в момент выполнения блока Настройка датчика цвета будет производится калибровка датчика под текущие условия освещения. Процедура калибровки выполняется следующим образом:
Трехцветный светодиод датчика мигнет три раза белым светом. Это означает, что процедура калибровки запущена.
В течение 3 секунд поднесите к датчику любую белую отражающую поверхность, например, белый лист. Через 3 секунды датчик поочередно загорится красным, зеленым, синим цветом.
Как только датчик погаснет, поднесите к датчику любую черную поверхности. У вас есть на это 3 секунды. Через 3 секунды датчик просканирует разными цветами черную поверхность.
Процедура калибровки окончена. Программа выждет 5 секунд и продолжит нормальную работу.
Для удобной работы с датчиком, сделайте 2 карточки 5х8 см. черного и белого цвета.
setupColorSensor(Rpin, Bpin, Gpin, Spin)
int getColor(void)
Ардуино: датчик цвета
В одном из предыдущих уроков — Ардуино: трехцветный светодиод — RGB — мы разобрали, что такое 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 |
Принципиальная схема:

Внешний вид макета:

Программа:
// контакты TCS230 для подключения к Arduino #define S0 4 #define S1 5 #define S2 6 #define S3 7 #define sensorOut 8 // для хранения частоты, считанной фотодиодами int redFrequency = 0; int greenFrequency = 0; int blueFrequency = 0; // для хранения данных о красном, зеленом и синем цветах int redColor = 0; int greenColor = 0; int blueColor = 0; // подключение к контактам rgb-светодиода const byte rPin = 9; const byte gPin = 10; const byte bPin = 11; void setup() < pinMode(S0, OUTPUT); pinMode(S1, OUTPUT); pinMode(S2, OUTPUT); pinMode(S3, OUTPUT); pinMode(rPin, OUTPUT); pinMode(gPin, OUTPUT); pinMode(bPin, OUTPUT); pinMode(sensorOut, INPUT); digitalWrite(S0,HIGH); digitalWrite(S1,LOW); Serial.begin(9600); >void loop() < // считывание данных с фотодиодов с красным фильтром digitalWrite(S2,LOW); digitalWrite(S3,LOW); redFrequency = pulseIn(sensorOut, LOW); // считываем выходную частоту redColor = map(redFrequency, 70, 120, 255,0); Serial.print("R = "); Serial.print(redColor); delay(100); // считывание данных с фотодиодов с зеленым фильтром digitalWrite(S2,HIGH); digitalWrite(S3,HIGH); greenFrequency = pulseIn(sensorOut, LOW); // считываем выходную частоту greenColor = map(greenFrequency, 100, 199, 255, 0); Serial.print(" G = "); Serial.print(greenColor); delay(100); // считывание данных с фотодиодов с синим фильтром digitalWrite(S2,LOW); digitalWrite(S3,HIGH); blueFrequency = pulseIn(sensorOut, LOW); // считываем выходную частоту blueColor = map(blueFrequency, 38, 84, 255, 0); Serial.print(" B = "); Serial.print(blueColor); delay(100); // вывод на светодиод распознанный цвет // вывод в монитор порта сообщение, какой цвет распознан if(redColor >greenColor && redColor > blueColor) < digitalWrite( bPin, LOW ); digitalWrite( gPin, LOW ); digitalWrite( rPin, HIGH ); Serial.println(" - RED detected!"); >if(greenColor > redColor && greenColor > blueColor) < digitalWrite( rPin, LOW ); digitalWrite( bPin, LOW ); digitalWrite( gPin, HIGH ); Serial.println(" - GREEN detected!"); >if(blueColor > redColor && blueColor > greenColor) < digitalWrite( gPin, LOW ); digitalWrite( rPin, LOW ); digitalWrite( bPin, HIGH ); Serial.println(" - BLUE detected!"); >>
Когда мы запустим программу и откроем монитор порта на скорости 9600 бод, то при поднесении к датчику образца мы увидим значения для каждого из трёх цветов и сообщение о том, какой цвет выбран. Следует заметить, что в случае, если сообщение о цвете не соответствует реальному цвету, то необходимо подредактировать значения частот в программе, подстраивая их по значениям R, G и B в мониторе порта:
redColor = map(redFrequency, 70, 120, 255,0); greenColor = map(greenFrequency, 100, 199, 255, 0); blueColor = map(blueFrequency, 38, 84, 255, 0);
Демонстрация работы датчика

Внешний вид нашего макета:
Определение цветов в действии:
Как работает датчик цвета





Введение:
На этом уроке мы продолжаем знакомство с датчиками набора Lego mindstorms EV3. На очереди — датчик цвета, очень важный и полезный датчик! В большинстве конструкций он является, тем, чем у человека являются глаза. Поэтому изучению датчика цвета мы посвятим два последовательных урока, но в дальнейшем курсе еще вернемся к его изучению и использованию.
5.1. Изучаем второй датчик — датчик цвета
Датчик цвета может работать в трех различных режимах:
- в режиме «Цвет» датчик может определить цвет поднесенного к нему предмета;
- в режиме «Яркость отраженного света» датчик направляет световой луч на близкорасположенный предмет и по отраженному пучку определяет яркость предмета;
- в режиме «Яркость внешнего освещения» датчик может определить — насколько ярко освещено пространство вокруг.

Рис. 1
5.2. Датчик цвета. Режим «Цвет»
В режиме «Цвет» датчик цвета достаточно точно умеет определять семь базовых цветов предметов, находящихся от него на расстоянии примерно в 1 см. Это следующие цвета: «черный»=1, «синий»=2, «зеленый»=3, «желтый»=4, «красный»=5, «белый»=6 и «коричневый»=7. Если предмет удален от датчика или некорректно определяется цвет предмета — датчик информирует об этом состоянием «Без цвета»=0.
Давайте, не затягивая, перейдем к практическому занятию!
Задача №9: необходимо написать программу, называющую цвета предметов, подносимых к датчику цвета.
Если вы собирали своего тренировочного робота по инструкции этого курса, то у вас датчик цвета уже размещен внутри робота и направлен вниз. Потребуется приложить некоторые усилия, может быть даже слегка разобрать-собрать нашу конструкцию, чтобы подключить кабелем датчик цвета, например к порту «2» модуля EV3. Для отладки программы нам также понадобится несколько цветных предметов: это могут быть кирпичики конструктора Lego, полоски цветной бумаги или цветные кубики. Для лучшего результата следует взять цвета, максимально приближенные к основным, но датчик довольно неплохо справляется с распознаванием подходящих оттенков. Чтобы не снимать датчик цвета и не крепить его в другом месте, во время выполнения программы можно держать робота перевернутым вверх колесами.

Рис. 2
5.3. Оранжевая палитра, программный блок «Переключатель»
В решении Задачи №9 нам поможет программный блок «Переключатель» Оранжевой палитры. Этот блок в зависимости от настроек выбирает для выполнения программные блоки, расположенные в одном из своих контейнеров. Рассмотрим настройку этого блока в режиме работы с датчиком цвета.
Создадим новую программу «lesson-5-9», установим в программе блок «Переключатель», выберем режим «Датчик цвета» — «Измерение» — «Цвет» (Рис. 3). В отличие от программного блока «Ожидание», программный блок «Переключатель» не ждет, пока наступит определенное событие, а проверяет текущее состояние и выполняет программные блоки, находящиеся в контейнере, сопоставленном текущему состоянию.

Рис. 3
Рассмотрим подробнее настройки программного блока «Переключатель»:
- выбранный режим устанавливает изображение датчика цвета в блоке (Рис. 4 поз. 1),
- порт, к которому подключен датчик, отображается в соответствующем поле блока (Рис. 4 поз. 2),
- в настройках каждого программного контейнера выбирается значение, в соответствии с которым будут выполняться программные блоки, вложенные в этот контейнер (Рис. 4 поз. 3),
- один из контейнеров должен быть объявленным «Вариантом по умолчанию» — в случае, если значению, полученному от датчика, не соответствует ни один контейнер, то выполняется контейнер, объявленный «Вариантом по умолчанию» (Рис.4 поз. 4),
- Кнопка «+» добавляет программный контейнер в блоке «Переключатель» (Рис. 4 поз. 5),
- Программный блок «Переключатель» может автоматически растягиваться, чтобы вместить все блоки, помещаемые внутрь. С помощью меток, помеченных красными стрелками, можно самому изменять размеры блока (Рис.4).

Рис. 4
Продолжим формирование программного блока «Переключатель»:
- создадим необходимое количество контейнеров, соответствующее количеству цветов для распознавания + вариант «Без цвета»,
- в настройках контейнеров установим распознаваемые цвета,
- вариантом по умолчанию выберем вариант «Без цвета»,
- в каждый контейнер кроме варианта «Без цвета» (этот контейнер останется пустым) поместим программный блок «Звук» зеленой палитры.
- каждому цвету сопоставим соответствующий звуковой файл.

Рис. 5
Наш программный блок «Переключатель» значительно увеличился в размерах. Специальная кнопка (Рис. 6 поз. 1) позволяет переключить режим отображения блока на экране на «Вид с вкладками». Изменим размеры блока для комфортного визуального отображения.
![]()
Рис. 6
Осталось вставить наш настроенный программный блок «Переключатель» внутрь программного блока «Цикл» Оранжевой палитры. Программа готова! Загрузим её в робота и протестируем работу! (Рис. 7)
![]()
Рис. 7
5.4. Оранжевая палитра, программный блок «Прерывание цикла»
Добавим в нашу программу движение. Сделаем следующее поле для выполнения задания:
- Возьмем белый лист бумаги формата A4 или A3;
- Нанесем на него последовательно, на равном расстоянии несколько цветных полос. Полосы можно наклеить из цветной бумаги, цветной изоленты или нарисовать и закрасить;
- можете также загрузить подготовленное изображение и распечатать его на цветном принтере;
- Последнюю полосу сделаем черного цвета (Рис. 8).

Рис. 8
Задача №10: необходимо написать программу прямолинейного движения робота, называющего цвета полос, над которыми он проезжает. При достижении черной полосы робот проговаривает «Stop» и останавливается.
За основу решения данной задачи возьмем программу, решающую Задачу №9 . При решении Задачи №10 нам потребуется прервать выполнение цикла. Этой цели служит программный блок «Прерывание цикла» Оранжевой палитры. С помощью данного блока можно организовать выход из цикла, заданного параметром «Имя прерывания» (Рис. 9 поз. 1).

Рис. 9
Попробуйте решить Задачу №10 самостоятельно, не подглядывая в решение.
Решение Задачи №10
- Внутрь цикла перед программным блоком «Переключатель» добавим программный блок «Рулевое управление», тем самым заставим нашего робота двигаться (Рис. 10 поз. 1). Во время движения робот будет проверять текущее состояние датчика цвета и произносить название цвета. Если полоски будут широкими, а робот будет двигаться медленно, то, возможно, он станет произносить название цвета более одного раза, так как проверка цвета будет происходить неоднократно. Если такое положение дел вас не устроит — увеличьте скорость робота, чтобы он быстрее проезжал цветные полосы.
- В соответствии с условием задачи нам надо изменить поведение контейнера программного блока «Переключатель» для черного цвета.
- В программном блоке «Звук» изменим звуковой файл «Black» на «Stop» (Рис. 10 поз. 2).
- Добавим в контейнер программный блок, выключающий моторы (Рис. 10 поз. 3).
- Нам требуется прервать выполнение программного блока «Цикл», чтобы завершить выполнение программы. Для этого поместим в контейнер программный блок «Превывание цикла» Оранжевой палитры (Рис. 10 поз. 4). У данного программного блока существует только одна настройка — название прерываемого цикла. В сложной программе со множеством циклов важно правильно устанавливать эту настройку, чтобы остановить выполнение нужного цикла (Рис. 10 поз. 5). В нашей программе за программным блоком «Цикл» отсутствуют другие программные блоки, поэтому программа завершится.
![]()
Рис. 10
