今週のインタラクションデザインの授業は、電子工作とFlashのインテグレーションだった。

が、シリアルプロキシのFNCCが使えないMacユーザがいたので、Processing+Arduinoバージョンをさくっと作って教えた。

Arduinoでセンサーの値を読み取って、500以上なら’1’、500以下なら’0’をシリアル通信でPCに送る。それをProce55ingで受け取って、円を大きくしたり小さくしたりする。

大体Wiring – デジタル入出力、シリアル通信、Proce55ingと連携Wiring – A/Dコンバータで距離センサを合体させて、Arduinoバージョンにした感じですね。

回路もプログラムも簡単なので、ArduinoとProce55ingと部品さえ揃っていれば3分ぐらいで作れる



CdS(光センサ)に手をかざすと円が小さくなる。離すと大きくなる

SourceCode(arduino 0005)

proce55ingは、sketch->example->LibrarySerial->BinaryInputを2行改造しただけなので後述します



■Arduinoと回路

10kΩの抵抗と、CdSが必要。

ArduinoのVCCとGNDから線を引き出す。CdSからのアウトを10kΩを通したGNDと、ArduinoのADC0に戻す。

Quick PhysicalComputing-demo by Arduino and Proce55ing

SourceCode(arduino 0005)

int ad;
void setup(){
Serial.begin(9600);
}

void loop(){
ad = analogRead(0);
if(ad > 500){
Serial.println('1');
}
else{
Serial.println('0');
}
delay(100);
}

AD値が500以上かどうかで判断しているだけ。シングルクオートでくってSerial.printlnしてるのは、数字ではなく文字(アスキーコード)で送った方がシリアル通信が直接見えてデバッグ時にわかりやすいから。

プログラムを書き込んでみたら、ArduinoのSerialMonitorで見てみるとわかる。

しかし、Arduinoぐらいになると、ADC使うためのレジスタ操作が少ないから普通のスイッチを組むよりアナログセンサーを使ったほうが簡単に出来ちゃうな。

■Proce55ing

サンプルを改造するだけで簡単にできる。

メニューの[File]→[Sketchbook]→[Examples]→[Library-Serial]→[BinaryInput]を開く。

Windowsの場合は、36行目を

port=newSerial(this,Serial.list()[0],19200);

から

port=newSerial(this,”COM10″,9600);

に直す。COM10の所は適宜Arduinoの書き込みに使ったポートにする。

Macの場合は

port=newSerial(this,Serial.list()[0],9600);

にするだけで良い。駄目なら[0]を[1]とか[2]に増やして行けばいいはず。

ちなみにArduinoIDEのSerialMonitorを開いている時は、ArduinoIDEがポートを占有してしまっているのでProce55ingからはシリアルポートが開けない。