KE0074 keyes 颜色传感器(焊盘孔) 红色 环保

  传感器系列

KE0074 (1)

1. 概述

本传感器用到的主要芯片是TCS230,它采用镀金工艺T,是TCS230升级版本,效果更好。它抗光干扰,可检测不发光物体颜色。传感器自带4个定位孔,方便你将传感器固定在其他设备。

2. 规格参数

工作电压:3.3-5V(DC)

接口:10PIN接口

工作电流:1.4mA

检测状态:静态检测

最佳检测距离:10mm

重量:5.6g

输出频率范围从10kHz~12kHz,占空比50%

3. 连接图

KE0074

4. 测试代码

#include <TimerOne.h>

#define S0 6 //物体表面的反射光越强,TCS3002D内置振荡器产生的方波频率越高

#define S1 5 //S0和S1的组合决定输出信号频率比例因子,比例因子为2%

//比率因子为TCS3200传感器OUT引脚输出信号频率与其内置振荡器频率之比

#define S2 4 //S2和S3的组合决定让红、绿、蓝,哪种光线通过滤波器

#define S3 3

#define OUT 2 //TCS3200颜色传感器输出信号连接到Arduino中断0引脚,并引发脉冲信号中断

//在中断函数中记录TCS3200输出信号的脉冲个数

int g_count = 0; // 计算与反射光强相对应TCS3200颜色传感器输出信号的脉冲数

// 数组用于存储在1s内TCS3200输出信号的脉冲数,它乘以RGB比例因子就是RGB标准值

int g_array[3];

int g_flag = 0; // 滤波器模式选择顺序标志

float g_SF[3]; //从TCS3200输出信号的脉冲数转换为RGB标准值的RGB比例因子

// 初始化TSC3200各控制引脚的输入输出模式

//设置TCS3002D的内置振荡器方波频率与其输出信号频率的比例因子为2%

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);

}

//中断函数,计算TCS3200输出信号的脉冲数

void TSC_Count()

{

g_count ++ ;

}

//定时器中断函数,每1s中断后,把该时间内的红、绿、蓝三种光线通过滤波器时,

//TCS3200输出信号脉冲个数分别存储到数组g_array[3]的相应元素变量中

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); //打印1s内的红光通过滤波器时,TCS3200输出的脉冲个数

g_array[0] = g_count; //存储1s内的红光通过滤波器时,TCS3200输出的脉冲个数

TSC_WB(HIGH, HIGH); //选择让绿色光线通过滤波器的模式

break;

case 2:

Serial.print(“->Frequency G=”);

Serial.println(g_count); //打印1s内的绿光通过滤波器时,TCS3200输出的脉冲个数

g_array[1] = g_count; //存储1s内的绿光通过滤波器时,TCS3200输出的脉冲个数

TSC_WB(LOW, HIGH); //选择让蓝色光线通过滤波器的模式

break;

case 3:

Serial.print(“->Frequency B=”);

Serial.println(g_count); //打印1s内的蓝光通过滤波器时,TCS3200输出的脉冲个数

Serial.println(“->WB End”);

g_array[2] = g_count;//存储1s内的蓝光通过滤波器时,TCS3200输出的脉冲个数

TSC_WB(HIGH, LOW); //选择无滤波器的模式

break;

default:

g_count = 0; //计数值清零

break;

}

}

//设置反射光中红、绿、蓝三色光分别通过滤波器时如何处理数据的标志

//该函数被TSC_Callback( )调用

void TSC_WB(int Level0, int Level1)

{

g_count = 0; //计数值清零

g_flag ++; //输出信号计数标志

TSC_FilterColor(Level0, Level1); //滤波器模式

Timer1.setPeriod(1000000); //设置输出信号脉冲计数时长1s

}

void setup()

{

TSC_Init();

Serial.begin(9600); //设置波特率

Timer1.initialize();

Timer1.attachInterrupt(TSC_Callback);

attachInterrupt(0, TSC_Count, RISING);//设置定时器1的中断,中断调用函数为TSC_Callback()

//设置TCS3200输出信号的上跳沿触发中断,中断调用函数为TSC_Count()

delay(4000);//延时4s,以等待被测物体红、绿、蓝三色在1s内的TCS3200输出信号脉冲计数

//通过白平衡测试,计算得到白色物体RGB值255与1s内三色光脉冲数的RGB比例因子

for(int i=0; i<3; i++)

Serial.println(g_array[i]);

g_SF[0] = 255.0/ g_array[0]; //红色光比例因子

g_SF[1] = 255.0/ g_array[1] ; //绿色光比例因子

g_SF[2] = 255.0/ g_array[2] ; //蓝色光比例因子

Serial.println(g_SF[0]);

Serial.println(g_SF[1]);

Serial.println(g_SF[2]);

//红、绿、蓝三色光分别对应的1s内TCS3200输出脉冲数乘以相应的比例因子就是RGB标准值

//打印被测物体的RGB值

}

void loop()

{

g_flag = 0; //每获得一次被测物体RGB颜色值需时4s

for(int i=0; i<3; i++) //打印出被测物体RGB颜色值

Serial.println(int(g_array[i] * g_SF[i]));

delay(4000);//延迟4S

}

5. 测试结果

按照上图接好线,烧录好代码,上电后,打开串口监视器,可看到检测颜色的R G B的比例,如下图。

6. 相关库文件链接

http://url.cn/4AQV1dk