SUACメディアデザインウイーク2018
スケッチング(物理コンピューティング) チュートリアル
--- "ポストGainer"の新しい展開、生体センシングの可能性---
長嶋洋一 (SUAC) ★
1. スケッチングを活用したSUAC学生のメディアアート作品の実例
2. スケッチング(物理コンピューティング)とは
- 過去の「ものづくり(デザイン)」
- 企画
- 実験
- 設計
- 試作
- 制作・製造・量産
- 新しい「ものづくり(デザイン)」
- 企画
- 実験・設計・試作 ← 「スケッチング」〜「実際に動く試作モデル」による検討
- 制作・製造・量産
- 「ものづくり(デザイン)」の2つのスタイル
- ニーズ指向 - 「こういうテーマを追求したい」
→ 実現する方法を考える- シーズ指向 - 「こんな新しい技術/モノ/センサ/システム等がある」
→ 作品として活用できないか考える- 「ものづくり(デザイン)」の3つの階層
- ハードウェア - 電子回路、機構、筐体
- ソフトウェア - いわゆる「プログラム」 - 何度でも書き換え更新/改訂が可能
- ファームウェア - 不揮発メモリ(FlashEEPROM)に書き込まれたプログラム ※スケッチング技術の基盤
(参考)メモリのいろいろ- 「オープンソース」の文化
- 「皆んなでHAPPYになろう」
- (C)で縛られない → 一例は(CC) Creative Commons
- クラウド、ユビキタス、モバイル、コンテンツ、n次創作、・・・
- オープンソース・ソフトウェア
- オープンソース・ハードウェア
- 3Dプリンティングも同じ流れに
- ファウンドリ - 「メーカ」のvirtual化
- クラウドファンディング
- ソフトウェア・プラットフォームと開発環境
- Max7
- (かつての"Director"→) Flash (ActionScript) → "Animate"へ
- Processing (Java)
- .Net (?)
- Xcode (C++)
- gcc (C)
- 各マイコン用IDE - Arduino、Propeller、mbed、AKI-H8、・・・
- 詳しくは以下も参考に
- スケッチング/プロトタイピングへの警鐘
- 画像認識(CV: ComputerVision, Kinect, WebCamera・・・)もいいけど、物理的センサのリアリティも忘れないで
- ブレッドボード - 信頼性がまったく無い、ライブのシステムに使う非常識はなんとかならないか(^_^;)
- P板屋 - 特急設計サービス、特急製造サービスは活用できる(台湾・香港・韓国が凄い)
- ハンダ付け - この王道を忘れてはいけない(^_^)
- インタラクティブなシステム実現の例 - SUAC碧風祭・メディア造形学科企画 「お化け屋敷」の事例
- 碧風祭2011「お化け屋敷」
- 碧風祭2013「お化け屋敷」
- 碧風祭2014「お化け屋敷」
- センサを使うための定番Max/MSP/jitterのテクニック集
- 値を見たい → マルチスライダー
- 値を反転したい → 数値演算オブジェクト
- 変化イベントを検出したい → "change"オブジェクト
- 「ある範囲の数値」で識別 → "if"オブジェクト
- 一定期間、反応をマスクする「不応期」のテクニック → "switch"オブジェクト
- 値の範囲を変更する → "scale"オブジェクト
- とびとびの値を滑らかに繋ぎたい → "line"オブジェクト
- 平均的な値を取り出したい → "mean"オブジェクト(移動平均)
- あとは → 以下も参考に
3. Sketchingの実例(1) - 新・触覚センサシステム「PAW-eight」
- 解説
- 新・触覚センサシステム「PAW-eight」は、「PAWセンサ」を活用した2世代目のインターフェースである
- CPUはmbedのNucleoF401REである
- 「PAWセンサ」及び初代PAWセンサ楽器「MRTI2015」についての学会発表は → こちら と こちら
- 「MRTI2015」の写真はこれ
- アールティ社が開発した「PAWセンサ」は、直径15mm×高さ10mmほどの円筒形のウレタンが21.5mm×25mmの基板の上に密着して載っている構造である。PAWセンサの動作原理は非常にシンプルで、ウレタン充填密封された空間内にあるLEDとフォトトランジスタのペアからLED点灯時の受光電圧を出力する。内部にはLEDとフォトトランジスタがそれぞれ2個、離れて配置されており、全て相互に影響し合う位置関係になっている。つまり2個のフォトトランジスタの出力電圧は、LED1を点灯させた時とLED2を点灯させた時では異なるので、2個のLEDを時分割点灯させてセンシングすることで、たった2本のアナログ出力電圧から4通りの領域に対応した異なった変化を検出できる。ここで重要なのが、このセンサをうにうにと触るのは、人間の体性感覚野/運動感覚野のいずれでも感度最大である「掌の指先」というところで、弾力のある円筒形のシンプルなウレタンをうにうにするには最上のクリチカルな制御チャンネル/センサである。
- このPAWセンサを両手の指先10本の操作に対応させるために、東急ハンズから仕入れたプラスチック製の「卵型の透明ケース」に取り付けたのが、新楽器 "MRTI2015"(Multi Rubbing Tactile Instrument) である。透明ケースの採用によって、内部でmbed基板と配線ジャングルを敢えて見せ、さらにセンシング情報をホストから還流させてLEDのPWM制御で光らせる。この楽器は、2015年から2016年にかけて計4回の筆者の海外ツアー/公演/講演(USA,Singapore,Australia,France,Holland,Spain,Russia)において活躍してきたが、酷使が祟って罅割れしたのでセミリタイア状態にある。
- 両手の指先10本といっても現実には薬指と小指は個別に制御できない点を改良して開発した新インターフェースが”PAW-eight”であり、8チャンネルながらダイソーの108円サラダボウルにmbedを内蔵して強度を上げたシステムとなっている。新楽器というよりもバイオフィードバック・ウェルネスシステムとしてのインターフェースに重点を置いて開発しており、まだ発展途上である。
- ”PAW-eight”のメイキング話は → ここ の「2017年9月5日(火)」から
- ”PAW-eight”のBFデモ用にMax7で開発したシステムは、小指を除く両手の8本の指を対等な8パラメータとして定義し、Open-GLによって描画される3次元空間内の立方体の8頂点に置かれた輝点から中心(重心)に向かう距離としてマッピングしている。この空間内には整然と並ぶ多数の反射球体がリアルタイムに回転しており、8本の指からの触覚制御(傾かず平坦に押さないと有効データとならないように調整)によって中心に近づく輝点が反射球体を照らす。
- 音は無いもののその様子は → YouTube
- 中心からの距離に比例したピッチのサウンドとともに8個の輝点を全て中心にあるブラックホールに収めるというバイオフィードバックゲームであるが、指先にただ強く力を入れると反対側に通り過ぎるようにしてあり、中途半端な力加減のところに8本の指先を均等にリラックスしつつバランスをとりつつ優しく押し込む、というのは相当に難易度が高い。高齢者の認知症リハビリには「指先を使う」というアプローチがあり、そのマルチメディア版としての実現を目指した。
4. Sketchingの実例(2) - 新・筋電センサシステム「VPP-SUAC」
- 概要
- 新・筋電センサシステム「VPP-SUAC」は、ブロジェクトVPPの長嶋洋一・照岡正樹が共同開発したものである
- 過去の筋電センサ共同研究の延長線上にあるCQ出版「インターフェース」誌2015年4月号の特集記事に向けて新規開発した"MiniBioMuse"第5世代の筋電センサ回路を発展させ、SUAC特別研究費により「P板.com」にてオリジナル基板「VPP-SUAC2」を開発した(製造データを公開するので誰でも追試の試作可能)。mbed NucleoF401REをプラットフォームとしてXBeeを搭載し、ホストのMax7プログラムとWiFi通信する
- 筋電センシングは4チャンネルであり、ジャンパオプションによって「脳波」・「高速検出」という拡張モードにも対応している
- 電源は「USBモバイルバッテリ」利用によってスイッチングACアダプタのノイズを避けている
- 長嶋は約20システムを保有しており共同研究等において貸し出し可能であるが、以下の情報によって誰でも完全に同一のシステムを再現製作しさらに発展改造が可能である
- VPP-SUAC2基板
- 上が基板の全景であり、筋電センサ電極を接続するコネクタ形態として、 ステレオミニジャックを4個 取り付けるか、または 10ピンのビンコネクタ を取り付けるかのいずれかを選択する
- 回路図はこれである
- 「P板.com」に提出した基板設計データ(照岡)はこれである
- 「P板.com」に提出したパーツリスト(照岡)はこれであり、未実装のため自分で入手して取り付ける必要がある部品は「OSコンデンサ"4SEP1200M"(SANYO)」と「ステレオミニジャック"MX387GL"(マル信無線)」の2種類のみである
- この基板を「P板.com」に発注して実際に製造を依頼する場合に必要な提出データをzipにまとめたものはこれである
- 基板上のジャンパは、default状態で中央が繋がっている。ここをカットしてC28に近いジャンパを接続すると、ゲインが約3.5倍になって脳波センシングの実験が可能となる。またここをカットしてR24に近いジャンパを接続すると、筋電センシングのゲインは同じでハイパスフィルター特性を緩くしてあるので、特殊なリハビリ用途で厳密な波形(JIS規格)が必要な高速計測に対応している(ただしアーティファクトに弱い[電極の接触不良に敏感]ので注意)
- 未実装の「OSコンデンサ"4SEP1200M"(SANYO)」はこれである
- XBeeを搭載するための2mmピッチビンソケットはこれであり、秋月電子で購入できる
- NucleoF401REの「Arduino互換ピンソケット」に取り付けるためのピンヘッダは秋月電子で購入できる
- XBee
- 上が筋電センシングシステムとホストPCとでWiFi通信するためのXBeeモジュールであり、秋月電子で購入できる。Pro版(Sereies 2)は不要で廉価版のS1でOK
- 使用するXBeeには、ペアとして共通のパラメータ(通信速度その他)を設定し、さらに相互に「自分の相手」であるように設定する必要がある。その書き込み環境としてはCQ出版が提供した「書き込み基板」 ★ ★ を用いて、ここだけWindowsXPパソコンで このように 書き込んでいる。その詳細な手順は ここ にある。長嶋の「手持ちXBee書き込みパラメータの記録」は これ である。
- ホストPCにUSB接続する「XBee-USBインターフェース」は秋月電子で購入できる
- NucleoF401RE
- 上が筋電センシングシステムのプラットフォームとなるmbedマイコン「NucleoF401RE」である。秋月電子で税込1800円である。参考資料として秋月電子のサイトに 製品概要と ユーザーマニュアル(ハードウェア編)と ユーザーマニュアル(ソフトウェア編)とが完備している(いずれも英語)
- NucleoF401REのプログラム開発はオフラインツールでなく、ARM社のmbedサイト内のオンラインコンパイラで行う。ただし本システムについては動作確認できているファームウェアのバイナリがあるので、これを使えばエディタもコンパイラも不要である
- Arduinoシールドと互換になっているシリアルポートをXBeeに接続するために(他にもホストとUSBシリアル通信する場合は完全に同一)、NucleoF401REの裏側にある2箇所のジャンパオプションを加工する必要がある。 まずホストUSB通信モジュールのある小さなエリアの「SB13」と「SB14」の2つを、 これを このように 付いているジャンパにハンダごてを当てて除去(open)する。 次に大きなエリアの「SB62」と「SB63」の2つを、 これを このように オープン状態からハンダを盛って接続(ショート)させる
- さらに外部電源として「モバイルUSBバッテリ」を使用するために、基板表側(部品のある側)のホストUSB通信モジュールのある小さなエリア中央の「JP1」を、なんらかの方法でショートさせておく
- 以上のジャンパ処理を行ったら、NucleoF401REにファームウェア書き込みを行う。まず最初にコンパイル成功してダウンロードしたファイルとして、 VPP_SUAC_03_NUCLEO_F401RE.bin をデスクトップにコピーしておく。 次にUSBケーブルでNucleoF401REをパソコン(Mac OSX 10.7以降)に接続すると、デスクトップに「NUCLEO」というアイコンが現れるので、その上に VPP_SUAC_03_NUCLEO_F401RE.bin をドラッグ&ドロップする。ボード上のLEDが赤と緑で点滅して止まったら書き込み完了なので、NUCLEO」というアイコンをゴミ箱に捨ててアンマウントしてNucleoF401REを取り外す
- ちなみに、NucleoF401REのソースコードは main.cppと main.cppと main.cppの3本からなっている。 「.cpp」が読めない場合には全部をzip化した このzip を解凍して「.cpp」を「.txt」にリネームするか、任意のテキストエディタで開けばよい ファームウェアを改良する場合にはオンラインコンパイラ(メンバー登録が必要)でこのソースから改訂すればよい
- 以上のセットアップが終わったNucleoF401REのArduino互換シールドソケットに、XBeeまで搭載した「VPP-SUAC2基板」を取り付けると完成である(^_^)
- NucleoF401REのUSB端子に外部の「モバイルUSBバッテリ」を接続すると、システムは自動でdefault設定値によって4チャンネルの筋電信号をWiFiで送信開始する。筋電センサ電極が接続されていない場合も、「中央値」のデータだと解釈して送信を続ける
- ホストPCのMaxからパラメータを送信しない場合のdefault値は、「移動平均=10段」、「ゲイン=4」、「電源ハム・ノッチフィルタ=60Hz」となっている。特に関東地方など「50Hz地域」の場合には、このdefault状態(60Hz)は不要なノイズ源となるので必ず50Hzに設定すること
- Maxパッチ"VPP-SUAC03.maxpat"
- まず、ホストPCにXBee-USBインターフェースを接続する
- ここでMax7を起動して、VPP-SUAC_03.maxpatを開く。読めない場合には全部をzip化した このzip を解凍する
- ホストPCにがXBee-USBインターフェースに割り当てたラベルを確認するには「arduinoSerialreader」の第2入力の「print」を叩くと、Maxコンソールウインドウにシリアルの一覧が出てくる
- 「arduinoSerialreader」の右端の第4入力のメニューで、ホストPCに対しするXBee-USBインターフェースを指定する
- ここで「arduinoSerialreader」の左端の第1入力にあるトグルをONにすると、4チャンネルの筋電情報を受信してグラフを表示開始する
- ホスト側からのパラメータを過度に頻繁に送ると筋電データ受信がストップすることがあるので、その時は「arduinoSerialreader」の第3入力のボタンをクリックすると、オーバーフローしたバッファをクリアして受信が再開される
- 画面右側のパラメータで、「ゲイン」と「移動平均の段数」と「ノッチフィルタ用の商用電源周波数(60Hz/50Hz)」が設定できる
- 4チャンネルの筋電情報出力を適当に「scale」オブジェクトでマッピングする事で、任意のアプリケーションに応用できる
- 動作実験の様子
5. 色々なハードウェア・プラットフォーム
- Arduino
- PCナシでスタンドアロン・システムを実現
- いろいろなファミリがある(上の写真は左から "UNO"、"nano"、"micro")
- フリーのIDE、サイトにはサンプル多数あり (C言語)
- 外部インターフェースのための増設基板(シールド)多数、XBeeも使える
- アナログ入力6ポート (Arduino Microは12ポート)
- ディジタル出力6ポート
- PWM(擬似アナログ)/ディジタル出力6ポート
- XBee通信は出来る(可能な範囲にプロトコルを定義すればよい)
- MIDI送信は出来るがMIDI受信は出来ない(データを落とすのは音楽用途には致命的) ※Arduino Microを「Arduino-USBMIDI」modeで使うとOK !
- 「+5V」系
- 活用システム例
- ふわり (スタンドアロン、音センサに反応して電球の輝度制御)
- hikiribi (ガラスとアクリルで制作したデスクランプ。目覚めてランプに息を吹きかけると、次第に明るくなっていく)
- Coloration (色センサ情報をArduinoがシリアルで受けてD/AしてGainerに渡してFlashが利用)
- ジャミーズ娘+ (MIDI出力→Maxへ)
- 日本の音風景 (XBeeでワイヤレス伝送→Maxへ)
- 三味線の兵(つわもの) (XBeeでワイヤレス伝送→Maxへ)
- パラパランプ (スタンドアロン、ボリュームを回すとステッピングモータを制御)
- 詳しくは→Arduinoサイト
- Arduino日記も要参照
- Firmata(+Maxuino)
- PCと実世界とのインターフェース専用(スタンドアロン無し)
- Firmataとは「ArduinoをGainer化するオープンソース・ファームウェア」のこと
- FirmataはUSBシリアル経由でいろいろな環境に対応している
- Gainerで不足する入出力をArduinoファミリの機能に拡張できる
- 「Firmataの走るArduino」をMaxからGainerのように扱うのがMaxuino
- シリアル通信は出来ない
- 「+5V」系
- 活用システム例 (ClydeとLittleBitsArduinoをFirmata化してMaxuino経由で使用)
- 詳しくは→FirmataサイトとMaxuinoサイト
- 制作例はこちらも参考に
- Arduino2Max
- PCと実世界とのインターフェース専用(スタンドアロン無し)
- Firmataよりもお手軽にArduinoをMaxの外部世界インターフェースとする手法
- スピードは115200bpsでなかなかに高速
- 元々のものはこのサイトのこれをゲットできる
- 元々のものはArduino2Max_1(→zipを解凍)
- Arduinoの"Arduino2Max_1"スケッチは元々のものを共用
- Maxの"Arduino2Max_1_01"パッチも元々のもの。これは大きくて見にくい(^_^;)
- Maxの"Arduino2Max_1_02"パッチはエッセンスをコンパクトにまとめたもの
- これをMaxの"Arduino2Max_1_03"パッチや"Arduino2Max_1_04"パッチのように活用していける
- このスタートラインはArduino_with_Max7(→zipを解凍)
- Arduinoの"Analog_to_Serial"スケッチは単にアナログ入力を刻々とシリアル出力する
- これをMaxの"Serial_Receive"パッチによって受け取る、というのが基本原理
- Arduino Microならアナログ12チャンネル可能なので→Arduino2Max_2(→zipを解凍)
- Arduinoの"Arduino2Max_2"スケッチは12チャンネルのアナログ入力を刻々とシリアル出力する
- これをMaxの"Arduino2Max_2_01"パッチや"Arduino2Max_2_02"パッチのように活用していける
- 1バイトの数値(0-255)をArduinoの8ビットのディジタル出力するのがArduino2Max_3(→zipを解凍)
- Maxの"Arduino2Max_3_01"パッチは1バイトの数値をシリアル出力する
- Arduinoの"Arduino2Max_3"スケッチは1この受信したシリアルデータをデコードして8ポートのディジタル出力から出す
- ごく普通のArduinoで6チャンネルのアナログ入力をMaxに返すのがArduino2Max_4(→zipを解凍)
- Arduinoの"Arduino2Max_4"スケッチは6チャンネルのアナログ入力を刻々とシリアル出力する
- これをMaxの"Arduino2Max_4_01"パッチなどはそれぞれ活用している。移動平均とかscaleオブジェクトによるマッピングなどの例
- LED内蔵スイッチのために「スイッチ入力」・「LED点灯」・「ホストシリアル出力」を合体させたのがArduino2Max_5(→zipを解凍)
- 単純に2個のスイッチ状態をデジタル入力してホストにシリアル出力するのがArduino2Max_6(→zipを解凍)
- これらを自在に必要なArduinoスケッチに改造して、対応するMaxパッチも改良していけるのが「Arduino2Max」の楽しみ方(^_^)
- Arduino-USBMIDI
- PCと実世界とのインターフェース専用(スタンドアロン無し)
- 通常のArduinoでは「MIDIは出来ない」ことに注意
- ArduinoのシリアルをMIDI速度の31250bpsにしてMIDIインターフェース(フォトカプラ入力とオープンコレクタ出力とDIN端子)を実現した場合
- MIDI出力は「Arduinoが暇な時に出力する」ことで実現OK → ジャミネータと遊ぼうでフル活用
- MIDI入力はArduinoがシリアル入力を取りこぼすので使用できない
- 普通のArduinoでなく、「Arduino Micro」だけは使えるMIDIとしてMaxと連携可能
- スピードは31250でなく115200と高速、ライブラリがFIFO処理するのでMIDI受信も取りこぼしナシ(^_^)
- ホストのMacからは「Mac OSX標準MIDIデバイス」と見え、Maxでは「普通のUSB-MIDI機器」として、MIDI関係オブジェクトが扱える
- 長谷部さんが「奇楽堂」ブランドで公開しているTouchMIDI32と同等に扱える
- Arduinoスケッチをコンパイルする際に、同じディレクトリ内に「MIDIUSB.cpp」と「MIDIUSB.h」とを置いておくこと。これにより「OSに認識されるUSB-MIDIデバイス」となってくれる
- ArduinoからテストMIDIを連続出力するのがMIDIUSB_test.zip(→zipを解凍)
- Arduinoの"MIDIUSB_test"スケッチはMIDIノートの36から71までを1秒間隔でノートオン/オフ(duration=250ms)を繰り返す
- Maxの"note_receive"パッチは、「notein」オフジェクトを叩いてMIDI機器としてArduinoを選ぶとこのMIDI情報を受け取って表示する
- ArduinoがMIDIをとりこぼさないかの「いじわるテスト」がMIDIUSB_loop.zip(→zipを解凍)
- Arduinoの"MIDIUSB_loop"スケッチは、MIDI受信したデータをMIDI出力する、というエコーバック動作。通常のArduinoだと受信しきれず異常になる
- Maxの"heavy_traffic_MIDI."パッチは「noteout」「midiin」オフジェクトを叩いてMIDI機器としてArduinoを選ぶと、多量のMIDIノート情報をガンガンに出力し、かつ受信したMIDIノート情報を表示する。エコーバックしているArduinoがデータを落とした場合にはこの両者が対応しなくなるが、ちゃんと対応してくれている事を確認できる
- ArduinoをUSB-MIDIデバイスとしてMaxの出張所にしたサンプルがMIDIUSB_read.zip(→zipを解凍)
- Arduinoの"MIDIUSB_read"スケッチはMIDIコントロールチェンジを受信するとエコーバック送信しつつ、LEDを点滅させる
- Maxの"read_test"パッチは「ctlout」「ctlin」オフジェクトを叩いてMIDI機器としてArduinoを選ぶと、MIDIコントロールチェンジとして色々なデータを送り、エコーバックされてきた情報で確認している
- 秋月電子のステッピングモータを制御するサンプルがMIDIUSB_stepping(→zipを解凍)
- 秋月電子のステッピングモータを5個、個別に制御するサンプルがMIDIUSB_stepping2(→zipを解凍)
- 同様に自在に必要なArduinoスケッチに改造して、対応するMaxパッチも改良していけるのが「Arduino-USBMIDI」の楽しみ方(^_^)
- Propeller
- PCナシでスタンドアロン・システムを実現
- オープンソース・コミュニティはあるがParallax社だけ。「マイコン界のApple」
- 内部に8個のCPU(80MHz)があり、並列動作(割り込み無し)
- フリーの専用IDE(Windows)、さらにフリーIDEのbst(Windopws/MacOSX/Linux)あり
- 専用言語spinとアセンブラで超強力
- アナログ入力は最大で14ポート可能
- ディジタル出力は最大で28ポート可能
- PWM出力は最大で28ポート可能
- シリアル送受信は最大で同時に6チャンネル可能、MIDIの受け落としナシ
- 「+3.3V」系
- 活用システム例
- 「電子十二影坊」・新楽器 「Peller-Min」 ・「万変鏡」
- OTOkakecco (4つのシリアルマウスと通信してGainer経由でホストに伝送)
- 誰かを待つ街 ★ ★ ★ ★
- 「Hikari」
- Nepic
- 新楽器「GHI2014」
- 詳しくは→Propellerサイト
- Propeller日記も参考に
- mbed
- Raspberry Pi
- PCナシでスタンドアロン・システムを実現
- ローコストのLinuxボード、いろいろなファミリがある
- USB、イーサネット、ビデオ出力、シリアル通信、汎用I/Oなど搭載 - 単体でパソコン/サーバとなる
- CPUは800MHzで高性能、ただし大電流の電源が必要なため事実上は電池動作不可
- Unixの開発環境、gcc
- 簡易言語PythonもOK
- 「+3.3V」系
- 動作例
- ホストMaxから刻々とOSC経由で与えられる情報をイーサネットで受けとったRaspberry Piが、接続されている「SUACボード」に接続された64個のLEDを個別にPWM制御・点灯させている
- 3台のRaspberry PiとホストMac上のMaxプログラムがOSC通信している。MacのMaxからそれぞれのRaspberry Piで走るPythonプログラムに8種類の変化するデータを送り、Pythonプログラムは画面内にウインドウを開いて受けとったデータを8個のスライダーとしてグラフィック表示している。MacはそれらRaspberry Piの画面情報をVNC経由で取得して同時に表示している
- USB接続のWebカメラ画像を入力しているRaspberry Piの画面情報をVNC経由でMacが取得して表示
- 詳しくはRaspberry Piサイトを参考に
- Raspberry Pi日記も参考に
- AKI-H8
- これです
- 日立のH8マイコンを搭載、アセンブラで書けばいまだに超強力(Arduinoを軽く凌駕)
- なんせ古いので書き込み環境が弱く、Windows(MSDOS)専用(;_;)
- アセンブラでMIDI割り込みを記述すれば超強力、64個のLEDの個別PWMも楽勝 → 「靄夜」(もや)
- 「+5V」系
- AKI-H8の解説
- AKI-H8で信号処理
- AKI-H8で電子楽器
- 活用システム例★
- Gainer
- メーカー製造販売中止(作者の小林茂氏も了承)、正式に過去のものとなった(;_;)
- PCと実世界とのインターフェース専用(スタンドアロンmode無し)
- Max, Flash, Processingに対応
- 8種類(実質は5種類)の入出力動作モードがある
- シリアル通信は出来ない
- 「+5V」系
- 活用システム例
- 詳しくは→gainerサイト (いずれ閉鎖の予定)
6. 代表的な入出力/ホスト通信の方式とその対応法
- ディジタル入力
- 電源/信号電圧(H)とGND(L)とのいずれかをとる
- ディジタルICの出力を接続する
- スイッチを使う場合にはpull-up回路を使用する
- クロック(周波数)出力タイプのセンサは低周波数なら対応可能
- アナログ(電圧)入力
- 電源電圧とGNDとの間の電圧を連続値として入力
- 規定範囲外の電圧は素子破壊するので厳禁(保護回路)
- サンプリング時間に注意(→S/H)
- 電源供給・電圧出力型センサは直結
- 電圧生成型センサもレンジを検討して直結
- 抵抗値が変化するセンサは分圧抵抗を使用する
- 交流信号は規定範囲に変換する回路が必要
- ディジタル出力
- 電源/信号電圧(H)とGND(L)とのいずれかを出力
- LEDのドライブは電流供給能力に注意
- LEDのドライブには正論理と負論理がある
- モーター/リレー等は専用のドライバ素子を使用
- 「R-2Rラダー」を使用するとアナログ電圧出力できる(ビット数の精度で)
- 疑似アナログ(PWM)出力
- LED点灯でMaxとゼロの中間値を表示する
- 細かく時分割したON/OFFの比率(デューティ比)を制御 - PWM Pulse Width Modulation
- モーター等には適さない
- 最小値あたりでチラチラして、最大値近くでは視覚的には飽和する
- アナログ電圧出力
- GainerやArduinoでは出ない
- AKI-H8では出る
- ディジタル出力に「R-2Rラダー」を使用すると出来る
- シリアル通信
- 電圧制御システムのコントロール用に使用
- シリアル通信 - シリアル/RS232C/USBシリアル
- Max, Flash, Processingが対応
- GainerやFirmataでは出来ない(ホストとのUSB通信に使うため)
- 昔のパソコンでは「RS-232-C」としてモデムなどと通信した
- PC側はシリアルでも、ハードウェアとしてUSBを経由するドライバが充実している
- Maxでは「serial」オブジェクトで対応
- 活用システム例 - 「RFID」や「カラーセンサ」や「加速度センサ」や「超音波距離センサ」がシリアル対応
- 白い絵本 (RFID)
- はやくスシになりたい (RFID)
- おはなしパネル (RFID)
- Color Odyssey (色センサ)
- 二人はウラハラ (RFID)
- 空からの贈り物 (RFID)
- Coloration (色センサ)
- 新楽器「GHI2014」 (超音波距離センサ)
- ウチュウハウス (RFID)
- シリアル通信 - MIDI
- シリアル通信 - XBee
- Max, Flash, Processingが対応
- マイコンのシリアル端子に繋ぐと簡単にWiFi化できる
- Maxでは「serial」オブジェクトで対応
- 詳しくはWikipedia
- 「Arduino〜XBee〜Max」ビデオマニュアル(長嶋の下手な英語(^_^;))
- こちらも要参照 (XBeeの設定)
- こちらも要参照 (PropellerとXBee)
- 活用システム例
- こちらも要参照 (Raspberry PiとXBee)
- ネットワーク通信 - OSC
7. 「多数」の入力/出力に拡張する方法
- スリーステートゲート : ディジタル入力の拡張
- 入力をスルーするだけのバッファゲート
- 制御入力Gにより出力禁止にすると、出力がハイインピーダンス(絶縁)状態になる
- 多数の出力を結線することが出来る、ただし出力が許可されるのは必ず排他的にどれか一つだけ
- 74HC245
- ラッチ : ディジタル出力の拡張
- 入力はクロック入力CKの立ち上がりで保持(記憶)されて出力される
- CKが変化しなければ入力は変化しても出力は変わらない
- ある信号線を多数に分配してそれぞれ必要なところでラッチすることで多重化
- 74HC574
- デコーダ : 多チャンネルを管理するカギ
- 8ビット等のまとまりを1つのアドレスとして管理
- アドレスの2進状態を解読して排他的な選択信号を与える
- 一般的に負論理である事に注意
- 74HC138/139
- アナログスイッチ : アナログ入力/アナログ出力の拡張
- 規定範囲内の信号電圧であることを厳守する
- 半導体スイッチなので抵抗がそこそこある事に注意
- 簡単なシステムではとても重宝する
- 74HC4053/4052/4051
- 詳しくは→センサとマイクロエレクトロニクスの概要
- 実際にマルチホストマイコン(Gainer、Arduino、AKI-H8。Propeller)に対応して製作した汎用入出力拡張基板「SUACボード」の開発物語も参考に
8. 「同時にいくつもの仕事をさせる」ための方法
- ここではArduinoによる手法(ポーリング)をサンプルとして取り上げる
- 別途に、mbedの場合には割り込みを利用したイベントメソッド、Propellerの場合には並列処理手法がある
- Arduinoサイトや解説本の欠点 --- 「一つの事しか出来ない」
- CPUの本質は「逐次処理」の連結(羅列)
- 「時分割多重化」の考え方
- CPUに"wait"を使うのはあまりに無駄
- 「delay」を使ったプログラムは役に立たない
- 「sleep」を使ったプログラムは役に立たない
- 実はArduinoはそこそこ速いのに使いこなしていない
- 「グローバル変数」を使おう
- Arduinoブログラムの変数には2種類ある
- 関数内で定義するローカル(局所)変数
- 全体で定義するグローバル(広域)変数
- ローカル変数を持続させるにはstatic宣言
- 「ソフトウェアタイマ」を使おう
- 任意に定義できるフトウェアタイマ
- ハードに対応したハードウェアタイマ
- 再初期化を忘れずに
- ソフトウェアタイマの条件判定は「=」か「>」か?
- 正確な時間の管理方法
- システムタイマを参照する
- CPUに「厳密に正確な時間」は無い
- 平均してみればほぼ正しい時間
- Arduinoの割り込み処理 - ライブラリに任せる
9. メディアアート(インスタレーションやインタラクティブ展示)の例
- 時間の関係で過去の作品事例の紹介はごく一部ですので、後日、以下のリンクを参照して下さい
- Art & Science Laboratory(長嶋洋一サイト)
- 静岡文化芸術大学1106長嶋研究室
- SUACインスタレーション(1)
- SUACインスタレーション(2)
- SUACインスタレーション(3)
- SUACインスタレーション(4)
- 新楽器「GHI2014」
- ジャミネータと遊ぼう
- 電子十二影坊
- 「靄夜」(もや)
- インタラクティブアートの統合的システム・プラットフォームとしてのMax/MSP
- 作るサウンドエレクトロニクス
- アーティストのための汎用センサ自作応援講座
- 筋電センサ"MiniBioMuse-III"
- 電気刺激フィードバック装置の開発と音楽パフォーマンスへの応用
- オリジナルMIDIセンサを作ろう
- メディア・アートと生体コミュニケーション
- MIDI日曜大工日記
- 「なでなで」センサ
- 「いじいじ」センサ
- 身体情報と生理情報
- 実録・笙ブレスセンサを作る
- センサを利用したメディア・アートとインスタレーションの創作
- インタラクティブ・アートのための技術講座
- Propeller日記
- Arduino日記
- Processing日記
- SuperCollider日記
- 続・Propeller日記
- 続々・Propeller日記
- Raspberry Pi日記
- PureData日記
- Max6日記
- mbed日記
- Myo日記
- Xcode日記
- postGainer日記
- Max7日記
- 続・Max7日記