HOME >> 鉄道模型実験室 > 赤外線通信の確認

鉄道模型実験室  赤外線通信の確認

■ はじめに

 移動式測定車の工作が完了したので、そのユニットを使用して赤外線通信を確認する。 

  .

 

■ 発振回路の確認

 回路が完成したので、赤外線通信用の発振回路を確認する。 タイマIC 555 の出力端の信号をArduino のデジタル5番入力に入れて、周波数カウンタ・ライブラリのFreq Counterでカウントしようとした。

 しかし、シリアルモニタの画面はゼロを示し、発振していないようであった。 回路をチェックするも、間違いはなさそうであり、抵抗値をいろいろ変化させてもゼロのままであった。 そこで測定場所を変えて見た。 発振しているなら、電圧の出ている場所ならどこでも同じ周波数であるはずだと考えたからである。 すると、赤外線LEDのプラス側では反応し、数値を表示する。 マイナス側ではその数値は半減する・・・・・・・・・・。

 この回路の電源は単4を2本使っているものの、電圧を測ってみると 2.7 程度であった。 回路のグランドに相当するマイナス側はArduino のGND の接続しているのでどうやら、 デジタルピン入力への電圧が足らないものと推察した。 取りあえず赤外線LEDのプラス側から入力させ、半固定抵抗を変化させたが、発振周波数は 20kHzどまりであった。

 そこで、サーベイ時のように、第1の抵抗を 100Ωアップさせるべく、抵抗を1個回路に追加挿入した。 これによって、38kHzは何とか出せたので、次のステップに進むことにした。

 試しに電源電圧を安定化電源を使って変化させてみた。 すると、5ボルト電源では50kHz以上で発振する。 電圧を少しずつ下げていくと、3.5ボルト辺りから周波数が落ちてくる。 タイマIC 555 の解説によると、この発振回路は電源電圧には関係しないと書いてあるし、タイマIC 555 は1.5Vの動作電源電圧を保証するとも書いてある。 すると回路の工作技術が劣っていると言うことだろうか? 要するに作ってみなきゃ判らないと言うことなり!

 抵抗値を大きくすると発振周波数は下がるはずなのに、逆に上げる事が出来た。 第1抵抗と第2抵抗の関係で発振パルスのデューティ比が変化しているが、発振可能領域も存在するようである。 第1抵抗を低くして周波数を上げようとすると、なぜか限界があるようである。 この辺の関係を調査すればおもしろそうであるが、実用性が無いようなので足を踏み入れないようにする。

 参考とさせていただいたサイトをもう一度読み直してみると、デューティー比を50%に近づけるにはRa<<Rbにせよ、周波数の微調整はRbの一部を可変抵抗にせよ、Raを小さくし過ぎるとダメ、などのアドバイスがあり、今となっては納得してしまう内容です。 良い経験となりました。 Ra<<Rbは逆になっているし、半固定抵抗はRb側だけで良かったのだと反省している。 また、コンデンサの容量が大きすぎた様である。 この半分以下にすると良かったのか知れない。 さらに、抵抗値をもうひと桁上げると消費電流が少なくて済むのではではないか。 電池が長持ちする!

 

  .

■ 赤外線通信の確認

 次に、測定ユニットを使い、実際の赤外線通信を確認することにした。 まず、テスト用モータとして、ストック用として置いてあったKATOの電気機関車用の動力装置を使用する。 その分解写真を右に示す。

 このモータの両側に付いているフライホイールの外周に、白ペイントを塗って、光センサの反射部とし、反射式回転計に反応するように細工する。

  .

 今回は、一方のフライホールに1回転あたり、1ヶ所の白ペイントを付けるが、他方のフライホイールには1回転あたり、2ヶ所の白ペイントを塗った。 これは、1回転当たりに、2回のパルスが出るようにしたものである。 下の写真は、両方の軸の正面から見た状態である。

 このモータをフレームに組み込んだ状態が下の写真である。 丁度、窓の部分からフライホイールのペイントマークを覗く事がが出来る。

 この動力部を使って、回転計測の確認を実施しようとするのであるが、白ペイントを2ヶ所塗った側に、今回制作したセンサーを乗せて回転を計測する。 その状態を下左の写真に示す。 当初は動力部のフレームとセンサを密着させたが、近すぎて応答しなかった。 そこで、5mm のスペーサをかませて持ち上げると応答してくれた。 センサーは測定時に取り付けるものなので、セロテープで固定するだけで充分である。

 もう一方のフライホイール部には、以前から使用していた回転センサをセットした。 「モータの速度特性の測定」で紹介したもので、工作室売店発売の反射式センサーを使用したものである。 このセンサを下左の写真に示すようにセットし、読み取られたデータは下右の写真に示すようにデジタル表示される。 表示単位は rpm である。

 実験装置の全体は上の写真のように、安定化電源でモータを回し、その両端のフライホイールから反射式センサで回転するを読み取る。 一方のセンサからのデータは工作室売店製の回路で処理されてデジタル表示される。 他方のセンサから読み取ったデータは、赤外線通信によってArduino にインプットされ、その周波数を測定する。

 狙いは、この二つのデータを比較して、我が処理回路の作動状態の良否を判定しようとするものである。 デジタル表示とパソコンの画面を下に示す。

 


 センサ部分と測定ユニット、および、約30cm 程離した場所に設置した赤外線受光部を右の写真に示す。

 パルスのカウントは、1000msの指定でカウントする設定である。

 電源の電圧を変化させて、モータの回転数を変え、この時の回転計の読みと、シリアルモニタの読みをEXCEL に打ち込み、その回転数計測値を比較した。

 その時の表を左に示す。

 回転計の表示は1分間当たりの回転数(rpm)で表示されるので、1秒ではその1/60であり、1回転当たり2回パルスを発するとするとその2倍のパルスを発しているはずである。 左のグラフのC欄の値。

 実施に計測されたパルス数(B)と比較したのがB-C欄である。 平均的には数パルス程度の誤差におさまっている。

 説明書によると、この回転計は、0.5 sec 間のパルスを計測してrpm に換算表示しているとのことであるので、パルスをカウントするタイミングによって、数パルスの誤差が発生して当然であるので、この程度の誤差が生じても不思議ではない。

 即ち、我がセンサーシステムは正確にパルスを拾っていると言えよう。

********************

受信モジュールの位置を遠くにしても、反応しており、横や裏側にすると反応は止まる。そして鏡を置くと反応するが、何故か周波数は増えてしまう。

 また、そばでリモコンを使うと、バッチリと反応する。 もともとはリモコンに使える受信モジュールなのだからこれは当然か。 

 

■ 外付けパルスカウンタの検討

 先の実験より、Arduino のカウンタを利用すると、他のタスクを同時には実行出来ない事が分かっている。 そこで、パルスカウントをArduino の外部でカウントすることを検討した。

 即ち、赤外線通信で送られて来たパルスを、Arduino からの指令でカウントを開始し、指定の回数に達すると、その信号をArduino に返す。 この間のタイムスタンプを Arduino が測定し、回転数に換算することを検討した。

 この方法では、Arduino は、タイムスタンプを計測するだけなので、他のタスクと容易に並行して処理出来る。  パルスのカウントは、「動力車のモータ端子電圧と回転数の測定方法を模索」で検討したように、速度測定のためのゲートを通過したゲートIN のタイミングに合わせて、カウントを開始し、既定の回数をカウントすれば良い。 そしてカウント完了時点でArduinoに返信すれば、Arduino側でカウント開始タイミングと返信されたタイミングとの時間差を計測すれば、モータの回転数を計算出来る事になる。

  .

 ゲートを通過する間のパルス数は、およそ80〜120で、動力車のギヤ比と動輪直径の値で決まって来る。 モータの1回転当たり2回パルスを発生するように細工すると、およそ160〜240回のパルスをカウントする事になる。 処理のタイミングを考えると、ゲートOUTの前にカウント終了するようにするのでベターであるが、なるべくたくさんのパルスをカウントする方が誤差が少なくなるので、128回か、256回が良さそうである。 白マークを増やす手もあるので、512回も可能性がある。

 これらは、モデルに応じて対応するようにすればよいので、512回、即ち10bit 以上までカウント出来るカウンタを使う必要がある。 手軽に利用出来るものとして、10bit以上のカウンタIC を探し、TEXAS INS.製のCD74HC4020 DIP-16P の14ステージ・バイナリカウンタを選択した。  今回の実験には、512回目のパルスで10bit目がON になるQ10のピンからの信号を出力として取りだすことにした。

 このテスト回路を右に示す。 カウント開始はタクトスイッチを押すことによってRESET 信号を入れ、スイッチが押されている間はカウントを継続する。 この時グリーンのLEDも点灯するようにした。 指定の回数になるとArduino に信号を送ると共に、完了の合図として黄色のLEDを点灯させる。

  .

 ブレッドボード上で回路を組んだ状態を上左に示す。 そして、Arduino との接続状態を上右に示す。 また、Arduino の処理プログラムを下に示そう。 

 スタートボタンが押されるのを待ち、押されたらカウントを開始するので、そのタイムスタンプを記録する。 そしてQ10からのカウント完了信号を受け取ったら、タイムスタンプを記録し、この間の経過時間を計算しシリアル通信でパソコンに送信する。

******* Pulse_Counter_Soto_1 ***********

#define STR_PIN 6
#define STOP_PIN 7
void setup()
{
  pinMode(STOP_PIN,INPUT);
  pinMode(STR_PIN,INPUT);
  Serial.begin(9600);
}
void loop()
{
  int STR;
  int STOP;
  unsigned long t1;
  unsigned long t2;
  unsigned long tt;
  STR = digitalRead(STR_PIN) ;
  STOP = digitalRead(STOP_PIN) ;
  while (STR == HIGH) {
    STR = digitalRead(STR_PIN) ;
  }
  t1 = millis();
  while (STOP == LOW) {
    STOP = digitalRead(STOP_PIN);
  }
  t2 = millis();
  tt = t2 - t1;
  String buf = String(tt) + ",E";
  Serial.println(buf);
  delay(2000);
} 

 実験方法は、前記の実験と同様である。モータの回転数を設定し、測定ユニットから赤外線パルスを送信している状態にして置く。 そして、タクトスイッチを押すと、グリーンのLEDが点灯し、暫くすると黄色のLED が点灯するとカウント完了である。

  右の写真はボタンを押し、緑色と黄色のLEDが点灯している状態である。

  .

  .

 この処理結果をシリアルモニタで見ていると、左の様に示される。

 そして、回転計に示された表示と、このモニタ値をEXCELに記入して表にして右に示す。

 “演算回転数”は、計測された時間をもとに、回転数を rpm として計算したものである。

 その測定誤差は、平均で1.0%であり、低速側では誤差が大きくなっているが、原理的には止むを得ないとおもっている。 さらに我が実験では、誤差が平均で1.0%であれば充分な精度を保っていると判断する。

 

■ まとめ

 今回の実験により、移動する動力車のモータ回転をパルスとして検知し、そこから赤外線通信によって固定局にパルスを送信することにより、動力車のモータ回転数を計測する方法が確認出来た。

 当初、目標としていた計測方法に目途が付いたので、今後はこれらを集約して、実際の測定手段として確立するようにまとめていきたい。