当前位置: 首页 > backend >正文

stm32 + ads1292心率检测报警设置上下限

        这个项目是在做心率检测的时候一个小伙伴提出来的,今年五一的时候提出来的想法,五一假期的时候没时间,也没心情做这个,就把这个事情搁置了,在月中做工作计划的时候,就把这个小项目排进来了,五一前做了硬件,程序一直没时间调试。正好其他项目做的不顺利,就搞一搞这种小玩意。

项目需求: 1、ads1292检测心率,在tft屏幕上显示波形和心率数值。

                   2、通过三个按键来设置心率范围,并在tft屏幕上显示

                   3、心率范围超过设置范围,蜂鸣器发生警报。

硬件:         1、单片机:stm32f103c8

                    2、ads1292 心率检测模块

                    3、心电信号发生器 

  单片机底板自己做的板子,ads1292模块和心电信号发生器均为芯科电子的。

ads1292检测模块:ads1292模块

心电发生器:心电信号发生器

整体效果

        整体程序写起来并不难,但断断续续也花了一天时间,按键逻辑和检测逻辑不难,反而是TFT显示部分的逻辑混乱了,该清屏的时候没有清掉,按键逻辑跟清屏逻辑冲突,导致按对应的按键显示的跟预期不一样。

设置界面

黄色字体部分为设置参数,分别设置心率的最大和最小值,通过最大最小值来改变检测范围。

设置界面主要是三个按键,一个设置按键,一个数值增加,一个数值减小。

程序中通过轮询来不断检测按键状态,就可以判断对应的电平。

这是设置按键的处理函数,其他按键处理方式相同,只需要改成对应按键即可。

	// 检测SET_KEY上升沿(从低到高)if(set_key_state && !set_key_last_state){// 延时消抖delay_ms(20);if(SET_KEY){// 处理SET_KEY按下事件if(current_mode == NORMAL_MODE){// 从正常模式进入设置模式(设置上限)Enter_SetMode();}else if(current_mode == SET_UPPER_MODE){// 从设置上限模式切换到设置下限模式current_mode = SET_LOWER_MODE;flash_flag = 1; Update_SetDisplay();}else if(current_mode == SET_LOWER_MODE){// 从设置下限模式保存设置并返回正常模式Save_Setting();current_mode = NORMAL_MODE;Update_SetDisplay();}}}

报警部分

报警部分主要是硬件电路,就是一个蜂鸣器,软件上主要是结合检测部分,做电平反转就可以了。

这部分主要是体现在检测心率的函数里

void Check_HeartRate(void)
{if(heart_rate > 0) // 确保心率值有效{if(heart_rate < hr_lower_limit || heart_rate > hr_upper_limit){// 心率超出范围,触发报警if(!alarm_triggered){alarm_triggered = 1;buzz_tick = sys_tick;buzz_state = 1;BUZZER = 1;}}else{// 心率在正常范围内,解除报警if(alarm_triggered){alarm_triggered = 0;BUZZER = 0;// 清除报警信息LCD_Fill(10,190,100,214,BLACK);}}}
}

   调试的时候用的是心电信号发生器,这个发生器心率范围可以在60-120bpm之间任意设置,就可以在心率心率范围外进行心率测试,当心率超过设置范围,蜂鸣器就会发生警报报警。

http://www.xdnf.cn/news/9904.html

相关文章:

  • 鸿蒙分辨率
  • TDengine 运维——巡检工具(安装前检查)
  • 【Redis】第3节|深入理解Redis线程模型
  • 3.1.1栈的基本概念
  • 德国GEMÜ 3020特价型号3020 25D 7 1 4P002 3600
  • Java面试:从Spring Boot到分布式系统的技术探讨
  • VirtualBox安装 Rocky
  • AI绘画:手把手带你Stable Diffusion从入门到精通(系列教程)
  • window11系统 使用GO语言建立TDengine 连接
  • LLaMaFactory - 支持的模型和模板 常用命令
  • unordered_map与map之间的区别和联系
  • SpringBoot 日志
  • ROS云课基础篇-02-C++-250529
  • 财管2 - 财务预测(内含增长率,可持续增长率)
  • [9-2] USART串口外设 江协科技学习笔记(9个知识点)
  • 20250529-C#知识:继承、密封类、密封方法、重写
  • Oracle 条件判断
  • <线段树>
  • 影楼精修-AI追色算法解析
  • FEMFAT许可的有效期限
  • 从融智学视角对决策态度进行定理级提炼,结合三标准数学建模
  • vue3: tmap (腾讯地图)using typescript
  • sudo apt-get update错误解决
  • Spring Boot+Activiti7入坑指南初阶版
  • 表单请求为什么需要进行 URL 编码?—详解application/x-www-form-urlencoded的正确用法
  • 从零开始的数据结构教程(五)​​动态规划(DP)
  • 数据结构 --- 顺序表
  • 安卓学习笔记-数据存储
  • [嵌入式实验]实验二:LED控制
  • Dynamics 365 Business Central AI Sales Order Agent Copilot