13
作為一個(gè)創(chuàng)客,我們所做的東西不僅僅是為了科技創(chuàng)新、改變世界之類的宏偉目的,還有一方面的原因是要完成一些我們腦中徘徊已久的那些中二的想法,今天的教程我們就來做一個(gè)中二無比的東西——自動(dòng)追蹤崗哨炮塔槍(別嫌長(zhǎng),臨時(shí)取的名字)。
這種槍可以自動(dòng)追蹤移動(dòng)的目標(biāo),然后朝目標(biāo)發(fā)動(dòng)進(jìn)攻。好,我們開始今天的武器制作教程?。≒.S.純玩具,不是教你做武器?。?/p>
氣槍或彩彈槍×1(這玩意在我國(guó)確實(shí)不太好搞,大家可以聯(lián)系一下真人CS場(chǎng)地的人,問一下他們所使用玩具槍的貨源,或者直接買一個(gè)電動(dòng)軟彈玩具槍,某寶一搜便知,子彈軟綿綿的,打在身上也不會(huì)很痛)。
追蹤攝像頭×1
PC電腦×1(用來處理攝像頭收集到的視頻,以確認(rèn)目標(biāo))。
伺服電機(jī)×3(其中兩個(gè)用來控制槍的瞄準(zhǔn),能夠?qū)崿F(xiàn)槍的平移和傾斜等動(dòng)作,另一個(gè)用來控制和扣動(dòng)槍的扳機(jī))
螺絲、螺母、螺栓×若干
DIY一個(gè)底座或支架,木頭或金屬皆可
USB TypeA 轉(zhuǎn)Type B轉(zhuǎn)接線
22號(hào)實(shí)心焊絲若干
伺服電池(帶防水盒子)
Arduino開發(fā)板×1(防水)
這一步非常的考驗(yàn)大家的動(dòng)手能力,因?yàn)檫@種槍的硬件組裝并不是有完整的定義和教程的,只能把各種零件按你的想法安裝到一起,再此,硬創(chuàng)邦給出一些意見僅供參考:
最需要注意的,就是找到槍的重心,要保證槍在安裝之后,伺服電機(jī)在操控槍械做任何動(dòng)作的時(shí)候,都用力均衡。不過這一步也是最難的,因?yàn)榇蠹屹I到的槍不一樣,重心也會(huì)不一樣,具體的重心位置還需要各位創(chuàng)客自己花一些時(shí)間去測(cè)量。
攝像頭一定要牢固的安裝在基座上,無論如何攝像頭不能晃動(dòng),由于攝像頭和槍挨得比較近,所以要保證槍械的動(dòng)作幅度碰不到攝像頭。
底座一定要牢靠,三腳架底座非???,穩(wěn)定性也尚可,制作方面也比較容易,但重量一般不夠,如果槍械動(dòng)作幅度較大,那么整體就容易晃動(dòng),如果你不能保證制作的三腳架絕對(duì)穩(wěn)定,就在在底部做一些相應(yīng)的固定處理!
找到槍械的重心之后,把槍安裝到底座上的固定架上,架上一定要有兩個(gè)活動(dòng)架,可以使槍械實(shí)現(xiàn)平移、傾斜的活動(dòng)目的,然后把伺服電機(jī)和活動(dòng)架連接。
總之,安裝時(shí)的三個(gè)重點(diǎn)要牢記:穩(wěn)定,穩(wěn)定,還是穩(wěn)定!
接下來是一道送分題,按照電路圖,把Arduino和伺服電機(jī)等部件連接起來。
整個(gè)系統(tǒng)需要一個(gè)獨(dú)立電源,推薦4 C-cell或D-cell電池,使用電壓6V。
伺服電機(jī)有三個(gè)電線,電力、地線和信號(hào)線,每個(gè)伺服電機(jī)的電源線通常是紅色的,連接到電池的(+)線,地線通常是黑色或棕色,連接(-),信號(hào)線通常是黃色、橙色或者白色,連接I/O接線口。
同時(shí)你還可以選擇性地添加一些開關(guān)和LED燈。
使用焊絲將連接線焊絲以固定。
整個(gè)崗哨槍的核心就在于軟件了。
首先,把Arduino插入電腦,下載Arduino IDE,并且下載相關(guān)處理軟件如果你的Arduino是 Diecimila以上的版本,則需要連接電源跳線。
然后需要在庫(kù)中下載 JMyron, blobDetection和 controlP5 libraries ,點(diǎn)擊連接進(jìn)入下載,解壓,然后按照其中的README.txt文件的說明進(jìn)行操作即可。
打開 Arduino IDE中的代碼,確保電路板和串行端口在工具欄中的正確選擇,然后單擊確定,等待編譯,然后點(diǎn)擊上傳,Arduino的代碼調(diào)試就結(jié)束了。
P.S.
Win 7用戶有可能會(huì)遇到一些問題,在這里給大家一些解決方法:
當(dāng)你遇到這個(gè)運(yùn)行錯(cuò)誤時(shí): 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.
意味著有兩個(gè)Windows 7文件丟失,分別為:MSVCP71.dll和Msvcr71.dll
點(diǎn)擊如下鏈接,下載這兩個(gè)文件:http://www.addictivetips.com/?attachment_id=38105
下載完成后,將文件放到相應(yīng)位置。
32位操作系統(tǒng)放到Windows/System32文件夾中。
64位操作系統(tǒng)放到Windows/SysWOW64 文件夾中。
當(dāng)你運(yùn)行代碼時(shí),屏幕上會(huì)有兩個(gè)窗口彈出,一是攝像頭的監(jiān)控畫面,另一個(gè)是控制面板。
在這個(gè)系統(tǒng)下,有兩個(gè)模式。
手動(dòng)模式:手動(dòng)指向目標(biāo),并向其開火。
自動(dòng)模式:系統(tǒng)會(huì)用一段時(shí)間去適應(yīng)背景,過后如果有與背景顏色相違背的物體沖入畫面,系統(tǒng)就會(huì)給槍下達(dá)攻擊命令,自動(dòng)射擊物體。
當(dāng)這些都完成后,槍械并不能準(zhǔn)確地完成射擊,所以需要一些校準(zhǔn),先通過軟件中的 xMin, xMax, yMin和 yMax軸進(jìn)行校準(zhǔn),然后還需要調(diào)整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);
}
}
好了,讓我們來看一看成品效果的視頻吧:
更多好玩的教程,請(qǐng)關(guān)注硬創(chuàng)邦!
雷峰網(wǎng)原創(chuàng)文章,未經(jīng)授權(quán)禁止轉(zhuǎn)載。詳情見轉(zhuǎn)載須知。