WLE 发表于 2021-4-13 16:56:04

树莓派4B系列教程第5课 I2C颜色识别传感器

## 第5课:I2C颜色识别传感器 - TCS34725

## 学习内容

**导语**

想知道《人与自然》中变色龙是怎么变色的吗?想知道时下最流行的电子取色笔是怎么取色的吗?

不要多想,它们的原理很简单。大自然是人类最好的老师,很多奇趣创意的灵感都是从自然界的生物中获得的。

变色龙在经过几千万年的衍化后,形成了一种生物本能,可以通过变换皮肤的保护色完美隐藏在周边的环境中。这是一种从“取色”到“配色”的过程。

而现今的电子取色笔也是同样原理,通过检测物体的颜色,得到RGB三基色数值,再通过融合这些数值,调配出物体的颜色。就和小时候捏橡皮泥似得,在知道一定配比之后就能捏出你想要的颜色。

**介绍I2C颜色识别传感器**

>TCS34725是一款低成本,高性价比的RGB全彩颜色识别传感器,传感器通过光学感应来识别物体的表面颜色。支持红、绿、蓝(RGB)三基色,支持明光感应,可以输出对应的具体数值,帮助还原颜色本真。



>为了提高精度,防止周边环境干扰,在传感器底部特意添加了一块红外遮光片,最大程度减小了入射光的红外频谱成份,让颜色管理更加准确。板载自带四个高亮LED,可以让传感器在低环境光的情况下依然能够正常使用,实现“补光”的功能。模块采用I2C通信,拥有PH2.0和XH2.54(面包板)两种接口,用户可以根据自己的需求来选择接口,更加便利。

**在树莓派上使用I2C颜色识别传感器**

-   将树莓派开机并将正确安装树莓派扩展板

-   将数字颜色识别传感器接入扩展板对应的IIC接口



-   配置使能I2C并重启树莓派,如已配置,可跳过该步骤。按如下流程配置树莓派并重启。



-   安装I2C库和工具,树莓派需要联网。如已安装,可跳过该步骤。在终端中,依次键入如下指令,并回车:

`sudo apt-get install i2c-tools`

-   当连接上I2C设备后,可以通过以下命令查看I2C地址。在终端中,依次键入如下指令,并回车:

`sudo i2cdetect -y -a 1`


-   读取I2C设备所有寄存器数据。在终端中,依次键入如下指令,并回车:

`sudo i2cdump -y 1 0x29`

*-y 代表取消用户交互过程,直接执行命令*

*1 代表I2C设备号*

*0x29 代表I2C设备地址*



-   打开Thonny Python IDE将下面程序复制到其中


```import smbus
import time
bus = smbus.SMBus(1)

addr = 0x29

CDATAL = 0x94
CDATAH = 0x95
RDATAL = 0x96
RDATAH = 0x97
GDATAL = 0x98
GDATAH = 0x99
BDATAL = 0x9a
BDATAH = 0x9b

while True:
    ClearL = bus.read_byte_data(addr , CDATAL)
    ClearH = bus.read_byte_data(addr , CDATAH)
    Clear = ClearH * 0x100 + ClearL
    print("Clear = 0X%x" %Clear)

    RedL = bus.read_byte_data(addr , RDATAL)
    RedH = bus.read_byte_data(addr , RDATAH)
    Red = RedH * 0x100 + RedL
    print("Red   = 0X%x" %Red)

    GreenL = bus.read_byte_data(addr , GDATAL)
    GreenH = bus.read_byte_data(addr , GDATAH)
    Green = GreenH * 0x100 + GreenL
    print("Green = 0X%x" %Green)

    BlueL = bus.read_byte_data(addr , BDATAL)
    BlueH = bus.read_byte_data(addr , BDATAH)
    Blue = BlueH * 0x100 + BlueL
    print("Blue= 0X%x" %Blue)

    print("    ")
    time.sleep(1)


```


![](media/edfb06fb83b517ba9b138f033aa853ef.png)

-   点击运行将自动打印出颜色信息。

yoyojacky 发表于 2021-10-12 11:34:12

那个clearH x 0x100 + clearL的是不是写成: clearH << 8 | clearL 更好?哈哈
页: [1]
查看完整版本: 树莓派4B系列教程第5课 I2C颜色识别传感器