当前位置:首页 期刊杂志

从Arduino心跳波形仪到树莓派律动灯带

时间:2024-05-18

牟晓东

在开源硬件编程中有时会使用到一种叫作“心跳检测”的模块,它是一种通过手指来侦测心跳的传感器,常见的型号为HW-487光遮断传感器,也就是“对射遮断式光电开关传感器”(如图1)。

心跳检测模块是采用超亮红外(IR)LED灯和光敏三极管来探测手指脉搏信号的(检测时需要将手指放置于二者之间),一侧的LED灯发光(不可见的红外线)透过手指后被另一侧的光敏三极管接收,由于心跳血压脉动使得手指的血存量不断发生变化,因此最终在光敏三极管处所接收到的光通量也会随之变化,从而引起电阻产生微小变化,这样就可以大体检测到人体的心跳变化情况。值得一提的是,在使用心跳检测模块进行测试时最好是将它放置于一个较为封装的黑暗空间内(比如用一个盒子扣住),因为要尽可能地屏蔽环境光对光敏三极管的影响。

Arduino简易心跳波形仪实现的功能是在电脑屏幕上实时显示出被测试者心跳的波形图。

实验器材包括ArduinoUNO主板一块,HW-487光遮断传感器一个,红色LED灯一支,杜邦线若干。首先,将LED灯的长腿直接插入Arduino的13号引脚,短腿则插入相邻的GND接地引脚;接着,通过杜邦线将光遮断传感器的VCC正极、GND接地端和S信号端分别连接至Arduino的3.3V、GND引脚和A0模拟引脚;最后,给Arduino连接好数据线(如图2)。

在Arduino的IDE代码编程界面中,先定义好红色LED灯连接的13号引脚:“int Red_LED_pin = 13;”;接着,在setup()函数中进行三处设置:一是将串口波特率设置为115200:“Serial.begin(115200);”,二是将LED灯设置为输出工作模式:“pinMode(Red_LED_pin,OUTPUT);”,三是將光遮断传感器连接的A0模拟引脚设置为输入工作模式:“pinMode(A0,INPUT);”。

在loop()函数中,先将光遮断传感器的模拟输入信号在串口进行输出:“Serial.println(analogRead(A0));”;然后建立一个选择分支结构,其判断条件是“if(analogRead(A0)>=510)”,注意此处的“510”可根据实验测试时产生的数据来重新修改设置,条件成立的话则控制插接在13号引脚的红色LED发光:“digitalWrite(Red_LED_pin,HIGH);”;接着,延时20毫秒:“delay(20);”,再关闭红色LED灯:“digitalWrite(Red_LED_pin,LOW);”。

将程序保存为“Detect_Heart.ino”,点击“上传”按钮进行测试,注意要点击“工具”菜单打开“串口绘图器”窗口,并且在左下角将波特率设置为115200。此时,在Arduino的串口绘图器窗口就开始有数据产生,一小段时间后就会出现有规律的“心跳”波形(类似于医院的心电图),而且根据程序中所设定的阈值(510)不同会在波形的“波峰”出现时点亮红色LED灯,一闪一闪的频率与被测试者的心跳基本上是吻合的(如图3)。

受光遮断传感器的数据精度所限,该简易心跳波形仪并不能完全反映出被测试者真实心跳的医学状况,比如产生的波形“杂乱”部分并非说明被测试者有“心律不齐”等异常情况,有时手指按动的压力不同或是环境光的快速变化等都会导致波形有较大的波动。

同样是利用光遮断传感器的探测手指脉搏信号功能,在树莓派中将其作为灯带的驱动信号,就会很方便地设计制作出心跳律动灯带,实现灯带的灯珠随被测试者的心跳进行实时动态点亮与熄灭的心跳律动酷炫效果。

实验器材包括树莓派3B+主板和古德微扩展板各一块,模数转换器一个,光遮断传感器一个,灯带一条,杜邦线若干。首先,将古德微扩展板正确安装于树莓派上;接着,将灯带的输入端三根引线插入扩展板的18号引脚,注意灯带的VCC、GND和信号端一定要与扩展板的引脚标注一一对应;然后,将模数转换器插入扩展板的UP列,同样要注意各个引脚的标注要与扩展板正确对应;光遮断传感器同样也要使用杜邦线引出VCC正极、GND接地端和S信号端,插入扩展板的24号引脚,分别对应VCC、GND和A0端;最后,给树莓派通电,启动操作系统(如图4)。

在浏览器中访问古德微机器人网站,登录账号后进入“积木”图形化编程界面。首先,通过“设置GPIO”模块对灯带进行初始化操作:“可控制灯带60个灯并设置亮度为50”;接着,建立一个“重复当‘真’”的循环结构,新建变量“传感器原始值”并为其赋值“从ADS‘0’获取模拟信号”,注意它的数据区间与在Arduino的IDE中进行代码编程不同,而是在0-32767之间;再新建变量“心跳值”,通过“取整”和“映射”两个模块对变量传感器原始值进行处理和赋值,经测试后发现在某环境光条件下的传感器原始值较为灵敏的数据区间是18000-24000,因此将它映射为灯带的第0-59号灯珠;接下来,通过两个“输出调试信息”模块将两个变量的数据在LOG调试信息区输出,并且通过两个循环分别控制灯带进行亮灯(红色)和熄灭,实现将光遮断传感器的数据映射为对应某些数量的灯珠发光的效果;最后,添加延时等待0.02秒模块。

将程序保存为“心跳律动灯带”,连接设备后点击“运行”按钮进行测试。随着被测试者有规律的心跳,灯带会对应亮起不同数目的灯珠,非常有意思,类似于常见的跟随音乐音量大小而不断变化的串形指示灯律动效果(如图5)。

大家不妨一试。

免责声明

我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自各大过期杂志,内容仅供学习参考,不准确地方联系删除处理!