Как работает датчик цвета

Распознавание цвета и уровня освещенности с помощью APDS-9960

image

Недавно на Habr.com промелькнула статья в которой, среди прочего, сообщалось о датчике освещенности. Некоторое время назад я нашел и приобрел интересную вещь — модуль производства фирмы RobotDyn на основе датчика APDS-9960, который тоже умеет измерять уровень освещенности. Поискав и не сумев отыскать упоминаний сего прибора на данном ресурсе, я решил, что это подходящий повод для написания статьи.

В статье мне бы хотелось в общих чертах познакомить читателей с возможностями которые предоставляет этот датчик и более подробно рассмотреть каким образом с его помощью можно определять цвет и измерять уровень освещенности.

Однако, прежде чем мы приступим к практической части, позвольте сперва несколько слов написать об общих возможностях APDS-9960.

Функциональная схема APDS-9960 представлена на рисунке ниже image

Распознавание жестов

Представление о том как выглядит распознавания жестов на APDS-9960 очень неплохо показано на этом видео.

image

Функция обнаружения приближения

Судя по описанию из все той же документации, механизм обнаружения (приближения) работает по такому же точно принципу, что и распознавание жестов.

Распознавание цвета и уровень окружающего освещения (Color/ALS)

image

Графики на картинке выше взяты из документации на датчик, слева сверху представлена спектральная характеристика Color Sense (RGBC).

Сигнал RGBC фотодиодов накапливается в течение периода времени, установленного значением регистра ATIME. У SparkFun (в их «apds9960.h») это значение определено константой DEFAULT_ATIME и равно 219 что соответствует 103 ms.

Усиление регулируется в диапазоне от 1x до 64x и определяется настройкой параметра CONTROL AGAIN. Константа DEFAULT_AGAIN, равная, в свою очередь значению 1, что соответствует усилению в 4 раза.

Практическая часть

Итак, вся документация (чертеж, распиновка и принципиальная электрическая схема) на модуль доступна на сайте производителя.

image

Подключим наш модуль APDS-9960 к STM32VLDISCOVERY

APDS9960 для связи с внешним миром использует интерфейс i2c, поэтому у STM32VLDISCOVERY задействуем шину I2C1 подключив вывод модуля SCL к ножке PB6, а вывод SDA, соответственно к ножке PB7. Не забываем подключить питание и общий провод. Прерывания в данном случае использоваться не будут, поэтому вывод Int можно не подключать. У меня на фото он подключен, но не используется.

А теперь немножко кода. Поскольку все общение с модулем происходит с помощью i2c, создадим необходимую конфигурацию и определим функции чтения/записи для i2c.

Описание

Датчик цвета позволяет определять цвет поверхности. По сути это два устройства в одном — трехцветный светодиод и датчик освещенности, которые можно использовать по отдельности.

Принцип работы: Датчик цвета имеет два основных компонента -трехцветный (RGB) светодиод, который излучает красный, синий и зеленый свет, а также светочувствительный датчик (фоторезистор), который определяет интенсивность падающего на него света.

Белый свет состоит из всех цветов радуги. Когда свет падает на поверхность, некоторые цвета поглощаются, а некоторые отражаются. Отраженные цвета – это цвета воспринимаемого нами объекта. Для измерения и определения количества цвета с помощью электронной схемы, вам необходимо измерить интенсивность различных длин волн света, отраженного от поверхности. Самый простой способ сделать это – осветить поверхность разными цветами и измерить, какой из цветов поверхность отражает лучше. Измеряя отраженный свет для каждого цвета можно вычислить цвет объекта.

Для улучшения результатов измерений следуйте следующим советам:

Подключение

Датчик использует два стандартных 3-пиновых разъема, однако, подключается не совсем обычно:

Коннектор 1 (без цветового обозначения) подключается в любой из портов IN контроллера “Трекдуино”, сигнальный провод этой шины подключен к фоторезистору, поэтому, подключив только эту шину, вы сможете использовать датчик как датчик освещенности.

Коннектор 2 (с цветовой маркировкой) служит для управления трехцветным светодиодом. Каждый из проводов подключен напрямую соответствующему каналу светодиода. Наклейка с цветовой маркировкой на коннекторе указывает, к какому из каналов соответствует каждый из проводов. Подключается в любые три порта OUT и в любые порты IN контроллера “Трекдуино”. Подключается горизонтально в верхнюю (сигнальную, «S») линию контактов.. Для того, чтобы использовать только RGB-светодиод, коннектор №1 все равно придется подключить, т.к. земляной провод (GND) общий для светодиода и фоторезистора.

Программирование

Блоки, необходимые для работы с датчиком цвета, расположены в группе блоков «Датчики».

Калибровка

Каждый раз при перезагрузке программы, использующей датчик цвета, в момент выполнения блока Настройка датчика цвета будет производится калибровка датчика под текущие условия освещения. Процедура калибровки выполняется следующим образом:

Для удобной работы с датчиком, сделайте 2 карточки 5х8 см. черного и белого цвета.

Выполняется привязка датчика к конкретным портам и процедура калибровки. Выполняет сканирование поверхности и возвращает условный номер определенного цвета:

Что такое rgb датчик цвета

Датчик цвета позволяет определять цвет поверхности. По сути это два устройства в одном — трехцветный светодиод и датчик освещенности, которые можно использовать по отдельности.

Принцип работы: Датчик цвета имеет два основных компонента -трехцветный (RGB) светодиод, который излучает красный, синий и зеленый свет, а также светочувствительный датчик (фоторезистор), который определяет интенсивность падающего на него света.

Белый свет состоит из всех цветов радуги. Когда свет падает на поверхность, некоторые цвета поглощаются, а некоторые отражаются. Отраженные цвета – это цвета воспринимаемого нами объекта. Для измерения и определения количества цвета с помощью электронной схемы, вам необходимо измерить интенсивность различных длин волн света, отраженного от поверхности. Самый простой способ сделать это – осветить поверхность разными цветами и измерить, какой из цветов поверхность отражает лучше. Измеряя отраженный свет для каждого цвета можно вычислить цвет объекта.

Для улучшения результатов измерений следуйте следующим советам:

Подключение

Датчик использует два стандартных 3-пиновых разъема, однако, подключается не совсем обычно:

Коннектор 1 (без цветового обозначения) подключается в любой из портов IN контроллера «Трекдуино», сигнальный провод этой шины подключен к фоторезистору, поэтому, подключив только эту шину, вы сможете использовать датчик как датчик освещенности.

Коннектор 2 (с цветовой маркировкой) служит для управления трехцветным светодиодом. Каждый из проводов подключен напрямую соответствующему каналу светодиода. Наклейка с цветовой маркировкой на коннекторе указывает, к какому из каналов соответствует каждый из проводов. Подключается в любые три порта OUT и в любые порты IN контроллера «Трекдуино». Подключается горизонтально в верхнюю (сигнальную, «S») линию контактов.. Для того, чтобы использовать только RGB-светодиод, коннектор №1 все равно придется подключить, т.к. земляной провод (GND) общий для светодиода и фоторезистора.

Программирование

Блоки, необходимые для работы с датчиком цвета, расположены в группе блоков «Датчики».

Каждый раз при перезагрузке программы, использующей датчик цвета, в момент выполнения блока Настройка датчика цвета будет производится калибровка датчика под текущие условия освещения. Процедура калибровки выполняется следующим образом:

Для удобной работы с датчиком, сделайте 2 карточки 5х8 см. черного и белого цвета.

Выполняется привязка датчика к конкретным портам и процедура калибровки. Выполняет сканирование поверхности и возвращает условный номер определенного цвета:

Ардуино: датчик цвета

В одном из предыдущих уроков — Ардуино: трехцветный светодиод — RGB — мы разобрали, что такое RGB и научились работать с трёхцветным светодиодом. В этом уроке мы разберёмся, как работать с датчиком цвета, научим нашу Ардуино распознавать красный, синий и зелёный и выведем полученные данные при помощи RGB-светодиода!

Как работает датчик цвета

Датчик TCS230, расположенный в центре платы, состоит из фотодиодов четырёх типов: 16 фотодиодов с красным фильтром, 16 фотодиодов с зелёным фильтром, 16 фотодиодов с синим фильтром и 16 фотодиодов без светофильтра . К датчику подносят образец одного из трёх цветов — красного, зелёного или синего. Образец освещается светодиодами на плате вокруг датчика. Датчик имеет преобразователь тока в частоту, он преобразует показания фотодиодов в квадратную волну с частотой, пропорциональной интенсивности света выбранного цвета. Эта частота затем считывается Arduino.

Распиновка на плате с датчиком TCS230 имеет следующее значение:

  • GND – земля;
  • OE – контакт включения;
  • S1, S0 – настройка масштабирования частоты импульсов.
  • S3, S2 – входной сигнал настройки фильтра;
  • OUT – выходная частота;
  • VCC – напряжение питания.

Для определения цвета, который будет считываться фотодиодами, датчик TCS230 оснащен контактами S2 и S3. Поскольку фотодиоды подключены параллельно, разные типы фотодиодов можно выбирать, переключая контакты S2 и S3 в разные комбинации состояний HIGH и LOW. Правила выбора этих комбинаций для нужных нам цветов следующие:

Тип фотодиода S2 S3
Красный LOW LOW
Синий LOW HIGH
Без фильтра (чистый) HIGH LOW
Зеленый HIGH HIGH

Контакты S0 и S1 используются для масштабирования выходной частоты. Ее можно масштабировать до трех заранее заданных значений: 100%, 20% и 2%. Масштабирование частоты используется для разных микроконтроллеров, чтобы оптимизировать данные, считанные датчиком.

Масштабирование частоты S0 S1
Отключение LOW LOW
2% LOW HIGH
20% HIGH LOW
100% HIGH HIGH

Для Ардуино мы будем использовать масштабирование 20%.

Подключение датчика к Ардуино

Для визуального отображения определяемого цвета мы воспользуемся RGB-светодиодом. Схема должна работать следующим образом: к датчику подносят образец выбранного цвета и на светодиоде загорается тот же цвет.

TCS230 GND VCC OUT S0 S1 S2 S3
Arduino Uno GND +5V 8 4 5 6 7

Принципиальная схема:

Внешний вид макета:

Когда мы запустим программу и откроем монитор порта на скорости 9600 бод, то при поднесении к датчику образца мы увидим значения для каждого из трёх цветов и сообщение о том, какой цвет выбран. Следует заметить, что в случае, если сообщение о цвете не соответствует реальному цвету, то необходимо подредактировать значения частот в программе, подстраивая их по значениям R, G и B в мониторе порта:

Демонстрация работы датчика

Внешний вид нашего макета:

Распознавание цвета и уровня освещенности с помощью APDS-9960

Недавно на Habr.com промелькнула статья в которой, среди прочего, сообщалось о датчике освещенности. Некоторое время назад я нашел и приобрел интересную вещь — модуль производства фирмы RobotDyn на основе датчика APDS-9960, который тоже умеет измерять уровень освещенности. Поискав и не сумев отыскать упоминаний сего прибора на данном ресурсе, я решил, что это подходящий повод для написания статьи.

В статье мне бы хотелось в общих чертах познакомить читателей с возможностями которые предоставляет этот датчик и более подробно рассмотреть каким образом с его помощью можно определять цвет и измерять уровень освещенности.

Однако, прежде чем мы приступим к практической части, позвольте сперва несколько слов написать об общих возможностях APDS-9960.

Функциональная схема APDS-9960 представлена на рисунке ниже

Распознавание жестов

Представление о том как выглядит распознавания жестов на APDS-9960 очень неплохо показано на этом видео.

Функция обнаружения приближения

Судя по описанию из все той же документации, механизм обнаружения (приближения) работает по такому же точно принципу, что и распознавание жестов.

Распознавание цвета и уровень окружающего освещения (Color/ALS)

Графики на картинке выше взяты из документации на датчик, слева сверху представлена спектральная характеристика Color Sense (RGBC).

Сигнал RGBC фотодиодов накапливается в течение периода времени, установленного значением регистра ATIME. У SparkFun (в их «apds9960.h») это значение определено константой DEFAULT_ATIME и равно 219 что соответствует 103 ms.

Усиление регулируется в диапазоне от 1x до 64x и определяется настройкой параметра CONTROL AGAIN. Константа DEFAULT_AGAIN, равная, в свою очередь значению 1, что соответствует усилению в 4 раза.

Практическая часть

Итак, вся документация (чертеж, распиновка и принципиальная электрическая схема) на модуль доступна на сайте производителя.

Подключим наш модуль APDS-9960 к STM32VLDISCOVERY

APDS9960 для связи с внешним миром использует интерфейс i2c, поэтому у STM32VLDISCOVERY задействуем шину I2C1 подключив вывод модуля SCL к ножке PB6, а вывод SDA, соответственно к ножке PB7. Не забываем подключить питание и общий провод. Прерывания в данном случае использоваться не будут, поэтому вывод Int можно не подключать. У меня на фото он подключен, но не используется.

А теперь немножко кода. Поскольку все общение с модулем происходит с помощью i2c, создадим необходимую конфигурацию и определим функции чтения/записи для i2c.

Датчик цвета и Arduino

С использованием датчика цвета ваш Arduino может научиться распознавать цвета.

На данный момент один из лучших сенсоров цвета — TCS34725.

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

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

Данный модуль производится в двух форм-факторах: версия для беспаечной монтажной платы (на рисунке слева) и версия крепежа к одежде и работы на базе Arduino Flora (на рисунке справа).

Сборка датчика цвета и подключение к Arduino

Датчик цвета в круглом форм-факторе можно подключить с помощью контактов с крокодилами на концах или с помощью токопроводящей нити.

Датчика цвета для беспаечной монтажной платы продается с нераспаянными рельсами для монтажа. Ниже приведена пошаговая инструкция по распайке рельс на модуль сенсора цвета. Если следовать этой небольшой инструкции, процесс пройдет быстро и безболезненно ;).

Датчик цвета подключается к Arduino с помощью I2C интерфейса. Для подключения будет использовано 4 контакта.

Фото Пояснения Подключение к Flora:

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

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

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

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

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

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

Примечание: На более старых версиях 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 светодиода

Фото Пояснения

Помимо 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!

Датчик цвета и Processing

Фото Пояснения Откройте пример ColorView и загрузите его на Arduino.

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

Библиотека Adafruit_TCS34725 — гайд по функциям

Объявление и инициализация:

Объявляем сенсор TCS34725, указывая время интегрирования и значения коэффициента усиления.

Инициализируем сенсор цвета TCS34725. Эта функция должна вызываться раньше остальных.

Усиление и время интегрирования:

void Adafruit_TCS34725::setIntegrationTime(tcs34725IntegrationTime_t it)

Устанавливаем время интегрирования для отдельных сэмплов цветов с датчика. Чем больше это значение, тем больше чувствительность датчика цвета при малых уровнях освещенности. Корректные значения приведены ниже:

Ардуино: датчик цвета

В одном из предыдущих уроков — Ардуино: трехцветный светодиод — RGB — мы разобрали, что такое RGB и научились работать с трёхцветным светодиодом. В этом уроке мы разберёмся, как работать с датчиком цвета, научим нашу Ардуино распознавать красный, синий и зелёный и выведем полученные данные при помощи RGB-светодиода!

Как работает датчик цвета

Датчик TCS230, расположенный в центре платы, состоит из фотодиодов четырёх типов: 16 фотодиодов с красным фильтром, 16 фотодиодов с зелёным фильтром, 16 фотодиодов с синим фильтром и 16 фотодиодов без светофильтра . К датчику подносят образец одного из трёх цветов — красного, зелёного или синего. Образец освещается светодиодами на плате вокруг датчика. Датчик имеет преобразователь тока в частоту, он преобразует показания фотодиодов в квадратную волну с частотой, пропорциональной интенсивности света выбранного цвета. Эта частота затем считывается Arduino.

Распиновка на плате с датчиком TCS230 имеет следующее значение:

  • GND – земля;
  • OE – контакт включения;
  • S1, S0 – настройка масштабирования частоты импульсов.
  • S3, S2 – входной сигнал настройки фильтра;
  • OUT – выходная частота;
  • VCC – напряжение питания.

Для определения цвета, который будет считываться фотодиодами, датчик TCS230 оснащен контактами S2 и S3. Поскольку фотодиоды подключены параллельно, разные типы фотодиодов можно выбирать, переключая контакты S2 и S3 в разные комбинации состояний HIGH и LOW. Правила выбора этих комбинаций для нужных нам цветов следующие:

Тип фотодиода S2 S3
Красный LOW LOW
Синий LOW HIGH
Без фильтра (чистый) HIGH LOW
Зеленый HIGH HIGH

Контакты S0 и S1 используются для масштабирования выходной частоты. Ее можно масштабировать до трех заранее заданных значений: 100%, 20% и 2%. Масштабирование частоты используется для разных микроконтроллеров, чтобы оптимизировать данные, считанные датчиком.

Масштабирование частоты S0 S1
Отключение LOW LOW
2% LOW HIGH
20% HIGH LOW
100% HIGH HIGH

Для Ардуино мы будем использовать масштабирование 20%.

Подключение датчика к Ардуино

Для визуального отображения определяемого цвета мы воспользуемся RGB-светодиодом. Схема должна работать следующим образом: к датчику подносят образец выбранного цвета и на светодиоде загорается тот же цвет.

TCS230 GND VCC OUT S0 S1 S2 S3
Arduino Uno GND +5V 8 4 5 6 7

Принципиальная схема:

Внешний вид макета:

Программа:

Когда мы запустим программу и откроем монитор порта на скорости 9600 бод, то при поднесении к датчику образца мы увидим значения для каждого из трёх цветов и сообщение о том, какой цвет выбран. Следует заметить, что в случае, если сообщение о цвете не соответствует реальному цвету, то необходимо подредактировать значения частот в программе, подстраивая их по значениям R, G и B в мониторе порта:

Демонстрация работы датчика

Внешний вид нашего макета:

Ссылка на основную публикацию
Похожее