作为一个创客,我们所做的东西不仅仅是为了科技创新、改变世界之类的宏伟目的,还有一方面的原因是要完成一些我们脑中徘徊已久的那些中二的想法,今天的教程我们就来做一个中二无比的东西——自动追踪岗哨炮塔枪(别嫌长,临时取的名字)。
这种枪可以自动追踪移动的目标,然后朝目标发动进攻。好,我们开始今天的武器制作教程!(P.S.纯玩具,不是教你做武器!)
气枪或彩弹枪×1(这玩意在我国确实不太好搞,大家可以联系一下真人CS场地的人,问一下他们所使用玩具枪的货源,或者直接买一个电动软弹玩具枪,某宝一搜便知,子弹软绵绵的,打在身上也不会很痛)。
追踪摄像头×1
PC电脑×1(用来处理摄像头收集到的视频,以确认目标)。
伺服电机×3(其中两个用来控制枪的瞄准,能够实现枪的平移和倾斜等动作,另一个用来控制和扣动枪的扳机)
螺丝、螺母、螺栓×若干
DIY一个底座或支架,木头或金属皆可
USB TypeA 转Type B转接线
22号实心焊丝若干
伺服电池(带防水盒子)
Arduino开发板×1(防水)
这一步非常的考验大家的动手能力,因为这种枪的硬件组装并不是有完整的定义和教程的,只能把各种零件按你的想法安装到一起,再此,硬创邦给出一些意见仅供参考:
最需要注意的,就是找到枪的重心,要保证枪在安装之后,伺服电机在操控枪械做任何动作的时候,都用力均衡。不过这一步也是最难的,因为大家买到的枪不一样,重心也会不一样,具体的重心位置还需要各位创客自己花一些时间去测量。
摄像头一定要牢固的安装在基座上,无论如何摄像头不能晃动,由于摄像头和枪挨得比较近,所以要保证枪械的动作幅度碰不到摄像头。
底座一定要牢靠,三脚架底座非常酷,稳定性也尚可,制作方面也比较容易,但重量一般不够,如果枪械动作幅度较大,那么整体就容易晃动,如果你不能保证制作的三脚架绝对稳定,就在在底部做一些相应的固定处理!
找到枪械的重心之后,把枪安装到底座上的固定架上,架上一定要有两个活动架,可以使枪械实现平移、倾斜的活动目的,然后把伺服电机和活动架连接。
总之,安装时的三个重点要牢记:稳定,稳定,还是稳定!
接下来是一道送分题,按照电路图,把Arduino和伺服电机等部件连接起来。
整个系统需要一个独立电源,推荐4 C-cell或D-cell电池,使用电压6V。
伺服电机有三个电线,电力、地线和信号线,每个伺服电机的电源线通常是红色的,连接到电池的(+)线,地线通常是黑色或棕色,连接(-),信号线通常是黄色、橙色或者白色,连接I/O接线口。
同时你还可以选择性地添加一些开关和LED灯。
使用焊丝将连接线焊丝以固定。
整个岗哨枪的核心就在于软件了。
首先,把Arduino插入电脑,下载Arduino IDE,并且下载相关处理软件如果你的Arduino是 Diecimila以上的版本,则需要连接电源跳线。
然后需要在库中下载 JMyron, blobDetection和 controlP5 libraries ,点击连接进入下载,解压,然后按照其中的README.txt文件的说明进行操作即可。
打开 Arduino IDE中的代码,确保电路板和串行端口在工具栏中的正确选择,然后单击确定,等待编译,然后点击上传,Arduino的代码调试就结束了。
P.S.
Win 7用户有可能会遇到一些问题,在这里给大家一些解决方法:
当你遇到这个运行错误时: processing.app.debug. RunnerException: UnsatisfiedLinkError: D:\Software\processing-1.2.1\libraries\JMyron\library\JMyron. dll: Can't find dependent libraries:
"Reason : Windows 7 doesn't come with MicroSoft C libraries, which were normally include in the other (older) Windoes system.
意味着有两个Windows 7文件丢失,分别为:MSVCP71.dll和Msvcr71.dll
点击如下链接,下载这两个文件:http://www.addictivetips.com/?attachment_id=38105
下载完成后,将文件放到相应位置。
32位操作系统放到Windows/System32文件夹中。
64位操作系统放到Windows/SysWOW64 文件夹中。
当你运行代码时,屏幕上会有两个窗口弹出,一是摄像头的监控画面,另一个是控制面板。
在这个系统下,有两个模式。
手动模式:手动指向目标,并向其开火。
自动模式:系统会用一段时间去适应背景,过后如果有与背景颜色相违背的物体冲入画面,系统就会给枪下达攻击命令,自动射击物体。
当这些都完成后,枪械并不能准确地完成射击,所以需要一些校准,先通过软件中的 xMin, xMax, yMin和 yMax轴进行校准,然后还需要调整Arduino中的代码,具体参考代码如下:
if(digitalRead(7) == HIGH) {
xPosition = 110 ;
yPosition = 135 ;
fire = 0;
}
To set the home position (no USB communication), change these lines :
if(idle) {
idleCounter++;
if(idleCounter > 10000) {
analogWrite(5, 50);
delay(250);
digitalWrite(5, LOW);
idleCounter = 0;
}
else{
digitalWrite(5, LOW);
}
xPosition = 110 ;
yPosition = 100 ;
fire = 0;
}
To set the 'squeezed' and 'not squeezed' positions for the trigger servo, changethese lines :
void Fire(int selector) {
if(selector == 1) {
fireTimer++;
if(fireTimer >=0 && fireTimer <= triggerTravelMillis) {
trigger.write( 90 );
digitalWrite(2, HIGH);
}
if(fireTimer > triggerTravelMillis && fireTimer < 1.5*triggerTravelMillis) {
trigger.write( 140 );
digitalWrite(2, LOW);
}
if(fireTimer >= 1.5*triggerTravelMillis) {
fireTimer = 0;
}
}
if(selector == 3) {
trigger.write( 90 );
digitalWrite(2, HIGH);
}
}
void ceaseFire(int selector) {
if(selector == 1) {
fireTimer = 0;
trigger.write( 140 );
digitalWrite(2, LOW);
}
if(selector == 3) {
trigger.write( 140 );
digitalWrite(2, LOW);
}
}
好了,让我们来看一看成品效果的视频吧:
更多好玩的教程,请关注硬创邦!