极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 16666|回复: 5

求教!Arduino通过信号强度值控制云台舵机

[复制链接]
发表于 2015-1-12 23:42:17 | 显示全部楼层 |阅读模式
想做一个天线自动跟踪装置(跟踪无人机),有双舵机组成云台,上面搭载天线!(通信接收机问题不用考虑,无人机飞控不用考虑)
打算用接收信号强度来舵机控制,即Arduino从接收机获得天线接收的信号强度(RSSI)
每个一定周期(暂定2S)接受到RSSI,由Arduino控制舵机使天线始终对准飞行目标(动态跟踪),相当于步进跟踪,极大值跟踪。
目前,我能从接收机获得信号强度值,函数如下:
String comdata = "";  //用于接收通信接收机发来的信息,其中包括signal=-xx,为两位数信号
int numdata[6] = {
  0};
int mark = 0;
void setup()
{
  Serial.begin(9600);
  while (!Serial);
}

void loop()
{
  int j = 0;
  while (Serial.available() > 0)
  {
    comdata += char(Serial.read());
    delay(2);
    mark = 1;
  }
  if(mark == 1)
  {
    int sIndex = comdata.indexOf("signal=-");//对signal信息定位
    if(sIndex==-1){
      return;
    }
    String rssi=comdata.substring(sIndex+8,sIndex+10);
    Serial.println(rssi.toInt());
  }
  comdata = String("");
  mark = 0;Serial.flush();
}
接下来需要Arduino利用RSSI的值控制舵机,始终保持RSSI为较大值再深入点我想加入PID算法,有木有前辈比较懂哈,给我点建议或思路
回复

使用道具 举报

发表于 2015-1-13 11:12:04 | 显示全部楼层
你可以类似手机信号不好时无法接通电话
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-1-13 12:46:11 | 显示全部楼层
suoma 发表于 2015-1-13 11:12
你可以类似手机信号不好时无法接通电话

#include <Servo.h>
Servo myservo1;
Servo myservo2;
int pos1 = 90;
int pos2 = 90;
String comdata = "";
String comdata1 = "";
int rssi=0,lastrssi=0;
int mark = 0;
void setup()
{
  Serial.begin(9600);
  while (!Serial);
  myservo1.attach(10);
  myservo2.attach(11);
  myservo1.write(pos1);
  myservo2.write(pos2);
}

void loop()
{
  int j = 0;
  while (Serial.available() > 0)
  {
    comdata += char(Serial.read());
    delay(8);
    mark = 1;
  }
  if(mark == 1)
  {
    int lastrssi=rssi;
    int sIndex = comdata.indexOf("signal=-");
    if(sIndex==-1)
    {
      return;
    }
    String charRssi=comdata.substring(sIndex+8,sIndex+10);
    rssi=charRssi.toInt();
    Serial.println(rssi);
    Serial.println(lastrssi);
    comdata = String("");
    Serial.flush();
    mark = 0;
  }
  while(rssi&&lastrssi)
  {
    if(rssi>lastrssi)Serial.println("you");
    if(rssi<lastrssi)Serial.println("zuo");
  }
}

写到这里了目前,想在 if(rssi>lastrssi)Serial.println("you");
    if(rssi<lastrssi)Serial.println("zuo")中写舵机函数,单现在调试不成功,无法显示zuo you



回复 支持 反对

使用道具 举报

发表于 2015-1-13 16:12:26 | 显示全部楼层
你这个思路不对,这不成了摇头机了.
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-1-13 18:58:22 | 显示全部楼层
数字 发表于 2015-1-13 16:12
你这个思路不对,这不成了摇头机了.

想根据信号强度实现步进跟踪,加入舵机向右转动一个步长,发现信号强度减小,那么就应该使舵机左转回去。类似这样的运动方式
回复 支持 反对

使用道具 举报

发表于 2015-4-17 19:15:49 | 显示全部楼层
思路有问题,建议看看多普勒定位原理,就是采用的信号强度来定位的。 你这样搞,完全没有精度可言。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|联系我们|极客工坊

GMT+8, 2026-6-8 18:36 , Processed in 0.071930 second(s), 20 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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