今週のインタラクションデザインの授業は、電子工作と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に戻す。
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からはシリアルポートが開けない。