GW短期集中連載!マイクロはちゅねで楽しいネット工作の世界へ

第3回マイコン電子頭脳で、はちゅねを賢く

アホの子を相手にしていると人間の方が疲れる

前回作成したマイクロはちゅね「アホの子バージョン」では、腕を動かすメカしかありませんでした。ネギ振りをさせようとすると、電磁石のON/OFFを人手で繰り返さなければならず、とても疲れてしまいます。そこで、放っておいても自動でネギを振るように改良します。これが今回と次回のテーマです。

ネギ振りにマイコンを使うとつぶしが利く

ネギ振りを自動化するには無数のやり方が考えられますが、今回はマイコンを使うことにします。マイコンとは、数十円~数百円のIC一つだけでできたマイクロ・コンピュータのことです。

プログラミングが必要なので難しい印象を持たれてしまう場合もありますが、最近のマイコンは扱いやすくて参考情報も多いので、ネギ振りくらいはアッという間に作れます。また、マイコンには他の方法にはない発展性・柔軟性があって、少しかじるだけで作れる物のバリエーションがぐっと広がるので、工作の勉強としても価値が高いです。

なるべく最新の高機能マイコンで入門しましょう

マイコンは各社から多くの種類が発売されているため、どれを使ったらよいか迷ってしまいます。結論から先に述べると、ネギを振るだけであれば何を使っても問題ありません。ただし、はちゅねを小さくしたいといった類の希望が何かあれば、それにあった大きさ・性能の品種を選ぶ必要はあります図1⁠。

本稿ではポピュラーなMicrochip Technology社のPICを使いますが、他社のマイコンでも基本的な扱い方はまったく同じです。1品種をきちんと使いこなせるようになれば、他のマイコンも使えます。

図1 マイコンと一口に言っても機能や大きさに多彩な種類があり、作りたいはちゅねに合わせて選べばよい。とくにこれといった制約がないのであれば、なるべく新しい多機能・高性能なマイコンを使っておくほうが良い
図1 マイコンと一口に言っても機能や大きさに多彩な種類があり、作りたいはちゅねに合わせて選べばよい

もし、今回がマイコン初挑戦ということであれば、なるべく性能が高くて高機能な最近の品種を選んで使うことをお勧めします(PICであれば、dsPICやPIC24H/24Fシリーズなど⁠⁠。⁠新しくて高機能=使うのが難しい」と感じてしまうかもしれませんが、マイコンの世界では違います。機能や性能が低いとやりたい事が簡単にできなかったり、古い品種だと便利な開発環境が使えなかったりするので、逆に苦労する羽目になります。ただし、発売されて間もない品種は避けた方が無難です。

マイコンを使おうとすると、ICだけでなく、プログラムの開発環境やICへの書き込み器も必要です図2⁠。最近のマイコンは、Cコンパイラやデバッガが無料配布されていたり、書き込み器も数千円だったりと、気楽に始められます。PICの開発環境構築については後閑哲也さんのサイトに丁寧な入門解説がありますし、ネットで検索すれば体験記も沢山見つかるので参照してください。

なお、筆者が日頃使っている開発環境はMPLABMPLAB C30コンパイラHI-TECH C Lite / PICC Lite(いずれも無料⁠⁠、プログラマはPICkit2(通販サイトは容易に見つかる)です。

図2 マイコンとしてはポピュラーなMicrochip Technology社PICの開発環境(プログラマとアダプタ)と、各種チップデバイス。最近のマイコンは、基板からいちいち外さなくても半田付けされた状態のままで書き込みできるので(一般にはISP、PICではICSP機能という⁠⁠、プログラマだけあればアダプタは無くてもよい。値段は数千円くらい
図2 マイコンとしてはポピュラーなMicrochip Technology社PICの開発環境(プログラマとアダプタ)と、各種チップデバイス

ネギ振りプログラミングはマイコン初級レベル

マイコンに入門したとき最初に作るプログラムとしては、⁠LEDを点滅させる」のが常套手段です。マイコンに慣れていても、使ったことのない品種のチップを初めて触る時には、やはりLED点滅をやってみるものです。

ネギ振りはLED点滅と同じプログラムでできますので、マイコン入門にぴったりです。筆者が自分のマイクロはちゅねの駆動に使っているサンプルCコードを公開しますので、以下からダウンロードしてください。他のマイコンでもかなりの部分を流用できるはずです。

マイクロはちゅねの駆動に使っているサンプルCコード:

サンプル・コードについては、1行ずつ読まなくても、全体の流れを把握すれば十分です。マイコンのI/Oポート(沢山あるピンの大半)のうち一つを電磁石に制御に割り当て、そこに0と1を繰り返し出力する、というのがやっていることです図3⁠。

図3 マイコンのI/Oポート(ピン)の一つを電磁石につなぎ、0と1を繰り返し出力すればネギ振りになる
図3 マイコンのI/Oポート(ピン)の一つを電磁石につなぎ、0と1を繰り返し出力すればネギ振りになる

プログラムの構成は図4のとおりです。C言語を知らなくても意味を掴めるのではないでしょうか。なお、図中に「しばらく待つ」という目的のforループがありますが、そのループ回数(10000)は現物あわせで調整する必要があります。

図4 C言語によるネギ振りプログラム例。処理本体よりもハード初期化部が面倒なのだが、ネットからサンプルコードを拾ってきて書き換えるのが手っ取り早い。チップを初めて触るときには必ずこのような簡単なコードを試してみるものだが、ハード初期化部分や各種書式のテンプレートを作る意味合いがある
図4 C言語によるネギ振りプログラム例

じつは、このプログラムを自分でゼロから書いて動かそうとすると、次の3つの問題にぶつかります。

1つ目は、ハード初期化部分を作るのが意外に面倒だという点です。沢山あるポートの設定(入出力方向やディジタル/アナログの切り替えなど)や各種I/F(UART、I2C、SPIなど)の初期設定などを、マイコンのリファレンス・マニュアルを調べつつ丁寧に書かなければなりません。

2つ目は、同じような処理をしようとしても、マイコン品種やコンパイラによって記法が違うという点です。簡単なポート読み書きひとつとっても、書式はコンパイラによってかなり違います。

3つ目は、マイコンのコンパイラはパソコン用のコンパイラ(VC++やgccなど)と異なり、バグが残っていたり様々な機能制約があったりする場合が珍しくない点です。あまりユーザがいないコンパイラほど、その傾向は顕著です。ネギ振り程度の素朴なプログラムが思ったとおり動かず延々と悩む、という事はままあります。

これらへの対策としては、ネット上で情報を集めるのが入門者に一番適した方法です。このため、サンプル・コードやQ&Aなどを簡単に見つけられるポピュラーな品種を選び、なるべく純正の開発環境を使っておくのが無難です。

正確なタイミングでネギ振りを振らせる

図4のコードを動かすことができたら、マイコンの各種機能を一つずつ試していくとよいでしょう。少なくとも割り込み機能(インタラプト)は、マイコンを使っていくうえで避けられないので、最初に体験するのをお勧めします。割り込みとは、何かの処理をしている最中に、別の処理を自動的に起動する機能のことです。その起動は色々なきっかけ割り込み要因でかけることができます。

マイクロはちゅねの場合には、ネギ振りのタイミングを正確なタイミングで行ったり、PCなどとの通信や他のセンサの読み取りを同時に行いながらネギを振る、といった目的に割り込みが使えます。

図5に、正確な周期でネギを振るためのプログラムの構造を示します(サンプル・コードは、先に述べたアーカイブ中にあります⁠⁠。ほぼ全てのマイコンは、一定時間ごとに割り込みをかけるためのタイマーを持っています。そのタイマーに周期を設定したうえで割り込み許可を与えると、ある特別な関数割り込みベクタが定期的に呼ばれるようになります。その関数内部でコイルのON/OFFを切り替えればネギ振りができます。どの関数を割り込みベクタにするかを指定する記法は、コンパイラによって異なります。

なお、割り込みベクタの関数が呼ばれていないときは、main関数のwhile文中の処理が実行されています。複数の割り込みを併用することも可能です。

図5 マイコンでは割り込み機能の利用は避けてとおれない。正確なタイミングで処理をしたり、複数の処理を同時進行するために必要となる。割り込みが頻繁だったり種類が多かったりすると煩わしい問題も起きてくるが、一定周期でネギを振るくらいならごく簡単
図5 マイコンでは割り込み機能の利用は避けてとおれない

次回は、マイコンとコイルをつないで実際に動かす方法について説明します。

おすすめ記事

記事・ニュース一覧