2013/12/31からのアクセス回数 12905
Arduinoやmbedが急速に普及し、ハードや制御とは全く縁のないような美術系の学生までが、アイデアを形にするために 活用しています。
ここでは、ブレッドボードでの配線も面倒という方にお薦めのボードProtoSnap Pro Miniを使ってArduinoの使い方を説明します。 参考にするのは、このボードの開発元のsparkfunの ProtoSnap Pro Mini QUickstart Guide です。
新しく何かをするときには、動き出すまでの「最初の一歩」が大切です。
ProtoSnap Pro Miniには、Arduinoを試すために必要な以下のものが一つにパッケージされています。
これらの部品は切り離してブレッドボードでの実験の部品としても使えますが、最初は切り離さずにそのまま使います。
予め各部品はArduino Pro Miniとつながっており、箱から出したままで部品の使い方をマスターすることができるようになっています。
部品とArduino Pro Miniのピンの接続は以下のようになっています。
部品のピン | Arduino Pro Miniのピン |
ボタン | 7 |
光センサー | A0 |
緑のLED | 5 |
青のLED | 6 |
赤のLED | 3 |
ブザー | 2 |
[Arduinoのダウンロードサイト>http://arduino.cc/en/Main/Software]]から自分のパソコンのOSに合ったArduino IDE*1をダウンロードします。 私の場合Mac OS Xなので、arduino-1.0.5-macosx.zipをダウンロードし、それをアプリケーションにコピーするだけでした。
Windowsの場合には、FTDIのドライバーをインストールする必要があります。 FTDIのサイトを参照してインストールしてください。
Arduino IDEの素晴らしい機能にサンプルプログラムを読み込みがあります。 これを使えば、プログラムをタイピングすることなくArduino上での動作の確認ができます。
Arduinoでは、Arduinoを制御するプログラムのことをスケッチと呼びます。
例題プログラムとしてLEDをピカピカさせるBlinkスケッチをロードします。
ファイル→スケッチの例→01.basics→Blinkを選択すると、以下の様な画面が表示されます。
プログラムの書き込みの前にUSBミニBケーブルでPCとProtoSnap Pro Miniをつなぎます。 この時Arduino Pro Miniの赤いLEDが点灯していることを確認します。
続いて、ツール→マイコンボード→Arduino UNOを選択します。*2
プログラムの書き込みはUSBで接続されている通信ボードFTDI Basicを使って行います。 通信を行う際には、シリアルポートを指定する必要があります。 ルール→シリアルポート→/dev/tty.usbserial-xxxxxxというポートを選択します。
最後に先の画面説明で赤で囲った書き込み用ボタンをクリックします。 プログラムのコンパイルを行った後、下部のメッセージに「マイコンへの書き込みが完了しました」が表示されれば書き込み成功です。
Arduino Pro Miniの緑のLEDがピカピカ点滅していることを確認してください。
これで、Arduino IDEの環境が正しく動き、Arduinoのスケッチが動作することが確認できました。
続いてProtoSnap Pro Miniに付いている部品の使ってみましょう。
Arduinoの日本語のマニュアルが武蔵野電波のホームページ Arduinoマニュアル に公開されていますので、分からない場合は参照して下さい。
ボタンスイッチのピン番号は7、LEDのピン番号は13に割り当てられています。 デジタルの入力や出力を行う関数としてpinModeとdigitalRead, digitalWriteが用意されています。 これらを使ってボタンが押された時にLEDが点灯するスケッチを作ってみましょう。
Arduino IDEからファイル→新規ファイルを選択し、以下のスケッチをコピーし、新しいスケッチの 貼り付けてください。
int buttonPin = 7; // ボタンは 7番ピンにつながっています int ledPin = 13; // LEDは 13番ピンにつながっています int buttonStatus; // ボタンの状態を保持するための変数 void setup() { pinMode(buttonPin, INPUT); // ボタンピンを入力として初期設定 pinMode(ledPin, OUTPUT); // LEDピンを出力として初期設定 } void loop() { /* 最初にボタンの状態を読み込みます HIGH = ボタンが押されていない状態 LOW = ボタンが押されている状態 */ buttonStatus = digitalRead(buttonPin); if (buttonStatus == LOW) { digitalWrite(ledPin, HIGH); // ボタンが押されていたらLEDを点灯する } else { digitalWrite(ledPin, LOW); // そうでなければLEDを消す } }
先ほどと同様に書き込みボタンをクリックしてスケッチをArduinoに書き込みます。 ボタンを押すとLEDが点灯することを確認してください。
ボタンを押したときにLOWになっている理由を説明します。 ボタンの回路は、以下の様になっています。D7の先に10KΩの抵抗がVCCにつながり、 D7の先にスイッチがつながっています。 スイッチが押されていない時にD7をHIGHとするために、抵抗がつながっており、これをプルアップ 抵抗といいます。スイッチを押すとスイッチの先のGNDにつながるため、D7の電圧が0となりLOWが スイッチの値となるのです。
LEDの色を変えるには、LEDのオンとオフを繰り返すPWMという方法を使用します。 この時のオンとオフの割合でLEDの色合いを調節しています。ArduinoのanalogWriteは アナログと名前が付いていますが、実際にはデジタル制御でアナログと同様の効果を出しています。
先ほどのスケッチを以下のスケッチと入れ替えて、Arduinoに書き込んでください。
int redPin = 3; // 赤色のLED int greenPin = 5; // 緑色のLED int bluePin = 6; // 青色のLED void setup() { /* カラー(RGB)LEDを出力として初期化 */ pinMode(redPin, OUTPUT); pinMode(greenPin, OUTPUT); pinMode(bluePin, OUTPUT); analogWrite(redPin, 0); // 赤色を常にオン analogWrite(greenPin, 255); //緑色を完全にオフ analogWrite(bluePin, 220); // 青色を少しオン } void loop() { /* LEDの色合いを少しずつ変えます */ /* 最初に赤が点灯し、だんだん暗くなっていき、最後に消えます */ for (int brightness=0; brightness<=255; brightness++) { analogWrite(redPin, brightness); delay(5); // delay a bit for visibility } /* 次に逆に赤色がだんだん明るくなります */ for (int brightness=255; brightness>=0; brightness--) { analogWrite(redPin, brightness); delay(5); // delay a bit for visibility } }
Arduino Pro MiniのLEDの回路は、以下の様になっています。青く囲んだ部分をみてください。 Greenと書かれたLEDの向きがGNDに向かっていますので、ピンがHIGHの時にLEDが点灯します。
それに対して、カラー(RGB)LEDの回路を見ると、LEDの向きがVCC(電源)から抵抗に向かってつがっています。 これだとピンの値がLOWの時にLEDが点灯します。 それで、明るさを調整する時に指定する値(0-255)が逆になっているのです。
これまでは、デジタルピンを使ってきましたが、電圧を読み込む場合にはアナログピンを使用します。
アナログピンの電圧を読み込むときには、analogRead関数を使います。analogReadは読み込んだ電圧を0-1023の値に変えて教えてくれます。Arduino Pro Miniの電圧が5Vなので、1023で5V、512で2.5Vを相当します。
光センサーは、A0のアナログピンにつながっていますので、光センサーの電圧を読み込むスケッチではlightPinとしてA0を使います。
先ほどのスケッチを以下のスケッチと入れ替えて、Arduinoに書き込んでください。
int lightPin = A0; // 光センサーはA0につながっている int lightReading; // 光センサーからの値を保持する変数 void setup() { /* シリアル通信の速度を9600ボーにセットし、最初にHello…のメッセージを表示する */ Serial.begin(9600); Serial.println("Hello world, let's read some light sensors!"); } void loop() { lightReading = analogRead(lightPin); // 光センサーから値を読み込む Serial.println(lightReading, DEC); // 読み込んだ値をシリアル通信を使ってシリアルモニターに送る delay(250); // 次の読み込みまで待つ }
結果を見るには、Arduino IDEのシリアルモニターを使用します。 ツール→シリアルモニターを選択し、シリアルモニターを開きます。 以下の様な画面が表示されますので、通信速度が9600 baudになるようにセットしてください。 明るさによって出力される値が変わりますので、試してみてください。
ブザーを使った例題は分かりづらいので、Arduino in Actionの例題を使って説明します。
シリアルモニターを使ってド、レ、ミ、ソ、ラの音を1, 2, 3, 4, 5の数字で指定するスケッチを作ってみましょう。 ブザーの出力は2番ピンを使い、tone関数を使って音の高さと鳴る時間を指定します。
// Tone int toneDuration = 40; // 音のでる間隔 int speakerPin = 2; //ブザーのピン番号 int index = 0; int tones[]={262,294,330,392,440}; // ド、レ、ミ、ソ、ラ void setup() { /* シリアル通信の速度を9600ボーにセットし、最初にHello…のメッセージを表示する */ Serial.begin(9600); Serial.println("Input [1-5]!"); } void loop() { index = Serial.read(); if (index >= '1' && index <= '5') { index = index - '1'; tone(speakerPin, tones[index], toneDuration); } delay(500); // 次の読み込みまで待つ }
シリアルモニターに123 123 4321232と入力してみてください。なんか懐かしいメロディーが聞こえてきませんか。
皆様のご意見、ご希望をお待ちしております。