2012-05-01 11 views
2

私は現在、434MHzのTxとRxのMegaにUnoを使用してcharを送信する設定を持っています。 Megaはチャールを受信した回数をカウントし、一定数以下になるとアラームをトリガーします。これは屋内または2つのマイクロコントローラ間の距離を測定する実用的な方法ですか?理論的には2つのarduinoのrfリンクを使用した距離

トランスミッタ(メガ)

#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)どのレベルの精度が必要ですか。 2)その他の制限事項(費用など) 3)これらの間には自由な見通し線があります。 4)どのような距離の範囲に興味がありますか? – tom10

+0

1)かなり正確でなければなりません。正確な数字でない場合は申し訳ありません。2)コストは低く、50ドル未満の場合はunoとmegaは含まれません。3)視線は無料です。4)短距離に興味があります。15ft – teddywestside

+0

このような距離を簡単に測定できるarduinoには何も組み込まれていません。これは基本的にハードウェアの問題であるため、おそらくstackoverflow以外のフォーラムでは良いでしょう。ただし、音響または超音波通信、光強度または他の信号強度、既知の距離で分離された2つの光の間隔、レーザーレンジファインダなどを測定するものもあります。 – tom10

答えて

1

あなたはUNOはメガエコーバックうメッセージを送信することによって、距離測定を実現することができます。これにより、arduinos間のメッセージ伝播のための往復時間が与えられます。処理の遅延を近似する必要があります。その後、それは基本的な物理学です。それは基本的にレーダーの仕組みと同じです。実際の遅延は

トンようなものになるだろう往復 = T UNO送る + 2 * tの伝播 + T メガはは+メガ送信トン + T UNO受け取る受信

私はあなたが達成しようとしている距離がメートルのオーダーであると推測しています。 s = vt => t = s/vsはarduinosと電波の場合のv = cの間の距離なので、必要な解像度が問題になります。送信遅延が一定に保たれるべきであるので、基本的に1/c秒の間隔の差を測定することができなければなりません。私はarduinosにあまり精通していないので、私は彼らがこの種の測定が可能かどうかわかりません。

+2

これは音響(速度が〜300 m/sだから遅れて〜0)で動作するかもしれません。03秒)ですが、光で動作する方法はありません(速度は〜300000000秒〜0.03マイクロ秒です)。 – tom10

0

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

0

これは実際に行うことができますが、私は他のマイクロコントローラでこれを行うことができました。したがって、arduinoを使用すると、方程式を解き、arduino言語に適合させ、コミュニケーション自体の相違を評価するために多くの測定を行う必要があります。方程式に既知で適合する必要がある大気減衰について忘れないでください。湿気が電磁波を逸らす可能性があります。

関連する問題