MWC是一个开源的多旋翼飞控,常用来制作四轴飞行器。为了能DIY一个用安卓手机控制的微型四轴,我决定自己写一个安卓客户端遥控器。其实因为EZ-GUI在我的手机上一直出错,导致蓝牙连接失败,完全不能用。而我又不想买遥控器接收机。
国际惯例,先上图:
连接右边是Arduino Mini Pro,上面焊了一个6轴陀螺仪GY_521。比较好的是,在MWC源代码里面,支持这个模块。打开这句话就行了。
#define GY_521 // Chinese 6DOF withMPU6050, LLC
上面是那个蓝牙模块,虽然锂电池的电压在4.4v, 但它工作挺正常,完全不用降压。
必须要用稳压芯片将蓝牙模块稳定在3.3v。
接了一个空心杯电机,比较要命的是他现在还一直没转,需要我写个蓝牙遥控程序来让他启动。
把这些乱七八糟的东西焊一起,而不是直接买个飞控板的目的仍然是为了折腾。
这里是基于MWC的源代码2.2版本。2.3版本用C++全部重写过了,不过还是先弄2.2的吧。
上传飞控的协议格式:
开始是三个字符,表示传到飞控
'$' 'M' '<'
接下来数据如下:
1 Byte类型,数据总长度,大小不能超过64。
1Byte类型,命令ID。比如100,表示从飞控板获取基础信息。全部的命令类型参看源代码
n 个Byte类型,传送的具体数据,数据总长度描述的就是这部分数据。
1Byte类型,校验码,从数据总长度开始,每个byte挨个的异或操作的最后结果。
从飞控接收的数据格式:
开始三个字符,标识头。
'$' 'M'
第三个字符是'!'表示数据有错误,正常情况是'<'
接下来数据如下:
1Byte类型,返回值,这个值完全是和发送命令ID对应的,写在代码里面了。
1Byte类型,返回命令ID,就是请求的命令ID,又发回去了。
接下来的数据,就要看飞控的具体命令类型返回了哪些数据了。
最后1Byte仍然是校验位。
现在已经找到了遥控器的命令id是:
MSP_RC 105
在2.3版本是 MSP_SET_RAW_RC
用这个再加8个Byte的数据能发送油门,操纵杆什么的参数了。
自制的四轴已经飞起来了。但是回头看自己写的博客,居然这么多错误,忍不住修订一下。虽然这文章写于2年前,刚刚自学电子不久,但是满篇的错误,留着不改过不去。
2017.4.10
网友评论