■ Arduinoでマイコンしよう!!
唐突ですけど、今回は世界中でプチ話題のマイコンボードことArduino。えぇーっ!? まいこんぼおどぉ~? そんなのワタシと関係な~い!! とブラウザを閉じないで欲しい。恐らく、たぶん、きっと、アナタにとって、非常に身近&容易に使えたりするマイコンボードだから。
|
Arduino本体(ボード部)。パソコンとUSB接続し、Arduino IDEと呼ばれる開発環境を使って簡単に(マイコンに対して)プログラミングを行える。写真は、プログラムによりLEDの発光を制御しているところ
|
Arduino(アーデュイーノorアルデュイーノ)は、イタリア生まれのマイコンボードだ。パソコンのようなヒューマンインターフェイスは備えないが、コンピュータである。正確には、マイコンボードと専用プログラミング環境等を含めてArduinoと呼ぶようだが、ま、細かい話は端折る方向で。ともかく、まずはArduinoでナニがデキたりするのか、というコトを。
|
|
|
Arduinoはオープンソースハードウェア。回路図等も公開されているので自作も可能だが、数多くの既製品が販売されている。写真はArduino Diecimila(diecimilaは1万を意味するイタリア語――たぶん「ディエチミーラ」と読む)。1万枚出荷された記念で作られたそうな
|
裏側には“Made in Italy”の文字と国土をあしらったシルク印刷が。青い基板もオシャレですな
|
サイズは7×5cm程度。USBコネクタを装備し、パソコンと接続可能。電源はACアダプタ(や電池等)でもUSBバスパワーでも動作する
|
Arduinoには、ATMEL社のAVRマイコンことATMEGA168が載っている。このマイコンでデキることなら、Arduinoでもだいたい全部デキると言える。LEDの発光をコントロールすることから、LCD表示パネルに文字を出したり、あるいは外部のセンサから情報を受け取りつつモーターの回転数を制御する等々、いろ~んなコトが可能だ。
通常、AVRやPICといったICチップ状態のマイコンを使うのは決して容易ではない。知識として、まずマイコンの何たるかはもちろん、マイコンに対するプログラミング(マシン語やC言語のスキルおよび書き込み器等環境)が必要になる。し、マイコンのピン入出力や電気的動作をさせるための回路~基板の自作なんかも要る。
|
|
AVRマイコンのためのATMEL純正開発ハードウェア。これとパソコン、専用プログラミング環境を使って、AVRマイコンにプログラムを書き込む
|
ちなみにこのボードの名前はAVR Dragon。基板裏側に龍のシルク印刷がされている。イカス!!
|
さらに、ちなみに、これがAVR Dragonのパッケージだッ!! 遊び心溢れる箱ですな!! でもモノとしてはハードルが高いですのう。Arduinoなら、こういう難しそうなツールを使わずに開発できる
|
マイコンを使えば様々な電子デバイスを自由にコントロールできそーだし、あるいは既存の電気製品と組み合わせてよりオモシロゲな動作をさせることが可能らしい、というコトを知っていても、実際行うにはそーとーハードルが高いのであった。
そこでArduino。コレがあると、これまでスゲく手間&知識が必要だったコトが、いッきなり&かな~り身近になりつつ、すぐ試せるようになるのだ。
■ Arduinoを準備する
Arduinoを使うためにさしあたって必要なのは、パソコン、Arduino Diecimila等、そしてソフトウェア開発環境(IDE/無料ソフト)、USBケーブルと、使ってみたい電子部品あたり。
まず、ソフトウェア開発環境のArduino IDEだが、Arduino公式サイトのDownload the Arduino Softwareページからダウンロードできる。また、このページのNext stepsのGuideを読むと、比較的に詳細なArduino使用手順を参照できる。パソコンとArduinoをUSB接続する場合は、ドライバ(FDTI FT232RL:USBシリアル変換チップ用)も必要なので、英語のガイドだけど頑張って読もう!!
ちなみに、Arduino IDEの対応OSは、Windows/MacOS X/Linuxとなっている。拙宅にてはWindows Vista環境で動作させており、最新バージョン(Arduino 0011)はVista対応となっているが、Vistaで動かす時はテーマをWindows Classicにしないと起動しない拙宅環境であった。
次に、ArduinoをパソコンとUSB接続する。と、Arduinoを使い始められる。Arduino Diecimilaの場合、ボード上に動作確認のために使えるLEDが実装されていて、とりあえずコレを使えばArduinoのちょっとした動作を見ることができる。最初はArduino本体+Arduino IDE+パソコン+USBケーブルだけで試し始められるってわけだ。
日本ではまだまだマイナーな存在であるArduino。少し以前まではヨーロッパやアメリカから通販で購入するしかなかった。んだが、最近では日本国内のショップから日本語で購入できる。具体的には、メカロボショップやスイッチサイエンス。どちらのショップでも3980円で購入できる(2008年6月30日現在)。
ただ、購入時は、他一般の“電気製品”とは性質の異なるハードウェアであることを意識すべき。Arduinoはオープンソースハードウェアであり、基本的には全ての情報がユーザーに開示されている。それは、一方で、ユーザーがArduinoに関する全ての情報を得られる&調べられるということも意味する。
ので、例えば、Arduino買ってピンの表記の意味がわからないからと言ってショップに電話して「アンタのトコロで買ったArduinoのGNDって書いてあるとなりの13だか31だかって何のピンなんだね」とか質問するのはお門違い。それら情報は全て公開されているから自分で調べるか、Arduinoコミュニティの親切な誰かに教えてもらうか、製造メーカーに直接訊くべきだろう。
ショップはArduinoというハードウェアを輸入・販売しているだけなので、初期不良以外でのクレーム・質問はしないのが基本ですな(……ショップの人は優しいので教えてもらえちゃう可能性ありますが、でも、あまり甘え過ぎないで!!)。
■ Arduinoを動かしてみよう
さてさて、Arduino IDEのセットアップを終え、パソコンとArduinoをUSB接続したら、Arduino IDEに含まれるサンプルプログラム(Arduinoの世界では“スケッチ”と呼ぶ)を試してみよう。
|
|
ArduinoとパソコンをUSB接続したところ。PWRと書かれた電源ランプ(緑色LED)が点灯する。電源はUSBバスパワーから得ているが、ジャンパスイッチの切り替えで電池等から電源を取ることができる───プログラム(スケッチ)書き込み時のみUSB接続し、その後はスタンドアロンでも動作させられるのだ
|
Arduino IDEはこんな表示。表示されているコードは、Arduino IDEに多数含まれるサンプル“スケッチ”のひとつ。Arduino上のLEDを点滅させるプログラム(ソースコード)となっている
|
|
【動画】クリックで再生 Arduino IDEにコードを書いたら(サンプルを読み込んだら)、それをArduinoに書き込む。書き込み時、TXとRXと書かれたLEDが点滅する。それが終わると、自動的にプログラムが実行される。このソースだと、Lと書かれたLEDが点滅するだけですけどネ
|
この例では、Arduinoのボード上のLEDを点滅させただけ。なので、動作としては何の工夫もなく、つまんないかもしれない。が、ユーザーがその動作を容易に変えられるという点が重要だ。例えば上のLED点滅は以下のようなソースコード(ここではArduino言語としておこう)で実現されている。
LEDを点滅させるサンプルプログラム(スケッチ)
/*
* Blink
* http://www.arduino.cc/en/Tutorial/Blink
*/
int ledPin = 13; // DIGITALの13番にオンボードのLED
void setup()
{
pinMode(ledPin, OUTPUT); // 出力に設定
}
void loop()
{
digitalWrite(ledPin, HIGH); // LEDをオン
delay(500); // 500ミリ秒待つ
digitalWrite(ledPin, LOW); // LEDをオフ
delay(500);
}
6行目の int から、最後の } までがArduino言語で書かれたソースコード(プログラム)ですな。
LED点滅の動作は void loop() の下にある数行で書かれている。digitalWrite という命令でピンに出力される電圧を変えており、delay で指定された時間(ミリ秒)だけプログラムの動作を一時停止している。つまり、0.5秒間隔でLEDが点いたり消えたりする、という動作がループしているわけだ。
細かいコマンドが理解できなくても、「あ、じゃあ500のところを300に書き換えれば、LEDの点滅が0.3秒間隔になるのかナ!?」てな見通しが開けません? ソコがArduino言語のナイスなトコロなんですよ!! わかりやすいんですよ!!
世界中では、ArduinoおよびArduino言語ユーザーが少なくない。世界の様々なユーザーが、その成果物(回路やソースコード)をネット上で開示している。ので、とりあえずはそういった“出来上がり”をそのまま真似て再現してみたり。あるいはその一部を変更すれば、容易に自分独自の結果を出せる。
全体を通しての流れもわかりやすくてイイですな。基本的に、パソコンでArduino言語使ってスケッチ(コード)を書く→ソレをArduinoに書き込む→実行される、と、単純。Arduino言語は、実際はマシン語へと変換されてからArduino(上のATMEL ATMEGA168マイコンチップ)へと書き込まれるわけだが、ユーザーはそーゆーコトを意識しないで済む。
本来、C言語とかでソースを書いて、それをコンパイルして、AVRマイコン用書き込み器を使ってマイコンに書き込んで……てな手順があるわけだが、Arduino IDEを使えば、なんつーか、かつての8ビットマイコン(←黎明期のパソコン)でBASICプログラミングをするような感覚で、スタンドアロンのマイコンボードを使っていけてカンタン!! というわけだ。
余談だが、こういうシンプルでわかりやすい環境は、Arduinoが発祥、というわけでもない。言語としてはProsessing(proce55ing)があり、ハードとしてはより自由度の高いWIRINGがある。
|
|
|
WIRING本体。Arduinoよりも豊富なピン数を使えるが、サイズは大きめで、価格も高め。だが、Arduino登場の源流となっている重要な存在だ
|
WIRINGもやはりパソコンとUSB接続して容易に使用できる
|
WIRING IDEの表示例。Arduinoと同じく、Prosessing(proce55ing)言語の流れを引き継ぐ理解しやすい開発環境だ
|
プログラミング言語の勉強をガッツリしまくらなくても画面上にアート作品を創れたりするProsessing(proce55ing)があり、電子回路やマイコンに超詳しくなくてもAVRマイコンを利用できるWIRINGがあり、そこへよりシンプルで安価なArduinoが登場したという流れですな。
■ ArduinoでLEDをチカチカさせてみよう
もうちょっとArduinoで遊んでみましょ~。今度は、青色LEDをArduinoにつないで、ソレをピカピカさせてみたい。でも、LEDを、Arduinoに、つなぐって?
Arduinoには、デジタル信号を入出力するためのピンが14個あり、アナログ信号を入力するためのピン(A/Dコンバータ)が6個ある。また、デジタル信号入出力のための14個のピンのうち、6個はPWM(Pulse Width Modulation;パルス幅変調)でのアナログ出力(擬似アナログ出力)が可能だ。これらのピンをどう動作させるかは、前述のArduino言語によって変えられる。
|
|
|
Arduino Diecimilaには入出力のためのピンがある。基板上下に並んでいるコネクタがそうだ。ここにジャンプワイヤ等を接続し、外部の電子パーツや回路と接続する
|
上側にはデジタル信号入出力のためのピンが14個並ぶ。0~13までがそれにあたる。ピン番号の脇にPWMと刻印されているピンは、擬似的なアナログ信号を出力できる
|
下側に見えるアナログ入力用のピン。ANALOG IN の 0~5までの6本に、外部からのアナログ信号を入れられる。入ったアナログ信号は、A/D変換され、マイコン内で処理できる。命令ひとつで変数に代入できるので、とても手軽
|
って微妙に細かいコト書いてますが、要はArduino本体にある特定のピンにLEDを挿せば、Arduino言語を使ってそのLEDを好きなように点灯させられるヨ、みたいな話。
|
|
青色LEDを1個用意した。足の長さが違いがLEDの極性を示している。長い方がアノード(+側)で短い方がカソード(-側)となる。極性を間違えてつなぐと光らないヨ!!
|
Arduinoに青色LEDをつなぐ。LEDの足の長い方(アノード/+側)を12番ピンに、短い方(カソード/-側)をGNDの表示があるピンに接続する。ただ、ホントは、Arduinoに対して直接LEDを挿してはダメ。LEDとArduinoに間に電流制限抵抗を入れる必要がある───入れないと、最悪、LEDが焦げたりして壊れる可能性がある
|
|
【動画】クリックで再生 Arduinoは、外部の何かしらの回路をコントロールすることができる。電子工作で行うと、微妙に面倒なLED点滅速度調整も、Arduinoを使えば数値を書き換えるだけでOK
|
LEDを電源につなぐ場合、ホントは電流制限抵抗器を入れる必要があるが、ま、青色だし、点滅だし、ココはヒトツ、細かいことヌキでご参考用の実験ってコトで!!
なお使ったソースコードは以下のとおり。前述のArduinoボード上LED点滅のソースコードの int ledPin = 13; の 13 を 12 に書き換えただけだ。
LEDを点滅させるサンプルプログラム2(スケッチ)
/*
* Blink
* http://www.arduino.cc/en/Tutorial/Blink
*/
int ledPin = 12; // DIGITALの12番にオンボードのLED
void setup()
{
pinMode(ledPin, OUTPUT); // 出力に設定
}
void loop()
{
digitalWrite(ledPin, HIGH); // LEDをオン
delay(500); // 500ミリ秒待つ
digitalWrite(ledPin, LOW); // LEDをオフ
delay(500);
}
結果、Arduinoに外付けしたLEDをチカチカさせられた。通称、Arduino Lチカ!! このLチカが猫の目に反射するとLチカ猫ピカなのかーッ!? ってコレだけで喜んでる俺だが、実際、こういうマイコンボードは夢が広がって楽しいっス。
例えば、上のようにLEDを点滅させる場合、純粋な電子工作だけで行おうとすると、タイマICを使うとか、あるいは無安定マルチバイブレーター回路を作る必要がある。点滅速度を変える場合は、コンデンサや抵抗の定数(容量値等のこと)を計算しつつ変更する必要も。もちろん、マイコンボードを使わないから、安価で小型でシンプルな回路にはなるだろう。
しかし、目的がLEDチカチカなら、Arduino言語でLEDの点滅速度を数値で書く( delay(500); の数値を調整する)方がずーっとラク。また、LEDを1秒点灯させ、その後は0.1秒間隔で点滅させ……といった複雑な動作も、ソースコードを書き換えるだけで実現できる。もちろん、単なるLEDチカチカだけでなく、例えばボタン操作で何らかの電子デバイスを操作したり、センサと組み合わせて自律的な動作をさせることも比較的に容易なのだ。
というわけで、ぶっちゃけ、パソコンから使えて、より容易な道順で電子的な回路を制御できたりするArduinoなら、非常に面白いし工夫次第で様々な(これまでパソコンだけじゃデキなかった)コトを実現可能。その動作をもうちょっと具体的にお見せするべく、次回はArduinoを使った“ちょっとだけ高度なプロジェクト例”をお目にかけたいと思う。
■ URL
Arduino(英文)
http://www.arduino.cc/
2008/06/30 12:20
|