5iMX.com 我爱模型 玩家论坛 ——专业遥控模型和无人机玩家论坛(玩模型就上我爱模型,创始于2003年)

标题: APM雷达追踪舵机控制器DIY [打印本页]

作者: payne_pan    时间: 2015-11-10 08:00
标题: APM雷达追踪舵机控制器DIY
最近想玩 APM雷达追踪, 但 Maestro 6ch servo controller 太贵了 就自己做一个。
原型做好了,就是在APM中调试界面中也能操作,就是抖舵太严重了,现在我把源代码公开,大家一起来讨论

材料: Arduino ProMini/Nano
转向舵机连接 pin 2 ,  俯仰舵机连接pin 3



源代码
========  apm_attenal_tracker.ino=====
//#define DEBUG true

#include <Servo.h>
#ifdef DEBUG
#error
#include <SoftwareSerial.h>
#endif

const int SERVO_CONTROLLER_RX_PIN = 11; // The SERVO CONTROLLER'S RX PIN.
const int SERVO_CONTROLLER_TX_PIN = 12;

boolean cmdComplete = false;  // whether the string is complete
static int dataBufferIndex = 0;
static int remainingByte = 0;

#define BUF_LEN 12
byte serialBuffer[BUF_LEN] = "";
#ifdef DEBUG
SoftwareSerial softSerial = SoftwareSerial(SERVO_CONTROLLER_RX_PIN, SERVO_CONTROLLER_TX_PIN);
#endif
Servo servo[2];
int prev_pwm[2];

void setup(void) {
  Serial.begin(57600);
#ifdef DEBUG
  softSerial.begin(9600);
#endif   
  servo[0].attach(2); //head
  servo[1].attach(3); //pitch
  servo[0].write(90);
  servo[1].write(90);

  prev_pwm[0] = 0;
  prev_pwm[1] = 0;

  delay(50);
}

void loop(void) {
  serial_receive();
} // end loop()

void serialEvent() {
  while (Serial.available() > 0 ) {
    byte incomingByte = Serial.read();
        if (incomingByte == 0x84) {
         serialBuffer[dataBufferIndex++] = incomingByte;
             remainingByte = 3;
        } else if ( remainingByte > 0) {
                serialBuffer[dataBufferIndex++] = incomingByte;
                remainingByte--;
                if ( remainingByte == 0) {
                        cmdComplete = true;
                }
        }
  } // end while()
} // end serialEvent()

void serial_receive(void){
  if (cmdComplete) {
    if ( serialBuffer[0] == 0x84) {
       int servo_no =  serialBuffer[1];
       int servo_val = serialBuffer[3];
       servo_val = (servo_val<<7) + serialBuffer[2];
       servo_val >>=2;
       servo_val = servo_val/50*50;      
#ifdef DEBUG          
       softSerial.print(servo_no);softSerial.print(" ");softSerial.println(servo_val);
#endif          
       setServo(servo_no, servo_val);
    }

    cmdComplete = false;
    dataBufferIndex = 0;
  } // endif
} // end serial_receive()

void setServo(int no, int val)
{
  if ( no >=0 && no <= 1 && val >= 500 && val <= 2500)  {
           if ( abs(val-prev_pwm[no]) > 30) {
             servo[no].writeMicroseconds(val);
             prev_pwm[no] = val;
            }
  }
}



作者: itsme    时间: 2015-11-10 08:34



非常棒,加油!

作者: IMX_lc    时间: 2015-11-10 09:23
厉害,要是会肯定贡献

作者: Director_Liu    时间: 2015-11-10 10:03
楼主介不介意把工程发给我,一起研究,670962016@qq.com。

作者: payne_pan    时间: 2015-11-10 10:33
Director_Liu 发表于 2015-11-10 10:03
楼主介不介意把工程发给我,一起研究,670962016@qq.com。

arduino 的工程就一个文件
apm_attenal_tracker.ino
内容就是我贴的代码,你下载一个arduino就可以打开使用了




作者: Director_Liu    时间: 2015-11-10 12:34
payne_pan 发表于 2015-11-10 10:33
arduino 的工程就一个文件
apm_attenal_tracker.ino
内容就是我贴的代码,你下载一个ardui ...

没用自己写的头文件库什么的吧

作者: payne_pan    时间: 2015-11-10 12:36
Director_Liu 发表于 2015-11-10 12:34
没用自己写的头文件库什么的吧

是的,下面的.h, arduino 自带#include <Servo.h>
#include <SoftwareSerial.h>



作者: ywywxb    时间: 2015-11-11 13:53
加油!

作者: xlve    时间: 2015-11-12 19:59
我想知道硬件呢?软件的代码是有了,硬件用什么??没电路什么的吗?

作者: 老夫不是鳖    时间: 2015-11-12 20:31
用Mega 2560可以吗?

作者: payne_pan    时间: 2015-11-12 22:20
老夫不是鳖 发表于 2015-11-12 20:31
用Mega 2560可以吗?

  当然可以了!

作者: Director_Liu    时间: 2015-11-13 08:54
xlve 发表于 2015-11-12 19:59
我想知道硬件呢?软件的代码是有了,硬件用什么??没电路什么的吗?

硬件说了呀,就两个舵机,信号线在文章中说明端口了。

作者: napsterx    时间: 2015-11-13 09:24
感谢分享。我对这个很感兴趣。antenna tracker。不过这个缺少设置管理吧。实测如何?

还没看明白原理。仅仅是用GPS方向吗?

作者: payne_pan    时间: 2015-11-13 09:55
napsterx 发表于 2015-11-13 09:24
感谢分享。我对这个很感兴趣。antenna tracker。不过这个缺少设置管理吧。实测如何?

还没看明白原理。 ...


你先看看 http://bbs.5imx.com/BBS/forum.ph ... 8442&highlight=


作者: xlve    时间: 2015-11-13 11:32
电那小PCB的电路原理图PM我一份可以吗。。。

作者: payne_pan    时间: 2015-11-13 12:35
xlve 发表于 2015-11-13 11:32
电那小PCB的电路原理图PM我一份可以吗。。。

因为太简单没有画,就是arduino nano/mini 把 pin2, pin3 接出来而已。






欢迎光临 5iMX.com 我爱模型 玩家论坛 ——专业遥控模型和无人机玩家论坛(玩模型就上我爱模型,创始于2003年) (http://wz.5imx.com/) Powered by Discuz! X3.3