COVID-19対策オープンソースパルスオキシメーター: Arduino Nano + MAX30102で自作
必要なパーツと材料
| パーツ | 数量 | 備考 |
|---|---|---|
| Arduino Nano R3 | 1 | |
| MAX30102 パルス/心拍センサー (Maxim Integrated) | 1 | I2C接続、赤外線/赤色LED内蔵 |
| 128x64 I2C OLEDディスプレイ (DFRobot Gravity等) | 1 | SSD1306互換 |
必要な工具
- 3Dプリンター (ケース出力用)
- はんだごて
使用するソフトウェア・サービス
- Arduino IDE
- Autodesk Fusion 360 (ケース設計)
プロジェクト概要
COVID-19 (SARS-CoV-2) は呼吸器系を冒し、無症状性低酸素血症 (「ハッピー・ハイポキシア」) を引き起こすことがあります。パルスオキシメーターで血中酸素飽和度 (SpO₂) と心拍数を監視し、早期に受診判断を助ける目的で、オープンソースのデバイスを設計・公開しました。
⚠ 免責事項: 本デバイスは医療用診断機器ではありません。参考値としてのみお使いください。
電子部品の概要
- MAX30102: 指先の血流変化を赤外線/赤色LEDで検出し、SpO₂と心拍を算出。I2C (A4/A5) 接続。5V/3.3V両対応。
- 128x64 OLED: 結果表示用。I2C接続 (アドレス 0x3C)。
- Arduino Nano: 制御中枢。UNO互換だが小型でブレッドボード/基板実装に適する。
製作手順
- 3Dプリント部品の出力と仕上げ: Fusion 360で設計されたケースパーツ (ベース、蓋、センサー固定部等) をPLA、インフィル70-80%、サポートありで出力。サポート除去と軽いサンディングで組み立て精度を確保。
- 電子部品のはんだ付け: パーフボード (44×30mm) 上にNanoを実装。MAX30102のVIN, GND, SDA, SCLを配線し、ベース部下部を通してNanoへ。OLEDコネクターも同様に配線。完成した基板をケースにネジ止め (M3)。
- デバイス組み立て: OLEDを上部パーツに取り付け、蓋を本体にネジ止め。ヒンジ構造で開閉可能。
- スケッチ書き込み: 必要ライブラリ (
MAX30105,spo2_algorithm,SSD1306Ascii) をインストールし、ボード「Arduino Nano」で書き込み。 - 使用方法: 指先をセンサーに当て、蓋を優しく閉じ、USB電源接続。数秒で心拍数とSpO₂が表示されます。
スケッチの動作フロー
- OLEDとMAX30102初期化 (エラー時はシリアル出力し停止)
- 最初の50サンプル取得で信号レンジ決定
- 最初の50サンプルで心拍/SpO₂初回計算 (maximアルゴリズム)
- 以降ループ: 古い25サンプルを捨て、新しい25サンプル取得、移動平均的に再計算、有効ならOLED表示
ソースコード
主要ライブラリ依存。maxim_heart_rate_and_oxygen_saturation() で計算。UNO/Nano (ATmega328P) ではSRAM節約のため16bit切り詰め配列を使用。OLEDには SSD1306AsciiWire でテキスト出力。
3Dプリントデータ / 回路図
ケースSTLファイルと回路図 (PNG) が提供されています。
製造プロセス
- FirePick Deltaプロジェクトログ: OpenPnPでオープンソースMicroFactoryを構築
- Arduinoデジタルダイス: LCD表示の乱数ジェネレーター自作
- Arduinoでアイアンマンを自作:部品・センサー・手順ガイド
- ArduinoとBluetoothで作るスマート紛失防止タグ「Find Me」
- Arduino駆動3Dプリントロボットアームの製作:ステップバイステップガイド
- COVID-19緊急対応用 携帯型パルスオキシメーター(Arduino Nano+MAX30100)
- DIY Arduino加湿器コントローラー:リレーを用いた安全な高電圧制御
- Arduino Nanoで作るNeoPixelマトリックス版Pongゲーム
- ゲーム用カスタムArduinoジョイスティックハンドルの製作
- ヘルスバンド:高齢者を見守る信頼のスマートウェアラブルアシスタント
- オープンソースがエッジでのイノベーションを駆動する理由──必携eBook