[《树莓派4B系列教程》]树莓派4B系列教程第5课 I2C颜色识别传感器 精华

WLE | NPC | 创造力: | 帖子: | 发消息 | 串个门 | 加好友 | 打招呼
2021-4-13 16:56:04 [显示全部楼层]
405浏览
查看: 405|回复: 1

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

[复制链接]

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

学习内容


导语

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

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

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

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

介绍I2C颜色识别传感器

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

FriApril-202104029346..png

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

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

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

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

    FriApril-202104027546..png

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

    FriApril-202104029632..png

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

    sudo apt-get install i2c-tools

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

    sudo i2cdetect -y -a 1
    FriApril-202104028212..png

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

    sudo i2cdump -y 1 0x29

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

    1 代表I2C设备号

    0x29 代表I2C设备地址

    FriApril-202104025002..png

  • 打开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)

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


yoyojacky  初级技匠

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

那个clearH x 0x100 + clearL的是不是写成: clearH << 8 | clearL 更好?哈哈
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4

© 2013-2021 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail