プレステ3で鉄道模型
2011年11月20日
2011年12月1日改訂
前回はロボゼロのサーボで鉄道模型を直接コンピュータ制御してみましたが、今回もう一個サーボを使ってスピードを制御してみました。
前回サーボ制御のプログラムを書いていて気が付いたのですがコマンドのパラメータにサーボIDなるものがあります。
これを変えたら複数のサーボを制御できるのではないかと考えました。
まずは実験です。
サーボとシリアル変換ボードをストレートのジャンパー線でつないでいましたがこれを分岐させサーボが2個つなげるジャンパー線を作成しました。
実験ではロボゼロの旗上げゲームで使ったRS30xPacketUtilというソフトを使わせてもらいました。
このソフト、RS306MDのコマンドを入力するとパケットのデータを表示してくれます。
これでいちいちマニュアルを調べなくても送信するパケットデータが分かります。
本当に助かりました。
まずサーボIDが変更できるかの実験です。
ジャンパー線には変更するサーボを1個だけ接続しておきます。
Packet Makerのコマンドに「サーボIDを変更」というのがあります。
工場出荷時にはサーボIDが1になっていますがこれを今回追加したサーボのサーボIDを2に変更します。
Dataに変更するサーボIDの2を入力してにサーボにPacket Controllerで送信します。
これでこのサーボのサーボIDは2に変わったはずです。
試しにPacket ControllerのServoIDを2にしてTorque ONを押してその下のスライダーを動かして正常動作を確認します。
しかしこのままではサーボや変換ボードの接続を外したら元の1に戻るのでサーボのROMデータを書き換える必要があります。
Packet Makerのコマンドに「ROM書き込み」というのがあります。
ここで注意しなければいけないのはPacket MakerのIDに新しいサーボIDの2をセットしなければいけない事です。
Packet Controllerで送信してROMのデータを書き換えます。
一度USB接続を外してからもう一度このソフトを立ち上げ直してちゃんとサーボIDが2に書き換わっている事を確かめます。
次に2つのサーボを制御できるか実験です。
分岐したもう一方のジャンパー線にサーボIDを書き換えていないサーボを接続します。
Packet ControllerのServoIDを1と2に切り替えてそれぞれのサーボが正常に動作するかを確認します。
これでシリアル変換ボードと使用するCOMポートがそれぞれひとつで済む事が分かりました。
今回動かすのは前回に引き続き鉄道模型少年時代です。
24号に付属してきたコントローラーを改造します。
このコントローラーにレトロ調のレバーが付いていますがそれを外してそこにボリュームのツマミを取り付けます。
ボリュームのツマミはいろいろなものが売られていますが次のポイントで選びました。
・シャフト孔径が6.1mmφ
・サーボ軸にネジ止めしやすい構造
・加工がしやすい材質(フェノールまたはビニル)
・シャフト固定がネジ止め
・外形寸法があまり大きくない
今回購入したのはサトーパーツのK80756R1という製品です。
上記の条件に合うツマミは他にもたくさんあると思います。
コントローラーの改造を行います。
まずサーボモータとコントローラを固定するためのフレーム板を取り付けます。
今回は手持ちの1mm厚のエンビ板を使用しました。材質は何でも構いませんが加工しやすい物が良いでしょう。
ちなみこのエンビ板は折り曲げると割れるため熱して直角に曲げました。
上の図のようにフレーム板を加工します。
2mmの穴を右から8mm位の所に開けるのですがコントローラに取り付ける時に現物合わせで開けても構いません。
フレーム板は左から15mmの所で直角に折り曲げます。
折り曲げた短い方をサーボに当ててビス穴を開けます。
サーボの2本のネジは外しておきます。
この時サーボ軸がフレーム板の中央になるようにします。
またフレーム板に当たらないギリギリの位置にします。
両面テープで固定しておくとズレなくてやり易いと思います。
サーボの裏からピンバイスでフレーム板にビス穴をの位置に印を付けます。
ドリルの径があまり太いとサーボのネジ山をつぶす可能性があるのでなるべく細い(1mm以下)ドリルを使ってください。
2つのビス穴の位置に印を付けたところでフレーム板からサーボを外し2mmのドリルでビス穴を開けます。
サーボに付属していた2本のビスでサーボをフレーム板に取り付けます。
フレーム板とサーボのビス穴が合わない場合はフレーム板のビス穴を広げたり開け直してください。
サーボとツマミはネジ留めにしますがそのままでは空回りするので間に抵抗の大きいものを挟みます。
今回ゴム板をワッシャー状にしたものを作りましたが両面テープを挟み込んでも構わないと思います。
ツマミに2mmの穴を開けます。
この時重要なのはなるべく中心開ける事です。
中心からズレてしまうとサーボの回転に支障をきたします。
コンパス等で正確に中心位置を割り出してください。
今回は丁度ツマミと同じ大きさの歯車があったのでそれを当てて穴を開けました。
滑り止めを挟み込んでサボ軸にツマミをネジ止めします。
この時サーボはニュートラルの位置(サーボ軸の目印が上)にしておいてください。
またツマミの固定ネジはレンチが使いやすいように目印と反対側の位置に来るようにしてください。
六角レンチでツマミをコントローラのボリューム軸に固定します。
この時ボリュームの位置は丁度真ん中の角度にしておきます。
フレーム板を2mm位の木ネジでネジ留めします。フレーム板にはこの時に現物合わせで穴を開けても構いません。
コントローラ側には1.5mm程度の下穴を開けておけば作業がしやすくなります。
なおコントローラのビス穴は茶色のケースの上端と電池蓋の上端の中間位置にします。
これでコントローラの作業は終了です。
前回作った前進後進切り替えサーボのリード線をコントローラとレイアウトの間に接続します。
前回は音声で制御しましたが今回は何で制御させようかと考えました。
なるべく速度のコントロールをレイアウトに伝えやすいものを使ってみました。
ふと目に付いたのがプレイステーションのコントローラーです。
実は大分前プレイステーションのコントローラーをインターフェイスに使ったプログラムを作った事があります。
当時のプレイステーションのコントローラーのPC接続にはこのようなインターフェイスを必要としました。
しかし最新プレイステーション3はUSB接続です。
これはもしかとてそのまま接続できるのではと思いましたが、残念ながらドライバーが必要なようです。
今回YouTubeにSIXAXIS Driverというフリーソフトを使用しました。
このソフトの使い方ですが説明動画を掲載されている方がいらっしゃったのでこちらを参照にしてください。
ちなみに私の場合もWindows7でしたが互換性云々の設定は必要ありませんでした。
今回のプログラムは前回のものをバージョンアップしました。
今回新たに作ったのはプレイステーション3コントローラとの接続部分です。
前述のドライバーで標準のジョイステックとして扱えます。
ジョイステックはDirectXのSDKでプログラムから使うことができます。DirectXのSDKのJoystickというサンプルプログラムがほとんどそのまま使えます。
サーボIDを変えるのは前述のRS30xPacketUtilで行えますが折角なので本プログラムのオプション機能として作っておきました。
プログラムの本体のサーボIDの変更ボタンを押すと右のサーボID設定ダイアログが表示されます。
今回の速度制御用のサーボIDは2を使用しますので表示された画面のままOKボタンを押してください。
なおこの時接続しておくサーボは速度制御用のサーボだけですので注意してください。
このサーボを元の状態に戻す時はOKボタンの代わりに工場出荷時に戻すボタンを押してください。
この時注意しなければいけないのは現在のIDを2に変更しておかなければいけない点です。
既に2に変更されるサーボに対しては1のままだとサーボIDが違うので無視されてしまいます。
プレイステーション3コントローラを接続しなくても本体の画面だけでも操作できます。
今回速度制御用のスライダーを追加しましたのでそのスライダーのマウス操作で速度がコントロールできます。
プレイステーション3コントローラを接続するとコントローラで操作する事ができます。
右のジョイステックを前後に動かすと前進したり後進します。ジョイステックの角度によりスピードがコントロールされます。
またボタン操作で前進後進がコントロールできます。
○ボタンが前進で□ボタンが後進、×ボタンが停止です。
△ボタン操作はジョイステックの角度に関係なく最大速になります。
ジョイステックから手を離す最低速になってしまうので運行し続けたい時に使います。
音声認識機能はそのまま残してありますので「早く」とか「遅く」という音声で速度もコントロールできます。(連続して命令するとそれに応じて増減する)
また「終了」という命令でプログラムを終了させるようにしました。
音声認識についてはこちらを参照してください。
実際にプレイステーション3のコントローラを使ってNゲージ(鉄道模型少年時代)を動かした動画です。
元々コントローラのレーバーで速度をコントロールでき、それをジョイステックに置き換えただけなので機能的にはあまり画期的なものではありませんが、一台のUSB変換ボードで複数のサーボが制御できる事が分かったのは大きな成果だと思います。
今回作成したプログラムを下記のURLにアップしておきますので興味のある方はダウンロードして使ってみてください。
ncon.zip
認識語彙やサーボの角度のチューニング方法等は添付のReadMe.txtに書かれています。
ただしサーボモーターの改造が伴うのであくまでも自己責任という事でお願いします。
NATOC 2.80でサーボによる制御をサポートしました。NATOCを使うと列車の位置認識やプログラムでの自動運転ができます。
NATOC 2.80はこちらからダウンロードすることができます。
ついでに同じ方法でロボゼロのサーボを直接動かしてみました。プログラムは少し書き換えています。
もう少し簡単な改造方法を昭和の鉄道模型のコントローラーを改造しました。
市販のプラッチック消しゴム(厚さ14mm)をカッター等で20mm×20mmの大きさにカットします。
両面に両面テープ(強力)を貼っておきます。
コントローラーのハンドルを外しておきます。
ボリュームの位置は停止と最速の中間(鉄道模型の場合は切込みが右を向く)に回しておきます。
前述の方法でツマミを取り付けたサーボをボリュームの軸に差し込みます。
六角レンチでツマミを軸に固定してます。
この時サーボはニュートラルの位置にしておきます。
鉄道模型少年時代のコントローラーなどのサーボの位置が高い場合は厚さが20mmの消しゴムを使用するか消しゴムの方向を変えて設置します。
目次に戻る