基于Arduino制作的激光打靶器
标签:arduino 改装
李守良 发布于 2017-02-11 10:41
相信很多人都玩过打靶游戏,尤其是很多男孩子都梦想成为一个神枪手。激光打靶游戏在一些游乐场中也是很火的游戏项目,但是玩别人的游戏总觉得有些被束缚,那么能不能发挥自己的想象力,自己制作一个会逃避的激光打靶器呢?这篇文章就教我们使用Arduino UNO和一直普通废弃的遥控笔结合,自制一个有趣聪明的激光打靶器。
一、原理
要让激光打靶器的靶子感知遥控笔发出的激光,最合适的传感器就是光线传感器了。该光线传感器可以检测环境光线的强度,检测的值在0~1024。
当激光击中靶心时,即当光线传感器获取的值超过800时,触发靶子随机转动一个角度,引起靶子的转动就需要使用舵机。本案例中使用舵机虽然重量只有9g,但是输出的力矩却达到了1.6kg*cm。为了使游戏更加有趣和刺激,我们可以使用蜂鸣器报警提示玩家。蜂鸣器是最常见的电子发声装置,广泛应用于计算机、打印机、复印机、报警器、电子玩具、汽车电子设备、电话机、定时器等电子产品中。如下图3所示。当玩家不能在1分钟中内击中靶心超过10次,则蜂鸣器发出警笛般的报警声。为了方便玩家清晰知道已经击中的次数和游戏运行的时间,一般采用两种方式来显示,一种是数码管,另一种是LCD屏。但是由于数码管连接较为复杂,本案例就选择使用LCD屏显示。如下图4所示。
但是在实际的游戏过程中,由于距离较远,玩家不能有效观察到LCD屏上面的数字,这该怎么办呢?我们可以使用LED灯,当激光击中靶心后,LED闪烁提示玩家已经击中靶心。
二、原型
接下来,我们需要对于“激光打靶器”进行编程了。但是在开始之前,我们需要对整个程序流程梳理清楚。
首先按钮开启,让LED闪烁提示玩家,游戏已经开始并倒计时。LCD屏开始工作,LCD屏可以显示两行字符串,我们选择上面一行显示击中的次数,下面一行显示系统运行的时间。接下来当激光击中靶心时,靶心的光线传感器采集到光线值大于800时,舵机随机转动一个角度,另外一个LED闪烁提示你已经击中了。随着时间的进行,当玩家在55s内,不能击中10次以上,蜂鸣器就会发出警笛般的报警。如果程序判断玩家是否在1分钟内击中10次,如果是,那么就恭喜你成功了,如果没有,那么就需要重启,重新开始游戏。
接下来,我们需要选择一款合适的编程软件,主流的Arduino编程软件是Arduino IDE,
但是这款软件对于新手要求较高,目前针对于Arduino的图形化编程软件也越来越多,主流有Mixly等。Mixly以功能强大,操作方便为人们所认可,因此本案例我们选择Mixly这款软件。首先我们设置按钮的管脚和提示游戏开始的LED管脚,在本案例中我们设置为“D4”和“D9”。并且为了显示击中的次数,我们需要定义一个变量,为了方便记忆,我们定义一个变量n为整数并赋值为0。为了控制LED的亮灭,我们也需要定义一个变量,我们定义一个变量x为整数并赋值为0。在实际的操作过程中,也会遇到手的抖动使得按钮的触发不规律状况,我们需要加入防抖的命令。
接下来就进入本案例的核心程序了,当按钮触发时,程序就开始计时。在Mixly中计时模块常用的是millls()函数,但是millis()让很多人不太容易理解,因此我们可以选择for循环。使用这两个模块结合,就可以实现每秒钟记1次,共记录60次了。
我们设置光线传感器的管脚为“A0”,提示的LED灯设置管脚为“D7”,蜂鸣器管脚设置为“D5”。当光线传感器接受光线值超过800,可以触发LED闪烁,舵机随机转动一个角度。在这里需要重点强调一下,由于程序运行速度较快,所以我们需要增加一个类似防抖的命令,否则会多次触发舵机和LED灯。为了增加游戏的趣味性,我们让舵机随机转动一个角度,这个程序设置也比较简单。
在设置LCD模块需要特别注意,LCD模块是在Mixly软件的Dfrobot选项中,如果没有这个选项,需要从北师大创客教育实验室下载第三方拓展模块中的Dfrobot导入即可。在设置LCD时,我们让液晶显示屏的第一行显示的击中的数量,第二行设置时间。
当玩家在55s内不能击中10次,则触发蜂鸣器发出警笛的声音。因为不能让蜂鸣器一直发出警报,我们设置响3s后,自动关闭。
综上所述,我们将上面“激光打靶器”的核心命令按照设计思路整合在一起就成为如下图13所示的代码。如果有不明白的地方,可以在https://pan.baidu.com/s/1jHGSNiu中下载程序。接下来就到了连接硬件的部分了,我们需要程序中对应的管脚和硬件连接部分的管脚保持一致。其中LCD模块与Arduino UNO连接较为复杂,容易出错,两者的连接。
表 1 材料及设置
名称 |
数量 |
说明 |
管脚设置 |
Arduino UNO |
1个 |
控制模块 |
|
Arduino拓展板 |
1个 |
方便连接各种传感器 |
|
I2C LCD1602液晶模块 |
1个 |
结果呈现 |
VCC、GND、A5、A4 |
7.4V 2200MA 锂电池 |
1个 |
提供电源 |
|
按钮 |
1个 |
控制程序的开启 |
D4 |
纸盒 |
1个 |
封装传感器和Arduino UNO |
|
胶枪 |
1个 |
固定传感器 |
|
LED |
2个 |
提示玩家 |
D7、D9 |
蜂鸣器 |
1个 |
警报提醒 |
D5 |
舵机 |
1个 |
随机转动靶子 |
D3 |
废弃的遥控笔 |
1个 |
提供激光 |
|
光线传感器 |
1个 |
监测靶心是否被击中 |
A0 |
三、产品
接下来我们需要找一个尺寸合适的纸盒子把器材装进去,然后设置一个直杆连接靶子和舵机,把光线传感器的连接线放在直杆后面用胶枪固定即可。如果用普通的吸管代替直杆效果更好,组装起来。
接下来,就触发按钮,发射激光开始有趣的游戏吧。
阅读数: 10827