アホの子を相手にしていると人間の方が疲れる
前回作成したマイクロはちゅね「アホの子バージョン」では、腕を動かすメカしかありませんでした。ネギ振りをさせようとすると、電磁石のON/OFFを人手で繰り返さなければならず、とても疲れてしまいます。そこで、放っておいても自動でネギを振るように改良します。これが今回と次回のテーマです。
ネギ振りにマイコンを使うとつぶしが利く
ネギ振りを自動化するには無数のやり方が考えられますが、今回はマイコンを使うことにします。マイコンとは、数十円~数百円のIC一つだけでできたマイクロ・コンピュータのことです。
プログラミングが必要なので難しい印象を持たれてしまう場合もありますが、最近のマイコンは扱いやすくて参考情報も多いので、ネギ振りくらいはアッという間に作れます。また、マイコンには他の方法にはない発展性・柔軟性があって、少しかじるだけで作れる物のバリエーションがぐっと広がるので、工作の勉強としても価値が高いです。
なるべく最新の高機能マイコンで入門しましょう
マイコンは各社から多くの種類が発売されているため、どれを使ったらよいか迷ってしまいます。結論から先に述べると、ネギを振るだけであれば何を使っても問題ありません。ただし、はちゅねを小さくしたいといった類の希望が何かあれば、それにあった大きさ・性能の品種を選ぶ必要はあります(図1)。
本稿ではポピュラーなMicrochip Technology社のPICを使いますが、他社のマイコンでも基本的な扱い方はまったく同じです。1品種をきちんと使いこなせるようになれば、他のマイコンも使えます。
もし、今回がマイコン初挑戦ということであれば、なるべく性能が高くて高機能な最近の品種を選んで使うことをお勧めします(PICであれば、dsPICやPIC24H/24Fシリーズなど)。「新しくて高機能=使うのが難しい」と感じてしまうかもしれませんが、マイコンの世界では違います。機能や性能が低いとやりたい事が簡単にできなかったり、古い品種だと便利な開発環境が使えなかったりするので、逆に苦労する羽目になります。ただし、発売されて間もない品種は避けた方が無難です。
マイコンを使おうとすると、ICだけでなく、プログラムの開発環境やICへの書き込み器も必要です(図2)。最近のマイコンは、Cコンパイラやデバッガが無料配布されていたり、書き込み器も数千円だったりと、気楽に始められます。PICの開発環境構築については後閑哲也さんのサイトに丁寧な入門解説がありますし、ネットで検索すれば体験記も沢山見つかるので参照してください。
なお、筆者が日頃使っている開発環境はMPLAB+MPLAB C30コンパイラ+HI-TECH C Lite / PICC Lite(いずれも無料)、プログラマはPICkit2(通販サイトは容易に見つかる)です。
ネギ振りプログラミングはマイコン初級レベル
マイコンに入門したとき最初に作るプログラムとしては、「LEDを点滅させる」のが常套手段です。マイコンに慣れていても、使ったことのない品種のチップを初めて触る時には、やはりLED点滅をやってみるものです。
ネギ振りはLED点滅と同じプログラムでできますので、マイコン入門にぴったりです。筆者が自分のマイクロはちゅねの駆動に使っているサンプルCコードを公開しますので、以下からダウンロードしてください。他のマイコンでもかなりの部分を流用できるはずです。
- マイクロはちゅねの駆動に使っているサンプルCコード:
サンプル・コードについては、1行ずつ読まなくても、全体の流れを把握すれば十分です。マイコンのI/Oポート(沢山あるピンの大半)のうち一つを電磁石に制御に割り当て、そこに0と1を繰り返し出力する、というのがやっていることです(図3)。
プログラムの構成は図4のとおりです。C言語を知らなくても意味を掴めるのではないでしょうか。なお、図中に「しばらく待つ」という目的のforループがありますが、そのループ回数(10000)は現物あわせで調整する必要があります。
じつは、このプログラムを自分でゼロから書いて動かそうとすると、次の3つの問題にぶつかります。
1つ目は、ハード初期化部分を作るのが意外に面倒だという点です。沢山あるポートの設定(入出力方向やディジタル/アナログの切り替えなど)や各種I/F(UART、I2C、SPIなど)の初期設定などを、マイコンのリファレンス・マニュアルを調べつつ丁寧に書かなければなりません。
2つ目は、同じような処理をしようとしても、マイコン品種やコンパイラによって記法が違うという点です。簡単なポート読み書きひとつとっても、書式はコンパイラによってかなり違います。
3つ目は、マイコンのコンパイラはパソコン用のコンパイラ(VC++やgccなど)と異なり、バグが残っていたり様々な機能制約があったりする場合が珍しくない点です。あまりユーザがいないコンパイラほど、その傾向は顕著です。ネギ振り程度の素朴なプログラムが思ったとおり動かず延々と悩む、という事はままあります。
これらへの対策としては、ネット上で情報を集めるのが入門者に一番適した方法です。このため、サンプル・コードやQ&Aなどを簡単に見つけられるポピュラーな品種を選び、なるべく純正の開発環境を使っておくのが無難です。
正確なタイミングでネギ振りを振らせる
図4のコードを動かすことができたら、マイコンの各種機能を一つずつ試していくとよいでしょう。少なくとも「割り込み機能(インタラプト)」は、マイコンを使っていくうえで避けられないので、最初に体験するのをお勧めします。割り込みとは、何かの処理をしている最中に、別の処理を自動的に起動する機能のことです。その起動は色々なきっかけ(割り込み要因)でかけることができます。
マイクロはちゅねの場合には、ネギ振りのタイミングを正確なタイミングで行ったり、PCなどとの通信や他のセンサの読み取りを同時に行いながらネギを振る、といった目的に割り込みが使えます。
図5に、正確な周期でネギを振るためのプログラムの構造を示します(サンプル・コードは、先に述べたアーカイブ中にあります)。ほぼ全てのマイコンは、一定時間ごとに割り込みをかけるためのタイマーを持っています。そのタイマーに周期を設定したうえで割り込み許可を与えると、ある特別な関数(割り込みベクタ)が定期的に呼ばれるようになります。その関数内部でコイルのON/OFFを切り替えればネギ振りができます。どの関数を割り込みベクタにするかを指定する記法は、コンパイラによって異なります。
なお、割り込みベクタの関数が呼ばれていないときは、main関数のwhile文中の処理が実行されています。複数の割り込みを併用することも可能です。
次回は、マイコンとコイルをつないで実際に動かす方法について説明します。