Arduinoマニュアル

第1章
はじめに
[開発環境]
演習室はすでに開発環境が整っています。C ドライブにあるArduino フォルダにある、
「arduino。exe」を実行すれば、すぐにプログラムの開発を行うことが出来ます。
以下の開発環境のセットアップ方法は、もし自宅で演習をしたい人がいれば参考にしてく
ださい。
・JAVA 実行環境
すでにインストール済みかもしれないので、開発環境の起動ができなければインストー
ルします。Sun のサイト(http://www.java.com/ja/)からダウンロードできます。
・ Arduino 開発環境
Arduino 公式サイト(http://www.arduino.cc/)から開発環境をダウンロードします。
Windows 環境での最新版は「arduino-1.0.1-windows.zip」というファイルをダウンロー
ド後に展開します。
・シリアルドライバ
Windows 環境の場合、Arduino 開発環境とともに展開され、「arduino-1.0.1」フォル
ダの中の「drivers」フォルダに「FTDI USB Drivers」があります。初めてArduino ボ
ードをUSB ケーブルで接続すると、ドライバを要求されます。その際、デバイスマネー
ジャーで状況を確認すると、Arduino UNOのドライバが正常でないとの表示になってい
ます。このドライバのプロパティを表示すると、「ドライバの更新」というボタンがあ
りますのでクリックします。次にドライバのある場所を手動で検索します。参照する場
所は「arduino-1.0.1¥drivers」です。これでドライバのインストールは完了します。他
のバージョンでもやり方は同じです。
Windows 環境の場合、Arduino 開発環境を展開したフォルダに入っている「arduino.exe」
を起動します(図1.1)。
[動作確認]
はじめて開発環境を使う際には、ここに示す動作確認を必ず行ってください。シリアルポ
ートの番号など、今後の開発で必要になる情報を確認します。
動作確認では、Arduino ボード上のLED を点滅させるプログラムを作成し、その動作を確
認します。
・プログラムの入力
開発環境のエディタ部分で以下のlist0101 を入力します(左の行番号は入力しません)。
図1.1 Arduino 開発環境
作成したプログラムを保存しておきます。[File]-[Save] メニューを選択して、Y ドライブ
の自分のフォルダに保存します。ファイルの拡張子は不要です。ファイル名で入力したフ
ォルダが作成され、その中にいくつかのファイルが保存されます。
図1.2 list0101 の入力
・コンパイル
[Sketch]-[Verify/Compile] メニューを選択すると、プログラムのコンパイルが行なわれ
ます。
「Binary sketch size: xxx bytes」と表示されればコンパイルに成功しています。
この表示の代わりに「error」などのメッセージが表示された場合は、プログラムにエラ
ーがあります(図1。3)。エラーメッセージに従ってプログラムを修正してください。
図1.3 コンパイルエラーのメッセージ
・プログラムのアップロード
プログラムのコンパイルに成功したら、コンパイル済みのプログラムをArduino ボード
へ送ります。この操作をアップロードと呼んでいます。
アップロードに使用するシリアルポートの設定を確認します。[Tools]-[Serial Port] メニ
ューを選択して、[COM4] にチェックが入っていることを確認してください。もし
[COM4] でなかったら、[COM4] を選択してください。
(注意:Serial Port は使用する環境によって異なります。環境に合わせてCOM4 など
の指定を変えてください)
[File]-[Upload to I/O Board] メニューを選択して、プログラムをアップロードします。
アップロードの中はArduino ボードにある“RX”と“TX”のLED が点滅します。もし点滅
しない場合は、シリアルポートの設定が異なっています。設定を変更して再度アップロ
ードをしてみてください。
アップロードが完了すると、プログラムは自動的に実行を開始します。先ほどのプログ
ラムでは、LED が1 秒間隔で点滅します。
RX+TX LEDs
Pin13 (L) LED
GND
Digital Pins (0~13)
USB
to computer
Reset Button
7 to 12V
DC input
Power Pins
図1.4 Arduino ボード
Analog Input Pins
第2章
Arduinoプログラム
Arduino のプログラムは、C 言語に似たプログラム言語を利用しています。ただ、次の点
で異なりますので、プログラムを作成する上では若干の注意が必要です。
• main 関数がない
main 関数の代わりに、setup 関数とloop 関数を使用します。
• #include が不要
• printf 関数やscanf 関数は使えない
Arduuino ボードにはディスプレイやキーボードが無いので、これらの関数も使えません。
次に、第1 章で使ったプログラムについて解説していきます。
プログラムには、setup 関数とloop 関数が必ず必要です。setup 関数はプログラム開始時
に一度だけ呼び出されます(一度だけ実行されます)。一方、loop 関数はプログラム実行
中に繰り返し呼び出されます。
それぞれの関数での処理について説明していきます。
・setup 関数
setup 関数では、「pinMode(ledPin, OUTPUT);」としています。pinMode 関数は、
Arduinoボードの入出力を設定します。ここではledPin をOUTPUT としています。つ
まり、ピン番号13 を出力としています。
・loop 関数
loop 関数では、digitalWrite 関数によるピンへの出力と、delay 関数による時間待ちを
しています。10 行目のdigitalWrite 関数では、ledPin へHIGH を出力しています
(ledPinはOUTPUT になっているので出力できます)。
delay 関数は、一定時間の時間待ちをします。delay 関数は、待つ時間をミリ秒(1000 分
の1 秒)で指定します。
次に電子回路の説明をします。
電子回路の説明では、Arduino ボードの回路図を使います。回路図はArduino 公式サイ
トの“Arduino Duemilanove”のページからダウンロードできます。
「http://arduino.cc/en/Main/ArduinoBoardDuemilanove」にあるSchematicでPDFファ
イルになっています。事前に準備しておいてください。
・digitalWrite 関数の出力
プログラム中のdigitalWrite で、信号を出力しています。出力する値は、LOW または
HIGH のいずれかです。出力ピン(今回のプログラムではピン番号13)には、LOW が
出力された場合は0V が、HIGH が出力された場合は5V が出力されます。
それぞれのピン番号は、回路図だけでなく、Arduino ボードにも印刷されています。ピ
ン番号13 は、図2.2 のような位置にあります。
・LED の点灯
プログラムの「digitalWrite(ledPin, HIGH);」によって、ピン番号13 にHIGH が出力さ
れることは、回路図ではAVR マイコンの“SCK(PB5)”の電位が5V になることを意味して
います。つまり、LED が接続されている線(“SCK(PB5)”~ピン番号13)が5V になり
ます。一方、LED の反対側は“GND”となっていますが、これはグランド(接地)を示し
ていて、Arduino ボードでは0V です。
LED のアノード側が5V で、カソード側が0V なので、アノードからカソードへ電流が
流れます(これを順電流と呼んでいます)。これにより、LED が点灯します。
図2.1 Arduino ボードの回路図(一部抜粋)
ピン番号 13
図2.2 Arduino ボードのピン番号
図2.3 LEDへの出力
第3章
回路の作成
[ブレッドボードの使い方]
Arduino ボード本体で利用できる入出力は、LED が1 つだけであり、これではさまざま
な演習を行なっていくことができません。そこで、ブレッドボードと呼ばれる板を利用し
て、さまざまな回路を作成していくことにします。
ブレッドボードは、図3.1 のように、ピン穴が電気的につながっています。ブレッドボード
を使うことで、部品を差し込むだけでさまざまな回路を作成できます。
+と-は横方向に導通している
それ以外は縦方向に導通している
図3.1 ブレッドボード
ブレッドボードを使って、LED を点滅させる回路を作成していきます。まず、回路図を作
成します。回路図の作成にはさまざまなルールがあるのですが、ここでは自分が理解でき
れば十分なので、自分にとってわかりやすいように作成してみてください。
たとえば、図3.2 のような回路図を作成しました。
この回路図に従って、ブレッドボードに部品を配置していきます。必要な部品は、LED、
抵抗です。
ブレッドボードに部品を配置していきます。必要な部品はLED と抵抗です。それぞれの部
品を確認しておいてください。抵抗は1KΩ を使いますので、10 × 102 となり、カラーコ
ードは「茶・黒・赤」です。また、LED は足の長い方がアノード側(回路図にあるLED の
▽の側)です。
図3.2 ブレッドボード
これらの部品をブレッドボードに差し込みます。ブレッドボードの導通の方向に注意して
ください。
図3.3 部品の配置
今回、Arduino ボード側のピン番号0 を使うことにします。ピン番号は0~13 を使うこと
ができます。Arduino ボード側のピン番号0 とGND を、それぞれブレッドボードに接続
します。GND の接続を忘れないように気をつけてください。
[プログラム作成]
作成するプログラムは、list0101 とほぼ同じですが、ピン番号が0 となっている点に注意
してください。このプログラムをlist0301 として保存しておきます。
図3.4 ピン番号0とGNDの接続
プログラムをコンパイルしてアップロードすると、ブレッドボード上のLED が点滅します。
※プログラムが正しく動作しない場合、その原因はプログラムまたは回路にあります。こ
のように、ソフトウェアとハードウェアのことを同時に考えて行かなくてはならない点が、
組み込みシステムが難しいと言われている理由です。
見方を変えれば、組み込みシステムの技術者は、ソフトとハードの両方で能力を発揮でき
るという優位性もあります。
図3.5 実行結果
第4章
プロジェクトの説明
[ LEDの明るさ制御]
LED の明るさを制御します。
LED の明るさを変えるためには、LED に流す電流(または、抵抗を含めた電圧)を変化
させる必要があります。しかし、Arduino ボードの出力はHIGH(5V) またはLOW(0V) の
みです。そこで、PWM と呼ばれるデジタル制御方式で、LED の明るさを変化させます。
・作成するシステム
消灯状態のLED が次第に明るくなり、2 秒かけて最大輝度に達する。1 秒間は最大輝
度のまま点灯する。その後、次第に暗くなり、4 秒かけて消灯状態になる。
・使用する部品
LED
抵抗(1KΩ)
[セグメントLEDの制御]
7 セグメントLED を使って、カウンタを作成します。7 セグメントLED は、いわゆる「デ
ジタル数字」の表示に使われる発光素子です。この7 セグメントLED の1 桁を点灯させる
には、8 つの信号を制御しなくてはなりません(7 セグメントの信号とGND)。
ここでは、7 セグメントLED を使って2 桁のカウンタを作成します。2 桁のカウンタでは、
00~99 までをカウントできます。ここで問題になるのは、Arduino ボードの出力ピンの
個数です。
Arduino ボードには14 本(ANALOG も利用すると19 本)の出力ピンがあります。この
ままでは、出力ピンの数が不足します。
そこで、7 セグメントLED のダイナミック点灯(ダイナミック表示)という技術を使いま
す。
・作成するシステム
7 セグメントLED を2 つ使ってカウンタを作成する。このカウンタは、00 から01、
02、とカウントアップしていき、59 まで出力する。カウンタの値は1 秒ごとに増加す
る。59 の次は00 に戻る。従って、このカウンタを実行すると、デジタル時計の「秒」
の部分を実現したことになる。
・使用する部品
7 セグメントLED × 2
抵抗(1KΩ)× 8
[LEDマトリクスの点灯]
※今年度の教材にはありません。
64 個のLED が8 × 8 の格子状に並んだLED マトリクスを点灯させます。通常、64 個の
LED を点灯させるには、64(各LED のアノード)+1(カソード)の信号が必要になりま
すが、65 個の信号を制御するのは困難なため(当然コストの問題もあります)、LED の
アノードとカソードをそれぞれ制御します。
・作成するシステム
8 × 8 のLED マトリックスを使って自分の名字のイニシャル(たとえば、田中ならT)
を出力する。8x8 の出力が難しければ、6x6 としてもよい。さらに可能であれば、名
字と名前を1 秒ごとに表示を切り替えて出力する。
・使用する部品
LED マトリックスパラライト社TOM-1588BH-B
抵抗(1KΩ)× 8
[光センサによるLEDの自動点灯]
CdS 光センサを使って、周囲が暗くなると自動的にLED が点灯する仕組みを実現します。
暗くなると点灯し、明るくなると消灯する仕組みは、照明を自動制御する仕組みとして役
立つ内容です。
CdS は、その名の通りCdS を材料とする半導体センサで、明るさによって抵抗値が変化す
る特性を持っています。このセンサは、その抵抗値のみが変化するため、抵抗値の変化を
電圧の変化に変える仕組みが必要となります。
・作成するシステム
光センサを使い、暗くなるとLED が点灯し、明るくなるとLED が消灯するシステム
を作る。LED の光が直接光センサに入ってしまうと誤動作をするので、この点には注
意する。光センサを手で覆うとLED を点灯させるようにする。
・使用する部品
LED
CdS 光センサ
[音の発生]
圧電素子(圧電スピーカ)と呼ばれる部品を使って、音を出します。圧電素子は、携帯電
話の着信音などでも利用されています。
圧電素子の原理を理解した上で、音を出す仕組みを考えていきます。ある高さの音を出力
するには、その周波数の振動を発生させることになります。この振動の発生に圧電素子を
使います。
・作成するシステム
圧電素子を使って、「ド」「レ」「ミ」の3 音を1 秒ずつ出力する。
・使用する部品
圧電素子(圧電スピーカ)
[電子オルゴールの作成]
「音の発生」を応用することで、電子オルゴールを作ることができます。
・作成するシステム
電子オルゴールを作る。
・使用する部品
圧電素子(圧電スピーカ)
第5章
関数リファレンス
[設定関係]
設定関係の関数は、主にsetup 関数で使用します。
pinMode
Arduino ボードの入出力ピンについて、入力または出力を設定します。設定しない場合は
「入力」となります。
・ pinMode 関数
ピン番号:Arduino のピン番号を指定します
モード:INPUT またはOUTPUT を指定します
[入出力]
Arduino ボードの入出力ピンは、デジタル入出力を行なう際はデジタルピン番号で、アナ
ログ入出力を行なう際はアナログピン番号で指定します。デジタルピン番号は「0~19」を
指定できます。
デジタル入出力については、Arduino ボード上で「DIGITAL」の「0~13」がデジタルピ
ン番号「0~13」です。また、「ANALOG」の「0~5」がデジタルピン番号「14~19」に
割り当てられています。
最大40mA 程度の出力が可能です。LED などの電子部品に直接40mA もの電流を流すと
破損します。必ず抵抗を使って流れる電流を抑制してください。
digitalWrite
出力に設定されたピンから、デジタル値を出力します。デジタル値はLOW またはHIGHで、
それぞれ0V と5V の出力になります。
・digitalWrite 関数
ピン番号:Arduino のデジタルピン番号を指定します
出力値:LOW またはHIGH を指定します
digitalRead
入力に設定されたピンから、デジタル値を入力します。この関数は、入力されたデジタル
値に対して、LOW またはHIGH を返します。
・digitalRead 関数
ピン番号:Arduino のデジタルピン番号を指定します
analogWrite
出力に設定されたピンから、アナログ値を出力します。アナログ値は約490Hz のPWM で
制御されています。analogWrite 関数で指定した値(0~255)が0~5V として出力されま
す。
・analogWrite 関数
ピン番号:Arduino のアナログピン番号を指定します
出力値:0~255 の整数を指定します。
analogRead
入力に設定されたピンから、アナログ値を入力します。10 ビットのA/D 変換により、0~
5V の電圧を、0~1023 の整数値として得ることができます。
・analogRead 関数
ピン番号:Arduino のアナログピン番号を指定します
[タイマー]
delay
一定時間、処理を停止させます。
・delay 関数
時間:停止する時間(単位はミリ秒)を指定します。
delayMicroseconds
一定時間、処理を停止させます。
・delayMicroseconds 関数
時間:停止する時間(単位はマイクロ秒)を指定します。
millis
Arduino ボードが起動してからの時間を整数で返します。単位はミリ秒です。
・millis 関数
micros
Arduino ボードが起動してからの時間を整数で返します。単位はマイクロ秒です。約70 分
で0 に戻ります。
・micros 関数
[シリアル通信]
Arduino はUSB を通してパソコンとシリアル通信を行うことが出来ます。
Sirial.begin
シリアル通信のデータ転送レートをビット/秒で指定します。コンピュータと通信する際は
以下のレートから一つを選びます。
300、 1200、 2400、 4800、 9600、 14400、 19200、 28800、 38400、 57600、 115200
他の転送レートを必要とするコンポーネントをピン0 と1 につないで使う場合、上記以外
の値を指定することも可能です。
ビット/秒 データ転送レートを指定します。
Sirial.end
シリアル通信を終了し、RX とTX を汎用の入出力ピンとして使えるようにします。再度シ
リアル通信を有効にしたいときは、Serial.begin()を コールしてください。
Sirial.print
人が読むことのできる形式(ASCII テキスト)でデータをシリアルポートへ出力します。
この命令は多くの形式に対応しています。数値は1 桁ずつASCII 文字に変換されます。浮
動小数点数の場合は、小数点以下第2 位まで出力するのが デフォルトの動作です。バイト
型のデータは1 文字として送信されます。文字列はそのまま送信されます。
val:出力する値。すべての型に対応しています。
format:基数または有効桁数(浮動小数点数の場合)
Sirial.println
データの末尾にキャリッジリターン(ASCII コード13 あるいは'¥r')とニューライン(ASCII
コード10 あるいは'¥n')を付けて送信します。このコマンドはSerial.print()と同じフォーマ
ットが使えます。
data:すべての整数型とString 型
format:data を変換する方法を指定します(省略可)