技术文档

单片机脉搏测量仪 小项目:单片机控制脉搏心电测量仪 含程序 原理图及仿真文件

小编 2024-10-09 技术文档 23 0

小项目:单片机控制脉搏心电测量仪 含程序 原理图及仿真文件

各位小伙伴大家好,考研的事总算告一段落了,最近有点难受去医院一查,呀,好像有点神经衰弱,干什么都有点力不从心,热心的护士小姐姐给我测量了体温查看健康码一气呵成,然后顺利进入了医院。在医生给我测量脉搏和心跳率时用了一个小工具,我感觉蛮好玩的,就想能不能用51单片机来做一个简单的脉搏心率测试仪器呢,回到家说干就干,还真被我做成了,目前只是实现了基本的一些功能,我还在完善中,感兴趣的小伙伴和我一起来试试吧,

老规矩,先上实物图

单片机电路原理图如下:

示波器实测波形:

单片机控制脉搏测量仪的参考源代码:

#include <reg51.h>

unsigned char i,j,t,m,DelayTime,DispBuf[3];

//单片机脉搏测量仪源程序

//AUTHER

unsigned int n,mb;

unsigned char code

BitTab[3]={0xf7,0xef,0xdf};//位驱动码

unsigned char code

DispTab[10]={0x81,0xcf,0x92,0x86,0xcc,0xa4,0xa0,0x8f,0x80,0x84};//字形码

sbit P3_0=P3^0;

void delay(DelayTime);

main() //主程序

{

TMOD=0x01; //定时器T0工作于方式1

TH0=0xec;

TL0=0x78; //T0定时时间为5ms

IE=0X83; //开中断

IT0=1; //外部中断0为边沿触发方式

TR0=1; //开定时器T0

for(;;) //脉搏指示灯控制

{

if(P3_0==0)

{

delay(200);

P3_0=1;

}

}

}

external0() interrupt 0//外部中断服务程序

{

P3_0=0; //点亮指示灯

if(n==0)

mb=0;

else

mb=12000/n; //计算每分钟脉搏数

DispBuf[2]=mb%10;//取个位数

mb=mb/10;

DispBuf[1]=mb%10;//取十位数

DispBuf[0]=mb/10;//取百位数

n=0;

}

Timer0() interrupt 1//定时中断服务程序

{

TH0=0xec;

TL0=0x78;

t=BitTab[j];//取位值

P3=P3|0x38;//P3.3-P3.5送1

P3=P3&t; //P3.3-P3.5输出取出的位置

t=DispBuf[j];//取出待显示的数

t=DispTab[t];//取字形码

P1=t; //字型码由P3输出显示

j++; //j作为数码管的计数器,取值0-2,显示程序通过它确认显示哪个数码管

if(j==3)

j=0;

n++;

if(n==2000)//10秒钟测不到心率,n复位

n=0;

} 。。。。。。。

鉴于篇幅有限,只能写以上部分代码,不好意思写得有点长

最后,如果有什么意见或者建议欢迎直接给我留言,让我们共同学习一起进步,

如果需要完整的代码或设计文件,请在下方留言或者私信我,看到后会第一时间回复。

谢谢!

如果喜欢我的文章请评论转发加关注哦。

单片机实例分享,低成本快速心率测试仪

心率是人体的一个重要指标,人在安静或睡眠时心率减慢,运动时或情绪激动时心率加快。制作一个心率计,实时知道自己的心率,不仅是一件好玩儿的事,还可以对自己和家人的身体状况作一个了解。想不想跟我一起做一个超低成本却可以快速测试心率的装置?通过这个制作,收获的不只是心率计,还有动手能力的提升以及周围人好奇和羡慕的目光。

检测心率的方法主要有两大类。第一类是心动电流测量法。人体每次心跳都会产生心动电流,通过在身体固定部位放置电极可以捕获这个信号,其原理和心电图测量原理一致,所以这种方法的精确度最高,但是要想捕获并处理这种生物电流是稍微困难的,而且每次测量都需要粘贴电极,不太适合低成本自制。那有没有一种既简单又可靠的测量方式呢?

当然有啦,第二类测量方式就是光电透射测量法。顾名思义,这种方法是通过光线来测量的。它利用血管内血液血红蛋白吸光度的变化来测量脉搏,换言之,当心脏搏动后,你的手指会充血,这会导致手指的透光性变差。将红外线发射管和接收管分别放置在手指两侧,使其感知这微弱的光线变化,即可测量心率。这种方法的优点是测量简单,无需粘贴电极,而且不需要高昂的制作费用,原理易懂。但是在接受测量的时候,必须要在安静的环境下进行。如果手指有轻微的摆动会直接对光线造成影响,引起错误计数。不过我在这个制作项目的程序里做了相应的改进,可以在一定范围内控制这种误判。

这款心率计所有的元器件都容易购得,且价格低廉(见图27.1),整体成本完全可以控制在30元以内,可实现实时读取心率的作用。采用现在最普遍的51单片机,程序通俗易懂。对于以前从来没有接触过运算放大器的朋友,这个制作可以让你初步领略到运算放大器的用武之地,将课本上生硬的知识应用到实际中来。

图27.1 实物图

硬件原理

我们来看看图27.2所示的电路原理图。你会发现元器件并不多。的确如此,随着半导体技术的发展,电路装置越来越小型化,功耗也更低。运算放大器(简称“运放”)是具有代表性的元器件之一。它是具有很高放大倍数的电路单元,集成在芯片上,由于早期应用于模拟计算机中,用以实现数学运算,故得名“运算放大器”。正是由于这种元器件的诞生,电路简洁化成为了可能。

图27.2 电路原理图

这款制作我们使用的运放型号为LM324(见图27.3),由结构图可知,一个芯片集成了4个相互独立且相同的运放,你可以根据布线需要合理安排。红外接收管接收到杂乱的信号,经过C3进行预处理,抑制掉一部分杂波(高频交流信号可以很容易通过电容而导入GND)。经过C4耦合,抛去了信号中的直流分量,仅保留交流分量。现在我们来逐一分析电路图中4个运放的作用。

图27.3 LM324 运算放大器

IC2A是一个电压跟随电路,它将运放的输出端与反相端相连,使输出端的信号直接反馈回反相端,导致最终该运放的输出端的电压只受同相端的控制,且输出电压与同相端相同。由R10和R11相同可知,输出电压为4.5V。也许有人会问,既然电压相同何必要这么麻烦地连接一个运放。那是因为运放的输出电阻较低,有一定的电流驱动能力,使电压不易随电流的改变而变化。这个电压的作用是把C1输出的信号平衡在4.5V上下,同时再提供到反相端,反相端与同相端进行差模放大,使信号更加可靠。IC2B是整个电路最重要的部分,它肩负的任务是滤除高频杂波,放大低频信号。

将示波器的表笔接到该运放的同相端,波形如图27.4所示。实际应用中杂波很多,脉搏容易被掩盖在其中。再将表笔接到运放输出端,波形如图27.5所示,高频杂波被完全抑制,经过R4和R5的反馈作用,脉搏信号被放大了500倍,达到2V左右,是不是很神奇?IC2C的重要性仅次于IC2B,该运放肩负着电压比较的作用。因为该运放没有反馈电路,所以当同相端电压大于反相端时,输出端将输出电源电压(9V);当同相端电压小于反相端,输出端会输出0V。整个电路调试的重点就是这里,通过调节R6,改变反相端的电压,将图27.5的波形调整成方波,输出如图27.6(黄色线为输入,蓝色线为输出)所示的波形。IC2D的作用就简单了,它只是将上一级的方波进行反相处理,因为单片机中断的方式为下降沿,需要在心脏起搏瞬间接受一个下降沿来计数(IC2D也可以省略,将IC2C的两个输入端反接即可)。

图27.4

图27.5

图27.6

单片机的作用是用来测量脉搏的间隔,以计算出每分钟的心跳次数,这个制作用1602液晶屏作为显示器,你也可以改改程序,用三位数码管来显示。

程序流程及算法

上电后,显示LOGO(在程序里你可以随便改),然后显示操作提示。单片机定时器中断用来标定时间,心跳脉冲引发外部中断。在外部中断子程序里,会计算每两次外部中断的时间间隔,用1min除以这个时间间隔得到心率。另外,为了抑制手指颤动带来的错误计算结果,程序判断计算结果如果大于190,会抛弃这个数据,并用上一次结果代替。为使读数更加平稳,每次显示的数据为前4次心率的平均值。如果系统10s后没有接收到脉冲,会显示操作提示,直至接收到脉冲为止。我已将程序进行详细标注,欢迎读者下载后进行改进和学习参考。

电路调试与制作

建议不要直接往电路板上焊接,有条件的话,最好在面包板上先搭建一下,因为模拟电路十分敏感,图纸上的元器件参数不一定适合你的制作,比如红外对管之间的距离或性能不同,所选用的电阻R4就要相应调整。提前搭建一下电路有利于确定更合理的元件参数。同时,最好准备一台示波器,模拟电路的调试毕竟不同于数字电路,信号的每一次变化代表的意义都很重要。没有示波器,调试电路就好比蒙上眼睛摸墙,当然,如果你制作得足够顺利,可能一次就成功而不需要示波器了。

首先,检测IC2A的输出电压,若电压不是约为电源电压一半的话,请仔细检查这个部分有没有接错,R10和R11是否连接正确。接下来检测IC2B,将示波器探头连接到IC2B输出端,然后将任意一根手指放在对管之间,波形应接近图27.5所示,输出端维持在9V,说明反馈电路有问题,导致放大倍数过高,仔细检查R3、R4、R5。若波形杂波严重,检查C5。因为不同人制作时对管的距离不同,对管参数也有差异,所以信号电压会不同。用示波器检测信号,如果波峰电压值太低的话(建议波峰接近2V),需要适当降低R4的阻值来提高信号放大倍数。这一环节成功后,将示波器的另一路表笔接到IC2C的输出端,同时检测两路波形,适当调整两个波形的纵轴位置,使其相交(见图27.6),两波形交点代表阈值点,通过调节R6改变阈值点的高低,使这个阈值点定位在R波波峰以下和T波波峰以上的区间内(如图27.7所示)。

图27.7

再测试一下IC2D输出端,如果在心脏波动瞬间产生下降沿,则模拟部分调试完毕,否则请仔细检查,切记R4的阻值不能太小,否则会因为放大系数太大,导致振荡,影响单片机计数与电路的整体稳定性。

至此,整个制作环节中最敏感的部分已经搭建完成。接下来的工作就是将确定下来的电路移接到洞洞板或者自己腐刻的电路板上。单片机部分一般不需要提前搭建,直接往电路板上焊接就好,出错概率很低。一定要看清电路图,单片机和液晶屏的输入电压和运算放大器是不同的,切勿马虎大意接在一起。液晶屏的对比度通过R13来调节。我制作的电路实物见图27.8、图27.9,可供参考。

图27.8 制作完成的电路

图27.9 侧视图

使用方法

将9V(12V也可以)电源连接好以后,按下电源开关,这时候会显示Logo,大约5s以后进入工作状态,此时你只需很放松地将手指头放在固定的红外线发射管和接收管之间就可以了,切记一定要放松,手指不要紧张。只需经过大约四五秒,该装置即可进入正常工作状态,你会看到指示灯跟着心跳闪烁,液晶显示屏上显示出此刻你的心率。只要手指不颤动,误差会很小,读数是很可靠的。图27.10、图27.11所示为实际测试效果。

图27.10 显示情况

图27.11 实际测试效果

外壳制作

电路都弄好了,何不做一个外壳来美化一下呢?兴许你有更好的开槽工具,那太好了!否则就和我一样,用电钻和电烙铁来开槽吧。为了精确,可以上网找液晶屏的技术手册,里面有详细的尺寸标注。根据它,你可以在电脑里精确绘制钻孔和开凿模板,打印出来贴在外壳上,剩下的工作就不用我多说了,仔细切割就好。最终效果图27.12所示。

最后祝广大读者身体健康!

图27.12 最终外观

相关问答

单片机 中时钟是指什么?

时钟是单片机的脉搏,是单片机的驱动源,使用任何一个外设都必须打开相应的时钟。这样的好处是,如果不使用一个外设的时候,就把它的时钟关掉,从而可以降低系统...

大佬们 有没有谁知道!电池容量 测量仪 原理是什么?

水分测量仪应用于卡尔弗休微库仑指示剂分析原理,以双铂电极检测指示剂过程,以单片机掌控测量和电解及数据处理,并自动打印机参数和测量结果。仪器具...

你好,我也在弄 脉搏 心率计,用的是sc0073压力传感器,你能帮...

[最佳回答]SC0073可以测到脉搏信号,效果还不错!可以通过滤波放大得到明显信号,在输入单片机进行控制!得到一分钟脉搏跳动次数!SC0073可以测到脉搏信号,效果还...

智能体温手环哪个好

红外传感器,传感器感应来自体表的温度,手环只需要一秒便能准确测量出体表的温...手环测量的体温通过蓝牙传送到APP上,打开APP可随时查看任一时间段...

智能体温手环哪个牌子好教期待大神解答

要一秒便能准确测量出体表的温...手环测量的体温通过蓝牙传送到APP上,打开APP可随时查看任一时间段的体温曲线,此外,当体温超过正常值时,手环发送...

主板总线时钟,芯片,问题?频率,发生器,主板诊断卡?

时钟芯片在一个14.314的晶振旁边没有什么又叫频率发生器之说。总线时钟频率以MHz为单位,工作频率越高则总线工作速度越快,也即总线带宽越宽。SPI总线时钟极...

麻烦请教各位!智能体温手环测温准吗

[回答]优特卡尔宝宝智能体温手环是目前市面上测温速度准且快、佩戴舒适的智能体温监护系统,并获得多项相关专利。目前主流的智能测温手环仅能对该手环的...

麻烦请教各位!智能体温手环测温准吗

基于蓝牙的STM32单片机智能手环脉搏心率计步器体温显示设计开发商品有多个颜色,尺寸,规格,易购价685.50元目前主流的智能测温手环仅能对该手环的佩...

做大厂程序员,是一种怎样的体验?

感谢悟空长老邀请~大厂程序员是一种怎样的体验?作为程序员的我来说说我个人的感受和看法~我会从工作模式、福利待遇、工作流程等几个方面来说一下。工作大厂...

猜你喜欢