材料
- ESP WROOM 32位開發闆
- MAX30102 心率血氧傳感器
- 0.96寸 4P OLED顯示屏
因為MAX30102和 OLED顯示屏都是通過I2C跟ESP開發闆連結,是以需要自定義一對接口(SLC、SDA)。LED用預設的 PIN21,PIN22,MAX30102用PIN5,PIN23
是以初始化的時候
LED用
SSD1306Wire display(0x3c,SDA, SCL);//21,22 即預設Wire
MAX30102用Wire1
``
Wire1.begin(5, 23); //自定義sda scl端口
if (!particleSensor.begin(Wire1, I2C_SPEED_FAST)) //Use default I2C port, 400kHz speed
{
...
}
心率計算可以使用以下,原理是檢測ir資料是否為有效心跳資料,如果是則檢測跟上一次有效心跳資料擷取到的時間間隔(毫秒),用60/(delta/1000)計算60秒内有多少次有效心跳,這個數值不穩定,是以要用一個平均值
if (checkForBeat(ir) == true)
{
Serial.print("IR=");
Serial.print(ir);
//We sensed a beat!
long delta = millis() - lastBeat;
lastBeat = millis();
beatsPerMinute = 60 / (delta / 1000.0);
if (beatsPerMinute < 255 && beatsPerMinute > 20)
{
rates[rateSpot++] = (byte)beatsPerMinute; //Store this reading in the array
rateSpot %= RATE_SIZE; //Wrap variable
//Take average of readings
beatAvg = 0;
for (byte x = 0 ; x < RATE_SIZE ; x++)
beatAvg += rates[x];
beatAvg /= RATE_SIZE;
}
}
血氧計算方式參見 文檔