最近看了些GBC流水线的视频,有些手痒。但是发现基本上所有的作品都是一条线走到底,于是想做一个能对小球进行分类的GBC流水线。由于手头上没有足够的材料,只好做一个可以作为核心部件的小球分类装置。
如上图,笔者制作了一个简易的滑道,小球从方框中放入,蓝球从标记有蓝色方块的一侧击出,红球从标记有红色方块的一侧击出,达到分类的目的。在程序方面,由于笔者没有颜色传感器,只好用光感代替,利用不同颜色的小球对光的反射程度的不同来区分红球、蓝球、空白三种情况。若采用光敏主动发射光测量反射光的方式测量(对应光感分支中勾选“产生光”选项),结果是红球读数>空白读数>蓝球读数;若采用光敏被动接收环境光的方式测量(对应光感分支中关闭“产生光”选项),结果是空白读数>红球读数>蓝球读数,因此采用双重光感分支的方法编程,将光敏区间分为三个部分,对应三种情况下机器人的动作。然而在实际调试中笔者发现在上述提到的两种测量方式中,前者空白读数和蓝球读数十分接近,后者蓝球读数和红球读数十分接近,再加上环境光源不可避免地存在上下波动,因此很难精确找到光感分支的临界值。由于结构的限制,又很难再加装传感器,制作工作似乎陷入僵局。既然很难再增加传感器,那么只能在挖掘光敏能力上下功夫,光敏的两种工作方式从某种意义上来讲类似于主动声呐和被动声呐的工作方式,因此,灵活运用这两种工作方式成为解决问题的关键。笔者发现,虽然在采用光敏主动发射光测量反射光的方式测量时空白读数和蓝球读数十分接近,但红球与蓝球的读数差距确很大;采用光敏被动接收环境光的方式测量时蓝球读数和红球读数十分接近,但空白读数和红球的读数也有很大差距。由此,笔者重新拟定思路:先用被动接收环境光的方式判断是否有球位于光敏上方,再用主动发射光侦测其反射光方式判断是红球还是蓝球,从而做出相应的动作。程序见下图:
由于笔者经常需要开展一些机器人演示活动,上述做法在室外、商场等光照强烈的地方取得了良好效果,但在教室、办公室、等环境光照强度中等的情况下,用被动接收环境光的方式获取的空白读数与红球读数差别并不大,为此,笔者又对结构做了一些改进,在光敏上方放置了两个电灯作为环境光源的补偿,模拟环境光照强烈的情况,将电灯的控制程序置于一个独立的程序分支上,取得良好效果。最终确定的结构如下图:
最后附上调试视频:
|