前段时间刷到了许多航模大佬的视频,航模飞上天的那一刻真的感觉很牛,立马激发了我的兴趣。有简单了解,航模主要配件就是接收机和遥控器还有无刷电机舵机等,遥控器的价格真的会让我死心。后来我又去了解无刷电机和电调原理,无刷电机的原理和舵机的原理没多大差别,都是使用一定频率的pwm通过调节占空比来控制舵机和电机。关于pwm(脉宽调制)感兴趣的可以去了解一下,用途还是非常广的。
**遥控端:
材料:Arduino nano x1;NRF2401 x1;16x16摇杆(按键可有可无) x2;CD42充电升压一体模块 x1;锂电池 x1;排母若干,拨动开关一个;
原理图:
PCB3D仿真图:
遥控端程序:
/*航模遥控端代码
*written by Han
*仅供参考禁止商用
*/
//引入所需库文件
#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>
const uint64_t pipeOut = 0x89E8F0F0E1LL; //遥控端通信地址
RF24 radio(7, 8); // CE、CSN对应引脚
struct creat //定义结构体变量用来存储摇杆数据
{
uint8_t lx; //左摇杆X轴
uint8_t ly; //左摇杆Y轴
uint8_t rx; //右摇杆X轴
uint8_t ry; //右摇杆Y轴
};
creat data; //创建结构体并命名为data
void Data_Init() //初始化数据函数
{
data.lx=90;
data.ly=90;
data.rx=90;
data.ry=90;
}
void setup()
{
Data_Init();
Serial.begin(9600);
radio.begin(); //初始化
radio.setPALevel(RF24_PA_MAX); //功率选择
radio.openWritingPipe(pipeOut); //通信地址
radio.stopListening(); //停止接受(发射模式)
}
void loop()
{
delay(50); //延迟
data.lx=map(analogRead(A0),0,1023,0,180); //将摇杆获取的ADC数据按比例转换为0~180范围内的数据并赋给对应变量
data.ly=map(analogRead(A1),0,1023,0,180);
data.rx=map(analogRead(A2),0,1023,0,180);
data.ry=map(analogRead(A3),0,1023,0,180);
radio.write(&data, sizeof(data)); //将数据发送
}
**接收端
材料:Arduino nano x1;NRF2401模块 x1;排针、排母若干;
原理图:
PCB3D仿真图:
接收端代码:
/*航模接收端代码
*written by Han
*/
//引入所需库文件
#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>
#include <Servo.h>
//通道0~4共五个
Servo ch0;
Servo ch1;
Servo ch2;
Servo ch3;
Servo ch4;
const uint64_t pipeIn = 0x89E8F0F0E1LL; //通信地址
RF24 radio(7, 8); //CE、CSN对应引脚
struct creat //定义结构体变量用于存储摇杆数据
{
uint8_t lx; //左摇杆X轴
uint8_t ly; //左摇杆Y轴
uint8_t rx; //右摇杆X轴
uint8_t ry; //右摇杆Y轴
};
creat data; //创建结构体命名为data
void Data_Init() //数据初始化函数
{
data.lx=90;
data.ly=90;
data.rx=0;
data.ry=90;
}
void Servo_Init() //通道初始化函数
{
ch0.write(0);
ch1.write(90);
ch2.write(90);
ch3.write(90);
ch4.write(90);
}
void setup()
{
ch0.attach(3);
ch1.attach(5);
ch2.attach(6);
ch3.attach(9);
ch4.attach(10);
radio.begin(); //初始化
Serial.begin(9600);
radio.openReadingPipe(1,pipeIn); //接收地址
radio.startListening(); //开始接收(接收模式)
Data_Init(); //数据初始化
Servo_Init(); //通道初始化
}
void loop()
{
while ( radio.available() )
{
radio.read(&data, sizeof(data)); //接收数据传给data
//执行
ch0.write(180-data.rx);
ch1.write(data.ry);
ch2.write(data.lx);
ch3.write(data.ly);
}
delay(50);
}
以上代码我都对其写了详细注释(我觉得挺详细的了,其实我平时不怎么写注释的)如果摇杆数据反了进行简单修改就行啦,本人航模小白,只会点单片机,请大佬指点。对应的PCB我会在开源之后发出来
以下是实物图: