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

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.lryc.cn/news/2396533.html

相关文章:

  • 项目练习:element ui 的icon放在button的右侧
  • 性能诊断工具AWR配置策略与报告内容解析
  • Tailwind CSS 实战,基于 Kooboo 构建 AI 对话框页面(三):实现暗黑模式主题切换
  • OleDbParameter.Value 与 DataTable.Rows.Item.Value 的性能对比
  • Unity3D ET框架游戏脚本系统解析
  • 函数的定义、调用、值传递、声明、非安全函数
  • MySQL 8.0 OCP 英文题库解析(十一)
  • 机器学习算法-k-means
  • ADQ36-2通道2.5G,4通道5G采样PXIE
  • LLM:decoder-only 思考
  • 数字创新智慧园区建设及运维方案
  • 【科研绘图系列】R语言绘制森林图(forest plot)
  • Springcloud Alibaba自定义负载均衡详解
  • 深度学习---负样本训练
  • SpringAI+DeepSeek大模型应用开发实战
  • 【Python Cookbook】文件与 IO(一)
  • STM32 HAL库函数学习 GPIO篇
  • 如何以 9 种方式将照片从 iPhone 传输到笔记本电脑
  • 根据jvm源码剖析类加载机制
  • Mixly1.0/2.0/3.0 (windows系统) 安装教程及使用常见问题解决
  • DDS通信中间件——DDS-TSN规范
  • JWT安全:弱签名测试.【实现越权绕过.】
  • MATLAB实现井字棋
  • Baklib知识中台加速企业服务智能化实践
  • 在AIX环境下修改oracle 11g rac的IP地址
  • VMware Tools 手动编译安装版
  • android平台驱动开发(六)--Makefile和Kconfig简介
  • 【手写系列】手写线程池
  • python学习打卡day40
  • redis高并发问题