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

来自KEYES
跳转至: 导航搜索

概述

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

 

规格参数

  • 工作电压:3.3-5V(DC)
  • 接口:10PIN接口
  • 工作电流:1.4mA
  • 检测状态:静态检测
  • 最佳检测距离:10mm
  • 重量:5.6g
  • 输出频率范围从10kHz~12kHz,占空比50%


连接图

KE0074-1.png


测试代码

#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 
}


测试结果

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

KE0074-2.png


相关库文件链接

http://url.cn/4AQV1dk