5 ProcessingでArduinoのLEDを制御 [PhysicalPixe]
ArduinoボードのLEDの On/Off をPCで動くProcessingからコントロールします。
Macの画面には、小さま四角がウインドの中央に表示されます。四角の上にマウスポインタを重ねると、Arduinoボードの「L」LEDが点灯し、四角から離れると消灯します。
必要なハードウエア
この記事を実行するのに必要なハードウエアは以下の通りで、電子部品を追加する必要はありません。
- Arduino
- USBケーブル
- Mac
動作確認
動作確認は以下の手順で行います。
- Arduino IDE にスケッチを書く
- Arduinoボードにスケッチ書き込む
- Processing IDE にスケッチを書く
- Processing を実行する
1. Arduino IDE にスケッチを書く
Arduino IDE に組み込まれているサンプルスケッチを利用します。
Arduino IDE のメニューから
ファイル -> スケッチ例 -> 4.Communicattion -> PhysicalPixel
と選択してください。読み込まれたスケッチには、説明が多く記入され、また、Processing のプログラムコードもコメント欄に書かれているため長いスケッチになっています。
しかし、実際に Arduino に書き込まれるコードだけを取り出すと至ってシンプルな内容です。参考のために以下に動作に関連する部分だけを取り出し日本語化したリストを掲載します。
/*
Physical Pixel
Arduinoボードを使用してコンピューターからデータを受信する例
Arduinoボードが文字「H」を受信するとLEDをオンにし、
文字「L」を受信するとLEDをオフにする。
データは、Arduinoシリアルモニター、またはProcessing
などの別のプログラムから送信できる。
- 内蔵の「L」LED 使用する
*/
const int ledPin = 13; // 内蔵の「L」-LED
int incomingByte; // 受信したシリアルデータ
void setup() {
Serial.begin(9600); // シリアル通信の初期化
pinMode(ledPin, OUTPUT); // 「L」LED pin 初期化
}
void loop() {
if (Serial.available() > 0) { // データを受信したら
incomingByte = Serial.read(); // バッファから読み取る
if (incomingByte == 'H') { // 'H' なら
digitalWrite(ledPin, HIGH); // LED 点灯
}
if (incomingByte == 'L') { // 'L' なら
digitalWrite(ledPin, LOW); // LED 消灯
}
}
}
2. Arduinoボードにスケッチ書き込む
Arduino IDE にスケッチが読み込まれたら、➡︎ ボタンをクリックして Arduinoマイコンボードにスケッチを書き込みます。
3. Processing IDE にスケッチを書く
Arduino IDE に読み込んだスケッチの後半に、コメントとして Processing IDE 用のスケッチが書かれています。その部分をコピーして Processing IDE にペーストしても構いませんが、以下に該当部分を抜き出して英語のコメントを日本語化したスケッチを示しますので、こちらを利用してください。
// Mouse over serial
// マウスが画面中央の四角と重なったときにLEDを点灯させ、
// 離れたときに消灯させるためには
// どのように、Arduinoボードにデータを送信するかを示します。
import processing.serial.*;
float boxX;
float boxY;
int boxSize = 20;
boolean mouseOverBox = false;
Serial port;
void setup() {
size(200, 200); // ウインドのサイズ
boxX = width / 2.0; // 四角は画面の
boxY = height / 2.0; // 中央に位置を定める
rectMode(RADIUS);
// 接続しているシリアルポートを書き出す
printArray(Serial.list());
// Arduino が接続されているポート番号でポートをOpenする。この例では、#2
// 通信速度も、Arduino が使用している通信速度にする。 (9600bps)
port = new Serial(this, Serial.list()[2], 9600);
}
void draw() {
background(0); // 背景は黒
// マウスカーソルが四角と重なっているかを検査
if (mouseX > boxX - boxSize && mouseX < boxX + boxSize &&
mouseY > boxY - boxSize && mouseY < boxY + boxSize) {
mouseOverBox = true; // 重なっていれば、
stroke(255); // 次に描く四角の枠を白に
fill(153);
port.write('H'); // Arduino に 'H' を送信
}
else { // 離れていれば、
stroke(153); // 次に描く四角の枠を灰色に
fill(153);
port.write('L'); // Arduino に 'L' を送信
mouseOverBox = false;
}
// 四角を描く
rect(boxX, boxY, boxSize, boxSize);
}
4. Processing を実行する
Processing IDE にスケッチを書き込んだら、▶︎ ボタンをクリックして Processingを実行します。
実行されると、Processing IDE のコンソール部に、 Maに接続されているポートの情報が表示されます。
さらに、Mac画面ほぼ中央に、中央に四角のボックスのあるウインドが表示されます。
四角の上にマウスポインタを重ねると、Arduino ボード上の「L」LED が点灯します。四角からマウスを話すと消灯します。
[トラブルシュート] LEDがコントロールできない時
動作しない多くの理由が、Arduino 接続ポートの誤指示です。
- Processing IDE のコンソール部を確認し、"/dev/cu.usbmodem14xxx" と表示されている番号、下記リストの例では [2] を確認する。
- スケッチの ". list( ) [ ]" のインデックス番号と一致しているか確認する。
- 参考
Maに接続されているポートの情報には、/dev/cu と /dev/tty 2種類がが表示されます。歴史的に、tty (TeleTYpe)デバイスは受信、cu (Call Up)デバイスはモデムなどの送信に利用されてきた経緯があるため、2種類のデバイスが用意されています。
なお、どちらのデバイスを使用しても Arduino は正常に動作しました。
次回は、ArduinoボードのLEDの明るさをPCで動くProcessingからコントロールするサンプルスケッチを紹介します。