2011年12月9日金曜日

次回12/12(月)アイデアと手段

前回の「現代的/今日的1日の過ごし方(2011年版) 極端な例」をもとに各自トピックに関するレポート(ウィキペディアのような説明)してもらいます。各自のブログなどに必要な画像や説明分を掲載してください。
各自が選んだトピックに対しての個人的な印象や感想というよりは、その事象がどのようなものであるのか、その事象に関連する他の事象などについてレポートしてください。

その後、そのトピックに体する解決策/転用策/反転策などを授業内でディスカッションし、表現する上での手段やメディアを考えたいと思います。

2011年11月24日木曜日

次回11/28(月)アイデアの創出

次回は、授業内のディスカッションやインターネット検索などを通して、今後の作品制作に向けてのアイデアを創出したいと思います。

必要なもの:各自のノートパソコン

社会の動向、各自の日常の関心事/必要性を再検討し、アイデアの開始地点とします。授業内では、段階的にアイデア/トピックを絞っていく演習を行います。

-----------------------------------------------------------------------


現代的/今日的1日の過ごし方(2011年版) 極端な例
起床(何時?どこ?ソファ
Twitter/Facebook/ネットニュース/健康チェック
 朝食(なし/ドトール+朝マック/弁当つくり/駅中自販機/栄養飲料
化粧身支度(録画番組視聴)/お菓子
移動(自転車+駐輪+シャワー/音楽/英会話/資格勉強/読書/ゲーム/パソコン/携帯写真アップ/ナビ/化粧/漫画[世代]
メールチェック
外朝食
着替え+シャワー

イベント招待+勧誘
労働/勉学(在宅勤務/MSOfficeフォーマット
昼食(トイレ食事
置き菓子
労働/勉学(スカイプ会議

移動(自転車、駅構内ショップ
ジム、ヨガ、ダンス、ボクササイズ、
夕食:生協食材、カラオケ外食、インターネットしながら、水サーバー、駅中飲食店、家のみ、立ち飲み
休息/学校/皇居ジョギング/インターネット(SNS・ネトゲー・動画)
風呂(半身浴、ボディケア、スーパー銭湯、岩盤浴、洗濯、コインシャワー
Redbull飲料
就寝(ネットカフェ
---------------------------------------------------

上記のうちから1シーンを抜き出して、その詳細について調べる。
・シーンが分かるような画像(+詳細画像)
・詳細についての説明

2011年11月11日金曜日

次回11/14(月)Arduino+マトリクスLED

次回11/14(月)はArduinoを行います。
必要なもの:
・Arduinoボード
・USBケーブル
・ノートパソコン
・ブレッドボード
・ジャンプワイヤ

マトリクスLEDの点灯実験
サンプル1:1行だけの点灯実験

void setup(){
//16本のピン(2~17)を出力に設定
for(int i=2;i<=17;i++){
pinMode(i,OUTPUT);
}
}
void loop(){
digitalWrite(2,HIGH); //1行目(横)をHIGHで点灯

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

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



サンプル2:64個の点灯実験

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); //行をオフにする
}
}



参照:建築工作ゼミ2008「マトリクスLED1」

2011年10月24日月曜日

次回10/31(月)Webカメラ

次回10/31(月)は、Processingを通してWebカメラの実験を行います。

必要なもの:
・ノートパソコン
・USB接続のWebカメラ(内蔵カメラでも可/持っていない場合は貸します)
・Arduinoボード+USBケーブル+ブレッドボード+ジャンプワイヤ

尚、WindowsでWebカメラを使う場合は「WinVDIG1.01」をインストールする必要があります。


サンプル


import processing.video.*; //ライブラリを取り込む

Capture video; //オブジェクトの用意

int w=320; //画面幅の変数と値
int h=240; //画面高さの変数と値

void setup() {
size(w, h); //画面サイズ設定
video = new Capture(this, w, h, 30); //ビデオ設定

background(0); //背景を黒にしておく
stroke(255,0,0,200); //線色設定(赤,緑,青,透明度)
}

void draw() {
image(video,0,0);//映像表示

//カメラ画像のピクセルをひとつずつ調べる
for(int i=0;i<w*h;i++){
if(brightness(video.pixels[i])>200){ //ピクセルが200以上の明るさの場合
point(i%w,i/w); //選択されたピクセルを赤にする
}
}
}

//キャプチャ画面の読み込み
void captureEvent(Capture video) {
video.read();
}

//マウスボタンを押したら
void mousePressed(){
background(0); //背景を黒にする
}




参照:建築発明工作ゼミ2008「Webカメラを光センサとして使う」

2011年10月5日水曜日

次回10/17(月):Arduino+サーボ制御

次回10/17(月)も引き続きArduino(電子工作)を行います。
必要なもの:
・Arduinoボード
・USBケーブル
・ノートパソコン
*できればブレッドボード(小型なもので可)とジャンプワイヤも各自用意してください。

Arduino+サーボ実験
参照:建築発明工作ゼミ2008「サーボ制御」

2011年9月28日水曜日

Arduino-Processingシリアル通信

以下はProcessingプログラム上でマウスクリックしてArduinoボード上のLEDを点灯/消灯させるプログラムです。ProcessingとArduinoを連携させるにはシリアル通信という手段を用います。
まずProcessingのプログラムから行います。

import processing.serial.*;
Serial myPort;

void setup(){
myPort=new Serial(this,Serial.list()[0],9600);
}

void draw(){
//描画内容は特になし
}
void mousePressed(){
myPort.write(1);
}

void mouseReleased(){
myPort.write(0);
}

シリアル通信を行うためには、シリアル通信用のライブラリを導入する必要があります。
ProcessingのSketch>Import Library/Serial I/Oを選択すると、
import processing.serial.*;
がプログラムに書き足されます。
今回は画面上をクリックするだけで特に描画しないので、draw(){}内は空白です。
あとはmyPort(名前は任意)を設定し、setup(){}内にシリアルポート設定を上記のように書き足せばシリアル通信を行うことができます。
myPort.write()によって、()内の数値をArduinoに送信するプログラムを書き足します。
マウスを押した時に1を、マウスを放した時に0を送信することにし、Arduino側では1の値を受け取ったらLEDをオンにし、0を受け取ったらオフになるようにします。
マウスクリックする際には、Processingをランさせたときに表示される画面上をクリックしてください(100×100ピクセルのグレーのウィンドウが表示されます)。

以下はArduinoのプログラム:

void setup() {
pinMode(13, OUTPUT);
Serial.begin(9600);
}

void loop(){
if(Serial.available()>0){
if(Serial.read()==1){
digitalWrite(13, HIGH);
}else{
digitalWrite(13, LOW);
}
}
}


Arduino側では、Serial.begin()によってシリアル通信開始を設定します。括弧内の9600は通信速度でありこのままの設定で構いませんが、Processing側と設定速度を同じにしておきます。
Serial.available()によって、Processing側から何個のデータが送られて来ているかをチェックします。Serial.available()>0というのは、受信データが0個より大きいとき、つまり1個データを受信したときに以下のプログラム(LED点灯/消灯)を実行するということになります。
受け取ったデータをSerial.read()で読取り、その内容が1であればdigitalWrite(13, HIGH)によってLEDを点灯させ、0であれば消灯させるという条件式になっています。
つまり、Processing側でマウスを押したとき(押し続けているとき)オンになり放したらオフになります。

この通信の場合は、Processing側からデータを送信し、Arduino側が受信する内容になります。
その逆でArduinoからデータを送信して、Processing側が受信してProcessingでプログラムした描画内容を操作するという場合のサンプルはこちらを参考にしてみてください(建築発明工作ゼミ2008:シリアル通信1)。

また、Xbee、Bluetoothなどを使えばワイヤレス送信させることも可能です。
Xbeeのサンプル
Bluetoothのサンプル
あるいは、インターネット越しに操作することも可能です。
ネットワークのサンプル

Arduinoの基本

Arduinoのセッティング
Arduinoサイトの「Getting Started」ページに、MacOSX、Windows、Linuxごとのセッティングの説明があるので、それに従ってセッティングします。
OSがWindowsの場合やArduinoボードが旧型のDuemilanoveやDiecimilaなどの場合は、付属のドライバソフトをインストールする必要があります。

ArduinoボードをUSBケーブルを通してパソコンに接続します。
Tool>Boardから使用しているArduinoボードのタイプを選択。
Tool>Serial Portから一番上のポートを選択。
動作確認のため次のプログラムをArduinoボードに書き込みます。
File>Examples>1.Basics>Blink
以下がBlink(LED点滅)のプログラムです。
Arduinoボード上端にデジタルピン0〜13番があり、13番ピンの下方にある内蔵LEDが点滅します。あるいは普通のLEDを13ピンとGNDピンに差し込んでも構いません(LEDの足の長い方を13番ピン、短い方をGNDピン)。GNDピンは13番ピンの左側にあります。

void setup() {
pinMode(13, OUTPUT); //13番ピンを出力用に設定
}

void loop() {
digitalWrite(13, HIGH); //13番ピンを5Vで出力:LEDオン
delay(1000); //1秒間待機
digitalWrite(13, LOW); //13番ピンを0Vで出力:LEDオフ
delay(1000); //1秒間待機
}



プログラムをArduinoボードにアップロードするには:
ソフト上のVerifyボタンを押してコンパイルします。

問題なければ「Done Compiling.」が画面下部に表示されます。
そして、「Upload」ボタンを押してAruinoボードにプログラムを書き込みます。

アップロード中にはArduinoボードのLED(TXとRX)が高速で数秒間点滅します。
問題なければ「Done uploading.」が画面下部に表示されます。
以上でプログラムの書き込みは終了です。
上記プログラムは13番端子のLEDが1秒ごとに点滅する内容です。
プログラム内のdelay(1000);の括弧内の数字を変えれば点滅する速度を変えることができます。単位はミリ秒なので1秒は1000になります。
digitalWrite(13, HIGH)の括弧内のHIGHはそのピンを5Vで出力することを意味しています。
LOWなら0Vの出力となりLEDは消灯します。
またpinMode()とdigitalWrite()の括弧内のピン番号を変えれば、違う箇所に接続したLEDを点灯させることができます。

プログラムする手順としては:
・どのピンを出力用にするか:pinMode(ピン番号)
・どのピンをHIGHまたはLOWで出力するか:digitalWrite(ピン番号,出力値)
・点灯や消灯の継続時間:delay(ミリ秒)
となります。1000ミリ秒=1秒です。


アナログ出力
上記はLEDの点滅でしたが、analogWrite()を使えばLEDの明暗を調節して点灯させることができます。ただし、ボード上にPWMと書かれた3,5,6,9,10,11の6本のピンのどれかに接続する必要があります。つまりこの6本のピンは設定によってdigitalWrite()とanalogWrite()を使い分けできるということになります。
analogWrite(ピン番号,出力値)という感じで、ピン番号と出力値を入れることで設定できます。
出力値は0〜255までの値を設定できます。0の時0V、255の時5Vになり、その間の値であれば数値に応じた出力量になります。
尚、analogWrite()はsetup(){...}内にpinMode()設定する必要はありません。

以下は変数valを用意して、徐々に明るくなって最大値に達したら0に戻るという内容です。
delay()で明るくなっていくスピードを設定しています。
LEDは11番ピンに接続してあります(LEDの足の長い方を11番ピン、短い方をGNDピンに接続)

int val=0;
void setup(){
//pinMode()設定は不要
}

void loop(){
analogWrite(11,val);//11番ピンを変数valの値で出力
val++; //+1ずつ出力値を増大させる
if(val>255){ //出力値が255を越えたら
val=0; //出力値を0に戻す
}
delay(20); //1ループ20ミリ秒にする
}