一款用Raspberry Pi和传感器制作的可穿戴式小型健康管理设备!第三部分

第1部分:用Raspberry Pi Zero和罗姆SensorMedal制作健康管理设备!
第2部分:根据传感器的值计算步数、距离和卡路里,并将数据发送到LINE!

 

大家好,我是吉田!

本文是制作旨在解决运动不足问题的健康管理设备项目的第三部分。这次我们将使用脉搏传感器来测量心率并将测量数据用于健康管理。

由于测量生物信息非常容易,因此可以让这些信息有很多用处。

raspberrypi-wearable-healthcare-device-03_01

 

本部分所需部件

Raspberry Pi Zero W

raspberrypi-wearable-healthcare-device-03_02

 

心率传感器

raspberrypi-wearable-healthcare-device-03_03

 

NeoPixel LED灯带

raspberrypi-wearable-healthcare-device-03_04

 

本部分的流程

  1. 脉搏传感器及其使用方法
  2. 根据心率和活动量点亮LED灯
  3. 让SensorMedal也同时运行
  4. 总结

 

1. 脉搏传感器及其使用方法

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

raspberrypi-wearable-healthcare-device-03_05

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

raspberrypi-wearable-healthcare-device-03_06

 

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

raspberrypi-wearable-healthcare-device-03_07

 

现在让我们编写一个程序来使这个脉搏传感器工作。当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()

 

下面我们用夹子夹住指尖,测量一下心率吧。

raspberrypi-wearable-healthcare-device-03_08

 

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

raspberrypi-wearable-healthcare-device-03_09

 

2. 根据心率和活动量点亮LED灯

确认能够测量心率后,我们需要连接LED并用光的颜色来显示相应的测量结果。如果心率过快,可能会收到警报。

这一次,我将使用名为“NeoPixel”的彩色LED灯带。这是一种接有多个LED的带状灯,您可以将其切割成任何您喜欢的尺寸来使用。这次我根据Raspberry Pi Zero的大小切割成了具有3个LED的灯带。

raspberrypi-wearable-healthcare-device-03_10

 

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

raspberrypi-wearable-healthcare-device-03_11

 

有关如何使用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发出七种颜色的光。

raspberrypi-wearable-healthcare-device-03_12

 

为了使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)时,会发出红色光并发出警报。

raspberrypi-wearable-healthcare-device-03_13

如果心率在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”一样运行程序,即可测量两者的值。

raspberrypi-wearable-healthcare-device-03_15

 

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

raspberrypi-wearable-healthcare-device-03_16

 

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

raspberrypi-wearable-healthcare-device-03_17

 

4. 总结

在这部分中,我们尝试了使用脉搏传感器来测量日常生活中的脉搏和心率。通过这部分的介绍,我想您应该已经可以使用Raspberry Pi轻松获取生物信息并进行查看了。

此外,在这部分中,我们还了解了可以同时运行SensorMedal并上传其测量结果。能够测量步数和心率,这个作品已经越来越像健康管理设备了。

下一部分中,我想把现有的计步器和心率监测仪功能结合起来,完成更这款像可穿戴设备的作品。

敬请期待!

吉田 显一(Yoshiken)
吉田 显一(Yoshiken)

在普通公司工作的上班族,非常喜欢创作的周末创客,出版了电子书MESHBOOK,平时也写写博客。
http://blog.ktrips.net

相关文章

  1. basic-of-raspberrypi_01_02-1

    Raspberry Pi使用前的准备【第1篇】Raspberry Pi的基础知识

  2. 使用Raspberry Pi 4进行电子制作 入门!【第4篇】 使用Raspberry Pi 4和G…

  3. raspberrypi04_1

    使用Raspberry Pi 4进行电子制作 入门! 【第3篇】无头模式下熟练使用Raspberry…

  4. raspberrypi04_1

    使用Raspberry Pi 4进行电子制作的入门教程! 【第2篇】Raspberry Pi 4的设…

  5. raspberrypi04_1

    使用Raspberry Pi 4进行电子制作的入门教程! 第1篇: 开始使用新产品“Raspberr…

  6. i06_4a

    制作一款图形处理装置,用数字控制自然力

  7. ito_05

    制作卡通角色随风摆动就能绘制图形作品的装置

  8. i04-8

    使用传感器轻松制作有趣的项目

  9. what-is-raspberrypi_01_2

    从历史到使用方法的全面了解!电子作品创作不可或缺的“Raspberry Pi(树莓派)”究竟是何方神…

TECH INFO

  • Sugiken老师的电机驱动器课堂
  • 重点必看
  • 技术分享
  • Arduino入门指南

基础知识

  • Si功率元器件
  • IGBT功率元器件
  • 热设计
  • 电路仿真
  • 开关噪声-EMC
  • AC/DC
  • DC/DC
  • 电机
  • 传递函数

工程技巧


Sugiken老师的电机驱动器课堂

PICK UP

PAGE TOP