将 MAX30100 脉搏血氧仪与 Arduino 连接

在这个项目中,我们将MAX30100 脉搏血氧仪传感器与 Arduino 连接起来。MAX30100 传感器能够测量血氧心率。我们可以使用任何显示器(如16×2 LCD 显示器)来查看SpO2BPM的值。血氧浓度(称为 SpO2)以百分比为单位测量,心跳/脉搏率以 BPM 为单位测量。

MAX30100 是一款脉搏血氧仪和心率监测传感器解决方案。它结合了两个LED、一个光电探测器优化的光学元件和低噪声模拟信号处理,用于检测脉搏血氧仪和心率信号。您可以将此传感器与任何微控制器(如 Arduino 、ESP8266ESP32 )一起使用,并轻松测量患者的健康参数。这款便宜的DIY 脉搏血氧仪传感器仅售 5 元左右,如果您是初学者或电子爱好者,它可以用于多种应用。

材料清单

以下是将 MAX30100 脉搏血氧仪传感器与 Arduino 连接所需的组件。您可以从亚马逊在线购买所有组件。组件名称以及购买链接如下。

序号成分数量
1Arduino UNO 板1
2MAX30100 脉搏血氧仪传感器1
416x2 LCD 显示屏1
5电位器10K1
6连接线10
7面包板1

脉搏血氧仪如何工作?

氧气进入肺部,然后进入血液。血液将氧气输送到我们身体的各个器官。氧气进入血液的主要方式是通过血红蛋白。在脉搏血氧仪读数期间,将一个小的夹子状装置放在手指、耳垂或脚趾上。

脉搏血氧仪的工作原理

小光束穿过手指中的血液,测量氧气含量。它通过测量含氧缺氧血液光吸收的变化来实现这一点。

脉搏血氧仪的工作原理


MAX30100脉搏血氧仪

该传感器是集成脉搏血氧仪和心率监测传感器解决方案。它结合了两个 LED、一个光电探测器、优化的光学元件和低噪声模拟信号处理,用于检测脉搏和心率信号。它采用1.8V3.3V电源供电,可通过软件断电,待机电流可忽略不计,允许电源始终保持连接。


特征

1. 功耗极低(工作电压为 1.8V 和 3.3V)
2. 超低关断电流(典型值 0.7µA)
3. 快速数据输出能力
4. 接口类型:I2C


MAX30100 脉搏血氧仪和心率传感器的工作原理

该设备有两个 LED,一个发出红光,另一个发出红外光。测量脉搏率只需要红外光。红光和红外光都用于测量血液中的氧气含量。

当心脏泵血时,由于血液量增加,含氧血液会增加。当心脏放松时,含氧血液的量也会减少。通过了解含氧血液增加和减少之间的时间,可以确定脉搏率。

事实证明,含氧血液吸收更多的红外光并传递更多的红光,而缺氧血液吸收红光并传递更多的红外光。这是 MAX30100 的主要功能:它读取两种光源的吸收水平并将其存储在可通过I2C通信协议读取的缓冲区中。


将 MAX30100 脉搏血氧仪传感器与 Arduino 连接

现在让我们将 MAX30100 脉搏血氧仪传感器与 Arduino 连接并在串行监视器中显示值。电路图和连接非常简单。您可以遵循相同的方法。

将 MAX30100 脉搏血氧仪传感器与 Arduino 连接

将 MAX30100 的 Vin 引脚连接到 Arduino 的5V3.3V引脚,将 GND 连接到 GND。将 MAX30100 的 I2C 引脚(即SCL 和 SDA)连接到Arduino 的A5 和 A4 。

MAX30100 Arduino 连接


源代码/程序

用于将MAX30100 脉搏血氧仪与 Arduino接口的源代码/程序是用 Arduino IDE 的 C 程序编写的。此代码将在串行监视器中显示值。复制此代码并将其上传到 Arduino 板。

但在此之前,请从这里下载MAX30100 库:
Arduino MAX30100 库

#include <Wire.h>
#include "MAX30100_PulseOximeter.h"
 
#define REPORTING_PERIOD_MS     1000
 
PulseOximeter pox;
uint32_t tsLastReport = 0;
 
void onBeatDetected()
{
    Serial.println("Beat!");
}
 
void setup()
{
    Serial.begin(115200);
    Serial.print("Initializing pulse oximeter..");
 
    // Initialize the PulseOximeter instance
    // Failures are generally due to an improper I2C wiring, missing power supply
    // or wrong target chip
    if (!pox.begin()) {
        Serial.println("FAILED");
        for(;;);
    } else {
        Serial.println("SUCCESS");
    }
     pox.setIRLedCurrent(MAX30100_LED_CURR_7_6MA);
 
    // Register a callback for the beat detection
    pox.setOnBeatDetectedCallback(onBeatDetected);
}
 
void loop()
{
    // Make sure to call update as fast as possible
    pox.update();
    if (millis() - tsLastReport > REPORTING_PERIOD_MS) {
        Serial.print("Heart rate:");
        Serial.print(pox.getHeartRate());
        Serial.print("bpm / SpO2:");
        Serial.print(pox.getSpO2());
        Serial.println("%");
 
        tsLastReport = millis();
    }
}

上传代码后,打开串行监视器以查看图像中所示的值。最初,BPM 和 SpO2 值显示为不正确的值,但很快您就可以观察到正确的稳定读数。


在 LCD 显示屏上显示 MAX30100 SpO2 和 BPM 值

现在让我们使用16X2 LCD 显示器而不是串行监视器来查看BPM 和 SpO2的值。按照下面的电路图组装电路。

MAX30100 Arduino液晶显示屏

将 MAX30100 的 Vin 引脚连接到 Arduino 5V 或 3.3V 引脚,将 GND 连接到 GND。将 MAX30100 的 I2C 引脚、SCL 和 SDA 连接到 Arduino 的 A5 和 A4。同样,将 LCD 引脚 1、5、16 连接到 Arduino 的 GND,将 2、15 连接到 5V VCC。同样,将 LCD 引脚 4、6、11、12、13、14 连接到 Arduino 引脚 13、12、11、10、9、8。在 LCD 的引脚 3 处使用 10K 电位器来调整 LCD 的对比度。

源代码/程序

#include <LiquidCrystal.h>
#include <Wire.h>
#include "MAX30100_PulseOximeter.h"
 
LiquidCrystal lcd(13, 12, 11, 10, 9, 8);
 
#define REPORTING_PERIOD_MS     1000
 
PulseOximeter pox;
uint32_t tsLastReport = 0;
 
void onBeatDetected()
{
    Serial.println("Beat!");
}
 
void setup()
{
    Serial.begin(115200);
    Serial.print("Initializing pulse oximeter..");
    lcd.begin(16,2);
    lcd.print("Initializing...");
    delay(3000);
    lcd.clear();
 
    // Initialize the PulseOximeter instance
    // Failures are generally due to an improper I2C wiring, missing power supply
    // or wrong target chip
    if (!pox.begin()) {
        Serial.println("FAILED");
        for(;;);
    } else {
        Serial.println("SUCCESS");
    }
     pox.setIRLedCurrent(MAX30100_LED_CURR_7_6MA);
 
    // Register a callback for the beat detection
    pox.setOnBeatDetectedCallback(onBeatDetected);
}
 
void loop()
{
    // Make sure to call update as fast as possible
    pox.update();
    if (millis() - tsLastReport > REPORTING_PERIOD_MS) {
        Serial.print("Heart rate:");
        Serial.print(pox.getHeartRate());
        Serial.print("bpm / SpO2:");
        Serial.print(pox.getSpO2());
        Serial.println("%");
 
        lcd.clear();
        lcd.setCursor(0,0);
        lcd.print("BPM : ");
        lcd.print(pox.getHeartRate());
        
        lcd.setCursor(0,1);
        lcd.print("SpO2: ");
        lcd.print(pox.getSpO2());
        lcd.print("%");
 
        tsLastReport = millis();
    }
}

MAX30100 不工作故障排除

如果您购买了下图所示的 MAX30100 模块,那么它可能无法工作,因为它存在严重的设计问题。MAX30100 IC 使用 1.8V 作为 VDD,而此特定模块使用两个调节器来实现此电压。

MAX30100 电路不工作

这没什么问题。但是,如果你仔细观察,SCL 和 SDA 引脚通过 4.7k 欧姆电阻上拉至 1.8V!这意味着它无法与逻辑电平更高的微控制器很好地配合使用。

有两种方法可以解决此问题并使 MAX30100 工作。

第一种方法

解决方案是从电路板上移除电阻器(下图中圈出的部分),并将外部 4.7k 欧姆电阻器连接到 SDA、SCL 和 INT 引脚。

移除所有 4.7K 电阻后,将 INT、SDA、SCL 引脚连接到外部 4.7K 上拉电阻。

MAX30100 无法正常工作修复

第二种方法

如果不喜欢第一种方法,可以使用第二种方法解决这个问题。只需在红十字位置切断路径并制作一个跳线,如黄线所示。跳线不需要绝缘线。您可以从绞合线中取出镀锡绞线。电路板上覆盖有保护罩,并且不会与铜灌注短路。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/653512.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

在今日头条上写文章:ChatGPT完整使用教程

了解如何充分运用ChatGPT进行创作 简介 在今日头条上发布文章变得越来越方便。本文旨在详细解析如何运用ChatGPT来创作文章&#xff0c;并提供全方位的使用指南及常见问题的答疑。 第一步&#xff1a;基础准备 确保你已注册今日头条账号。 登录ChatGPT并与你的今日头条账号进…

Python 应用开发:Streamlit 布局篇(容器布局)

st.columns 以并列方式插入容器。 插入若干并排排列的多元素容器&#xff0c;并返回一个容器对象列表。 要在返回的容器中添加元素&#xff0c;可以使用 with 符号&#xff08;首选&#xff09;或直接调用返回对象的方法。请参见下面的示例。 列只能放置在其他列的内部&…

想用Python做OCR?看看这篇文章

OCR是Optical Character Recognition的缩写&#xff0c;中文名为光学字符识别。它是一种通过计算机技术对图像或扫描文档中的文字进行识别和理解的过程。OCR技术可以将图像中的文字转换为可编辑、可搜索的文本&#xff0c;使得计算机能够理解和处理这些文字信息。 OCR技术通常…

【技术实操】银河高级服务器操作系统实例分享,达梦数据库服务器 oom 问题分析

1. 服务器环境以及配置 【 机型】 处理器&#xff1a; HUAWEIKunpeng 920 5220 内存&#xff1a; 400518528 kB 主板型号&#xff1a; Chaoqiang K620 series 整机类型/架构&#xff1a; ARM BIOS 版本&#xff1a; KL4.41.028.TF.220224.R 固件版本&#xff1a; KL4.41…

关于C++的IO流简单总结

基础IO流 C的IO以面向对象的形式实现, 同时兼容了C语言面向过程的IO方式 C 标准库提供了四个基本流对象&#xff1a; cin&#xff1a;用于从标准输入&#xff08;通常是键盘&#xff09;读取数据。 cout&#xff1a;用于向标准输出&#xff08;通常是控制台&#xff09;写入…

IGS 天线文件内容解读

文章目录 Part.I IntroductionChap.I 预备知识 Part.II 文件的下载Chap.I 下载地址Chap.II 文件类型 Part.III 文件内容解读Chap.I 文件头Chap.II 数据块说明Chap.III 数据块示例 Reference Part.I Introduction 本文将对 IGS 发布的天线文件 *.atx 进行一个简要的解读。 Chap…

QTreeWidget 详解

QTreeWidget 详解 QTreeWidget 是 PyQt5 框架中的一个重要部件&#xff0c;它提供了树形结构的视图&#xff0c;可以用于显示层级数据。以下是 QTreeWidget 的详细讲解&#xff0c;包括基本用法、主要方法和属性以及如何与其他组件进行交互。 基本用法 导入模块 要使用 QTree…

QListWidget详解

QListWidget详解 QListWidget 是 PyQt5 中一个方便的部件&#xff0c;用于创建和管理列表。它继承自 QListView&#xff0c;并提供了一些高级功能&#xff0c;使得添加和管理列表项更加简单。以下是 QListWidget 的详解&#xff0c;包括基本用法、主要方法和属性以及如何与其他…

安装PyTorch详细步骤

&#x1f4a5;注意事项&#xff1a; CPU版和GPU版选一个进行安装即可 如果有Nvidia显卡&#xff0c;则安装cuda版本的PyTorch&#xff0c;如没有nvidia显卡&#xff0c;则安装cpu版。 目前常见的深度学习框架有很多&#xff0c;最出名的是&#xff1a;PyTorch&#xff08;faceb…

hypack如何采集多波束数据?(下)

多波束测量模块 1&#xff09;记录多波束和辅助传感器的数据&#xff1b; 2&#xff09;显示实时改正后的数据和数据质量信息。 ​编辑​ 测量准备 1&#xff09;设置大地测量参数和硬件设置&#xff1b; 2&#xff09;计划测线 计划测线是一定间距的平行线&#xff0c;…

DuGa-DIT论文翻译

Dual Gated Graph Attention Networks with Dynamic Iterative Training for Cross-Lingual Entity Alignment 双门控图注意力网络与跨语言实体对齐的动态迭代训练 Abstract 近年来&#xff0c;跨语言实体对齐引起了相当大的关注。过去使用传统方法来匹配实体的研究都有一个…

传输大咖26|想找可替代FTP升级的国产信创软件?这个一定要看

​在这个信息技术飞速发展的时代&#xff0c;传统的文件传输协议FTP已经逐渐显露出它的局限性。特别是在安全性、传输效率和可扩展性方面&#xff0c;FTP似乎已经无法满足企业日益增长的需求。因此&#xff0c;寻找一款能够替代FTP的国产信创软件&#xff0c;成为了众多企业的迫…

8个Web组件库强烈推荐,大厂设计师的秘密武器

有TDesign、Arco Design、Ant Design、Material 随着Design等优秀web组件库的发布&#xff0c;设计师可能会认为大厂商之间的web组件库差别不大。其实大厂商的产品线很多&#xff0c;业务复杂。设计系统是对以往项目经验的深刻沉淀&#xff0c;可以支撑业务逻辑&#xff0c;保证…

如何本地 Debug React 源码

日常开发过程中&#xff0c;有时 debug react 源代码进行问题排查。一种方案是直接把通过 html 引入进来&#xff0c;另外一种是编译并通过 yarn 链接到项目中&#xff0c;本地将介绍如何通过这两种方法进行代码 Debug。 页面引入源代码方式 这种方式比较简单&#xff0c;直接…

【项目】教你手把手完成博客系统(三)显示用户信息 | 实现退出登录 | 实现发布博客

文章目录 教你手把手完成博客系统&#xff08;三&#xff09;7.实现显示用户信息1.约定前后端交互接口2.前端通过ajax发起请求3.服务器处理请求 8.实现退出登录1.约定前后端的接口2.前端发起请求3.服务器处理请求 9.实现发布博客1.约定前后端的交互接口2.前端构造请求3.服务器处…

前端面试问题:子组件的某一个方法调用执行逻辑由父组件的属性状态变化来决定

面试官&#xff1a;请你讲讲你在该项目中遇到的问题是什么&#xff1f;你怎么解决这个问题&#xff1f; 答&#xff1a;我的回答&#xff1a;该项目的实现过程中我确实遇到了问题&#xff1a;【我会给大家整理回答思路和角度&#xff0c;那那么遇到这样的问题也可借鉴这种思路…

RAG架构的数据准备流程

虽然现成的大型语言模型 (LLM) 功能强大&#xff0c;但企业发现&#xff0c;根据其专有数据定制 LLM 可以释放更大的潜力。检索增强生成 (RAG) 已成为这种定制的主要方法之一。RAG 模型将大型语言模型强大的语言理解能力与检索组件相结合&#xff0c;使其能够从外部数据源收集相…

[Redis]String类型

基本命令 set命令 将 string 类型的 value 设置到 key 中。如果 key 之前存在&#xff0c;则覆盖&#xff0c;无论原来的数据类型是什么。之前关于此 key 的 TTL 也全部失效。 set key value [expiration EX seconds|PX milliseconds] [NX|XX] 选项[EX|PX] EX seconds⸺使用…

官宣!马斯克的xAI获60亿美元融资,估值240亿美元

5月27日晚&#xff0c;马斯克旗下的大模型平台xAI在官网宣布获得60亿美元B轮融资&#xff0c;估值240亿美元。本次主要投资者包括Valor Equity Partners、红杉资本、国王控股、沙特王子-Bin Talal、Vy Capital等。 这也是大模型赛道史上最高单笔融资之一&#xff0c;超过Anthr…

安全基础二

一、插件漏洞 统计使用了哪些插件这些插件有版本更新嘛检测这些插件是否存在已知漏洞 二、权限提升和持久化 SSRF&#xff08;Server-Side Request Forgery&#xff0c;服务器端请求伪造&#xff09; 想象一下&#xff0c;你是一个公司的内部员工&#xff08;服务器&#x…