読者です 読者をやめる 読者になる 読者になる

Intel Edisonを使った模型コントローラの作成

重機模型コントローラ Edison

f:id:inrabbit:20160429190833j:plain

はじめに

 切手サイズ(より少し大きい)Linuxマシンである、IntelのEdisonを用いて、模型のコントローラを作成しました。模型自体は共同制作者が作成しますので、私は電装系担当です。必要な電装系のスペックは次の通りです。

  • PWM制御のDCモーター(6V, MAX 1A)×3ch
  • ADコンバータ×2ch
  • USBカメラによる動画撮影×1ch
  • 単一電源(12V)

要するにネットワークカメラのようなものです。無線LAN経由でスマホetcから制御できたらいいと思ったので、Edisonを使って作ることにしました。Edisonを使ってネットワークカメラを作成した例では、以下のnewralassemblyさんの記事を参考にしました。

neuralassemblyのメモ: Intel EdisonでWebカメラを有効にしmjpg-streamerで映像を配信してみた

 ただ、今回作りたいものは、上記記事の構成とは少々違っていて、マイクロサーボではなくてDCモーターである点が最大の違いです。

回路図

f:id:inrabbit:20160429191355j:plain

DCモーターのためのモータードライバはTA7291Pを使いました。回路図中の赤い点線で囲ってある部分がモータードライバで、合計4つあります。TA7291Pでは、正転か反転かでPWM信号をIN1に入れるかIN2に入れるのかを切り替えなくてはならないため、切り替えのためにANDゲート×2を使っています。

モータードライバーへの入力電圧は12Vで、Vrefの電圧をボリュームで調整して、モーター端子の電圧を調整できるようにしてあります。モーターは6Vかけることを想定しているので、降圧が大きくて発熱するだろうなと思いましたが、実際やってみるとモーター次第ですが、大電流を流すとかなり熱くなります。しかし、今回利用するモーターを利用する限りはほとんど発熱しなかったため、このまま使っています。

ADコンバータはMCP3002というのを利用しましたが、これはポテンショメーターに繋がれて、模型の位置取得に使われます。

Edisonのコネクタとそのまま接続するのは大変なので、ピッチ変換基盤が必要です。秋月電子で売っているものとBreakout Board Kitを比べて、前者のほうが安かったのですが、今回はサイズ制限の都合でBreakout Board Kitを使いました。

また接続に関してですが、Edisonの端子のロジックレベルは1.8Vなのですが、これを他ICのロジックレベルである5Vに変換する必要があります。昇圧側の14本は、FXMA108というICを使いました。これはピッチ変換基盤といっしょに、秋月電子で8ビット双方向ロジックレベル変換モジュールという名前で売っています。降圧側の1本(SPI接続の受信用)は、抵抗で分圧しています。

f:id:inrabbit:20160429195231j:plain

f:id:inrabbit:20160429195311j:plain

ソフトウェア

USBカメラのストリーミング

newralassemblyさんの記事を参考に、mjpg-streamerを利用しました。

モータードライバ制御 / ADCデータ取り込み

Pythonでプログラムを書きました。mraaというライブラリをインポートするだけで簡単に使えます。

Webブラウザによる操作

newralassemblyさんの記事では、Node.jsを使ってWebSocketを利用した例が紹介されています。 今回はPythonを使いたかったので、webサーバとしてTornade、クライアント側はjavascriptという構成にしました。TornadeでWebSocketを利用したサンプルは、REM web developmentさんの記事を参考にしました。

 ソースコード

ここにアップロード予定

改良点など

 コンテナの防振制御などを予定していましたが、Maker Faire 2016には間に合いませんでした。次回以降に開発予定です。また、webブラウザのスクロールバーによる操作というのは実際やってみるとやりにくいものなので、次回はゲーム用ジョイスティックで操作できるようにする予定です。Maker Faire 2016での出展の様子は以下リンクにあります。

inrabbit.hatenablog.com

 ハードウェア的な問題としては、モータードライバへの入力がLinuxが起動するまでの数十秒間、ハイインピーダンスで不定入力になってしまったせいで、起動時にモーターが動きっぱなしになってしまい、模型の一部を壊す問題を起こしてしまいました。プルダウンなどの対策を入れる必要があります。また、基盤のサイズ自体も当初の計画の範囲内に入っていないため、より小型化したRaspberry Pi Zeroによる制御基盤Ver.2を作成予定です。(Maker Faire 2016でも、見に来ていただいた方からパイゼロ使えばいいのではとアドバイスをいただきました)

 Raspberry Pi Zeroの方が、Edisonよりも基板サイズはかなり大きいのですが、これでなぜ小型化できるのかというと、EdisonではGPIO電圧が1.8Vだったのですが、これをモータードライバやADCと接続するのにロジックレベル変換が必要となり、そのための部品を載せるスペースが必要でした。一方、Raspberry Pi Zeroは3.3Vであるため、モータードライバやADCにそのまま接続できます。さらに、今回のEdisonではハードウェアPWMを使ったのですが、モータードライバと接続するためにロジックICが必要でした。Raspberry PiにはソフトウェアPWMのライブラリが多くあるようなので、(Edisonでも探せばありそうですが)余計なロジックなしにそのままモータードライバと直結でき、部品数が減らせます。ついでに、Raspberry Pi用のカメラはUSBカメラよりも小型なので、さらに省スペースになりそうです。Pi Zeroによるコントローラの作成詳細は以下リンクにあります。

inrabbit.hatenablog.com

 更新履歴

2016/5/5 初版

2016/9/2 更新

2016/9/3 更新