COVID-19緊急対応用 携帯型パルスオキシメーター(Arduino Nano+MAX30100)
必要なパーツと材料
| パーツ | 数量 | 備考 |
|---|---|---|
| Arduino Nano R3(またはNano Every、Micro) | 1 | 3.3V動作、I2C: A4/A5 (Nano)、2/3 (Micro) |
| MAX30100 パルスオキシメーターセンサーモジュール | 1 | 心拍数+SpO2測定 |
| SSD1306 128×32 I2C OLEDディスプレイ | 1 | サイズ確認要 |
| ブレッドボード/ユニバーサル基板 | 1 | 簡易基板で接続 |
| 指クリップ(Peter Smith設計、Thingiverse公開) | 1 | 3Dプリントで自作 |
必要なツール
- 3Dプリンター、はんだごて、鉛フリーはんだ、0.25mm径ワイヤー
プロジェクト概要
COVID-19パンデミック初期、医療用パルスオキシメーターが枯渇した緊急事態に対応するため、オープンソースで迅速に複製・配布可能な簡易デバイスを開発。オープンソースの力で世界中に広めることを目的としています。
構成要素
- ハードウェア: 一般的で安価なパーツ(Arduino Nano、MAX30100、OLED)
- 3Dプリントケース: 基板とディスプレイを保護
- 3Dプリント指クリップ: センサー固定用、Thingiverseで公開済み
- 簡易ベースボード: ユニバーサル基板で全パーツを接続(将来はPCB化予定)
- ファームウェア: リアルタイムで心拍数とSpO2をOLED表示
- 組み立て説明書: 手順書、配線図、ライブラリリンクをPDFで提供
免責事項(重要)
このデバイスは医療機器認証を受けておらず、センサーも校正・認証されていません。医療用パルスオキシメーターが入手できない緊急時の予防的モニタリング、または代替手段としてのみ使用してください。本デバイスの使用により生じた一切の責任は利用者負担となります。GPL v3ライセンスで公開。
ファームウェア:CE_Pulse-Oxi_dev2.4.ino
/* CEREBRUM Pulse Oximeter v2.4 - 2020/04/06
* Arduino Nano (3.3V) | I2C: A4(SDA), A5(SCL)
* MAX30100 | OLED SSD1306 128x32
* GPL v3 License - CEREBRUM srl, Italy
*/
#include <Wire.h>
#include "MAX30100_PulseOximeter.h"
#include "MAX30100.h"
#include <U8g2lib.h>
#define REPORTING_PERIOD_MS 1000
#define PULSE_WIDTH MAX30100_SPC_PW_1600US_16BITS
#define IR_LED_CURRENT MAX30100_LED_CURR_40MA
#define LED_CURRENT MAX30100_LED_CURR_20_8MA
#define SAMPLING_RATE MAX30100_SAMPRATE_100HZ
U8G2_SSD1306_128X32_UNIVISION_F_HW_I2C u8g2(U8G2_R0);
PulseOximeter pox;
MAX30100 sensor;
uint32_t tsLastReport = 0;
uint32_t lastBeat = 0;
bool initialized = false;
int HRclean, SpO2;
void onBeatDetected() { showBeat(); lastBeat = millis(); }
void showBeat() {
u8g2.setFont(u8g2_font_cursor_tr);
u8g2.setCursor(118, 10);
u8g2.print("_");
u8g2.sendBuffer();
}
void initialDisplay() {
if (!initialized) {
u8g2.clearBuffer();
u8g2.setFont(u8g2_font_crox2hb_tr);
u8g2.setCursor(15, 12); u8g2.print("CEREBRUM.it");
u8g2.setFont(u8g2_font_crox2h_tr);
u8g2.setCursor(30, 29); u8g2.print("Initializing...");
u8g2.sendBuffer(); delay(4000);
initialized = true;
u8g2.clearBuffer();
u8g2.setFont(u8g2_font_crox2hb_tr);
if (!pox.begin()) {
u8g2.setCursor(40, 12); u8g2.print("FAILED");
u8g2.setCursor(15, 29); u8g2.print("Check Sensor!");
u8g2.sendBuffer(); for(;;); // 停止
} else {
u8g2.setCursor(20, 12); u8g2.print("INITIALIZED");
u8g2.setCursor(0, 29); u8g2.print("Wear the Sensor...");
u8g2.sendBuffer();
}
delay(2000);
}
}
void setup() {
u8g2.begin();
initialDisplay();
pox.begin();
pox.setOnBeatDetectedCallback(onBeatDetected);
pox.setIRLedCurrent(LED_CURRENT);
sensor.setMode(MAX30100_MODE_SPO2_HR);
sensor.setLedsPulseWidth(PULSE_WIDTH);
sensor.setSamplingRate(SAMPLING_RATE);
}
void loop() {
pox.update();
HRclean = pox.getHeartRate();
SpO2 = pox.getSpO2();
// 有効な範囲内かつ報告周期到来時のみ表示更新
if ((millis() - tsLastReport > REPORTING_PERIOD_MS) &&
(HRclean > 30 && HRclean < 220 && SpO2 > 30 && SpO2 < 100)) {
u8g2.clearBuffer();
u8g2.setFont(u8g2_font_crox2h_tr);
u8g2.setCursor(0, 12); u8g2.print("HR");
u8g2.setCursor(75, 12); u8g2.print("Bpm");
u8g2.setCursor(0, 30); u8g2.print("SpO2 ");
u8g2.setCursor(75, 30); u8g2.print("%");
u8g2.setFont(u8g2_font_fub11_tf);
u8g2.setCursor(45, 12); u8g2.print(HRclean);
u8g2.setCursor(45, 30); u8g2.print(SpO2);
u8g2.setFont(u8g2_font_cursor_tr);
u8g2.setCursor(118, 10); u8g2.print("^"); // 拍動インジケーター
u8g2.sendBuffer();
tsLastReport = millis();
}
}
3Dプリントパーツ
- メインケース(基板+OLED収納)
- ケース蓋
- 指クリップ(2パーツ、Peter Smith設計)
回路図・基板データ
- メイン接続図
- Fritzingファイル:
ce_pulse-oxi_nano_v1.fzz,ce_pulse-oxi_nano_eboard_v1.fzz
ダウンロード資料
- 組み立て説明書:
CE_Pulse-Oxi_nano_2.4_V1_Instruction.pdf - 回路図PDF:
CE_Pulse-Oxi_nano_2xscheme_V1.pdf
製造プロセス
- チェックリストがプラント効率を高める理由:実証されたメリットと導入の実践
- Arduinoで超音波レベーション(浮遊)装置を自作:ステップバイステップガイド
- ISD1700音声録音チップ用Arduinoセットアップガイドと録音ソフトウェア
- ヘルスバンド:高齢者を見守る信頼のスマートウェアラブルアシスタント
- 信頼性の高いパレットラック用ワイヤーデッキ選定のエキスパートガイド
- 産業用途向けプレミアム砂型鋳造ソリューション
- 家庭用電動ウォーターポンプ:信頼性・効率・簡単設置
- CNC放電加工機(EDM)完全ガイド:ワイヤ/シンカー型、精密加工メリット、工具応用、夢の用途まで
- 金属3Dプリンティング:産業を変革する5つの最先端アプリケーション
- COVID-19:効果的な緊急サプライチェーン対応計画の主要戦略
- 3Dプリンター活用の5大ユースケース:試作から最終製品まで