шаблоны сайт визитка joomla
Скачать шаблоны Joomla 3.5 бесплатно
Вы находитесь здесь:Главная»Учебные материалы»Arduino Scetch»Датчик определения цвета TCS230

Датчик определения цвета TCS230

Датчик определения цвета TCS230 очень прост в использовании. Он способен определить цвет на расстоянии не более 1 мм. На корпусе датчика имеется 4 светодиода для подсветки места измерения. Запитывается датчик напряжением от 2.7 до 5 В

 TCS230 представляет собой RGB матрицу фотодиодов, каждый из которых реагирует на цвет по-разному. Т.к. все цвета состоят из нескольких спектров, то для определения цвета, нам необходимо измерять три спектра: красный, синий, зелёный. Для этого нам необходимо переключаться между R, G, B и измерять частоту сигнала на выходе датчика OUT. Именно потому нам нужен микроконтроллер. Данные каждого измерения необходимо записать в память контроллера и когда будут проведены все три измерения — выдать результат.

Однако схожие оттенки могут иметь совсем разную частоту. Это зависит от химического состава материала или краски предмета, цвет которого нужно определить. Разные химические элементы имеют свой спектр, который может накладываться на другие. Абсолютно два одинаковых, на наш взгляд цвета, могут оказаться различными для датчика, ведь датчик определяет цвет по нескольким спектрам в отдельности. Человеческий же глаз воспринимает их сразу все одновременно. 

Датчик TCS230 имеет две штыревые колодки контактов по четыре контакта на каждую.

Контакты правой колодки:

  • S3, S2 – входной сигнал настройкой масштабирования;
  • OUT – выходная частота;
  • VCC – напряжение питания.

Контакты левой колодки:

  • GND – общий контакт;
  • OE – контакт включения;
  • S1, S0 – выходная частота с настройкой масштабирования.

Схема подключения TCS230 

TCS230

Выбор режима работы :

 arduino color determinant 2

Пример использования датчика цвета

Подключим датчик определения цвета TCS230:

S0 к D6                                      OUT к D2 
S1 к D5                                      VCCк VCC 
S2 к D4                                      GND к GND 
S3 к D3                                     OE к GND

Составим программу, которая будет определять цвет предмета (выводить значения отттенков RGB в диапазоне от от до 255). После запуска программы следует выполнить калибровку датчика: поднести к нему белый предмет. Это требуется для того, чтобы определить уровень белого цвета. Зальем в Ардуино следующий программный код:


#include <TimerOne.h>

#define S0 6
#define S1 5
#define S2 4
#define S3 3
#define OUT 2

int g_count = 0;
int g_array[3];
int g_flag = 0;
float g_SF[3];

void TSC_Init()
{
pinMode(S0, OUTPUT);
pinMode(S1, OUTPUT);
pinMode(S2, OUTPUT);
pinMode(S3, OUTPUT);
pinMode(OUT, INPUT);

digitalWrite(S0, LOW);
digitalWrite(S1, HIGH);
}

void TSC_FilterColor(int Level01, int Level02)
{
if(Level01 != 0)
Level01 = HIGH;

if(Level02 != 0)
Level02 = HIGH;

digitalWrite(S2, Level01);
digitalWrite(S3, Level02);
}

void TSC_Count()
{
g_count ++ ;
}

void TSC_Callback()
{
switch(g_flag)
{
case 0:
Serial.println("->WB Start");
TSC_WB(LOW, LOW); //Фильтр без красного
break;
case 1:
Serial.print("->Frequency R=");
Serial.println(g_count);
g_array[0] = g_count;
TSC_WB(HIGH, HIGH); //Фильтр без зеленого
break;
case 2:
Serial.print("->Frequency G=");
Serial.println(g_count);
g_array[1] = g_count;
TSC_WB(LOW, HIGH); //Фильтр без синего
break;

case 3:
Serial.print("->Frequency B=");
Serial.println(g_count);
Serial.println("->WB End");
g_array[2] = g_count;
TSC_WB(HIGH, LOW); //Очистка
break;
default:
g_count = 0;
break;
}
}

void TSC_WB(int Level0, int Level1) //Баланс белого
{
g_count = 0;
g_flag ++;
TSC_FilterColor(Level0, Level1);
Timer1.setPeriod(1000000); // Установка периода таймера в 1с
}

void setup()
{
TSC_Init();
Serial.begin(9600);
Timer1.initialize(); // по умолчанию период равен 1с
Timer1.attachInterrupt(TSC_Callback);
attachInterrupt(0, TSC_Count, RISING);

delay(4000);

for(int i=0; i<3; i++)
Serial.println(g_array[i]);

g_SF[0] = 255.0/ g_array[0]; //R коэффициент
g_SF[1] = 255.0/ g_array[1] ; //G коэффициент
g_SF[2] = 255.0/ g_array[2] ; //B коэффициент

Serial.println(g_SF[0]);
Serial.println(g_SF[1]);
Serial.println(g_SF[2]);

}

void loop()
{
g_flag = 0;
for(int i=0; i<3; i++)
Serial.println(int(g_array[i] * g_SF[i]));
delay(4000);

}


Похожие материалы (по тегу)

Новости о нас

Расписание занятий для каждой сформированной группы по робототехнике на 2017-2018 учебный год. Подробнее
Учебный год начался, и у нас очередная радостная новость для вас, педагоги! В этом году... Подробнее
Наши учащиеся выступили на августовской конференции педагогов! Подробнее
Хочешь учиться в Толтеке по выгодной цене? Приводи друзей и получай большие скидки!... Подробнее
19 августа в ТРЦ Сити Молл с блеском прошел РобоКвест! Героями квеста стали более сотни... Подробнее

Наши партнеры

 TZOyoOCZ8y0 logotip novy SF BashGU  utv logo  CityMoll  VolnoeDelo