IoT Dice:BLE姿勢共有と出目予測のプロトタイプ
BNO085を内蔵したサイコロ型デバイス
IoT Diceは、内蔵したBNO085で姿勢を測り、Bluetooth Low EnergyでWebブラウザへ送るサイコロ型デバイスです。 ブラウザ上の3Dモデルが実物と同じ向きへ動き、静止時の姿勢から上面の数字を判定します。
本作は開発中で、現時点で動作するのは姿勢計測、BLE通信、3D表示までです。
BNO085の姿勢をBLEで共有する
BNO085から姿勢クォータニオン、角速度、線形加速度を取得します。 通常の姿勢共有モードではクォータニオンだけをBLEで通知し、Webブラウザ上の3Dサイコロへ反映します。
BLE通知は経過時間でペーシングし、画面へ送る姿勢を平均約60 Hzに抑えています。 センサー側は2.5 ms周期を要求しており、投擲状態を判定する処理にはBLE通知より細かい時間間隔のデータを使います。
六面の校正では、各面を上にして静置したときの方向を登録します。 固定したXYZ軸だけで判定しないため、基板の取り付け角度を含めて上面を求められます。
投擲状態から出目を予測する設計
開発中のファームウェアは、投擲を静止、移動、自由落下、転がりの4状態に分けます。 最初の衝撃を検出すると、衝撃でセンサー値が乱れる前の姿勢、角速度、並進速度をWebブラウザへ送る設計です。
Webアプリには、Rapierで32回の剛体シミュレーションを実行するコードがあります。 反発係数、摩擦係数、速度を少しずつ変えた結果を数え、最も多かった面と1から6までの確率分布を表示します。
ただし、実機から衝撃パケットを受け、静止前に予測を表示し、確定した出目と一つの投擲記録へ保存するまでの統合と検証は終わっていません。 的中率を評価した結果も、現時点ではありません。
無線給電とBLE更新に残る実装
無線給電による電池の充電
サイコロの外装を開けずに充電できるよう、受電コイル、充電回路、内蔵電池を実装します。 限られた容積の中で、基板、電池、コイルの配置と充電時の発熱を確認する必要があります。
BLE経由のファームウェア更新
現在のファームウェア更新には、基板上の書き込み用コネクターを使います。 完成形では、ケースを開けずに更新でき、更新に失敗しても復旧できる仕組みが必要です。
主な仕様
| 項目 | 仕様 |
|---|---|
| MCU | nRF5340搭載ISP2053-AX-RS |
| モーションセンサー | BNO085 |
| 取得データ | 姿勢、角速度、線形加速度 |
| センサー要求周期 | 2.5 ms(400 Hz相当、実出力はセンサー側の上限による) |
| 3D表示 | Three.js |
| Webアプリ | TypeScript、Vite、Web Bluetooth |
| 基板 | 13 × 13 mm、2層 |
Webブラウザから接続する
専用アプリのインストールは不要です。
ChromeまたはEdgeで公開ページを開き、「サイコロを接続」からBLEデバイス名diceを選択します。
Web Bluetoothを使うため、HTTPSまたはlocalhostで開く必要があります。
基板からWebアプリまでの実装は、GitHubリポジトリで確認できます。
