Arduino爱好者

 找回密码
 立即注册

QQ登录

只需一步,快速开始

楼主: eagler8

[经验] 【Arduino】108种传感器系列实验(64)---TCS3200D颜色识别传感器

[复制链接]
 楼主| 发表于 2019-7-21 19:05 | 显示全部楼层
模块电原理图

06 (1).jpg
 楼主| 发表于 2019-7-21 19:27 | 显示全部楼层
颜色传感器与Arduino接线脚图
Arduino UNO———–TSC3200颜色传感器
Digital 6——————S0
Digital 5——————S1
Digital 4——————S2(决定颜色通过引脚,配合S3引脚)
Digital 3——————S3
Digital 2——————OUT
VCC————————VCC
GND————————GND

06-.jpg

 楼主| 发表于 2019-7-21 19:36 | 显示全部楼层
07.jpg
 楼主| 发表于 2019-7-22 11:32 | 显示全部楼层
[mw_shl_code=arduino,true]/*
【Arduino】66种传感器模块系列实验(64)
实验六十四: TCS3200D颜色识别传感器(可编程彩色光频识别转换器模块)
*/

#include <TimerOne.h>//申明库文件
//把TCS3200颜色识别传感器各控制引脚连到Arduino数字端口
#define S0     6   //物体表面的反射光越强,TCS3200内置震荡器产生的方波频率越高,
#define S1    5   //SO和S1的组合决定输出信号频率比例因子,比例因子为2%
//比例因子为TCS3200传感器OUT引脚输出信号频率与其内置振荡器频率之比
#define S2     4  //S2和S3的组合决定让红、绿、蓝,哪种光线通过滤波器
#define S3     3
#define OUT    2 //TCS3200颜色传感器输出信号
//在中断函数中纪录TCS3200输出信号的脉冲个数
int   g_count = 0;    // 计算与反射光相对应TCS3200颜色传感器输出信号的脉冲数
int   g_array[3];     // 存储RGB值
int   g_flag = 0;     // 滤波器模式选择顺序标志
float g_SF[3];        // 从TCS3200输出信号的脉冲数转换为RGB标准值的RGB比例因子
//初始化TSC3200各控制引脚的输入输出模式
//设置TCS3200的内置振荡器方波频率与其输出信号频率的比例因子为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)      //White Balance
{
   g_count = 0; //计数值清零
   g_flag ++;  //输出信号计数标志
   TSC_FilterColor(Level0, Level1); //滤波器模式
   Timer1.setPeriod(1000000);             // 设置输出信号脉冲计数时长1s
}
//初始化
void setup()
{
   TSC_Init();
   Serial.begin(9600);  //启动串口通信
   Timer1.initialize();             // defaulte is 1s缺省是1秒
   Timer1.attachInterrupt(TSC_Callback);  //设置定时器1的中断,中断调用函数为TSC_Callbace()

//设置TCS3200输出信号的上跳沿触发中断,中断调用函数为TSC_Count()
   attachInterrupt(0, TSC_Count, RISING);  
   delay(4000); //延时4s,以等待被测物体红、绿、蓝三色在1s内的TCS3200输出信号脉冲计数

//通过白平衡测试,计算得到白色物体RGB值255与1s内三色光脉冲数的RGB比例因子
   for(int i=0; i<3; i++)
     Serial.println(g_array);
   g_SF[0] = 255.0/ g_array[0];     //红色光比例因子
   g_SF[1] = 255.0/ g_array[1] ;    //绿色光比例因子
   g_SF[2] = 255.0/ g_array[2] ;    //蓝色光比例因子

//打印白平衡后的红、绿、蓝三色的RGB比例因子
   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 * g_SF));
    delay(4000);
}[/mw_shl_code]
 楼主| 发表于 2019-7-22 11:36 | 显示全部楼层
识别接近灰白色的串口输出数据

08.jpg
 楼主| 发表于 2019-7-22 11:51 | 显示全部楼层
白色的串口数据

09.jpg

 楼主| 发表于 2019-7-22 11:56 | 显示全部楼层
10.jpg
 楼主| 发表于 2019-7-22 12:10 | 显示全部楼层
10-.jpg
 楼主| 发表于 2019-7-22 12:12 | 显示全部楼层
11.jpg
 楼主| 发表于 2019-7-22 12:21 | 显示全部楼层
12.jpg
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|Archiver|手机版|Arduino爱好者

GMT+8, 2022-11-29 22:43 , Processed in 0.074675 second(s), 15 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表