マイクロはちゅねを増やしたり、パソコンにつないだり
前回までで、マイクロはちゅねはセンサで外の様子を感知して動くようになりました。最終回の今回は、さらに推し進めて、他のマイコンやパソコンとつなぐ方法を紹介します。この段階まで発展すると、1匹だけで寂しくネギを振っていた頃と異なり、ネット上で公開する工作としても楽しいものになってきます。
図1は、マイクロはちゅねを101匹に増やして動かしてみた様子です(動画はこちら)。全部が同じ動きをするだけではなく、個別に違った動きもできるようになっています。数が増えると圧倒的な迫力が出てくるため、ずっと見ていても飽きませんし、部屋に置いておいてもすごい存在感です。この作例では専用のマイコン基板を起こしているのですが、パターン設計用CADに無料のものがありますし、比較的安価にできますので(P板.comやOLIMEXのサイトを参照)、作成は一般に想像されるほど難しくはありません。
また、パソコンに繋がれば、そのままネットにも繋がります。外出先から自宅のパソコンにリモート・アクセスして101匹にネギを振らせ、侵入者を撃退するようなシステムも近い将来普及することでしょう(笑)。
このような工作をしようとすれば、マイクロはちゅねを制御するマイコンを、他のマイコンやパソコンとつないで通信させることが必要になってきます。この通信が今回の技術テーマです。複数のマイコンが同時に動くシステムは、趣味の工作ではまだかなり珍しいですが、業務では普通に存在します。
パソコンとの接続はUARTやUSB、デバイスとの接続はSPIやI2Cがポピュラー
通信をさせるには、電気的にどのようなインターフェースで接続するかと、データをどのようなフォーマットと順序で送るか(上位プロトコル)、の2つを検討する必要があります。幸いなことに最近のマイコンでは、前者は専用ハードで面倒をみてくれます。
そのようなインターフェースとしてよく使われる物の一つが、UART(いわゆるRS-232C)です。パソコンではすっかりレガシーなインターフェースですが、ハードもソフトも簡単なのでマイコンでは依然良く使われています。また、図2に示したとおり、UART-USBの相互変換基板や無線モジュールなどもあります。このように多くの部品を経由するのは難しそうに思えますが、大まかには、信号線を繋いだだけで通信できるようにそれぞれ簡単化されています(とはいえ、問題が起きるときは起きるので、複雑な経路をいきなり組んで動かそうとするのは止めた方がよいでしょう)。
また、各種センサやアクチュエータ、SDメモリカードといった部品をマイコンとつなぐときには、SPIやI2Cと呼ばれるシリアル通信規格がよく使われています。とくにセンサについては、前回触れたようなアナログ信号出力のもの以外に、SPIやI2Cのディジタル・インターフェースのものも増える傾向にあります。
通信処理のマイコン・プログラミング
以上のような通信専用ハードは、最近のマイコンであれば複数個が搭載されるようになってきています(図3左)。低機能なマイコンだと通信ハードがなくて苦労するので(図3右)、よほど費用を切り詰めたいとき以外は高機能なマイコンを選ぶ方がよいでしょう。実際、筆者のマイクロはちゅねでは、採用したマイコンPIC12F675間でシリアル通信をするために、本来ならハードがやってくれる電気信号ON/OFF操作や時間調整を全部プログラミングで行っており、C言語なのに半ばアセンブラのようなコードになってしまっています。
通信専用ハードが使えるなら、通信プログラミングはだいぶ楽になります(図4)。ハードが準備完了かを確かめてから、データを送る場合はそれをレジスタ(ハード内部の専用変数)に書き込み、データを受信する場合はレジスタを読む、というのが基本です。ここで、送信ないし受信が可能になったことを割り込みで知るようにプログラミングするのが、常套手段です。たとえば外からデータを受け取ろうとした場合、もしwhileループで待つことにすると、そこで他の処理が全部ストップしてしまうからです。とくに、会話の相手が一つではなく複数ある場合や、話しながら聞くといった場合には、処理全体が止まってしまわないよう、かなりの注意が必要です。
1バイト・データの送受信ができたら、その上にパケット転送などの上位プロトコルを組むことになりますが、その作り方はやりたい事によって様々です。たとえばネギ振りであれば、パソコンなどから「どれだけの速度で何度ネギを振れ」といった命令を受け取り、はちゅねから「了解」という返事(アクノリッジ)をするようにします。人間の会話と同じです。
また、パソコン側のプログラミングについても、上位プロトコルの部分はまったく同じです。ただし、USBやRS-232Cへのアクセスは、マイコンのように直接ハードのレジスタを読み書きしたりするのではなく、デバイスドライバ経由になります。個々のデバイスやOS、コンパイラによる差異がとても大きいので、あまり一般的なことが言えません。デバイス名・OS名・コンパイラ名などをキーワードに、ネット上で検索してみてください。
安定した通信のために、電気的な部分も意識しておくとよい
最後に、通信をするうえで頭に置いた方がよい事をもう一つ紹介します。それは、通信したい物どうしをただ配線で結んでも駄目、ということです。配線の中を伝わっていく実際の電気信号は、単純な0、1の変化をするのではなく鈍りや歪がありますし(図5)、配線が複数本あれば干渉(クロストーク)したりもします。
安定した通信をしようとするなら、数m~10mもの配線を延々と引き回したり、1本の配線に100個の負荷をぶらさげたりするのは禁物です。データ転送速度を高速にしようとすればするほど、このような点はシビアになります。わりと無造作に配線しても動くのは数十kbps~数百kbpsくらいまでで、それ以上は信号波形の管理が必要になってきます。
以上、6回にわたっておつきあいいただきまして、ありがとうございました。限られた紙面ゆえ細部を割愛せざるを得なかった面も多くありますが、本稿中のキーワードから情報を検索できるかと思います。マイクロはちゅねが楽しい工作への入門となれば、筆者望外の喜びです。