简介
自从前两天成功的给自己的福斯I6X遥控器加装多协议高频头后,突然的突发奇想“既然发射器制作成功了,那这样是不是也可以自己做一个接收机呢?”
于是上网查阅了资料,发现有不少方案。可我手上有的可以用的材料就只有nRF24L01与arduino mini,可惜没找到对应的教程。
既然没教程,那有没有其他办法呢?看到边上改装好的遥控器后,想到了。既然多协议高频头里面所能够控制的无人机协议有源码,那么是不是接收端也有开源的代码呢?
上网再次一搜索,不出所料的,有好多,这里随便列举几个:
- https://github.com/execuc/v202-receiver
- https://github.com/donquixote2u/v202_sbus
- https://github.com/Suxsem/symaxrx
- https://github.com/gergespenst/bayang_rx
- https://github.com/AlexGhiti/CX10_arduino_receiver
我这里选择了第一个v202-receiver项目进行改写实现。
实验
1.根据说明将原件连接后接入电脑
接线参考
arudino 引脚 | nRF24 |
---|---|
D13 | SCK |
D12 | MISO |
D11 | MOSI |
D8 | CE |
D7 | CS |
2.对频接收实验
打开源码并上传
上传完成后打开串口监视器
默认会显示一个Start,这时拿出遥控器,将俯仰杆往前,打开遥控器进行对频
对频成功后,会出现提示,并输出不同通道的对应的16进制值
摆动遥控杆,看看变化
3.尝试输出PPM信号
上一步我们成功的接收到了遥控数据,那现在来试着将数据输出为PPM
同样,我上网搜索了arduino的PPM相关库,最后选择了PPMEncoder库来生成PPM
在源码中引入PPMEncoder,定义输出引脚
.....
#include "PPMEncoder.h"
//我这里定义引脚10
#define OUTPUT_PIN 10
.....
在setup函数中进行初始化(默认初始化通道数为8通道)
void setup() {
....
//初始化引脚
ppmEncoder.begin(OUTPUT_PIN);
//初始化各通道对应值,值与顺序可以自行调整
ppmEncoder.setChannelPercent(2, 0);
ppmEncoder.setChannelPercent(3, 24);
ppmEncoder.setChannelPercent(1, 24);
ppmEncoder.setChannelPercent(0, 24);
ppmEncoder.setChannelPercent(4, 0);
ppmEncoder.setChannelPercent(5, 0);
ppmEncoder.setChannelPercent(6, 0);
ppmEncoder.setChannelPercent(7, 0);
}
在loop下的case BOUND_NEW_VALUES:
处,通过ppmEncoder.setChannelPercent设置通道与对应值
处理遥杆的值很简单,只要将对应的值转成输出的值就好了
剩下的4个通道我们需要计算
我在之前那nrf24_multipro高频头项目里的V2x2.ino文件找到了剩余通道的定义
enum {
// flags going to byte 14
V2x2_FLAG_CAMERA = 0x01, // also automatic Missile Launcher and Hoist in one direction
V2x2_FLAG_VIDEO = 0x02, // also Sprayer, Bubbler, Missile Launcher(1), and Hoist in the other dir.
V2x2_FLAG_FLIP = 0x04,
V2x2_FLAG_UNK9 = 0x08,
V2x2_FLAG_LED = 0x10,
V2x2_FLAG_UNK10 = 0x20,
V2x2_FLAG_BIND = 0xC0,
V2x2_FLAG_HEADLESS = 0x0200,
V2x2_FLAG_MAG_CAL_X = 0x0800,
V2x2_FLAG_MAG_CAL_Y = 0x2000
};
其实这些值对应到接收机代码,其实处理的就是rxValues.flags的值
这里处理方式就比较简单粗暴了
我直接将rxValues.flags的值,从最大值开始判断,然后减去
由于剩下的是4通道,所以
代码中的delay(2);我实际是删除了
上传代码,接上飞控
需要先设置飞控的接收机类型
然后遥控器对频测试
4.真机测试
焊接
将自制接收机接上小四轴
第一次测试没能飞起来,主要是因为电机转动瞬间,arduino就掉电重启了。
于是我随手拿来一个电容给接上了
对频
解锁
(σ゚∀゚)σ..:*☆起飞啦
总结
这个自制的接收机的遥控范围没有做测试,不过还有很多需要优化的地方,比如体积对于小四轴来说有点大,还有就是失去遥控信号后的一些逻辑处理需要优化的。这里的话就提供一个思路来给大家参考。
相关文章:
网友评论