Датчик цвета TCS230
Товары
Модуль датчика TCS230 предназначен для определения цвета предмета.
Содержание
- Обзор датчика
- Технические характеристики
- Подключение к Arduino
- Пример использования
- Часто задаваемые вопросы
Обзор датчика света
Модуль датчика TCS230 (рис. 1) предназначен для определения цвета предмета.
Рисунок 1
Микросхема TCS230 преобразует интенсивность цветового спектра в сигнал различной частоты (рис. 2). Интенсивность цветового спектра обратно пропорциональна частоте выходного сигнала.
Рисунок 2
Микросхема TCS230 для определения цвета измеряет три спектра: красный, синий, зелёный. Микросхема состоит из 64 (4*16) фотодиодов, определяющих выбор фильтра: синий, зеленый, красный или без фильтра.
Измеряемый объект необходимо устанавливать параллельно к объекту измерения на расстоянии не более 10 мм. На корпусе датчика расположено четыре светодиода, которые используются для подсветки места измерения.
Технические характеристики
- Питания: 2,7 – 5,5 В;
- Масштабирование выходной частоты (2%, 20%, 100%);
- Возможность выбора цветового фильтра;
- Погрешность выходной частоты: не более 0,2%.
Подключение к Arduino
Рассмотрим подключение датчика TCS230 к плате Arduino. Для масштабирование частоты импульсов на выходе OUT на контактах S0, S1 необходимо установить сигналы согласно рис.3.
Рисунок 3
Выбор фильтра осуществляется (зеленый, красный, синий, без фильтра) установкой сигналов на контактах S2, S3 по таблице (рис. 4):
Рисунок 4
Схема подключения датчика к плате Arduino:
Рисунок 5
И скетч для определения значений частоты для фильтров R, G, B (листинг 1).
Листинг 1.
// Пины подключения
int pinS0=4;
int pinS1=5;
int pinS2=6;
int pinS3=7;
int pinOut=8;
int freq=0;
void setup() {
// сконфигурировать пины
pinMode(pinS0, 1);
pinMode(pinS1, 1);
pinMode(pinS2, 1);
pinMode(pinS3, 1);
pinMode(pinOut, 0);
// масштабирование 20%
digitalWrite(pinS0,1);
digitalWrite(pinS1,0);
Serial.begin(9600);
}
void loop() {
// установить R фильтр
digitalWrite(pinS2,0);
digitalWrite(pinS3,0);
// Получение частоты на выходе
freq = pulseIn(pinOut, 0);
// вывод в последовательный порт
Serial.print("R= ");
Serial.print(freq);
delay(150);
// установить G фильтр
digitalWrite(pinS2,1);
digitalWrite(pinS3,1);
// Получение частоты на выходе
freq = pulseIn(pinOut, 0);
// вывод в последовательный порт
Serial.print(" G= ");
Serial.print(freq);
delay(150);
// установить B фильтр
digitalWrite(pinS2,0);
digitalWrite(pinS3,1);
// Получение частоты на выходе
freq = pulseIn(pinOut, 0);
// вывод в последовательный порт
Serial.print(" B= ");
Serial.println(freq);
delay(150);
}
Загружаем скетч на плату Arduino и смотрим данные в мониторе последовательного порта (рис. 6).
Рисунок 6
Теперь необходимо получить минимальные и максимальные значения для тестовых цветов (красного, синего и зеленого). Для этого фиксируем значения R, G и B на минимальном расстоянии и в удалении. Записываем эти значения, которые будем использовать далее.
- R – 70-120;
- G – 120-200;
- B – 60-100.
Точность зависит от соответствия ваших экземпляров цветов красного, синего и зеленого к эталонам для этих цветов.
Пример использования
Создадим проект использования платы Arduino – определитель и индикатор цвета. Будем использовать следующие комплектующие:
- Плата Arduino – 1 шт;
- Плата прототипирования – 1 шт;
- Датчик TCS230 – 1 шт;
- RGB-светодиод – 1 шт;
- Резистор 220 Ом – 3 шт;
- Провода.
Схема соединений нашего проекта показана на рис. 7.
Рисунок 7
И скетч для определения компонентов цвета R, G, B для измеряемого объекта (листинг 2). Данные, полученные с датчика TCS230 (значения полученные при применении фильтров для R, G и B) будем использовать для установки цвета RGB-светодиода.
Листинг 2.
// Пины подключения
int pinS0=4;
int pinS1=5;
int pinS2=6;
int pinS3=7;
int pinOut=8;
int pinR 9
int pinG 10
int pinB 11
int frequency = 0;
int red, green, blue;
void setup() {
// сконфигурировать пины
pinMode(pinS0, 1);
pinMode(pinS1, 1);
pinMode(pinS2, 1);
pinMode(pinS3, 1);
pinMode(pinR, 1);
pinMode(pinG, 1);
pinMode(pinB, 1);
pinMode(pinOut, 0);
// масштабирование 20%
digitalWrite(pinS0,1);
digitalWrite(pinS1,0);
Serial.begin(9600);
}
void loop() {
// установить R фильтр
digitalWrite(pinS2,0);
digitalWrite(pinS3,0);
// Получение частоты на выходе
freq = pulseIn(pinOut, 0);
// перевод R в значение от 0 до 255
red = map(constrain(freq,70,120), 70,120,255,0);
delay(100);
// установить G фильтр
digitalWrite(pinS2,1);
digitalWrite(pinS3,1);
// Получение частоты на выходе
freq = pulseIn(pinOut, 0);
// перевод G в значение от 0 до 255
green = map(constrain(freq,100,200), 100,200,255,0);
delay(100);
// установить B фильтр
digitalWrite(pinS2,0);
digitalWrite(pinS3,1);
// Получение частоты на выходе
freq = pulseIn(pinOut, 0);
// перевод B в значение от 0 до 255
blue = map(constrain(freq,60,100), 60,100,255,0);
delay(100);
// зажечь светодиод
analogWrite(pinR,red);
analogWrite(pinG,green);
analogWrite(pinB,blue);
}
Рисунок 8. Схема в сборе
Часто задаваемые вопросы
Вопрос: Датчик неправильно определяет цвет.
- Проверьте правильность подключения датчика к плате Arduino.
- Проведите калибровку датчика на цветах R, G, B, близких к эталонным.