Arduino Uno 使用TCS3200D颜色传感器 分辨颜色
欢迎关注「凌顺实验室」微信公众号 |
TCS3200颜色传感器
实验效果
把色纸放在传感器2CM左右高的地方,
可以检测到该物体的RGB值,
然后我们通过画板可以检验出颜色是否正确
在实际环境中,自然光,灯光都有其色温,白色也有不同的颜色偏差。
注意测试前,第一个物体必须是白色的,因为程序先运行白平衡测试,测试后程序计算得出比例因子,之后就可以比较正确的测出其他颜色。
BOM表
Arduino Uno *1
TSC3200 颜色传感器 *1
面包板 *1
跳线若干
白色物体
红色或各色物体等
接线
Arduino Uno <-----> TSC3200颜色传感器
Pin 6 <-----> S0
Pin 5 <-----> S1
Pin 4 <-----> S2
Pin 3 <-----> S3
Pin 2 <-----> OUT
5V <-----> VCC
GND <-----> GND
源码
本例程使用到TimerOne库,请更新到Arduino的函数库里
TimerOne 库下载 http://download.csdn.net/detail/ling3ye/9762875
备用下载
城通网盘免费下载(会有些广告,不喜勿点) https://u16460183.ctfile.com/fs/16460183-234375893
#include <TimerOne.h> //申明库文件
//把TCS3200颜色传感器各控制引脚连到Arduino数字端口
#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输出信号的脉冲个数
#define LED 7 //控制TCS3200颜色传感器是否点亮LED灯
float g_SF[3]; //从TCS3200输出信号的脉冲数转换为RGB标准值的RGB比例因子
int g_count = 0; // 计算与反射光强相对应TCS3200颜色传感器输出信号的脉冲数
// 数组用于存储在1s内TCS3200输出信号的脉冲数,它乘以RGB比例因子就是RGB标准值
int g_array[3];
int g_flag = 0; // 滤波器模式选择顺序标志// 初始化TSC3200各控制引脚的输入输出模式
//设置TCS3002D的内置振荡器方波频率与其输出信号频率的比例因子为2%
void TSC_Init()
{pinMode(S0, OUTPUT);pinMode(S1, OUTPUT);pinMode(S2, OUTPUT);pinMode(S3, OUTPUT);pinMode(OUT, INPUT);pinMode(LED, OUTPUT);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(); // defaulte is 1sTimer1.attachInterrupt(TSC_Callback); //设置定时器1的中断,中断调用函数为TSC_Callback()//设置TCS3200输出信号的上跳沿触发中断,中断调用函数为TSC_Count()attachInterrupt(0, TSC_Count, RISING);digitalWrite(LED, HIGH);//点亮LED灯delay(4000); //延时4s,以等待被测物体红、绿、蓝三色在1s内的TCS3200输出信号脉冲计数//通过白平衡测试,计算得到白色物体RGB值255与1s内三色光脉冲数的RGB比例因子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],5);Serial.println(g_SF[1],5);Serial.println(g_SF[2],5);//红、绿、蓝三色光分别对应的1s内TCS3200输出脉冲数乘以相应的比例因子就是RGB标准值//打印被测物体的RGB值for(int i=0; i<3; i++)Serial.println(int(g_array[i] * g_SF[i]));
}
//主程序
void loop()
{g_flag = 0;//每获得一次被测物体RGB颜色值需时4sdelay(4000);//打印出被测物体RGB颜色值for(int i=0; i<3; i++)Serial.println(int(g_array[i] * g_SF[i]));
}
**本示例模块没有LED控制的引脚,所以LED 可以不用接
Arduino Uno 使用TCS3200D颜色传感器 分辨颜色相关推荐
- Arduino UNO测试BME680环境传感器
原文链接:https://www.yourcee.com/newsinfo/2929148.html BME680简介 BME680是一个四合一数字环境检测传感器,可以测量所处周围环境的温度.湿度.气 ...
- 如何用Arduino UNO和DS18B20防水传感器制作一个温度计
使用Arduino UNO和DS18B20防水温度传感器自制温度计! 在本篇文章中,我们将使用Arduino UNO开发板和DS18B20温度传感器来制作温度计.当高精度应用需要良好的响应能力时,DS ...
- Arduino Uno PM2.5粉尘传感器(GP2Y1010AU0F) 看看家里的空气质量
欢迎关注「凌顺实验室」微信公众号 这次用到的这个模块,是SHARP GP2Y10(粉尘传感器,其实我在怀疑是否也叫PM2.5) 买到手的时候,除了传感器还有随附的一个150欧姆的电阻和一个220uf的 ...
- 第四篇、基于Arduino uno,获取土壤湿度传感器的原始值和含水量——结果导向
0.结果 说明:先来看看串口调试助手显示的结果,第一个值是原始的模拟电压值,第二个值是含水量,如果是你想要的,可以接着往下看. 1.外观 说明:虽然土壤湿度传感器形态各异,但是原理和代码都是适用的. ...
- 第三十二篇、基于Arduino uno,获取光敏电阻传感器的原始值和光照强度——结果导向
0.结果 说明:先来看看串口调试助手显示的结果,第一个值是原始的模拟电压值,第二个值是含光量,也就是光照强度,如果是你想要的,可以接着往下看. 1.外观 说明:虽然光敏电阻传感器形态各异,但是原理和代 ...
- Arduino Uno 实验14——声音传感器
声音传感器简介 声音传感器的作用相当于一个话筒(麦克风).它用来接收声波,显示声音的振动图像,但不能对噪声的强度进行测量. 该传感器内置一个对声音敏感的电容式驻极体话筒.声波使话筒内的驻极体薄 ...
- 【TCS3200 颜色传感器与 Arduino 实现颜色识别】
TCS3200 颜色传感器与 Arduino 实现颜色识别 前言 TCS3200 颜色传感器引脚 颜色传感器模块如何工作? TCS3200 颜色传感器模块组成 关于颜色传感器 TCS3200 的常见问 ...
- Ardunio开发实例-TCS3200颜色传感器
颜色传感器 TCS3200颜色传感器可以根据其波长检测多种颜色. 该传感器对颜色识别项目特别有用,例如颜色匹配,颜色分类,试纸条读取等等. TCS3200颜色传感器(如下图所示)使用TAOS TCS3 ...
- Ardunio开发实例-VEML6040颜色传感器
VEML6040颜色传感器 VEML6040颜色传感器可感测红,绿,蓝和白光,并使用CMOS工艺将光电二极管,放大器和模拟/数字电路整合到单个芯片中. 应用颜色传感器后,可以根据环境光源调整背光的亮度 ...
最新文章
- 嵌入式常见笔试题总结
- jquery删除空图片错误图片,$('img[src=]').remove();
- winsock 收发广播包
- 正则表达式替换文本前n字符
- 系统监视器(Sysmon)工具的使用
- 搭建Nexus3(maven私服搭建)
- 计算机网络之广域网基础以及华为eNSP实验配置
- linux安装pycuda报错 517
- 拉新、复购、供应链,双11中小商家“三难”如何破?
- 绝热锥形与adc psr
- PS教程:5种把图片变成黑白色的方法
- Web项目经理手册之项目经理需要铭记在心的话
- 令人肝肠寸断的100个签名
- 正确的IE卸载与重装方法
- 【Linux】【操作】Linux环境运行Windows程序方式一览(全网最全)
- JAVA 图片地址路径转换 Base64 工具类
- VScode如何恢复误删文件
- Ghost 博客系统终极安装教程,装不上来打我!
- 【数据分析案例】2020年亚马逊商品评论数据分析
- 梯度下降、牛顿法凸优化、L1、L2正则化、softmax、Batchnorm、droupout、Targeted Dropout详解
热门文章
- 前端项目规范化1:什么是.editorconfig文件以及prettier转换.editorconfig文件属性
- his系统集成的子模块
- mysql服务一直处于启动状态 无法停止
- 目标检测tricks总结(记录)
- html小数转百分比函数,excel合格率公式 把小数点设置百分比就可以了
- PCA主成分分析 理解
- 当txt文件或者sql文件数据量太大,无法打开时,可以通过Emeditor这个编辑器打开
- 吴岩峰,杯酒快意,志在高峰
- 爬虫实例:链家网房源数据爬取
- Pixel1代平替:一加3手机刷入KaliNethunter解封完整Linux命令环境