ひきつづき前回利用したマトリクスLEDを使用しつつ、ProcessingによるWebカメラと連動させる演習を行う予定です。
前回のマトリクスLEDについては、このページ(2008建築発明工作ゼミ)を参考に配線ならびに点灯実験を行ってきてください。使用しているマトリクスLEDによっては、配線番号や極性が異なることがあるので、各自確認してきてください(分からなければ、次回の授業で)。
必要なもの:
・ノートパソコン (ArduinoとProcessingをインストール済み)
・Arduinoボード+USBケーブル
・ブレッドボード(できれば小型なもの2個)
・ジャンパワイヤー(オスーオスタイプ:できれば20本以上)
・マトリクスLED(アノードコモンタイプ)
・Webカメラ(ノートパソコン内蔵型も可)
Arduino側のプログラム(アノード/カソードコモンで極性が逆の場合は、digitalWrite()内のHIGH/LOWを逆にしてください):
//8x8の二次元配列を用意 byte matrix[8][8]; void setup(){ //出力ピンの設定、すべてオフにする for(int i=2;i<=17;i++){ pinMode(i,OUTPUT); digitalWrite(i,LOW); } //シリアル通信開始 Serial.begin(9600); } void loop(){ //シリアル通信(64個分のデータ) if(Serial.available()>63){ for(int k=0;k<8;k++){ for(int l=0;l<8;l++){ //読み込んだ値を配列に代入 matrix[k][l]=Serial.read(); } } } //各LEDの点灯制御 for(int i=2;i<=9;i++){ //列の点灯 digitalWrite(i,HIGH); //極性が逆の場合HIGHをLOW for(int j=10;j<=17;j++){ //行の点灯 digitalWrite(j,LOW); //極性が逆の場合LOWをHIGH
//行の点灯継続時間 delayMicroseconds(1+matrix[i-2][j-10]); //行の消灯 digitalWrite(j,HIGH); //極性が逆の場合HIGHをLOW
//行の消灯継続時間 delayMicroseconds(256-matrix[i-2][j-10]); } //列の消灯 digitalWrite(i,LOW); //極性が逆の場合LOWをHIGH
} }
Processing変更版:
import processing.video.*;
import processing.serial.*;
Capture cam;
Serial port;
int w=640; //画面幅
int h=480; //画面高さ
int s=60; //モザイク一辺のサイズ
boolean start=false; //シリアル通信開始用フラグ
int[] pixelValue=new int[64];
void setup() {
size(w,h);
cam = new Capture(this, w,h);
cam.start();
stroke(1); //モザイクの外形線の色
//noStroke(); //外形線なしの場合
}
int cnt=0;
void draw() {
if (cam.available() == true) {
cam.read();
for(int i=0; i<w*h;i++){ //カメラ画像を8x8のモザイク画像に変換
int x=i%w;
int y=i/w;
if(x%s==0 && x/s<8 && y%s==0){
fill(cam.pixels[i]);
rect(x, y, s, s);
pixelValue[cnt]=int(brightness(cam.pixels[i]));
cnt++;
if(start){
int pixColor=int(brightness(cam.pixels[i]));
port.write(pixColor); //色データ値送信
}
}
}
}
println(cnt);
cnt=0;
}
void mousePressed(){ //クリックでシリアル通信開始または停止
start=!start;
if(start){
port=new Serial(this,"/dev/tty.usbserial-A40014iU",9600);
}else{
port.stop();
}
}
0 件のコメント:
コメントを投稿