使用ESP32和max30102传感器制作血氧检测设备
材料
因为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;
}
}
血氧计算方式参见 文档
作者:jackyvan