цифровая электроника
вычислительная техника
встраиваемые системы

 

Arduino и датчик цвета TCS230 / TCS3200

Автор: Mike(admin) от 15-01-2019, 07:55

Как определить цвет с помощью Arduino и TCS230/TCS3200


В этом примере будет показано, как определять цвета с помощью Arduino и датчика цвета TCS230 / TCS3200.


Arduino и датчик цвета TCS230 / TCS3200

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


Модуль датчика цвета TCS3200, показанный на рисунке ниже, использует RGB-датчик TAOS TCS3200 для определения цвета. Он также содержит четыре белых светодиода, которые освещают объект перед ним. Рабочее напряжение датчика составляет от 2,7 В до 5,5 В.


датчик цвета TCS230 / TCS3200

TCS3200 имеет массив фотодиодов с 4 различными фильтрами. Фотодиод – это просто полупроводниковое устройство, которое преобразует свет в ток. Датчик имеет 16 фотодиодов с красным фильтром (чувствительны к длине волны красного цвета), 16 фотодиодов с зеленым фильтром (чувствительны к длине волны зеленого цвета), 16 фотодиодов с синим фильтром (чувствительны к длине волны синего цвета) и 16 фотодиодов без фильтра. Если вы внимательно посмотрите на чип TCS3200, вы можете увидеть различные фильтры.


датчик цвета TCS230 / TCS3200

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


Arduino и датчик цвета TCS230 / TCS3200

Распиновка датчика цвета показана на следующем рисунке.


датчик цвета TCS230 / TCS3200

Здесь OE (3) – активирует выходную частоту (при низком уровне), OUT (6) – выходной сигнал частоты, S0, S1 (1,2) – входы выбора масштабирования выходной частоты, S2, S3 (7,8) – входы выбора типа фотодиода.


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


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


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


Arduino и датчик цвета TCS230 / TCS3200

Код довольно простой и хорошо комментирован, поэтому разобраться в нем не составит особых хлопот.



// Контакты подключения TCS230 или TCS3200 к Arduino
#define S0 4
#define S1 5
#define S2 6
#define S3 7
#define sensorOut 8

// Хранение частоты считывания фотодиодов
int redFrequency = 0;
int greenFrequency = 0;
int blueFrequency = 0;

void setup() {
  // Настройка выходов
  pinMode(S0, OUTPUT);
  pinMode(S1, OUTPUT);
  pinMode(S2, OUTPUT);
  pinMode(S3, OUTPUT);
  
  // Установка sensorOut в качестве входа
  pinMode(sensorOut, INPUT);
  
  // Установка масштабирования частоты на 20%
  digitalWrite(S0,HIGH);
  digitalWrite(S1,LOW);
  
   // Запускаем связь по последовательному порту
  Serial.begin(9600);
}
void loop() {
  // Настройка фотодиодов с фильтром красного цвета для чтения
  digitalWrite(S2,LOW);
  digitalWrite(S3,LOW);
  
  // Чтение выходной частоты
  redFrequency = pulseIn(sensorOut, LOW);
  
   // Выводим значение красного цвета
  Serial.print("R = ");
  Serial.print(redFrequency);
  delay(100);
  
  // Настройка фотодиодов с фильтром зеленого цвета для чтения
  digitalWrite(S2,HIGH);
  digitalWrite(S3,HIGH);
  
  // Чтение выходной частоты
  greenFrequency = pulseIn(sensorOut, LOW);
  
  // Выводим значение зеленого цвета  
  Serial.print(" G = ");
  Serial.print(greenFrequency);
  delay(100);
 
  // Настройка фотодиодов с фильтром синего цвета для чтения
  digitalWrite(S2,LOW);
  digitalWrite(S3,HIGH);
  
  // Чтение выходной частоты
  blueFrequency = pulseIn(sensorOut, LOW);
  
  // Выводим значение синего цвета 
  Serial.print(" B = ");
  Serial.println(blueFrequency);
  delay(100);
}

Откройте последовательный монитор со скоростью 9600 бод. Поместите синий предмет перед датчиком при разных расстояниях. Вы должны сохранить два измерения: когда объект расположен далеко от датчика и когда объект находится близко к нему.


Arduino и датчик цвета TCS230 / TCS3200

Проверьте значения, отображаемые в последовательном мониторе. Частота синего цвета (B) должна быть самой низкой по сравнению с показаниями частоты красного (R) и зеленого (G), как показано на рисунке ниже.


Arduino и датчик цвета TCS230 / TCS3200

Когда мы помещаем синий объект перед датчиком, значения синей частоты (B) колеблются между 59 и 223 (см. выделенные значения). Повторите этот процесс с зелеными и красными объектами и запишите верхний и нижний пределы частоты для каждого цвета.


Arduino и датчик цвета TCS230 / TCS3200

Теперь научим Arduino различать цвета. Следующий скетч отображает значения частоты в значения RGB (от 0 до 255). На предыдущем шаге, когда у нас было максимальное количество синего цвета, мы получили частоту 59, а когда у нас синий цвет на более высоком расстоянии, мы получили 223. Так, 59 по частоте соответствует 255 (в RGB) и 223 по частоте 0 (в RGB). Мы сделаем это с помощью Arduino-функции map(). В функции map() вам нужно заменить параметры XX вашими собственными значениями.



// Контакты подключения TCS230 или TCS3200 к Arduino
#define S0 4
#define S1 5
#define S2 6
#define S3 7
#define sensorOut 8

// Хранение частоты считывания фотодиодов
int redFrequency = 0;
int greenFrequency = 0;
int blueFrequency = 0;

// Хранение значений цветов
int redColor = 0;
int greenColor = 0;
int blueColor = 0;

void setup() {
  // Настройка выходов
  pinMode(S0, OUTPUT);
  pinMode(S1, OUTPUT);
  pinMode(S2, OUTPUT);
  pinMode(S3, OUTPUT);
  
  // Установка sensorOut в качестве входа
  pinMode(sensorOut, INPUT);
  
  // Установка масштабирования частоты на 20%
  digitalWrite(S0,HIGH);
  digitalWrite(S1,LOW);
  
  // Запускаем связь по последовательному порту
  Serial.begin(9600);
}

void loop() {
  // Настройка фотодиодов с фильтром красного цвета для чтения
  digitalWrite(S2,LOW);
  digitalWrite(S3,LOW);
  
  // Чтение выходной частоты
  redFrequency = pulseIn(sensorOut, LOW);
  // Переназначение значения частоты красного цвета от 0 до 255
  // Вы должны заменить своими собственными значениями. Вот пример:
  // redColor = map(redFrequency, 70, 120, 255,0);
  redColor = map(redFrequency, XX, XX, 255,0);
  
  // Выводим значение красного цвета
  Serial.print("R = ");
  Serial.print(redColor);
  delay(100);
  
  // Настройка фотодиодов с фильтром зеленого цвета для чтения
  digitalWrite(S2,HIGH);
  digitalWrite(S3,HIGH);
  
  // Чтение выходной частоты
  greenFrequency = pulseIn(sensorOut, LOW);
  // Переназначение значения частоты зеленого цвета от 0 до 255
  // Вы должны заменить своими собственными значениями. Вот пример: 
  // greenColor = map(greenFrequency, 100, 199, 255, 0);
  greenColor = map(greenFrequency, XX, XX, 255, 0);
  
  // Выводим значение зеленого цвета
  Serial.print(" G = ");
  Serial.print(greenColor);
  delay(100);
 
  // Настройка фотодиодов с фильтром синего цвета для чтения
  digitalWrite(S2,LOW);
  digitalWrite(S3,HIGH);
  
  // Чтение выходной частоты
  blueFrequency = pulseIn(sensorOut, LOW);
  // Переназначение значения частоты синего цвета от 0 до 255
  // Вы должны заменить своими собственными значениями. Вот пример:
  // blueColor = map(blueFrequency, 38, 84, 255, 0);
  blueColor = map(blueFrequency, XX, XX, 255, 0);
  
  // Выводим значение синего цвета
  Serial.print(" B = ");
  Serial.print(blueColor);
  delay(100);

  // Проверяем текущий обнаруженный цвет и печатаем
  // сообщение в последовательном мониторе
  if(redColor > greenColor && redColor > blueColor){
      Serial.println(" - RED detected!");
  }
  if(greenColor > redColor && greenColor > blueColor){
    Serial.println(" - GREEN detected!");
  }
  if(blueColor > redColor && blueColor > greenColor){
    Serial.println(" - BLUE detected!");
  }
}

Теперь поместите что-нибудь перед датчиком. Он должен вывести в последовательном мониторе обнаруженный цвет: красный (RED), зеленый (GREEN) или синий (BLUE).




© digitrode.ru


Теги: Arduino, датчик цвета, TCS3200



   Благодарим Вас за интерес к информационному проекту digitrode.ru.
   Если Вы хотите, чтобы интересные и полезные материалы выходили чаще, и было меньше рекламы,
   Вы можее поддержать наш проект, пожертвовав любую сумму на его развитие.


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

Комментарии:

Оставить комментарий