查看: 843|回复: 1

【测评TCS3472】使用 TCS3472 实现色控电子琴

[复制链接]
  • TA的每日心情
    擦汗
    2019-7-29 00:08
  • 签到天数: 47 天

    [LV.5]常住居民I

    发表于 2020-4-22 01:53 | 显示全部楼层 |阅读模式
    首先感谢 M5Stack 团队这次给试用 TCS3472 颜色识别模块!
    在接下来的日子中我会逐步发表测评帖子,记录项目“色控电子琴”的开发历程。

    本帖是第 3 篇测评,内容为色控电子琴(v1)的实现,含全部软硬件资料。

    --------------------------------------------------------------------

    【背景】
    按着之前申请 TCS3472 试用时的约定,需要我实现一套色控电子琴项目,并公开全部资料。
    基于前几个测评帖子的技术积累,今天已可以完成整个色控电子琴的搭建、编程,故记录之。

    测评帖子#1,发现 RGB 转 XYZ 颜色矩阵有误:https://www.arduino.cn/thread-96922-1-1.html
    测评帖子#2,测试 TCS3472 高分辨时丝滑程度:https://www.arduino.cn/thread-96923-1-1.html
    测评帖子#3,即本帖子。


    【运行原理】
    所谓“色控电子琴”是我对这个项目的戏称,相对于传统键盘琴而言,色控电子琴的琴键是颜色。
    TCS3472 颜色识别模块可以区分出物体的不同颜色,通过算法将颜色映射为音高,即为“色控电子琴”。

    实际操作过程中,颜色的原始表达为 CIE-RGB 分量形式,是一个三维的空间;
    通过变换(见测评帖子#1)可去除亮度,得到色度即 CIE-XYZ,降维为二维空间;
    然而实际音高是一维线性的,因此需要通过算法将 CIE-XYZ 再次降维,获得一维空间对应音高。


    【硬件搭建】
    首先来张整个系统的大合照,含“色控电子琴”、待测物品,以及寂寞的 M5Stack 包装盒。
    1-SystemAll.JPG

    近看色控电子琴,就是个插了 ①TCS3472;②蜂鸣器;③外置电源 的 UNO 主机。
    所有的矩阵变换、空间降维、颜色处理、浮点计算都嵌入在 UNO 处理器中,PC不参与任何计算。
    2-ColorTune.JPG

    考虑到 TCS3472 逻辑电平为 3.3V,在转接板上特地搭棚 1K 电阻串在模块和 UNO 之间,
    避免 5V 逻辑电压损坏模块,实测工作稳定可靠。
    6-Res3v3.JPG

    接下来细看每个工作单元。

    首先是 TCS3472,自带白色照明,可以直接识别不发光的物体颜色,使用简便:
    3-TCS3472.JPG

    之后使蜂鸣器,我直接用主板蜂鸣器插在转接板上,最大程度简化接线:
    4-Buzzer.JPG

    最后是供电,使用两节 10440 锂电池给 VIN 供电,实际 8.0V 左右非常可靠:
    5-Battery.JPG


    【软件算法】
    硬件搭建完以后,就开始软件编程,程序主框架是 Arduino UNO,
    使用 Adafruit_TCS34725 类访问传感器,使用 tone/noTone 产生音高。

    这里着重介绍一下 CIE-XYZ 空间到音高的算法,如下图所示。
    7-Alogrithm.png

    CIE-XYZ 颜色空间中相对于白色点的 (x,y) 坐标被我转为极坐标 ρ∠φ,即:

      x= ρcosφ
      y= ρsinφ

    转换以后 ρ对应按键力度,φ对应按键音高。规定:
    当 ρ 接近零时不发声,即灰白色对应无声,只有色彩足够鲜艳才能“弹奏”音高。
    当 ρ 足够大时 φ(0-360) 查表对应一维音高,不同颜色将弹奏出不同音高的音符。

    由于 TCS3472 比较丝滑(见测评帖子#2),因此可以细调出很多不同的音高来。
    软件中内嵌了串口调试信息,工作时串口可直接查看ρ、φ数据,用于细调音高。


    【测试视频】
    测试视频总计录制了两段,都是 HEIC/H265 高压格式,若打不开请升级播放器。

    #1-整机测试: v1-整机测试.rar (895.94 KB, 下载次数: 2)
  • TA的每日心情
    开心
    2020-4-22 22:44
  • 签到天数: 18 天

    [LV.4]偶尔看看III

    发表于 2020-4-22 22:57 | 显示全部楼层
    大佬大佬,非常佩服
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    热门推荐

    【原创】全球最小口袋3D打印机mini one直播教程贴
    【原创】全球最小口袋3D打
    最近闲得蛋疼,没事搞个掌上3D打印机,先放效果图吧。 搞了半天,终于能正常打印,
    OLED 128*64自制可达10000000个选项的菜单(已更新)
    OLED 128*64自制可达10000
    OLED 128*64自制可达10000000个选项的菜单 温馨提示: 建议占个楼再食用本帖子
    这是什么板?
    这是什么板?
    这是什么板?
    (blinker+wifiduino)自制远程遥控“机甲大师”
    (blinker+wifiduino)自
    之前就尝试过其他云平台做远程遥控小车,但是某APP 界面无法自定义设计,操作方式
    ps2遥控小车——uno实现
    ps2遥控小车——uno实现
    前几天在阁楼发现了好久以前3d打印,激光切割的底盘,于是决定做这个东西 正好手上又
    Copyright   ©2015-2016  Arduino中文社区  Powered by©Discuz!   
    快速回复 返回顶部 返回列表