转发请注明出处——少年Pie的硬件博客:http://bbs.ednchina.com/BLOG_xiedidan_2005312.HTM
我的软件博客:http://www.cnblogs.com/xiedidan
不管软件硬件反正都是各种好玩的东西。
冬天温度太低不适合室外飞四轴,就想买个小四轴室内飞,Crazyflie买不起,连国内复刻的Crazepony都还是太贵。最后赶在年前买了个Devo 7e控和JJRC(以前从来没听说过的公司)出的JJ1000小四轴在室内飞,改完控发现这个玩具小四轴真心很好飞。
而且个人觉得这个飞机外形还比较顺眼,简洁低调,不浮夸不幼稚:
Devo 7e就不过多介绍了,太出名的一个小手控,改控就是焊高频头电阻、加高频头、加三段开关、加旋钮,这里严重参考了Galee大的教程(也是因为Galee我才在ednchina开硬件博客)。不过我最后用的是Devation的Nightly Build固件,因为Galee固件没有NRF24高频头的支持,可惜了,我很喜欢Galee的UI设计。
改控的时候发现这个小四轴其实用NRF24L01+高频头就可以通信,协议用伟力V202。所以用Arduino也可以控制NRF24,然后PC通过串口控制Arduino,玩起来就可以很灵活,配合PC端软件还可以用上飞行摇杆和Xbox One Controller。Arduino手上倒是很多,想到N年前买的NRF24L01+模块,一直压箱底没有玩过,这次正好派上用场。
所以总的来说,控制流程就是:
飞行摇杆/游戏手柄 ---USB--->
PC端Node.js采集程序 ---USB转串口--->
Arduino ---SPI--->
NRF24 ---2.4G V202协议--->
JJ1000
各个部分硬件的连接,只有Arduino和NRF24模块有点难度,要点:
首先,这个模块是SPI的;
其次,模块的电源要接3V3,但IO口可以兼容5V TTL;
最后就是要把模块的CE脚接到Arduino的9脚上(实际空的IO口都可以,但是需要改Arduino程序)
所以8个脚的模块,只有IRQ可以留空不接。
我的模块没有带PA和外置天线。看Crazepony的说法是这种模块只能控10来米,当然在室内玩是绰绰有余的。等调试好了再去买带PA和天线的模块不迟(改控用那种就行):
整个控制流程看起来复杂,实际上只需要开发两个部分的软件,PC上的Node.js摇杆采集程序和Arduino控制程序。
首先说说Arduino端的控制程序,V202的协议Deveation论坛上有个victzh大神发了**讨论贴,并且给出了基于Python和Arduino的代码。
我对victzh的代码做了点修改,把控制信号从ADC引脚读取,改成从串口命令解析。命令的格式很简单:
cmd:[thr],[yaw],[rol],[pit]\r\n
比如:cmd:100,127,127,200\r\n
目前还没有考虑开关灯之类的设置,当然这个协议要扩展也是很简单的。
我的Arduino V202控制器代码放在了Github上:
https://github.com/xiedidan/v202-arduino-mod
接下来就是PC端的采集程序了,最近工作一直用Node.js很顺手,而且Node可以实现各个平台的移植,NPM上的库也是非常丰富的,所以就用Node了。
采集程序思路也是很简单,用cylon-joysitck库就可以采集摇杆动作,从-1.0到1.0,换算一下变成0-255,拼好命令再用serialport发送出去就是了。cylon-joystick目前只能在Node 0.12.x版本下用,4以上的版本是用不了的,另外在Windows下需要编译器支持,我装了个VS Community 2015。
采集程序同样放在Github上了:
https://github.com/xiedidan/v202-commander
目前支持ThurstMaster T.16000M摇杆(这杆子精度不错,回弹力度偏轻,但油门行程太短),默认使用找到的第一个串口。git clone回来之后npm install,注意npm编译有可能需要Python 2.X的支持(3以上不能用),装好之后执行node v202-commander.js即可。
其实到这里就可以飞起来了,但是真正飞起来之后我发现超级难飞,因为油门和摇杆都没有曲线和比例控制。
于是我又给油门加了曲线控制(一共有三种曲线:平方根、直线、平方),按T16000M右手边最左的两个键可以切换。个人觉得飞四轴平方根油门曲线最好用,油门中间偏大的部分比较精细(我的飞机负载普遍偏大……),起飞降落都比较干脆,避免地效。
还有摇杆的比例控制,从12.5%到100%五档,按T16000M上右手边最右的两个键就可以切换。目前觉得12.5%-25%比较好用,更大的比例最好配合曲线使用。
右手中间两个键留给摇杆曲线,目前还还没想好用什么曲线,暂时没有实现。
因为我是左手握杆,所有按键都在右边,右手握杆可以改成左手按键。
到现在飞机就比较好飞了,悬停控制可以轻易达到Devo 7e的效果,14位霍尔摇杆,比一般12位电位器好多了。
对于其他不是NRF24的玩具飞机来说,道理都是一样的,使用对应的高频头(一般就A7105和CC2500,尽量买带PA和外置天线的模块)和协议就可以了,**协议可以多搜索一下Devation论坛,国外大神都很有共享精神。
如果把Node采集程序放到树莓派上去,再写个程序用树莓派SPI控制NRF24,就完全脱离电脑的牵绊了。
再想远一点,树莓派甚至可以用来合成PPM信号,用遥控器发射出去控制真正的航模,完全可以外场使用。
PC飞行摇杆可以比遥控器精度手感好得多。另外基于Node程序的混控、曲线之类可以做得很灵活,不用再被遥控器限制了,工程师之友,呵呵。
用户1648711 2016-4-15 17:15