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

2021-04-131万
精华项目
AI 快速预览详细 收起
本教程介绍了如何在树莓派4B上使用I2C颜色识别传感器TCS34725。首先配置I2C并安装相关库工具,然后通过读取I2C设备寄存器数据来检测物体的颜色。TCS34725传感器支持RGB三基色检测,并提供明光感应功能。通过具体的代码示例,用户可以轻松实现颜色识别。

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

学习内容

导语

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

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

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

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

介绍I2C颜色识别传感器

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

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

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

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

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

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

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

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

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

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

    sudo apt-get install i2c-tools

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

    sudo i2cdetect -y -a 1
    树莓派4B系列教程第5课 I2C颜色识别传感器图4

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

    sudo i2cdump -y 1 0x29

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

    1 代表I2C设备号

    0x29 代表I2C设备地址

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

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

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)

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


创作许可协议

本项目采用 None(不开放任何权利,保留所有权利) 进行许可。

评论(1)
yoyojacky
yoyojacky
那个clearH x 0x100 + clearL的是不是写成: clearH << 8 | clearL 更好?哈哈
- 没有更多了 -