2008年11月16日 メディアアートっぽいものを作ってみた
なんちゃってメディアアートを作ってみたよ
技術, arduino, Processing, 電子
わたくし、アートのセンスとかサッパリ無いけど。
Processingに慣れるための勉強ってことで、
「あーーなんだかどっかで見た事ある」的な
メディアアートっぽい物を作ってみました。
この動画、音ズレが起きてます。ごめんなさい。
Make: Tokyo Meeting 02 に刺激されて、ってのが動機。
arduinoと、Processingで作ってみたです。
評判通り、Processingはグラフィック関連プログラムを作りやすい!
かなり簡単!
- ウインドウハンドルとか気にしなくて良い。
- openGLのライブラリとか明示して呼ばなくていい。
- 書き換えは勝手に、いいタイミングでやってくれる。
- 速度はけっこう速い。
- シリアル通信を標準搭載してるので、マイコンとの通信がとても楽々
- 3D関係とかも楽。関数一個で、図形一個ごとに回転できる。
CGとかメディアアートに興味がある人は是非とも触った方が良いかも。
C言語かVisualBASIC程度の基礎知識があったほうがいいかもです。
入力インターフェースはアヒルのおもちゃ。
ほら
単なる立方体とか、丸とか。
だから、わざわざ入力デバイスを作ってみた。
・・・・・・偏見ですね。ごめんなさい orz
裏に圧電素子を貼付けてる。
これがアヒルに加わる衝撃を検出するセンサになっている。
ピエゾ素子とも言うらしいね。エレアコギターのピックアップに使われたり。
たしか100円の目覚まし時計を分解した時取り出した物だった気がする。
赤い配線をハンダ付けして
圧電素子をガムテープで貼付けただけ。
回路図はコレ。
アンプは秋葉原でも簡単に買えるキットを使用。かなり無難な品物よ。
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); //確認のため数値表示
}
作ってる様子。
仮配線ばかり。
使用opampは、LM386。
昔、LM386のアンプキットを買ったので、それを流用。
386はスピーカーも直接駆動できるのでけっこうお気に入り。
今はもっと便利なopampもあるはず。
【関連記事】
- 24 http://hp.hana-neko.com/lego/autoscan00/autoscan00.htm
- 24 http://nabe.blog.abk.nu/PCM2702DAC
- 10 http://mixi.jp/view_diary.pl?id=996729902&owner_id=91036
- 9 http://wikiwiki.jp/bookjisui/?スキャナー
- 5 http://white.hana-neko.com/
- 5 http://www.google.co.jp/search?sourceid=navclient&hl=ja&ie=UTF-8&rlz=1T4SUNA_jaJP275JP276&q=天下無双らーめん+トントコトン
- 5 http://www.oshiete-kun.net/archives/2008/10/post_204.html
- 4 http://hp.hana-neko.com/index.html
- 4 http://jbbs.livedoor.jp/bbs/link.cgi?url=http://d.hatena.ne.jp/sugan/20081012/1223806912
- 4 http://www.google.co.jp/search?hl=ja&client=firefox-a&rls=org.mozilla:ja:official&hs=aiG&q=メディアアート+processing&btnG=検索&lr=






