Sousu's ARENA

[ DIYに戻る ]
筋電計で筋トレを数値化しよう!
2022.05.29
新規作成
Abstract(概要)

Bluetooth接続のポータブル筋電計を作ってみました

測定風景
Introduction(まえがき・序論)

2022年現在、COVID-19(いわゆる新型コロナウイルス)の大流行で、 在宅勤務が多くなったせいか、「宅トレ」(自宅筋トレ)が大ブーム(?)。その宅トレの情報源といえば、youtubeなどの筋トレ動画ではないでしょうか。

最近のyoutubeなどを見ると、論文の引用があったり、科学的根拠をウリしている動画が人気だったりします。 たとえば、「腕立て伏せはワイドではなく肩幅ぐらいがよい」「安全に三角筋中部に効かせる角度はこれ」などです。

実際その通りにやってみるのですが、感覚的なものではどうにも分かりにくいのが筋トレです。 本当にその情報正しいの?自分で数値確かめてみたくなりませんか?

そこで登場するのが筋電計、いわゆるEMG(electromyography)です。

今回は、Bluetooth接続でリアルタイム表示&記録出来るポータブル筋電計を作ってみました。



Materials and Methods(材料および方法)
fig.1:ブロック図(クリックで拡大)
ブロック図


  1. 筋電電極:皮膚に取り付ける電極です。筋電パルスを取り込みます
  2. 信号増幅機:筋電電極からの微小パルスを増幅・検波して、DC波形に変換します
  3. 送信機:AD変換器で信号増幅器からの波形(最大4系統)を取り込み、Bluetoothで送信します
  4. 受信機:Bluetoothで信号受信し、グラフに表示したり、CSVに保存したりします。

信号増幅器の回路を紹介します。

fig.2:信号増幅器・回路図(クリックで全体表示)
回路図

  1. U1A:筋電電極のDCオフセット電圧をフィードバック制御する回路
  2. U2:計装アンプ。筋電電極からのパルスを差動増幅する
  3. U1B:75倍AC増幅回路
  4. U3A:DC成分除去回路
  5. U3B,U4A:全波整流および包絡線検波回路
  6. U4B:DC増幅回路
  7. U5:チャージポンプ(負電源回路)

回路設計の詳細は後述します。


結線はこんな感じです
fig.3:結線(クリックで拡大)
結線図1


筋電電極は衣類用のボタンで接続しており、脱着可能です。

信号増幅機と送信機はステレオミニプラグで接続しており、電源、信号、GNDの3線です。

送信機と受信機は基本Bluetooth接続ですが、USBポートを使用した直接接続も可能です。


装着するとこんな感じ。パーツが脱落しないよう、バンドやサポーターで固定しています。

fig.4 :センサーの装着
装着


使用したパーツ:

回路は、筋電電極以外はすべて秋月電子通商で揃えました。筐体は3Dプリンタで自作しています。

Materials(測定方法)
測定プログラムはこちらです
送信器側プログラム(GitHub)
受信器側プログラム ごめんなさいまだ整理中です(ダミーリンク)

送信部は電源ONで動作開始し、筋電センサーの信号を取り込み、Bluetoothで信号をEMGの信号を送信し続けます。

受信部はCOMM接続で待ち受け、筋電計の値(AD値)の数値表示、筋電図(グラフ)表示、CSV保存が出来ます。

受信部はPCのBluetooth接続および専用ソフトを使用するのがメインですが、 M5Stackを受信部とすることで、PCなしに筋電図表示をすることもできます。

Results(結果)

UIおよび筋電図の表示例です

fig.5 :腕立て伏せと、その筋電図
腕立て伏せ

腕立て伏せの動作に応じて、上腕三頭筋と大胸筋が反応します。その他の筋肉もある程度反応するのが面白いですね。

fig.6 :バーベルスクワットと、その筋電図
スクワット

スクワットの動作に応じて、大腿四頭筋とハムストリングス/大殿筋が反応するはずなんですが、大腿四頭筋ばかり反応しています。

もうすこしハムストリングスに聞いてほしいのですが……。姿勢がよくないのかな?

fig.7 :M5Stickによる筋電図表示
測定風景

M5Stick C Plusにはバーグラフ表示が出来ます。バーグラフは、増幅回路のゲイン調整に便利です。表示ライブラリはM5GFXを使用しています。

M5Stackには筋電図が表示できます。表示ライブラリはM5GFXを使用ており、「M5Stackでスクロールグラフ M5GFX版」を筋電センサー値に置き換えて使用させていただいています。

「M5Stackでスクロールグラフ M5GFX版」(参考リンク)
M5Stackでスクロールグラフ(GitHub)(参考リンク)

Discussion(考察)
苦労したところなどのメモ書きです

1.センサー電極
センサー

AmazonでEMS用電極のコピー品を入手して使用しました。 端子が汎用的なボタンだったので、ボタンにワイヤーを取り付けて着脱可能にしています。

センサー部とのワイヤー長はノイズを考慮して約200[mm]と短めにしています。 500[mm]でも問題なく波形が出ていましたので、邪魔でなければもう少し長くしてもよいかもしれません。

EMSの電極としては、3端子で一つにまとまっているものでした。 しかし、分離したほうが感度が高いことが分かったため、ハサミで切断して使用しています。 電極内のゲルが導電性なので、繋がっていると電位差が測定しにくいためと考えられます。


2.信号増幅器
信号増幅器

秋月で一番人気の計装アンプとして、LT1167を使用しました。360

計装アンプのデータシートに書いてある以下の回路を参考にしました。しかし、これがなかなかの曲者でした。

LT1167データシート神経インパルス・アンプ解説抜粋

LT1167で差動増幅し、同相信号のGND形成にLT1112を使用している回路(図の左下)および、HPFと101倍AC増幅+LPFという構成です。

前者の同相GND形成は非常に良好に動作します。 筋電信号の測定にはどうしても同相GNDの問題がついて回り、適当に体にGNDを接続しておいてもうまく動作しません。 いろいろ試した結果、データシートにあるこの回路を利用しました。 計装アンプの同相入力電圧をそのままフィードバックする回路なので、心電計などには向かないかもしれません。

また、同相入力電流経路の問題も、他の回路を試した時には発生したのですが、 上記データシートの同相GND生成回路では異常は出ませんでした。フィードバック回路のほうに電流が流れるからですかね?

そして、後者のLT1112を使用する101倍アンプが曲者でした。

実際に回路を構成するときには、高価なLT1112(秋月価格540円)の代わりに4580DD(同、30円)を使用したのですが、 上記データシートのままLT11120->4580DDと置き換えると、まったく動作しません。

どうなってしまうかというと、4580DDの出力に数VのDC電圧が出てしまい、後段に繋げることができないです。 これは、入力オフセット電圧というOPアンプ特性のせいで、 入力オフセットが大きく、アンプ倍率が高ければ、出力に大きなDCオフセットが出てしまうという問題です。

データシート回路は101倍もしているので、 LT1112のような超低オフセットのOPアンプでしか動作しないような回路になっているんですね。 そのまま回路流用したかったら、同社のLT1112を買えと。商売がお上手なことで。

実際お金で解決してもいいのですが、くやしいので、75倍の反転増幅に変更し、 後段にDCオフセットを除去する回路を追加することで対処しました。 倍率は少し下がりましたが、後段のDC増幅で補えるので、問題ないでしょう。

次に流用して失敗したのが、下記の回路図の検波回路の部分です。

EMG Circuit Schematic DIY Muscle Sensor / EMG Circuit for a Microcontroller(参考リンク)

図のIC3AおよびIC3Bの部分がそれで、1N4148とOPアンプで構成されている全波整流のようなのですが、 このOPアンプの部分を4580DDに置き換えると、どうしても発振します。

いろいろいじってみたのですが、さっぱりわからないので、一般的な全波整流回路に変更しました。 ついでに、全波整流の最後のミキサー部にLPFを仕込んで、1石で包絡線検波を実現しています。 ごく一般的な回路のようです。

最後は、負電源回路です。TJ7660というチャージポンプICを使用しています

大容量コンデンサが必要な回路で、データシートの回路は1[uF]を使用していますが、 リップル除去および電圧確保には、より大容量が必要のようです。 このため100uFに変更して使用しています。


3.送信器
送信器内部

AD回路とカラーLCDとBluetoothを内臓している小型モジュールということで、 M5Stick C Plusを使用しました。

AD回路はそのまま値を読み取るとリニアリティーが微妙らしいのですが、 とりあえず完成させるためそのまま読み取っています。そのうち補正したいです。

カラーLCDはM5GFXを使用してバーグラフ表示しています。 ちらつかずにバーグラフ表示できるのがいいですね。

画面OFF機能もつけたので、内臓電池で30分以上もちます。外部電池接続もありです。

通信にはBluetoothはSPPを使用しています。 SPPが簡単すぎて、何も考えずにシリアルデータ通信のコードを流用できるのがいいですね。 注意点としては、あまりにも高頻度でSPPに送信すると、データが途切れたりフリーズしたりするみたいです。 現状は50ms間隔にしています。もう少し高速にできるようですが、AD返還前にLPFを強烈にかけていますので、この程度で十分です。

増幅器と送信器の間はステレオミニプラグのオーディオケーブルで接続しています。 同軸構造になっているので、ノイズには強いはずです。 しかし、ステレオミニプラグを着脱するとM5Stick C Plusがフリーズするという問題があります。 着脱時に端子間ショートしているのでしょうか?? 対策がわからなかったので、接続してから電源投入(運用で回避)しています。


4.受信器(PC)
腕立て伏せ

BluetoothのSPPを利用し、リアルタイム筋電図および筋電信号の瞬時値を表示します。データ取得後、CSVに出力して解析することもできます。

特に苦戦したところもないのですが、これもひとえにScottPlotのおかげでして、 フォームを用意して、データを流し込むという、ごく単純なコードでリアルタイム筋電図が表示できました。

心残りがあるとすれば、筋電図の縦軸を見やすくすることでしょうか。 筋電図は、測定する部位によって出力電位が異なるため必ずしも100%フルにAD値を使うとは限りません。 このため、縦軸の最大値を100%固定にしてしまうと、大殿筋など反応しにくい部位で表示が見にくくなってしまいます。

ScottPlotはデータのMAXにあわせて縦軸を自動変更してくれる機能もあるのですが、 これですと、こんどはMAXがリアルタイムに変わってしまい、 トレーニングの姿勢変更した場合などに、時系列比較をするのが面倒です。

結局、測定開始からMAX値を保持し続けるという仕組みに落ち着きましたが、 もっと選択肢があったかもしれません。

各種論文など見ると、各センサーを取り付けている筋肉の、 最大緊張状態をMAXとして表示したりすることもあるみたいですね。なるほどです。

5.受信器(M5Stack)
受信器(M5Stack)

PCのかわりに筋電図を表示することできます。前述のとおり、リアルタイムにスクロールするグラフが特徴です。

実際使用してみて思ったですが、 センサーの確認には送信機側のバーグラフで十分ですし、 スクロールグラフより分解グラフのほうが見やすいのですが、M5Stackでは画面が小さすぎて微妙です。 筋電図がカラフルにスクロール表示されるため、恰好はいいのですけれどもね。

M5StackはSDカードを使用できるので、ポータブルでデータを記録するにはいいかもしれません。


6.筐体
筐体

各筐体は3Dプリンタで作成しました。 使用したユニバーサル基板が「秋月のC基板」でして、同基板がピッタリ収まるサイズに設計しています。 3Dプリンタは穴位置までぴったりしたケースが作成できるので、完成度が高く見える気がします。 いい時代になったものです。

7.次に向けて

筋電計がなんとか実現できましたので、次は心電計にステップアップかな? そのうち脳波計なんてものにも挑戦してみたいです。<終>


[ DIYに戻る ]
inserted by FC2 system