TCS34725 Color Sensor
| ||||||||||||||||||||
|
说明
产品简介
本模块是ams AG 的 TCS34725FN彩色光数字转换器为核心的颜色传感器,传感器提供红色,绿色,蓝色(RGB)和清晰光感应值的数字输出。集成红外阻挡滤光片可最大限度地减少入射光的红外光谱成分,并可精确地进行颜色测量。具有高灵敏度,宽动态范围和红外阻隔滤波器。最小化IR和UV光谱分量效应,以产生准确的颜色测量。并且带有环境光强检测和可屏蔽中断。通过I2C接口通信。
产品特性
参数名称 | 参数 |
转换芯片 | PCF8591 |
工作电压 | 3.3V/5V |
控制芯片 | TCS34725FN |
逻辑电压 | 3.3V/5V |
通信接口 | I2C |
产品尺寸 | 27X20(mm) |
接口说明
引脚 | 功能 |
VCC | 电源正(3.3V/5V) |
GND | 电源地 |
SDA | I2C数据输入 |
SCL | I2C时钟输入 |
INT | 中断输出(开漏输出) |
LED | 发光二极管 |
硬件说明
芯片
本产品采用TCS34725为核心,是一款基于IIC总线通信的彩色光数字转换器。传感器提供红色,绿色,蓝色(RGB)和清晰光感应值的数字输出,带有集成红外阻隔滤波器。具有高灵敏度,宽动态范围。可在不同的光照条件下都可以实现准确的色彩和环境光线感应,带有可屏蔽中断。
通信协议
从上的得知使用的是I2C通信,I2C 通信,一条数据线,一条时钟线。 I2C 总线在传送数据过程中共有三种类型信号:开始信号、结束信号和应答信号。
开始信号:SCL 为高电平时, SDA 由高电平向低电平跳变,开始传送数据。
结束信号:SCL 为高电平时, SDA 由低电平向高电平跳变,结束传送数据。
应答信号:接收数据的 IC 在接收到 8bit 数据后,向发送数据的 IC 发出特定的低电平脉冲,表示已收到数据。
I2C写时序
首先主机(即树莓派,后面统称为主机)会发送一个开始信号,然后将其 I2C 的 7 位地址与写操作位组合成 8 位的数据发送给从机(即 TSL2581 传感器模块,后面统称为从机),从机接收到后会响应一个应答信号,主机此时将命令寄存器地址发送给从机,从机接收到发送响应信号,此时主机发送命令寄存的值,从机回应一个响应信号,直到主机发送一个停止信号,此次 I2C 写数据操作结束。
I2C读时序
首先主机会发送一个开始信号,然后将其 I2C 的 7 位地址与写操作位组合成 8 位的数据发送给从机,从机接收到后会响应一个应答信号,主机此时将命令寄存器地址发送给从机,从机接收到发送响应信号,此时主机重新发送一个开始信号,并且将其 7 位地址和读操作位组合成 8 位的数据发送给从机,从机接收到信号后发送响应信号,再将其寄存器中的值发送给主机,主机端给予响应信号,直到主机端发送停止信号,此次通信结束。
I2C地址
TCS34725的I2C设备地址为0X29
TCS34725数据手册第34页 |
注意:0X29这个设备地址是7位的,8位设备地址需要向高位移一位变成0X52
RPI使用教程
开启I2C接口
- 打开树莓派终端,输入以下指令进入配置界面
sudo raspi-config 选择 Interfacing Options -> I2C ->yes 启动 i2C 内核驱动
sudo reboot
安装库
如果使用bookworm系统,只能使用lgpio库,bcm2835跟wiringPi无法安装与使用,python库可以不安装,直接运行程序即可
BCM2835
#打开树莓派终端,并运行以下指令 wget http://www.airspayce.com/mikem/bcm2835/bcm2835-1.71.tar.gz tar zxvf bcm2835-1.71.tar.gz cd bcm2835-1.71/ sudo ./configure && sudo make && sudo make check && sudo make install # 更多的可以参考官网:http://www.airspayce.com/mikem/bcm2835/
wiringPi
#打开树莓派终端,并运行以下指令 cd sudo apt-get install wiringpi #对于树莓派2019年5月之后的系统(早于之前的可不用执行),可能需要进行升级: wget https://project-downloads.drogon.net/wiringpi-latest.deb sudo dpkg -i wiringpi-latest.deb gpio -v # 运行gpio -v会出现2.52版本,如果没有出现说明安装出错 #Bullseye分支系统使用如下命令: git clone https://github.com/WiringPi/WiringPi cd WiringPi ./build gpio -v # 运行gpio -v会出现2.70版本,如果没有出现说明安装出错
lgpio
wget https://github.com/joan2937/lg/archive/master.zip unzip master.zip cd lg-master sudo make install # 更多的可以参考官网:https://github.com/gpiozero/lg
- 安装Python函数库
#python2 sudo apt-get update sudo apt-get install python-pip sudo apt-get install python-pil sudo apt-get install python-numpy sudo pip install RPi.GPIO sudo pip install spidev
下载测试程序
打开树莓派终端,执行:
sudo apt-get install p7zip-full -y sudo wget https://www.waveshare.net/w/upload/a/a1/TCS34725_Color_Sensor_code.7z 7z x TCS34725_Color_Sensor_code.7z -O./TCS34725_Color_Sensor_code cd TCS34725_Color_Sensor_code/RaspberryPi/
硬件连接
TCS34725 | Raspberry Pi | 功能 |
Board物理引脚序号 | ||
VCC | 3.3V | 电源输入 |
GND | GND | 电源地 |
SDA | 3 | I2C数据输入 |
SCL | 5 | I2C时钟信号 |
INT | 11 | 中断输出(开漏输出) |
LED | 12 | 发光二极管 |
运行测试程序
以下命令请在RaspberryPi下执行,否则不在索引不到目录;
C
- 重新编译,编译过程可能需要几秒
bcm2835
cd bcm2835 sudo make clean sudo make sudo ./main
wiringPi
cd wiringPi sudo make clean sudo make sudo ./main
python
cd python sudo python main.py
现象
在树莓派运行程序后,就会输出检测到的颜色值,目前是检测红色的值,如下图所示:
bcm2835
wiringPi
python
其中R、G、B是RGB888格式以十进制分开输出,C是没有做任何处理的环境光强数值,RGB565、RGB888分别是对应格式的十六进制输出,LUX是已经处理过的环境光强数字,CT是色温。(http://www.360doc.com/content/17/0629/07/44859260_667365022.shtml),用户如果想测量色温偏差小,建议关闭LED灯。INT是中断,1标识光强超过设定值。
将数值转换成颜色,可以通过下面连接的工具实现:
https://www.sioe.cn/yingyong/yanse-rgb-16/
或者直接下载:https://www.waveshare.net/w/upload/0/05/Hexacolor3.7z
STM32使用教程
我们提供的例程是基于STM32F103RBT6,提供的连接方式是对应的STM32F103RBT6的引脚为例,如果有需要使用其他STM32,请按实际引脚连接
硬件连接
TCS34725 | STM32 | 功能 |
VCC | 3.3V | 电源输入 |
GND | GND | 电源地 |
SDA | PB9 | I2C数据输入 |
SCL | PB8 | I2C时钟信号 |
INT | PB4 | 中断输出(开漏输出) |
LED | PB10 | 发光二极管 |
软件说明
例程是基于HAL库进行开发的。
请在资料里面下载程序,找到STM32程序文件目录,打开TCS34725_Color_Sensor_code\STM32\XNUCLEO-F103RB\MDK-ARM
目录下的TCS34725_Color_Sensoc.uvprojx,即可看到程序。
下载成功后,运行SSCOM,就可以实时查看传感器的状态啦,当前检测的是红色。
现象
打开串口调试软件,串口实时输出检测到颜色值。
Arduino使用教程
本例程已经在Arduino uno上测试通过,直接按下表连接Arduino uno即可
硬件连接
您可以对照以下表格连线。
PCF8591 | Arduino | 功能 |
VCC | 5V | 电源输入 |
GND | GND | 电源地 |
SDA | SDA | I2C数据输入 |
SCL | SCL | I2C时钟信号 |
INT | D5 | 中断输出(开漏输出) |
LED | D6 | 发光二极管 |
安装编译软件(Windows教程)
运行程序
在我们提供的资料里面下载程序,并解压,再进入TCS34725_Color_Sensor_code/Arduino/Color_Sensor目录下
双击打开Color_Sensor.ino文件。
选择你的开发板,跟对应的端口。
进行编译下载,如下图:
下载成功后,打开Arduino串口监视器,就可以实时查看传感器的状态啦,当前为红色的值。
现象
打开Arduino串口监视器,串口实时输出检测到的颜色值。
FAQ
这种情况是光强超出检查范围,减小增益可以完美解决(在初始里面修改,或者在初始化后面重新写入一个增益设置TCS34725_Set_Gain(TCS34725_GAIN_16X))
因为积分时间决定了RGBC通道数据最大值,修改积分时间会导致颜色偏暗或者偏白。只需要增加或减少LED亮度即可。