できること

ラズパイとセンサで作る小型健康管理ウェアラブルデバイス!第4回・最終回

第1回:ラズパイ・ゼロとローム・センサメダルで健康管理をサポートするデバイスを作ろう!
第2回:センサの値から歩数、距離、カロリーを計算して、LINEに送信!
第3回:ラズパイとセンサで作る小型健康管理ウェアラブルデバイス!

 

ディスプレイを付けて、ウェアラブル健康機器に仕上げる

こんにちは、ヨシケンです!

運動不足解消のための健康管理デバイスの制作もいよいよ最終回。今回はこれまで取得した歩数情報や心拍数などを小型ディスプレイに表示させてみたいと思います。ウェアラブルな時計型にして、いつでも情報を見ることができるようにしてみましょう!

1_2
20

 

今回の記事で必要な物一覧

Raspberry Pi Zero W

raspberrypi-wearable-healthcare-device-03_02

 

Seeed ReSpeaker Mic-2 Hat

5

 

Seeed Grove OLED Display

6

 

ハートレートセンサ

raspberrypi-wearable-healthcare-device-03_03

 

ローム・センサメダル (SensorMedal-EVK-002)

8

 

LiPoバッテリー

9

 

今回の記事の流れ

  1. Seeed Grove OLEDを使って画面表示
  2. 心拍センサをつないで心拍数表示
  3. ウェアラブル・ウォッチにして完成!
  4. まとめ

 

1. Seeed Grove OLEDを使って画面表示

前回はラズパイ・ゼロに心拍センサを接続しました。今回はさらにディスプレイを付けるため、ラズパイ・ゼロにぴったり合うSeeed ReSpeakerハットを使用します。
5

このデバイスにはSeeed Groveの端子に対応したソケットが2つ付いているので、とても便利です。それではこのハットをラズパイにセットして、電源を入れます。

11
以下のサイトからハットのソフトウェアを取得し、インストールします。

pi@raspizero:~/ $ git clone https://github.com/respeaker/seeed-voicecard.git
pi@raspizero:~/ $ cd seeed-voicecard
pi@raspizero:~/ $ sudo ./install.sh  --compat-kernel
pi@raspizero:~/ $ reboot

 

またこのハットに付いているLEDを使うためのライブラリもインストールします。これでPixelsサンプルプログラムを流すと、前回のようにハット上にある3つのNeoPixelsを光らせることができます。

pi@raspizero:~/ $ sudo pip install spidev
pi@raspizero:~/ $ cd ~/
pi@raspizero:~/ $ git clone https://github.com/respeaker/mic_hat.git
pi@raspizero:~/ $ cd mic_hat
pi@raspizero:~/ $ python pixels.py

 

ハットの設定ができたところで、ここにディスプレイを追加します。Grove端子を使ったこちらの128 x 64のOLEDディスプレイを使います。

6

このディスプレイを、ハットの向かって左、端側のGrove端子につなぎます。この端子はI2Cという接続方式に対応しています。

13

 

このディスプレイを使うためのライブラリなどを含んだソフトウェアをインストールします。以下のコマンドをラズパイで打ってみてください。

pi@raspizero:~/ $ curl -sL https://github.com/Seeed-Studio/grove.py/raw/master/install.sh | sudo bash -s -
pi@raspizero:~/ $ cd grove.py
pi@raspizero:~/ $  python3 grove_oled_display_128x64.py

 

こうするとgrove.pyというフォルダが作られ、その中に多くのGroveを使ったライブラリが格納されています。その中でgrove_oled_display_128x64.pyを使います。
raspberrypi-wearable-healthcare-device-04_11

 

このプログラムを流すと、ディスプレイ上に”hello world”の文字が見事出力されるはずです。

14

 

2. 心拍センサをつないで心拍数表示

それではハットに心拍センサもつないで、その心拍数などもディスプレイに表示してみましょう。ハットの真ん中のGrove端子と心拍センサを接続してください。

このGrove端子はラズパイのGPIO12につながっています。また先ほどのOLEDプログラムをコピーして、grove_oled_heart.pyプログラムを作り、以下の記述を追加します。

pi@raspizero:~/ $ sudo cp ~/grove.py/grove_oled_display_128x64.pysudo ~/Programs/grove_oled_heart.py

----
#!/usr/bin/env python
import time
from collections import deque
import RPi.GPIO as GPIO
import datetime

class HeartRateMonitor:
    INTERRUPT_PIN = 12
    MAX_DETECTED_TIMES_COUNT = 20
    MAX_PULSE_INTERVAL = 2.0
    ...

        #print("HeartRate: {heart_rate}, Interval: {interval}".format(heart_rate = heart_rate, interval = interval))
        return heart_rate

    def execute(self):
        display = GroveOledDisplay128x64()
        display.set_cursor(0, 0)
        display.puts("RasPi Health")

        print('Please ready your heart rate monitor.')
        time.sleep(3)

        while True:
            display.set_cursor(1, 1)
            time_str = datetime.datetime.now().strftime("%H:%M:%S")
            display.puts(time_str)

            GPIO.wait_for_edge(self.INTERRUPT_PIN, GPIO.RISING)
            heart_rate = self._interrupt()
            if heart_rate is not None:
              display.set_cursor(3, 1)
              hr = round(heart_rate)
              print(hr)
              display.puts("HR: "+str(hr)+" BPM")

from grove.i2c import Bus
...
class GroveOledDisplay128x64(object):
...

def main():
    monitor = HeartRateMonitor()
    while True:
        monitor.execute()

if __name__ == "__main__":
    main()

 

このプログラムを流すと、このように心拍数が中央に表示されるようになりました。

20-21

 

3. ウェアラブル・ウォッチにして完成!

最後に外装などを作ってウェアラブルなものにしましょう。まず、小型のリチウムポリマーバッテリを使って、ラズパイ・ゼロに給電できるようにします。

17

 

ハットにディスプレイと共に心拍センサもつなぎ直します。ディスプレイが見えるような外装や時計バンドなども付けてみます。

1_2

 

最後にセンサメダルのBLE計測プログラムと心拍センサを並列して動かすようなシェルスクリプト(ble_steps_heart_oled.sh)を作ります。nohupで指定したOLED画面表示プログラムはバックグラウンドで動くようになり、センサメダルのプログラムと並行で実行しています。

#!/bin/bash
nohup sudo python3 /home/pi/Programs/grove_oled_heart.py &
sudo python3 /home/pi/Programs/ble_steps_line.py

 

これを「. ble_steps_heart_oled.sh」のように実行します。センサメダルの電源を入れ、心拍センサも指などに付けます。

20

 

そうすると、20秒ほどしてから心拍数がディスプレイに表示され始めます。また、センサメダルの数値も取り出し、ある特定の歩数を歩くとLINEにその結果を送信してくれます。

21

 

4. まとめ

今回は、1日の歩いた歩数を測ったり、心拍数を計測して、それをウェアラブルデバイスの小型ディスプレイに表示させる方法を紹介してきました。センサメダルからは様々な数値が取れ、これを小型のラズパイ・ゼロに送信して、データを表示したり、LINEに投稿したりする方法がご理解頂けたのではないでしょうか?

このウェアラブルデバイスを使うと、「ずっと家の中にいるけど、何歩くらい歩いたかな?」とか、「緊張したミーティングの時は結構心拍数上がっているな…」といったように、自分の体の情報を簡易に取得することができます。今回の方法を使って、他にもさまざまなセンサで自分の体の状態を計測し、運動不足解消や健康管理に役立ててみるのも面白いかもしれないですね!

 

 

今回の連載の流れ

第1回:ラズパイ・ゼロとローム・センサメダルで健康管理をサポートするデバイスを作ろう!
第2回:センサの値から歩数、距離、カロリーを計算して、LINEに送信!
第3回:ラズパイとセンサで作る小型健康管理ウェアラブルデバイス!
第4回:ディスプレイを付けて、ウェアラブル健康機器に仕上げる(今回)

アバター画像

普通の会社に勤めるサラリーマンですが、モノ作りが好きな週末メイカーで、電子書籍MESHBOOKを出したり、ブログを書いたりしています!

http://blog.ktrips.net

ラズパイと液晶画面で、顔を判別してぴったりの動画を流すデジタルサイネージをつくろう!