2013年9月10日火曜日

9/30の授業:マトリクスLED

次回は3週間後の9/30になります。
次回は主にArduinoをつかって、マトリクスLED制御の演習を行う予定です。
前回のWebカメラ演習とも関連した内容となります。ひきつづき複数の画素制御について演習していきます。
尚、マトリクスLEDについては以下のものを用意してきてください。

必要なもの:
・ノートパソコン
・Arduinoボード+USBケーブル
ブレッドボード(できれば小型なもの2個)
ジャンパワイヤー(オスーオスタイプ:できれば20本以上)
マトリクスLED(アノードコモンタイプ)
*マトリクスLEDには、アノードコモンタイプとカソードコモンタイプがあります。複数のLEDの陽極(+)を共有接合してあるものか、陰極(ー)を共有接合してあるものかになりますが、今回はアノードコモンタイプを使う予定です(入手困難であればカソードコモンタイプでも構いません)。
また、マトリクスLEDがブレッドボードに対してサイズが大きいので、できれば小型なブレッドボードを2枚用意して、その2枚にまたがるように配置するとつかいやすくなります。
上記8x8のマトリクスLEDには、合計64個のLEDが内蔵されており、端子数も16個あるので、最低でも20本はジャンパワイヤーが必要となりますので、足りない場合は追加しておいてください。

 授業内のサンプル: (左上から順番にひとつずつLEDを点灯させる)
マトリクスLEDにはアノードコモンタイプとカソードコモンタイプがあり極性が逆になります。
以下プログラム内のdigitalWrite()のHIGH/LOWが逆になります。 
 
*アノードコモンタイプの場合:

void setup(){
  //16本のピン(2~17)をデジタル出力に設定
  for(int i=2;i<=17;i++){
    pinMode(i,OUTPUT);
  }
}
void loop(){
  //行(横)の繰り返し処理
  for(int i=2;i<=9;i++){     //行(2~9番ピン)
    digitalWrite(i,LOW);    //LOWで点灯

    //列(縦)の繰り返し処理
    for(int j=10;j<=17;j++){ //列(10~17番ピン)
      digitalWrite(j,HIGH);   //HIGHで点灯
      delay(100);            //点灯時間
      digitalWrite(j,LOW);  //列をオフにする
    }

    digitalWrite(i,HIGH);     //行をオフにする
  }
}


*カソードコモンタイプの場合:

void setup(){
  //16本のピン(2~17)をデジタル出力に設定
  for(int i=2;i<=17;i++){
    pinMode(i,OUTPUT);
  }
}
void loop(){
  //行(横)の繰り返し処理
  for(int i=2;i<=9;i++){     //行(2~9番ピン)
    digitalWrite(i,HIGH);    //HIGHで点灯

    //列(縦)の繰り返し処理
    for(int j=10;j<=17;j++){ //列(10~17番ピン)
      digitalWrite(j,LOW);   //LOWで点灯
      delay(100);            //点灯時間
      digitalWrite(j,HIGH);  //列をオフにする
    }

    digitalWrite(i,LOW);     //行をオフにする
  }
}
 
 

2013年9月6日金曜日

9/09の授業:Webカメラの演習

後期初回(9/09)は、Webカメラを用いた実験を行いたいと思います。
Processingのvideoライブラリをつかって、Webカメラをセンサとして利用する内容に発展していく予定です。
また必要に応じてArduinoとの連携を行います。

必要なもの:
・ノートパソコン
・Webカメラまたはパソコン内蔵カメラ
・Arduinoボード類一式




モザイク画像の表示:

import processing.video.*;

Capture cam;

int w=640; //画面幅
int h=480; //画面高さ
int s=10;   //モザイク1辺のサイズ

void setup() {
  size(w,h);
  cam = new Capture(this, w,h);
  cam.start();
 
  stroke(0); //モザイクの外形線の色
  //noStroke(); //外形線なしの場合
}

void draw() {
  if (cam.available() == true) {
    cam.read();
    for(int i=0; i<w*h;i++){
      if((i%w)%s==0 && (i/w)%s==0){
        fill(cam.pixels[i]);
        rect(i%w, i/w, s, s);
      }
    }
  }
}

変数sを変えれば、モザイクの細かさが変化します。
また、wとhを変えることで、表示サイズとカメラから取り込む画像サイズを変えることができます。
このプログラムでは、640×480画素数で読み込んでいる画像データを
if((i%w)%s==0 && (i/w)%s==0){...}
の条件文をつかって、iについては横を10個(変数sの値分)とばし、縦も10個とばしのピクセルの位置の色データだけをfill()に適用させてrect()で矩形(モザイクの1粒)を描かせています。