・空間内における制作物の配置、身体との関わり、空間全体のイメージなど(前回のコラージュ)を引き続き制作してきてください。
・使用される部品や材料なども持参して下さい。授業内で、個人ごとに制作の指導をします。
・必要に応じて「旋盤」「フライス盤」「ボール盤」で、金属部品制作(回転部分や固定部分の部品など)の実習も行う予定です。
四谷アートステュディウム・建築発明工作ゼミ(2008年度)の授業サブノート
主にProcessingやArduinoについて記載しています。
#define RANGE 8 // 8番ピンをRange端子に設定
#define GATE 9 // 9番ピンをGate端子に設定
#define CK 10 //10番ピンをCK端子に設定
#define DOUT 11 //11番ピンをDout端子に設定
int red,green,blue;//RGB三色の変数を用意
void setup(){
//Range,Gate,CK端子をデジタル出力に設定
pinMode(RANGE,OUTPUT);
pinMode(GATE,OUTPUT);
pinMode(CK,OUTPUT);
//Dout端子をデジタル入力に設定
pinMode(DOUT,INPUT);
//シリアル通信設定
Serial.begin(9600);
}
void loop(){
//測光時間用の可変抵抗器の読み込み(アナログ入力:0番ピン)
int val=analogRead(0);
//Gate,CK端子をLowに設定
digitalWrite(GATE,LOW);
digitalWrite(CK,LOW);
delayMicroseconds(2000);//2000マイクロ秒待機
//感度設定(HIGH:高感度に設定)
digitalWrite(RANGE,HIGH);
//測光開始(光量の積算を開始)
digitalWrite(GATE,HIGH);
//測光時間(valを代入し可変的に設定)
delay(val+1);
//測光終了(光量の積算を終了)
digitalWrite(GATE,LOW);
delayMicroseconds(4);//4マイクロ秒待機
red=shiftIn();//赤の処理
green=shiftIn();//緑の処理
blue=shiftIn();//青の処理
//Gate端子をHighに戻す
digitalWrite(GATE,HIGH);
//シリアル通信でProcessingへ三色の値を文字列で送信
if(Serial.available()>0){
Serial.print(red,DEC);
Serial.print(",");
Serial.print(green,DEC);
Serial.print(",");
Serial.println(blue,DEC);
Serial.read();
}
}
//12ビット分のパルス送信と読み込み処理
int shiftIn(){
int result=0;//検出結果用の変数を用意(0:初期化)
for(int i=0;i<12;i++){//12ビット分の繰り返し処理
digitalWrite(CK,HIGH);//1ビット分のクロックパルス出力(HIGH)
delayMicroseconds(1);//1マイクロ秒待機
if(digitalRead(DOUT)==HIGH){//Dout端子からの出力がHighの場合
result+=(1<<i);//12ビットのi桁目に1を代入(i桁分だけ左にシフト)
}
digitalWrite(CK,LOW);//1ビット分のクロックパルス出力(LOW)
delayMicroseconds(1);//1マイクロ秒待機
}
delayMicroseconds(3);//3マイクロ秒待機
return result;//結果を出力
}
//シリアルライブラリを取り込む
import processing.serial.*;
//シリアル通信用変数portを用意
Serial port;
//読み込み値(三色)の変数を用意
int r,g,b;
void setup(){
//画面サイズ設定
size(400,200);
//ポート設定
port = new Serial(this,"/dev/tty.usbserial-A6006kvP",9600);
//「10」(ラインフィード)までを読み込む設定にする
port.bufferUntil(10);
//外形線なし
noStroke();
}
void draw(){
//背景色(黒)
background(0);
fill(r,0,0);//値を塗色の赤に代入
rect(0,0,100,100);//赤の矩形
fill(0,g,0);//値を塗色の緑に代入
rect(100,0,100,100);//緑の矩形
fill(0,0,b);//値を塗色の青に代入
rect(200,0,100,100);//青の矩形
fill(r,g,b);//三つの値を塗色のRGBに代入
rect(300,0,100,100);//RGB合成した矩形
}
//シリアル通信
void serialEvent(Serial p){
//文字列の変数stringDataを用意し、
//「10」(ラインフィード)が来るまで読み込む
String stringData=port.readStringUntil(10);
//文字列データが空ではないとき
if(stringData!=null){
//文字列データに含まれる改行記号を取り除く
stringData=trim(stringData);
//整数型の配列data[]を用意し、
//コンマ記号をもとに文字列データを区切って
//配列data[]に整数化して入れておく
int data[]=int(split(stringData,','));
//配列data[]内のデータが3つなら、
if(data.length==3){
//三つの値をそれぞれマッピングして代入
r=int(map(data[0],0,4095,0,255));
g=int(map(data[1],0,4095,0,255));
b=int(map(data[2],0,4095,0,255));
//合図用データ送信
port.write(65);
}
}
}
//マウスが押されたら通信開始
void mousePressed(){
//開始用データ送信
port.write(65);
}