13
作為一個創客,我們所做的東西不僅僅是為了科技創新、改變世界之類的宏偉目的,還有一方面的原因是要完成一些我們腦中徘徊已久的那些中二的想法,今天的教程我們就來做一個中二無比的東西——自動追蹤崗哨炮塔槍(別嫌長,臨時取的名字)。
這種槍可以自動追蹤移動的目標,然后朝目標發動進攻。好,我們開始今天的武器制作教程!(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);
}
}
好了,讓我們來看一看成品效果的視頻吧:
更多好玩的教程,請關注硬創邦!

雷峰網原創文章,未經授權禁止轉載。詳情見轉載須知。