2020年04月05日 | 更新。 |
Arduino(アルデュイーノ)とは、米国のArduino LLC社およびイタリアのArduino SRL社が、設計製造している、8ビットまたは32ビットのマイコンボードのことです。また、開発環境やドキュメントなど、周辺環境などを含めてArduinoと呼ぶこともあります。
日本ではArduinoを「アルディーノ」と発音する人が多いですが、これは間違いです。
Arduino LLC社は商標権の問題から、Arduinoとまったく同じ製品を、米国外にはGenuino(ジェニュイーノ)の商品名で輸出しています。一つの製品を複数の商品名で販売するようになった事情については、 Arduino創始者グループの分裂がユーザに与える影響についてをご覧ください。
Arduinoには、次の様な特徴があり、世界中の多くの愛好者に支持されています。
デザイナーなど、電子回路やプログラミングに馴染みのない人たちにもマイコンボードに抵抗なく触れられるように配慮されており、プログラムの事をスケッチ、拡張ボードの事をシールドと呼ぶなど、独特の用語を使います。
Arduinoは、マイコンボードの形状で分類すると、次の3種類に分類できます。
Arduinoの現行機種の中で代表的なものを、表1に示します。
マイコンのビット数 | シールド搭載タイプ( 小型) | シールド搭載タイプ( 大型) | ブレッドボード対応タイプ |
---|---|---|---|
8 | Arduino Uno(写真1)、Arduino Leonardo | Arduino Mega2560(写真2) | Arduino Nano、Arduino Micro(写真3) |
32 | Arduino M0、Arduino M0 Pro、Arduino Zero | Arduino Due |
シールドが搭載できるArduinoは、小型タイプと大型タイプに分けられますが、それぞれの大きさで、形状やピンソケットの配置が標準化されています。そのため、同一のシールドが、色々な機種のArduinoに搭載できるようになっています。
注:形状やピンの位置が標準化されているので、形状面ではシールドは色々な機種のArduinoに搭載できますが、電気的な、あるいはソフトウェア上の互換性の問題で、全てのシールドが全てのArduinoに対応している訳ではありません。
大型のArduinoは、小型のArduinoにピンが追加された形状をしています。そのため、小型のArduino用に作られたシールドは、大型のArduinoにも搭載できます。
シールドが搭載できる小型のArduinoのピン配置を図1に、大型のArduinoのピン配置を図2に示します。
電源は、スケッチ書き込み用のUSBケーブルから取る事もできますし、ACアダプタから取る事もできます。ACアダプタで給電する場合は、USBケーブルを外して、パソコンとは無関係に、あらかじめ書き込んであるスケッチを動作させることができます。
Arduinoのソフトウェア開発はArduino IDE(あるいはArduino Software)と呼ばれる無償の統合開発環境(図1参照)で行います。Arduino IDEは、Windows、Mac OSおよびIntelまたはARMのCPUで動作するLinuxのいずれでも動作します。
Arduino IDEで、Arduinoに搭載したLEDを点滅させるスケッチ(Blinkスケッチ)を開いた様子。
開発言語はC++ですが、main関数を隠蔽し、その代わりに最初の1回だけ呼ばれるsetup関数、その後繰り返し呼ばれるloop関数を設けるなど、独特な仕様になっています。
注:組み込み機器には処理に終わりがないので、処理の最後は必ず無限ループになるように言語構造を工夫し、初心者でも間違いなくプログラムできる様にとの配慮だと思われます。
Arduinoには通常USBデバイスインタフェースが内蔵されており、USBケーブル経由でパソコンに接続できるようになっています。Arduino IDEで開発したスケッチは、コンパイル後にUSB経由でArduinoに書き込めるようになっています。
Arduinoのフラッシュメモリに書き込んであるブートローダがUSBケーブルからコンパイル済みのスケッチを読み込み、Arduino内蔵のフラッシュメモリに書き込みます。書き込んだスケッチは、書き込み終了後にすぐに動作を始めます。また、一度書き込んだスケッチは、電源を切ってもフラッシュメモリに記録されており、電源再投入後に、すぐに動作し始めます。
従来のマイコンボードでは、プログラムを内蔵フラッシュメモリに書き込む際に、高価なプログラム書き込み機を用意する必要があったのですが、USBを使ってプログラムの書き込みができるようになり、マイコンの勉強を始める際の、金銭的・技術的な敷居が下がりました。
少数の例外を除いて、ほとんどのArduinoのにはデバッグインターフェースを備えていないため、ブレークポイントやステップ実行などのデバッグ機能はArduino IDEには搭載されていません。
例えばArduino LLC社(arduino.cc)のArduiono Zeroにはデバッグインターフェースが搭載されていますが、デバッグ機能を使うには、Arduino IDEではなく、Atmel社が配布しているAtmel Studioを使って開発を行う必要があります。
一時期はarduino.cc(Arduino LLC社)とarduino.org(Arduno SRL社)が、それぞれ別々のバージョンのArduino IDEを配布していました。現在はarduino.ccがArduino IDEを配布しています。詳細については Arduino創始者グループの分裂がユーザに与える影響についてをご覧ください。
先ほど説明したとおり、Arduinoでは拡張ボードの事をシールドといいます。液晶表示装置、温度・湿度・気圧などの各種センサー、SDカードリーダ・ライタ、キーパッドなどの各種のシールドが発売されています。写真4に、液晶表示シールドの例を示します。
シールドは通常、背面にピンヘッダが付いており(写真5参照)、Arduino上面のピンソケット(写真6参照)に差し込むことで、Arduinoと固定し、また電源や信号のやり取りが行えるようになっています。(写真7参照)
各シールドには通常ライブラリが用意されています。ライブラリは、Arduinoで各種周辺装置等を利用する時に必要となる、制御用の関数等を集めてパッケージ化したものです。シールドを購入したユーザーは、メーカのサイトからライブラリやサンプルスケッチをダウンロードし、すぐに動作させることができます。
組み立て済みのシールドとライブラリがセットになって供給されているので、素早くプロトタイピング(試作)が行える様になっています。これは、Arduinoができた当時は画期的な事でした。
Arduino登場以前では、マイコンボードは市販の物を購入するにしても、例えば液晶表示装置は何も加工されていない状態で供給されており、マイコンボードと接続するには、基板に載せてコネクターを付けるなど、はんだ付け作業が必要でした。さらに、液晶に何か文字を表示させたくても、液晶表示装置のメーカーが公開している技術資料(データシート)を片手に、何時間もかけてプログラムを作らなければなりませんでした。
Arduinoではシールドの形状が標準化されており、どこのメーカーのシールドを買っても、すぐにArduinoと接続できるようになっています。ライブラリやサンプルスケッチをダウンロードしてArduinoに書き込むと、ものの数分間でとりあえずシールドが動作します。Arduinoが電子機器のプロトタイピングのあり方を変えてしまった感があります。
シールドによっては、さらに別のシールドを重ねられるように、上面にピンソケットが付いているものがあります。Arduinoの上に、何枚かのシールドを重ねて装着すれば、複数のシールドの機能を使った装置の試作も簡単にできるようになっています。例えば、ArduinoにSDカードリーダーのシールドを重ね、さらにその上に液晶表示装置のシールドを重ねると、SDカードに記録された情報を液晶画面に表示する装置の試作ができます。
Arduinoに拡張基板を取り付ける際に、シールドではなく、形状が規格化されていないブレークアウト基板を用いる事もありますが、何らかの配線作業が必要で、Arduinoに直接装着できるシールドの方が利便性が高いです。
例えばあるシールドの制御用関数など、特定の目的の関数群をパッケージ化して簡単に使えるようにした物をライブラリと呼びます。
マイコンで何かを制御するプログラムを作る場合、制御対象のデバイス(ICなど)にコマンド送るなどの下位レベルのプログラムの方が、全体の大まかな処理手順を記述するなどの上位レベルのプログラムよりも、ずっと作るのが難しいのが普通です。
例えば、水漏れを検知したら、音声で「水が漏れています」と警告する装置を開発すると仮定します。この場合、マイコンと水漏れセンサーと、音声合成用ICとを組み合わせて装置を作ることになります。(図2(a)参照) 「センサーが水漏れを検知したら音声合成ICに合図を送る」という上位のプログラム(メインルーチン)を作るのは簡単なのですが(図2(b)参照)、水漏れセンサーに各種コマンドを送って動作モードを設定したり、音声合成ICに再生したい音声を登録したりといった下位のプログラム(サブルーチン)を作るのには、技術が必要ですし、時間もかかります。(図2(c)参照)
ライブラリは、そういった作るのが難しくて時間のかかるサブルーチン群をパッケージとして提供してくれるので、それらを用いることで、ユーザーは上位のプログラムの開発に注力する事ができます。その結果、装置の試作が、簡単かつ短時間にできます。
Arduino IDEにも、キャラクタ液晶用ライブラリ、SDカード用ライブラリ、シリアル(UART)・SPI・TWI(I2C)といったインタフェース用ライブラリなどが標準で付いていますが、何かのシールドを購入すれば、たいてい専用のライブラリが用意されています。また、実力のあるユーザーが個人で公開しているライブラリも多数あり、それらを使えば、シールド化されていないデバイスを制御する事ができます。
参考:当サイトでも、グラフィック液晶用のMGLCDライブラリ、キーパッド用のResKeypadライブラリなど、いくつかのライブラリを公開しています。
ただ、ライブラリは通常、デバイスの機能の全てを引き出すようには作られておらず、代表的な機能のみを使えるようになっています。これには、「全機能に対応するライブラリを作るには時間がかかる」といった消極的な理由と、「全機能に対応したライブラリを作ると、関数が増え、また関数の引数も増えるので、ライブラリを使いこなすのが難しくなる。初心者には簡単なライブラリの方が便利」といった、積極的な理由があります。
Arduinoを使うと、初心者でも比較的簡単に何らかの装置の試作ができます。自分の作品が出来上がると嬉しくなって、さらに多機能・高機能な装置を作ってみたくなりますが、そのために、使用デバイスの機能をフルに使おうとすると、ライブラリが対応していない部分は、自分でライブラリを拡張する、ライブラリを使わずに自力でプログラムするなどの工夫が必要になります。先ほど説明した様に、ライブラリの拡張などの下位レベルのプログラミングは、上位のスケッチのプログラミングよりはるかに難しいので、初心者がそこで壁にぶち当たる事は往々にしてあります。
Arduinoは、電子機器のプロトタイピング(試作)の効率を飛躍的に高めました。電子工学や電子工作についてそれほど深い知識がなくても、Arduinoとシールドなどを組み合わせれば、回路は作れますし、ライブラリを活用すれば、ソフトも簡単に作れます。
ただ、試作してみて、「ここをもうちょっとこうしたい」と、色々変更したい事はよくあります。市販のシールドや既成のライブラリを使って対応できる範囲内での変更ならいいのですが、そうではない場合、途端に基板を設計しなければならなくなったり、難しい低レベルプログラミングをしなければならなくなったりして、いきなり敷居が高くなります。そのため、「もうちょっとで欲しい物が作れそうな感じがするのに、実際はどうにもならない」という歯がゆい状況を生む事があります。
とはいえ、Arduinoにより電子工作の間口が広がったのは確かですし、Arduinoで入門した初心者の何%かは、より専門的な勉強を始めるでしょう。また、回路設計のプロにおいても、Arduinoで試作時間が短縮した事により、色々なケースを想定して試作品をたくさん作る事が可能になりました。現在ではmbedなど、プロトタイピングが簡単・短時間にできるプラットフォームが増えましたが、それらのプラットフォームにもArduinoは多大な影響を与えており、一つの「文化」を作った功績は大きいと考えられます。