Workshop at IAMAS 2008-05-24

Post on 31-May-2015

2.303 views 0 download

Transcript of Workshop at IAMAS 2008-05-24

ハードウェアでスケッチフィジカル・コンピューティング・ワークショップ

講師:小林茂+遠藤孝則/アシスタント:蛭田直

2008.05.24

本日の予定

• 第1部:イントロダクション(10:00-11:15)• 第2部:入門編(11:30-13:30)(休憩:13:30-14:30)• 第2部:応用編(14:30-16:15)• 第3部:スケッチ(16:30-17:45)• 第4部:プレゼン&まとめ(17:45-18:30)

配布物一覧

品名 品番など 数Gainer I/Oモジュール 1個ブレッドボード SAD-01 1個ジャンプワイヤ(柔) SPP-100 5本ジャンプワイヤ(硬) SKS-140 数本USBケーブル 1本抵抗器(橙橙茶金) 330Ω 2個抵抗器(茶黒橙金) 10kΩ 1個ボリューム 10kΩ(Bカーブ) 1個CdSセル 5mm 1個LED 白 2個加速度センサ KMX52-1050 1個

自己紹介

• 1970年愛知県名古屋市生まれ• 電子楽器メーカー(1993年4月~2004年6月)

– サウンドデザイナー– ソフトウェアエンジニア

• IAMAS(2004年7月~)– フィジカル・コンピューティング– ユーザーインタフェース

第1部:イントロダクション(10:00-11:15)

• フィジカル・コンピューティングとは?• Gainerとは?• Funnelとは?

フィジカル・コンピューティングとは?

• ニューヨーク大学の ITP*1でTom Igoeらが中心となって教えているコースの名前

• PCをブラックボックスとして扱わない• 原理原則を教え「人間がいかにコンピュータとコミュニケーションし得るか?」を考え直す

• デザイナーやアーティストが主な対象

*1 Interactive Telecommunications Program

関連:ITP Spring Show 2008

概要:

• ITPで学ぶ学生の展覧会で毎年2回開催• 5月12日から13日まで開催• http://itp.nyu.edu/shows/spring2008/

フィジカル・コンピューティングとは?

一般的なPCから見た人間は?

• キー情報(ASCIIキーボードから)• マウス情報(1つのマウスから)

Alto (1973)

出典:http://toastytech.com/guis/

フィジカル・コンピューティングとは?

• PC+標準入出力デバイスの世界で実現できるインタラクションには限界がある– 人間が直接触れて感じることができない– PCのパラダイムに縛られてしまう

• 統一されたプラットホームならではの良さも勿論ある(例:Flashなどによるウェブ上での表現)

フィジカル・コンピューティングとは?

• 物理的な入出力を活用することによって表現力は拡大する(例:Nintendo Wii)

• 電子楽器などではずいぶん昔からのテーマ• Appleでも再定義できていない領域

– iPod:携帯音楽プレーヤの再定義– iPhone:携帯電話の再定義– MacBook Air:PCの再定義???

フィジカル・コンピューティングの構成要素

• センサー(例:光、圧力、音、温度、加速度など)• アクチュエータ(例:LED、モータ、ソレノイドなど)• プロセッサ(例:マイコン、I/Oモジュール+PCなど)

→ものすごく簡単にまとめると プログラミング+電子工作

プログラミング+電子工作?

フィジカル・コンピューティングは難しい?

• プログラミングはそれなりのスキルが必要(例:ActionScript、C、C++、Javaなど)• 電子工作にもそれなりのスキルが必要(例:回路設計、実装、検証)• 両方のスキルが必要ということは…

プログラミング+電子工作?

フィジカル・コンピューティングは難しい?

• 確かに習得するまでにはそれなりの努力が必要• できあがった結果は直接的に人間の感覚に訴えるものになる(はず)

プログラミング+電子工作?

最近では扱いやすいプラットホームが登場

• プログラミング– Processing– Flash

• 電子回路のプロトタイピング– Gainer– Arduino– Phidgets

電子工作は大変?

• 誰でもはんだ付けくらいはやったことがある• まずは必要最小限のこと(だけ)を覚えればスタートできる– 電圧~電流~抵抗– 回路図の読み方– オームの法則など– よく使う部品のシンボルと特徴

• 失敗しながら覚えていけばいい• でもUNDOはきかない(=人生と一緒)

作品紹介1:ゲイナーカイダン

概要:

• メディアインスタレーション• 製作期間は約1ヵ月• NTT InterCommunication Center [ICC]で展示(2007.4.19-2008.3.9)

作品紹介1:ゲイナーカイダン(オリジナル版)

写真撮影:萩原健一

作品紹介1:ゲイナーカイダン(オリジナル版)

写真撮影:萩原健一

作品紹介:ゲイナーカイダン(オリジナル版)

写真撮影:萩原健一

作品紹介1:ゲイナーカイダン(オリジナル版)

写真撮影:萩原健一

作品紹介1:ゲイナーカイダン

CdSセル

レーザーモジュールI/Oモジュール

アクチュエータユニット

ACソレノイド

SSR

AC電源へ

作品紹介1:ゲイナーカイダン

作品紹介1:ゲイナーカイダン(拡張版)

写真提供:ICC

作品紹介1:ゲイナーカイダン(拡張版)

写真提供:ICC

作品紹介1:ゲイナーカイダン(拡張版)

写真提供:ICC

作品紹介2:Mountain Guitar

• 金箱淳一(大学院6期生)• 音楽表現のためのギター型インタフェース

– 親しみやすさ– 演奏の奥深さ

• 各種センサ+ I/Oモジュール+PC• IAMAS東京展「いまからだ」などで展示• 学生CGコンテストなど複数で受賞

作品紹介2:Mountain Guitar(スケッチ)

作品紹介2:Mountain Guitar(1号)

作品紹介2:Mountain Guitar(2号)

作品紹介2:Mountain Guitar(2号の製作中)

作品紹介2:Mountain Guitar(3号)

作品紹介2:Mountain Guitar(4号)

作品紹介2:Mountain Guitar(4号の製作中)

作品紹介2:Mountain Guitar(4号の配線)

作品紹介2:Mountain Guitar(5号)

作品紹介2:Mountain Guitar(5号の内部)

作品紹介2:Mountain Guitar(展示)

• リンツ(オーストリア)アルスエレクトロニカフェスティバル

• 青山(東京)IAMAS東京展「いまからだ」

作品紹介2:Mountain Guitar(展示)

作品紹介2:Mountain Guitar(展示)

作品紹介3:みくまりねその3

• 柏木恵美子(アカデミー11期生)• メディアインスタレーション• 水に関するオノマトペが題材• 水道の蛇口がインタフェース• IAMAS東京展「いまからだ」で展示(2007.8.24-26)

フィジカル・コンピューティングの実現方法

マイコンのみ(例:PIC、AVR)a

b

c

d

A

B

C

D

マイコンmicrocontroller

program

a0]=ain.o;aout.1 = 255;

フィジカル・コンピューティングの実現方法

マイコン+PC(例:Arduino)a

b

c

d

A

B

C

D

マイコンmicrocontroller

PC

USB

program

a0]=ain.o;aout.1 = 255;

program

a0]=ain.o;aout.1 = 255;

Arduino

フィジカル・コンピューティングの実現方法

I/Oモジュール+PC(例:Gainer、Phidgets)a

b

c

d

A

B

C

D

I/OモジュールI/O module

PC

USB

program

a0]=ain.o;aout.1 = 255;

Gainerとは?

オープンソース・ハード&ソフトのツールキット

• I/Oモジュール• ソフトウェア・ライブラリ

– ActionScript 2/3– Processing– Max/MSP

Gainer I/Oモジュール

I/Oモジュール+ブレッドボード

さまざまな電子部品

I/Oモジュール+ブレッドボード+部品

入力:曲げ

出力:LEDアレイ

出力:振動モータ

Gainerの特徴

• ブレッドボードとの組み合わによりさまざまな構成を自由に試行錯誤できる

• 入出力の設定をある程度自由に選択できる• 特定の目的のための構成も用意されている

– マトリクスLEDの制御

Funnelとは?:背景

• Gainerはいわばシンプルなドライバ→複雑な現実世界を扱うにはもう少し高次の レベルが必要なのでは?

• 全ての用途をカバーできるツールキットはない→ツールキットの使い分けは容易ではない

• 有線接続だと体験に制限がでてしまう→簡単に利用できる無線接続が必要

Funnelとは?:コンセプト

• スケッチからプロトタイプまでシームレスに使えるツールキット

• デザイナー/アーティストとエンジニアの「共通言語」

Funnelとは?:関連

Sketching User ExperiencesGetting the Design Right and the Right Design

Bill Buxton(Morgan Kaufmann Pub・2007年)

Funnelの特徴

• 疑似コード風のコーディング• 入出力をより簡単に扱うためのフィルタ

– ローパス、ハイパス– アナログ入力を設定した閾値で分割– スケーリング– オシレータ

• 複数の I/Oモジュールに対応

Funnelの構成

USB XBeeDongle

GainerI/O Module

Arduino(with Firmata)

USB XBeeDongle

Funnel Server

ActionScript 3 Processing Max/MSPetc.Ruby

AS3 Library Processing Library OSC LibrariesRuby Library

Funnel I/OMaxStreamXBee

Funnel I/OMaxStreamXBee

Funnelの特徴

• 複数の I/Oモジュールに対応– Gainer– Arduino– XBee– Funnel I/O(開発中)

• ソフトウェア・ライブラリ– Processing– ActionScript 3(FlashまたはFlex)– Ruby

デモ:Action-Coding×Funnel×Gainer I/O

Action-Codingとは?

• 開発者:増田一太郎• JRubyからProcessing APIを利用• プログラムの動的な書き換え

デモ:Action-Coding×Funnel×Gainer I/O

ポートイベントの検出

• ボタンが押されたら画面の色を変更

デモ:Action-Coding×Funnel×Gainer I/O

オシレータ

• LEDをチカチカ点滅• LEDをふわふわ点滅• 点滅の周期を変える

デモ:Action-Coding×Funnel×Gainer I/O

加速度センサを使う

• 加速度センサの値を取得• 3Dオブジェクトをコントロール

関連:ものづくりの新しい流れ

• Makehttp://jp.makezine.com/

• Instructableshttp://www.instructables.com/

関連:オープンソースハードウェア

• v1.0をベースにSparkFunがリ・デザイン• Creative Commons Attribution-Share Alike

関連:パーソナルファブリケーション

ものづくり革命パーソナル・ファブリケーションの夜明け

ニール・ガーシェンフェルド(ソフトバンククリエイティブ・2006年)

関連:パーソナルファブリケーション

大量生産→個人が欲しいものを自分で作る時代へ

• 加工機械の低価格化– 切削加工機– 3Dプリンタ– レーザーカッタ– いずれは基板プリンタも…

• マイコンの高性能化&モジュール化• さまざまなツールキットの充実

関連:Sketching in Hardware 2

概要:

• プロトタイピングにフォーカスした会議• 2007.6.23~24の二日間開催• 参加者は約30名• 全員が発表• 濃密な情報交換とコミュニティ作り• 最後に「Sketching in Hardware」を実践

関連:Sketching in Hardware 2

関連:Sketching in Hardware 2

関連:Sketching in Hardware 2

関連:Sketching in Hardware 2

関連:Sketching in Hardware 2

関連:Sketching in Hardware 2

関連:Sketching in Hardware 2

第2部:実習1(11:30~12:15)

• 電子回路の基礎知識• ブレッドボードの使い方• LEDを点灯させてみる• LED+スイッチ

電圧~電流~抵抗

電気の流れは水の流れのようなもの

• 電圧– 2点間の高度(電位)の違い– 基準点が必要(GND)– 単位はボルト(V)

電圧のイメージ図

低高

電圧~電流~抵抗

電気の流れは水の流れのようなもの

• 電流– 電圧の高いところから低いところに流れる– 単位はアンペア(A)

電流のイメージ図

少多

電圧~電流~抵抗

電気の流れは水の流れのようなもの

• 抵抗– 電流の流れにくさ– 単位はオーム(Ω)

抵抗のイメージ図

低 高

電圧~電流~抵抗

よく出てくる補助単位の例

• 1,000倍を表すキロ(例:1kΩ)• 1,000,000倍を表すメガ(例:1MΩ)• 1

1,000を表すミリ(例:1mA)• 1

1,000,000を表すマイクロ(例:50µA)

回路図ってなに?

回路図ってなに?

回路図は電子回路の設計図

• シンボルで表した電子部品の接続を示したもの• シンボルに若干のバリエーションはあるが、基本的には全世界共通

電源の回路図シンボル

+5V GND

スイッチの回路図シンボルと部品例

抵抗器の回路図シンボルと部品例

可変抵抗器の回路図シンボルと部品例

LEDの回路図シンボルと部品例

ブレッドボードってなに?

• 部品の足を穴にさすことで電子回路を形成• はんだ付け不要

– 部品を再利用できる– 回路を組み間違えてもやり直しできる– 耐久性にはやや注意が必要

ブレッドボードの構造

• 横方向のブロックは背面で接続• 縦方向のブロックは未接続• 電源用のエリアは専用に用意されている

実習:LEDを点灯させてみよう

LEDを点灯させてみよう

どうして抵抗器が必要なの?

• LEDには適切な電流の範囲がある(例:20mA)• その範囲を超えると簡単に焼き切れてしまう• 適切な値の抵抗器を用いて電流を制限する• 適切な抵抗値はどうやって求める?→オームの法則を用いて計算する

※抵抗器で電流を制限する方法が全てではありません

オームの法則

電圧~電流~抵抗の関係

V = I × R

• Vは電圧で単位はV(ボルト)• Iは電流で単位はA(アンペア)• Rは抵抗で単位はΩ(オーム)

オームの法則

電源電圧− LEDの電圧 = LEDに流したい電流× R

Rを求めるためにこの式を変形

R =電源電圧− LEDの電圧LEDに流したい電流

例:電源電圧が5.0V、LEDの電圧が1.8V、電流が10mA

R =5 − 1.8

0.01=

3.2

0.01= ?

※実際には計算結果に近い値の抵抗器を用いる

例:LEDを点灯させてみる

参考:ジャンプワイヤの色分け

• 赤:電源の+側(+5V)• 黒:電源のー側(GND)• 白・青・黄:センサとの接続など

例:LEDを点灯させてみる(NG)

の方向が違うワイヤをさす位置が違う

にささっていない

実習:LEDをスイッチでオン/オフさせてみる

実習:LEDをスイッチでオン/オフさせてみる

7

第2部:実習2(12:15~13:30)

Funnel入門

• 出力をコントロールしてみる– マウスで I/Oモジュール上のLEDを制御– I/Oモジュール上のボタンでLEDを制御

• 入力を扱ってみる– ボリューム– CdSセル

Funnel入門:Gainer I/Oの出力について

出力には2種類ある

• デジタル出力(dout:0か1かの2段階)– LED、モータなど– 状態がシンプルで取扱が簡単

• アナログ出力(aout:0~1の256段階)*2– LED、モータなど– 連続的な変化を扱うことができる

*2 実際にはPWMによる疑似アナログ出力

Funnel入門:マウスによる制御

コード例 1 マウスで I/Oモジュール上のLEDを制御( 01 ControlLEDByMouse)

import processing.funnel.*;

Gainer gainer;

void setup()

size(200, 200);

frameRate(30);

gainer = new Gainer(this, Gainer.MODE1);

gainer.autoUpdate = true;

void draw()

background(100);

Funnel入門:マウスによる制御

コード例 2 マウスで I/Oモジュール上のLEDを制御( 01 ControlLEDByMouse続き)

void mousePressed()

gainer.led().value = 1.0;

void mouseReleased()

gainer.led().value = 0.0;

Funnel入門:ボタンによる制御

コード例 3 ボタンで I/Oモジュール上のLEDを制御( 02 ControlLEDByButton)

import processing.funnel.*;

Gainer gainer;

void setup()

size(200, 200);

frameRate(30);

gainer = new Gainer(this, Gainer.MODE1);

gainer.autoUpdate = true;

void draw()

background(100);

Funnel入門:ボタンによる制御

コード例 4 ボタンで I/Oモジュール上のLEDを制御( 02 ControlLEDByButton続き)

void gainerButtonEvent(boolean pressed)

if (pressed)

gainer.led().value = 1.0;

else

gainer.led().value = 0.0;

Funnel入門:aout 0にLEDを接続

Funnel入門:aout 0にLEDを接続

Funnel入門:アナログ出力の制御

コード例 5 ボタンでaout 0に接続したLEDを制御

// _02_ControlLEDByButtonの以下の部分だけを変更するvoid gainerButtonEvent(boolean pressed)

if (pressed)

gainer.analogOutput(0).value = 1.0;

else

gainer.analogOutput(0).value = 0.0;

Funnel入門:アナログ出力の制御(LFO)

コード例 6 ボタンでaout 0に接続したLEDを制御( 03 ControlLEDWithLFOByButton)

Gainer gainer;

Osc osc;

void setup()

size(200, 200);

frameRate(30);

gainer = new Gainer(this, Gainer.MODE1);

gainer.autoUpdate = true;

// オシレータを生成してイベントリスナをセットosc = new Osc(this, Osc.SQUARE, 1.0, 0);

osc.serviceInterval = 30;

osc.addEventListener(Osc.UPDATE, "oscUpdated");

Funnel入門:アナログ出力の制御(LFO)

コード例 7 ボタンでaout 0に接続したLEDを制御( 03 ControlLEDWithLFOByButton続き)

// オシレータが更新される度に出力を更新void oscUpdated(Osc osc)

gainer.led().value = osc.value;

// ボタンの状態にあわせてオシレータを制御void gainerButtonEvent(boolean pressed)

if (pressed)

osc.reset();

osc.start();

else

osc.stop();

Funnel入門:デジタル出力

Funnel入門:デジタル出力

Funnel入門:ACソレノイドを動かす(デモ)

CdSセル

レーザーモジュールI/Oモジュール

アクチュエータユニット

ACソレノイド

SSR

AC電源へ

※この図では dout 0に接続していますが今回は aout 0に接続して下さい

Funnel入門:ACソレノイドを動かす(デモ)

• SSR(ソリッド・ステート・リレー)によりAC100V機器もLEDと同様にオン/オフ制御できる

• ACソレノイドの直線運動を別のエネルギーに変換することでフィジカルな世界に働きかけることができる

Funnel入門:Gainer I/Oの入力について

入力には2種類ある

• デジタル入力(din:0か1かの2段階)– スイッチなど– 状態がシンプルで取扱が簡単

• アナログ入力(ain:0~1の256段階)– 出力電圧が変化するセンサなど– 連続変化を扱うことができる

Funnel入門:din 0にスイッチを接続

Funnel入門:din 0にスイッチを接続

Funnel入門:ain 0にボリュームを接続

Funnel入門:ain 0にボリュームを接続

Funnel入門:ain 0にボリュームを接続

• 04 SimpleScopeを開いて実行• ボリュームを回して変化を確認• ain 1が不安定なのはなぜ?• どうしてボリュームを回すと電圧が変わるの?

Funnel入門:抵抗分圧

Funnel入門:抵抗分圧

Funnel入門:サンプルをボリュームで制御

• 05 Treeを開く*3

• 変更を加えるために別名で保存• Funnelを使うための準備• mouseXをain 0の値で置き換える

*3 Topics/Fractals and L-Systems/Treeと同じものです

Funnel入門:ain 0に光センサを接続

Funnel入門:ain 0に光センサを接続

Funnel入門:ain 0に光センサを接続

• 改変した 05 Treeを再度実行→ボリュームの場合と何かが違う?

• 04 SimpleScopeで入力の範囲を調べる• Scalerをフィルタとして追加する• 意図した通りになったかどうか確認

Funnel入門:Scalerの追加

コード例 8 Scalerを追加した 05 Tree

import processing.funnel.*;

Gainer gainer;

void setup()

size(400, 400, P3D);

...

gainer = new Gainer(this, Gainer.MODE1);

Filter f[] =

new Scaler(0.3, 0.9, 0, 1, Scaler.LINEAR, true)

;

gainer.analogInput(0).filters = f;

Funnel入門:ain 0に圧力センサを接続(デモ)

Funnel入門:ain 0に圧力センサを接続(デモ)

Funnel入門:ain 0に曲げセンサを接続(デモ)

Funnel入門:ain 0に曲げセンサを接続(デモ)

Funnel入門:ain 0に距離センサを接続(デモ)

Funnel入門:ain 0に距離センサを接続(デモ)

第2部:実習3(14:30~16:15)

Funnel応用

• 少し高度な入力を扱ってみる– 加速度センサ

• メディア再生のコントロール– サウンド– ムービー

Funnel応用:ainに加速度センサを接続

Funnel応用:ainに加速度センサを接続

Funnel応用:ainに加速度センサを接続

• 04 SimpleScopeを開く• 表示するチャンネル数を3に増やす• x, y, zそれぞれの軸の動きを確認

– 傾けてみる– 振ってみる

Funnel応用:加速度センサの用途

• 動きの検出• 傾きの検出→なぜ加速度センサで傾きが検出できるの?

Funnel応用:傾きを検出する原理

Funnel応用:センサの出力から角度を求める

• フィルタで細かい動きを取り除く• 04 SimpleScopeで変化幅を確認する• -1から+1までにスケーリングする• 逆sin関数を用いて角度に変換する

Funnel応用:加速度センサを使ってみる

• 06 RGBCube Mouseを開く*4

• マウスを動かして動作を確認する• マウス操作を加速度センサに置き換える

*4 3D and OpenGL/Form/RGBCubeを一部改変

Funnel応用:Processingでのサウンド再生

ライブラリを追加することで機能を拡張できる

• Libraries Processing 1.0 (BETA)http://processing.org/reference/libraries

• Minimhttp://code.compartmental.net/tools/minim

Funnel応用:Processingでのサウンド再生

コード例 9 簡単なサウンド再生()

import ddf.minim.*;

AudioPlayer player;

void setup()

size(200, 200);

// まず最初にMinimをスタートするMinim.start(this);

// ファイルをロードし、AudioPlayerのバッファサイズを512サンプルに設定するplayer = Minim.loadFile("groove.mp3", 512);

Funnel応用:Processingでのサウンド再生

コード例 10 簡単なサウンド再生(続き)

// この部分をセンサなどに置き換えるとキーボード以外でコントロールできるようになるvoid keyPressed()

// キー’p’が押されたらサウンド再生を開始するif ( key == ’p’ ) player.play();

第3部:スケッチ(16:30~17:45)

• 第2部で学んだスキルを用いて制作• クオリティにはこだわりすぎない• コードで書けない部分は手動でOK

参考:Bill Buxton(2006)What Sketches (and Prototypes) Are and Are Not.• Quick(素早く作る)• Timely(必要な時に作る)• Inexpensive(安く作る)• Disposable(終わったら捨てられるように)• Constrained Resolution(必要充分なクオリティで)

• Suggest & explore rather than confirm(意訳:スケッチは作品ではない)

第4部:プレゼン&まとめ(17:45~18:30)

• プレゼン(一人当たり3分程度)• 講評と質疑応答• まとめ

参考書籍

Making Things TalkPractical Methods for Connecting Physical Objects

Tom Igoe(O’Reilly Media・2007年)

参考書籍

Built with Processing [改訂版]デザイン/アートのためのプログラミング入門

前川峻志+田中孝太郎(ビー・エヌ・エヌ新社・2008年)

参考書籍

ProcessingA Programming Handbook for Visual Designers and Artists

Casey Reas + Ben Fry(MIT Press・2007年)

参考書籍

デザイン思考の道具箱イノベーションを生む会社のつくり方

奥出直人(早川書房・2007年)

参考書籍

はじめてのGainerプログラミングガイド布留川英一(工学社・2008年)

参考書籍

+GAINERPhysical Computing with Gainer

GainerBook Labo+くるくる研究室(九天社・2007年)

ハードウェアでスケッチフィジカル・コンピューティング・ワークショップ

講師:小林茂+遠藤孝則/アシスタント:蛭田直

2008.05.24