表面筋電をセンサーで取得する


はじめに

研究室に転がってたMyoWareという筋電センサを用いて表面筋電を計測してみました.

これを利用することで,把持や物体の持ち上げなどを定量的に評価できるようになるかもしれません.
僕は研究で使えるかと思って動かしてみました.
筋電とは何ぞや?って人は以下の論文でも読んでみてください.

動作環境

本記事で実装した環境を記しておきます.

  • OS: Windows 10 Home
  • VSCode: version 1.44
  • PlatformIO: Core 4.3.2a1
  • マイコン: Mbed F303K8

やり方

大まかに2つの手順があるので,分けて書いていこうと思います.

プログラムを作ってマイコンに書き込む

まずはPlatformIOでProjectを作成します.
すると雛形ができるので,ここにプログラムを書いていきます.
今回使ったのはMbedというマイコンなので,cppで書きます.
ソースコードは以下のものを使いました.

MyoWareTest.cpp
#include "mbed.h"

// 浮動小数点型の標準入出力を行うための記述
asm(".global _printf_float");

// シリアル通信のための記述
Serial pc(SERIAL_TX, SERIAL_RX); // tx, rx

// MyoWareの値を受け取るピンの定義
AnalogIn sig(A1);

int main() {

    // 筋電センサの値を受け取る変数
    float sig_val;
    while(1) {

        // 筋電センサの値を更新する
        sig_val = sig;

        pc.printf("Sig Value: %f\n\r", sig_val);
        wait_ms(10);
    }

}

これをVSCode上でビルドし,マイコンに書き込みます.

配線して電極を張り付ける

マイコンなどに関しては以下の資料でも読んでみてください.

今回組んだ配線を以下に示します.

今回使ったマイコンはF303K8なので,AnalogInで得ることのできる値の幅は0V~3.3Vになります.
そのため,₊の配線は3.3Vに接続します.
更に,以下のようなケーブルを...

画像のように接続します.

電極はこのように貼り付けます.

貼る位置に関しては,以下のリンクに書いてあるので適当に決めてください.

以上で手順は終了になります.

結果

以下のリンクは,僕がツイッターに投稿した手の動きとコンソール出力の動画です.
画面に収まってませんが,手をニギニギしてます.

以下の画像は,実行した際のターミナル出力の結果です.
左の図はグッと把持動作を行った際の結果を表しており,右は弛緩した際の結果を表しています.

左は0.92くらい,右は0.17くらいでセンシングできました.
電極を貼る位置によっては,出力される数値がおかしくなったりしやすいので,調整しながら貼りましょう.

これをなにかと組み合わせればいろいろ遊べそうですね.
何かあったらコメントをください.

詰まった時に書いた記事

どこかしらで詰まったら以下を参照してみてください.

参考にしたサイトと文献

以下を参考にして記事を書きました.