MP615
Датчик цвета
Только правильные цвета!
Датчик цвета в сочетании с микроконтроллером позволяет создать систему, распознающую цвета. Такой датчик может применяться в автоматизированных системах фасовки, отбраковки, калибровки, определения спелости плодов, полиграфии и многих других областях.
Нет в наличии
Датчик цвета в сочетании с микроконтроллером позволяет создать систему, распознающую цвета. Такой датчик может применяться в автоматизированных системах фасовки, отбраковки, калибровки, определения спелости плодов, полиграфии и многих других областях.
Инструкции
Дополнительная информация
Модуль построен на основе программируемого преобразователя цвета в частоту на микросхеме TCS3200. Преобразователь отфильтровывает RGB компоненты светового излучения и и формирует меандр, частота которого прямо пропорциональна интенсивности каждого компонента цвета. При измерениях необходимо осуществлять подстройку баланса белого при каждом изменении условий освещенности.
Особенности модуля:
- Высокое разрешение преобразования интенсивности цветов в частоту
- Программирование текущего канала определения цвета и масштабирования шкалы
- Прямое подсоединение к микроконтроллеру
- Напряжение питания от 2.7 до 5.5 В
- Функция отключения модуля
- Нелинейность около 0.2% на частоте 50 кГц
- Температурная стабильность 200 ppm/°C
- Низкопрофильный монтаж на плате
Назначение выводов:
1 - S0 (программирующий вход)
2 - S1 (программирующий вход)
3 - включение датчика (активный уровень - 0)
4 - земля питания
5 - U пит.
6 - выход
7 - S3 (программирующий вход)
8 - S4 (программирующий вход)
Программирующие входы S0, S1 определяют шкалу частоты (в зависимости от комбинации высоких и низких потенциалов на этих выводах).
Два вывода могут дать четыре комбинации режимов:
- 0 - отключить выход частоты
- 1 - шкала 2% от 600 кГц максимальной возможной частоты
- 2 - шкала 20% от 600 кГц максимальной возможной частоты
- 3 - шкала 100% от 600 кГц максимальной возможной частоты
Входы S2, S3 определяют режим измерения цвета, также два вывода дают четыре комбинации режимов:
- 0 - используются фотодиоды с красным фильтром
- 1 - используются фотодиоды с синим фильтром
- 2 - используются фотодиоды без фильтра
- 3 - используются фотодиоды с зеленым фильтром
Пример работы с датчиком для Ардуино:
Используем Ардуино для питания модуля напряжением 5 В. Закорачиваем выводы LED и GND, включая таким образом светодиоды подсветки.
Выводы Ардуино подключаем следующим образом:
GND & LED – GND , OE – GND, VCC – VCC, S0 – D6, S1 – D5, S2 – D4, S3 – D3, OUT – D2
Будем использовать внешнее прерывание 0, соответствующее выводу D2 Ардуино, к которому подсоединен вывод OUT датчика.
Для правильной работы программы необходимо скачать и установить библиотеку TimerOne для ATmega168/328.
Код:
/*------------------------------------------------------------------------------*/
#include <TimerOne.h>
#define S0 6
#define S1 5
#define S2 4
#define S3 3
#define OUT 2
int g_count = 0; // count the frequecy
int g_array[3]; // store the RGB value
int g_flag = 0; // filter of RGB queue
float g_SF[3]; // save the RGB Scale factor
// Init TSC230 and setting Frequency.
void TSC_Init()
{
pinMode(S0, OUTPUT);
pinMode(S1, OUTPUT);
pinMode(S2, OUTPUT);
pinMode(S3, OUTPUT);
pinMode(OUT, INPUT);
digitalWrite(S0, LOW); // OUTPUT FREQUENCY SCALING 2%
digitalWrite(S1, HIGH);
}
// Select the filter color
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); //Filter without Red
break;
case 1:
Serial.print("->Frequency R=");
Serial.println(g_count);
g_array[0] = g_count;
TSC_WB(HIGH, HIGH); //Filter without Green
break;
case 2:
Serial.print("->Frequency G=");
Serial.println(g_count);
g_array[1] = g_count;
TSC_WB(LOW, HIGH); //Filter without Blue
break;
case 3:
Serial.print("->Frequency B=");
Serial.println(g_count);
Serial.println("->WB End");
g_array[2] = g_count;
TSC_WB(HIGH, LOW); //Clear(no filter)
break;
default:
g_count = 0;
break;
}
}
void TSC_WB(int Level0, int Level1) //White Balance
{
g_count = 0;
g_flag ++;
TSC_FilterColor(Level0, Level1);
Timer1.setPeriod(1000000); // set 1s period
}
void setup()
{
TSC_Init();
Serial.begin(9600);
Timer1.initialize(); // defaulte is 1s
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 Scale factor
g_SF[1] = 255.0/ g_array[1] ; //G Scale factor
g_SF[2] = 255.0/ g_array[2] ; //B Scale factor
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);
}
/*------------------------------------------------------------------------------*/
До запуска программы следует направить (положить) датчик на белый фон, тогда программа при запуске определит баланс белого и откалибруется.
Все три значения R,G и B будут равны 255, как показывает стрелка 3 на рисунке.
После этого, подставляя датчик на какой-либо цвет (следует соблюдать одинаковое расстояние до определяемого цвета, такое же, как при калибровке, и не менять внешнее освещение), мы будем получать соответствующие этому цвету значения компонентов RGB. Подставив значения RGB в какой-нибудь редактор изображений Paint, например), можно посмотреть, насколько точно определяются цвета.