原创 PC摇杆飞玩具小四轴——用Arduino & NRF24L01+模块实现

2016-2-16 21:03 4539 17 18 分类: MCU/ 嵌入式

转发请注明出处——少年Pie的硬件博客:http://bbs.ednchina.com/BLOG_xiedidan_2005312.HTM

我的软件博客:http://www.cnblogs.com/xiedidan

不管软件硬件反正都是各种好玩的东西。


冬天温度太低不适合室外飞四轴,就想买个小四轴室内飞,Crazyflie买不起,连国内复刻的Crazepony都还是太贵。最后赶在年前买了个Devo 7e控和JJRC(以前从来没听说过的公司)出的JJ1000小四轴在室内飞,改完控发现这个玩具小四轴真心很好飞。

而且个人觉得这个飞机外形还比较顺眼,简洁低调,不浮夸不幼稚:

jj1000a.jpg

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和天线的模块不迟(改控用那种就行):

p60215-145506-800-69.jpg

整个控制流程看起来复杂,实际上只需要开发两个部分的软件,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程序的混控、曲线之类可以做得很灵活,不用再被遥控器限制了,工程师之友,呵呵。

文章评论1条评论)

登录后参与讨论

用户1648711 2016-4-15 17:15

详细,学习了
相关推荐阅读
用户1156790 2016-06-11 13:12
利用ArduPPM和Arduino制作PPM编码板
转载请注明来自:ednchina 少年Pie的硬件博客 ArduPPM是ArduPilot提供的开源PPM编码固件,它可以运行在ATMega328p和ATMega32u2上。地址: htt...
我要评论
1
17
关闭 站长推荐上一条 /2 下一条