HOME >> 鉄道模型実験室 > 超音波式の距離センサーを使う

鉄道模型実験室  超音波式の距離センサーを使う

■ はじめに

 先回の実験「距離センサーを使う」では、シャープ製の測距モジュールを使用しましたが、このモジュールは赤外線を使用して三角測量の原理で計測するセンサーであった。 この三角測量での計測は、遠方になるに従ってその測定誤差が大きくなる欠点があり、ステップ応答での収束部の状態を観察する場合には少しでも誤差の少ない方式が望ましいと考えられる。 そこで、今回は原理的にその欠点のない超音波方式の距離センサーを使ってみることにした。

 

  .

■ 距離センサーの選択

 今回選択した距離センサーは、超音波が反射してくるまでの時間を計測して距離を測定するものである。 コンピュータによる時間計測の誤差は極めて少ないと推察するので、距離が長くなっても計測時間が延びるだけであるため、計測誤差は距離に影響されないと考えることが出来る。

 超音波方式の距離センサーとして、ホビー用に適した HR-SR04 モデルを選択して、通販にて2種類の製品を入手したものを右の写真に示す。 同じ HR-SR04 モデルでもメーカーが異なっており、裏側の配線パターンも異なっていたが、なんだか左の物がおかしい事に気が付いた。 発振器が取り付けられていないのである。 カタログの写真と見比べても、欠品としか思えないので、返品処理を実施した。 たまたま1個しか在庫がなかったので、予備品として他のメーカの物を注文していたので、比較することが出来たが、気が付かずに使用していたら、作動しないので四苦八苦していただろうと想像する。 それに、説明書も仕様書も同封されていなかったので、あちこちのネットを探して使い方を調べる必要もありました。 このような事があるので、私の様な素人はバルク品に手を出さない様にしよう。 

 

  .

■ 処理回路の製作と予備実験

 今回のセンサーは、電源入力とグランド端子の他に、トリガ入力信号とエコー出力信号用のデジタル端子が設けられているので、先回作成した基板に超音波センサー用の回路を追加加工を実施した。 そして、トリガ入力信号はD4 ピンに、エコー出力信はD3 ピンに結線した。

  ***** スケッチのメインの部分 ******

 for(n=0; n<210; n++){    // 210 回測定する
   vol = 0;
   cur = 0;
//測定
  digitalWrite(trig_PIN,HIGH);
  delayMicroseconds(1000);
  digitalWrite(trig_PIN,LOW);
  duration = pulseIn(echo_PIN,HIGH);
  t2 = millis();
  for(i=0;i<30;i++){
    voltage = analogRead(vol_pin);
    current = analogRead(cur_pin);
    vol = vol + voltage;
    cur = cur + current;
  }
  angle = analogRead(angle_pin);
 //出力処理
  tt = t2 - t1;
  String buf = String(vol) + "," + String(cur)
+ "," + String(tt) + "," + String(duration)
+ ","+ String(angle) + ",E";   Serial.println(buf);   delay(40);  }

 スケッチの記述は、測定を実施するメインの部分だけを取り出して右に示す。 距離測定の時間は距離によって少しは変化すると考え、先に距離測定を実施し、時間計測のタイミングを距離測定と電流電圧測定の間で実施するようにした。 電流電圧の測定回数やdelay時間の設定は計測サイクルを見ながら決めることにする。

 ハードおよびスケッチの準備が出来たので、Arduino を動かして動作をチェックした。 距離計算はEXCEL側で実施し、その時の室温データを入力して距離データを補正させるが、測定データの較正が必要ないので、すぐ予備実験を始める事が出来た。

 

◆ 予備実験

 試験車両の後ろ側に反射板を貼り付け、適当な距離に停車させて反応を見た。 まずは正常に反応している事に安心して、いろいろな距離での測定を実施した。 すると、40cm までは正確に測定してくれるが、それを超えると測定値がおかしくなってきた。 データのバラツキが大きくなり、値もかけ離れた値を示していた。 そこで反射板を大きくすると直線路の端まで(およそ60cm ) まで正確に測定してくれた。 しかし、大きな反射板では測定線路を周回出来ないので、小さい反射板でも反応出来るように検討する必要があった。

 音波が拡散してターゲットに充分当らないのではと考え、線路沿ってトンネルのような壁を作って見ると小さな反射板でも反応してくれた。 しかし、トンネル内ではデータがばらついてしまったので、この案はNG とした。

 また、周りに障害物が有るとそちらに反応するので、電圧計のパネルメータを取り外し、位置を変更した。

 トンネルがダメなら、発射する側でメガホンのように音の拡散防止を図ろうと考えた。 このセンサモジュールには二つの円筒状部品があり、一方が送信器で他方が受信器であるが、送信側がどちらかを調べておく必要がある。 そこで、下の写真の様な円筒を作って実験してみた。 上側に筒を装着した場合には、およそ、100cm と計測された。 下側に筒を装着した場合には、15.9cm と正確に計測された。 即ち、前者の場合は、発射された音波は、ターゲットの反射板の上を通過して遠くの壁で反射してきた音波を拾ったと考えられ、これによって送信は上側の部品であると判断した。

 そこで、測定モジュールの上下を逆にし、即ち、送信器を下側の状態にし、送信側に円筒を装着して、メガホンのように音波の拡散防止を図った状態にして実験した。 しかし、その結果は、585mm のターゲットでは 217mm 、650mm のターゲットでは 224mm との計測結果であり、無残な結果に戸惑ってしまた。 、

 その後、線路の凸凹の影響を怪しいと考え、テープを貼るなど、いろいろな状態で実験した結果、

   1) 超音波モジュールは線路に近付けない。

   2) 受信側なら良いと思ったが、受信側でもノイズを拾う。

との結論に達した。 ターゲットに反射した強い音波の反応が有る時は、線路や床などで反射してくるノイズは無視されているが、小さくなったターゲットの場合には、線路等で反射してくるノイズが相対的に大きくなってしまって、不正確な測定結果となるものと推察し、今までの実験結果に納得する事が出来た。

 

■ 改良した実験方法

 とにかく、距離センサを線路から離すことが一番と考え、センサーモジュールを下の写真の様に設置した。 線路の上方に送信側と受信側を横に並べて設置し、反射ターゲットは縦に長いプラ板を張り付けるようにした。 これによってエラーの無いデータを収集することが可能となった。

 車両と測定モジュールの関係を上の写真に示す。 モジュールは回転出来る腕木の上に取り付けており、車両を通過させる場合には腕木を上げるようにした。

 その後、縦長の反射ターゲットが不安定なので、専用の車両を作り、その車両を牽引するようにした。 下の写真。 車両は鉄コレのシャシーを利用してプラ板を接着したものであり、線路に対して垂直もしっかりと確保している。 試験車両の取り換えも容易である。

 なお、この測定のためには、速度測定用のターゲットは取り外す必要があるのは、仕方がないことか。

 次に、少しでも測定間隔を狭めたいと考え、電流電圧の測定回数やdelay時間の設定を変えて実験してみた。 delay(25)やdelay(30) ではデータが飛んでしま現象が発生した。 最終的には、電流電圧の測定回数を30回にし、delay(40) とした。 これによって測定間隔は、50m 秒で実施出来ている。

 

■ 実際の測定

 実際の測定結果を下に示す。 直線線路の端(60cm 手前)まで綺麗に測定出来ている。 ただし、使用したセンサモジュルの仕様によると、測定誤差は 0.3cm と明記されているのであまり期待はしていなかったが、データ自身はやはり少し凸凹していた。

 先回と同様にデータ処理をしてみたが、やはり不満である。

◆ 速度データの近似式

 先回報告の交点を求める方法では、一定速度に収束する様子を表現していないと思っている。 今回の超音波方式での測定では、少しは改善されるかと期待したが、測定距離は延びたものの、速度データと見るとまだまだ不満である。 かと言って、適切な速度センサーが見つからにので、工夫するしかない。

 もっとも欲しいものは、一定速度に収束するパターンであることにこだわると、距離データへの近似式の当てはめを中止して、距離データを生かして速度要素を表現できないか工夫することにした。

 まず、距離データの変化分を時間間隔で割算した “速度” の値を多項式で近似させると下記の様なグラフになる。 多項式近似はスタート後から適応することにし、測定距離が延びた分変化の動向が判らないかと期待したのであるが・・・・・・・・。 2次近似から6次近似までチェックするが、その中の3次と6次の状態を下に示す。

 

 どうも納得が行かないのでグラフを凝視していたが、距離のデータを見て気が付いた。 なんと、後ろにバックしている様なデータも見受けられるのである。 車両は前に進んでいるはずなのに・・・・・・・・。

 これは測定精度の限界と判断して計算で誤魔化すことにする。 その方法として、距離データについて、前後の値を含めて、3点のデータを平均して行くと、データが少し鈍ってくるが、バラツキが平均化されると考える。 その比較グラフを右に示す。

 前後の3点平均と生の距離データを縦軸を少しズラして表示しているが、バラツキが小さくなっている事が理解できるであろう。 ここで、55cm を過ぎるあたりからは変化が激しくなっているが、これは曲線路に入ってしまう領域なので無視することにする。

 この3点平均距離データを使ってその差分を速度データと見ると下の様なグラフになる。 ここでは、混乱を避けるため “推定速度” と表現している。

 

 

 

 

 データとしてはバラツキが少し小さくなっている事が判る。 そこで、この速度特性の全体を把握するため、多項式で近似させることにした。 左のグラフは6次の多項式で近似させた近似線を表示させている。

 こんなバラツキの大きいデータを多項式で近似させても、
本当に意味があるのだろうか?
 の自問に耐えながらも、
なんだか本当らしく見えてくるのである。

 電流と電圧が落ち着いてくるのは、スタートから2秒ぐらい後である事を考えると、速度もこのころにやっと落ち着くのではないか! それまではオーバーシュートの状態ではないだろうか。 勢い余って速度を出し過ぎているのでは?

 

 次に、立上がり部分については、スタート時の距離データに注目して、停止時と走出し時の傾きの交点を立上がり時間とすることにする。 走出し時の傾きは、せいぜい0.5〜0.7秒までの範囲に限定し、停止からの移行部分は外して考えることにする。

 

 まとめてみると

  1. 距離データはバラツキが大きいので、自身と前後のデータの3個のデータの平均を取る。
  2. 3点平均の距離データの差分を取って推定速度としてグラフに表示する。
  3. スタート以降の推定速度データを6次の多項式で近似して、その曲線を表示して速度特性とする。
  4. 立上がり時間は、走り出した距離データの勾配と、停止位置との交点までの時間とする。 右のグラフを参照。

 取りあえずこの様に決めて、速度特性とした曲線のパターンに注目して、いろいろな車両を測定してみることにする。