玩转Arduino我爱编程

基于mixly的数字骰子

2018-02-16  本文已影响54人  hznupeter

创意来源

小朋友玩游戏中经常会需要用到游戏骰子,当骰子抛出之后,随着骰子的旋转最后会停在某个点数。有些同学为了掷出较大的点数,会故意将大点数提前朝上,在掷出的时候做一个假动作,希望能让骰子停留在大点数。
针对这样的情况,我就想能否制作一个没法作弊的电子骰子呢?借助于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月刊)

上一篇 下一篇

猜你喜欢

热点阅读