友情提示:380元/半年,儿童学编程,就上码丁实验室。
如果需要学习本阶段课程,建议先学习本号内《基础硬件篇和基础编程篇》。
学习本篇请下载 LEGO Mindstorms 教育版软件
收到一位号友的留言,希望说一下电机作为传感器的使用方法。
这里我必须再次给EV3点赞一下。
看似一个功能,其实饱含了乐高产品设计师的格局之大。
同为一名产品经理,可以从产品中感受到用心程度,因为我们知道做出一款好产品的难度远比用户的想象来得困难。
很多市面上的机器人,电机只是作为一个输出设备,而EV3的电机,能够实现转动一度一反馈。所以,它完全可以作为一种传感器使用。
当电机作为输出设备时,它的主要功能是,提供动力。
当电机作为输入设备时,它的主要功能是,提供数据。
对于动力的理解,很简单,不多说了。
对于数据,我们就要联系到一个名词“场景”。
这个词其实我是经常提起的。
可以说,在每个场景下,数据是不断在变化的。
好的设计,就是让用户在各种使用场景下,都用的舒适。
如何调整舒适度?那就要依靠各种数据组合了。
我们可以把各种数据的组合形式,理解为是一种场景的变化。
举个例子,如果我们要做一个手机。
使用场景:白天,室外,晴天,马路边。
这里就有一些参数,出现了。
1、白天:时间
2、室外:空间
3、晴天:环境光
4、马路边:声音?
假设是这几个参数可以确定这个场景。
那么对应的,手机输出(显示屏的亮度,耳机的音量、抗噪强度)就自动做出一个调整。
这样用户的体验就会比较好。
所以,关于有些朋友留言问的某个功能如何设定,我这边也统一回答一下:
请告诉我具体场景,我才知道能够利用的数据有哪些。
这样才能对某个功能需求下一个定义。
我们回过头来说电机传感器。
要使用这个模块,我们先要把它放到一个场景里面。
电机能够获得转动角度、圈数和当前功率,三种值。
我们做一个很简单的场景,用电机,控制EV3主机的音量,如何?
这就像是各种音响的声音控制器。
电机转动的角度,我们当做是一个音量值。这个程序非常方便做。
如下图,只要把电机的转动角度数据,提供给音量即可。
由于音量(输出设备)的取值范围是0-100。
而100°的转动,对于电机来说,是很小的一个值。
直接使用这个数据,会造成体验不好,转动一点点,音量就变得很大,显然,这不是很好的体验。
所以,我们把这个值,除以一个系数,3.6。(360°:100=3.6:1)。
这样一来,电机转动一圈的音量调节范围,就是0-100了。
但仅仅这样是不够的,因为电机的数据会不停地叠加。
所以,当我们转了1圈以上,其实电机的数据可能已经叠加到了好几千。
也就是控制音量的数据,会上升到无限大!这个显然对硬件是有损耗的。(虽然EV3有电流控制,其实不至于会损坏。)
我们需要从编程的逻辑上去解决这个问题。
方法嘛,就是把数据调出来,用变量模块来处理。
如下图,大家可以理解一下。
当电机转动一圈内的数据,直接写入变量待用。
当电机转动大于一圈,则设定变量最大值为360。
然后这个数据,我们跟上面一样,放到音量上,即可。
我们继续这个场景的讨论。
在家里,很多小朋友会去转动功放的音量控制器,有时候打开音响的时候,突然被小朋友快速转动了一下,音量瞬间放大!昂贵的音响喇叭就毁了……
这是真事,别问我这个故事的具体情况,滴血……
所以,我们可能需要增加一个保护程序,就是,给音量调节提供一个触发条件。
这个条件,我们可以使用“当前功率”来控制。
我们假设,小朋友玩这个的时候,转动速度太高,程序则紧急关停。
血的教训,请谨防小孩动音响!
那么,控制音箱的触发条件就是:
当前突然功率大于20的时候(突然迅速提高音量),程序关闭音响或者重置音量。
关了总比坏了好!
所以我们可以在外层,以当前功率为判断条件,给这个程序做一个“保护性”的功能。
这样一来,如果调节音量的速度过快,程序就会自动反应,起到保护硬件的功能。
而慢慢调高或调低的时候,程序正常运行。
好啦,以上就是今天的内容。
最近收到的课题期望挺多的,我思考下,下次继续解决其他朋友的问题哦!