本レビューは開発の進捗に応じて更新していきます。(最終更新2014/08/31)
はじめに
以前にもGalileoでレビューさせていただきニキシー管時計を作らせていただきました。
またしてもGalileoレビューの機会をいただけましたので、またまた色々工作していきたいと思います。
さて、今回のテーマは・・・
GalileoでGO!!
うん、いまいちコレだけでは良くわかりませんね。
簡単にいうと、Galileoで鉄道模型を動かしちゃおうってことです。
鉄道模型といえば、私の独断ですがやはりNゲージ!!
ということで、今回はこのNゲージをGalileoで動かします。
もちろんただ、動かすだけではなく、自動運転機能もつけたいですね。
それでは早速開発をしていきましょう。
まずは開発準備
今回使用するGalileoも前回使用したgalileoと同じスペックです。
見た目も当然ながら同じですね。
ということで早速色々と開発に必要な準備にとりかかります。
まずは開発環境のインストールです。
前回の開発でインストールはしていたのですが、バージョンが0.7.5から1.0.0にあがっています。
なので、Windows版をインテルのサイトからダウンロードします。
ダウンロードし、解凍できたら、早速PCと接続します。
USBとシリアル(イヤホンジャック)接続をします。
シリアルケーブルは
この時作成したものを利用してます。
無事、起動してますね。
また、USBはやはりGalileo本体の電源をいれてから接続します。
今回のGalileoは私の環境ではCOM15になってましたので、IDE側もCOM15に設定しておきます。
続いて当然のごとくFirmWareの更新です。
FirmWareの更新はメニューのヘルプから実施します。
シリアルコンソール上で何かズラズラと流れていきます。
更新には数分かかるので、完了するまで電源を切ったり、リセットスイッチを押さないようにします。
さて、完了すれば次は電源を切るたびに作成したスケッチ(プログラム)が
削除されないように、SDカードから起動できるようにします。
これはSDカードにLinuxイメージを転送するだけでいいのですが、こちらも以前作成したときからバージョンがあがって、LINUX_IMAGE_FOR_SD_Intel_Galileo_v1.0.0.7zになってます。
これもインテルのサイトからダウンロードしてきて、FAT32でフォーマットしたmicroSDに書き込んでおきます。
これで、開発準備は完了です。
以前の開発の時から多少のバージョンアップはありましたが、特に大きな変更もなく、順調に準備できました。
さぁ、それではこれからNゲージの列車模型が動く仕組みを調べてそれをGalileoで制御するよう進めていきたいと思います。
Nゲージが走る仕組みと開発の方向性
さて、今回使うKATO製品に限らず、Nゲージはレールに直流電流を流し、車両の車輪からモーターへ電気を流すことで鉄道模型が走るという仕組みになってます。
では、どれほどの電圧がどのように流れているか測定してみましょう。
パワーパックのコントローラー?を動かすとレールに接続したデジタルマルチメーターの電圧表示があがっていくのがわかります。
最高で15Vの直流電圧が流れているようです。
ということはこの電流をGalileoで制御できればNゲージを走らせることができそうです。
しかし、galileoでアナログ0~15Vのアナログ出力を直接やるのはちょっと難しそうです。
ではどうしたらいいのでしょう?
もちろんモータードライバーというICを外付けして制御することも可能ですが、今回はPWMという機能を利用します。
PWM(pulse width modulation)とはパルス幅変調と呼ばれるもので、例として12Vをずっと与え続けると12Vですが、on,offを繰り返すことで、平均電圧を取り出すものです。
というのも、特にモーターは12Vを与えると12Vの速度で回り続けますが、onとoffを高速で1:1で繰り返せば6Vくらいを与えたときと同じくらいの速度で回ります。
これを利用すれば、デジタル出力のgalileoでもNゲージのモーターを制御することができそうです。
それではpwmを行うスケッチを書いてみましょう。
PWMでNゲージを制御する。
さて、PWMで電圧を制御すればいいのはわかりました。
ではまず早速スケッチを書いてみます。
analogWrite(pin,t);
たったこれだけです。
arduino互換のおかげか簡単ですね。
tのところがon,offの比率で0~255の値が入ります。
255が100%の状態です。
しかし、Galileo単体でのPWMは5Vです。
Nゲージには12V~15V(メーカーによる)電圧が印加されます。
そこでMOS-FETを利用して12もしくは15Vの電圧をPWMで制御します。
12V,15Vの電源はこいつで準備します。
そして、MOS-FETとGalileoのPWM信号で12、もしくは15VのPWM信号に変換してます。
ショート等の保安回路も、動作確認のLEDも何もないのですが、試験回路としてはこれくらいの単純な回路になります。
これでGalileoからの信号と同じ12VのPWM信号がレールに送られます。
回路図を元に試験回路を組み立てます。
このサイズのブレッドボードしか持ってないのですが、こんな回路だと無駄に大きく見えますね。
ということでこの試験回路で動作試験をしてみました。
約1秒ごとに4%(25段階)の出力UPを行っています。
走り出しにプーンと機関車のくせして電車のような音がします。
これはPWMで電圧が印加されているのに、モーターが回るほどの電圧(on,off比)に達していないことによるモーターの鳴きです。
電車だったらこれはこれで面白いですね。
これでPWMでNゲージを動かせることがわかりました。
次は試験的な自動運転ではなく、実際にコントローラーをつないで自分で動かせるようにしましょう。
まずは先ほどの試験回路をユニバーサル基板に取り付け、12V(または15V)の電源基板も重ねてとりつけておきます。
コントローラーには10Kの可変抵抗ボリューム(Bカーブ)を使います。
ボリュームによる電圧変化を256段階で取り込み、前半128をブレーキ、後半128を加速(PWMパルス)へとして制御します。
そのため、付属のパワーパックや、先の自動運転のような急停車ではなく、ブレーキ段階によって停車までの減速が異なっています。
動画のように可変抵抗を右に回すと発車(加速)。
左に回すと停車(減速)します。
かなりいい感じに制御できてきたと思います。
とりあえず、これで基本制御部分は完成ですね。
操作録画と再生機能
基本的なコントロールができるようになったので、次は自分の操作を記録、再生できる機能を追加します。
電源、PWM信号の基板に記録中を知らせるLEDを取り付けておきます。
つぎに、操作状態をGalileoのSDカードに記録するようにスケッチを書きます。
SDカードへの記録はSD.hを利用します。
また、記録状態変更にはボタン入力(アナログピン1番の電圧変動)で切り替えます。
LED点灯中の動作を記録し、LED消灯後記録ファイルから該当動作を再現しています。
記録はtextファイルでアナログ入力の値を記録しているだけですので、これをPC等で作成すれば、記録するまでもなく自動運転させることもできそうですね。
さらに、機関車(電車)の最高速度を表示する速度計をつけようと思ったのですが・・・
すっかり忘れてましたが、GalileoはIO速度が遅いんだった・・・
ってことで、とりあえずはシリアルで表示させます。
analogin xxx -xxxはボリュームの入力値(前)とPWMの値(後)です。
今回使用しているNゲージはD51です。(デゴイチ)
記録ではD51の最高速度は85km/hくらいだそうなので、PWMで最大出力時に85になるように
計算し、出力しています。
これを7セグででも表示させたいのですが、そうなると前回の時と同じく、uart接続でPICから表示とかになるのかな?
まぁこのあたりの7セグ表示部分は余裕ができたら構築しましょう。
次はポイント切り替えといったオプション操作を追加していきます。
ポイント切り替えは島式ホーム用待避線電動ポイントセットを利用します。
まずは動作を確認するために電圧を計ります。
レバーを倒しているときは0Vですね。
レバーを上げた状態でも0Vです。
しかし、切り替えの途中、レバーの真ん中くらいですから一瞬ですが、レバーを上げてる途中で約15V,レバーを下げてる途中では約-15Vが発生します。
これはKATOのパワーパックからこのポイント切り替えスイッチに15Vが供給されてたことによるものと思われます。
ちなみにこのポイント切り替えセットの箱には12Vまでって書いてたんですけどね・・・
言い換えれば12Vでも動作するということでしょう。
さて、ということは、12V、もしくはー12Vを与えればポイントの切り替えができそうです。
ポイントの切り替えには2SK2232を利用します。
もっと安価なバイポーラトランジスタの1815あたりで作ったほうが経済的だったかな?
ということで切り替え用の回路をというか配線をしていざ接続。
ただ12Vを与えるだけですが、ずっと電圧をかけておくとポイント切り替えをしているコイルが熱を持つそうなので電圧を与えるのは0.2秒としました。
時間は単に直感で決めた値で、正常に動作したのでこれでいいかな?
きちんと動作しているようです。
ただ、試験回路なので操作性は正直あまりよくなく、切り替えに手間取ってしまいます。
これはしっかりケースにでも収容しないとだめですね。
まとめ
前回のGalileoでの開発の時はデジタル出力がメインだったので今回はアナログ入力、出力(PWM)をメインにということで、Nゲージの制御をさせてみました。
実際つかってみると簡単にアナログ制御もできて、開発としては非常に簡単でした。
また、(SDカードへの)ファイル入出力も簡単で、このあたりは他のPIC等マイコンとは一線を画していると思います。
これでデジタルIO入出力がもっとはやければというのだけは感じてしまいますね。
また、子供に長時間遊ばせていると熱暴走?でリブートしてしまったり固まったりということがありました。
小さいヒートシンクくらいは欲しかったですね。
ここまで性能がしっかりしているだけに、その部分が余計に目立ってしまいます。
Galileo2が出たとのことですし、今後もこういった組み込み系がリリースされるなら
そういった改善がされることを期待したいですね。
結論としていくつか注意するところはあるけれど、デジタル制御、アナログ制御どちらに対しても開発は非常にやりやすいという感じです。
Galileoが電子工作の敷居を低くしてくれるといいですね。
更新履歴
2014/7/19 初投稿
2014/8/16 Nゲージが走る仕組みと開発の方向性 追記
2014/8/18 PWMによる試験運転 追記
2014/8/25 操作記録、再生運転 追加
2014/8/31 ポイント切り替え、まとめ追記
ちばとどさん
2014/08/19
京急のVVVFの音の再現とかもできたりしそう!
eulerさん
2014/08/20
PWMでの制御だと事前情報でも仕入れてましたが、低速での安定した走行ができるようです。
KATO製品は15Vでも大丈夫みたいなので、15VでPWMにするとまた変わるかもしれませんね。
さすがにVVVFの音までは時間的にも厳しいのですが、そのあたりを突き詰めるのも面白いかももしれませんね。