Датчик цвета и Arduino
С использованием датчика цвета ваш Arduino может научиться распознавать цвета.
На данный момент один из лучших сенсоров цвета - TCS34725.
На многих датчиках на базе TCS34725 устанавливаются дополнительные чувствительные фотодиоды, которые минимизируют ультрафиолетовую составляющую спектра, что значительно увеличивает точность снятия показаний. Работа фильтра состоит в том, чтобы откинуть ультрафиолетовую компоненту освещения, так как человеческий глаз ее не воспринимает. В результате, точность распознавания цветов значительно увеличивается. Датчики цвета от компании Adafruit (работа с этим датчиком и рассматривается в дальнейшей статье), например, обладают потрясающим динамическим диапазоном: 3,800,000:1 (диапазон можно настраивать). Кроме того, регулируется коэффициент усиления.

TCS34725 RGB sensor имеет встроенный регулятор 3.3 В, так что вы можете запитывать модуль постоянным током в диапазоне от 3 до 5 В. I2C контакты работают с питанием логики 3.3 или 5 В. Кроме того, на модуле предусмотрен светодиод с MOSFET драйвером, который отображает цвет объекта, который вы "рассматриваете". Светодиод можно включать-отключать в зависимости от ваших потребностей.
Данный модуль производится в двух форм-факторах: версия для беспаечной монтажной платы (на рисунке слева) и версия крепежа к одежде и работы на базе Arduino Flora (на рисунке справа).

Сборка датчика цвета и подключение к Arduino
Датчик цвета в круглом форм-факторе можно подключить с помощью контактов с крокодилами на концах или с помощью токопроводящей нити.
Датчика цвета для беспаечной монтажной платы продается с нераспаянными рельсами для монтажа. Ниже приведена пошаговая инструкция по распайке рельс на модуль сенсора цвета. Если следовать этой небольшой инструкции, процесс пройдет быстро и безболезненно ;).
![]() |
Установите рельсу контактов на breadboard. Короткие контакты должны остаться сверху. |
![]() |
Установите модуль датчика цвета на рельсы. |
![]() |
Берем в руки паяльник! |
![]() |
Помните, что очень часто некачественные швы приводят к неработоспособности оборудования и даже к его выходу из строя (так что будьте аккуратны, не закоротите контакты). |
Датчик цвета подключается к Arduino с помощью I2C интерфейса. Для подключения будет использовано 4 контакта.
![]() |
Подключение к Flora:
3.3 V -> 3 V (красный проводник) GND -> GND (черный проводник) SDA -> SDA (белый проводник) SCL -> SCL (зеленый проводник) |
![]() ![]() |
Подключение к Arduino Uno:
5 V -> VIN (красный проводник) GND -> GND (черный проводник) SDA -> SDA (оранжевый проводник) SCL -> SCL (белый проводник) Примечание: На более старых версиях Arduino, таких как Duemilanove и предшественникам версии R3 UNO, SDA - это пин Analog 4, а SCL - Analog 5. На версиях-предшественниках Arduino Mega R2, SDA находится на пине digital 21. На платах Arduino Leonardo, SDA Находится на пине 2, а SCL - на digital 3. |
Управляем светодиодом
(Только для версии датчика цвета для беспаечной монтажной платы). Светодиод можно отключить следующими способами:
1. Подключитесь к Земле для полного отключения.
2. Подключитесь к цифровому контакту на Arduino и управляйте его состоянием с помощью функции digitalWrite().
3. Подключите светодиод к пину INT и управляйте его состоянием с помощью setInterrupt() (более детальную информацию можно найти в даташите библиотеки).
Используем датчик цвета!
Установка библиотеки
Скачайте библиотеку Adafruit_TCS34725 с Github. Если вы устанавливаете дополнительную библиотеку впервые, рекомендуем почитать статью "Библиотеки и Arduino".
Тестируем датчик цвета
Запустите тестовый скетч TCS34725 для проверки работоспособности сенсора.
Загрузите скетч на ваш Arduino Uno или Flora и откройте окно серийного монитора, чтобы отследить результат. Скетч должен выводить в окне серийного монитора результат в виде строк с цветами (смотрите на рисунке ниже). Переместите, сенсор, чтобы оценить как он реагирует на различные источники света.
Параметры цвета выводятся в следующем формате:
- Цветовая температура - измеряется в Кельвинах;
- Уровень освещенности - Люкс или Люмен на квадратный метр;
- R, G и B (отфильтрованные) значения;
- Чистое (нефильтрованное) значение;

Скетч ColorView
Скетч ColorView предполагает отображение цвета с помощью встроенного светодиода. Белый светодиод используется для подсветки близко расположенных объектов, а датчик контролирует свет, отраженный от этого объекта. После этого скетч ColorView задействует RGB выходы и RGB светодиод отображает цвет объекта, который мы контролируем!
![]() ![]() |
Помимо Arduino и датчика цвета, вам понадобится RGB светодиод и резисторы: 1 резистор на 1 КОм (Коричневый, Черный, красный и золотой); 2 резистора на 560 Ом (Зеленый, голубой, коричневый и золотой). |
![]() |
Кроме базового питания и I2C подключения, вам надо подключить: Общий анод светодиода (длинная нога) -> 5 V; "Красный" контакт светодиода -> резистор 1 КОм -> контакт 3 на Arduino; "Зеленый" контакт светодиода -> резистор на 560 Ом -> контакт 5 на Arduino; "Синий" контакт светодиода -> резистор На 560 Ом -> контакт 6 на Arduino; |
Загрузите скетч ColorView на ваш Arduino и поэкспериментируйте, поднося к датчику объекты разных цветов. Светодиод должен угадывать цвет объекта!

Задействуем Processing!

В библиотеку Adafruit_TCS34725 Library включен скетч для Processing, с помощью которого скетч ColorView для Arduino взаимодействует с Processing и отображает цвет на вашем мониторе в режиме реального времени.
К сожалению, скетч для Processing работает только с версией Processing 1.5.1 и не совместим с версией Processing 2.0!
![]() |
Откройте пример ColorView и загрузите его на Arduino.
Запомните, какой именно серийный порт используется для вашего Arduino. |
![]() |
Загрузите программу ColorView.pde в Processing. Этот скетч находится в папке "Processing" внутри папки Adafruit_TCS34725 Library. |
![]() |
Найдите строку, где открывается серийный порт и исправте ее, указав порт, который использует ваш Arduino. |
![]() ![]() |
После запуска скетча Processing, откроется новое модальное окно, в котором будет отображаться цвет, считанный вашим датчиком цвета. |
Библиотека Adafruit_TCS34725 - гайд по функциям
Объявление и инициализация:
Adafruit_TCS34725(tcs34725IntegrationTime_t = TCS34725_INTEGRATIONTIME_2_4MS,
tcs34725Gain_t = TCS34725_GAIN_1X);
Объявляем сенсор TCS34725, указывая время интегрирования и значения коэффициента усиления.
boolean Adafruit_TCS34725::begin(void);
Инициализируем сенсор цвета TCS34725. Эта функция должна вызываться раньше остальных.
Усиление и время интегрирования:
void Adafruit_TCS34725::setIntegrationTime(tcs34725IntegrationTime_t it)
Устанавливаем время интегрирования для отдельных сэмплов цветов с датчика. Чем больше это значение, тем больше чувствительность датчика цвета при малых уровнях освещенности. Корректные значения приведены ниже:
TCS34725_INTEGRATIONTIME_2_4MS = 0xFF, /**< 2.4 мс */
TCS34725_INTEGRATIONTIME_24MS = 0xF6, /**< 24 мс */
TCS34725_INTEGRATIONTIME_50MS = 0xEB, /**< 50 мс */
TCS34725_INTEGRATIONTIME_101MS = 0xD5, /**< 101 мс */
TCS34725_INTEGRATIONTIME_154MS = 0xC0, /**< 154 мс */
TCS34725_INTEGRATIONTIME_700MS = 0x00 /**< 700 мс */
void Adafruit_TCS34725::setGain(tcs34725Gain_t gain)
Устанавливаем коэффициент усиления аналогово-цифрового преобразователя, что влияет на чувствительность датчика цвета. Корректные значения следующие:
TCS34725_GAIN_1X = 0x00, /**< нет усиления */
TCS34725_GAIN_4X = 0x01, /**< усиление в 2 раза */
TCS34725_GAIN_16X = 0x02, /**< усиление в 16 раз */
TCS34725_GAIN_60X = 0x03 /**< усиление в 60 раз */
Считывание цвета и расчеты:
void Adafruit_TCS34725::getRawData (uint16_t *r, uint16_t *g, uint16_t *b, uint16_t *c)
Считываем данные красного, зеленого, голубого и нейтрального сегментов сенсора.
uint16_t Adafruit_TCS34725::calculateColorTemperature(uint16_t r, uint16_t g, uint16_t b)
Рассчитываем температуру цветов отдельных красного, зеленого, голубого и нейтрального компонентов цвета.
uint16_t Adafruit_TCS34725::calculateLux(uint16_t r, uint16_t g, uint16_t b)
Расчет Люкс для четырех компонент цвета.
Прерывания и управление светодиодом:
void Adafruit_TCS34725::setInterrupt(boolean i)
Устанавливаем прерывание сенсора для генерации прерывания, когда диапазон выходит за рамки предусмотренного (смотрите setIntLimits() выше). Пин Int есть только на версии датчика в прямоугольном форм-факторе.
Булевый параметр можно использовать для управления светодиодом. На breadboard версии датчика, вам надо подключить контакт светодиода к контакту INT для управления светодиодом.
- При передаче сигнала типа "false", светодиод будет реагировать на цвет предмета.
- Если передать "true", светодиод выключится.
void Adafruit_TCS34725::clearInterrupt(void)
Убираем прерывание сенсора.
void Adafruit_TCS34725::setIntLimits(uint16_t low, uint16_t high)
Устанавливает уровни high и low для прерываний. Для более детального ознакомления с прерываниями, можете заглянуть в data sheet.
Полезные ссылки и файлы для загрузки
Схема модуля датчика цвета:



(Измерения на чертеже - в дюймах!)
Даташит датчика цвета TCS34725 для Arduino.
Оставляйте Ваши комментарии, вопросы и делитесь личным опытом ниже. В дискуссии часто рождаются новые идеи и проекты!