DIY REHAB ENGINEERING GUIDE
Arduino×Python×AIで作るリハビリセンサーデバイス完全ガイド
―設計・実装・データ解析からAI活用の境界線、今後の展望まで―
圧センサー・フレックスセンサー・IMU・筋電(EMG)センサーを使った低コストなリハビリ支援デバイスを、Arduinoによる回路実装からPythonによるリアルタイム可視化まで一気通貫で解説。さらに、どこまでをAIに任せ、どこからを人間(療法士・エンジニア)が担うべきか、そしてTinyML・エッジAIが切り拓く今後の展望までを網羅した決定版記事です。
この記事の目次
近年、ArduinoやPythonを用いた低コストなセンサーデバイスが、リハビリテーション分野に静かな革新をもたらしています。圧力・フレックス・IMU(慣性計測ユニット)・筋電(EMG)といった各種センサーを組み合わせ、患者の運動状態をリアルタイムに定量評価するシステムは、上肢訓練・下肢訓練・歩行訓練・姿勢訓練のすべてで有用です。
従来、こうした定量評価は数百万円規模の商用モーションキャプチャや専用医療機器に頼らざるを得ませんでした。しかし、1個数百円のセンサーとArduino、そして無料で使えるPythonのライブラリ群を組み合わせることで、在宅リハビリの現場や地域のクリニックでも「見える化」されたフィードバック訓練が実現できます。
本記事では、実際のハードウェア設計、具体的なArduinoおよびPythonのコード例、データの解析手法、臨床評価の考え方に加えて、近年急速に実用化が進む生成AI・エッジAIをこの分野でどう活用すべきか、そしてAIに任せてよい作業と、人間(開発者・療法士)が必ず自分の手で行うべき作業の境界線を、実務的な視点から徹底的に掘り下げます。
上肢リハビリ機能訓練への応用
センサーの活用とデバイス設計
上肢リハビリでは、フレックスセンサーを指や肘に貼付し、曲げ角度を計測します。加えて、IMUにより腕全体の動作を、筋電(EMG)センサーで筋活動を取得することで、運動の質を多角的に定量化できます。たとえば手指の屈曲を検出するグローブ型デバイスでは、複数のフレックスセンサーを縫い込み、各指の角度をリアルタイムにArduinoで取得します。
センサー選定の際は、Arduino公式のハードウェアドキュメントでアナログ入力のリファレンス電圧や分解能(多くのUNO系ボードは10bit=0〜1023)を確認しておくと、後工程のキャリブレーションで手戻りが減ります。
Arduinoコード例
// 上肢リハビリデバイス: フレックス&EMGセンサー読み取り例
const int FLEX_PIN = A0; // 肘の曲げ角度測定用
const int EMG_PIN = A1; // 筋活動測定用
void setup() {
Serial.begin(115200);
}
void loop() {
int flexVal = analogRead(FLEX_PIN);
int emgVal = analogRead(EMG_PIN);
Serial.print(flexVal);
Serial.print(",");
Serial.println(emgVal);
delay(10); // 約100Hzサンプリング
}
Pythonによるデータ解析
Arduinoからシリアルで送られるデータは、pySerialで受信し、MatplotlibによるリアルタイムプロットやCSV保存が可能です。これにより、運動パターンの改善傾向や瞬間的なピーク値を解析でき、セラピストと患者がデータに基づく客観的なフィードバックを共有できます。
解析用のPythonスクリプトの雛形生成、移動平均やピーク検出などの信号処理アルゴリズムの提案は、生成AI(Claudeなど)が得意とする領域です。「フレックスセンサーの値からピーク角度と保持時間を抽出するコードが欲しい」といった自然言語の指示から、実装のたたき台を数秒で得られます。
圧センサーを用いた視覚的・聴覚的フィードバック訓練
圧センサーの信号の変化は、アイデア次第で様々なフィードバック方法に置き換えることが可能です。例えば、ペットボトルに圧センサーを貼付して握ると画面上のグラフがリアルタイムに変化する、靴に圧センサーを貼付して荷重がかかると音が鳴る、といった練習に応用できます。

Arduinoコード例
// センサーが接続されるアナログ入力ピンを定義
const int sensorPin = A0;
void setup() {
// シリアル通信を9600bpsで開始
Serial.begin(9600);
}
void loop() {
// センサーからの値(0〜1023)を読み取る
int sensorValue = analogRead(sensorPin);
// 読み取った値をシリアルモニターに送信(改行付き)
Serial.println(sensorValue);
// 100ミリ秒待つ(サンプリング間隔)
delay(100);
}

Arduinoコードの解説表
| コード部分 | 説明 |
|---|---|
const int sensorPin = A0; |
圧センサーが接続されるArduinoのアナログ入力ピンを定義しています。 |
Serial.begin(9600); |
シリアル通信の初期化を行い、通信速度を9600bpsに設定しています。 |
analogRead(sensorPin); |
指定したアナログピン(A0)からセンサーの値(0〜1023の範囲)を取得します。 |
Serial.println(sensorValue); |
読み取った数値をシリアル通信でPCに送信します。改行が付くのでPC側で1行ごとの値として受信できます。 |
delay(100); |
次の読み取りまで100ミリ秒待機します。これにより更新間隔を調整しています。 |
実際に患者へ使用した視覚的フィードバックのPythonコード
import serial
import numpy as np
import matplotlib.pyplot as plt
import pygame
from pygame.locals import *
import sys
# シリアルポートの設定
SerPort = serial.Serial(
port="COM3",
baudrate=9600
)
# matplotlibの図を作成
fig = plt.figure(figsize=(10.0, 6.0), dpi=100,
facecolor='cornflowerblue', linewidth=10, edgecolor='cornflowerblue')
mng = plt.get_current_fig_manager()
mng.window.state('zoomed')
mng.resize(2000, 900)
ax1 = fig.add_subplot(1, 1, 1)
plt.tight_layout()
plt.rcParams["figure.constrained_layout.use"] = True
def handle_close(evt):
evt.canvas.figure.axes[0].has_been_closed = True
fig.close_flg = True
fig.close_flg = False
fig.canvas.mpl_connect("close_event", handle_close)
while True:
plt.cla()
plt.xlim(0, 100)
plt.ylim(0, 1000)
plt.title('Grasp')
plt.grid()
data = SerPort.read_until(size=100).decode("ascii")
if float(data) > 800:
ax1.bar('Power', float(data), width=200, color="red")
else:
ax1.bar('Power', float(data), width=200, color="blue")
plt.pause(0.01)
if fig.close_flg:
break
SerPort.close()
port="COM3" はWindows環境の例です。macOS/Linuxでは /dev/tty.usbmodemXXXX のような表記になります。接続前に Arduino IDEのポート一覧で実際のポート名を確認してください。Pythonコードの詳細解説
このコードは、シリアルポートから受信したデータをもとに、Matplotlibを使用してリアルタイムで棒グラフを描画するプログラムです。以下に各部分の役割を説明します。
1. ライブラリのインポート
serial:シリアル通信を行うためのライブラリです。センサーデータの取得に使用します。numpy:数値計算ライブラリですが、今回は補助的に使用するためにインポートされています。matplotlib.pyplot:グラフ描画ライブラリ。リアルタイムでデータを視覚化するために使用します。pygame・pygame.locals:ゲーム開発向けのライブラリですが、今回はウィンドウ管理などの用途でインポートされています。sys:システム関連の操作を行うための標準ライブラリです。
2. シリアルポートの設定
SerPort = serial.Serial(port="COM3", baudrate=9600) により、COM3ポートを9600bpsでオープンし、センサーデータの受信準備を行います。
3. Matplotlibによるグラフの初期設定
plt.figure()でグラフウィンドウを作成。サイズ、解像度(dpi)、背景色、枠線の太さと色を指定しています。plt.get_current_fig_manager()でウィンドウ管理オブジェクトを取得し、ウィンドウを最大化(zoomed)およびリサイズしています。ax1 = fig.add_subplot(1, 1, 1)で、1×1のグリッドの中に1つのグラフ領域を作成。plt.tight_layout()およびplt.rcParams["figure.constrained_layout.use"] = Trueにより、ウィンドウ内のレイアウトを自動調整しています。
4. ウィンドウのクローズイベント処理
handle_close関数は、グラフウィンドウが閉じられた際に呼ばれ、フラグfig.close_flgをTrueに設定することで、メインループの終了を制御します。fig.canvas.mpl_connect("close_event", handle_close)でこの関数をウィンドウのクローズイベントに接続しています。
5. メインループによるデータ取得と描画
- ループ内で
plt.cla()により前回の描画内容をクリアし、軸の範囲(plt.xlim()、plt.ylim())やグリッド、タイトルを設定しています。 SerPort.read_until(size=100)でシリアルポートからデータを受信し、decode("ascii")で文字列に変換。受信した値が800を超える場合は赤、そうでない場合は青の棒グラフで表示しています。plt.pause(0.01)により、描画更新のための短い待機時間を設定しています。- ウィンドウが閉じられた場合、フラグによりループを抜け、シリアルポートを閉じる処理が行われます。
歩行訓練への応用
ウェアラブル歩行解析システム
歩行リハビリでは、インソール型足圧センサー(FSR)とIMUを組み合わせ、歩行周期や左右対称性、接地タイミングを解析します。FSRで足底の接地(ヒールストライク)を検出し、IMUで歩幅や重心の動きを解析することで、歩行リズムの改善や対称性の向上を促します。
Arduinoによる接地検出コード例
// 歩行訓練: 足底FSRによる接地検出例
const int FSR_PIN = A0;
const int THRESHOLD = 50;
bool footOnGround = false;
void setup() {
Serial.begin(115200);
}
void loop() {
int fsrValue = analogRead(FSR_PIN);
if (fsrValue > THRESHOLD && !footOnGround) {
footOnGround = true;
Serial.println("HEEL_STRIKE");
}
if (fsrValue < THRESHOLD) {
footOnGround = false;
}
}
この仕組みを用い、歩行中のステップタイミングに合わせたリズム刺激(音やバイブレーション)を出すことで、患者の歩行パターンを補正するシステムが考案されています。近年はウェアラブルセンサーによる歩行解析のシステマティックレビューでも、IMUとFSRを組み合わせたマルチモーダル計測の有効性が繰り返し報告されています。
姿勢訓練への応用
姿勢検知とフィードバック
良好な姿勢は、身体全体の健康に直結します。フレックスセンサーやIMUを用いて背骨の曲率や前傾角度を計測し、姿勢が悪くなった場合にバイブレーションモーターやLEDでフィードバックを行うことで、患者に自動的に姿勢改善を促すデバイスが実現できます。
Arduinoによる姿勢アラートコード例
// 姿勢矯正デバイス: フレックスセンサーと振動モーター
const int FLEX_PIN = A0;
const int VIB_PIN = 9;
const int BEND_THRESHOLD = 300;
void setup() {
pinMode(VIB_PIN, OUTPUT);
}
void loop() {
int sensor = analogRead(FLEX_PIN);
if (sensor > BEND_THRESHOLD) {
digitalWrite(VIB_PIN, HIGH); // 姿勢が悪いと振動アラート
} else {
digitalWrite(VIB_PIN, LOW);
}
delay(100);
}
複数のIMUを背中に配置して各椎間の角度をリアルタイムに解析し、より精密な姿勢評価と個別のフィードバックが可能になる手法も検討されています。これにより、猫背や側弯症の改善プログラムに直結するデータが取得でき、臨床評価の精度向上に寄与します。
AIが手伝える部分/人間が自ら行うべき部分
ここまで紹介したデバイスは、ChatGPTやClaudeのような生成AI、あるいはGitHub Copilotのようなコーディング支援AIをうまく取り入れることで、開発スピードを大きく高めることができます。しかし「AIに全部任せれば良い」わけでは決してありません。特に医療・リハビリという人の身体に関わる領域では、AIの提案をそのまま実装に持ち込むことのリスクを正しく理解しておく必要があります。以下に、実務での役割分担を整理します。
- コードの雛形生成・デバッグ支援:Arduino/Pythonの基本構造やエラーメッセージの解読、リファクタリング提案。
- データ解析・可視化スクリプトの生成:Pandas/Matplotlib/NumPyを使った移動平均・ピーク検出・FFTなどの信号処理コード。
- センサー選定のリサーチ補助:データシートの要点整理、類似センサーとの比較表作成。
- 機械学習モデル設計の下支え:特徴量エンジニアリングのアイデア出し、TinyML用の量子化・軽量化コードの雛形生成。
- ドキュメント・説明資料の下書き:README、操作マニュアル、患者向け説明資料のたたき台作成。
- 先行研究の要約:論文や技術記事の要点整理、関連研究のキーワード検索補助(最終的な引用は必ず原文で確認)。
- ハードウェアの実装・配線・はんだ付け:物理的な組み立てやトラブルシューティングはAIには代行できません。
- センサーの校正(キャリブレーション):個人差・設置環境差に応じた閾値やゲインの実機調整。
- 臨床判断と安全性の確保:患者への適用可否、禁忌事項の確認、インフォームドコンセントの取得。
- 臨床評価・エビデンス構築:RCTや症例研究のデザイン、統計的有意性の解釈、倫理審査対応。
- 患者との対話・共感的コミュニケーション:訓練への動機づけや不安への配慮はAIでは代替できません。
- 実環境でのデバッグ:ノイズ混入、断線、電源不足など、現物確認が必要な障害対応。
- 法規制・医療機器認証への対応:薬機法や個人情報保護法など、最終的な適法性の判断と責任の所在。
| 工程 | AIの活用度 | 理由 |
|---|---|---|
| 回路設計の初期アイデア出し | 高い | センサー特性の一般知識やピン配置の定石を素早く提示できる |
| Arduino/Pythonコードの実装 | 高い | 定型的な処理は雛形生成の恩恵が大きく、開発時間を大幅短縮 |
| 実機での配線・はんだ付け | ほぼ不可 | 物理作業であり、AIには実行できない |
| センサーの閾値調整 | 低い(補助のみ) | 個人差・環境差があり、現場での試行錯誤が不可欠 |
| データ解析・グラフ化 | 高い | 統計処理や可視化コードの生成はAIの得意分野 |
| 臨床適用の可否判断 | 不可 | 医療倫理・法的責任が伴うため人間の専門的判断が必須 |
| 患者への説明・動機づけ | 不可 | 信頼関係の構築は対人コミュニケーションが前提 |
臨床試験と効果検証の方法論
各種デバイスの有効性を検証するには、以下の評価方法が有効です。
- 定量評価:上肢ならFugl-Meyer Assessment、下肢・歩行なら10m歩行テスト、姿勢なら姿勢評価スケールとの相関を解析。
- 再現性の検証:同一条件下での測定の安定性、異なるセラピスト間での一貫性の評価。
- 比較試験:センサー装置を用いた群と従来のリハビリ群とのRCT(無作為化比較試験)やシングルケースデザインによる効果比較。
また、各センサーの出力(角度、荷重、筋電位など)を商用計測機器と比較し、RMSEや相関係数を算出することで信頼性を検証します。査読付き論文としては、転倒検知ウェアラブルセンサーに関するレビュー論文のように、10年単位の研究動向を俯瞰したレビューを参照すると、評価指標の設計に役立ちます。
今後の展望:TinyML・エッジAI・遠隔リハビリの時代へ
Arduino×Pythonによる自作センサーリハビリの世界は、ここ数年で急速に「AIとの融合」フェーズへ進んでいます。以下、実際の研究事例を交えながら今後の発展方向を整理します。
1. TinyML・エッジAIによるオンデバイス推論
従来はセンサーの生データをPCへ送ってから解析していましたが、TinyML(マイコン上で動く軽量な機械学習)を使えば、Arduino Nano 33 BLE Senseのような小型ボード上でリアルタイムに運動パターンを分類できます。クラウド通信が不要になるためプライバシー保護と低遅延を両立でき、実際に脳卒中患者の上肢リハビリモニタリングにTinyMLベースの分類器を適用した研究も報告されています(Scientific Reports, 2025)。
2. 機械学習による歩行位相検出・異常検知の高度化
IMUやFSRの生波形から、機械学習モデルがヒールストライク・トゥオフといった歩行位相を自動判定する研究が進んでいます。近年の下肢ウェアラブルセンサーを用いた歩行位相検出研究(MDPI Applied Sciences, 2026)では、複数モデルを比較しながら精度とロバスト性の両立が検討されており、自作デバイスでも同様のアプローチを段階的に取り入れられます。
3. デジタルツイン・遠隔リハビリテーション(テレリハ)
センサーデータをクラウドに蓄積し、患者の運動状態を「デジタルツイン」として可視化・シミュレーションする取り組みも広がっています。ウェアラブルセンサーとネットワーク通信を組み合わせることで、遠隔地のセラピストがリアルタイムに患者の運動データを確認し、オンラインで指導する遠隔リハビリの実現可能性が高まっています。
4. 生成AIによる個別最適化トレーニングプログラム
蓄積されたセンサーデータを生成AIに読み込ませ、患者ごとの進捗に応じた訓練メニューの叩き台を自動生成する使い方も現実的になってきました。ただし、生成された訓練内容を実際に患者へ適用する前には、必ず理学療法士・作業療法士による臨床的な妥当性確認が必要です(詳細は前章「AIが手伝える部分/人間が自ら行うべき部分」を参照)。
5. マルチモーダルセンサーフュージョン
IMU・EMG・圧力・場合によっては視覚情報(カメラ)までを統合し、より頑健な運動評価を行う「センサーフュージョン」も今後の重要なテーマです。単一センサーではノイズや装着位置のズレに弱くても、複数モダリティを組み合わせることで評価の信頼性を高められます。
6. データガバナンスと倫理の重要性
センサーデータやAIモデルの活用が進むほど、患者データの取り扱い(個人情報保護)、AIの判断根拠の説明可能性、医療機器としての規制対応がより重要になります。技術の発展と並行して、こうしたガバナンス面の整備が今後の普及の鍵を握ります。
おわりに
本記事では、ArduinoとPythonを中心に、各種センサーを用いたリハビリテーションシステムの設計・実装・応用事例、臨床試験における評価方法、そしてAI活用の境界線と今後の展望までを包括的に解説しました。これらの低コストデバイスは、従来は高価な医療機器に頼っていたリハビリ計測を、家庭や地域で簡便に行えるように変革しつつあります。
技術者、医療従事者、研究者が連携し、こうしたオープンソース技術とAIをバランスよく組み合わせて発展させることで、個別最適化されたリハビリ支援システムの実現と、超高齢社会における医療課題の解決につながることを期待します。
参考文献
| # | 文献情報 |
|---|---|
| 1 | R. Ambar et al., "Arm rehabilitation assistive device," Journal of Engineering Technology, 2011. |
| 2 | H. Mad Kaidi et al., "Rehabilitation monitoring prototype: Arduino Nano 33 BLE," J. Phys.: Conf. Ser. 2250, 012009, 2022. |
| 3 | Sudhanshu Tripathi et al., "Arm Rehabilitation Assistive Device," IJSRST, vol.8, issue 1, pp.490-494, 2021. |
| 4 | Juliette van der Pas, "A DIY Smart Insole to Check Your Pressure Distribution," Hackster.io, 2018. |
| 5 | J. Burke, "Posture Awareness Sensor," Instructables.com, 2017. |
| 6 | "Empowering stroke recovery with upper limb rehabilitation monitoring using TinyML based heterogeneous classifiers," Scientific Reports, 2025. |
| 7 | "Clinical applications of wearable sensor-based gait analysis in athletes: a systematic review," BMC Sports Science, Medicine and Rehabilitation, 2026. |
| 8 | "Machine Learning Models for Reliable Gait Phase Detection Using Lower-Limb Wearable Sensor Data," MDPI Applied Sciences, 2026. |
| 9 | "A Decade of Progress in Wearable Sensors for Fall Detection (2015–2024)," PMC. |
コメント