新・筋電センサシステム「VPP-SUAC」
長嶋洋一 (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」オブジェクトでマッピングする事で、任意のアプリケーションに応用できる
- 動作実験の様子
- (Max7からMax8になって、Maxパッチが表示されないという変化がありました。以下のように変更します)
Max8の場合には、VPP-SUAC_03a.maxpatを開く。読めない場合には全部をzip化したこのzipを解凍する- Maxパッチ"VPP-SUAC04.maxpat"
- まず、ホストPCにXBee-USBインターフェースを接続する
- ここでMax7を起動して、VPP-SUAC_04.maxpatを開く。読めない場合には全部をzip化した このzip を解凍する
- ホストPCにがXBee-USBインターフェースに割り当てたラベルを確認するには「arduinoSerialreader」の第2入力の「print」を叩くと、Maxコンソールウインドウにシリアルの一覧が出てくる
- 「arduinoSerialreader」の右端の第4入力のメニューで、ホストPCに対しするXBee-USBインターフェースを指定する
- ここで「arduinoSerialreader」の左端の第1入力にあるトグルをONにすると、4チャンネルの筋電情報を受信し、絶対値を移動平均した「筋電エンベロープ」のグラフを表示開始する
- 「筋電エンベロープ」のグラフは、移動平均の段数で「10段」・「20段」・「40段」の3タイプがある。段数が少ないと積分効果が下がるものの反応速度は早くなる
- ホスト側からのパラメータを過度に頻繁に送ると筋電データ受信がストップすることがあるので、その時は「arduinoSerialreader」の第3入力のボタンをクリックすると、オーバーフローしたバッファをクリアして受信が再開される
- 画面右側のパラメータで、「ゲイン」と「移動平均の段数」と「ノッチフィルタ用の商用電源周波数(60Hz/50Hz)」が設定できる
- 4チャンネルの筋電エンベロープ出力を適当に「scale」オブジェクトでマッピングする事で、任意のアプリケーションに応用できる
- 動作実験の様子
- (Max7からMax8になって、Maxパッチが表示されないという変化がありました。以下のように変更します)
Max8の場合には、VPP-SUAC_04a.maxpatを開く。読めない場合には全部をzip化したこのzipを解凍する