欢迎光临散文网 会员登陆 & 注册

ArduCanard V2.0 航模自动控制鸭翼小程序第二版

2023-02-12 17:57 作者:暖风新叶柳  | 我要投稿

//ArduCanard是用arduino控制鸭翼的一个小程序,纯属个人瞎写,但是恰好可以运行。

//V2.0版优化内容:1.增加攻角限制器,在攻角大于35°后鸭翼不再响应拉杆量,变成纯正风向标。 2.舵机直接用pwm输出来控制,不用servo.h了,似乎可以避免串口和servo.h共用timer造成的卡顿问题。卡顿似乎有改善。

// 飞行效果:https://www.bilibili.com/video/BV16v4y1s7VB/?spm_id_from=333.999.0.0 //

//警告:该程序用于把鸭翼变成风向标,便于静不稳定飞机或者放宽静稳定飞机的控制。飞机上必需要额外加陀螺才能保持稳定。程序经过飞行验证,但是使用者一切后果自负,包括但不限于俯仰发散、深失速、尾旋、上树、提控回家,务必在开阔无人的地方进行测试。

//传感器:维特智能JY-ME01轴编码器,精度0.1°。通信用的串口,从传感器的板子的串口TX焊线出来连arduino板子的RX即可。

//传感器输出数据是字符串,格式为 Angle:xxx.xxx °,因此数据需要处理一下,从字符串中把后面的数字提取出来,再除以1000,得到攻角的值(此处因为用了delay函数,导致程序运行有延时,后续会改进)

char comdata = "";//字符串函数

String aoa = "";//字符串函数

float AOA;

byte PWM_PIN = 2; //将PWM的信号线输入到3号引脚

int pwm_value;

float AOAlimitmax=30;//攻角限制+-30

int theta;


void servopulse(int angle)//定义一个脉冲函数

{

  int pulsewidth=(angle*11)+500;  //将角度转化为500-2480的脉宽值

  digitalWrite(9,HIGH);    //将舵机接口电平至高

  delayMicroseconds(pulsewidth);  //延时脉宽值的微秒数

  digitalWrite(9,LOW);     //将舵机接口电平至低

  delayMicroseconds(20000-pulsewidth);

}


void setup() {

  pinMode(9,OUTPUT);//设定舵机接口为输出接口

  servopulse(90);

  delay(500);

  pinMode(PWM_PIN, INPUT);//将该引脚设置为输入模式

  Serial.begin(9600);//打开串口波特率9600

}


void loop()

{

    pwm_value = pulseIn(PWM_PIN, HIGH);//检测高电平

    float AOAcmd=(pwm_value-1000)*(AOAlimitmax*2)/1000-AOAlimitmax ;//pwm1000=-AOAlimitmax,pwm1500=0,pwm2000=AOAlimitmax 

    String aoa = "";//缓存清零

    while (Serial.available() > 0)//循环串口是否有数据

    { 

      comdata=Serial.read();

      if(isDigit(comdata)) //是数字就执行

        {

          aoa += comdata;//叠加数据到aoa

        }

      delay(2);//延时等待响应

    }

  if (aoa.length()>0)//如果aoa有数据

  { 

      AOA=aoa.toFloat();

      AOA=AOA/1000-180;

  }

  delay(2);//延时等待响应


  if (AOA>35&&AOAcmd>0)

  {theta=-1.1*AOA+90+5;}

  else

  {theta=-1.1*(AOA-AOAcmd)+90+5;}

  if (theta>140)

  {theta=140;}

  if (theta<60)

  {theta=60;}

  servopulse(theta);

  //Serial.print(pwm_value);

  //Serial.print(",");

  //Serial.print(AOAcmd);

  //Serial.print(",");

  //Serial.print(AOA);

  //Serial.print(",");

  //Serial.println(theta);

}


ArduCanard V2.0 航模自动控制鸭翼小程序第二版的评论 (共 条)

分享到微博请遵守国家法律