Обзор датчика цвета TCS230 / TCS3200
В этой статье расскажу о датчике TCS230/TCS3200 и покажу как подключить его к плате Arduino, для определения цветов, так же, приведу пример использования датчика для определения цвета объекта.
Технические параметры
► Рабочее напряжение: 2,7 – 5,5 В;
► Функция автоматического отключения питания;
► Малая погрешность выходной частоты: 0,2\%;
► Габариты: 31,3 х 24,2 х 18,5 мм;
Общие сведения
Модуль TCS230/TCS3200 состоит из чипа TCS3200 RGB производимой TAOS и 4 белых светодиодов. Основная микросхема модуля это чип TCS3200, которая представляющая собой преобразователь цветного света в частоту. Белые светодиоды необходимы для обеспечения правильного освещения датчика.
Микросхема TCS3200 состоит из массива фотодиодов 8 х 8, всего 64. Из которых 16 имеет красный фильтр, 16 зеленый фильтр, 16 синий фильтр, а остальные 16 фотодиодов прозрачны без фильтров. Фильтры каждого цвета распределены равномерно по всему массиву. Каждый тип фильтра может быть активирован с помощью входов S2, S3. Поскольку каждый фотодиод покрыт разными фильтрами, каждый из них может определять соответствующие цвета. Например, при выборе красного фильтра может пройти только красный падающий свет, синий и зеленый не будет проходить. Измеряя частоту, мы получаем интенсивность красного света. Аналогично, при выборе других фильтров мы можем получить синий или зеленый свет.
Так же, чип TCS3200 включают в себя генератор, который выдает прямоугольный выходной сигнал, частота которого пропорциональна интенсивности выбранного цвета.
Датчик имеет еще два управляющих контакта, S0 и S1, которые используются для масштабирования выходной частоты. Частота может быть масштабирована до трех различных предустановленных значений: 100%, 20% или 2%. Эта функция масштабирования частоты позволяет оптимизировать выходной сигнал датчика для различных частотных счетчиков или микроконтроллеров.
Назначение контактов:
► S0, S1 — Выбор масштабирования частоты.
► S2, S3 — Выбор тип фильтра.
► OE — Включение потока выходных данных (частоты).
► OUT — Вывод частоты.
► LED — Включение светодиодов, если «0» выключен, «1» включен (по умолчанию)
► VCC, GND — Питание модуля 3,3 В — 5 В.
Светодиод: при тестировании несветящихся объектов светодиод должен быть установлен на высокий уровень, чтобы загорелись четыре белых светодиода TCS3200.
Подключение Arduino к TCS230 / TCS3200
Необходимые детали:
► Arduino UNO R3 x 2 шт.
► Модуль распознавания цвета GY-31, TCS230, TCS3200 x 2 шт.
► Провода DuPont, 2,54 мм, 20 см x 1 шт.
Подключение.
В примере используем Arduino UNO и модуля TCS230 / TCS3200. По схеме ниже подключаем Arduino к модулю TCS230 / TCS3200 , вывод 4 (Arduino) к S0 (TCS230), вывод 5 (Arduino) к S1 ( TCS230), вывод 6 (Arduino) к S3 (TCS230), вывод 7 (Arduino) к S2 (TCS230) и вывод 8 (Arduino) к OUT (TCS230). Затем подключаем питание VCC и GND.
Программа:
Скетч не сложный, первым делом мы начнем считывать фотодиоды с красным фильтром. Для этого мы установим два управляющих контакта S2 и S3 на низкий логический уровень. Затем, используя функцию «pulseIn ()», мы считывать выходную частоту и помещать ее в переменную «frequency». Используя функцию Serial.print (), мы отправляем полученные данные в последовательный порт. Так же, мы делаем с зеленым и синим фильтром.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
#define S0 4 // Указываем вывод S0 #define S1 5 // Указываем вывод S1 #define S2 6 // Указываем вывод S2 #define S3 7 // Указываем вывод S3 #define sensorOut 8 // Указываем вывод Out int frequency = 0; // Создаем переменную frequency void setup() { pinMode(S0, OUTPUT); // Устанавливаем S0 как выход pinMode(S1, OUTPUT); // Устанавливаем S1 как выход pinMode(S2, OUTPUT); // Устанавливаем S2 как выход pinMode(S3, OUTPUT); // Устанавливаем S3 как выход pinMode(sensorOut, INPUT); // Устанавливаем sensorOut как выход // Установка масштабирования частоты до 100% digitalWrite(S0,HIGH); // Вывод S0 в HIGH digitalWrite(S1,HIGH); // Вывод S1 в HIGH Serial.begin(9600); // Открываем последовательный порт } void loop() { // Установка фотодиодов с красным фильтром для чтения digitalWrite(S2,LOW); // Вывод S2 в LOW digitalWrite(S3,LOW); // Вывод S3 в LOW frequency = pulseIn(sensorOut, LOW); // Чтение выходной частоты Serial.print("R= "); // Отправка текста в порт Serial.print(frequency); // Печать показаний красного цвета Serial.print(" "); // Отправка текста в порт delay(100); // Пауза // Установка фотодиодов с зеленым фильтром для чтения digitalWrite(S2,HIGH); // Вывод S2 в HIGH digitalWrite(S3,HIGH); // Вывод S3 в HIGH frequency = pulseIn(sensorOut, LOW); // Чтение выходной частоты Serial.print("G= "); // Отправка текста в порт Serial.print(frequency); // Печать показаний зеленого цвета Serial.print(" "); // Отправка текста в порт delay(100); // Пауза // Установка фотодиодов с синим фильтром для чтения digitalWrite(S2,LOW); // Вывод S2 в LOW digitalWrite(S3,HIGH); // Вывод S3 в HIGH frequency = pulseIn(sensorOut, LOW); // Чтение выходной частоты Serial.print("B= "); // Отправка текста в порт Serial.print(frequency); // Печать показаний синего цвета Serial.println(" "); // Отправка текста в порт delay(100); // Пауза } |
Теперь открываем мониторинг порта, где отразятся показания.
Теперь необходимо откалибровать датчик, для этого понадобится красный, синий и зеленый предмет. Проведем красный предмет возле датчика и посмотрим как изменится показания, в моем случаи, начальное значение упадет с 64 до 10, при зеленым с 90 до 10 и синим с 76 до 20.
Добавим функцию map (), чтобы отобразить показания в значения от 0 до 255.
1 |
frequency = map(frequency,10,64,255,0); |
Значение 64 будет отображаться на 0, а значение от 10 до 255. Так же для двух других цветов.
Программа с калибровкой:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
#define S0 4 // Указываем вывод S0 #define S1 5 // Указываем вывод S1 #define S2 6 // Указываем вывод S2 #define S3 7 // Указываем вывод S3 #define sensorOut 8 // Указываем вывод Out int frequency = 0; // Создаем переменную frequency void setup() { pinMode(S0, OUTPUT); // Устанавливаем S0 как выход pinMode(S1, OUTPUT); // Устанавливаем S1 как выход pinMode(S2, OUTPUT); // Устанавливаем S2 как выход pinMode(S3, OUTPUT); // Устанавливаем S3 как выход pinMode(sensorOut, INPUT); // Устанавливаем sensorOut как выход // Установка масштабирования частоты до 100% digitalWrite(S0,HIGH); // Вывод S0 в HIGH digitalWrite(S1,HIGH); // Вывод S1 в HIGH Serial.begin(9600); // Открываем последовательный порт } void loop() { // Установка фотодиодов с красным фильтром для чтения digitalWrite(S2,LOW); // Вывод S2 в LOW digitalWrite(S3,LOW); // Вывод S3 в LOW frequency = pulseIn(sensorOut, LOW); // Чтение выходной частоты frequency = map(frequency,10,64,255,0); // Преобразование значения частоты в модель RGB от 0 до 255 Serial.print("R= "); // Отправка текста в порт Serial.print(frequency); // Печать показаний красного цвета Serial.print(" "); // Отправка текста в порт delay(100); // Пауза // Установка фотодиодов с зеленым фильтром для чтения digitalWrite(S2,HIGH); // Вывод S2 в HIGH digitalWrite(S3,HIGH); // Вывод S3 в HIGH frequency = pulseIn(sensorOut, LOW); // Чтение выходной частоты frequency = map(frequency,12,92,255,0); // Преобразование значения частоты в модель RGB от 0 до 255 Serial.print("G= "); // Отправка текста в порт Serial.print(frequency); // Печать показаний зеленого цвета Serial.print(" "); // Отправка текста в порт delay(100); // Пауза // Установка фотодиодов с синим фильтром для чтения digitalWrite(S2,LOW); // Вывод S2 в LOW digitalWrite(S3,HIGH); // Вывод S3 в HIGH frequency = pulseIn(sensorOut, LOW); // Чтение выходной частоты frequency = map(frequency,20,76,255,0); // Преобразование значения частоты в модель RGB от 0 до 255 Serial.print("B= "); // Отправка текста в порт Serial.print(frequency); // Печать показаний синего цвета Serial.println(" "); // Отправка текста в порт delay(100); // Пауза } |
Заключение:
Датчик не больной точен, но подойдет для простых проектов.
Купить на Aliexpress
Контроллер Arduino UNO R3 на CH340G
Контроллер Arduino UNO R3 на Atmega16U2
Провода DuPont, 2,54 мм, 20 см
Модуль распознавания цвета GY-31, TCS230, TCS3200