颜色识别传感器 TCS3200D模块 TCS230升级版 颜色传感器
该颜色传感器模块采用TCS3200D,是TCS230D的升级产品。TCS3200是一款静态识别物体颜色,并根据颜色信息输出不同频率,通过单片机对频率采样转换后即可得到颜色RGB数据。
我们提供Arduno示例代码已经完成频率到RGB值的转换(将频率值转换到0-255,具体颜色大家可以去查我们下面提供的颜色表),用户只需稍作修改就能直接使用,极大缩短了用户开发时间。
性能特点
主芯 片:TCS3200D
输出频率范围从10kHz~12kHz,占空比50%
工作电压:+2.7V~+5.5V
工作电流:1.4mA
检测状态:静态检测
佳检测距离:10mm
直径:36mm
应用方向:
此模块所有IO口均引出,可通过IO控制LED补光灯。也可以通过跳帽直接短接控制引脚和接地引脚,此时LED将常亮。
工作电压3V-5V,频率输出范围10-12KHZ,占空比50%。
使用方法
测试前,Arduno Demo代码会进行白平衡矫正,取得相应的RGB参数,然后用户再进行颜色测量,可以通过代码得到相应的RGB值,之后用户可以用此值进行颜色判断或者全彩LED显示等等。
PS: 所谓白平衡,就是要告诉模块什么是白色,这一个相对值。 你可以将任何颜色都认为是白色来告诉传感器模块,只是这样你测量的颜色也相对改变。 所以我们白平衡的时候,尽量保证环境是白色或者靠近白色,这样使得测试的结果越靠近真实值。
注意:
1. 尽量保证测试过程中光源的恒定,不要轻易移动 或者改变光源,好在封闭环境测试效果更佳。 每次改变光源都需要重新进行白平衡矫正。此模块无法用来小车壁障颜色识别。
2. 此模块由于环境的影响和光源改变的影响可能会有颜色飘逸和误差,如果需要测量颜色,请另外选购别的高精度颜色传感器。
Arduno 连接方式:
// GND & LED – GND , OE – GND, VCC – VCC, S0 – D6, S1 – D5, S2 – D4, S3 – D3, OUT – D2
//*********** IO 定义如下************//
#define S0 6
#define S1 5
#define S2 4
#define S3 3
#define OUT 2
测试步骤:
Arduno 参考代码
/*********************************************************************
** Device: TSC3200 **
** File: EF-TSC3200.c **
** **
** Created by ElecFreaks Robi.W /6 Sep 2011 **
** **
** Description: **
** This file is a sample code for your reference.Just a demo for **
** TSC230 Programmable Color Light-to-Frequency Converter Module. **
** **
** This demo code is free software; you can redistribute it and/or **
** modify it under the terms of the GNU Lesser General Public **
** License as published by the Free Software Foundation; either **
** version 2.1 of the License, or (at your option) **
** any later version. **
** **
** Copyright (C) 2011 ElecFreaks Corp. **
** **
** **
** http://elecfreaks.taobao.com **
*********************************************************************/
#include
#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);
}
串口结果返回分析:
标记1:开始后的初始读到的RGB频率值
标记2 :白平衡后,将RGB值校正到255的校正系数
标记3 :校正后的颜色返回值,在不测量物体情况下
标记4 :实际测量物体后的RGB返回值。 理论上这个返回值都是小于255的,不过可能由于光源改变,影响白平衡值,这个值会大于255。这个时候,你只需要再进行一次白平衡矫正就行。
发货清单:
TCS3200模块 x 1块