简 介
小朋友按照EV3的编程软件LEGO MINDSTORMS Education EV3搭建了Color Sorter。因此,搭建方面而言并没有什么亮点。
1.摘要
搭建出来的Color Sorter提供一个可编程使之活动的平台,包括一个颜色传感器color sensor,一个大型电机large motor带动履带的转动,一个触碰传感器touch sensor用于感知触碰,以及一个中型电机medium motor用于把乐高色块弹出去。
最终成果视频展示:
2.编程软件中该搭建的入口:
3.搭建的成品图
制 作 过 程
这个实验的重点在于程序逻辑以及EV3编程中的实现。在最初的设计中,我们假定实验目的是先后读取8个色块,每个色块在颜色传感器上读取之后放置到移动臂上,在读取8个色块之后,然后让移动壁移动到4个位置之一,把色块弹射出来。
基于如上的实验目的,我们设置了两个大步骤,第一个是扫描8个色块并生成一个包含8个数字的数组(生成步骤),第二个是利用这个数组来控制移动壁移动并弹射色块(弹射步骤)。讨论出来的流程图(手绘版)如下图所示。不过,在编程的过程中,为了测试第一步是否正确地生成的数组,我们增加一个使用EV3的主机屏幕依次显示数组中每一个数值的步骤(显示步骤)。
最终程序如下图所示。每一行代表一个大的步骤。
生成步骤:
生成步骤首先初始化了一个BrickList的数组,把数组清空。然后执行8次循环。在每一个循环之中,使用timer来等待颜色传感器的输入,然后把颜色传感器的输出值添加到BrickList数组尾端。在最开始的设计中,并没有加声音输出。因此产生一个问题就是没有告知颜色传感器是否读取完色块颜色的反馈。而在加上声音输出模块之后,只要有声音响起,我们就可以知道色块颜色被读取成功。
在这里吐个槽,相对于其他图形模块编程软件,EV3对数组的操作简直麻烦,不仅要设置数组的操作属性,还要使用一个数组操作符模块。更别提拖来拖去的线了。
显示步骤:
显示步骤的逻辑很简单。循环8次,在每一个循环中,读取数组中的一个数值并在主机屏幕上显示。我们在实现过程中同样走过弯路,也就是在演示之后要加一个延时,在清除屏幕显示之后也要加一个延时。
弹射步骤:
弹射步骤逻辑很简单,也就是从数组中读取一个值,然后移动到对应位置弹射。先说简单的部分---弹射。弹射也就是转动中型马达一圈即可。再说难的部分,如何移动到4个定点位置中的一个。记住大型马达每次转的角度,然后再转回去,或者通过数学运算来计算下一个要去的位置是一种方法,只不过使用这种模块线条拖拽的方法会使得最终程序及其复杂,并且还容易出错。因此,我们借助了触碰传感器采用了一种巧妙的方法,即每一次弹射时候都先移动到触碰传感器的位置,作为起始位置,其他4个位置都依据这个起始位置来计算获得。至于到这4个位置大型马达转的角度是如何获得这个问题,答案是实验尝试加上3等分数学计算获得的。
实验以及改进
在编程结束后的测试过程中,我们发现扫描色块所得到的数值不是很准确,多次测试结果如下图所示。
在整个测试过程中,我们一直以为是因为放的快慢或者离颜色传感器的距离原因导致的。基于这个假设我们尝试了多次,但是实验结果一直是随机。就在我们对此一筹莫展,抬头被灯光晃到之时,我们突然想到,是不是灯光对传感器的直射会有影响?
基于这个怀疑,我们把颜色传感器反过来安装。哒哒哒~哒。期待的结果出现了。
领取专属 10元无门槛券
私享最新 技术干货