INDEX(各項目ごとの目次)

[HOME]  [Processing関係]  [Arduino関係]  [マテリアル関係]  [秋葉原工作マップ]

2008年用ですが、部分的に内容を更新しています(2010/06/14)。
また、[建築農業工作ゼミ2009-2010]とも連動していますので、そちらにも幾つかサンプルがあります。
:

4/21/2008

Arduino/電子工作


電子工作的な作業を5/17から開始する予定です。授業では、Arduino Diecimila(上画像)というマイクロコントローラ基盤をベースに開発します。この基盤にセンサーや電子パーツを接続することで、様々なデバイスを制作することができ、Processingと連動させることも可能です。Arduinoサイト:http://arduino.cc

5/17までに各自Arduino基盤を購入(通販)しておいて下さい。

Arduino Diecimila購入先:
メカロボショップ ¥4361(国内通販)
Sparkfun $34.95(米国通販、5日程度で到着)

次回の授業は5月10日です。

4/26は休講です。5/3は祝日ですので、次回の授業は5/10となります。
次回から、「One inch / One foot / One yard」というテーマに沿って「Wooden Stick」の制作を開始します。
「Wooden Stick」は、大きさや長さをあらわす基準ツール(独自の定規のようなもの)であり、今回用いられる様々な技術を試行するためのモチーフ/ベースにもなります。詳細については次回の授業で説明しますので、木の棒を各自持参して下さい。

Processingを用いたプログラミングのエクササイズは、次回も行います。Processingのサイト内学習サンプルや、このブログ内の説明を参考にプログラミングによる描画を試してみて下さい。「One inch / One foot / One yard」がテーマですので、
「1 inchという長さを描画する」
「1 footという長さを描画する」
「1 yardという長さを描画する」
というタイトルで幾つかのサンプルをプログラミングしてみて下さい。
インチ、フット(フィート)、ヤードという単位は、どのように人間の身体や行動と関係しているのかということを考慮しながら、表現の工夫を試みて下さい。

ノートパソコンを持っている人は、できるだけご持参ください。

4/20/2008

前期テーマ/スケジュール


前期は、様々な技術についての基本エクササイズを行い、設定したテーマに沿って表現を追求していきます。数人のゲストによるレクチャーも予定しています。ゲストレクチャーについては随時連絡致します。

前期スケジュール:
4/19 ガイダンス
4/26 休講
5/10 エクササイズ1
5/17 エクササイズ2
5/24 エクササイズ3
5/31 エクササイズ4
6/07 エクササイズ5
6/14 エクササイズ6
6/21 エクササイズ7
6/28 エクササイズ8
7/05 エクササイズ9
7/12 前期デモンストレーション

前期テーマ:「One inch /One foot / One yard」
ものごとの基準となる単位と身体との関わりついて考察するところから開始します。
スケジュール・エクササイズ1〜5までは、前期テーマをもとに「Wooden Stick」の制作を行います。

「Wooden Stick」について:
長さ1 yard(約90cm)の木の棒を各自一本用意して下さい(無垢、合板を細く切ったもの、古びた建築資材、拾った枝などどのようなものでも構いません)。各自の木の棒をベースとし、そこに様々な技術を付け加えることで、身体と関わりを持つ独自の基準ツール/デバイスを開発します。


尚、エクササイズ6以降については、後日連絡します。

Processingの基本操作 その3

前回までのプログラムは静止画を描くものでした。
つぎは、動画のプログラムに入ります。
例えば、ellipse()を用いて描いた円が画面の中で右方向に動いていくようなものをプログラムします。
円が画面左から右へ移動するには、円のX座標が常に変化していきます。そのために、前回使った変数を設定しておきます。

まず、X座標のために整数型の変数xを用意する。
円の半径のために整数型の変数rを用意する。
X座標をとりあえず20に設定。
円の半径を25に設定。
画面のサイズは横長にして幅400、高さ200に設定。
背景色をとりあえず255(白)に設定。
Y座標値は100に固定し、変数xとrを用いて円を描く。
そうすると、以下のようになります。

int x;
int r;
x=20;
r=25;
size(400,200);
background(255);
ellipse(x,100,r,r);

ただし、このままでは前回同様静止画の円が描画されます。
動画を描画させるには、setup()draw()という関数を用いて、以下のようなフォーマットを用意します。

void setup(){
//ここに初期設定を記入
}

void draw(){
//ここに描画内容を記入
}

初期設定には、円の最初の位置や大きさなどを書いておきます。
描画処理を行わせるdraw()には、アニメのセル画のように次から次へと何枚もの絵を描き続ける内容を書きます。
それでは、setup()とdraw()のフォーマットに、はじめに書いた円のプログラムを書き足します。

int x;
int r;

void setup(){
size(400,200);
x=20;
r=25;
}

void draw(){
background(255);
ellipse(x,100,r,r);
x=x+1;
}

draw(){...}内に書かれた内容は、以下のように繰り返し処理されます。

最初にbackground(255);を処理し、
つぎにellipse(x,100,r,r);を処理し、
その次にx=x+1;を処理し、
その次は、最初に戻ってbackground(255);を処理し、
つぎにellipse(x,100,r,r);を処理し、
その次にx=x+1;を処理し、
再びbackground(255);を処理し、
・・・

というように、以後も同様の順番で処理を繰り返します。これをループといいます。
具体的には、まず背景色(白)を画面に塗って、その上に円を描き、次回の準備として円のX座標値を+1しておき、再び背景色(白)で画面を真っ白にしてから、また円を描き、さらにX座標値を+1するという感じです。この繰り返しのループ処理と最後のx=x+1;というのが、円を右方向へ動かすためのプログラムになります。左辺のxは、次回のxの値であり、右辺のxは今回の計算で用いられた値を意味します。つまり、今回のX座標に+1した値を次回のX座標に自己代入するということになります。xには+1が延々と足されていくので、xは処理を繰り返すごとに増大していきます。よって、円のX座標は、初期設定のx=20という値から21、22、23・・・と変化していきます。このプログラムでは、円が画面の右端からはみ出て行っても動き続けるので、画面の右端まで行ったら、左端に戻るような条件を書き足します。

int x;
int r;

void setup(){
size(400,200);
x=20;
r=25;
}

void draw(){
background(255);
ellipse(x,100,r,r);
x=x+1;
if(x>400){
x=0;
}
}

付け加えたif(x>400){x=0;}という部分は、「もしxが増大して400(画面の右端の座標)を超えたら、xの値を0に戻す」という意味です。このように、if文をつかうことで、さまざまな条件分岐が可能になります。
x=x+1;をx++;として書くこともできます。
また、x=x+2;とすれば、スピードは倍になります。
Y座標に関しても変数を用意し、同様にyの値に処理を付け加えれば、円を斜めに動かすことができます。

Processingの基本操作 その2

長方形を描く場合は、rect()という関数を前回用いました。
円や楕円の場合は、ellipse()という関数を用います。
rect()と同様に、ellipse()も、カッコの中に入る数値は4つ必要であり、
ellipse(X座標,Y座標,幅,高さ)によって楕円の位置や形が定義されます。
正円を描くのであれば、幅と高さの数値を同じにすればいいので、

ellipse(20,30,50,50);

のように3番目と4番目の数値が等しくなります。
同様にrect()の場合も、

rect(20,30,50,50);

なら、一辺50ピクセルの正方形となります。

rect(20,30,50,50);
ellipse(20,30,50,50);

と書けば、一辺50ピクセルの正方形の上に直径50ピクセルの円が重なって描かれます。
このとき二つの位置のXY座標は(20,30)ですが、ぴったり重なるように配置されません。
それは、円の位置を決める基準点は円の中心座標になるのですが、正方形(長方形)の場合は、左上の角が基準点になっているからです。ぴったり重なるように配置するには、どちらかの図形をずらさなければなりません。
例えば、

rect(20,30,50,50);
ellipse(20+25,30+25,50,50);

というように、円を25ピクセルずらした分だけ20+25というように数式を入れることもできます。
しかし、もう一つの方法は、ellipseMode(CORNER)という関数があり、円の基準点自体をrect()と同様に左上の角に変更することです。よって、

rect(20,30,50,50); //基準点が左上角の正方形を描画
ellipseMode(CORNER); //円の基準点を左上角に設定
ellipse(20,30,50,50); //円の描画

と書くこともできます。ellipseMode(CORNER)をellipse()の手前に書いておくことで、それ以降は左上角が基準点になります。
尚、各行のダブルスラッシュ「//」以降に書かれた内容はコメントと呼ばれ、プログラムには影響しない記述内容になります。このままRunさせてもエラーはでません。プログラムにおいてメモ書きのような説明や注釈を書き添えておきたいときは、「//」を用います。


つぎに、正方形の一辺と円の直径が同じということは、もともとのrect()の幅と高さ、そしてellipse()の幅と高さの四つの値が同じであるため、同じ値の部分を変数を用いて以下のように書くことも可能です。

int a=50;
rect(20,30,a,a);
ellipseMode(CORNER);
ellipse(20,30,a,a);

int は、aという値が整数であるというタイプを指定する記号です(もし小数点が含まれる数値ならfloatを用います)。
int a=50;と書いてaに50という整数値を代入しておきます。あとは、rect()の幅と高さ、そしてellipse()の幅と高さの四つの値にaを書いておけば、すべてが50となります。冒頭のint a=50;をint a=100;と書き直せば、正方形も円も一気に2倍の大きさに変えることができます。つまり、後々変化させたい値の部分に変数を用いれば、いちいち個別に書き直す手間が省けます。
同様に、正方形と円のXY座標値もそれぞれ同じことから、

int a=50;
int x=20;
int y=30;
rect(x,y,a,a);
ellipseMode(CORNER);
ellipse(x,y,a,a);

と書けば、xとyに異なる数値を代入することで、正方形と円の位置を一気に変えることができます。
特にたくさんの図形を用いて、それらの位置や大きさなどが連関している場合、このような変数を用いれば個別に数値を書かずに一気に変換することが容易になります。


[目次:Processing関係]  [HOMEへ戻る]  [目次:Arduino関係]