第1部分:用Raspberry Pi Zero和罗姆SensorMedal制作健康管理设备!
第2部分:根据传感器的值计算步数、距离和卡路里,并将数据发送到LINE!
大家好,我是吉田!
本文是制作旨在解决运动不足问题的健康管理设备项目的第三部分。这次我们将使用脉搏传感器来测量心率并将测量数据用于健康管理。
由于测量生物信息非常容易,因此可以让这些信息有很多用处。

本部分所需部件
Raspberry Pi Zero W

心率传感器

NeoPixel LED灯带

本部分的流程
1. 脉搏传感器及其使用方法
这次我决定使用脉搏传感器来测量运动时的心率。脉搏传感器是用来测量随着心脏跳动和泵血而增加或减少的血管体积变化的设备。这种传感器配有LED和数据接收IC,通过使LED光照指尖,可以检测从血管返回的光线情况。

首先,需要准备脉搏传感器和 Raspberry Pi Zero。

这个脉搏传感器与Raspberry Pi等相连接的引脚是Grove引脚(四个连接引脚组合在一起的引脚)。根据线缆颜色分别与Raspberry Pi的GND(黑色)和3.3V电源(红色)连接。作为GPIO,将黄色引脚部分与GPIO12相连接。

现在让我们编写一个程序来使这个脉搏传感器工作。当heart.py能像下面这样获得20秒的心率时,表明已经能够开始测量。
pi@raspizero:~/Programs $ sudo vi heart.py
---
#!/usr/bin/env python
import time
from collections import deque
import RPi.GPIO as GPIO
class HeartRateMonitor:
INTERRUPT_PIN = 12
MAX_DETECTED_TIMES_COUNT = 20
MAX_PULSE_INTERVAL = 2.0
def __init__(self):
GPIO.setmode(GPIO.BCM)
GPIO.setup(self.INTERRUPT_PIN, GPIO.IN)
self._init_array()
def _init_array(self):
self.detected_times = deque([])
def _calc_heart_rate(self):
return 1200.0 / (self.detected_times[-1] - self.detected_times[0])
def _interrupt(self):
self.detected_times.append(time.time())
if(len(self.detected_times) == 1):
return
interval = self.detected_times[-1] - self.detected_times[-2]
heart_rate = -1
if interval > self.MAX_PULSE_INTERVAL:
print('Heart rate measure error. Monitoring will restart!')
self._init_array()
return
if(len(self.detected_times) >= self.MAX_DETECTED_TIMES_COUNT):
heart_rate = self._calc_heart_rate()
self.detected_times.popleft()
print("HeartRate: {heart_rate}, Interval: {interval}".format(heart_rate = heart_rate, interval = interval))
def execute(self):
print('Please ready your heart rate monitor.')
time.sleep(3)
while True:
GPIO.wait_for_edge(self.INTERRUPT_PIN, GPIO.RISING)
self._interrupt()
if __name__ == '__main__':
monitor = HeartRateMonitor()
monitor.execute()
下面我们用夹子夹住指尖,测量一下心率吧。

运行程序并确认是否可以准确测量20秒左右的心率,确认可以后,即可显示59 BPS(每秒心率)或60 BPS等数据。

2. 根据心率和活动量点亮LED灯
确认能够测量心率后,我们需要连接LED并用光的颜色来显示相应的测量结果。如果心率过快,可能会收到警报。
这一次,我将使用名为“NeoPixel”的彩色LED灯带。这是一种接有多个LED的带状灯,您可以将其切割成任何您喜欢的尺寸来使用。这次我根据Raspberry Pi Zero的大小切割成了具有3个LED的灯带。

这种带状LED灯具有+5V、Din和GND引脚,分别与Raspberry Pi的5V、GPIO21和GND连接。

有关如何使用NeoPixel的详细介绍,可以参阅下面的Adafruit页面,并可以从中获取以下库和示例程序。
在示例程序中,由于与GPIO21连接而设置为“pixel_pin = board.D21”,由于LED的数量为3而设置为“num_pixels = 3”。
pi@raspizero:~/ $ sudo pip3 install adafruit-circuitpython-neopixel pi@raspizero:~/ $ sudo wget https://learn.adafruit.com/pages/10683/elements/3005652/download -O neopixels.py pi@raspizero:~/ $ sudo python3 neopixels.py
运行该示例程序,LED发出七种颜色的光。

为了使LED与心率联动,我们在前面的heart.py程序中添加以下描述,创建heart_pixels.py程序。下面的黄色部分是在原来的heart.py程序中添加NeoPixel代码的部分。
#!/usr/bin/env python
#coding: utf-8
import board
import neopixel
pixel_pin = board.D21
num_pixels = 3
ORDER = neopixel.GRB
pixels = neopixel.NeoPixel(pixel_pin, num_pixels, brightness=0.2, auto_write=False,
pixel_order=ORDER)
normal_rate= 60
high_rate = 100
import time
from collections import deque
…
print("HeartRate: {heart_rate}, Interval: {interval}".format(heart_rate = heart_rate, interval = interval))
if heart_rate > high_rate:
pixels.fill((255,0,0))
pixels.show()
time.sleep(0.1)
elif heart_rate > normal_rate:
pixels.fill((0,255,0))
pixels.show()
time.sleep(0.5)
elif heart_rate > 0:
pixels.fill((0,0,255))
pixels.show()
time.sleep(0.5)
else:
pixels.fill((255,255,255))
pixels.show()
pixels.fill((0,0,0))
pixels.show()
def execute(self):
...
当heart_pixels.py这个程序运行时,LED先是白色光闪烁,当心率超过一定水平(这里设置为100)时,会发出红色光并发出警报。

如果心率在60以上100以下,绿色灯闪烁。如果心率超过100,则会发出红色光和警报。
3. 让SensorMedal也同时运行
现在,让我们尝试让SensorMedal也可以同时运行。
为此,需要创建如下所示的shell脚本 (ble_steps_heart.sh)。nohup和&之间的部分将在后台运行。
#!/bin/bash nohup sudo python3 /home/pi/Programs/heart_pixels.py & sudo python3 /home/pi/Programs/ble_steps_line.py
下面,像“.ble_steps_heart.sh”一样运行程序,即可测量两者的值。

LED灯带会根据心率值发光,SensorMedal的数值还可以上传到LINE等系统。

将其做成手表式设备,将脉搏传感器戴在手指上并拿着SensorMedal,即可帮助您进行一天的健康管理了。

4. 总结
在这部分中,我们尝试了使用脉搏传感器来测量日常生活中的脉搏和心率。通过这部分的介绍,我想您应该已经可以使用Raspberry Pi轻松获取生物信息并进行查看了。
此外,在这部分中,我们还了解了可以同时运行SensorMedal并上传其测量结果。能够测量步数和心率,这个作品已经越来越像健康管理设备了。
在下一部分中,我想把现有的计步器和心率监测仪功能结合起来,完成更这款像可穿戴设备的作品。
敬请期待!
第1部分:用Raspberry Pi Zero和罗姆SensorMedal制作健康管理设备!
第2部分:根据传感器的值计算步数、距离和卡路里,并将数据发送到LINE!
第3部分:一款用Raspberry Pi和传感器制作的可穿戴式小型健康管理设备!(本章)
第4部分:连接显示器并完成这款可穿戴式健康管理设备!
















