Raspberry PIインターフェイス


 NATOC Nゲージ自動列車操作システムを(ラズベリーパイ)で動かしてみました。
 Raspberry PIは、イギリスのラズベリーパイ財団 (Raspberry Pi Foundation) によって開発されたARMプロセッサを搭載した名刺サイズのボードコンピュータです。
 今回はRaspberry PI専用カメラとタッチパネル付きのLCDモニターを付けてディスプレィ、キーボード、マウスなしで操作できるようにしました。
 なおはシングルコアのものでも動作しますがNATOCは画像解析を行っているので高速処理のできるRaspberry PI2 をお勧めします。

 以下は今回購入したものです。
  Raspberry PI 2 Model B
  サインスマート(SainSmart) 3.2インチ lcd ディスプレイ モニター タッチパネル付き Raspberry Pi用
  Raspberry Pi Video Module Raspberry Pi Camera Board 775-7731
  サインスマート(SainSmart) 8チャンネル 5V リレーモジュール for Arduino DSP AVR PIC ARM


・カメラの設置

 NATOCで車両の位置検出をするためビディオカメラを設置とます。
 Raspberry PIにはボードに直接接続できる専用カメラがあります。
 カメラにはRaspberry PIに接続するケーブルが付属しますが15cm位の長さなのでカメラと本体を離すため1mのものに交換しました。
 またカメラを三脚に固定するために専用のカメラマウントを購入しましたがただのアクリル版で取り付けにも苦労したので最初から自作した方がよかったかも知れません。



・LCDモニターの接続

 Raspberry PIは通常表示用にHDMIディスプレィ、操作用にUSBでキーボードとマウスを接続します。
 しかしそれではWindowsのNATOCとあまり変わらないので表示と操作用にタッチパネル付きLCDモニタを接続しました。

 後から気が付いたのですがリレーモジュールに電源を供給するためRaspberry PIのGPIOの2ピンまたは4ピンと接続する必要があります。
 このタイプはRaspberry PIに接続されるピンが隠れてしまうため下の写真のような加工が必要となります。
 Raspberry PIと接続されGPIOのピンも外部に接続できるような拡張GPIOピンが取り付けられるタイプの方が良いかも知れません。



 LCDモニターに表示したりタッチパネルで操作するにはそれぞれRaspberry PIの設定をする必要があります。
 LCDモニターの設定は簡単にできたのですがタッチパネルの設定がうまくいかず結局、メーカーが出しているRaspberry PI 2用のイメージファイルをそのまま使いました。

 そのイメージファイルでNATOC専用のSDカードを作ってそれを使っています。

・リレーモジュールの接続

 Raspberry PIでNゲージを制御するためにリレーモジュールを接続します。
 車両の制御(前進/後進/停止)用にリレーが2個必要です。
 またひとつのポイント切替えに同じくリレーが2個必要です。

 Raspberry PI版のNATOCではポイントを3台サーボトしているので今回は8チャンネルのリレーモジュールを使っています。
 ポイントを1台しか使わないレイアウトでは4チャンネルのリレーモジュールで構いません。



 各リレーの出力端子は左からNC(リレーオフ時接続),COM(共通),NO(リレーオン時接続)です。
 一番左のリレーのNCには車両用のDC電源の−を接続します。  NOには車両用のDC電源の+を接続します。  COMにはレイアウトの線路に接続しているDCフィーダーの片方の線を接続します。
 同様に二番目のリレーのNCには分岐した車両用のDC電源の−、NOには車両用のDC電源の+を接続します。  COMにはDCフィーダーのもう片方の線を接続します。



 ポイントのリレーも車両用と同じでNCにはTCS電源(12V)−、NOにはTCS電源(12V)+、COMにはポイントの片方の線を接続します。
 同様にもうひとつのリレーのNCには分岐したTCS電源の−、NOにはTCS電源の+を接続します。  COMにはポイントのもう片方の線を接続します。
 ポイントを複数接続する場合はこの繰り返しでTCS電源は分岐して接続します。



 Raspberry PIとの接続は中央下のピンヘッダーで行います。
 リレーモジュールGND(左端)にはGPIOのいずれかのGND、VCC 5V(右端)にはGPIOの5Vを接続します。
 入力ピンには左からIN1にGPIO5、IN2にGPIO6、IN3にGPIO12、IN4にGPIO13、IN5にGPIO16、IN6にGPIO19、IN7にGPIO20、IN8にGPIO21を接続します。
 接続するにはメスメスのブレッドボード用ジャンパーワイヤが便利です。

 LCDモニターと接続されていないGPIOピンを使用しています。
 LCDモニターを使用しない場合や拡張GPIOでLCDモニターに接続しているピンも使える場合はGPIOの設定ファイルを書き換える事で変更できます。



・NATOCのインストール

 Raspberry PIのNATOCプログラムは/home/piの下にnatocというフォルダーを作成してそこにインストールします。
 次のコマンドを実行してください。

 $ cd ~
 $ mkdir natoc
 $ cd natoc
 $ wget http://www.mcc3.mbsrv.net/natoc/natoc.gz
 $ tar xvzf natoc.gz


・NATOCの実行

 NATOCはウィンドウアプリケーションでX desktopを立ち上げた環境で実行します。
 またNATOCはGPIOを制御するため必ずsudoで実行してください。

 X DesktopのアクセサリのLXTerminalを起動して次のコマンドで実行します。

 $ sudo /home/pi/natoc/natoc

 また/home/pi/natoc/bin のnatoc.shをディスクトップにシンボリック・リンクを作成して直接実行することもできます。
 Raspberry PIをNATOC専用機とする場合はRaspberry PIを起動するとNATOCを自動的に実行するようにできます。
 設定方法はこちらを参照してくださいRaspberry PIをNATOC専用機とする場合はRaspberry PIを起動するとNATOCを自動的に実行するようにできます。



 起動すると左のコントローラー画面が表示されます。
 マウス操作やスクリーンのタッチ操作で車両やポイントを操作できます。
 ライブ画像スイッチを操作すると右のカメラ画像画面に切り替わります。
 この画面はカメラ画像の他に車両の現在の位置を示す赤十字線、周回数を示すloop=、自動運転プログラムで使用する目的地表示円、クローズボタンが表示されます。

 起動時の引数には次のようなものがあります。

 camera=カメラタイプ   カメラタイプ:0=カメラなし,1=Raspberray PIカメラ,2=USBカメラ  ディフォルトは1
 wait=待機秒数     自動起動する場合にX Window環境が整うまでウィンドウ処理を待たせます。  ディフォルトは0秒
 mode=起動モード    起動モード:1=コントローラー画像,2=カメラ画像  ディフォルトは1
 monotor=1        0=大型ディスプレィなし,1=大型ディスプレィあり  1を指定するとコントローラー画像とカメラ画像が同時に表示されます。ディフォルトは0
 debug=1         0=デバッグ表示なし,1=デバッグ表示あり  1を実行中のプログラムデータなどをコンソール画面に表示されます。ディフォルトは0

・NATOCの操作

 コントローラー画面のボタンをマウスでクリックしたりタッチパネルで操作する事ができます。

  速度コントローラー  車両の運転/停止を切替えます。  速度の調整はできません。

  方向切替スイッチ  車両の進行方向を切替えます。  停止状態で押すと車両は動き出します。

  ポイント切替スイッチ  ポイント1〜3を切替えます。

  自動運転  自動運転プログラムを実行します。

  ライブ映像  カメラ映像画面に切替えます。  カメラが接続されていない場合やコントローラーとカメラ画像の同時表示の時は機能しません。

  クローズボタン(画面右上) 下記のダイアログが表示されます。



 はいを答えるとNATOCを終了してRaspberry PIがシャットダウンされます。
 いいえを答えるとNATOCを終了します。
 ダイアログのクローズボタンを押すとダイアログを閉じてNATOCが継続されます。

 カメラ画像画面をマウスでクリックしたりタッチパネルで操作する事ができます。

  目的地表示円  自動運転プログラムで使用する目的地でマウスやタッチパネルをドラッグする事で位置を変更することができます。
 緑、青、黄、白の順番で目的地1〜4に対応します。

  クローズボタン(画面右上) コントローラー画面に切替えます。  コントローラーとカメラ画像の同時表示の時はこのボタンは表示されません。

・自動起動の設定

 Raspberry PIを起動するとNATOCを自動的に実行させる事ができます。
 次のコマンドを実行してください。

 $ cd ~
 $ cd natoc/bin
 $ cp /etc/xdg/lxsession/LXDE-pi/autostart /autostart.org
 $ ./natoc_autostart.sh

 この設定でX desktop を動かした時に自動的にNATOCが起動されます。

 次にRaspberry PIを起動したらX desktop が起動されるように設定します。
 次のコマンドを実行してください。

 $ sudo raspi-config
 3. Enable Boot to Desktop/Scratchを選択
 Desktop Log in as user 'pi' at the graphical desktopを選択

 Raspberry PIを起動するとNATOCを自動的に実行させる事ができます。
 NATOCの終了ボタンを押すと下記のダイアログが表示されます。



 これに対して「はい」ボタンを押すとRaspberry PIがシャットダウンされます。

 設定した自動起動を止めたい時は次の手順で元に戻します。
 Raspberry PIにはキーボードとマウスを接続しておきます。
 また必要に応じてディスプレィモニターも接続しておいてください。
 終了ボタンのダイアログに対して「いいえ」ボタンを押してNATOCを終了します。
 X desktopの黒い画面が表示されるのでマウスのクリックでプルダウンメニュを表示してターミナルエミュレータを実行します。
 次のコマンドでNATOCが自動起動しないようにします。

 $ cd ~
 $ cd natoc/bin
 $ ./org_autostart.sh

 またraspi-configで3. Enable Boot to Desktop/Scratchを選択して  Console Text console, requiring loginを選択するとRaspberry PIを起動した時X desktop が起動されないようになります。



・自動運転プログラム

 自動運転プログラムは
Windows版NATOCのものがそのまま使えます。
 Windows版NATOCにはシミュレーション機能があるので作成したプログラムのシミュレーション機能もできます。

 Raspberry PI版NATOCではWindows版NATOCに対して次の制限があります。

 次のコマンドは無視されます。

 ・オプション出力の設定
 ・列車速度の変更
 ・遮断機制御コマンド
 ・転車台制御コマンド

 列車位置定義のラジオボタンは目的地表示円の順番に対応します。  センサーはサポートされていません。
 ユーザ定義に対応する目的地表示円(白)はプログラムで指定した座標に変更されます。  ここで指定する座標はカメラ画像のピクセルではなくNATOCレイアウト(640×280=カメラの2倍)です。
 列車運転制御定義の距離もNATOCレイアウトのピクセル数です。

 ポイント制御コマンドの切替制御距離は無視されポイント切替は即時に実行されます。

 サウンド制御コマンドの停止でのサウンド番号は無視され現在再生中のサウンドが停止されます。

 Windows版NATOCで作成したプログラムは次の方法でRaspberry PIでの実行ができます。
  USBメモリーを用意してnatocというフォルダーとその下にprogramというフォルダーを作成します。
  Windows版NATOCでプログラムをUSBメモリーのnatoc\programフォルダーのprogram.ntcというファイルに書込みます。
  Raspberry PI NATOCの自動運転開始前にUSBメモリーをRaspberry PIのUSBに装着します。
  下記のダイアログが表示されますので「はい」を答えます。



 この操作でRaspberry PIの自動運転プログラムは書き換えられるので次からはUSBがなくても実行ができます。
 なお「いいえ」と答えるとRaspberry PIの自動運転プログラムは書き換えらずにUSBのプログラムが実行されます。

・サウンドの設定

 自動運転プログラムで使われるサウンドはNATOCをインストールするといくつか予め用意されたものが使えるようになります。
 自動運転プログラムでは番号で指定します。
  1.ひかりチャイム(01.wav)
  2.ふるさと(02.wav)
  3.CR70警笛(03.wav)
  4.発車チャイム(04.wav)
  5.少年時代(05.wav)
  6.踏切警報(06.wav)
  7.発車ブザー(07.wav)
  8.蒸気機関車警笛(08.wav)
  9.世界の車窓から(09.wav)

 追加したり置き換えたりする場合は/home/pi/natoc/soundに二桁の番号(拡張子.wav)のファイル名にしてください。

 Raspberry PIのサウンド出力はHDMIディスプレィが接続されている場合はそこからサウンドが出力されます。
 またオーディオジャックにイヤフォーンやスピーカーを接続するとそこからサウンドが出力されます。
 今回は
USBスピーカーを直接Raspberry PIのUSBに接続してサウンドを出力しました。
 このタイプのスピーカーは電源が要らなくて便利ですが少し大きくてステレオなので場所を取ってしまいます。
 音が小さいですが小型スピーカーをオーディオジャックに接続した方がいいかも知れません。

 なおUSBスピーカを接続する場合はRaspberry PIを設定する必要があります。

 /etc/modprobe.d/alsa-base.confのsnd-usb-audioのindexを-2から0に変更



・設定ファイルの変更

 次の設定ファイルをTextEditorで変更する事ができます。

 natoc/data/gpio.txt
  Raspberry PIのGPIOに関する設定を行います。

  point_time=ポイントの切替え時に電流を流す時間(ミリ秒)
 ポイントが切替わりにくい時はこの時間を長くしてください。
 あまり長くするとソレノイドが焼き切れる事があるので十分注意してください。

  logic=リレーモジュールが負論理(GPIOがLOW)で動く場合は0、正論理(GPIOがHI)の場合は1を指定します。
 今回使用したリレーモジュールはGPIOがLOWでリレーが閉じるタイプなので0が指定してあります。
 正論理の場合は1を指定してください。

  gpio_pin*=GPIOのピン番号  *はリレーの番号に対応する数字(1〜8)  リレーモジュールを違うGPIOピンに接続する場合は変更してください。

 natoc/data/position.txt
  目的地表示円に関する設定を行います。
  *は目的地表示円の番号です。(1〜4)

  size*=目的地表示円の半径(カメラ画像のピクセル)  この大きさを変えると自動運転プログラムでの通過判定の範囲が変更されます。

  col*=目的地表示円の色  RGB(24ビット)の値を10進数で指定します。(青は255)

  pos*=目的地表示円の中心X座標,Y座標  目的地表示円をドラッグ操作で動かした場合はNATOC終了時に書き換えられます。



 NATOC raspberry PIの実行動画です。
 上記のリンクをクリックするとYouTubeに接続します。

目次に戻る