DIY Arduino スマートウォッチ — Apple Watch 風腕時計を自作
概要
Arduino Pro Mini 3.3V/8MHz、nRF8001 BLE モジュール、0.96" OLED (128×64)、100 mAh LiPo 電池を組み合わせ、iPhone の通知(ANCS: Apple Notification Center Service)を受信表示する腕時計型ウェアラブルを自作します。静電容量式タッチボタン(配線パッド)で操作、マイクロ USB で充電、常時着用を想定した小型ケースに収納。
主な仕様
- iPhone と BLE 接続、ANCS で着信・メール・LINE 等の通知を取得
- 通知受信時に時刻自動同期(Arduino 内蔵 RTC のドリフト補正)
- 10 秒無操作で OLED スリープ、中央ボタンタッチ或いは新着通知でウェイクアップ
- 静電容量タッチ 3 ボタン(左・中・右)でメニュー操作
- LiPo 充電回路(MCP73831 搭載ブレークアウト)内蔵、USB 充電
- ボディ接地用ワイヤーで静電容量センサーの基準電位確保
必要な部品
| 部品 | 数量 | 備考 |
|---|---|---|
| Arduino Pro Mini 328 3.3V/8MHz | 1 | FTDI で書き込み |
| Adafruit Bluefruit LE (nRF8001) ブレークアウト | 1 | BLE 4.0、ANCS 対応 |
| 0.96" モノクロ OLED 128×64 (I2C/SPI) | 1 | SSD1306 ドライバー |
| LiPo 3.7V 100 mAh | 1 | JST-PH コネクター付き推奨 |
| Micro USB コネクター(DIP/SMD) | 1 | 充電ポート用 |
| 1 MΩ 1206 チップ抵抗 | 3 | タッチセンサー用 |
| 20 mm 時計バンド(スプリングバー付) | 1 | 市販品流用 |
| SparkFun LiPo Charger Basic - Micro USB | 1 | 充電回路 |
| FTDI Basic 3.3V | 1 | Pro Mini 書き込み用 |
| アルミ板 50×50 mm、ユニバーサル基板、M2×5 mm ネジ×4 | 各1 | 裏蓋・基板固定用 |
必要な工具
- 3D プリンター(ケース出力)、はんだごて、ニッパー、ドライバー、ノコギリ、ペンチ、カッター
使用ライブラリ(要修正版)
- ANCS Library for Arduino (robotastic/ANCS-Library) —
notif.cppリセットピンを 9 番に変更、ancs_data_source.cppとancs_notification.hを提供版に全置換(日付パース修正含む) - Nordic BLE SDK for Arduino (NordicSemiconductor/ble-sdk-Arduino)
- U8glib (olikraus/u8glib) — OLED 制御
- CapacitiveSensor (Arduino Playground) — タッチ検出
製作手順
Step 1: 電気的組み立て
- Bluefruit LE ↔ Pro Mini を柔軟なワイヤーで接続(SPI: SCK/MISO/MOSI/REQN/RDYN/RESET)
- タッチボタン基板(LED リード線流用ピン)を別作し、Pro Mini に配線
- OLED はピン配列調整の上、Pro Mini に直付けまたは薄型ソケットで接続
- 重要: ボディ接地用ワイヤー(GND 延長)をケース背面のアルミ裏蓋にハンダ付けし、装着時に肌と導通させる(静電容量センサーのリファレンス用)
- Micro USB コネクター:VCC→RAW、GND→GND(VCC ではなく RAW へ!レギュレーター経由で充電)
- LiPo バッテリー:+ → RAW、- → GND
- 充電ケーブル自作:Micro USB ケーブル切断、赤線を LiPo コネクター赤線、黒線を黒線へハンダ付け(5V 直結禁止、必ず LiPo 充電ボード経由)
Step 2: ソフトウェア書き込み
- Arduino IDE 1.0.6 を使用(1.8.x では GCC バグでコンパイルエラーの報告あり)
- 修正済みライブラリ一式とスケッチを同梱 ZIP から導入
- FTDI アダプターで Pro Mini へアップロード
Step 3: ケース製作・仕上げ
- STL データで 3D プリント(2 世代目の設計データ同梱)
- アルミ板を裏蓋形状に切り出し、ネジ穴・バンド取り付け穴を開ける
- ケース表面処理:紙やすり → サーフェイサー吹き付け → 再研磨(3 回繰り返し) → 塗装
Step 4: 最終組み立て
- タッチピンをケース下側穴から通し、上側穴へ折り返し挿入、テープで固定
- OLED 位置調整しながら基板一式をケースに押し込み
- Micro USB コネクターを側面穴に通し、テープで固定
- ボディ接地ワイヤーをアルミ裏蓋にハンダ付け、絶縁テープで覆い、M2 ネジ 4 本で固定
Step 5: 使い方
- iPhone「設定 → Bluetooth」で "ANSC rusk" をペアリング
- 通知センターへのアクセス許可ダイアログで「許可」
- 以降、iPhone に来る通知がウォッチに表示、時刻自動同期
- 中央+右ボタン同時タッチでソフトリセット(接続不調時)
- 充電:自作 Micro USB ケーブルを LiPo 充電ボードに接続、USB 電源へ
回路図・ケースデータ
- 回路図:
schematic.jpg(ピンアサインはスケッチ冒頭の#define参照) - ケース STL:同梱 ZIP または GitHub 参照
- 全コード・修正済みライブラリ:同梱
Arduino Apple Watch.zip
既知の課題・改善案
- OLED 位置合わせが難しい → ケース設計にガイドリブ追加、または OLED モジュール固定用ボス一体化
- 電池持ち約 1 日 → Deep Sleep モード導入、OLED コントラスト自動調整、BLE 接続間隔最適化で延長可能
- ANCS ライブラリのバグ修正が手間 → 代替として
Bluefruit nRF52移行(Arduino 互換・ANCS サンプル内蔵)検討 - タッチ感度が環境依存 → 1 MΩ 抵抗値調整、シールドパターン追加、専用タッチIC (AT42QT1070 等) 移行
本プロジェクトは Luke Berndt 氏の ANCS 実装 を参考に、ウェアラブル化・小型化したものです。改良・派生作品の公開を歓迎します。
製造プロセス
- 時計の進化:日時計から精密クォーツ時計まで
- Adafruit 60 LED NeoPixelリングとArduinoで作るスタイリッシュな壁掛け時計
- Bluetooth操作のArduinoスパイボットを自作する
- FlickMote:ジェスチャー操作のIRリモコンでスマートホームを制御
- 自作Arduino TV-B-Gone:全テレビ対応の万能リモコン
- UnifiedWater v1 - 完全なArduino水質センサーキット
- 12メートル先から見える大型LEDマスタークロック(アラーム機能付き)を自作しよう
- ArduinoとBluetoothで作るスマート紛失防止タグ「Find Me」
- Arduinoプロジェクトのための最適化電源ソリューション
- Arduino 101 BLE + Blynk:スマホで操作するBluetooth戦車ロボット
- Arduino三目並べ:MAX7219 LEDマトリクスと段ボールケースで自作