Hatena::ブログ(Diary)

花夢電科雑多log (他へ移転しました)

2008年11月16日 メディアアートっぽいものを作ってみた

なんちゃってメディアアートを作ってみたよ

わたくし、アートのセンスとかサッパリ無いけど。

Processingに慣れるための勉強ってことで、

  「あーーなんだかどっかで見た事ある」的

メディアアートっぽい物を作ってみました。

D

この動画、音ズレが起きてます。ごめんなさい。



Make: Tokyo Meeting 02 に刺激されて、ってのが動機。

arduinoと、Processingで作ってみたです。


評判通り、Processingはグラフィック関連プログラム作りやすい!


かなり簡単!

  • ウインドウハンドルとか気にしなくて良い。
  • openGLライブラリとか明示して呼ばなくていい。
  • 書き換えは勝手に、いいタイミングでやってくれる。
  • 速度はけっこう速い。
  • シリアル通信を標準搭載してるので、マイコンとの通信がとても楽々
  • 3D関係とかも楽。関数一個で、図形一個ごとに回転できる。

CGとかメディアアートに興味がある人は是非とも触った方が良いかも。

C言語VisualBASIC程度の基礎知識があったほうがいいかもです。




f:id:sugan:20081116182834j:image

入力インターフェースはアヒルのおもちゃ。

ほら

メディアアートって、大抵変な入力デバイスじゃん w

単なる立方体とか、丸とか。

だから、わざわざ入力デバイスを作ってみた。

・・・・・・偏見ですね。ごめんなさい orz



f:id:sugan:20081116182921j:image

裏に圧電素子を貼付けてる。

これがアヒルに加わる衝撃を検出するセンサになっている。

ピエゾ素子とも言うらしいね。エレアコギターのピックアップに使われたり。

たしか100円の目覚まし時計を分解した時取り出した物だった気がする。


f:id:sugan:20081116182945j:image

赤い配線をハンダ付けして

圧電素子をガムテープで貼付けただけ。



f:id:sugan:20081116232519p:image

回路図はコレ。

アンプは秋葉原でも簡単に買えるキットを使用。かなり無難な品物よ。

D1 C1 R2 でピークホールド回路を構成。

arduinoのA/D変換速度が遅いため、ピークホールドしないと

[参考 ピークホールドにみるダイオードのリカバリー特性 - nabeの雑記帳

しっかりと波形の大きさを検出できない。


R1はコレ付けないとなぜかDC出力が出っぱなし w

LM386特有の現象かも。


想像以上にセンサ信号をマイコンで受けとるのが面倒くさかった。

最初はトランジスタのエミッタフォロワでやっていたけど、うまくいかず。

やっぱopampで電流稼がないとうまくいかんね。




arduinoに書き込んだスケッチプログラムソースコード的な意味)

これだけ。簡単でしょ


int ad;
int peakval;
int co;

void setup()
{
  Serial.begin(9600);
  peakval = 0;  
  co = 0;
}


void loop()
{
  ad = analogRead(2);           //analog 2pin 電圧値をA/D変換
  if (ad >= 255) {              //上限を255で頭打ちにする
      ad = 255;
  }
  
  if(peakval < ad){             //マイコン側でもピークホールド
      peakval = ad;
      
  }
  co++;
  if(co == 20){
    Serial.print(peakval,BYTE);     //delay 5ms * 20 = 100ms ごとに送信
    peakval = 0;
    co = 0;  
  }
  delay(5);
}



Processingで作ったスケッチプログラムソースコード的な意味)

グラフィック関係なのにこんなにシンプル。

表現する、だけに集中できる。


import processing.serial.*;

Serial myPort;  // Create object from Serial class
int val;      // Data received from the serial port
int oldval = 0;
PFont font;
float a = 0.0;


void setup() 
{
  size(640, 400);
  //size(screen.width, screen.height);          //全画面で表示したい時はこちらで
  String portName = Serial.list()[1];
      //うまく通信できない場合、Macの場合は[1]の数値を変える。winはググってね
  myPort = new Serial(this, portName, 9600);
  noStroke();
  smooth();
  font = loadFont("AmericanTypewriter-24.vlw");      //どんなフォントでも良い
  textFont(font, 18);
  background(0);             // Set background to black
}



void draw()
{
  int px,py,rplus;
  
  oldval = val;
  if ( myPort.available() > 0) {  // If data is available,
    val = myPort.read();         // read it and store it in val
  }
  if (val <= 5 && oldval >= 1) {    //AD値が5以上なら、ゆっくり減らして行く
     val = oldval - 1;
  }
  
  fill(0,15);                    //1フレームごとに透明度15で黒い四角を描く→ゆっくり暗くする
  rect(0,0,width,height);

  fill(200,255);
  px = width/2 + int( random(width * 0.4 * -1 , width * 0.4));
  py = height/2 + int( random(height * 0.4 * -1 , height * 0.4));  
  rplus = int( random( -0.5 * val , 10 ));      //円の半径もランダムに
  ellipse(px , py , val+rplus , val+rplus);
  
  text(str(val), 10, height-10);                //確認のため数値表示
}





f:id:sugan:20081116183240j:image

作ってる様子。

仮配線ばかり。


f:id:sugan:20081116183542j:image

使用opampは、LM386。

昔、LM386のアンプキットを買ったので、それを流用。

386はスピーカーも直接駆動できるのでけっこうお気に入り。

今はもっと便利なopampもあるはず。







【関連記事】

arduinoのA/D変換速度遅いなあ - 花夢電科雑多log

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証

トラックバック - http://d.hatena.ne.jp/sugan/20081116/1226843813