5iMX宗旨:分享遥控模型兴趣爱好

5iMX.com 我爱模型 玩家论坛 ——专业遥控模型和无人机玩家论坛(玩模型就上我爱模型,创始于2003年)
查看: 2510|回复: 15
打印 上一主题 下一主题

APM雷达追踪舵机控制器DIY

[复制链接]
跳转到指定楼层
楼主
发表于 2015-11-10 08:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
点击查看详情
最近想玩 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;
            }
  }
}


欢迎继续阅读楼主其他信息

沙发
发表于 2015-11-10 08:34 | 只看该作者



非常棒,加油!
3
发表于 2015-11-10 09:23 | 只看该作者
厉害,要是会肯定贡献
来自安卓客户端来自安卓客户端
4
发表于 2015-11-10 10:03 | 只看该作者
楼主介不介意把工程发给我,一起研究,670962016@qq.com。
来自安卓客户端来自安卓客户端
5
 楼主| 发表于 2015-11-10 10:33 | 只看该作者
Director_Liu 发表于 2015-11-10 10:03
楼主介不介意把工程发给我,一起研究,670962016@qq.com。

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



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

没用自己写的头文件库什么的吧
来自安卓客户端来自安卓客户端
7
 楼主| 发表于 2015-11-10 12:36 | 只看该作者
Director_Liu 发表于 2015-11-10 12:34
没用自己写的头文件库什么的吧

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


8
发表于 2015-11-11 13:53 | 只看该作者
加油!
9
发表于 2015-11-12 19:59 | 只看该作者
我想知道硬件呢?软件的代码是有了,硬件用什么??没电路什么的吗?
10
发表于 2015-11-12 20:31 ——“来自手机” | 只看该作者
用Mega 2560可以吗?
11
 楼主| 发表于 2015-11-12 22:20 | 只看该作者

  当然可以了!
12
发表于 2015-11-13 08:54 | 只看该作者
xlve 发表于 2015-11-12 19:59
我想知道硬件呢?软件的代码是有了,硬件用什么??没电路什么的吗?

硬件说了呀,就两个舵机,信号线在文章中说明端口了。
来自安卓客户端来自安卓客户端
13
发表于 2015-11-13 09:24 | 只看该作者
感谢分享。我对这个很感兴趣。antenna tracker。不过这个缺少设置管理吧。实测如何?

还没看明白原理。仅仅是用GPS方向吗?
14
 楼主| 发表于 2015-11-13 09:55 | 只看该作者
napsterx 发表于 2015-11-13 09:24
感谢分享。我对这个很感兴趣。antenna tracker。不过这个缺少设置管理吧。实测如何?

还没看明白原理。 ...


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

15
发表于 2015-11-13 11:32 | 只看该作者
电那小PCB的电路原理图PM我一份可以吗。。。
16
 楼主| 发表于 2015-11-13 12:35 | 只看该作者
xlve 发表于 2015-11-13 11:32
电那小PCB的电路原理图PM我一份可以吗。。。

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

您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

关闭

【站内推荐】上一条 /2 下一条

快速回复 返回顶部 返回列表