前回は、最も単純な形で超音波測距モジュールとArduinoをつなげて動作させてみました。
今回は2個のArduinoを使って、超音波測距モジュールのデータを送信側Arduinoから受信側Arduinoへシリアル通信させて、PCのシリアルモニタに表示したいと思います。

イメージ図は、こんな感じ↑です。
今回は2個のArduinoのTXピン/RXピンをジャンパー線で直接つなぐのもOKですが、同じことをXBeeを使って実現したいと思います。

配線後の実物がこちら↑
次にスケッチ(プログラム)です。
送信側と受信側の2つのスケッチがあります。
※なお、スケッチの動作確認はしていますが、流用する場合は自己責任でお願いします。
■送信側
/*******************************************************************************
シリアル通信テスト用プログラム(SEN136B5B)
++++++ note ++++++
・送信側
・SEN136B5B
・TXRX直接接続とXBee接続の両方で動作確認済み
*******************************************************************************/
const int SIG_PIN = 7;
void setup() {
Serial.begin(9600);
}
void loop() {
// 1. トリガー信号の送信 (OUTPUT)
pinMode(SIG_PIN, OUTPUT);
digitalWrite(SIG_PIN, LOW);
delayMicroseconds(2);
digitalWrite(SIG_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(SIG_PIN, LOW);
// 2. エコー信号の受信 (INPUT)
pinMode(SIG_PIN, INPUT);
// パルスの返答時間を測定 (タイムアウト: 30000us ≒ 約5m分)
long duration = pulseIn(SIG_PIN, HIGH, 30000);
// 3. 距離の計算 (cm)
float distance = (duration * 0.034) / 2.0;
// 4. 測定可能範囲(3cm ~ 400cm)の判定と送信
if (distance >= 3.0 && distance <= 400.0) {
// 範囲内の場合は距離を出力
Serial.print("Distance: ");
Serial.print(distance);
Serial.println(" cm");
} else {
// 3cm未満、400cm超、またはタイムアウト(0)の場合はOut of Rangeを表示
Serial.println("Out of Range");
}
delay(500);
}
■受信側
/*******************************************************************************
シリアル通信テスト用プログラム(SEN136B5B)
++++++ note ++++++
・受信側
・SEN136B5B
・TXRX直接接続とXBee接続の両方で動作確認済み
---
・Serial.available() > 0
送信側から届いた未読のデータ(バイト)がシリアルバッファに1つ以上入っているかを
チェックします。
・Serial.readStringUntil('\n')
送信側が Serial.println() で送信したデータの末尾につく改行文字('\n')を検出する
までデータを受け取り続けます。読み取った改行文字自体は取り除かれた状態で
String 型変数へ格納されます。
*******************************************************************************/
void setup() {
Serial.begin(9600);
}
void loop() {
if (Serial.available() > 0) {
// 1行分のデータを読み込む
String receivedData = Serial.readStringUntil('\n');
// PCのシリアルモニタに出力
Serial.print("Received -> ");
Serial.println(receivedData);
}
}
動作確認はIDEのシリアルモニタで確認します。(RX側です)
部屋の中でモジュールの向きをいろいろ変えると、数値が変わっていきますので、XBeeを介したシリアル通信はうまく動作しているようです。
これで遠隔からのデータ通信ができるようになりましたので、今後いろいろと使い道がありそうです。


コメント