我目前有一个设置,我使用434MHz的Tx和一个带有Rx的Mega发送一个char。 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;
}
答案 0 :(得分:1)
从理论上讲,你可以通过让uno发送一条消息来回发来实现距离测量。这将使uno在arduinos之间传递消息的往返时间。您必须估算处理延迟。之后是基础物理。这与雷达的工作方式基本相同。实际的延迟就像是
t 往返 = t uno发送 + 2 * t 传播 + t mega receive + t mega send + t uno receive
我猜你要达到的距离是米的数量级。所需的解决方案将成为一个问题,因为s = vt => t = s/v
,其中s
是您的arduinos与v = c
之间的距离,以防无线电波。由于传输延迟应保持不变,因此您必须能够以1/c
秒间隔的顺序测量差异。我对arduinos不太熟悉,所以我不知道他们是否有能力进行这种测量。
答案 1 :(得分:0)
我建议你使用像Sparkfun出售的Maxbotix HRLV-EZ4这样的超声波测距仪。 它在您的价格范围内,并且能够以1mm的分辨率测量最远5米/ 195英寸的距离。
答案 2 :(得分:0)
实际上可以这样做,我已经看到它可以用其他微控制器完成。因此,使用arduino你必须解决方程式,适应arduino语言,并进行大量测量,以重视通信本身的差异。不要忘记需要知道并适合方程的大气衰减。湿度可能会偏离电磁波。