狠狠撸

狠狠撸Share a Scribd company logo
2013年4月30日~5月2日/情報科学芸術大学院大学[IAMAS]新校舎1階ギャラリー
小林 茂(情報科学芸術大学院大学[IAMAS]准教授)
Extended Motifwork 2013
Make: Hardware Sketching #1
Photography: Beth and Christian
http://www.?ickr.com/photos/six27/245969277/
Hardware Sketching Workshop 2013
Hardware Sketching Workshop 2013
Extended Motifwork 2013 ? Make: Hardware Sketching
イントロダクション
IDの時代におけるプロトタイピング
http://www.archiviosacchi.it/press_room/より引用
Giovanni Sacchi(1913~2005年)
Extended Motifwork 2013 ? Make: Hardware Sketching
イントロダクション
IDの時代におけるプロトタイピング
http://www.archiviosacchi.it/press_room/より引用
Extended Motifwork 2013 ? Make: Hardware Sketching
イントロダクション
IDの時代におけるプロトタイピング
http://www.archiviosacchi.it/press_room/より引用
Extended Motifwork 2013 ? Make: Hardware Sketching
イントロダクション
IDの時代におけるプロトタイピング
http://www.archiviosacchi.it/press_room/より引用
Extended Motifwork 2013 ? Make: Hardware Sketching
イントロダクション
IDの時代におけるプロトタイピング
http://www.archiviosacchi.it/press_room/より引用
Extended Motifwork 2013 ? Make: Hardware Sketching
イントロダクション
IxDの時代におけるプロトタイピング
? 現代における「model making」
? Giovanni Sacchiがかつて果たした役割
? 複数の職能の間での共通言語として
? インタラクションデザインにおいては「形」だけでは不十分
? もはや「形態は機能に従う」(form follows function)
は成り立たない
? プログラミングや電子回路が不可欠
?フィジカルコンピューティングがヒントに
Extended Motifwork 2013 ? Make: Hardware Sketching
イントロダクション
? ニューヨーク大学のITP*1から広まった、インタラクション
デザインを教えるためのメソッドの一つ
? コンピュータの原理原則を学び、既存のPCにとらわれずに
人間とコンピュータの関係を考え直す
? プロトタイピングを繰返しながら身体感覚として共通言語を
身につける
フィジカルコンピューティング
*1 Tisch School of Arts, Interactive Telecommunications Program
Extended Motifwork 2013 ? Make: Hardware Sketching
イントロダクション
Bill Buxtonの「Design Funnel」
? Sketching User Experiences (2007)
Sketching User Experiencesより抜粋したものを日本語化(138ページ)
投資
判定基準重み
デザイン ユーザビリティ
時間スケッチ
プロトタイプ
Extended Motifwork 2013 ? Make: Hardware Sketching
イントロダクション
スケッチとプロトタイプの違い
スケッチ プロトタイプ
提案(suggest) 記述(describe)
探求(explore) 精錬(re?ne)
質問(question) 回答(answer)
提案(propose) 検証(test)
曖昧(noncommittal) 表現(depiction)
Sketching User Experiencesより抜粋(140ページ)
Extended Motifwork 2013 ? Make: Hardware Sketching
イントロダクション
スケッチとは?
? 素早く
? タイムリーに
? 安く
? 捨てられる材料で
? たくさん
? 必要最小限のディテールで
? 確認ではなく提案と探索をする
Sketching User Experiencesより抜粋(136ページ)
ハードウェアスケッチの例
Hardware sketching examples
Extended Motifwork 2013 ? Make: Hardware Sketching
ハードウェアスケッチの例
ハードウェアスケッチ
? littleBits co?eemaker
https://vimeo.com/1389390
? littleBits
http://littlebits.cc
Hardware Sketching Workshop 2013
Extended Motifwork 2013 ? Make: Hardware Sketching
ハードウェアスケッチの例
? 大学院修士1年生
1st year students of the master course
? プログラミングの経験は少し
She had little programming skills
? 電子工作の経験はゼロ
She had no electronics skills
? 3D CADの経験はゼロ
She had no 3D CAD skills
? 製作期間はスキル習得も含めて六カ月
6 months project including acquiring skills
アクション!ゆびにんぎょう
Extended Motifwork 2013 ? Make: Hardware Sketching
IAMASにおける研究プロジェクト // Research Projects at IAMAS
リサーチ // Research
Extended Motifwork 2013 ? Make: Hardware Sketching
ハードウェアスケッチの例
アイデアスケッチ // Idea Sketching
アクション!ゆびにんぎょう(制作:笠原友美) / Action! Finger Puppet (Tomomi Kasahara)
Extended Motifwork 2013 ? Make: Hardware Sketching
ハードウェアスケッチの例
まず、サインペンを使用してアイディアの全体を描い
ていきます。うまく描く必要はありません、重要なの
はアイデアを伝えることです。
全体を描いた後は、黒のマーカで全体を縁取ります。
これにより遠くからでも、しっかりと形を見ることが
出来ます。
次に特徴となる部分や、機能がある部分に赤色のマー
カーで色をつけます。どこが重要なのかがすぐわかる
ようになります。
最後にグレーのマーカーで陰や質感などを描きます。
立体感や素材の特徴によりアイディアのイメージがふ
くらみます。
1 2
3 4
スケッチのルール // Rules of Sketching
Extended Motifwork 2013 ? Make: Hardware Sketching
IAMASにおける研究プロジェクト // Research Projects at IAMAS
並べ替えと投票 // Sorting and Voting
Extended Motifwork 2013 ? Make: Hardware Sketching
IAMASにおける研究プロジェクト // Research Projects at IAMAS
ダーティモデリング // Dirty Modeling
アクション!ゆびにんぎょう(制作:笠原友美) / Action! Finger Puppet (Tomomi Kasahara)
Extended Motifwork 2013 ? Make: Hardware Sketching
ハードウェアスケッチの例
ビデオスケッチ // Video Sketching
アクション!ゆびにんぎょう(制作:笠原友美) / Action! Finger Puppet (Tomomi Kasahara)
Extended Motifwork 2013 ? Make: Hardware Sketching
IAMASにおける研究プロジェクト // Research Projects at IAMAS
ハードウェアスケッチ // Hardware Sketching
アクション!ゆびにんぎょう(制作:笠原友美) / Action! Finger Puppet (Tomomi Kasahara)
Extended Motifwork 2013 ? Make: Hardware Sketching
IAMASにおける研究プロジェクト // Research Projects at IAMAS
プロトタイプ制作 // Making Prototypes
アクション!ゆびにんぎょう(制作:笠原友美) / Action! Finger Puppet (Tomomi Kasahara)
アクション!ゆびにんぎょう(制作:笠原友美) / Action! Finger Puppet (Tomomi Kasahara)
アクション!ゆびにんぎょう(制作:笠原友美) / Action! Finger Puppet (Tomomi Kasahara)
Hardware Sketching Workshop 2013
https://vimeo.com/17150420
アイデアスケッチ / The idea sketch
最初のプロトタイプ / The ?rst prototype
最初のプロトタイプの外装 / The shell of the 1st prototype (built with 3d printing)
最初のプロトタイプの基板 / The PCB of the 1st prototype
Miga NanoMuscle purchased from SparkFun
Comparison between prototypes from the 1st (right) to 4th (left) and an official domino piece
LilyPad Arduino
a derivative a derivative
Arduino Fio Esper Domino (4th)
http://www.diginfo.tv/v/12-0047-r-en.php
Hardware Sketching Workshop 2013
Hardware Sketching Workshop 2013
Hardware Sketching Workshop 2013
Hardware Sketching Workshop 2013
Hardware Sketching Workshop 2013
Hardware Sketching Workshop 2013
Hardware Sketching Workshop 2013
Hardware Sketching Workshop 2013
Hardware Sketching Workshop 2013
Hardware Sketching Workshop 2013
Hardware Sketching Workshop 2013
Hardware Sketching Workshop 2013
Hardware Sketching Workshop 2013
Hardware Sketching Workshop 2013
Hardware Sketching Workshop 2013
Hardware Sketching Workshop 2013
Hardware Sketching Workshop 2013
Hardware Sketching Workshop 2013
ものづくり=なぜ? なにを? どうやって?
What? How?Why?Making Things
ものづくり=なぜ? なにを? どうやって?
What? How?Why?Making Things
ものづくり=なぜ? なにを? どうやって?
What? How?Why?Making Things
ものづくり=なぜ? なにを? どうやって?
What? How?Why?Making Things
Extended Motifwork 2013 ? Make: Hardware Sketching
ワークショップ:基本編
ワークショップの流れ
? セットアップ
? Arduinoを使ってみる
? 電子回路の基礎知識
? 基本的な入出力
Extended Motifwork 2013 ? Make: Hardware Sketching
ワークショップ:基本編
今回使用する主な部品
Extended Motifwork 2013 ? Make: Hardware Sketching
ワークショップ:基本編
Arduinoとは?
? フィジカルコンピューティングのためのツールキット
? 電子回路をプロトタイピングするためのオープンソースの
プラットフォームで、柔軟で簡単に使えるハードウェアと
ソフトウェアで構成
? アーティスト、デザイナ、ホビイスト、そして
インタラクティブなオブジェクトや環境をつくることに
興味がある全ての人が対象
Extended Motifwork 2013 ? Make: Hardware Sketching
ワークショップ:基本編
Arduinoを構成する3つの要素
? Arduinoボード
? ATMega328P(16MHz)を搭載
? USB
? オープンソース(さまざまなバリエーションと互換機)
? Arduino IDE
? Windows、Mac OS X、Linux上で動作
? オープンソース
? デバッガはない
? Arduino言語
? C/C++をベースにしたプログラミング言語
Extended Motifwork 2013 ? Make: Hardware Sketching
ワークショップ:基本編
Arduinoの流儀
デザインについて語ることよりも作ることのほうがArduino の哲学に適っ
ています。良いプロトタイプを作るために、より速く、よりパワフルな手法
を探索し続けることが重要です。自分の手を使って考えながら、いろいろな
テクニックを試し、発展させましょう。
Massimo Banzi(「Arduinoをはじめよう」著者)
Massimo Banzi著「Arduinoをはじめよう」003ページより引用
Extended Motifwork 2013 ? Make: Hardware Sketching
ワークショップ:基本編
Arduinoの流儀
? プロトタイピング
? いじくりまわす
? パッチング
? サーキットベンディング
? キーボードハック
? ジャンク大好き!
? オモチャをハック
? コラボレーション
Massimo Banzi著「Arduinoをはじめよう」004~014ページより引用
Extended Motifwork 2013 ? Make: Hardware Sketching
ワークショップ:基本編
Tinkering(いじくりまわす)
Massimo Banzi著「Arduinoをはじめよう」005ページより引用
Extended Motifwork 2013 ? Make: Hardware Sketching
ワークショップ:基本編
Arduinoボード
グラウンド
パワーインジケータ
+3.3V
電源の+
+5V
グラウンド×2
アナログ入力×6
デジタル入出力×14
外部電源
Extended Motifwork 2013 ? Make: Hardware Sketching
ワークショップ:基本編
Arduino IDE
Verify
スケッチがコンパイルできるか確認する
New
新しいスケッチを生成する
Open
サンプルや既存のスケッチを開く
Save
現在開いているスケッチを保存する
Serial Monitor
シリアルモニタを開く
Upload
スケッチを Arduino ボードにアップロードする
ツールバー
タ?ブ
テキストエディタ
メッセージエリア
テキストエリア
Extended Motifwork 2013 ? Make: Hardware Sketching
ワークショップ:基本編
Arduinoの動作確認
? File→Examples→Digital→Blinkを開く
? Uploadボタンを押してアップロード
? LEDが点滅することを確認
Extended Motifwork 2013 ? Make: Hardware Sketching
ワークショップ:基本編
電子回路の基礎知識
? 基本用語
? 電圧:2点間の電位差、単位はV(ボルト)
? 電流:流れる電気の量、単位はA(アンペア)
? 抵抗:電気の流れにくさ、単位はΩ(オーム)
? 最初は水の流れに例えて理解することができる
? 電圧→水圧
? 電流→水流
Extended Motifwork 2013 ? Make: Hardware Sketching
ワークショップ:基本編
電圧の概念図
電位差
電位A
電位B
グラウンド(GND)
Extended Motifwork 2013 ? Make: Hardware Sketching
ワークショップ:基本編
オームの法則
多 少
←同じ圧力→
←同じ量→
←圧力低 ←圧力高
Extended Motifwork 2013 ? Make: Hardware Sketching
ワークショップ:基本編
ブレッドボード
Extended Motifwork 2013 ? Make: Hardware Sketching
ワークショップ:基本編
LEDをつないでみる
Extended Motifwork 2013 ? Make: Hardware Sketching
ワークショップ:基本編
LEDをつないでみる
Extended Motifwork 2013 ? Make: Hardware Sketching
ワークショップ:基本編
抵抗器ありでLEDをつなぐ
330Ω
Extended Motifwork 2013 ? Make: Hardware Sketching
ワークショップ:基本編
抵抗器ありでLEDをつなぐ
Extended Motifwork 2013 ? Make: Hardware Sketching
ワークショップ:基本編
オームの法則ふたたび
LEDの順電圧
抵抗器にかかる電圧
330Ω
Extended Motifwork 2013 ? Make: Hardware Sketching
ワークショップ:基本編
オームの法則ふたたび
多 少
←同じ圧力→
←同じ量→
←圧力低 ←圧力高
Extended Motifwork 2013 ? Make: Hardware Sketching
ワークショップ:基本編
オームの法則を用いて抵抗値を計算
E(電圧) = I(電流) R(抵抗)?オームの法則を式で表したもの
電源電圧 - LEDにかかる電圧 = LEDに流れる電流 抵抗
↓抵抗を求めるために変形
抵抗 = (電源電圧 - LEDにかかる電圧) LEDに流れる電流
↓単位を揃えて実際の値を代入
抵抗 = (5 - 1.8) 0.01 = 3.2 0.01 =320
↓最も近い値の抵抗器を選択する
330Ω
※LEDに流れる電流を制限する方法は抵抗器だけではない
LEDの順電圧
抵抗器にかかる電圧
330Ω
Extended Motifwork 2013 ? Make: Hardware Sketching
ワークショップ:基本編
ArduinoでHello World!
void setup() {
// initialize the digital pin as an output.
// Pin 13 has an LED connected on most Arduino boards:
pinMode(13, OUTPUT);
}
void loop() {
digitalWrite(13, HIGH); // set the LED on
delay(1000); // wait for a second
digitalWrite(13, LOW); // set the LED off
delay(1000); // wait for a second
}
Extended Motifwork 2013 ? Make: Hardware Sketching
ワークショップ:基本編
点滅の間隔を変えてみよう
void setup() {
// initialize the digital pin as an output.
// Pin 13 has an LED connected on most Arduino boards:
pinMode(13, OUTPUT);
}
void loop() {
digitalWrite(13, HIGH); // set the LED on
delay(100); // wait for a second
digitalWrite(13, LOW); // set the LED off
delay(100); // wait for a second
}
Extended Motifwork 2013 ? Make: Hardware Sketching
ワークショップ:基本編
点滅の間隔を変えてみよう
void setup() {
// initialize the digital pin as an output.
// Pin 13 has an LED connected on most Arduino boards:
pinMode(13, OUTPUT);
}
void loop() {
digitalWrite(13, HIGH); // set the LED on
delay(10); // wait for a second
digitalWrite(13, LOW); // set the LED off
delay(10); // wait for a second
}
Extended Motifwork 2013 ? Make: Hardware Sketching
ワークショップ:基本編
点滅の間隔を変えてみよう
void setup() {
// initialize the digital pin as an output.
// Pin 13 has an LED connected on most Arduino boards:
pinMode(13, OUTPUT);
}
void loop() {
digitalWrite(13, HIGH); // set the LED on
delay(1); // wait for a second
digitalWrite(13, LOW); // set the LED off
delay(9); // wait for a second
}
Extended Motifwork 2013 ? Make: Hardware Sketching
ワークショップ:基本編
アナログ出力(PWM)
330Ω
Extended Motifwork 2013 ? Make: Hardware Sketching
ワークショップ:基本編
アナログ出力(PWM)
Extended Motifwork 2013 ? Make: Hardware Sketching
ワークショップ:基本編
アナログ出力(PWM):1.Basics/Fade
int brightness = 0;
int fadeAmount = 5;
void setup() {
pinMode(9, OUTPUT);
}
void loop() {
// set the brightness of pin 9:
analogWrite(9, brightness);
brightness = brightness + fadeAmount;
if (brightness == 0 || brightness == 255) {
fadeAmount = -fadeAmount ;
}
delay(30);
}
Extended Motifwork 2013 ? Make: Hardware Sketching
ワークショップ:基本編
PWM(Pulse Width Modulation)
0
5
電圧
時間
0
5
電圧
時間
Extended Motifwork 2013 ? Make: Hardware Sketching
ワークショップ:基本編
PWMを利用できるデジタルピン
グラウンド
パワーインジケータ
+3.3V
電源の+
+5V
グラウンド×2
アナログ入力×6
デジタル入出力×14
外部電源
Extended Motifwork 2013 ? Make: Hardware Sketching
ワークショップ:基本編
デジタル入力(プルダウン)
330Ω
10kΩ
Extended Motifwork 2013 ? Make: Hardware Sketching
ワークショップ:基本編
デジタル入力(プルダウン)
Extended Motifwork 2013 ? Make: Hardware Sketching
ワークショップ:基本編
デジタル入力:2.Digital/Button
const int buttonPin = 2;
const int ledPin = 13;
int buttonState = 0;
void setup() {
pinMode(ledPin, OUTPUT);
pinMode(buttonPin, INPUT);
}
void loop(){
// read the state of the pushbutton value:
buttonState = digitalRead(buttonPin);
if (buttonState == HIGH) {
digitalWrite(ledPin, HIGH);
}
else {
digitalWrite(ledPin, LOW);
}
}
Extended Motifwork 2013 ? Make: Hardware Sketching
ワークショップ:基本編
デジタル入力(プルアップ)
330Ω
10kΩ
Extended Motifwork 2013 ? Make: Hardware Sketching
ワークショップ:基本編
デジタル入力(プルアップ)
Extended Motifwork 2013 ? Make: Hardware Sketching
ワークショップ:基本編
デジタル出力(シンク)
330Ω
10kΩ
Extended Motifwork 2013 ? Make: Hardware Sketching
ワークショップ:基本編
デジタル出力(シンク)
Extended Motifwork 2013 ? Make: Hardware Sketching
ワークショップ:基本編
レシピ1?24:明るさに応じてLEDを制御
330Ω
10kΩ
Extended Motifwork 2013 ? Make: Hardware Sketching
ワークショップ:基本編
レシピ1?24:明るさに応じてLEDを制御
Extended Motifwork 2013 ? Make: Hardware Sketching
ワークショップ:基本編
アナログ入力:自分でコードを書いてみる
const int sensorPin = A0;
void setup() {
Serial.begin(9600);
}
void loop() {
// read the value from the sensor:
int sensorValue = analogRead(sensorPin);
// send the value to the PC via serial
Serial.println(sensorValue);
// wait for a little bit
delay(100);
}
Extended Motifwork 2013 ? Make: Hardware Sketching
ワークショップ:基本編
抵抗分圧
Extended Motifwork 2013 ? Make: Hardware Sketching
ワークショップ:基本編
レシピ1?24:明るさに応じてLEDを制御
// 閾値
const int threshold = 511;
// ヒステリシス
const int hysteresis = 102;
const int sensorPin = 0;
const int ledPin = 9;
// 前回の状態
boolean wasBright = true;
void setup() {
pinMode(ledPin, OUTPUT);
// LEDを消灯
digitalWrite(ledPin, LOW);
}
Extended Motifwork 2013 ? Make: Hardware Sketching
ワークショップ:基本編
レシピ1?24:明るさに応じてLEDを制御
void loop() {
int brightness = analogRead(sensorPin);
// 現在の状態(初期値には前回の値を代入)
boolean isBright = wasBright;
if (brightness > (threshold + hysteresis)) {
// 現在の明るさが閾値+ヒステリシスよりも大きければ明るいと判断
isBright = true;
}
else if (brightness < (threshold - hysteresis)) {
// 現在の明るさが閾値ーヒステリシスよりも小さければ暗いと判断
isBright = false;
}
if (!wasBright && isBright) {
// 暗い状態から明るい状態に変化したらLEDを消灯
digitalWrite(ledPin, LOW);
}
else if (wasBright && !isBright) {
// 明るい状態から暗い状態に変化したらLEDを点灯
digitalWrite(ledPin, HIGH);
}
// 全回の値として今回の値をセット
wasBright = isBright;
}
Extended Motifwork 2013 ? Make: Hardware Sketching
ワークショップ:基本編
PC連携:4.Communication/Dimmer
1. ウェブブラウザで次のURLにアクセス
http://processing.org/download/
2. 使用しているプラットフォームに対応したパッケージを
ダウンロード
3. デスクトップなどに展開して起動
Extended Motifwork 2013 ? Make: Hardware Sketching
ワークショップ:基本編
PC連携:4.Communication/Dimmer
const int ledPin = 9;
void setup() {
// initialize the serial communication:
Serial.begin(9600);
pinMode(ledPin, OUTPUT);
}
void loop() {
byte brightness;
// check if data has been sent from the computer:
if (Serial.available()) {
// read the most recent byte (0-255)
brightness = Serial.read();
// set the brightness of the LED:
analogWrite(ledPin, brightness);
}
}
Extended Motifwork 2013 ? Make: Hardware Sketching
ワークショップ:基本編
PC連携:4.Communication/Dimmer
import processing.serial.*;
Serial port;
void setup() {
size(256, 150);
// Print available serial ports
println(Serial.list());
port = new Serial(this, "COM1", 9600);
}
void draw() {
// draw a gradient from black to white
...
// send the current X-position of the mouse
port.write(mouseX);
}
Extended Motifwork 2013 ? Make: Hardware Sketching
ワークショップ:応用編
デジタル入力の変化をイベントにする(1/2)
const int buttonPin = 2;
const int ledPin = 13;
int buttonState = 0;
// 前回のボタンの状態を保持するための変数
int lastButtonState = LOW;
// 現在のLEDの状態を保持するための変数
boolean ledIsOn = false;
void setup() {
pinMode(ledPin, OUTPUT);
pinMode(buttonPin, INPUT);
}
Extended Motifwork 2013 ? Make: Hardware Sketching
ワークショップ:応用編
デジタル入力の変化をイベントにする(2/2)
void loop() {
// ボタンの状態を読み取る
buttonState = digitalRead(buttonPin);
// 前回ボタンが押されていなくて現在ボタンが押されていたら
if (lastButtonState == LOW && buttonState == HIGH) {
if (!ledIsOn) {
// 現在LEDがオンでなければオンにセット
digitalWrite(ledPin, HIGH);
ledIsOn = true;
} else {
// 現在LEDがオンであればオフにセット
digitalWrite(ledPin, LOW);
ledIsOn = false;
}
}
// 前回のボタンの状態を保持する変数の値に現在のボタンの状態をセット
lastButtonState = buttonState;
}
Extended Motifwork 2013 ? Make: Hardware Sketching
ワークショップ:応用編
デジタル入力の変化をイベントにする
? 変化した時にシリアルで送信するようにしてみる
? 1回しかオン/オフしていないのに複数回発生する?
? この現象をチャタリングと呼ぶ
? ループ中にディレイを入れることである程度解決する
Extended Motifwork 2013 ? Make: Hardware Sketching
ワークショップ:応用編
スイッチを押したら写真を撮影?保存する
1. Examples/Libraries/video/Capture/
GettingStartedCaptureを開く
2. Examples/Topics/File IO/SaveFramesを開く
3. 組み合せてマウスクリックで画像を保存できるようにする
4. Examples/Libraries/serial/SimpleReadを開く
5. Arduino用のスケッチを書いてアップロードする
6. 組み合せてスイッチを押したら画像を保存できるようにする
Extended Motifwork 2013 ? Make: Hardware Sketching
ワークショップ:応用編
Arduino側の例(1/2)
const int buttonPin = 2;
// 前回のボタンの状態を保持するための変数
int lastButtonState = LOW;
void setup() {
pinMode(buttonPin, INPUT);
// シリアル通信を9600bpsで開始
Serial.begin(9600);
}
Extended Motifwork 2013 ? Make: Hardware Sketching
ワークショップ:応用編
Arduino側の例(2/2)
void loop() {
// ボタンの状態を読み取る
int buttonState = digitalRead(buttonPin);
// 前回ボタンが押されていなくて現在ボタンが押されていたら
if (lastButtonState == LOW && buttonState == HIGH) {
Serial.print('*');
}
// 前回のボタンの状態を保持する変数の値に現在のボタンの状態をセット
lastButtonState = buttonState;
// チャタリングを防止するために10ms待つ
delay(10);
}
Extended Motifwork 2013 ? Make: Hardware Sketching
ワークショップ:応用編
Processing側の例(1/2)
import processing.video.*;
import processing.serial.*;
Capture cam;
Serial serialPort;
void setup() {
size(640, 480, P2D);
cam = new Capture(this, 640, 480);
cam.start();
// シリアルポートのリストをプリント
println(Serial.list());
// Mac OS X LionではArduinoは0番目のシリアルポートになる
// Mac OS X Mountain Lionでは異なるため、リストの出力に合わせて変更
String portName = Serial.list()[6];
serialPort = new Serial(this, portName, 9600);
}
Extended Motifwork 2013 ? Make: Hardware Sketching
ワークショップ:応用編
Processing側の例(1/2)
import processing.video.*;
import processing.serial.*;
Capture cam;
Serial serialPort;
void setup() {
size(640, 480, P2D);
cam = new Capture(this, 640, 480);
cam.start();
// シリアルポートのリストをプリント
println(Serial.list());
// Mac OS X LionではArduinoは0番目のシリアルポートになる
// Mac OS X Mountain Lionでは異なるため、リストの出力に合わせて変更
String portName = Serial.list()[6];
serialPort = new Serial(this, portName, 9600);
}
Extended Motifwork 2013 ? Make: Hardware Sketching
ワークショップ:応用編
Processing側の例(2/2)
void draw() {
if (cam.available() == true) {
cam.read();
}
image(cam, 0, 0);
if (serialPort.available() > 0) {
int inByte = serialPort.read();
// 読み取ったデータが想定しているものであれば現在の画面を保存
if (inByte == '*') {
saveFrame("output/frames####.png");
println("captured");
}
}
}
Extended Motifwork 2013 ? Make: Hardware Sketching
ワークショップ:応用編
スイッチを押したらサウンドを再生する
1. Examples/Libraries/minim/PlayAFileを開く
2. 先ほどのサンプルを参考にして、スイッチを押したらサウンド
を再生するようにする
3. Minimのリファレンスは以下を参照
http://code.compartmental.net/minim/javadoc/
Extended Motifwork 2013 ? Make: Hardware Sketching
ワークショップ:応用編
Arduino側の例(1/2)
const int buttonPin = 2;
// 前回のボタンの状態を保持するための変数
int lastButtonState = LOW;
void setup() {
pinMode(buttonPin, INPUT);
// シリアル通信を9600bpsで開始
Serial.begin(9600);
}
Extended Motifwork 2013 ? Make: Hardware Sketching
ワークショップ:応用編
Arduino側の例(2/2)
void loop() {
// ボタンの状態を読み取る
int buttonState = digitalRead(buttonPin);
// 前回ボタンが押されていなくて現在ボタンが押されていたら
if (lastButtonState == LOW && buttonState == HIGH) {
Serial.print('p');
}
// 前回ボタンが押されていて現在ボタンが押されていなかったら
else if (lastButtonState == HIGH && buttonState == LOW) {
Serial.print('r');
}
// 前回のボタンの状態を保持する変数の値に現在のボタンの状態をセット
lastButtonState = buttonState;
// チャタリングを防止するために10ms待つ
delay(10);
}
Extended Motifwork 2013 ? Make: Hardware Sketching
ワークショップ:応用編
Processing側の例(1/2)
import ddf.minim.*;
import processing.serial.*;
Minim minim;
AudioPlayer player;
Serial serialPort;
void setup()
{
size(512, 200, P3D);
println(Serial.list());
String portName = Serial.list()[6];
serialPort = new Serial(this, portName, 9600);
minim = new Minim(this);
player = minim.loadFile("marcus_kellis_theme.mp3");
}
Extended Motifwork 2013 ? Make: Hardware Sketching
ワークショップ:応用編
Processing側の例(2/2)
void draw()
{
if (serialPort.available() > 0) {
int inByte = serialPort.read();
if (inByte == 'p') {
player.rewind();
player.play();
}
else if (inByte == 'r') {
player.pause();
}
}
}
Extended Motifwork 2013 ? Make: Hardware Sketching
ワークショップ:応用編
ライブラリはどんな時に有効か?
? 複数の入出力を扱いたいとき
? 特別なセンサやアクチェータを扱いたいとき
? ライブラリの詳細に関しては次のページを参照
http://arduino.cc/en/Reference/Libraries
Extended Motifwork 2013 ? Make: Hardware Sketching
ワークショップ:応用編
ライブラリの使い方
1. ウェブブラウザで次のURLにアクセス
https://github.com/soundanalogous/ActionButton/
2. ZIPボタンをクリックしてダウンロードし、ダウンロードが
終わったら解凍する
3. 書類/Arduinoの中に(もしまだなければ)「libraries」と
いうファルダを作成
4. 解凍が終わったファイルを次のように配置
Arduino/libraries/ActionButton
5. SketchメニューのImport Library...のContributedの中に
ActionButtonが表示されることを確認
Extended Motifwork 2013 ? Make: Hardware Sketching
ワークショップ:応用編
今回のサンプル
1. ウェブブラウザで次のURLにアクセス
https://dl.dropboxusercontent.com/u/36239/
workshop_examples_2013-04-30.zip
2. ZIPボタンをクリックしてダウンロードし、ダウンロードが
終わったら解凍し、書類/Arduinoフォルダに移動する
Extended Motifwork 2013 ? Make: Hardware Sketching
ワークショップ:応用編
LEDライブラリの基本例(1)
#include <LED.h>
// LEDオブジェクト
LED led = LED(9);
void setup() {
// LEDを1000ms間隔で点滅させる
led.blink(1000);
}
void loop() {
// LEDの状態を更新
led.update();
}
Extended Motifwork 2013 ? Make: Hardware Sketching
ワークショップ:応用編
LEDライブラリの基本例(2)
#include <LED.h>
// LEDオブジェクト
LED led = LED(9);
void setup() {
// LEDを2000msでフェードイン
led.fadeIn(2000);
}
void loop() {
// LEDの状態を更新
led.update();
}
Extended Motifwork 2013 ? Make: Hardware Sketching
ワークショップ:応用編
ActionButtonライブラリの基本(1/2)
#include <Button.h>
#include <LED.h>
Button button = Button(2);
LED led = LED(9);
void setup() {
// ここでは何もしない
}
Extended Motifwork 2013 ? Make: Hardware Sketching
ワークショップ:応用編
ActionButtonライブラリの基本(2/2)
void loop() {
// ボタンの状態を更新(これを実行しない限り状態は更新されない)
button.update();
// ボタンが押されていれば
if (button.isPressed()) {
// LEDをオン
led.on();
}
else {
// LEDをオフ
led.off();
}
}
Extended Motifwork 2013 ? Make: Hardware Sketching
ワークショップ:応用編
簡易リファレンス:ActionButton(1/2)
// コンストラクタ
Button(uint8_t buttonPin, uint8_t buttonMode);
// ボタンの状態を更新する
void update();
// ボタンが押されているか否か
bool isPressed();
// updateを呼ぶ前にボタンが押されていたか否か
bool wasPressed();
// updateの前後で状態が変化したか否か
bool stateChanged();
// ボタンが押されていない→押されたへの変化が起きたか否か
bool uniquePress();
// ボタンが押された→押されていないへの変化が起きたか否か
bool uniqueRelease();
// 長押しのしきい値をセット
void setHoldThreshold(unsigned int holdTime);
Extended Motifwork 2013 ? Make: Hardware Sketching
ワークショップ:応用編
簡易リファレンス:ActionButton(2/2)
// あらかじめ設定した時間だけ長押しされたか否か
bool held(unsigned int time);
// 引数で与えた時間だけ押されたか否か
bool heldFor(unsigned int time);
// ボタンが押されたイベントに対するイベントハンドラをセット
void pressHandler(buttonEventHandler handler);
// ボタンが離されたイベントに対するイベントハンドラをセット
void releaseHandler(buttonEventHandler handler);
// ボタンがクリックされたイベントに対するイベントハンドラをセット
void clickHandler(buttonEventHandler handler);
// 長押しイベントに対するイベントハンドラをセット
void holdHandler(buttonEventHandler handler, unsigned int holdTime);
// ボタンが押されている時間
unsigned int holdTime() const;
// ボタンが押された回数
unsigned int presses() const;
Extended Motifwork 2013 ? Make: Hardware Sketching
ワークショップ:応用編
簡易リファレンス:LED(1/2)
//コンストラクタ
LED(byte ledPin, byte driveMode = SOURCE);
// LEDの状態を更新
void update();
// 現在の状態を取得
byte getState();
// 点灯
void on();
// 消灯
void off();
// 点灯と消灯をトグル
void toggle();
// 点滅(引数は間隔、回数、波形、指定回数だけ終了するまで待つか否か)
void blink(unsigned int time, byte times = 0, byte wave = 0, bool synchronous);
// 輝度をセット
void setValue(byte val);
Extended Motifwork 2013 ? Make: Hardware Sketching
ワークショップ:応用編
簡易リファレンス:LED(2/2)
// 現在の輝度を取得
byte getValue();
// 指定した値までフェード(引数は値、時間、終了まで待つか否か)
void fadeTo(byte val, unsigned int time, bool synchronous);
// フェードイン(引数は時間、終了するまで待つか否か)
void fadeIn(unsigned int time, bool synchronous);
// フェードアウト(引数は時間、終了するまで待つか否か)
void fadeOut(unsigned int time, bool synchronous);
Extended Motifwork 2013 ? Make: Hardware Sketching
ワークショップ:応用編
RGB LED
150Ω150Ω
330Ω
Extended Motifwork 2013 ? Make: Hardware Sketching
ワークショップ:応用編
測距センサ(PSD)
Extended Motifwork 2013 ? Make: Hardware Sketching
補足
部品などの購入先一覧
? スイッチサイエンス
http://www.switch-science.com/
? メカロボショップ
http://www.mecharoboshop.com/
? 共立エレショップ
http://eleshop.jp/
? 秋月電子
http://akizukidenshi.com/
? マルツ電波
http://marutsu.co.jp/
? aitendo
http://www.aitendo.co.jp/
Extended Motifwork 2013 ? Make: Hardware Sketching
補足
さらに詳しく知りたい時は?
? Arduino公式ウェブサイト(http://arduino.cc/)
? Prototyping Labウェブサイト(http://prototypinglab.com/)
? Googleで検索
? 書籍で調べる
Extended Motifwork 2013 ? Make: Hardware Sketching
konashi
konashiとは
? ユカイ工学が開発、販売するツールキット
http://konashi.ux-xu.com
? 8つのデジタル入出力ピン、3つのアナログ入力ピン、I2C(デ
ジタル入出力ピン6および7と兼用)、1つのシリアルポート
? 外部電源、コイン形電池(CR2032)、バッテリ端子から電
源を供給できる
? iOS用のライブラリが提供されるI/Oモジュールであるため、
プログラミングをiOSデバイス上で完結できる
? 必要に応じてArduinoなどと組合わせることができる
? 技術的にはBluetooth Low Energyを採用
Extended Motifwork 2013 ? Make: Hardware Sketching
konashi
Bluetooth Low Energyとは
? 超低消費電力無線通信
? Bluetooth 4で統合(=Bluetooth 3+BLE)
? 少量データ、低頻度を想定
? iPhone 4S(2011年10月)以降のApple社製品、iOS 5以降で
対応
? MFi(Made For iPhone)のためのNDA締結が不要
? XcodeとCoreBluetoothフレームワークで開発できる
? デバイス間の接続はスター型で、接続数は上限なし、セントラル
とペリフェラルは非対称(ペリフェラルがより低消費電力)
参考資料:iOSアプリ開発者のためのBluetooth Low Energy体験講座(上原昭宏氏)
Extended Motifwork 2013 ? Make: Hardware Sketching
konashi
konashiのピン配列
konashiマニュアルより転載
USB-microB
(USB-Bus power)
DC 5.0V
コイン型バッテリ
(CR2032type)
DC 3.0V
バッテリ電圧
(S2B-PH-K-S / JST)
DC 3.2 ~12.0V
USART通信端子
デジタルI / O (PIO 0 5)
(PWM端子と兼用)
デジタルI / O (PIO 6,7)
(PWM端子. I2C通信端子と兼用)
各種電圧端子
(バッテリ電圧, DC5.0V,
DC3.0V)
アナログ入力 (AIO 0~2)
(リファレンス電圧 1.3V)
オンボード入力端子
(PIO 0)
オンボード出力端子
(PIO 1~4)
オンボード入出力
切換え端子
Extended Motifwork 2013 ? Make: Hardware Sketching
konashi
デジタル入出力ピンの5番にLEDを接続
Extended Motifwork 2013 ? Make: Hardware Sketching
konashi
アナログ入力ピンの0番にCdSセルを接続
Extended Motifwork 2013 ? Make: Hardware Sketching
konashi
さらに詳しく知りたい時は?
? konashiの製品ウェブサイトのドキュメント
http://konashi.ux-xu.com/documents/
? FacebookのWT-BTLEグループ
https://www.facebook.com/groups/
563064710384459/
? iOSアプリ開発者のためのBluetooth Low Energy体験講座資料
http://www.slideshare.net/reinforcelab/20130322-btle
Extended Motifwork 2013 ? Make: Hardware Sketching
ワークショップ:実践編
課題
? スイッチをつくる
? ここ一番で使うスイッチ
? 間違って押せてはいけない
? 押した時には確実に動作しなくてはならない
? 動作したことが分かるようにインタラクションを実装する
? スイッチの形状も検討する
? 発表は14:30から

More Related Content

Hardware Sketching Workshop 2013

  • 2. Photography: Beth and Christian http://www.?ickr.com/photos/six27/245969277/
  • 5. Extended Motifwork 2013 ? Make: Hardware Sketching イントロダクション IDの時代におけるプロトタイピング http://www.archiviosacchi.it/press_room/より引用 Giovanni Sacchi(1913~2005年)
  • 6. Extended Motifwork 2013 ? Make: Hardware Sketching イントロダクション IDの時代におけるプロトタイピング http://www.archiviosacchi.it/press_room/より引用
  • 7. Extended Motifwork 2013 ? Make: Hardware Sketching イントロダクション IDの時代におけるプロトタイピング http://www.archiviosacchi.it/press_room/より引用
  • 8. Extended Motifwork 2013 ? Make: Hardware Sketching イントロダクション IDの時代におけるプロトタイピング http://www.archiviosacchi.it/press_room/より引用
  • 9. Extended Motifwork 2013 ? Make: Hardware Sketching イントロダクション IDの時代におけるプロトタイピング http://www.archiviosacchi.it/press_room/より引用
  • 10. Extended Motifwork 2013 ? Make: Hardware Sketching イントロダクション IxDの時代におけるプロトタイピング ? 現代における「model making」 ? Giovanni Sacchiがかつて果たした役割 ? 複数の職能の間での共通言語として ? インタラクションデザインにおいては「形」だけでは不十分 ? もはや「形態は機能に従う」(form follows function) は成り立たない ? プログラミングや電子回路が不可欠 ?フィジカルコンピューティングがヒントに
  • 11. Extended Motifwork 2013 ? Make: Hardware Sketching イントロダクション ? ニューヨーク大学のITP*1から広まった、インタラクション デザインを教えるためのメソッドの一つ ? コンピュータの原理原則を学び、既存のPCにとらわれずに 人間とコンピュータの関係を考え直す ? プロトタイピングを繰返しながら身体感覚として共通言語を 身につける フィジカルコンピューティング *1 Tisch School of Arts, Interactive Telecommunications Program
  • 12. Extended Motifwork 2013 ? Make: Hardware Sketching イントロダクション Bill Buxtonの「Design Funnel」 ? Sketching User Experiences (2007) Sketching User Experiencesより抜粋したものを日本語化(138ページ) 投資 判定基準重み デザイン ユーザビリティ 時間スケッチ プロトタイプ
  • 13. Extended Motifwork 2013 ? Make: Hardware Sketching イントロダクション スケッチとプロトタイプの違い スケッチ プロトタイプ 提案(suggest) 記述(describe) 探求(explore) 精錬(re?ne) 質問(question) 回答(answer) 提案(propose) 検証(test) 曖昧(noncommittal) 表現(depiction) Sketching User Experiencesより抜粋(140ページ)
  • 14. Extended Motifwork 2013 ? Make: Hardware Sketching イントロダクション スケッチとは? ? 素早く ? タイムリーに ? 安く ? 捨てられる材料で ? たくさん ? 必要最小限のディテールで ? 確認ではなく提案と探索をする Sketching User Experiencesより抜粋(136ページ)
  • 16. Extended Motifwork 2013 ? Make: Hardware Sketching ハードウェアスケッチの例 ハードウェアスケッチ ? littleBits co?eemaker https://vimeo.com/1389390 ? littleBits http://littlebits.cc
  • 18. Extended Motifwork 2013 ? Make: Hardware Sketching ハードウェアスケッチの例 ? 大学院修士1年生 1st year students of the master course ? プログラミングの経験は少し She had little programming skills ? 電子工作の経験はゼロ She had no electronics skills ? 3D CADの経験はゼロ She had no 3D CAD skills ? 製作期間はスキル習得も含めて六カ月 6 months project including acquiring skills アクション!ゆびにんぎょう
  • 19. Extended Motifwork 2013 ? Make: Hardware Sketching IAMASにおける研究プロジェクト // Research Projects at IAMAS リサーチ // Research
  • 20. Extended Motifwork 2013 ? Make: Hardware Sketching ハードウェアスケッチの例 アイデアスケッチ // Idea Sketching アクション!ゆびにんぎょう(制作:笠原友美) / Action! Finger Puppet (Tomomi Kasahara)
  • 21. Extended Motifwork 2013 ? Make: Hardware Sketching ハードウェアスケッチの例 まず、サインペンを使用してアイディアの全体を描い ていきます。うまく描く必要はありません、重要なの はアイデアを伝えることです。 全体を描いた後は、黒のマーカで全体を縁取ります。 これにより遠くからでも、しっかりと形を見ることが 出来ます。 次に特徴となる部分や、機能がある部分に赤色のマー カーで色をつけます。どこが重要なのかがすぐわかる ようになります。 最後にグレーのマーカーで陰や質感などを描きます。 立体感や素材の特徴によりアイディアのイメージがふ くらみます。 1 2 3 4 スケッチのルール // Rules of Sketching
  • 22. Extended Motifwork 2013 ? Make: Hardware Sketching IAMASにおける研究プロジェクト // Research Projects at IAMAS 並べ替えと投票 // Sorting and Voting
  • 23. Extended Motifwork 2013 ? Make: Hardware Sketching IAMASにおける研究プロジェクト // Research Projects at IAMAS ダーティモデリング // Dirty Modeling アクション!ゆびにんぎょう(制作:笠原友美) / Action! Finger Puppet (Tomomi Kasahara)
  • 24. Extended Motifwork 2013 ? Make: Hardware Sketching ハードウェアスケッチの例 ビデオスケッチ // Video Sketching アクション!ゆびにんぎょう(制作:笠原友美) / Action! Finger Puppet (Tomomi Kasahara)
  • 25. Extended Motifwork 2013 ? Make: Hardware Sketching IAMASにおける研究プロジェクト // Research Projects at IAMAS ハードウェアスケッチ // Hardware Sketching アクション!ゆびにんぎょう(制作:笠原友美) / Action! Finger Puppet (Tomomi Kasahara)
  • 26. Extended Motifwork 2013 ? Make: Hardware Sketching IAMASにおける研究プロジェクト // Research Projects at IAMAS プロトタイプ制作 // Making Prototypes アクション!ゆびにんぎょう(制作:笠原友美) / Action! Finger Puppet (Tomomi Kasahara)
  • 33. 最初のプロトタイプの外装 / The shell of the 1st prototype (built with 3d printing)
  • 34. 最初のプロトタイプの基板 / The PCB of the 1st prototype Miga NanoMuscle purchased from SparkFun
  • 35. Comparison between prototypes from the 1st (right) to 4th (left) and an official domino piece
  • 36. LilyPad Arduino a derivative a derivative Arduino Fio Esper Domino (4th)
  • 60. Extended Motifwork 2013 ? Make: Hardware Sketching ワークショップ:基本編 ワークショップの流れ ? セットアップ ? Arduinoを使ってみる ? 電子回路の基礎知識 ? 基本的な入出力
  • 61. Extended Motifwork 2013 ? Make: Hardware Sketching ワークショップ:基本編 今回使用する主な部品
  • 62. Extended Motifwork 2013 ? Make: Hardware Sketching ワークショップ:基本編 Arduinoとは? ? フィジカルコンピューティングのためのツールキット ? 電子回路をプロトタイピングするためのオープンソースの プラットフォームで、柔軟で簡単に使えるハードウェアと ソフトウェアで構成 ? アーティスト、デザイナ、ホビイスト、そして インタラクティブなオブジェクトや環境をつくることに 興味がある全ての人が対象
  • 63. Extended Motifwork 2013 ? Make: Hardware Sketching ワークショップ:基本編 Arduinoを構成する3つの要素 ? Arduinoボード ? ATMega328P(16MHz)を搭載 ? USB ? オープンソース(さまざまなバリエーションと互換機) ? Arduino IDE ? Windows、Mac OS X、Linux上で動作 ? オープンソース ? デバッガはない ? Arduino言語 ? C/C++をベースにしたプログラミング言語
  • 64. Extended Motifwork 2013 ? Make: Hardware Sketching ワークショップ:基本編 Arduinoの流儀 デザインについて語ることよりも作ることのほうがArduino の哲学に適っ ています。良いプロトタイプを作るために、より速く、よりパワフルな手法 を探索し続けることが重要です。自分の手を使って考えながら、いろいろな テクニックを試し、発展させましょう。 Massimo Banzi(「Arduinoをはじめよう」著者) Massimo Banzi著「Arduinoをはじめよう」003ページより引用
  • 65. Extended Motifwork 2013 ? Make: Hardware Sketching ワークショップ:基本編 Arduinoの流儀 ? プロトタイピング ? いじくりまわす ? パッチング ? サーキットベンディング ? キーボードハック ? ジャンク大好き! ? オモチャをハック ? コラボレーション Massimo Banzi著「Arduinoをはじめよう」004~014ページより引用
  • 66. Extended Motifwork 2013 ? Make: Hardware Sketching ワークショップ:基本編 Tinkering(いじくりまわす) Massimo Banzi著「Arduinoをはじめよう」005ページより引用
  • 67. Extended Motifwork 2013 ? Make: Hardware Sketching ワークショップ:基本編 Arduinoボード グラウンド パワーインジケータ +3.3V 電源の+ +5V グラウンド×2 アナログ入力×6 デジタル入出力×14 外部電源
  • 68. Extended Motifwork 2013 ? Make: Hardware Sketching ワークショップ:基本編 Arduino IDE Verify スケッチがコンパイルできるか確認する New 新しいスケッチを生成する Open サンプルや既存のスケッチを開く Save 現在開いているスケッチを保存する Serial Monitor シリアルモニタを開く Upload スケッチを Arduino ボードにアップロードする ツールバー タ?ブ テキストエディタ メッセージエリア テキストエリア
  • 69. Extended Motifwork 2013 ? Make: Hardware Sketching ワークショップ:基本編 Arduinoの動作確認 ? File→Examples→Digital→Blinkを開く ? Uploadボタンを押してアップロード ? LEDが点滅することを確認
  • 70. Extended Motifwork 2013 ? Make: Hardware Sketching ワークショップ:基本編 電子回路の基礎知識 ? 基本用語 ? 電圧:2点間の電位差、単位はV(ボルト) ? 電流:流れる電気の量、単位はA(アンペア) ? 抵抗:電気の流れにくさ、単位はΩ(オーム) ? 最初は水の流れに例えて理解することができる ? 電圧→水圧 ? 電流→水流
  • 71. Extended Motifwork 2013 ? Make: Hardware Sketching ワークショップ:基本編 電圧の概念図 電位差 電位A 電位B グラウンド(GND)
  • 72. Extended Motifwork 2013 ? Make: Hardware Sketching ワークショップ:基本編 オームの法則 多 少 ←同じ圧力→ ←同じ量→ ←圧力低 ←圧力高
  • 73. Extended Motifwork 2013 ? Make: Hardware Sketching ワークショップ:基本編 ブレッドボード
  • 74. Extended Motifwork 2013 ? Make: Hardware Sketching ワークショップ:基本編 LEDをつないでみる
  • 75. Extended Motifwork 2013 ? Make: Hardware Sketching ワークショップ:基本編 LEDをつないでみる
  • 76. Extended Motifwork 2013 ? Make: Hardware Sketching ワークショップ:基本編 抵抗器ありでLEDをつなぐ 330Ω
  • 77. Extended Motifwork 2013 ? Make: Hardware Sketching ワークショップ:基本編 抵抗器ありでLEDをつなぐ
  • 78. Extended Motifwork 2013 ? Make: Hardware Sketching ワークショップ:基本編 オームの法則ふたたび LEDの順電圧 抵抗器にかかる電圧 330Ω
  • 79. Extended Motifwork 2013 ? Make: Hardware Sketching ワークショップ:基本編 オームの法則ふたたび 多 少 ←同じ圧力→ ←同じ量→ ←圧力低 ←圧力高
  • 80. Extended Motifwork 2013 ? Make: Hardware Sketching ワークショップ:基本編 オームの法則を用いて抵抗値を計算 E(電圧) = I(電流) R(抵抗)?オームの法則を式で表したもの 電源電圧 - LEDにかかる電圧 = LEDに流れる電流 抵抗 ↓抵抗を求めるために変形 抵抗 = (電源電圧 - LEDにかかる電圧) LEDに流れる電流 ↓単位を揃えて実際の値を代入 抵抗 = (5 - 1.8) 0.01 = 3.2 0.01 =320 ↓最も近い値の抵抗器を選択する 330Ω ※LEDに流れる電流を制限する方法は抵抗器だけではない LEDの順電圧 抵抗器にかかる電圧 330Ω
  • 81. Extended Motifwork 2013 ? Make: Hardware Sketching ワークショップ:基本編 ArduinoでHello World! void setup() { // initialize the digital pin as an output. // Pin 13 has an LED connected on most Arduino boards: pinMode(13, OUTPUT); } void loop() { digitalWrite(13, HIGH); // set the LED on delay(1000); // wait for a second digitalWrite(13, LOW); // set the LED off delay(1000); // wait for a second }
  • 82. Extended Motifwork 2013 ? Make: Hardware Sketching ワークショップ:基本編 点滅の間隔を変えてみよう void setup() { // initialize the digital pin as an output. // Pin 13 has an LED connected on most Arduino boards: pinMode(13, OUTPUT); } void loop() { digitalWrite(13, HIGH); // set the LED on delay(100); // wait for a second digitalWrite(13, LOW); // set the LED off delay(100); // wait for a second }
  • 83. Extended Motifwork 2013 ? Make: Hardware Sketching ワークショップ:基本編 点滅の間隔を変えてみよう void setup() { // initialize the digital pin as an output. // Pin 13 has an LED connected on most Arduino boards: pinMode(13, OUTPUT); } void loop() { digitalWrite(13, HIGH); // set the LED on delay(10); // wait for a second digitalWrite(13, LOW); // set the LED off delay(10); // wait for a second }
  • 84. Extended Motifwork 2013 ? Make: Hardware Sketching ワークショップ:基本編 点滅の間隔を変えてみよう void setup() { // initialize the digital pin as an output. // Pin 13 has an LED connected on most Arduino boards: pinMode(13, OUTPUT); } void loop() { digitalWrite(13, HIGH); // set the LED on delay(1); // wait for a second digitalWrite(13, LOW); // set the LED off delay(9); // wait for a second }
  • 85. Extended Motifwork 2013 ? Make: Hardware Sketching ワークショップ:基本編 アナログ出力(PWM) 330Ω
  • 86. Extended Motifwork 2013 ? Make: Hardware Sketching ワークショップ:基本編 アナログ出力(PWM)
  • 87. Extended Motifwork 2013 ? Make: Hardware Sketching ワークショップ:基本編 アナログ出力(PWM):1.Basics/Fade int brightness = 0; int fadeAmount = 5; void setup() { pinMode(9, OUTPUT); } void loop() { // set the brightness of pin 9: analogWrite(9, brightness); brightness = brightness + fadeAmount; if (brightness == 0 || brightness == 255) { fadeAmount = -fadeAmount ; } delay(30); }
  • 88. Extended Motifwork 2013 ? Make: Hardware Sketching ワークショップ:基本編 PWM(Pulse Width Modulation) 0 5 電圧 時間 0 5 電圧 時間
  • 89. Extended Motifwork 2013 ? Make: Hardware Sketching ワークショップ:基本編 PWMを利用できるデジタルピン グラウンド パワーインジケータ +3.3V 電源の+ +5V グラウンド×2 アナログ入力×6 デジタル入出力×14 外部電源
  • 90. Extended Motifwork 2013 ? Make: Hardware Sketching ワークショップ:基本編 デジタル入力(プルダウン) 330Ω 10kΩ
  • 91. Extended Motifwork 2013 ? Make: Hardware Sketching ワークショップ:基本編 デジタル入力(プルダウン)
  • 92. Extended Motifwork 2013 ? Make: Hardware Sketching ワークショップ:基本編 デジタル入力:2.Digital/Button const int buttonPin = 2; const int ledPin = 13; int buttonState = 0; void setup() { pinMode(ledPin, OUTPUT); pinMode(buttonPin, INPUT); } void loop(){ // read the state of the pushbutton value: buttonState = digitalRead(buttonPin); if (buttonState == HIGH) { digitalWrite(ledPin, HIGH); } else { digitalWrite(ledPin, LOW); } }
  • 93. Extended Motifwork 2013 ? Make: Hardware Sketching ワークショップ:基本編 デジタル入力(プルアップ) 330Ω 10kΩ
  • 94. Extended Motifwork 2013 ? Make: Hardware Sketching ワークショップ:基本編 デジタル入力(プルアップ)
  • 95. Extended Motifwork 2013 ? Make: Hardware Sketching ワークショップ:基本編 デジタル出力(シンク) 330Ω 10kΩ
  • 96. Extended Motifwork 2013 ? Make: Hardware Sketching ワークショップ:基本編 デジタル出力(シンク)
  • 97. Extended Motifwork 2013 ? Make: Hardware Sketching ワークショップ:基本編 レシピ1?24:明るさに応じてLEDを制御 330Ω 10kΩ
  • 98. Extended Motifwork 2013 ? Make: Hardware Sketching ワークショップ:基本編 レシピ1?24:明るさに応じてLEDを制御
  • 99. Extended Motifwork 2013 ? Make: Hardware Sketching ワークショップ:基本編 アナログ入力:自分でコードを書いてみる const int sensorPin = A0; void setup() { Serial.begin(9600); } void loop() { // read the value from the sensor: int sensorValue = analogRead(sensorPin); // send the value to the PC via serial Serial.println(sensorValue); // wait for a little bit delay(100); }
  • 100. Extended Motifwork 2013 ? Make: Hardware Sketching ワークショップ:基本編 抵抗分圧
  • 101. Extended Motifwork 2013 ? Make: Hardware Sketching ワークショップ:基本編 レシピ1?24:明るさに応じてLEDを制御 // 閾値 const int threshold = 511; // ヒステリシス const int hysteresis = 102; const int sensorPin = 0; const int ledPin = 9; // 前回の状態 boolean wasBright = true; void setup() { pinMode(ledPin, OUTPUT); // LEDを消灯 digitalWrite(ledPin, LOW); }
  • 102. Extended Motifwork 2013 ? Make: Hardware Sketching ワークショップ:基本編 レシピ1?24:明るさに応じてLEDを制御 void loop() { int brightness = analogRead(sensorPin); // 現在の状態(初期値には前回の値を代入) boolean isBright = wasBright; if (brightness > (threshold + hysteresis)) { // 現在の明るさが閾値+ヒステリシスよりも大きければ明るいと判断 isBright = true; } else if (brightness < (threshold - hysteresis)) { // 現在の明るさが閾値ーヒステリシスよりも小さければ暗いと判断 isBright = false; } if (!wasBright && isBright) { // 暗い状態から明るい状態に変化したらLEDを消灯 digitalWrite(ledPin, LOW); } else if (wasBright && !isBright) { // 明るい状態から暗い状態に変化したらLEDを点灯 digitalWrite(ledPin, HIGH); } // 全回の値として今回の値をセット wasBright = isBright; }
  • 103. Extended Motifwork 2013 ? Make: Hardware Sketching ワークショップ:基本編 PC連携:4.Communication/Dimmer 1. ウェブブラウザで次のURLにアクセス http://processing.org/download/ 2. 使用しているプラットフォームに対応したパッケージを ダウンロード 3. デスクトップなどに展開して起動
  • 104. Extended Motifwork 2013 ? Make: Hardware Sketching ワークショップ:基本編 PC連携:4.Communication/Dimmer const int ledPin = 9; void setup() { // initialize the serial communication: Serial.begin(9600); pinMode(ledPin, OUTPUT); } void loop() { byte brightness; // check if data has been sent from the computer: if (Serial.available()) { // read the most recent byte (0-255) brightness = Serial.read(); // set the brightness of the LED: analogWrite(ledPin, brightness); } }
  • 105. Extended Motifwork 2013 ? Make: Hardware Sketching ワークショップ:基本編 PC連携:4.Communication/Dimmer import processing.serial.*; Serial port; void setup() { size(256, 150); // Print available serial ports println(Serial.list()); port = new Serial(this, "COM1", 9600); } void draw() { // draw a gradient from black to white ... // send the current X-position of the mouse port.write(mouseX); }
  • 106. Extended Motifwork 2013 ? Make: Hardware Sketching ワークショップ:応用編 デジタル入力の変化をイベントにする(1/2) const int buttonPin = 2; const int ledPin = 13; int buttonState = 0; // 前回のボタンの状態を保持するための変数 int lastButtonState = LOW; // 現在のLEDの状態を保持するための変数 boolean ledIsOn = false; void setup() { pinMode(ledPin, OUTPUT); pinMode(buttonPin, INPUT); }
  • 107. Extended Motifwork 2013 ? Make: Hardware Sketching ワークショップ:応用編 デジタル入力の変化をイベントにする(2/2) void loop() { // ボタンの状態を読み取る buttonState = digitalRead(buttonPin); // 前回ボタンが押されていなくて現在ボタンが押されていたら if (lastButtonState == LOW && buttonState == HIGH) { if (!ledIsOn) { // 現在LEDがオンでなければオンにセット digitalWrite(ledPin, HIGH); ledIsOn = true; } else { // 現在LEDがオンであればオフにセット digitalWrite(ledPin, LOW); ledIsOn = false; } } // 前回のボタンの状態を保持する変数の値に現在のボタンの状態をセット lastButtonState = buttonState; }
  • 108. Extended Motifwork 2013 ? Make: Hardware Sketching ワークショップ:応用編 デジタル入力の変化をイベントにする ? 変化した時にシリアルで送信するようにしてみる ? 1回しかオン/オフしていないのに複数回発生する? ? この現象をチャタリングと呼ぶ ? ループ中にディレイを入れることである程度解決する
  • 109. Extended Motifwork 2013 ? Make: Hardware Sketching ワークショップ:応用編 スイッチを押したら写真を撮影?保存する 1. Examples/Libraries/video/Capture/ GettingStartedCaptureを開く 2. Examples/Topics/File IO/SaveFramesを開く 3. 組み合せてマウスクリックで画像を保存できるようにする 4. Examples/Libraries/serial/SimpleReadを開く 5. Arduino用のスケッチを書いてアップロードする 6. 組み合せてスイッチを押したら画像を保存できるようにする
  • 110. Extended Motifwork 2013 ? Make: Hardware Sketching ワークショップ:応用編 Arduino側の例(1/2) const int buttonPin = 2; // 前回のボタンの状態を保持するための変数 int lastButtonState = LOW; void setup() { pinMode(buttonPin, INPUT); // シリアル通信を9600bpsで開始 Serial.begin(9600); }
  • 111. Extended Motifwork 2013 ? Make: Hardware Sketching ワークショップ:応用編 Arduino側の例(2/2) void loop() { // ボタンの状態を読み取る int buttonState = digitalRead(buttonPin); // 前回ボタンが押されていなくて現在ボタンが押されていたら if (lastButtonState == LOW && buttonState == HIGH) { Serial.print('*'); } // 前回のボタンの状態を保持する変数の値に現在のボタンの状態をセット lastButtonState = buttonState; // チャタリングを防止するために10ms待つ delay(10); }
  • 112. Extended Motifwork 2013 ? Make: Hardware Sketching ワークショップ:応用編 Processing側の例(1/2) import processing.video.*; import processing.serial.*; Capture cam; Serial serialPort; void setup() { size(640, 480, P2D); cam = new Capture(this, 640, 480); cam.start(); // シリアルポートのリストをプリント println(Serial.list()); // Mac OS X LionではArduinoは0番目のシリアルポートになる // Mac OS X Mountain Lionでは異なるため、リストの出力に合わせて変更 String portName = Serial.list()[6]; serialPort = new Serial(this, portName, 9600); }
  • 113. Extended Motifwork 2013 ? Make: Hardware Sketching ワークショップ:応用編 Processing側の例(1/2) import processing.video.*; import processing.serial.*; Capture cam; Serial serialPort; void setup() { size(640, 480, P2D); cam = new Capture(this, 640, 480); cam.start(); // シリアルポートのリストをプリント println(Serial.list()); // Mac OS X LionではArduinoは0番目のシリアルポートになる // Mac OS X Mountain Lionでは異なるため、リストの出力に合わせて変更 String portName = Serial.list()[6]; serialPort = new Serial(this, portName, 9600); }
  • 114. Extended Motifwork 2013 ? Make: Hardware Sketching ワークショップ:応用編 Processing側の例(2/2) void draw() { if (cam.available() == true) { cam.read(); } image(cam, 0, 0); if (serialPort.available() > 0) { int inByte = serialPort.read(); // 読み取ったデータが想定しているものであれば現在の画面を保存 if (inByte == '*') { saveFrame("output/frames####.png"); println("captured"); } } }
  • 115. Extended Motifwork 2013 ? Make: Hardware Sketching ワークショップ:応用編 スイッチを押したらサウンドを再生する 1. Examples/Libraries/minim/PlayAFileを開く 2. 先ほどのサンプルを参考にして、スイッチを押したらサウンド を再生するようにする 3. Minimのリファレンスは以下を参照 http://code.compartmental.net/minim/javadoc/
  • 116. Extended Motifwork 2013 ? Make: Hardware Sketching ワークショップ:応用編 Arduino側の例(1/2) const int buttonPin = 2; // 前回のボタンの状態を保持するための変数 int lastButtonState = LOW; void setup() { pinMode(buttonPin, INPUT); // シリアル通信を9600bpsで開始 Serial.begin(9600); }
  • 117. Extended Motifwork 2013 ? Make: Hardware Sketching ワークショップ:応用編 Arduino側の例(2/2) void loop() { // ボタンの状態を読み取る int buttonState = digitalRead(buttonPin); // 前回ボタンが押されていなくて現在ボタンが押されていたら if (lastButtonState == LOW && buttonState == HIGH) { Serial.print('p'); } // 前回ボタンが押されていて現在ボタンが押されていなかったら else if (lastButtonState == HIGH && buttonState == LOW) { Serial.print('r'); } // 前回のボタンの状態を保持する変数の値に現在のボタンの状態をセット lastButtonState = buttonState; // チャタリングを防止するために10ms待つ delay(10); }
  • 118. Extended Motifwork 2013 ? Make: Hardware Sketching ワークショップ:応用編 Processing側の例(1/2) import ddf.minim.*; import processing.serial.*; Minim minim; AudioPlayer player; Serial serialPort; void setup() { size(512, 200, P3D); println(Serial.list()); String portName = Serial.list()[6]; serialPort = new Serial(this, portName, 9600); minim = new Minim(this); player = minim.loadFile("marcus_kellis_theme.mp3"); }
  • 119. Extended Motifwork 2013 ? Make: Hardware Sketching ワークショップ:応用編 Processing側の例(2/2) void draw() { if (serialPort.available() > 0) { int inByte = serialPort.read(); if (inByte == 'p') { player.rewind(); player.play(); } else if (inByte == 'r') { player.pause(); } } }
  • 120. Extended Motifwork 2013 ? Make: Hardware Sketching ワークショップ:応用編 ライブラリはどんな時に有効か? ? 複数の入出力を扱いたいとき ? 特別なセンサやアクチェータを扱いたいとき ? ライブラリの詳細に関しては次のページを参照 http://arduino.cc/en/Reference/Libraries
  • 121. Extended Motifwork 2013 ? Make: Hardware Sketching ワークショップ:応用編 ライブラリの使い方 1. ウェブブラウザで次のURLにアクセス https://github.com/soundanalogous/ActionButton/ 2. ZIPボタンをクリックしてダウンロードし、ダウンロードが 終わったら解凍する 3. 書類/Arduinoの中に(もしまだなければ)「libraries」と いうファルダを作成 4. 解凍が終わったファイルを次のように配置 Arduino/libraries/ActionButton 5. SketchメニューのImport Library...のContributedの中に ActionButtonが表示されることを確認
  • 122. Extended Motifwork 2013 ? Make: Hardware Sketching ワークショップ:応用編 今回のサンプル 1. ウェブブラウザで次のURLにアクセス https://dl.dropboxusercontent.com/u/36239/ workshop_examples_2013-04-30.zip 2. ZIPボタンをクリックしてダウンロードし、ダウンロードが 終わったら解凍し、書類/Arduinoフォルダに移動する
  • 123. Extended Motifwork 2013 ? Make: Hardware Sketching ワークショップ:応用編 LEDライブラリの基本例(1) #include <LED.h> // LEDオブジェクト LED led = LED(9); void setup() { // LEDを1000ms間隔で点滅させる led.blink(1000); } void loop() { // LEDの状態を更新 led.update(); }
  • 124. Extended Motifwork 2013 ? Make: Hardware Sketching ワークショップ:応用編 LEDライブラリの基本例(2) #include <LED.h> // LEDオブジェクト LED led = LED(9); void setup() { // LEDを2000msでフェードイン led.fadeIn(2000); } void loop() { // LEDの状態を更新 led.update(); }
  • 125. Extended Motifwork 2013 ? Make: Hardware Sketching ワークショップ:応用編 ActionButtonライブラリの基本(1/2) #include <Button.h> #include <LED.h> Button button = Button(2); LED led = LED(9); void setup() { // ここでは何もしない }
  • 126. Extended Motifwork 2013 ? Make: Hardware Sketching ワークショップ:応用編 ActionButtonライブラリの基本(2/2) void loop() { // ボタンの状態を更新(これを実行しない限り状態は更新されない) button.update(); // ボタンが押されていれば if (button.isPressed()) { // LEDをオン led.on(); } else { // LEDをオフ led.off(); } }
  • 127. Extended Motifwork 2013 ? Make: Hardware Sketching ワークショップ:応用編 簡易リファレンス:ActionButton(1/2) // コンストラクタ Button(uint8_t buttonPin, uint8_t buttonMode); // ボタンの状態を更新する void update(); // ボタンが押されているか否か bool isPressed(); // updateを呼ぶ前にボタンが押されていたか否か bool wasPressed(); // updateの前後で状態が変化したか否か bool stateChanged(); // ボタンが押されていない→押されたへの変化が起きたか否か bool uniquePress(); // ボタンが押された→押されていないへの変化が起きたか否か bool uniqueRelease(); // 長押しのしきい値をセット void setHoldThreshold(unsigned int holdTime);
  • 128. Extended Motifwork 2013 ? Make: Hardware Sketching ワークショップ:応用編 簡易リファレンス:ActionButton(2/2) // あらかじめ設定した時間だけ長押しされたか否か bool held(unsigned int time); // 引数で与えた時間だけ押されたか否か bool heldFor(unsigned int time); // ボタンが押されたイベントに対するイベントハンドラをセット void pressHandler(buttonEventHandler handler); // ボタンが離されたイベントに対するイベントハンドラをセット void releaseHandler(buttonEventHandler handler); // ボタンがクリックされたイベントに対するイベントハンドラをセット void clickHandler(buttonEventHandler handler); // 長押しイベントに対するイベントハンドラをセット void holdHandler(buttonEventHandler handler, unsigned int holdTime); // ボタンが押されている時間 unsigned int holdTime() const; // ボタンが押された回数 unsigned int presses() const;
  • 129. Extended Motifwork 2013 ? Make: Hardware Sketching ワークショップ:応用編 簡易リファレンス:LED(1/2) //コンストラクタ LED(byte ledPin, byte driveMode = SOURCE); // LEDの状態を更新 void update(); // 現在の状態を取得 byte getState(); // 点灯 void on(); // 消灯 void off(); // 点灯と消灯をトグル void toggle(); // 点滅(引数は間隔、回数、波形、指定回数だけ終了するまで待つか否か) void blink(unsigned int time, byte times = 0, byte wave = 0, bool synchronous); // 輝度をセット void setValue(byte val);
  • 130. Extended Motifwork 2013 ? Make: Hardware Sketching ワークショップ:応用編 簡易リファレンス:LED(2/2) // 現在の輝度を取得 byte getValue(); // 指定した値までフェード(引数は値、時間、終了まで待つか否か) void fadeTo(byte val, unsigned int time, bool synchronous); // フェードイン(引数は時間、終了するまで待つか否か) void fadeIn(unsigned int time, bool synchronous); // フェードアウト(引数は時間、終了するまで待つか否か) void fadeOut(unsigned int time, bool synchronous);
  • 131. Extended Motifwork 2013 ? Make: Hardware Sketching ワークショップ:応用編 RGB LED 150Ω150Ω 330Ω
  • 132. Extended Motifwork 2013 ? Make: Hardware Sketching ワークショップ:応用編 測距センサ(PSD)
  • 133. Extended Motifwork 2013 ? Make: Hardware Sketching 補足 部品などの購入先一覧 ? スイッチサイエンス http://www.switch-science.com/ ? メカロボショップ http://www.mecharoboshop.com/ ? 共立エレショップ http://eleshop.jp/ ? 秋月電子 http://akizukidenshi.com/ ? マルツ電波 http://marutsu.co.jp/ ? aitendo http://www.aitendo.co.jp/
  • 134. Extended Motifwork 2013 ? Make: Hardware Sketching 補足 さらに詳しく知りたい時は? ? Arduino公式ウェブサイト(http://arduino.cc/) ? Prototyping Labウェブサイト(http://prototypinglab.com/) ? Googleで検索 ? 書籍で調べる
  • 135. Extended Motifwork 2013 ? Make: Hardware Sketching konashi konashiとは ? ユカイ工学が開発、販売するツールキット http://konashi.ux-xu.com ? 8つのデジタル入出力ピン、3つのアナログ入力ピン、I2C(デ ジタル入出力ピン6および7と兼用)、1つのシリアルポート ? 外部電源、コイン形電池(CR2032)、バッテリ端子から電 源を供給できる ? iOS用のライブラリが提供されるI/Oモジュールであるため、 プログラミングをiOSデバイス上で完結できる ? 必要に応じてArduinoなどと組合わせることができる ? 技術的にはBluetooth Low Energyを採用
  • 136. Extended Motifwork 2013 ? Make: Hardware Sketching konashi Bluetooth Low Energyとは ? 超低消費電力無線通信 ? Bluetooth 4で統合(=Bluetooth 3+BLE) ? 少量データ、低頻度を想定 ? iPhone 4S(2011年10月)以降のApple社製品、iOS 5以降で 対応 ? MFi(Made For iPhone)のためのNDA締結が不要 ? XcodeとCoreBluetoothフレームワークで開発できる ? デバイス間の接続はスター型で、接続数は上限なし、セントラル とペリフェラルは非対称(ペリフェラルがより低消費電力) 参考資料:iOSアプリ開発者のためのBluetooth Low Energy体験講座(上原昭宏氏)
  • 137. Extended Motifwork 2013 ? Make: Hardware Sketching konashi konashiのピン配列 konashiマニュアルより転載 USB-microB (USB-Bus power) DC 5.0V コイン型バッテリ (CR2032type) DC 3.0V バッテリ電圧 (S2B-PH-K-S / JST) DC 3.2 ~12.0V USART通信端子 デジタルI / O (PIO 0 5) (PWM端子と兼用) デジタルI / O (PIO 6,7) (PWM端子. I2C通信端子と兼用) 各種電圧端子 (バッテリ電圧, DC5.0V, DC3.0V) アナログ入力 (AIO 0~2) (リファレンス電圧 1.3V) オンボード入力端子 (PIO 0) オンボード出力端子 (PIO 1~4) オンボード入出力 切換え端子
  • 138. Extended Motifwork 2013 ? Make: Hardware Sketching konashi デジタル入出力ピンの5番にLEDを接続
  • 139. Extended Motifwork 2013 ? Make: Hardware Sketching konashi アナログ入力ピンの0番にCdSセルを接続
  • 140. Extended Motifwork 2013 ? Make: Hardware Sketching konashi さらに詳しく知りたい時は? ? konashiの製品ウェブサイトのドキュメント http://konashi.ux-xu.com/documents/ ? FacebookのWT-BTLEグループ https://www.facebook.com/groups/ 563064710384459/ ? iOSアプリ開発者のためのBluetooth Low Energy体験講座資料 http://www.slideshare.net/reinforcelab/20130322-btle
  • 141. Extended Motifwork 2013 ? Make: Hardware Sketching ワークショップ:実践編 課題 ? スイッチをつくる ? ここ一番で使うスイッチ ? 間違って押せてはいけない ? 押した時には確実に動作しなくてはならない ? 動作したことが分かるようにインタラクションを実装する ? スイッチの形状も検討する ? 発表は14:30から