Датчик цвета и 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 контакта.

Подключение модуля датчика цвета
Фото
Пояснения
Датчик цвета и Arduino Flora Подключение к Flora:

3.3 V -> 3 V (красный проводник)

GND -> GND (черный проводник)

SDA -> SDA (белый проводник)

SCL -> SCL (зеленый проводник)

Датчик цвета и Arduino Uno Датчик цвета и Arduino Uno 2 Подключение к 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 светодиод отображает цвет объекта, который мы контролируем!

Подключение RGB светодиода
Фото
Пояснения
RGB светодиод RGB светодиод - схема

Помимо Arduino и датчика цвета, вам понадобится RGB светодиод и резисторы:

1 резистор на 1 КОм (Коричневый, Черный, красный и золотой);

2 резистора на 560 Ом (Зеленый, голубой, коричневый и золотой).

Подключение светодиода и датчика цвета к Arduino

Кроме базового питания и I2C подключения, вам надо подключить:

Общий анод светодиода (длинная нога) -> 5 V;

"Красный" контакт светодиода -> резистор 1 КОм -> контакт 3 на Arduino;

"Зеленый" контакт светодиода -> резистор на 560 Ом -> контакт 5 на Arduino;

"Синий" контакт светодиода -> резистор На 560 Ом -> контакт 6 на Arduino;

Загрузите скетч ColorView на ваш Arduino и поэкспериментируйте, поднося к датчику объекты разных цветов. Светодиод должен угадывать цвет объекта!

Светодиод на датчике цвета угадывает цвета!

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

Processing logo

В библиотеку Adafruit_TCS34725 Library включен скетч для Processing, с помощью которого скетч ColorView для Arduino взаимодействует с Processing и отображает цвет на вашем мониторе в режиме реального времени.

К сожалению, скетч для Processing работает только с версией Processing 1.5.1 и не совместим с версией Processing 2.0!

Датчик цвета и Processing
Фото
Пояснения
ColorView в Arduino IDE Откройте пример ColorView и загрузите его на Arduino.

Запомните, какой именно серийный порт используется для вашего Arduino.

ColorView.pde Загрузите программу ColorView.pde в Processing. Этот скетч находится в папке "Processing" внутри папки Adafruit_TCS34725 Library.

Правим серийный порт Найдите строку, где открывается серийный порт и исправте ее, указав порт, который использует ваш Arduino.
Processing и датчик цвета Датчик цвета, Arduino и Processing После запуска скетча 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.

Полезные ссылки и файлы для загрузки

Схема модуля датчика цвета:

электросхема датчика цвета электросхема датчика цвета2 электросхема датчика цвета3

(Измерения на чертеже - в дюймах!)

Даташит датчика цвета TCS34725 для Arduino.

Оставляйте Ваши комментарии, вопросы и делитесь личным опытом ниже. В дискуссии часто рождаются новые идеи и проекты!