2

私は現在、434MHzのTxを使用してcharを送信し、Rxを使用してMegaにUnoを送信する設定をしています。Megaは、charを受信した回数をカウントし、特定の数を下回ると、アラームをトリガーします。これは、屋内で2つのマイクロコントローラー間の距離を測定するための実行可能な方法ですか、それともより良い方法がありますか。

送信機(メガ)

#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に送信させることで距離測定を実現できます。これにより、uno は arduino 間でメッセージを伝搬するためのラウンドトリップ時間を得ることができます。処理の遅延を概算する必要があります。後は基礎物理です。基本的にはレーダーの仕組みと同じです。実際の遅延は次のようになります

tラウンドトリップ= t uno 送信+ 2*t伝播+ tメガ受信+ tメガ送信+ t uno 受信

あなたが達成しようとしている距離はメートルのオーダーだと思います。は arduino 間の距離であり、電波の場合はであるためs = vt => t = s/v、必要な解像度が問題になります。伝送遅延は一定である必要があるため、基本的には秒間隔のオーダーで差を測定できる必要があります。私は arduino に詳しくないので、この種の測定が可能かどうかはわかりません。sv = c1/c

于 2012-05-01T23:21:20.880 に答える
0

Sparkfun が販売しているMaxbotix HRLV-EZ4のような超音波距離計を使用することをお勧めします。それはあなたの価格帯の範囲内であり、1mm の解像度で最大 5m/195 インチの距離を測定できるはずです。

于 2012-09-12T12:28:33.457 に答える