ラベル Arduinoの基礎 の投稿を表示しています。 すべての投稿を表示
ラベル Arduinoの基礎 の投稿を表示しています。 すべての投稿を表示

2010年1月24日日曜日

ArduinoでLEDを点滅させる

この投稿は、建築発明工作ゼミ2008を参考に、現在の仕様にあわせて新たに書き起こしたものです。
この投稿内容については、上記ブログ管理人のkousakuさんの許可を得ております。

Arduinoのスケッチは、基本的に以下のような構成になっています。

void setup(){

    //初期設定のプログラム
}

void loop(){

    //ループ処理のプログラム
}

setup()は、スケッチが実行される最初に、一回だけ実行される特別な関数です。『 { 』と『 } 』で囲い、その中に初期設定を記述します。
後述するスケッチでは、pinMode()を使って基盤上のどのピンを出力または入力で使いたいのかを設定しています。

setup()内の処理を終えると、次はloop()関数内の処理に移ります。
loop()は、setup()関数内の初期設定やsetup()上部で宣言された変数、defineで定義された定数などの設定値を使い、入力値の加工や、どのピンにどんな値をどのように出力すればよいかなどの計算をさせるための処理プログラムを記述します。
この中に記述された処理は、電源がつながっていてなんらかのトラブルがない限りループし続け、処理を続けます。

Arduino IDEでスケッチを書き、LEDを点滅させてみます。
まずは、以下のように、LEDをArduinoに直接セットします。
アノードはデジタル13ピン、カソードはGNDに接続します。


次にArduino IDEを起動させ、以下のようなスケッチを書いてみます。


スケッチの説明をします。
1. LEDのアノードを差し込むデジタルピンの番号を、任意でつけた "ledPin" という名前の変数に格納します。
変数とは、スケッチで扱う様々な値をいれておく箱のようなものと考えてください。この箱(変数)を使うと、スケッチ上のいろんな箇所で、変数名を記述するだけで入れておいた値を使う事ができます。もし変数を使わなかったら、上記の "ledPin" と記述されている箇所すべてに値(この場合は13という数値)を書き込まなければなりません。例えばもし「13」という値を変えてみたいと思った時に、"ledPin" と書かれている箇所すべてを書き直す事になります。変数を設定しておけば、1行目の「13」という値を書き換えるだけで済みます。
その他に様々な不便なことが出てくるのですが、今回は割愛します。

int ledPin = 13;

これは、整数型(integer)の値13を変数 ledPin に代入するという意味です。決してイコール(等号)ではないので、間違えないようにしてください。スケッチ内で等号を記述するときは、== と書きます。条件分岐の構文 if 文などでよく使います。プログラムでは、式の右辺から評価(大雑把に言うと計算するということ)し、左辺に代入もしくは比較します。

2. setup()関数(上記参照)

3. pinMode()関数で、"ledPin" の値(この場合は13)のピンを「OUTPUT」(出力)に設定します。

4. loop()関数(上記参照)。関数内の処理のループが始まります。

5. digitalWrite()関数で、"ledPin" の値(この場合は13)のピンを「HIGH」にします。つまり、13ピンに差し込んでおいたLEDのアノードに、5Vの電圧を出力します。そうすると、LEDが光ります。

6. delay()関数で、()内の指定したミリ秒だけ現状を維持します。1000ミリ秒、つまり1秒間LEDが光り続けます。

7. digitalWrite()関数で、"ledPin" の値(この場合は13)のピンを「LOW」にします。つまり、13ピンに差し込んでおいたLEDのアノードに、0Vの電圧を出力します。そうすると、LEDの光りが消えます。

6. delay()関数で、()内の指定したミリ秒だけ現状を維持します。1000ミリ秒、つまり1秒間LEDの光りが消え続けます。

-> 5. に戻って処理を繰り返します。


左側の数値はスケッチ説明用の行番号なので、実際に入力する必要はありません。
ArduinoをPCに接続し、ボードとシリアルポートの設定を確認します(ここの「Arduino ボードの選択」と「シリアルポートの選択」を参照)。
Arduinoボード上の「PWR」ランプが光っていることを確認したら、Arduino IDEの「Verify」ボタンをクリックします。スケッチに不備があれば、
スケッチ記述エリア下部のモニタにエラーメッセージが表示されます。
エラーがなければ、「Upload」ボタンをクリックしてArduinoボードにスケッチを送信します。
成功すれば、モニタに「Done uploading」と表示されます。
Arduinoに差し込んだLEDが、1秒のタームで点滅を始めるはずです。

2010年1月23日土曜日

電子回路の基礎 -1 Arduinoと電子回路


Arduinoを扱う上で、電子回路の知識は必須です。
Arduinoとはで説明した通り、Arduinoは様々なセンサとアクチュエータを繋げる便利なマイコンボードです。しかし、決して万能というわけではありません。
「入力」->「処理」->「出力」の流れの中の「処理」を担当する、人間で言えば脳の役割を果たしているのですが、脳は、それ自体では外部の情報を得たりものを動かしたりすることはできません。情報を得る時は目や耳などのセンサが必要になりますし、得た情報によってなんらかのアクションを起こしたい時には手や足などのアクチュエータが要ります。そして、脳に情報を送る、または手や足に命令を送るための経路も必要です。この経路が、エレクトロニクスの世界では電子回路になります。

電子回路ではさまざまな電子部品を使用し、電気の圧力(電圧)や量(電流)を制御します。電子部品にはそれぞれ明確な役割があり、それぞれの仕様に則って使わないと壊れてしまいます。Arduinoが受け取れる電圧の最大値も決まっていて、それを超えると壊れたり正しい値を受け取れなかったりします。いかに想定した範囲の電圧を精密にArduinoに送れるかがキーとなります。

例えば0℃〜100℃の温度を計測してArduinoに伝えたいとします。Arduinoへは温度の値を電圧に変換して送らなければなりません。デジタル入力ピンは0Vか5Vのどちらかしか伝える事はできないので、電圧を0〜1023の1024段階で受け取れるアナログ入力ピンを使います。Arduino自体の最大入力電圧は5Vです。つまり、0℃〜100℃の温度を電圧0V〜5Vの触れ幅に変換する回路を組む必要があります。0V〜5Vの電圧は0〜1023の値として、指定したアナログピンから取得できます。きちんと回路が組めれば、温度センサを使ってArduinoに送られた電圧が1.2Vだとすると、Arduinoはアナログピンから245(1.2V / 5V × 1024)という値を受け取るはずです。これは、1.2 / 5 × 100 で、約24℃という温度を計測したことになるわけです(『Arduinoで温度を計測する』参照)。

電子回路の基礎知識は、以下のサイトと書籍がたいへん参考になります。一見難しい記号や言葉が並んでいるようにみえますが、よく読むと、非常にわかりやすいです。
また、電子部品の販売店は主に以下の店がおすすめです。
初めてだとちょっと入りづらいかもしれませんが、気にする事なく通いつめましょう。

2010年1月22日金曜日

Arduino I/Oボード仕様概略

この投稿は、建築発明工作ゼミ2008を参考に、現在の仕様にあわせて新たに書き起こしたものです。
この投稿内容については、上記ブログ管理人のkousakuさんの許可を得ております。

Arduino Duemilanove 328(最もスタンダードなArduinoボード)

Arduino基盤には、大きく分けて以下のようなピンがあります。LED、センサ、アクチュエータ、その他電子部品を接続して使用します。
  1. デジタル入力ピン
  2. デジタル出力ピン
  3. アナログ入力ピン
  4. アナログ出力(PWM)ピン
  5. 5Vピン
  6. GND(グランド)ピン
1. デジタル入力ピン
基盤上方にあるDIGITAL0〜13番ピンについては、デジタル入出力の際に、使用するピンを出力用に使うのか、入力用に使うのかをプログラム上の pinMode()設定する必要があります。

digitalRead()では、HIGHかLOWの二段階の入力方法しかありません。LOWは0Vに、HIGHは5Vに対応します。あるいは、二進法ではLOWが0、HIGHが1、またboolean型変数におけるfalse/trueに対応します。(接続したセンサなどを通して、オンになっているのかオフになっているのかを読み取るときに使います)。
例えば、電源(5Vピン)からの電圧をスイッチでオン/オフ(0V/5V)できるような回路をデジタル入力ピンに接続すれば、スイッチの状態がオン(HIGH)かオフ(LOW)かをArduinoに伝える事ができます。

2. デジタル出力ピン
digitalWrite()も同様にLOW/HIGHの二段階の出力です。
例えば、LEDライトを付けたり消したりしたい時、デジタル出力ピンに抵抗とLEDを接続すれば、Arduinoで動いているスケッチ(プログラム)から、LEDライトをオン/オフできます。

Arduinoの5Vピンからの出力電圧は基本的には5V固定ですから、デジタル入力・出力とは、電気が流れている状態(5V)と、流れていない状態(0V)の二種類ということになります。スケッチ(プログラム)上では使われ方によって、下記のような記述方法を書き分ける必要があります。

3. アナログ入力ピン
analogRead()は、センサなどから0〜1023の1024段階の読み取りが可能です(0V〜5Vを1024段階に分けています)。
例えば、温度センサによって0℃ 〜 100℃を計測するとします。0℃ 〜 100℃の値はセンサと電子回路で0V〜5V(0〜1023)の1024段階に変換され、その電圧をアナログ入力ピンに入力すれば、温度センサがどれくらいの温度を感知したかをArduinoに伝えることができます。

4. アナログ出力(PWM)ピン
analogWrite()は、上方の3、5、6、9、10、11番ピンの6箇所に接続でき、0〜255の256段階の出力が可能です(0V〜5Vを256段階に分けています)。
例えば、温度センサからのアナログ入力によって得られた0〜1023の値(温度)によってモーターの回転数を変えたいとします。アナログ出力ピンに、入力値 / 4、つまり1024段階の値の1/4の値を出力させれば、アナログ出力とつながったモーターへ256段階のスピード調節の命令を伝えることができます。

アナログ入出力においては、pinMode()を設定する必要はありません。

5. 5Vピン
基盤の下方にある5Vピンからは、5V電圧をとることができます。

6. GNDピン
GNDピン(0V)は、上方13番ピンの隣と、下方5Vピンの隣に2つ、合計3箇所あります。

Arduino基盤では、基本的に、0〜5Vの電圧を扱います。参考までに、乾電池の基本電圧は1.5Vです。
通常は、USB接続によってパソコンから5V電源がArduino基盤に供給されます。外部電源から供給したい場合には、外部電源端子にバッテリやACアダプタ(6〜20V/推奨は7〜12V)などを接続します。