Содержание
- Обзор датчика
- Технические характеристики
- Подключение к 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, близких к эталонным.