Андрей Смирнов
Время чтения: ~7 мин.
Просмотров: 17

Распознавание цвета с помощью Arduino и TCS 3200

СОДЕРЖАНИЕ ►

Датчик оттенка цвета TCS230 для Ардуино способен распознавать 4 цвета и преобразует интенсивность цветового спектра в выходной сигнал различной частоты. Рассмотрим устройство датчика цвета, схему подключения к Arduino UNO и представим несколько скетчей с примерами использования датчика и вывода информации о цветовом спектре (цвет предмета) на монитор порта Arduino IDE в компьютере.

Характеристики датчика TCS230, описание

В цветовой палитре RGB, любой цвет можно представить в виде комбинации трех основных цветов: красный (R), зеленый (G) и синий (B). Поэтому для определения цвета необходимо измерять красный, синий и зелёный спектр. В качестве чувствительного элемента в датчике используется микросхема TCS230, состоящая из массива фотодиодов 8×8 — по 16 фотодиодов на три цвета и 16 фотодиодов без фильтра.

datchik-tcs230.jpg
Датчик цвета TCS230 схема, описание, характеристики

Технические характеристики:

Датчик используется для определения оттенка цвета объекта на расстоянии до 10 мм, для подсветки места измерения на датчике имеется четыре светодиода. С обратной стороны датчика имеется две колодки с четырьмя контактами. Через эти контакты датчик TCS230 подключается к микроконтроллеру Arduino. Контакты «S0» и «S1» служат для масштабирования частоты импульсов на выходе «OUT» датчика.

Как подключить датчик TCS230 к Ардуино

Для занятия нам понадобятся следующие детали:

  • плата Arduino Uno / Arduino Nano / Arduino Mega;
  • макетная плата;
  • датчик оттенка цвета TCS230;
  • 3 светодиода;
  • 3 резистора 220 Ом;
  • провода «папа-мама» и «папа-папа».
podkluchenie-datchika-tcs230.jpg
Схема подключения датчика цвета TCS230 к Ардуино

Скетч для датчика цвета TCS230 Ардуино

// назначаем имена для портов#define s2  2  #define s3  3  #define out 4  // освобождаем память для переменныхbyte red = 0;  byte green = 0;  byte blue = 0;    voidsetup(){   pinMode(s2, OUTPUT);   pinMode(s3, OUTPUT);   pinMode(out, INPUT);   Serial.begin(9600);  }      voidloop() {    color();   // выводим значения цветовSerial.print(" RED :" + String(red));   Serial.print(" GREEN : " + String(green));   Serial.println(" BLUE : " + String(blue));   delay(500);  }     voidcolor() // процедура color  {   // если 2 и 3 порты отключить, то получим значение красного цветаdigitalWrite(s2, LOW);   digitalWrite(s3, LOW);   red = pulseIn(out, digitalRead(out) == HIGH ? LOW : HIGH);     // если 3 порт включить, а 2 отключить, то получим синий цветdigitalWrite(s3, HIGH);   blue = pulseIn(out, digitalRead(out) == HIGH ? LOW : HIGH);     // если 2 включить, а 3 отключить, то получим зеленый цветdigitalWrite(s2, HIGH);   green = pulseIn(out, digitalRead(out) == HIGH ? LOW : HIGH);   }  

Пояснения к коду:

  1. процедура void color() используется для опроса датчика цвета;
  2. в процедуре void loop() выводим данные на монитор порта, как на фото ниже.
com.jpg
Вывод информации с датчика TCS2300 на монитор порта

Скетч калибровки датчика цвета TCS230

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

if (red < 20 && blue < 20 && green < 20) { Serial.println("WHITE"); }    if (red > 60 && blue > 90 && green > 90) { Serial.println("BLACK"); }  

Пояснения к коду:

  1. при необходимости следует поставить свои значения в условии, чтобы датчик оттенка цвета правильно отличал черные предметы от белых.

Рассмотрим как обнаруживать и распознавать цвета с помощью Arduino, датчика TCS 3200, и как отображать всё на ЖК-дисплее.

Комплектующие

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

Оборудование

Идея проекта

Это простое руководство, в котором мы рассмотрим, как считывать цвета, используя Arduino и сенсоры, такие как TCS 3200. Идея будет заключаться в том, чтобы обнаружить цвет объекта и отобразить это на ЖК-дисплее.

Этот проект в будущем будет прототипом более крупного проекта, который будет представлять собой манипулятор робота, который выбирает правильное действие в зависимости от цвета объекта. Приведенная выше блок-схема показывает основные компоненты.

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

Сенсор цвета TSC 3200

Как описано в техническом описании, TCS3200 является программируемым преобразователем цветового света в частоту, который сочетает в себе настраиваемые кремниевые фотодиоды и преобразователь тока в частоту на одной монолитной интегральной схеме CMOS.

Скачать техническое руководство TCS3200 .pdf

На выходе получается прямоугольная волна (коэффициент заполнения 50%) с частотой, прямо пропорциональной интенсивности света (освещенности). Полномасштабная выходная частота может быть масштабирована одним из трех предустановленных значений с помощью двух управляющих входных контактов (S0 и S1).

Цифровые входы и цифровой выход обеспечивают прямой интерфейс с микроконтроллером или другими логическими схемами.

Разрешение выхода (OE, Output enable) переводит выход в состояние высокого импеданса для совместного использования нескольких входных линий микроконтроллера. В TCS3200 преобразователь света в частоту считывает матрицу 8 x 8 фотодиодов.

  1. 16 фотодиодов имеют синие фильтры
  2. 16 фотодиодов имеют зеленые фильтры
  3. 16 фотодиодов имеют красные фильтры
  4. 16 фотодиодов без фильтров.

Контакты S2 и S3 используются для выбора активной группы фотодиодов (красный, зеленый, синий, прозрачный). Фотодиоды имеют размер 110 х 110 мкм и расположены на 134-мкм центрах.

OE (Enable) должен быть подключен к GND (LOW).

Датчик инкапсулирован и должен питаться от 2,7 до 5,5 В постоянного тока. Мы будем использовать выход Arduino 5 В для питания датчика. Чтобы правильно использовать датчик, мы установим небольшое резиновое кольцо, чтобы изолировать датчик от бокового света. Мы использовали горячий клей для этого.

Схема соединения

Вы можете скачать файл схемы для программы Fritzing ниже:

Скачать raspoznavanie-cveta.zip

Соединяем сенсор TSC3200 с Ардуино следующим образом:

  • S0 ==> Nano pin D4
  • S1 ==> Nano pin D5
  • S2 ==> Nano pin D6
  • S3 ==> Nano pin D7
  • OUT ==> Nano Pin D8
  • EN ==> GND
  • VCC ==> +5V
  • GND ==> GND

Соединяем I2C LCD 2/16 ЖК-дисплей:

  • SDA ==> Nano Pin A4
  • SCL ==> Nano Pin A5

Установите Arduino Nano на макетную плату. Подключите выход Nano 5V и GND к обеим силовым шинам.

Код Ардуино для распознавания цвета

Первое, что нужно определить, — это масштабирование частоты, как определено в приведенной выше таблице. Для этого используются контакты S0 и S1. Масштабирование выходной частоты полезно для оптимизации показаний датчиков для различных частотных счетчиков или микроконтроллеров. Мы установим S0 и S1, оба в HIGH (100%):

digitalWrite(s0,HIGH);  digitalWrite(s1,HIGH);  

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

digitalWrite(s2, LOW);  digitalWrite(s3, LOW);      red = pulseIn(outPin, LOW); // Чтение КРАСНОГО компонента цвета          digitalWrite(s2, HIGH);      digitalWrite(s3, HIGH);      grn = pulseIn(outPin, LOW); // Чтение ЗЕЛЕНОГО компонента цвета            digitalWrite(s2, LOW);      digitalWrite(s3, HIGH);      blu = pulseIn(outPin, LOW); // Чтение СИНЕГО компонент цвета  

В окончательном коде мы несколько раз прочитаем каждый из компонентов RGB и возьмем среднее значение, чтобы мы могли снизить ошибку, если одно из показаний неверное.

Когда у нас есть 3 компонента (RGB), мы должны определить, какой это цвет. Чтобы сделать это, нужно предварительно откалибровать проект. Вы можете использовать известную цветную тестовую бумагу или объект и прочитать 3 сгенерированных компонента.

Вы можете изначально использовать наш код, изменив параметры для вашего уровня освещенности:

void getColor()  {      readRGB();         if (red > 8  && red < 18   &&  grn >  9 && grn < 19    &&  blu > 8  && blu < 16)   color = "WHITE";    else if (red > 80 && red < 125  &&  grn > 90 && grn < 125   &&  blu > 80 && blu < 125)  color = "BLACK";    else if (red > 12 && red < 30   &&  grn > 40 && grn < 70    &&  blu > 33 && blu < 70)   color = "RED";    else if (red > 50 && red < 95   &&  grn > 35 && grn < 70    &&  blu > 45 && blu < 85)   color = "GREEN";    else if (red > 10 && red < 20   &&  grn > 10 && grn < 25    &&  blu > 20 && blu < 38)   color = "YELLOW";    else if (red > 65 && red < 125  &&  grn > 65 && grn < 115   &&  blu > 32 && blu < 65)   color = "BLUE";    else  color = "NO_COLOR";  }  

Как вы можете видеть выше, мы предопределили 6 цветов: белый, черный, красный, зеленый, желтый и синий. По мере того, как рассеивается окружающий свет, параметры становятся все выше. Внутри цикла loop() мы определяем показания на ЖК-дисплее каждую 1 секунду.

Все программы, которые нужны для проекта и библиотеки вы можете найти в архиве ниже:

Скачать Arduino-TCS3200-cvet.zip

Итоговый результат (видео)

В итоге наш проект Ардуино распознавание цвета работает следующим образом:

На этом наш урок завершен.

Используемые источники:

  • https://xn--18-6kcdusowgbt1a4b.xn--p1ai/%d0%b4%d0%b0%d1%82%d1%87%d0%b8%d0%ba%d0%b0-%d1%86%d0%b2%d0%b5%d1%82%d0%b0-%d0%b0%d1%80%d0%b4%d1%83%d0%b8%d0%bd%d0%be-%d0%bf%d0%be%d0%b4%d0%ba%d0%bb%d1%8e%d1%87%d0%b5%d0%bd%d0%b8%d0%b5/
  • https://arduinoplus.ru/raspoznavanie-cveta-arduino/

Рейтинг автора
5
Подборку подготовил
Максим Уваров
Наш эксперт
Написано статей
171
Ссылка на основную публикацию
Похожие публикации