2

我目前有一个设置,我使用 434MHz 的 Tx 和一个 Uno 向带有 Rx 的 Mega 发送一个字符。Mega 会计算它收到 char 的次数,然后如果它低于某个数字,它就会触发警报。这是在室内测量两个微控制器之间距离的可行方法还是有更好的方法。

发射器(兆)

#include <SoftwareSerial.h>

int rxPin=2; //Goes to the Receiver Pin
int txPin=5; //Make sure it is set to pin 5 going to input of receiver

SoftwareSerial txSerial = SoftwareSerial(rxPin, txPin);
SoftwareSerial rxSerial = SoftwareSerial(txPin, rxPin);
char sendChar ='H';

void setup() {
  pinMode(rxPin, INPUT);
  pinMode(txPin,OUTPUT);
  txSerial.begin(2400);
  rxSerial.begin(2400);
}

void loop() {
  txSerial.println(sendChar);
  Serial.print(sendChar);
}

接收者

#include <SoftwareSerial.h>

//Make sure it is set to pin 5 going to the data input of the transmitter
int rxPin=5; 
int txPin=3; //Don't need to make connections
int LED=13;
int BUZZ=9;
int t=0;

char incomingChar = 0;
int counter = 0;

SoftwareSerial rxSerial = SoftwareSerial(rxPin, txPin);

void setup() {
  pinMode(rxPin, INPUT); //initilize rxpin as input
  pinMode(BUZZ, OUTPUT); //initilize buzz for output
  pinMode(LED, OUTPUT); //initilize led for output
  rxSerial.begin(2400); //set baud rate for transmission
  Serial.begin(2400); //see above
}

void loop() {
  for(int i=0; i<200; i++) {
    incomingChar = rxSerial.read(); //read incoming msg from tx

    if (incomingChar =='H') {
      counter++; //if we get bit "h" count it  
    }
    delay(5); //delay of 10 secs
  }
  Serial.println(incomingChar);
  Serial.println(counter); //prints the the bits we recieved

  if(counter<55) {
    //if we receive less than 100 bits than print out of range triggers alarm
    Serial.println("out of range"); 
    tone(BUZZ,5000,500);digitalWrite(LED,HIGH);
  }
  else {
    noTone(BUZZ);digitalWrite(LED, LOW);
    //if we get more than 100 bits than we are within range turn off alarm
    Serial.println("in range"); 
  }

  counter = 0;
  incomingChar=0;
}
4

3 回答 3

1

从理论上讲,您可以通过使 uno 发送一条消息,让 mega 回显来实现距离测量。这将为 uno 在 arduino 之间的消息传播提供往返时间。您将不得不估计处理延迟。之后是基础物理。这与雷达的工作原理基本相同。实际的延迟类似于

t往返= t uno 发送+ 2*t传播+ t兆接收+ t兆发送+ t uno 接收

我猜你想要达到的距离是米的数量级。所需的分辨率将成为一个问题,因为s = vt => t = s/v,你的 arduino 和无线电波s之间的距离在哪里。v = c由于传输延迟应保持不变,因此您基本上必须能够以1/c秒间隔的顺序测量差异。我对arduinos不是很熟悉,所以我不知道他们是否能够进行这种测量。

于 2012-05-01T23:21:20.880 回答
0

我建议你使用像 Sparkfun 出售的Maxbotix HRLV-EZ4这样的超声波测距仪。它在您的价格范围内,它应该能够以 1mm 的分辨率测量高达 5m/195 英寸的距离。

于 2012-09-12T12:28:33.457 回答
0

实际上是可以做到的,我已经看到其他微控制器也可以做到。因此,使用 arduino 你将不得不解方程,适应 arduino 语言并进行大量测量以评估通信本身的差异。不要忘记大气衰减,这需要知道并适合方程。湿度可能会偏离电磁波。

于 2016-03-10T02:02:47.243 回答