Vol.658 21.Feb.2014

PICでトレインセンサ

P PICでトレインセンサ

by fjk

 鉄道模型(Nゲージ)でマイコンを使った列車の自動運転は挑戦してみたいことである。そこで、ネットで既に実施されていないか調べてみると、多くの報告があり、それらを整理すると、

  1. 列車の位置検出(磁石、光センサ、画像など)
  2. 走行コントロール(デジタルPWMが多い)
  3. 運行制御(パソコン利用)

のように分類できそうで、AとBは多くの方法が紹介されているが、@はセンサのサイズが大きく鉄道模型の情景にしっくりこないところが不満であった。しかし、最近になって超小型の反射型赤外線センサであるTPR-F105が安価で入手(秋月電子)できるようになり、TRP-F105を列車検知の地上子として用いる例が紹介されるようになってきた。  それではということで、PICとTRP-F105を使った列車検知センサを作ってみることにした。基本回路は図1の通りで、フォトセンサーの出力をPICのA/Dに入力することで、周辺回路の簡略化とノイズ対策を同時に行うことにした。PICは線路に埋め込むことを前提に、なるべく小さなものとしてSOICパッケージで入手が容易な8PINのPIC12F683(以下F683)を選択した。

 試作中のPICの動作状態を確認できるように、A/D入力値をI2C接続したLCDに表示することにしたが、F683にはハードウェアでI2C機能が無いので、ソフトウェアで実現することにした。F683を使ったI2Cによる液晶表示の実現にはPICファンさんの記事を参考にさせてもらった。

 開発にはMPLABとHiTechC、ライターにはPicKit2を使った。MPLAB_X、XC8、PicKit3も使えるが、慣れている組み合わせを利用した(これから始める方は後者を薦める)。PICマイコンの開発方法はPICファンさんなどを参照にされたい。なお、HigTechCのV9.81以降では、そのままコンパイルすると”シンボルの未定義エラー”が出るので、MPLABのProject/Build_OptionのCompilerタブのDefinemacrosに”_LEGACY_HEADERS”を登録しておく必要がある(詳細はここを参照)。また、HiTechCのLite版では "(1273) Omniscient Code Generation not available in Lite mode (warning)”のワーニングが必ず出るが、”最適化されないエラー”なので、無料のLite版では無視するしかない。

 写真1は線路(TOMIX直線70mm)に埋め込んだF105(φ0.8mmのドリルで加工)。写真2は動力ユニットの台車に取り付けた反射シール(白がよい、銀はだめ)。写真3はブレッドボードで作成した試作回路。写真4は列車の位置とLCD表示値(1024で5V)である。写真からわかるように列車がいないとほぼ0V(00001)だが、列車が来ると3.6V(00894)を検知している。懐中電灯でセンサーを照らしてみたが最大で2.6V(00532)程度(デジタル入力ではHとなる)を示した。

 さらに、発光用LEDのON-OFFに合わせて信号レベルを比較することでノイズ対策ができそう(時間があれば後日検討)だが、閾値を3.2V程度にすればこのままでも使えそうである。今後、検知信号はRS232CやI2C(スレーブ)またはデジタル出力で運行制御装置に送る予定で、シリアル通信を使う場合は、使用環境に合わせて、閾値レベルを制御装置から自由に変更できるので便利である。プログラムはこちらのZipファイルを参照。

図1.車両検知とI2C接続液晶表示回路
写真1.線路に埋め込んだF105(表) 写真2.線路に埋め込んだF105(裏)
写真3.動力ユニットにつけたシール 写真4.試作用ブレッドボード
写真5.列車がセンサ上にいないとき 写真6.列車がセンサ上にいるとき

PICでトレインセンサ