×

WizFi360 EVB Mini脉搏血氧仪开源

消耗积分:0 | 格式:zip | 大小:10.37 MB | 2023-02-03

刘涛

分享资料个

描述

介绍

WizFi360-EVB-Mini 硬件概述

感谢 WIZnet 使用 WizFi360-EVB-Mini 硬件支持该项目。

dsc00332_FMdJMiHggv.JPG?auto=compress%2Cformat&w=740&h=555&fit=max
WizFi360-EVB-Mini
 

本文档描述了 WizFi360-EVB-Mini。WizFi360-EVB-Mini是一款用于WizFi360实验、测试和验证的紧凑型开发板。WizFi360-EVB-Mini 的外形尺寸与 NodeMCU V2 相同。WizFi360是一款低成本、低功耗的工业级WiFi模块。兼容IEEE802.11 b/g/n标准,支持SoftAP、Station、SoftAP+Station模式。串口波特率最高可达2Mbps,满足各种应用需求。

MAX30102

MAX30102 是一款集成脉搏血氧计和心率监测传感器。它集成了一个红色LED和一个红外LED、光电探测器、光学器件和具有环境光抑制功能的低噪声电子电路。标准的 I2C 兼容通信接口可以将采集到的值传输到 WizFi360-EVB-Mini 进行心率和血氧计算。

dsc00355_IK4rlaeysC.JPG?auto=compress%2Cformat&w=740&h=555&fit=max
 
  • 光溶法
  • 透光率转换成电信号

将 MAX30102 模块和 WizFi360-EVB-Mini 连接到 Raspberry Pi Pico

  • 将 VCC 引脚连接到电源,GND 连接到 GND。
  • 将 SCL 引脚连接到 I2C 时钟引脚,将 SDA 引脚连接到 Raspberry Pi Pico 上的 I2C 数据引脚。
dsc00360_K8KxnpkTSE.JPG?auto=compress%2Cformat&w=740&h=555&fit=max
 
  • 将 Vin 引脚连接到电源,GND 连接到 GND。
  • 将 TXD1 引脚连接到 IO9 引脚,将 RXD1 引脚连接到 Raspberry Pi Pico 上的 IO8 引脚。
dsc00365_LNZ9v4LaNg.JPG?auto=compress%2Cformat&w=740&h=555&fit=max
 

编程MAX30102模块

最好使用橡皮筋或 Velcro 将传感器固定在手指上。当您将手指按在传感器上时,它的变化足以导致手指中的血液流动不同,从而使传感器读数不稳定。

  • 从 Sparkfun 安装 MAX30102 库
screenshot_(1)_wlnSiVnIgf.png?auto=compress%2Cformat&w=740&h=555&fit=max
 
  • 手指存在:

我们不断打印增量值以找出差异

void loop()
{
  samplesTaken++;

  Serial.print("IR[");
  Serial.print(particleSensor.getIR());
  Serial.print("] Hz[");
  Serial.print((float)samplesTaken / ((millis() - startTime) / 1000.0), 2);
  Serial.print("]");

  long currentDelta = particleSensor.getIR() - unblockedValue;

  Serial.print(" delta[");
  Serial.print(currentDelta);
  Serial.print("]");

  if (currentDelta > (long)100)
  {
    Serial.print(" Something is there!");
  }

  Serial.println();
}

如图所示打印串行输出。

 
 
 
ss1_jFYqw25GDz.png?auto=compress%2Cformat&w=740&h=555&fit=max
 
1 / 2
 
  • 显示心跳波形

在 Arduino 串行绘图仪上显示心跳图。单击工具->串行绘图仪

#include 
#include "MAX30105.h"

MAX30105 particleSensor;

void setup()
{
  Serial.begin(115200);
  Serial.println("Initializing...");

  // Initialize sensor
  if (!particleSensor.begin(Wire, I2C_SPEED_FAST)) //Use default I2C port, 400kHz speed
  {
    Serial.println("MAX30105 was not found. Please check wiring/power. ");
    while (1);
  }

  //Setup to sense a nice looking saw tooth on the plotter
  byte ledBrightness = 0x1F; //Options: 0=Off to 255=50mA
  byte sampleAverage = 8; //Options: 1, 2, 4, 8, 16, 32
  byte ledMode = 3; //Options: 1 = Red only, 2 = Red + IR, 3 = Red + IR + Green
  int sampleRate = 100; //Options: 50, 100, 200, 400, 800, 1000, 1600, 3200
  int pulseWidth = 411; //Options: 69, 118, 215, 411
  int adcRange = 4096; //Options: 2048, 4096, 8192, 16384

  particleSensor.setup(ledBrightness, sampleAverage, ledMode, sampleRate, pulseWidth, adcRange); //Configure sensor with these settings

  //Take an average of IR readings at power up
  const byte avgAmount = 64;
  long baseValue = 0;
  for (byte x = 0 ; x < avgAmount ; x++)
  {
    baseValue += particleSensor.getIR(); //Read the IR value
  }
  baseValue /= avgAmount;

  //Pre-populate the plotter so that the Y scale is close to IR values
  for (int x = 0 ; x < 500 ; x++)
    Serial.println(baseValue);
}

void loop()
{
  Serial.println(particleSensor.getIR()); //Send raw data to plotter
}

使用串行绘图仪绘制波形。

ss4_sBOwBFoicq.png?auto=compress%2Cformat&w=740&h=555&fit=max
输出
 
  • 心率和 SPO2 测量

在 Arduino 串行监视器上显示心率和 SPO2。理想心率(成人):60~100次/分,理想SPO2:95~100。

dsc00361_D8Jzvgz1Cq.JPG?auto=compress%2Cformat&w=740&h=555&fit=max
 
{
      while (particleSensor.available() == false) //do we have new data?
        particleSensor.check(); //Check the sensor for new data

      digitalWrite(readLED, !digitalRead(readLED)); //Blink onboard LED with every data read

      redBuffer[i] = particleSensor.getRed();
      irBuffer[i] = particleSensor.getIR();
      particleSensor.nextSample(); //We're finished with this sample so move to next sample

      //send samples and calculation result to terminal program through UART
      Serial.print(F("red="));
      Serial.print(redBuffer[i], DEC);
      Serial.print(F(", ir="));
      Serial.print(irBuffer[i], DEC);

      Serial.print(F(", HR="));
      Serial.print(heartRate, DEC);

      Serial.print(F(", HRvalid="));
      Serial.print(validHeartRate, DEC);

      Serial.print(F(", SPO2="));
      Serial.print(spo2, DEC);

      Serial.print(F(", SPO2Valid="));
      Serial.println(validSPO2, DEC);
    }
ss5_UIhaOvS8MK.png?auto=compress%2Cformat&w=740&h=555&fit=max
输出
 

完整代码添加在项目博客末尾的代码部分。一定要坚持到最后才能理解这个项目。

编程 WizFi360-EVB-Mini

我们将使用 AT 命令对 WizFi360-EVB-Mini 进行编程。我们将使用多个串行端口与 USB 和 WizFi360-EVB-Mini 进行通信。

Serial2.println("AT\r\n"); //Handshaking with WizFi360-EVB-Mini

如图所示,WizFi360-EVB-MIni 响应 AT 命令。

ss6_ALHemD7oek.png?auto=compress%2Cformat&w=740&h=555&fit=max
 

现在,我们可以按照文档向 WizFi360-EVB-Mini 发送 AT 命令WizFi360有普通传输模式和透传模式。如果 WizFi360 是普通命令模式,WizFi360 执行 AT 命令。通过输入 AT\r\n 并返回 \r\nOK\r\n 确认正常命令模式。在透明模式下,WizFi360 不执行 AT 命令。仅与对等方发送和接收数据。如果输入是“+++”,切换到普通命令模式。

我们已经从 Wiznet 安装了 WizFi360 和WiFiEsp 库,将模块连接到 WiFi,然后连接到 Blynk。

screenshot_(16)_JVJxMvxbus.png?auto=compress%2Cformat&w=740&h=555&fit=max
WizFi360 库
 

为物联网脉搏血氧仪设置 Blynk 应用程序

screenshot_(17)_ERF5HyIi06.png?auto=compress%2Cformat&w=740&h=555&fit=max
Blynk库
 
  • 如下所示设置数据流
screenshot_(27)_erfDMb4aJ8.png?auto=compress%2Cformat&w=740&h=555&fit=max
 
  • 更新草图中的 SSID、密码、设备 ID、Auth Token 并将其上传到 Arduino。WizFi360 现在已连接到我的 WiFi 路由器。
screenshot_(28)_Lpwjsm2dCO.png?auto=compress%2Cformat&w=740&h=555&fit=max
 
  • 将元素添加到仪表板以制作 UI。现在设备已准备好使用 WizFi360 从 Raspberry Pi 接收数据。心率、SpO2 和手指存在数据被发送到 Blynk 控制台和连接到它们的设备。
ss2_S8T9Z2pfRq.png?auto=compress%2Cformat&w=740&h=555&fit=max
仪表板
 

 

dsc00377_PdWPPkZ1Yj.JPG?auto=compress%2Cformat&w=740&h=555&fit=max
项目工作
 

资源


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

评论(0)
发评论

下载排行榜

全部0条评论

快来发表一下你的评论吧 !