Mixly系统设计3:玩转流水灯

时间:2022-09-09 07:30:52

Mixly系统设计3:玩转流水灯

本期我们开源项目的主题是常见的编程项目――流水灯。如果有两个LED,每个LED都可以独立控制,那么它们闪亮的形式可以分为:①一起亮。它们同步亮同步灭。②带动亮。一个LED亮之后带动后面的一个LED亮,此前的LED并不熄灭。③接力亮。一个LED亮过之后熄灭一段时间,接下来下一个LED开始亮,就像接力比赛一样。如果LED比较多,看上去像是一个LED在移动一样,这种形式更符合流水灯这个名字。④二选一亮。两个灯每次随机选择任意一个LED亮。⑤随机亮。每个LED都是随机闪亮,两个LED之间没有排他关系。本次选择的流水灯,项目涉及更多数目的LED,但原理是相同的。

制作:LED排排站,开始点名了

0号口和1号口空置,将数字引脚的2号口和3号口插一个LED灯,其中2号接负极,3号接正极。接下来,依次类推,4、6、8、10、12接LED的负极,5、7、9、11、13接LED的正极(如图1)。LED像是一排站好队列的士兵,通电以后,发现它们会像士兵报数一样依次亮起来,产生流水灯的效果。

在实验的过程中,我发现每位学生的LED闪烁的速度都不一样,有的很快,有的很慢,因此我鼓励他们大胆地去“触摸”电路板(如图2)。学生在触摸时发现手指摸这个区域后,灯有时闪得很快,甚至几乎看不到闪烁,有时又闪得很慢,这是因为有一个输入的信息在控制LED的闪烁速度。

这个信息就是端口A0的输入电压转换成了模拟输入A0的数值,在连接上,可以使用一个10千欧电位器,将其两端接power区的5V和GND(不分左右),中间接A0端口,此时旋转电位器(如图3),我们就能够看到电位器旋钮可以很好地控制LED的闪烁速度,旋转到一端时,不闪烁,所有LED一直亮;旋转到另一端时闪烁时间比较慢,间隔时间大概有两秒。

改装:认识电位器

通过观察我们可以判断每一个LED持续亮的时间都是相同的,这需要使用Mixly中的“延时……毫秒”来完成,而这个命令中一定包含一个与A0输入相关的参数。我们可以使用一个秒表来研究这一问题,将电位器旋转到闪烁最慢的位置,测量整组灯流水十次所需要的时间,共计112.9秒。通过相应的计算式,我们可以得到每个灯闪亮的时间为122.9/10/6=2.048秒,换算为毫秒是2024毫秒,而旋转到另一端以后所有LED长亮说明此时输入值为0,通过实验可以猜想A0数值伴随旋钮的变化而变化,变化范围为0~2048。

科学研究只是改装的一个序曲,我们可以将六个LED固定在一个盒子上,拍成一定的形状,用旋钮控制LED的闪烁频率(如图4)。

在电路的连接上,电位器的连接可以将5V和GND之间的距离拉得稍远一些,用红色导线接5V,黑色导线接GND,蓝色导线接A0,用排针引线,注意5V和GND处线要绕完,不要搭在外面,因为它们之间的短路会导致Arduino死机,有时还会造成电脑的USB端口短路,但是一般不会损伤电脑,因为绝大部分电脑的USB端口都有短路保护功能。需要说明的一点是:使用手机充电电源或者充电宝供电5V和GND,如果短路,Arduino板子上的短路保护能够缓解这种情况对手机电源适配器或者充电宝的伤害,但是不要长时间这样做,而且也要尽可能选择正规的带短路保护功能的电源适配器或者充电宝(如图5)。

此外在旋钮的连接上,由于电位器的引脚很短,导致绕线容易脱落,鉴于此我们可以将导线先穿到电位器的小孔里再绕线这样就不会脱落了,绕线的过程中同样需要注意防止不同引脚上的导线彼此搭上(如图6)。

最后是连接LED,可以将一组排针中相邻的两个弯折,呈对开状,3mm六棱铜柱可以作为很好的弯折排针的工具,我们在弯折后的排针上绕线,可以避免短路(如图7)。

在改装的过程中,涉及各种各样的工艺问题,“工艺”就是我们常说的制作技巧或者注意事项。在教学中,比较各种工艺间的优缺点,探究和发现新的工艺常常可以作为一个培养和考查学生能力的测量指标,而主动追求极致的工艺更是我们所要培养的“大国工匠”所需要的一种品质。

玩转:模拟量输入揭秘

首先,6个发光二极管的负极接2、4、6、8、10、12端口,他们的电压被程序的初始化模块置低,相当于一个可以通过小电流的负极,它的电压与GND相当,但是不能驱动马达等大电流设备,代码如图8所示。

其次,主程序被分割成6个子程序,在Mixly中,子程序的功能很强大,支持参数和返回值,可以有很多更为复杂的算法,但是在这里我们只用于提高程序的可读性。下页图9的代码中,z1到z6分别指点亮一盏灯,熄灭其他灯。

看到主程序之后,我们就清楚了之前在改装缓解测定的最长延时时间2048毫秒的意义了,原来A0端口输入的范围是0~1023,扩大两倍之后放大为0~2046,考虑到实验误差,这样的结果已经很精确了。每个子程序的结构类似,都是置高一个LED正极所在引脚的电压,置低其他引脚的LED的电压,代码如图10所示。

至此,我们就完成了对程序的解读,事实上,如果将LED的负极都连接在GND引入的一根导线上,可以将数字端口0~13共计14个LED都做成流水灯,但是需要注意的是0和1端口,在烧写程序时不能接插LED,因为这两个端口在烧写程序时会被占用。

分享:独一无二的LED灯串

流水灯的效果常用在自动售货机等单片机控制系统上,一方面它很美观,能吸引他人的注意力,另一方面也能够直观地显示出控制系统是否工作正常,一旦停止“接力亮”,就说明主程序死机需要重启。在这个项目的改进过程中,我们发现一个LED不够酷,如果是一排LED项目就会炫酷很多,但是采用传统的绕线方法将10个很密集的LED并联非常费时费力,于是我们做了工艺上的改进,发明了“铜箔胶带法”并联引脚,解决了这个问题,如图11所示。在具体使用过程中,我将有铜箔的两部分对折,一排LED的引脚就并联起来了。

教师在工程教育中往往希望学生把梦想变成现实,而在梦想变成现实的过程中,很多人都忽视了对工艺的探究。对于一名大国工匠而言,别人解决不了的问题在很大程度上不是技术的问题,更不是科学知识的问题,而是怎么做得更快更巧的问题。我们在强调艺术融入到工程教育的同时,不要忘记工艺本身这个“艺”字就是指出神入化的技艺,这和艺术的追求在本质上是一致的。对工艺的探究,应该成为一个自然的工程教育的教学内容和教学目标。而让学生体会到追求工艺的快乐则是培养大国工匠的一个捷径,就像研发带有铜箔的胶带一样,如果没有这种新工艺,估计很多人就都不得不用电焊完成这么复杂的灯了。

本案例的分享视频将会在以下公众号中陆续登载。

上一篇:论微课的选题策略 下一篇:中职数学教学的生活化模式应用研究