PulseSensor心率传感器详解(STM32)
目录
一、介绍
二、传感器原理
1.接线图
2.引脚描述
3.工作原理:光电容积法原理
4.工作原理:心率采样数据处理算法
三、程序设计
main.c文件
adcx.h文件
adc.c文件
四、实验效果
五、资料获取
项目分享
一、介绍
PulseSensor传感器是一种基于光学原理的心率传感器,可以通过测量心脏跳动时的血液流动情况来检测心率。它由一个LED和一个光敏元件组成,LED发出的光线透过皮肤照射到血液中,光敏元件接收反射回来的光线,然后将光信号转换为电信号,从而测量出心率。

以下是土壤湿度传感器的参数:
| 供电电压 | DC:3.3~5V |
| 检测信号类型 | 光反射信号(PPG) |
| 输出信号类型 | 模拟信号 |
| LED峰值波长 | 515nm(绿光) |
| 信号放大倍数 | 330倍 |
| 输出信号范围 | 0~VCC |
| 电流大小 | ~4ma |
哔哩哔哩视频
PulseSensor心率传感器详解(STM32)
(资料分享见文末)
二、传感器原理
1.接线图
传感器只有三个引脚,分别为信号输出 S 脚 、电源正极 VCC 以及电源负极 GND,供电电压为 3.3V - 5V,可通过杜邦线与开发板连接。上电后, 传感器会不断从 S 脚输出采集到的电压模拟值。

2.引脚描述
| 引脚名称 | 描述 |
| S | 脉搏信号输出 |
| + | 5V(或3.3V)电源输入 |
| - | GND地 |
3.工作原理:光电容积法原理
光电容积法的基本原理是利用人体组织在血管搏动时造成透光率不同来进行脉搏测量的。光源一般采用对动脉血有选择性的特定波长的发光二极管(515nm的绿光)。当光束透过人体外周血管,由于动脉搏动充血容积变化导致这束光的透过光率发生改变,此时由光电变换器接收人体组织反射的光线,转变为电信号并将其放大和输出。由于脉搏是随心脏的搏动而周期性变化的信号,动脉血管容积也周期性变化,因此光电变换器的电信号变化周期就是脉搏率。

4.工作原理:心率采样数据处理算法
测量相邻两次脉搏的时间间隔,再用一分钟除以这个间隔得出心率。
IBI: 相邻两次脉搏的时间间隔(单位:ms),BPM:心率,一分钟内的心跳次数且:BPM = 60 / IBI。我们的最终目的就是要求出 IBI 的值,并通过 IBI 计算出实时心率。其核心操作在于识别一个脉搏信号
①选取阈值
首先动态计算出参考阈值,然后用用阈值对信号判定、识别一个波峰

② 计算特征点
选取信号上升到振幅的一半作为特征点,我们可以捕获这个特征点作为一个有效脉搏的标志,然后计算 IBI

三、程序设计
1.使用STM32F103C8T6读取PulseSensor心率传感器采集的数据
2.将读取得到的温湿度数据同时在OLED上显示
| PulseSensor | PA0 |
| OLED_SCL | PB11 |
| OLED_SDA | PB10 |
| 串口 | 串口1 |
main.c文件
#include "stm32f10x.h"
#include "led.h"
#include "usart.h"
#include "delay.h"
#include "oled.h"
#include "adcx.h"
#include "timer.h"/*****************辰哥单片机设计******************STM32* 项目 : PulseSensor心率传感器实验 * 版本 : V1.0* 日期 : 2024.8.19* MCU : STM32F103C8T6* 接口 : 参看ADCX.h * BILIBILI : 辰哥单片机设计* CSDN : 辰哥单片机设计* 作者 : 辰哥 **********************BEGIN***********************/extern _Bool Timer_Flag ; //时间到 标准位
extern _Bool update_flag; //更新标志变量//要写入到STM32 FLASH的字符串数组
u8 TEXT_Buffer[]={"0000000"};
#define SIZE sizeof(TEXT_Buffer) //数组长度
//#define FLASH_SAVE_ADDR 0X08020000 //设置FLASH 保存地址(必须为偶数,且其值要大于本代码所占用FLASH的大小+0X08000000)
#define FLASH_SAVE_ADDR 0X0800f400 //设置FLASH 保存地址(必须为偶数,且其值要大于本代码所占用FLASH的大小+0X08000000)int main(void)
{ unsigned char p[16]=" ";u8 datatemp[SIZE]; _Bool Heart_OK = 0; //读取到正确心率标志位unsigned char Heart = 0; //心率值SystemInit();//配置系统时钟为72M delay_init(72);LED_Init();LED_On();NVIC_PriorityGroupConfig(NVIC_PriorityGroup_3);//设置中断优先级分组为组3:2位抢占优先级,2位响应优先级USART1_Config();//串口初始化OLED_Init();printf("Start \n");delay_ms(1000);//显示“血氧:”OLED_ShowChinese(0,0,0,16,1);OLED_ShowChinese(16,0,1,16,1);OLED_ShowChar(32,0,':',16,1);ADCx_Init();TIM3_Int_Init(1999,71); //定时2ms中断TIM2_Int_Init(199,7199); //10Khz的计数频率,计数到500为20ms // while (1)
// {
// LED_Toggle();// printf("光照强度: %d\r\n",light);
//
// OLED_ShowNum(80,0,light,3,16,1);// delay_ms(500);
// }while(1){ if(Timer_Flag==1) //500ms到 读取数据{Timer_Flag = 0; //清除标志TIM_ITConfig(TIM2,TIM_IT_Update,DISABLE ); //使能指定的TIM3中断,允许更新中断TIM_ITConfig(TIM3,TIM_IT_Update,DISABLE ); //使能指定的TIM3中断,允许更新中断 delay_ms(500);TIM_ITConfig(TIM2,TIM_IT_Update,ENABLE ); //使能指定的TIM3中断,允许更新中断TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE ); //使能指定的TIM3中断,允许更新中断TIM_Cmd(TIM2, ENABLE); //使能TIMx if (QS == true) //读取到了心率信号{ QS = false; //清除标志 等待下一次读取if(BPM>HEART_MIN_ERROR&&BPM<HEART_MAX_ERROR) //读取到的值再正常心率区间 40-160内{Heart_OK = 1; //标志位置一Heart = BPM; //心率传递给Heart}else{Heart_OK = 0; //标志位清零Heart = 0; //设置为0} }}delay_ms(20); if(Heart_OK==1) //读取到正确心率{OLED_ShowNum(40,0,Heart,3,16,1);}else{OLED_ShowString(32,0,":---r/min",16,1);}}
}
adcx.h文件
#ifndef _ADCX_H_
#define _ADCX_H_
#include "stm32f10x.h" // Device header/*****************辰哥单片机设计******************STM32* 项目 : PulseSensor心率传感器实验 * 版本 : V1.0* 日期 : 2024.8.19* MCU : STM32F103C8T6* 接口 : 参看ADCX.h * BILIBILI : 辰哥单片机设计* CSDN : 辰哥单片机设计* 作者 : 辰哥 **********************BEGIN***********************/// ADC 编号选择
// 可以是 ADC1/2/3
#define ADCx ADC1
#define ADC_CLK RCC_APB2Periph_ADC1#define PulseSensor_GPIO_CLK RCC_APB2Periph_GPIOA
#define PulseSensor_GPIO_PORT GPIOA
#define PulseSensor_GPIO_PIN GPIO_Pin_0void ADCx_Init(void);
u16 Get_Adc(u8 ch);
u16 Get_Adc_Average(u8 ch,u8 times); #endif
adc.c文件
#include "adcx.h"
#include "delay.h"/*****************辰哥单片机设计******************STM32* 项目 : PulseSensor心率传感器实验 * 版本 : V1.0* 日期 : 2024.8.19* MCU : STM32F103C8T6* 接口 : 参看ADCX.h * BILIBILI : 辰哥单片机设计* CSDN : 辰哥单片机设计* 作者 : 辰哥 **********************BEGIN***********************///初始化ADC
//这里我们仅以规则通道为例
//我们默认将开启通道0~3
void ADCx_Init(void)
{ ADC_InitTypeDef ADC_InitStructure;GPIO_InitTypeDef GPIO_InitStructure;RCC_APB2PeriphClockCmd(PulseSensor_GPIO_CLK|ADC_CLK,ENABLE);RCC_ADCCLKConfig(RCC_PCLK2_Div6);//PA0GPIO_InitStructure.GPIO_Pin=PulseSensor_GPIO_PIN;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AIN;GPIO_Init(PulseSensor_GPIO_PORT,& GPIO_InitStructure);ADC_DeInit(ADCx);ADC_InitStructure.ADC_Mode = ADC_Mode_Independent; //ADC工作模式:ADCx和ADC2工作在独立模式ADC_InitStructure.ADC_ScanConvMode = DISABLE; //模数转换工作在单通道模式ADC_InitStructure.ADC_ContinuousConvMode = DISABLE; //模数转换工作在单次转换模式
//ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None; //转换由软件而不是外部触发启动ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_T3_TRGO;//选择TIM3作为外部触发源ADC_InitStructure.ADC_DataAlign= ADC_DataAlign_Right; //ADC数据右对齐ADC_InitStructure.ADC_NbrOfChannel = 1; //顺序进行规则转换的ADC通道的数目ADC_Init(ADCx, &ADC_InitStructure); ADC_ExternalTrigConvCmd(ADCx,ENABLE);//采用外部触发ADC_RegularChannelConfig(ADCx, ADC_Channel_0, 1, ADC_SampleTime_239Cycles5);//adc转换时间21usADC_Cmd(ADCx, ENABLE);ADC_ResetCalibration(ADCx); //复位校准while(ADC_GetResetCalibrationStatus(ADCx)); //等待校准结束,校准结束状态为RESETADC_StartCalibration(ADCx); //AD校准while(ADC_GetCalibrationStatus(ADCx)); //等待校准结束 }
//获得ADC值
//ch:通道值 0~3
u16 Get_Adc(u8 ch)
{//设置指定ADC的规则组通道,一个序列,采样时间ADC_RegularChannelConfig(ADCx, ch, 1, ADC_SampleTime_239Cycles5 ); //ADCx,ADC通道,采样时间为239.5周期 ADC_SoftwareStartConvCmd(ADCx, ENABLE); //使能指定的ADCx的软件转换启动功能 while(!ADC_GetFlagStatus(ADCx, ADC_FLAG_EOC ));//等待转换结束return ADC_GetConversionValue(ADCx); //返回最近一次ADCx规则组的转换结果
}u16 Get_Adc_Average(u8 ch,u8 times)
{u32 temp_val=0;u8 t;for(t=0;t<times;t++){temp_val+=Get_Adc(ch);delay_ms(5);}return temp_val/times;
}
四、实验效果

五、资料获取
项目分享
相关文章:
PulseSensor心率传感器详解(STM32)
目录 一、介绍 二、传感器原理 1.接线图 2.引脚描述 3.工作原理:光电容积法原理 4.工作原理:心率采样数据处理算法 三、程序设计 main.c文件 adcx.h文件 adc.c文件 四、实验效果 五、资料获取 项目分享 一、介绍 PulseSensor传感器是一种基…...
NISP 一级 | 3.1 网络基础知识
关注这个证书的其他相关笔记:NISP 一级 —— 考证笔记合集-CSDN博客 0x01:Internet 和 TCP/IP 协议 因特网(Internet)通过 TCP/IP 协议将遍布在全世界各地的计算机互联,从而形成超级计算机网络。因特网为用户提供了非…...
模拟网络丢包常用方法以及工具
文章目录 背景常用方法代码实现使用方法测试代码 使用网络流量控制工具 常用工具Clumsy 背景 在软件开发过程中,经常需要模拟不同的网络环境来测试应用在不同条件下的表现。 这些模拟可以采用多种方式进行,包括在代码中实现随机丢包、随机延时、乱序&am…...
ABC 370 E - Avoid K Partition
原题链接:E - Avoid K Partition 题意:给长度为n的数组,将数组划分成任意份,但是每一份的总和都不能是k,问有多少种分割方法。 思路:dp,f[i],代表前i个元素满足题意的划分的总和&a…...
C++: set与map容器的介绍与使用
本文索引 前言1. 二叉搜索树1.1 概念1.2 二叉搜索树操作1.2.1 查找与插入1.2.2 删除1.2.3 二叉搜索树实现代码 2. 树形结构的关联式容器2.1 set的介绍与使用2.1.1 set的构造函数2.1.2 set的迭代器2.1.3 set的容量2.1.4 set的修改操作 2.2 map的介绍与使用2.2.1 map的构造函数2.…...
单片机-STM32 看门狗(八)
目录 一、看门狗概念 1、定义: 二、单片机中的看门狗 1、功能描述: 2、看门狗设置部分 预分频寄存器(IWDG_PR) 3、窗口看门狗 特性: 4、看门狗配置: 一、看门狗概念 看门狗--定时器(不属于基本定时器、通用定…...
iOS 18.1将上线新功能,可惜这波国内的小伙伴无缘了
在科技巨头苹果持续推动其生态系统全球化的进程中,最新的iOS 18.1、iPadOS 18.1及macOS 15.1开发者测试版发布,不仅为开发者们带来了新功能的预览,还悄然间对Apple智能功能的地区限制进行了微妙而重要的调整。 这一变化,虽看似细…...
MySQL中DML操作(二)
默认值处理(DEFAULT) 在MySQL中可以使用DEFAULT为列设定一个默认值。如果在插入数据时并未指定该列的值,那么MySQL将默认值添加到该列中。 创建表时指定列的默认值 CREATE TABLE 表名(列名 类型 default 默认值......); 示例:…...
LLMs技术 | 整合Ollama实现本地LLMs调用
前言 近两年AIGC发展的非常迅速,从刚开始的只有ChatGPT到现在的很百家争鸣。从开始的大参数模型,再到后来的小参数模型,从一开始单一的文本模型到现在的多模态模型等等。随着一起进步的不仅仅是模型的多样化,还有模型的使用方式。…...
【C-实践】文件服务器(3.0)
文件服务器1.0文件服务器2.0文件服务器4.0 概述 使用了 tcp epoll 线程池 生产者消费者模型,实现文件服务器 有两个进程,主进程负责接收退出信号用来退出整个程序;子进程负责管理线程池、客户端连接以及线程池的退出 子进程中的主线程生…...
LeetCode 2181.合并零之间的节点
题目描述 给你一个链表的头节点 head ,该链表包含由 0 分隔开的一连串整数。链表的 开端 和 末尾 的节点都满足 Node.val 0 。 对于每两个相邻的 0 ,请你将它们之间的所有节点合并成一个节点,其值是所有已合并节点的值之和。然后将所有 0 …...
千益畅行,共享旅游卡,引领旅游新潮流
千益畅行旅游卡是一款专为旅游爱好者打造的超值卡片。它就像一把神奇的钥匙,为您打开国内丰富多彩的旅游世界。 我们的旅游卡拥有众多令人惊喜的特点。首先,它涵盖了国内 40 多条精心策划的旅游线路,无论您是向往历史文化名城的厚重底蕴&…...
K均值聚类
根据到给点样本的距离,来聚类。 1.曼哈顿距离、 2.欧几里得距离 直线距离 3.切比雪夫距离 4.闵氏距离 5.余弦相似度 对数据大小/长度等不关注,只关注相似度。 6.汉明距离 二进制距离 二、密度聚类 DBSCAN 前提是样本是根据紧密程度分布的。 先用超参…...
【Ubuntu】安装常用软件包
安装java 直接输入java,如果没有安装的话会提醒你输入命令安装,类似 Command java not found, but can be installed with: sudo apt install jdkxxxxxxxxxxxxxx然后选一个版本安装就好,我这里选的jdk17,安装完确认一下 ubuntuVM-4-13-ubu…...
探索全光网技术 | 全光网产品解决方案整理-(宇洪科技)
探索全光网技术 |全光网产品解决方案整理-宇洪科技 目录 一、数据中心场景1、方案概述2、方案需求3、相关产品4、产品推荐5、方案价值 二、教育场景1、方案概述2、方案需求3、相关产品4、方案价值 三、医疗场景1、方案概述2、方案需求3、相关产品4、方案价值 注:本文…...
资料分析(2)
C B 增长量不变就是1002020 上面是利滚利:按照20%当利息 本题:涨跌幅度的意思就是增长率,本题是按照增长率不变的情况下进行计算D B 7551400X>1.2*100000 B B B 总体增量部分增量之和 先进行计算固定通信业务收入的增长量移动通信业务实现收入的增长量 增长量现期…...
百元以下蓝牙耳机性价比之王品牌?四大高能性价比机型推荐
面对市场上琳琅满目的蓝牙耳机品牌和型号,消费者往往难以抉择,特别是当预算限定在百元以下时,找到一款既满足基本功能又具备一定品质的蓝牙耳机变得尤其困难,那么百元以下蓝牙耳机性价比之王品牌?尽管价格是一个重要的…...
考场考生行为检测数据集 7000张 带标注 voc yolo
数据集名称: 考场考生行为检测数据集 数据集规模: 图像数量:7000张标注类型:行为检测(例如:作弊、玩手机、睡觉等)格式兼容性:支持VOC和YOLO标注格式 数据集内容: 该…...
深度学习算法,该如何深入,举例说明
深度学习算法的深入学习可以从理论和实践两个方面进行。理论上,深入理解深度学习需要掌握数学基础(如线性代数、概率论、微积分)、机器学习基础和深度学习框架原理。实践上,可以通过实现和优化深度学习模型来提升技能。 理论深入…...
舵机的原理及应用
舵机是一种位置(角度)伺服的驱动器,主要由外壳、电机、减速齿轮组、位置传感器和控制电路等部分组成。一、工作原理 舵机的工作原理是控制电路接收信号源的控制信号,并将其转换为电流信号,驱动电机转动。电机通过减速齿轮组带动输出轴…...
【Axure高保真原型】引导弹窗
今天和大家中分享引导弹窗的原型模板,载入页面后,会显示引导弹窗,适用于引导用户使用页面,点击完成后,会显示下一个引导弹窗,直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…...
屋顶变身“发电站” ,中天合创屋面分布式光伏发电项目顺利并网!
5月28日,中天合创屋面分布式光伏发电项目顺利并网发电,该项目位于内蒙古自治区鄂尔多斯市乌审旗,项目利用中天合创聚乙烯、聚丙烯仓库屋面作为场地建设光伏电站,总装机容量为9.96MWp。 项目投运后,每年可节约标煤3670…...
【论文笔记】若干矿井粉尘检测算法概述
总的来说,传统机器学习、传统机器学习与深度学习的结合、LSTM等算法所需要的数据集来源于矿井传感器测量的粉尘浓度,通过建立回归模型来预测未来矿井的粉尘浓度。传统机器学习算法性能易受数据中极端值的影响。YOLO等计算机视觉算法所需要的数据集来源于…...
VTK如何让部分单位不可见
最近遇到一个需求,需要让一个vtkDataSet中的部分单元不可见,查阅了一些资料大概有以下几种方式 1.通过颜色映射表来进行,是最正规的做法 vtkNew<vtkLookupTable> lut; //值为0不显示,主要是最后一个参数,透明度…...
佰力博科技与您探讨热释电测量的几种方法
热释电的测量主要涉及热释电系数的测定,这是表征热释电材料性能的重要参数。热释电系数的测量方法主要包括静态法、动态法和积分电荷法。其中,积分电荷法最为常用,其原理是通过测量在电容器上积累的热释电电荷,从而确定热释电系数…...
算法岗面试经验分享-大模型篇
文章目录 A 基础语言模型A.1 TransformerA.2 Bert B 大语言模型结构B.1 GPTB.2 LLamaB.3 ChatGLMB.4 Qwen C 大语言模型微调C.1 Fine-tuningC.2 Adapter-tuningC.3 Prefix-tuningC.4 P-tuningC.5 LoRA A 基础语言模型 A.1 Transformer (1)资源 论文&a…...
浪潮交换机配置track检测实现高速公路收费网络主备切换NQA
浪潮交换机track配置 项目背景高速网络拓扑网络情况分析通信线路收费网络路由 收费汇聚交换机相应配置收费汇聚track配置 项目背景 在实施省内一条高速公路时遇到的需求,本次涉及的主要是收费汇聚交换机的配置,浪潮网络设备在高速项目很少,通…...
uniapp手机号一键登录保姆级教程(包含前端和后端)
目录 前置条件创建uniapp项目并关联uniClound云空间开启一键登录模块并开通一键登录服务编写云函数并上传部署获取手机号流程(第一种) 前端直接调用云函数获取手机号(第三种)后台调用云函数获取手机号 错误码常见问题 前置条件 手机安装有sim卡手机开启…...
iview框架主题色的应用
1.下载 less要使用3.0.0以下的版本 npm install less2.7.3 npm install less-loader4.0.52./src/config/theme.js文件 module.exports {yellow: {theme-color: #FDCE04},blue: {theme-color: #547CE7} }在sass中使用theme配置的颜色主题,无需引入,直接可…...
Bean 作用域有哪些?如何答出技术深度?
导语: Spring 面试绕不开 Bean 的作用域问题,这是面试官考察候选人对 Spring 框架理解深度的常见方式。本文将围绕“Spring 中的 Bean 作用域”展开,结合典型面试题及实战场景,帮你厘清重点,打破模板式回答,…...
