頭の動きでカーソルを移動できるオープンソースのメガネ型マウスです。オプションで外部スイッチを接続して左右のマウスボタン操作を行えます。また、通常のマウス/トラックパッドなど、使いやすいものを組み合わせることもできます。
- 開発:小林茂(+Claude Code、Gemini)
- 開発協力:新井英夫
私が向き合っているのは進行性の難病で全身の筋肉がだんだんと動かなくなるALS(筋萎縮性側索硬化症)だ。「障害」が時間経過とともにどんどん変化していくので、「ちょうどいい」サポートの方法も常に変化していく。昨年冬にキーボードを今年の春から手でマウスを動かす操作が難しくなり、頭から上の首の動きは残存している私はパソコンやタブレットを操作する「ちょうどいい」方法を探していた。ALSがかなり進行してもっと動かなくなると目の動きだけでパソコンを操作する視線入力装置が主流となるが私にはまだ早い。今できる頭の動きを感知してマウス全般の機能を代替する既製品は存在していたので使ってみたが、多機能すぎて誤作動が多くフィットしなかった。さて困った!今の時代、デジタルデバイスでの情報受信と発信ができなくては社会から孤立してしまう。小林さんに相談したところ「機能をシンプルにポインターを動かすことに限定して、メガネ型の装置を作ってみましょう。クリックは少しだけ動く指で操作すればいい。マウスの操作すべてを盛り込むのではなく絞り込んで、後は新井さんがまだ使える身体能力に委ねる…そういうのどうでしょうか?」とご提案いただいた。「まさにそれそれ!そういうのを望んでいたんです!(笑)」と私。機能を足し算していくばかりではなく、引き算して「ちょうどいい」を創ってくれたのだ。
私が直面していた問題と同じ悩みを抱える方たちにとってこの「小林メガネ」が「ちょうどいい」恩恵となることを、開発協力者として切に願っています。ちなみにこの文章も「小林メガネ」でポインターを手とほぼ同じように自在に操り、音声入力と画面上の仮想キーボードも合わせて使ってストレスなく入力しています。体感スピードとしては手が動かなくなる前とあまり変わらない感じです。(2025年10月27日 記す)
新井英夫 体奏家 ダンスアーティスト
- 頭の動きを精密なカーソル移動に変換
- 外部スイッチ対応:左右のマウスボタン用スイッチ接続可能(GPIO 1と2)、ウェブインターフェイスで入力モード(INPUT_PULLUPまたはINPUT)を設定可能
- 本体ボタンで感度切り替え:ダブルクリックで低/中/高の3段階を切り替え
- 2つの接続モード:USB HID(デバイス名:
AtomS3R)とBluetooth HID(デバイス名:MeganeMouse-BT)の実行時切り替え - 5つの取り付け方向に対応(左側面・ポート下向き/後ろ向き、右側面・ポート下向き/後ろ向き、後頭部・ポート下向き)
- WiFi経由のウェブインターフェイスによる簡単なセットアップと詳細なパラメーター調整
- 感度、応答カーブ、移動バランスのカスタマイズ
- 取り付け角度補正(3D回転補正)
- LCDに接続モード、感度レベル、ボタン状態を表示
- M5Stack AtomS3R:開発ボード
- USB-Cケーブル:電源とデータ接続用
- メガネ:テンプル(つる)が平らで幅が広いもの(両面テープの安定した接着面を確保するため)
- 両面テープ:3MのKRG-15など、超強力かつ後から剥がせるもの
- M5Stack Tail Bat:Atomシリーズ用バッテリー(バッテリー駆動時)
- 外部スイッチ:左右のマウスボタン操作用
- 左ボタン:GPIO 1 — 押している間だけ回路が閉じるスイッチをGPIO 1とGNDの間に接続(デフォルトのINPUT_PULLUPモード)、またはアクティブHIGHセンサーを接続(INPUTモード)
- 右ボタン:GPIO 2 — 押している間だけ回路が閉じるスイッチをGPIO 2とGNDの間に接続(INPUT_PULLUPモードのみ。INPUTモードでは無効)
- デバイス(AtomS3R)をメガネに両面テープで取り付ける
- デバイスをUSB-CケーブルでPCに接続する
- Arduino IDEをインストールする
- Arduino IDEで
MeganeMouse.inoを開く - ボードをインストールする:
M5Stack - 必要なライブラリをインストールする:
M5AtomS3(ライブラリの依存関係も含めて)NimBLE-Arduino(Bluetoothサポート用)
- ボードを選択する:
M5AtomS3R - コードをアップロードする
- M5Stack Communityのアカウントを作成する
- M5Burnerをインストールする
- 画面上部の:bust_in_silhouette:ボタンをクリックし、登録したメールアドレスとパスワードでログインする
- ウィンドウ左側のタブで
ATOMS3を選択する - ウィンドウ上端の検索窓に
MeganeMouseと入力し、本プロジェクトのファームウェアを選択する Downloadボタンを押してファームウェアをダウンロードするBurnボタンをクリックして表示される画面で適切なCOMポートを選択し、Startボタンをクリックしてファームウェアを書き込む
- デバイスの電源を入れる。LCDが青色(電源ON)に点灯し、続いて黄色(校正プロセス開始)に変わります(下記参照)
- 校正プロセス:
- 黄色の画面:動作検出(3秒間デバイスが静止するまで待機します)
- 赤色の画面:校正中(進捗を表示します)
- 緑色の画面:校正成功 または オレンジ色の画面:校正失敗(代替として直近に保存された校正値を使用します)
- デバイスは自動的に校正値を保存します
- 本体ボタン(デバイスの液晶画面)を長押し(2秒以上)してWiFiを有効化する(省電力のため初期状態では無効化しています)
- WiFiネットワークに接続する:ネットワーク名は
MeganeMouse-WiFi、パスワードはMeganeMouse - ブラウザで
192.168.4.1にアクセスする - 表示されるウェブページで、接続方法(USB/Bluetooth)、デバイス方向、その他を必要に応じて設定する
- ウェブページの
Apply Settings | 設定を反映ボタンをクリックして設定を反映する - 本体ボタンを長押ししてWiFiを無効化する(接続方法の変更時には自動でデバイスが再起動します)
メインのウェブページから呼び出し可能な機能:
View Current Status | 状態と動作情報を表示:現在のデバイス状態と動作情報を表示するReset to Defaults | 初期値に戻す:すべての設定をデフォルトにリセットするRecalibrate | 再校正する:あらためて校正する(デバイスが安定した状態で実行してください)
M5AtomS3Rのボタン(液晶画面自体が押せます)で、よく使う機能に素早くアクセスできます:
通常動作時:
- ダブルクリック:感度レベルを切り替え(低→中→高→低)
- 変更は自動的にフラッシュメモリに保存されます
- LCDステータスバーが現在の感度を表示(低/中/高)
- 長押し(2秒以上):WiFi設定のオン/オフを切り替え
- WiFi有効時は画面がシアン色に点滅します
- WiFiは電力節約のため初期状態では無効です
起動時(電源投入時):
- ボタンを押したまま起動(3秒以上):すべてのBluetoothペアリングをクリア
- Bluetooth HIDモードでのみ動作します
- コンピューターを切り替える際に便利です
- クリア中は画面が紫色になります
LCD ステータスバー:
画面下部にリアルタイムのデバイス状態を表示:接続 | 感度 | ボタン
- 接続:
USB、BT(Bluetooth接続)、またはBT*(Bluetooth広告中) - 感度:
LOW、MED、またはHI - ボタン:左右のボタン状態を2文字で表示(
*= 押下、-= 未押下) - 例:
USB | MED | *-は、USBモード、中感度、左ボタン押下を意味します
ウェブインターフェイスまたは本体ボタンのダブルクリックで、メガネ型マウスの全体的な応答性を選択:
Low | 低:より遅く、より精密な動き、正確性が必要な詳細作業に最適Medium | 中:速度と精度のバランス(デフォルト)、一般的な使用に適しているHigh | 高:より速く、より応答性の高い動き、高速ナビゲーションやゲームに最適
クイックヒント: ウェブインターフェイスを使わずに素早く感度を変更するには、本体ボタンをダブルクリックします。
デバイスをメガネにどのように取り付けたかに合わせて、設定を選択してください。
-
左側のテンプル(つる)に取り付けた場合:
Left-V | 左・ポート下向き(デフォルト):デバイスのUSB-Cポートが下を向く場合Left-H | 左・ポート後ろ向き:デバイスのUSB-Cポートが後ろを向く場合
-
右側のテンプル(つる)に取り付けた場合:
Right-V | 右・ポート下向き:デバイスのUSB-Cポートが下を向く場合Right-H | 右・ポート後ろ向き:デバイスのUSB-Cポートが後ろを向く場合
-
後頭部(ストラップなど)に取り付けた場合:
Back-V | 後・ポート下向き:デバイスのUSB-Cポートが下を向く場合
接続モードの選択:
USB HID:USBによる有線接続(遅延時間が最短)Bluetooth HID:Bluetooth Low Energyによる無線接続- モード変更後は適切な初期化のためデバイスが再起動します
ウェブインターフェイスで外部スイッチの入力モードを設定できます:
INPUT_PULLUP (active LOW)(デフォルト):内蔵プルアップ抵抗を使用します。GPIOピンとGNDの間にノーマルオープンのスイッチを接続します。スイッチ押下=LOWシグナル。INPUT (active HIGH):アクティブHIGHのセンサーや外部プルダウン抵抗付きスイッチ向けです。スイッチ押下=HIGHシグナル。
注意:INPUTモードを選択した場合、センサーが1つだけ接続されているときの誤作動を防ぐため、右マウスボタン(GPIO 2)は無効化されます。
応答カーブシステムは、使用者の操作パターンに応じて感度を調整することで、自然な適応性を備えたマウス操作を実現します。
全体的な感度曲線を制御します。
- 値を小さく設定する(0.1~0.5)と、より直線的なレスポンスが得られ、精密な操作が可能になります。
- 値を大きく設定する(1.0~2.0)と、より積極的な加速効果が生まれ、素早い動きがしやすくなります。
- 初期値の0.2から始めて、頭部を素早く動かす際の速度向上効果を強めたい場合は数値を上げてください。
カーブが使用者の操作パターンにどの程度適応するかを決定します。
- 速度に関係なく一貫したレスポンスを得たい場合は0.0に設定します。
- 高速操作時により敏感に反応させたい場合や、低速操作時の繊細な位置決めを滑らかに保ちたい場合は1.0~2.0に設定します。
- 初期値の0.5は、高速操作時の効果を高めつつ、低速操作時の感度が過剰にならないようバランスの取れた設定となっています。
- 精密制御:Base Curve Shape: 0.2、Adaptation Strength: 0.3
- バランス(デフォルト):Base Curve Shape: 0.2、Adaptation Strength: 0.5
- ゲーミング/高速:Base Curve Shape: 0.8、Adaptation Strength: 1.2
デバイスの取り付け角度を補正したい場合に設定します(初期値はいずれも0):
- Pitch Correction(ピッチ補正):前後の傾きを補正(+:後ろ向きに傾いているとき、−:前向きに傾いているとき)
- Roll Correction(ロール補正):左右の傾きを補正(+:右に傾いているとき、−:左に傾いているとき)
- Yaw Correction(ヨー補正):回転のずれを補正(+:時計回りに回転しているとき、−:反時計回りに回転しているとき)
各方向の動き感度を微調整したい場合に設定します(初期値はいずれも0):
- Horizontal Balance(水平バランス):左右の動き感度を調整(+:右を強める、−:左を強める)
- Vertical Balance(垂直バランス):上下の動き感度を調整(+:下を強める、−:上を強める)
- デバイスがメガネなどにしっかりと固定されていることを確認する
- 感度をより低い値に変更する
- ウェブインターフェイスの
Recalibrate | 再校正するボタンで再度校正する
- USBモード:データ通信可能なUSBケーブルで接続を使用し、デバイスがPC/タブレットに認識されることを確認する
- Bluetoothモード:デバイスがペアリングされ、LCDに「Connected」と表示されることを確認する
- デバイス方向が正しく設定されていることを確認する
- ウェブインターフェイスの
Recalibrate | 再校正するボタンで再度校正する
- Bluetoothデバイスリストで「MeganeMouse-BT」を探す
- デバイスのLCDに「ADVERTISING」または「CONNECTED」が表示されることを確認する
- デバイスのペアリングを解除して再ペアリングを試す
- 電源投入時に本体ボタン(液晶画面)を3秒以上長押しして全てのBluetoothペアリングをリセットする
- 接続に失敗した場合はデバイスを再起動する
- 異なる感度レベルを試す
- 応答カーブ設定を調整する
- 取り付け角度補正を確認する
- デバイス方向設定が物理的な取り付けと一致することを確認する
- ボタン長押しでWiFiを有効化する(画面が青緑色でフラッシュします)
- SSIDが
MeganeMouse-WiFiのアクセスポイントを探す - パスワードに
MeganeMouseを入力する - デバイスを再起動してみる
- Arduino IDE:v2.3.7
- M5Stack(ボード):v3.2.5
- M5AtomS3(ライブラリ):v1.0.2
- NimBLE-Arduino(ライブラリ):v.2.3.7
- 更新レート:50Hz(20ms間隔)
- 校正:動作検出、進捗表示、自動リトライ(最大3回)、永続ストレージ、フォールバックシステム
- フィルタリング:動的アルファ値を持つ速度適応IIRフィルタ
- 座標系:取り付け補正用の3D回転マトリックス
- 解像度:サブ度単位のヘッド動作検出
- レイテンシ:約20msのエンドツーエンド処理時間
- 安定性:自動ドリフト補正
- 範囲:±45°の取り付け角度補正
カーソル制御の代わりにデバッグ出力を有効にするには:
#define DEBUG_MODE 0を#define DEBUG_MODE 1に変更する- 再コンパイルしてアップロードする
- 115200ボーでシリアルモニターを開いてデバッグ情報を確認する
注意:M5AtomS3RのUSBコントローラーは、一度に1種類のデバイスとしてのみ動作できます(例:USB HIDマウスまたはシリアル/デバッグポートのどちらか一方)。USB HIDが有効な場合(#define DEBUG_MODE 0)には、USB経由のシリアル出力は無効になります。このため、コードを変更してデバッグモードを選択する必要があります。
Config名前空間で主要パラメータを調整可能です:
- 感度除数
- 校正しきい値
- フィルタパラメータ
- 更新間隔
このプロジェクトはGNU General Public License v3.0の下でライセンスされています。詳細はLICENSEファイルを参照してください。
- リポジトリをフォークする
- 変更する機能用にブランチを作成する
- 変更を加える
- 十分にテストする
- プルリクエストを送信する
問題、質問、貢献については、プロジェクトリポジトリでイシューを開いてください。



