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

 



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




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

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

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