创意来源
小朋友玩游戏中经常会需要用到游戏骰子,当骰子抛出之后,随着骰子的旋转最后会停在某个点数。有些同学为了掷出较大的点数,会故意将大点数提前朝上,在掷出的时候做一个假动作,希望能让骰子停留在大点数。
针对这样的情况,我就想能否制作一个没法作弊的电子骰子呢?借助于arduino硬件和mixly我设计了一款电子骰子,与大家分享制作过程与方法。
材料准备
名称 | 功能 |
---|---|
Arduino Nano主控 | 数字骰子主控 |
MAX7219 8*8点阵屏 | 用于显示点数 |
震动开关 | 骰子变化点数的触发装置 |
10k电阻 | 下拉电阻 |
tp4056充电模块 | 充电并防止锂电池过充 |
3.7V 80mah锂电池 | 为数字骰子供电 |
三脚小开关 | 总电源 |
作品构思
利用3DOne设计一个正方体外壳,将8*8点阵屏装在其中一面,用于显示掷得点数。用震动开关作为骰子的触发装置,当数字骰子被晃动时,就产生一个随机数,并将点数在点阵屏上显示。
硬件连接
硬件管脚 | Arduino Nano管脚 |
---|---|
震动开关 | D2 |
点阵屏DIN管脚 | D10 |
点阵屏CS管脚 | D11 |
点阵屏CLK管脚 | D12 |
程序编写
本作品的程序是基于mixly编写的,mixly适合初学者使用,大大降低了arduino学习难度。本作品在开发中还使用到了mixly著名的第三方库——17maker(该库的安装和使用可以扫描下方二维码查看)。
二维码
随机数的产生
当接在D2管脚的震动开关被晃动时,开关触发,D2口变成高电平,就会产生一个1-6的随机数,并将该随机数赋值给变量displayNum。
点阵屏显示点数
产生随机数后,就可以将一个随机的点数显示在点阵屏上,17maker库中提供了友好的点阵屏控制图形程序。比如要在点阵屏上显示“一点”,可以用以下程序。
在点阵图案中通过打钩的方式确定要点亮的二极管。如“一点”的图案变量定义为num1,勾选最中间的四个点,显示效果如图所示。
显示效果
为了利用点阵屏显示6种点,需要创建6个图案变量,具体图案如下表。
将震动开关产生随机数和点阵屏随机显示相结合的程序如下,该程序已经可以实现数字骰子的基本功能了。当震动开关被晃动时,点阵屏立刻显示一个随机点数,再次晃动,则会换一个点数。
功能提升
程序功能虽然已经基本实现,但是这个点数的出现没有任何悬念,晃动之后直接就出现。那么,怎么样才能让点数的出现有一点悬念呢?
我们可以通过点数不断变化,最终停留在某一个点数的方式来提高仿真度,并且还在停留在最后一个点之前放慢切换速度,营造紧张氛围。那程序该如何修改呢?
首先创建变量delaytime用于改变点数切换的速度,初始值为50(ms);创建变量currentNum用于记录当前显示的点数,初始值为0。
当震动开关被晃动时,首先产生一个30-36之间的随机数,该随机数表示点阵屏上的点数需要切换这么多次数才会停止。
当点阵屏上的点数开始切换时,首先判断displayNum是否大于currentNum,如果满足大于的条件,就进入点阵屏切换的程序。那么在切换之前,用currentNum除以6取余数的方法来确定该显示第几个图案。使用取余除法的目的是为了应对currentNum大于6的情况。这段程序需要好好理解一下哦!
随着点数的跳动,如何让点数在最后几次跳动时放慢速度呢?
放慢速度显然可以使用增加延时的方法,那么在程序的最后,我们可以加上这样一段,来控制延长最后5次跳动的延时。
当跳动到最后五次的时候,延时的时间比前一次延时多100毫秒,以此模拟跳到最后越来越慢的景象。
上传程序并连接好电路,测试一下吧,看看是否已经可以实现功能啦。
模型设计
利用3Done设计一个正方体外壳,将所有的元器件都放到这个外壳中,根据元器件的尺寸,我设计了一个棱长为60mm的立方体。
具体如下:
模型正面效果图,正面镶嵌一块8*8点阵屏,没有其他多余的东西,干净整洁。
模型的底部再开一个口,为充电和开关预留位置。两个模块之前通过卡扣固定,方便安装拆卸。
模型分开之后,其实各占六面体的三个面。在设计的过程中,两个模块之前不能贴合太紧,要留一定的空隙,不然打印出来有可能会太紧。
电路连接
充电模块与电池相连,将电池的正负极分别接在充电模块的B+和B-处。Tp4056充电模块可以很好地保护电池,防止过充。80MAH的小型锂电池在制作小作品时非常实用,身材小巧,适宜于安装在狭小空间中。
a面 | b面 | c面 |
---|---|---|
在arduino Nano上安装触发用的震动开关。将震动开关接在D2端口上,此处要跟程序中的端口定义相对应哦。为了电平的稳定,在震动开关边上还需要接一个下拉电阻,接线图如下图所示。
电池模块与主控连接。用黑导线从充电模块的OUT-引出,接到arduino Nano的GND管脚。用红导线从充电模块的OUT+引出,先经过一个三脚开关,再接到arduino Nano的VIN管脚,给主控供电。接好导线后,可以拨动开关测试,观察arduino Nano是否通电正常。
根据程序定义,将MAX7219点阵屏连接到arduino Nano上的10~12管脚。最后将充电模块,点阵屏,主控这三个部分用热熔胶粘在模型的适当部分。
a面 | b面 | c面 |
---|---|---|
测试效果,打开电源,晃动数字骰子,点阵屏上会随机闪烁点数,并最终停在某一个点数。到这里,一个有趣的数字骰子就完成了。有了这个数字骰子,就再也不怕有人耍小聪明了。
(本文发表于《无线电》2017年9月刊)
网友评论