4338| 4
|
[M10项目] 【行空板】用Python玩转开源硬件-第06课:拾色游戏 |
本帖最后由 JIAJIA 于 2023-2-17 14:50 编辑 第06课:拾色游戏 天是蓝的,草是绿的,我们生活的世界无处不充满着色彩。今天我们就拿起手边的传感器,“拾起”这些美丽的颜色,在行空板上完成一个有趣的拾色游戏,你准备好了吗~ 任务目标 开始游戏后,行空板屏幕显示要拾取的颜色,两秒内用传感器选取颜色,行空板显示选取结果是否正确并更新正确次数。 1.掌握颜色传感器的使用方法 2.了解颜色传感器工作原理 材料清单 硬件清单 软件使用:Mind+编程软件 x1 下载地址:https://mindplus.cc/ 动手实践 拾色游戏的游戏规则是使用颜色传感器,在有限时间内识别环境中同色系颜色,你能选对多少次呢?接下来,我们就开始动手制作并体验吧。 任务一:拾取固定颜色 在此任务中,我们将学习利用颜色传感器来拾取固定颜色,帮助你更快更准确的判断颜色色系。 任务二:拾取随机颜色 在任务一的基础上,我们将通过设置随机目标色块,挑战在有限时间内拾取随机颜色,并增加正确数量统计,看看你能成功多少次。 任务一:拾取固定颜色 1.硬件连接 使用4pin白色硅胶线将颜色传感器连接到行空板的IIC接口,硬件连接成功后,使用USB线将行空板连接到计算机。 注意:颜色传感器采用IIC通信,行空板包含两个IIC接口,两者择其一使用。 2.软件准备 打开Mind+,按照下面图示完成软件准备工作。 添加颜色传感器库,点击“扩展”,在pinpong库中找到“颜色识别传感器”并点击,完成添加。 3.编写程序 拾色游戏中,我们要通过颜色传感器获得当前颜色的RGB数值,然后与目标色系进行对比判断。那么如何使用颜色传感器,又如何进行颜色判断呢,接下来我们就以红色为目标色系开始学习实现吧。 (1)获得RGB值 我们先来学习颜色传感器的相关指令操作。首先在最开始使用 初始化TCS34725颜色传感器I2C地址0x29 指令完成接口初始化,然后你可以使用 获取一次TCS34725数据 获取传感器数据,为了持续获取你可以将它放在循环执行里。 注意:关于“颜色传感器”的相关介绍,见“知识园地”。 想要读取颜色传感器的颜色值,需要使用 从数据中解析TCS34725颜色传感器R转GAMMA 指令,分别选择R、G、B选项,获取识别到的颜色值。 现在,建立R、G、B三个 变量 并使用 打印 和 连接指令,完成测试代码,然后运行,我们就可以在“终端区”观察数值。 观察红色对应的颜色数值时,需要把颜色传感器放在红色色块上方高度1cm左右处。虽然颜色传感器会受环境光所影响导致数值会有变化,但是仔细观察,红色R一定会高于绿色G和蓝色B。我们可以据此,判断识别到的颜色。 (2)判断颜色 知道了红色色系的RGB值特点,接下来就可以直接利用它来判断识别到的颜色是否为红色系啦,即建立结果显示对象 如果 变量R > 变量G与变量R > 变量B 那么拾色正确,否则拾色错误。 为了和拾色游戏的界面一致,现在你可以增加红色色块矩形,也可以设置阅读结果时间,实现结果显示一段时间后消失,完整参考代码如下: 4.程序运行 点击运行,程序运行成功后,行空板屏幕显示红色系色块,使用颜色传感器拾取颜色后行空板会显示拾取颜色是否正确。 注意:颜色传感器数值极易被环境中的光所影响,选择拾色物体时尽量不要选择发光的物体,比如行空板屏幕。 5.试一试 你已经实现了红色系的拾色判断,请用相似的方法,实现绿色系和蓝色系的识别,并把色系结果显示在结果文字对象里(不需要判断是否正确)。 任务二:拾取随机颜色 1.编写程序 通过任务一,我们已经实现了拾取颜色和固定色系判断任务,接下来我们就来生成随机颜色,完成拾色游戏的主要功能吧。 在开始编写程序之前,我们先来分析一下拾色游戏的主要功能流程。整个拾色游戏大致可以分成三步:行空板生成随机色块、传感器拾色、对比得到结果。接下来,我们就逐个完成吧。 (1)行空板生成随机色块 本项目选取R、G、B三个颜色,每个颜色对应1到3中的一个数字,于是产生的随机数指令为 在1到3间取随机整数 。然后可以用3个 如果那么 实现对色块对象的修改。实现的过程中,可以使用变量存储随机数,并建立 生成随机颜色函数 完成功能。 (2)传感器拾色 传感器拾色是为了通过获取颜色传感器RGB值来判断拾取的颜色,与任务一类似,不同的是为了更好的对比结果,要使用数字表示颜色。同样建立 获得颜色值函数 和 变量 完成功能的实现和调用。 (3)对比得到结果 我们需要在主程序中调用前面的两个功能函数分别获得 拾取颜色 和随机生成 颜色,并比较得到拾色是否正确。 最后,你可以加入正确次数的显示以及下一次拾色前清空色块和结果的操作,完整参考代码如下: 2.程序运行 点击运行,程序运行成功后,行空板屏幕出现随机色块,使用颜色传感器拾取颜色,色系正确显示“√”和正确次数,不正确显示“×”。 知识园地 1.认识颜色传感器 颜色传感器是用于识别和比较物体表面颜色值(RGB)的颜色传感器。本项目使用的颜色传感器是TCS34725,它的外部是由发出白光的LED、接收光线的光电二极管阵列等部分组成。那么它们是如何检测到物体表面的RGB颜色值呢,接下来我们就来简单了解一下。 我们都知道人眼最为敏感的三种颜色是RGB三原色,由这三种颜色按不同的比例混合就能组成我们看到的所有的颜色,而我们看到物体的颜色是由光照射物体表面反射到眼里的光所决定的,比如,我们看到草是绿色的,是因为光照射到草上反射了绿色的光。 颜色传感器也是通过类似的原理来获得RGB颜色数值的。上图中的太阳光,在传感器中就是LED上发出的白光,它是RGB三种颜色都包含的光,如果我们也按RGB来拆分它的话,那么当它照射到不同颜色的物体表面就会反射出不同含量的三种颜色光。 而RGB三种颜色反射光,会被颜色传感器上的光电二极管阵列所接收。光电二极管阵列分别由红滤光、绿滤光、蓝滤光和透明(未滤光)光电二极管组成,它们会分别接收对应颜色的光,并分析RGB这三种光的比例得到对应的数值。 需要说明的是由于颜色传感器是通过光检测颜色的,使用时需要注意有效测距范围,如一般环境下TCS34725的有效测距范围为3mm~1cm,在测量过程中尽量将传感器放在有效测距范围内,以保证颜色传感器的灵敏度,同时这样做也能有效避免环境光线对检测目标的色染干扰。当然,由于测量环境光线的不同,建议通过实际测试,确定你需要的灵敏度测距范围。 编程时,你可以直接在“扩展”里的“pinpong库”中找到“颜色识别传感器”对应的指令,完成你需要的应用。关于TCS34725颜色传感器的更多详细资料,请阅读如下链接内容: https://wiki.dfrobot.com.cn/_SKU_SEN0212_Color_Sensor-TCS34725_%E9%A2%9C%E8%89%B2%E4%BC%A0%E6%84%9F%E5%99%A8 2.指令学习 挑战自我 你已经学会使用颜色传感器制作拾色游戏了,在游戏中我们是以行空板上的色块为目标去拾取颜色的,相信你的眼睛很快就能告诉你应该去找什么颜色吧。那如果我们以色块为干扰,以色块上的文字为目标,你的眼睛还能反应过来吗?不妨动手试一试: (1)在色块中间添加颜色文字,作为要拾取的目标色系(文字和色块颜色不一定一致); (2)当拾取色系和文字颜色一致,正确次数增加,否则游戏结束,显示游戏结束界面; (3)为了让你的拾色游戏更完整,请你为它设计一个开始页面(参考下图)。 附件下载: 第6课 拾色小游戏 2.zip (如有其它问题,请添加微信咨询:DFRobot2019) |
© 2013-2024 Comsenz Inc. Powered by Discuz! X3.4 Licensed