SlideShare a Scribd company logo
1 of 141
2013年4月30日∼5月2日/情報科学芸術大学院大学[IAMAS]新校舎1階ギャラリー
小林 茂(情報科学芸術大学院大学[IAMAS]准教授)
Extended Motifwork 2013
Make: Hardware Sketching #1
Photography: Beth and Christian
http://www.flickr.com/photos/six27/245969277/
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) 精錬(refine)
質問(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 coffeemaker
https://vimeo.com/1389390
• littleBits
http://littlebits.cc
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)
https://vimeo.com/17150420
アイデアスケッチ / The idea sketch
最初のプロトタイプ / The first 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
ものづくり=なぜ? なにを? どうやって?
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

Viewers also liked

第1回IAMASイノベーションフォーラム
第1回IAMASイノベーションフォーラム第1回IAMASイノベーションフォーラム
第1回IAMASイノベーションフォーラムShigeru Kobayashi
 
FAB9: IAMAS Innovation Studio [f.Labo]
FAB9: IAMAS Innovation Studio [f.Labo]FAB9: IAMAS Innovation Studio [f.Labo]
FAB9: IAMAS Innovation Studio [f.Labo]Shigeru Kobayashi
 
au未来研究所ハッカソン
au未来研究所ハッカソンau未来研究所ハッカソン
au未来研究所ハッカソンShigeru Kobayashi
 

Viewers also liked (8)

Engadget Konashi 2013-08-17
Engadget Konashi 2013-08-17Engadget Konashi 2013-08-17
Engadget Konashi 2013-08-17
 
第1回IAMASイノベーションフォーラム
第1回IAMASイノベーションフォーラム第1回IAMASイノベーションフォーラム
第1回IAMASイノベーションフォーラム
 
FAB9: IAMAS Innovation Studio [f.Labo]
FAB9: IAMAS Innovation Studio [f.Labo]FAB9: IAMAS Innovation Studio [f.Labo]
FAB9: IAMAS Innovation Studio [f.Labo]
 
Gesture Workshop
Gesture WorkshopGesture Workshop
Gesture Workshop
 
Telematics Hackathon
Telematics HackathonTelematics Hackathon
Telematics Hackathon
 
Maker Faire Tokyo 2015
Maker Faire Tokyo 2015Maker Faire Tokyo 2015
Maker Faire Tokyo 2015
 
au未来研究所ハッカソン
au未来研究所ハッカソンau未来研究所ハッカソン
au未来研究所ハッカソン
 
IoT Workshop in Macao
IoT Workshop in MacaoIoT Workshop in Macao
IoT Workshop in Macao
 

Similar to Hardware Sketching Workshop 2013

プロトタイピングの潮流とデザイナーへの提言
プロトタイピングの潮流とデザイナーへの提言プロトタイピングの潮流とデザイナーへの提言
プロトタイピングの潮流とデザイナーへの提言Shigeru Kobayashi
 
フィジカルコンピューティングとその可能性
フィジカルコンピューティングとその可能性フィジカルコンピューティングとその可能性
フィジカルコンピューティングとその可能性Shigeru Kobayashi
 
プリント基板をレイアウトして発注してみようの会 Vol0
プリント基板をレイアウトして発注してみようの会 Vol0プリント基板をレイアウトして発注してみようの会 Vol0
プリント基板をレイアウトして発注してみようの会 Vol0Dan Imagineer
 
今すぐ始めるArduino
今すぐ始めるArduino今すぐ始めるArduino
今すぐ始めるArduinofuna3
 
会津IT秋フォーラム2012での講演資料
会津IT秋フォーラム2012での講演資料会津IT秋フォーラム2012での講演資料
会津IT秋フォーラム2012での講演資料Shigeru Kobayashi
 
Code4NaraHandson2_151118
Code4NaraHandson2_151118Code4NaraHandson2_151118
Code4NaraHandson2_151118康司 石塚
 
3Dプリンターブームから読み取る
イノベーションの可能性
3Dプリンターブームから読み取る
イノベーションの可能性3Dプリンターブームから読み取る
イノベーションの可能性
3Dプリンターブームから読み取る
イノベーションの可能性Shigeru Kobayashi
 
SIG-Audio準備会#2 オーディオツールの作り方 超入門編
SIG-Audio準備会#2 オーディオツールの作り方 超入門編SIG-Audio準備会#2 オーディオツールの作り方 超入門編
SIG-Audio準備会#2 オーディオツールの作り方 超入門編Takafumi Inamori
 
Visual Studio Codeを使い倒そう! ~プログラミングから機械学習、クラウド連携、遠隔ペアプロまで~
Visual Studio Codeを使い倒そう! ~プログラミングから機械学習、クラウド連携、遠隔ペアプロまで~Visual Studio Codeを使い倒そう! ~プログラミングから機械学習、クラウド連携、遠隔ペアプロまで~
Visual Studio Codeを使い倒そう! ~プログラミングから機械学習、クラウド連携、遠隔ペアプロまで~Saki Homma
 
Cod2012 デバッグ講座
Cod2012 デバッグ講座Cod2012 デバッグ講座
Cod2012 デバッグ講座Masuda Tomoaki
 
【入門】Arduino勉強会
【入門】Arduino勉強会【入門】Arduino勉強会
【入門】Arduino勉強会Masashi_Brilliant
 
プログラマとデザイナで時計を作るVisual studioハッカソン ~ TDDの考え方を開発全体に応用してみよう!
プログラマとデザイナで時計を作るVisual studioハッカソン ~ TDDの考え方を開発全体に応用してみよう!プログラマとデザイナで時計を作るVisual studioハッカソン ~ TDDの考え方を開発全体に応用してみよう!
プログラマとデザイナで時計を作るVisual studioハッカソン ~ TDDの考え方を開発全体に応用してみよう!Yasuhiko Yamamoto
 
Visual Studio Codeを使い倒そう! ~プログラミングから機械学習、クラウド連携、遠隔ペアプロまで~
Visual Studio Codeを使い倒そう! ~プログラミングから機械学習、クラウド連携、遠隔ペアプロまで~Visual Studio Codeを使い倒そう! ~プログラミングから機械学習、クラウド連携、遠隔ペアプロまで~
Visual Studio Codeを使い倒そう! ~プログラミングから機械学習、クラウド連携、遠隔ペアプロまで~Saki Homma
 
イチからはじめるADK北海道支部勉強会発表資料
イチからはじめるADK北海道支部勉強会発表資料イチからはじめるADK北海道支部勉強会発表資料
イチからはじめるADK北海道支部勉強会発表資料Kenichi Yoshida
 
2020/06/16 tsjp-azure-staticwebapps-vs_codespaces
2020/06/16 tsjp-azure-staticwebapps-vs_codespaces2020/06/16 tsjp-azure-staticwebapps-vs_codespaces
2020/06/16 tsjp-azure-staticwebapps-vs_codespacesIssei Hiraoka
 
エンジニアがプロダクト育成を始めるまでにやったこと
エンジニアがプロダクト育成を始めるまでにやったことエンジニアがプロダクト育成を始めるまでにやったこと
エンジニアがプロダクト育成を始めるまでにやったことTakao Sumitomo
 
「モノづくり加速セミナー」 Makers Festival
「モノづくり加速セミナー」 Makers Festival「モノづくり加速セミナー」 Makers Festival
「モノづくり加速セミナー」 Makers FestivalYutaka Shiozawa
 

Similar to Hardware Sketching Workshop 2013 (20)

プロトタイピングの潮流とデザイナーへの提言
プロトタイピングの潮流とデザイナーへの提言プロトタイピングの潮流とデザイナーへの提言
プロトタイピングの潮流とデザイナーへの提言
 
フィジカルコンピューティングとその可能性
フィジカルコンピューティングとその可能性フィジカルコンピューティングとその可能性
フィジカルコンピューティングとその可能性
 
プリント基板をレイアウトして発注してみようの会 Vol0
プリント基板をレイアウトして発注してみようの会 Vol0プリント基板をレイアウトして発注してみようの会 Vol0
プリント基板をレイアウトして発注してみようの会 Vol0
 
今すぐ始めるArduino
今すぐ始めるArduino今すぐ始めるArduino
今すぐ始めるArduino
 
会津IT秋フォーラム2012での講演資料
会津IT秋フォーラム2012での講演資料会津IT秋フォーラム2012での講演資料
会津IT秋フォーラム2012での講演資料
 
Code4NaraHandson2_151118
Code4NaraHandson2_151118Code4NaraHandson2_151118
Code4NaraHandson2_151118
 
3Dプリンターブームから読み取る
イノベーションの可能性
3Dプリンターブームから読み取る
イノベーションの可能性3Dプリンターブームから読み取る
イノベーションの可能性
3Dプリンターブームから読み取る
イノベーションの可能性
 
Arduinoで出来ること
Arduinoで出来ることArduinoで出来ること
Arduinoで出来ること
 
SIG-Audio準備会#2 オーディオツールの作り方 超入門編
SIG-Audio準備会#2 オーディオツールの作り方 超入門編SIG-Audio準備会#2 オーディオツールの作り方 超入門編
SIG-Audio準備会#2 オーディオツールの作り方 超入門編
 
Visual Studio Codeを使い倒そう! ~プログラミングから機械学習、クラウド連携、遠隔ペアプロまで~
Visual Studio Codeを使い倒そう! ~プログラミングから機械学習、クラウド連携、遠隔ペアプロまで~Visual Studio Codeを使い倒そう! ~プログラミングから機械学習、クラウド連携、遠隔ペアプロまで~
Visual Studio Codeを使い倒そう! ~プログラミングから機械学習、クラウド連携、遠隔ペアプロまで~
 
Cod2012 デバッグ講座
Cod2012 デバッグ講座Cod2012 デバッグ講座
Cod2012 デバッグ講座
 
【入門】Arduino勉強会
【入門】Arduino勉強会【入門】Arduino勉強会
【入門】Arduino勉強会
 
プログラマとデザイナで時計を作るVisual studioハッカソン ~ TDDの考え方を開発全体に応用してみよう!
プログラマとデザイナで時計を作るVisual studioハッカソン ~ TDDの考え方を開発全体に応用してみよう!プログラマとデザイナで時計を作るVisual studioハッカソン ~ TDDの考え方を開発全体に応用してみよう!
プログラマとデザイナで時計を作るVisual studioハッカソン ~ TDDの考え方を開発全体に応用してみよう!
 
Visual Studio Codeを使い倒そう! ~プログラミングから機械学習、クラウド連携、遠隔ペアプロまで~
Visual Studio Codeを使い倒そう! ~プログラミングから機械学習、クラウド連携、遠隔ペアプロまで~Visual Studio Codeを使い倒そう! ~プログラミングから機械学習、クラウド連携、遠隔ペアプロまで~
Visual Studio Codeを使い倒そう! ~プログラミングから機械学習、クラウド連携、遠隔ペアプロまで~
 
イチからはじめるADK北海道支部勉強会発表資料
イチからはじめるADK北海道支部勉強会発表資料イチからはじめるADK北海道支部勉強会発表資料
イチからはじめるADK北海道支部勉強会発表資料
 
2020/06/16 tsjp-azure-staticwebapps-vs_codespaces
2020/06/16 tsjp-azure-staticwebapps-vs_codespaces2020/06/16 tsjp-azure-staticwebapps-vs_codespaces
2020/06/16 tsjp-azure-staticwebapps-vs_codespaces
 
3 d printer_ivent
3 d printer_ivent3 d printer_ivent
3 d printer_ivent
 
konashi make-a-thon
konashi make-a-thonkonashi make-a-thon
konashi make-a-thon
 
エンジニアがプロダクト育成を始めるまでにやったこと
エンジニアがプロダクト育成を始めるまでにやったことエンジニアがプロダクト育成を始めるまでにやったこと
エンジニアがプロダクト育成を始めるまでにやったこと
 
「モノづくり加速セミナー」 Makers Festival
「モノづくり加速セミナー」 Makers Festival「モノづくり加速セミナー」 Makers Festival
「モノづくり加速セミナー」 Makers Festival
 

More from Shigeru Kobayashi

Maker Faireを持続可能にするには?
Maker Faireを持続可能にするには?Maker Faireを持続可能にするには?
Maker Faireを持続可能にするには?Shigeru Kobayashi
 
テレマティクスハッカソン参加同意書
テレマティクスハッカソン参加同意書テレマティクスハッカソン参加同意書
テレマティクスハッカソン参加同意書Shigeru Kobayashi
 
monoFabアイデアソンミーティング参加同意書
monoFabアイデアソンミーティング参加同意書monoFabアイデアソンミーティング参加同意書
monoFabアイデアソンミーティング参加同意書Shigeru Kobayashi
 
情報学基礎:エレクトロニクス
情報学基礎:エレクトロニクス情報学基礎:エレクトロニクス
情報学基礎:エレクトロニクスShigeru Kobayashi
 
Rebuilding the world, from the 'periphery'
Rebuilding the world, from the 'periphery'Rebuilding the world, from the 'periphery'
Rebuilding the world, from the 'periphery'Shigeru Kobayashi
 
Engadget電子工作部:インテルGalileoでガジェットを作ろう!
Engadget電子工作部:インテルGalileoでガジェットを作ろう!Engadget電子工作部:インテルGalileoでガジェットを作ろう!
Engadget電子工作部:インテルGalileoでガジェットを作ろう!Shigeru Kobayashi
 
第2回iBeaconハッカソン
第2回iBeaconハッカソン第2回iBeaconハッカソン
第2回iBeaconハッカソンShigeru Kobayashi
 
イノベーション創出のファシリテータとしてのデジタル工作機械を備えた市民工房
イノベーション創出のファシリテータとしてのデジタル工作機械を備えた市民工房イノベーション創出のファシリテータとしてのデジタル工作機械を備えた市民工房
イノベーション創出のファシリテータとしてのデジタル工作機械を備えた市民工房Shigeru Kobayashi
 
Rapid PrototypingからRapid Manufacturingへ
Rapid PrototypingからRapid ManufacturingへRapid PrototypingからRapid Manufacturingへ
Rapid PrototypingからRapid ManufacturingへShigeru Kobayashi
 
大阪市立大学大学院創造都市研究科ワークショップ
大阪市立大学大学院創造都市研究科ワークショップ大阪市立大学大学院創造都市研究科ワークショップ
大阪市立大学大学院創造都市研究科ワークショップShigeru Kobayashi
 
IAMAS × 十六銀行:産学連携記念セミナー
IAMAS × 十六銀行:産学連携記念セミナーIAMAS × 十六銀行:産学連携記念セミナー
IAMAS × 十六銀行:産学連携記念セミナーShigeru Kobayashi
 
品モノラボ#5:Maker × メーカー
品モノラボ#5:Maker × メーカー品モノラボ#5:Maker × メーカー
品モノラボ#5:Maker × メーカーShigeru Kobayashi
 

More from Shigeru Kobayashi (20)

Maker Faireを持続可能にするには?
Maker Faireを持続可能にするには?Maker Faireを持続可能にするには?
Maker Faireを持続可能にするには?
 
Maker Faire Tokyo 2018
Maker Faire Tokyo 2018Maker Faire Tokyo 2018
Maker Faire Tokyo 2018
 
テレマティクスハッカソン参加同意書
テレマティクスハッカソン参加同意書テレマティクスハッカソン参加同意書
テレマティクスハッカソン参加同意書
 
monoFab Ideathon Meeting
monoFab Ideathon MeetingmonoFab Ideathon Meeting
monoFab Ideathon Meeting
 
monoFabアイデアソンミーティング参加同意書
monoFabアイデアソンミーティング参加同意書monoFabアイデアソンミーティング参加同意書
monoFabアイデアソンミーティング参加同意書
 
CEATEC JAPAN 2014
CEATEC JAPAN 2014CEATEC JAPAN 2014
CEATEC JAPAN 2014
 
BLE Boot Camp
BLE Boot CampBLE Boot Camp
BLE Boot Camp
 
Fab MeetUp Vol.5
Fab MeetUp Vol.5Fab MeetUp Vol.5
Fab MeetUp Vol.5
 
SK creator planet 2014
SK creator planet 2014SK creator planet 2014
SK creator planet 2014
 
Solid 2014 kobayashi
Solid 2014 kobayashiSolid 2014 kobayashi
Solid 2014 kobayashi
 
情報学基礎:エレクトロニクス
情報学基礎:エレクトロニクス情報学基礎:エレクトロニクス
情報学基礎:エレクトロニクス
 
Rebuilding the world, from the 'periphery'
Rebuilding the world, from the 'periphery'Rebuilding the world, from the 'periphery'
Rebuilding the world, from the 'periphery'
 
Engadget電子工作部:インテルGalileoでガジェットを作ろう!
Engadget電子工作部:インテルGalileoでガジェットを作ろう!Engadget電子工作部:インテルGalileoでガジェットを作ろう!
Engadget電子工作部:インテルGalileoでガジェットを作ろう!
 
第2回iBeaconハッカソン
第2回iBeaconハッカソン第2回iBeaconハッカソン
第2回iBeaconハッカソン
 
イノベーション創出のファシリテータとしてのデジタル工作機械を備えた市民工房
イノベーション創出のファシリテータとしてのデジタル工作機械を備えた市民工房イノベーション創出のファシリテータとしてのデジタル工作機械を備えた市民工房
イノベーション創出のファシリテータとしてのデジタル工作機械を備えた市民工房
 
Rapid PrototypingからRapid Manufacturingへ
Rapid PrototypingからRapid ManufacturingへRapid PrototypingからRapid Manufacturingへ
Rapid PrototypingからRapid Manufacturingへ
 
iBeaconハッカソン
iBeaconハッカソンiBeaconハッカソン
iBeaconハッカソン
 
大阪市立大学大学院創造都市研究科ワークショップ
大阪市立大学大学院創造都市研究科ワークショップ大阪市立大学大学院創造都市研究科ワークショップ
大阪市立大学大学院創造都市研究科ワークショップ
 
IAMAS × 十六銀行:産学連携記念セミナー
IAMAS × 十六銀行:産学連携記念セミナーIAMAS × 十六銀行:産学連携記念セミナー
IAMAS × 十六銀行:産学連携記念セミナー
 
品モノラボ#5:Maker × メーカー
品モノラボ#5:Maker × メーカー品モノラボ#5:Maker × メーカー
品モノラボ#5:Maker × メーカー
 

Hardware Sketching Workshop 2013

  • 2. Photography: Beth and Christian http://www.flickr.com/photos/six27/245969277/
  • 3.
  • 4.
  • 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) 精錬(refine) 質問(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 coffeemaker https://vimeo.com/1389390 • littleBits http://littlebits.cc
  • 17.
  • 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)
  • 29.
  • 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)
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.
  • 46.
  • 47.
  • 48.
  • 49.
  • 50.
  • 51.
  • 52.
  • 53.
  • 54.
  • 55.
  • 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から