找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 12645|回復(fù): 1
收起左側(cè)

PC搖桿飛玩具小四軸—用Arduino & NRF24L01+模塊實(shí)現(xiàn)

[復(fù)制鏈接]
ID:105323 發(fā)表于 2016-3-4 17:44 | 顯示全部樓層 |閱讀模式
       冬天溫度太低不適合室外飛四軸,就想買(mǎi)個(gè)小四軸室內(nèi)飛,Crazyflie買(mǎi)不起,連國(guó)內(nèi)復(fù)刻的Crazepony都還是太貴。最后趕在年前買(mǎi)了個(gè)Devo 7e控和JJRC(以前從來(lái)沒(méi)聽(tīng)說(shuō)過(guò)的公司)出的JJ1000小四軸在室內(nèi)飛,改完控發(fā)現(xiàn)這個(gè)玩具小四軸真心很好飛。
        而且個(gè)人覺(jué)得這個(gè)飛機(jī)外形還比較順眼,簡(jiǎn)潔低調(diào),不浮夸不幼稚:
        
        Devo 7e就不過(guò)多介紹了,太出名的一個(gè)小手控,改控就是焊高頻頭電阻、加高頻頭、加三段開(kāi)關(guān)、加旋鈕,這里嚴(yán)重參考了Galee大的教程(也是因?yàn)镚alee我才在ednchina開(kāi)硬件博客)。不過(guò)我最后用的是Devation的Nightly Build固件,因?yàn)镚alee固件沒(méi)有NRF24高頻頭的支持,可惜了,我很喜歡Galee的UI設(shè)計(jì)。
        改控的時(shí)候發(fā)現(xiàn)這個(gè)小四軸其實(shí)用nrf24l01+高頻頭就可以通信,協(xié)議用偉力V202。所以用arduino也可以控制NRF24,然后PC通過(guò)串口控制Arduino,玩起來(lái)就可以很靈活,配合PC端軟件還可以用上飛行搖桿和Xbox One Controller。Arduino手上倒是很多,想到N年前買(mǎi)的NRF24L01+模塊,一直壓箱底沒(méi)有玩過(guò),這次正好派上用場(chǎng)。

        所以總的來(lái)說(shuō),控制流程就是:
        飛行搖桿/游戲手柄 ---USB--->
        PC端Node.js采集程序 ---USB轉(zhuǎn)串口--->
        Arduino ---SPI--->
        NRF24 ---2.4G V202協(xié)議--->
        JJ1000

        各個(gè)部分硬件的連接,只有Arduino和NRF24模塊有點(diǎn)難度,要點(diǎn):
        首先,這個(gè)模塊是SPI的;
        其次,模塊的電源要接3V3,但I(xiàn)O口可以兼容5V TTL;
        最后就是要把模塊的CE腳接到Arduino的9腳上(實(shí)際空的IO口都可以,但是需要改Arduino程序)
        所以8個(gè)腳的模塊,只有IRQ可以留空不接。
        我的模塊沒(méi)有帶PA和外置天線(xiàn)?碈razepony的說(shuō)法是這種模塊只能控10來(lái)米,當(dāng)然在室內(nèi)玩是綽綽有余的。等調(diào)試好了再去買(mǎi)帶PA和天線(xiàn)的模塊不遲(改控用那種就行):
        
        整個(gè)控制流程看起來(lái)復(fù)雜,實(shí)際上只需要開(kāi)發(fā)兩個(gè)部分的軟件,PC上的Node.js搖桿采集程序和Arduino控制程序。

        首先說(shuō)說(shuō)Arduino端的控制程序,V202的協(xié)議Deveation論壇上有個(gè)victzh大神發(fā)了**討論貼,并且給出了基于Python和Arduino的代碼。
        我對(duì)victzh的代碼做了點(diǎn)修改,把控制信號(hào)從ADC引腳讀取,改成從串口命令解析。命令的格式很簡(jiǎn)單:
        cmd:[thr],[yaw],[rol],[pit]
        比如:cmd:100,127,127,200
        目前還沒(méi)有考慮開(kāi)關(guān)燈之類(lèi)的設(shè)置,當(dāng)然這個(gè)協(xié)議要擴(kuò)展也是很簡(jiǎn)單的。
        我的Arduino V202控制器代碼放在了Github上:

        github/xiedidan/v202-arduino-mod

        接下來(lái)就是PC端的采集程序了,最近工作一直用Node.js很順手,而且Node可以實(shí)現(xiàn)各個(gè)平臺(tái)的移植,NPM上的庫(kù)也是非常豐富的,所以就用Node了。
        采集程序思路也是很簡(jiǎn)單,用cylon-joysitck庫(kù)就可以采集搖桿動(dòng)作,從-1.0到1.0,換算一下變成0-255,拼好命令再用serialport發(fā)送出去就是了。cylon-joystick目前只能在Node 0.12.x版本下用,4以上的版本是用不了的,另外在Windows下需要編譯器支持,我裝了個(gè)VS Community 2015。
        采集程序同樣放在Github上了:

        github/xiedidan/v202-commander

        目前支持ThurstMaster T.16000M搖桿(這桿子精度不錯(cuò),回彈力度偏輕,但油門(mén)行程太短),默認(rèn)使用找到的第一個(gè)串口。git clone回來(lái)之后npm install,注意npm編譯有可能需要Python 2.X的支持(3以上不能用),裝好之后執(zhí)行node v202-commander.js即可。

        其實(shí)到這里就可以飛起來(lái)了,但是真正飛起來(lái)之后我發(fā)現(xiàn)超級(jí)難飛,因?yàn)橛烷T(mén)和搖桿都沒(méi)有曲線(xiàn)和比例控制。
        于是我又給油門(mén)加了曲線(xiàn)控制(一共有三種曲線(xiàn):平方根、直線(xiàn)、平方),按T16000M右手邊最左的兩個(gè)鍵可以切換。個(gè)人覺(jué)得飛四軸平方根油門(mén)曲線(xiàn)最好用,油門(mén)中間偏大的部分比較精細(xì)(我的飛機(jī)負(fù)載普遍偏大……),起飛降落都比較干脆,避免地效。
        還有搖桿的比例控制,從12.5%到100%五檔,按T16000M上右手邊最右的兩個(gè)鍵就可以切換。目前覺(jué)得12.5%-25%比較好用,更大的比例最好配合曲線(xiàn)使用。
        右手中間兩個(gè)鍵留給搖桿曲線(xiàn),目前還還沒(méi)想好用什么曲線(xiàn),暫時(shí)沒(méi)有實(shí)現(xiàn)。
        因?yàn)槲沂亲笫治諚U,所有按鍵都在右邊,右手握桿可以改成左手按鍵。
        到現(xiàn)在飛機(jī)就比較好飛了,懸?刂瓶梢暂p易達(dá)到Devo 7e的效果,14位霍爾搖桿,比一般12位電位器好多了。

        對(duì)于其他不是NRF24的玩具飛機(jī)來(lái)說(shuō),道理都是一樣的,使用對(duì)應(yīng)的高頻頭(一般就A7105和CC2500,盡量買(mǎi)帶PA和外置天線(xiàn)的模塊)和協(xié)議就可以了,**協(xié)議可以多搜索一下Devation論壇,國(guó)外大神都很有共享精神。
        如果把Node采集程序放到樹(shù)莓派上去,再寫(xiě)個(gè)程序用樹(shù)莓派SPI控制NRF24,就完全脫離電腦的牽絆了。
        再想遠(yuǎn)一點(diǎn),樹(shù)莓派甚至可以用來(lái)合成PPM信號(hào),用遙控器發(fā)射出去控制真正的航模,完全可以外場(chǎng)使用。
        PC飛行搖桿可以比遙控器精度手感好得多。另外基于Node程序的混控、曲線(xiàn)之類(lèi)可以做得很靈活,不用再被遙控器限制了,工程師之友,呵呵。
回復(fù)

使用道具 舉報(bào)

ID:208070 發(fā)表于 2017-6-5 16:10 | 顯示全部樓層
這樣操控比起遙控器不會(huì)有延遲感嗎?
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表