杭州经济技术开发区听涛小学 裘炯涛
温州中学 谢作如
微信朋友圈已经成为了现代人们社交的重要的场合,2017年末的朋友圈被一个简单的小游戏占领。在2017年12月29日更新的最新版微信中,增加了一个名为“跳一跳”的小游戏。
游戏的规则很简单,游戏中的小人要从一个方块跳到下一个方块上,玩家通过按压屏幕时间的长短来控制这个小人跳跃的距离。玩家需要每次都能让小人落在下一个方块上,如果每次都能跳到正中心还会有额外加分。
元旦假期,我也尝试去挑战这个游戏,但是屡试屡败,得分很少能超过50分。看着朋友圈里的好友都能跳到两三百分,我深深怀疑自己的笨手笨脚。稍作思考后,我准备利用Arduino挑战“跳一跳”高分榜。
图 1微信“跳一跳”小游戏
游戏分析
在游戏中,小人要从当前方块跳跃到下一个方块,玩家通过按压屏幕蓄力,按压越久,蓄力越多,跳得也就越远。
策略分析
经过分析,跳一跳的关键在于要精确控制手指按压屏幕的时间。人们可以区分1秒与2秒的时间差,但是10毫秒与20毫秒的区别,人就很难区分了。然而,机器却可以做到对时间的精确控制。
我打算利用Arduino控制舵机按压屏幕,按压一定时间后抬起舵机,小人就可以跳到一定距离之外。而按压时间根据需要跳跃的距离来推算,跳跃距离可以用尺子测量,并用旋钮传感器将距离输入Arduino。Arduino将距离转化成对应的按压时间,最后用一个按钮来控制舵机执行按压动作。
图 2所需元件
难点解决1:模拟手指
现在市面上的智能手机的屏幕绝大多数都是电容屏,一般来说需要用手指触摸才能有效,而普通的笔、木棒等并不能触控屏幕。那么可以使用哪些材料来代替手指呢?
电容触摸笔是专门为手机、平板电脑设计的触摸手写笔,使用触摸笔是最好的选择,如图 3所示。可以将电容笔固定在舵机臂上,用舵机带动电容笔按压手机屏幕。
电容笔当然是最理想的选择,但是手头如果没有电容笔,还可以用导电铜箔或者导电胶布来代替。导电铜箔具有良好的导电性,将导电铜箔一端固定在舵机上,导电铜箔另一端与手指接触。在舵机带动下用铜箔按压手机屏幕,通过导电铜箔的连接,相当于手指按压了屏幕。
图 4导电铜箔
搭建结构
利用T1飞机盒做框架,搭建游戏盒子。先将手机放在纸盒中间,确定各元件安装位置,如图 5所示。
图 5元件安装位置
将LCD1602显示屏倒扣在纸盒上,用铅笔沿着显示屏画出轮廓,如图 6所示。
图 6画出元件轮廓
将LCD1602显示屏和旋钮传感器安装在孔位中,并用热熔胶进行固定,如图 7所示。
图 7安装显示屏和旋钮传感器
在舵机安装前,先垫高约1厘米的纸板,将舵机安装位置提高到与手机屏幕齐平的高度。然后用热熔胶将舵机固定在纸板上,将舵机臂安装到舵机上,由于舵机的塑料臂比较短,可以使用长约6厘米的雪糕棍进行延长,如图 8所示。
图 8安装舵机臂
在雪糕棍上安装一个竖直向下的竹签,竹签末端安装一个水平的2厘米左右的雪糕棍,用于模拟手指,雪糕棍表面要正好能触碰到手机屏幕,如图 9所示。
图 9安装模拟手指
在雪糕棍上缠绕导电铜箔,为了保证导电铜箔能与手机屏幕能充分接触,可以将接触面做大且压平。然后将导电铜箔引出15厘米左右,用于跟人手指接触,如图 10所示。
图 10缠绕导电铜箔
用一只手抓住导电铜箔一段,让模拟手指去接触手机屏幕,观察是否有反应。如果有反应说明模拟手指能实现功能,如果触摸效果不佳,检查导电铜箔是否缠绕牢固,接触面是否够大。
电路连接
将各元件连接到主控板对应管脚,传感器与管脚对应关系如表 1所示。
表 1传感器与管脚关系表
传感器 | 按钮传感器 | 舵机 | 旋钮传感器 | LCD1602显示屏 |
---|---|---|---|---|
管脚 | D2 | D8 | A0 | IIC |
将主控板安装在纸盒内部,并连接好各元件,用热熔胶将按钮固定在盒子侧面。主板的供电可以使用9V电池,也可以在盒子侧面打孔,使用USB线连接到外部电源,如图 11所示。
图 11电路连接
难点解决:时间与距离的关系
之前我们定性地分析出按压时间越久,跳跃距离越大,但是并不知道两者之间的具体关系。
编写测试程序,当按钮按下后,舵机转动,带动模拟手指按压屏幕,并保持一定时间后弹回,程序如图 12所示。
以小人身体的尾部作为起点,沿着两个方块边缘平行的方向测量,终点为下一个方块的中心点,如图 13所示。
图 13测量距离
根据测量出的距离先估计按压时间,然后将时间赋值给变量time,上传程序并跳跃。再测量出实际跳跃距离,经过几轮测试,得出表 2数据。
表 2 按压时间与条约距离关系表
按压时间(time) | 跳跃距离(distance) |
---|---|
500ms | 15mm |
600ms | 20mm |
700ms | 25mm |
800ms | 30mm |
900ms | 37mm |
1000ms | 40mm |
将以上数据输入到excel表格中,用表格中数据绘制散点图,并画出线性趋势线,得到按压时间与跳跃距离的关系式为distance=0.0517time-10.952,经转换time=(distance+10.952)/0.0517。[1]
难点解决:距离输入
经过几轮游戏测试与测量,小人跳跃距离的范围在10mm-50mm之间。距离输入可以使用旋钮传感器,旋钮传感器原本的输入范围是0-1023,而现在需要输入的距离为10-50mm,因此可以使用映射模块将数据范围进行转化。再利用LCD1602屏幕将跳跃距离和按压时间都实时显示出来,完整程序如图 15所示。
图 15“跳一跳”游戏盒完整程序
使用测试
游戏盒子制作完成后,就可以进行使用测试了。在手机上启动游戏,并将手机放在盒子上,用尺子量出当前小人的位置到下一个方块中心点的距离。在盒子上用旋钮传感器调节跳跃距离,LCD1602上会显示跳跃距离及对应的按压时间,调节完成后按下起跳开关,舵机就会带着模拟手指转动,在屏幕上按压一定时间后抬起,小人完成完美一跳。
小结
制作完成这个盒子后,我将使用该盒子玩“跳一跳”游戏的视频发到了朋友圈,有人给我点赞,也有人向我挑战,还有人说这是作弊。我觉得,这个作品再一次告诉我们,对于一些有规律的、重复性强的工作,机器比我们人类更加专业,可以比我们做得更好。2017年,可以说是“人工智能”元年,在这一年里,我们发现机器在越来越多的领域战胜了人类。毋庸置疑,在接下来的时间里,机器将更加深入全面进入人们的生活。
[1] 该公式是根据5寸屏幕测得的数据,不同尺寸的手机测得数据不同,公式也会不同。
网友评论