Raspberry Piとセンサーでヘルス情報の取得(心拍数編)

Raspberry Piとセンサーでヘルス情報の取得(心拍数編)

ソフトバンク・au・ドコモの方は、公式のオンラインショップを利用すれば頭金不要で通常のショップよりお得に購入できます。

Showcase lab.という研究所の1人所長、下駄です。

先日「サバフェス2016」に参加して、発表に間に合わなかったので、自社内でちゃんと完成させたくて、以下の様な成果物にたどり着きました。

心拍数で緊張度計測

ストレス社会と言われる現代で、IT企業で仕事をしていると、どのくらいのストレスを感じているのかをリアルに計測したいと思います。

開発名は「ドキドキ計測ツール」です。

と言っても、心拍センサーの計測を行うだけですが、ADコンバータの組み込みから慣れないPythonコーディングの作業結果をブログに記します。

サバフェスでいただいたセンサーは「心拍センサー」です。


・RaspberryPiを使用
・心拍数センサーを利用(ADコンバータ含む)
myThingsを利用

ベンチマーク

RaspberryPiとセンサーの構築

RasberryPiは「Rasbian-OS」を普通にインストールして、センサーデータはSPI経由で取得するようにします。

1、RaspberryPi初期設定

こちらのサイトの手順でサクッとOSインストールとWEBアクセスの完了

2、心拍数センサーとADはコンバータを接続

初めてADはコンバータを扱ったんですが、とりあえず別サイトでの配線を参考にして接続させてみました。

image05

image03

3、センサーデータの取得はPythonで行いたいので、まずはインストール

Python環境の構築

$ sudo apt-get install python-dev

$ curl https://bootstrap.pypa.io/ez_setup.py -o - | sudo python
$ curl https://bootstrap.pypa.io/get-pip.py -o - | sudo python

$ git clone git://github.com/doceme/py-spidev
$ cd py-spidev
$ sudo python setup.py install

sensor.py

#!/usr/bin/python

-- coding: utf-8 --

import spidev
import time
import sys

import datetime

SPIバスへのアクセスを開く

spi = spidev.SpiDev()
spi.open(0,0)

def ReadChannel(channel):
adc = spi.xfer2([1,(8+channel)<<4,0])
data = ((adc[1]&3) << 8) + adc[2] return data

--

センサーを読み込み1

aa = ReadChannel(0)

センサーを読み込み2

bb = ReadChannel(1)

センサーを読み込み3

cc = ReadChannel(2)

d = datetime.datetime.today()
dt = d.strftime("%Y%m%d")
tm = d.strftime("%H%M%S")
csv = str(dt) + "," + str(tm) + "," + str(aa) + "," + str(bb) + "," + str(cc) + ",\n"

出力

print csv

これで、アクセス毎の値が取得できます。

4、次にリアルタイムにグラフ表示

見た目でわかるようにしたいので、NodeJSのSocket.IOを使いたいます。

グラフ表示には「ccchart.js」を使いたいと思います。

$ wget http://ccchart.com/js/ccchart.js

表示用のHTML元ソース
Index.html



  
    
    
    
    
    
  
  

    

    

起動用NodeJSモジュール

var http = require('http');
var socketio = require("socket.io");
var fs = require('fs');
var exec = require('child_process').exec;

// set-server
var server = http.createServer(function(req,res){

// get-fileName
var urls = req.url.split("?")[0].split("/");
var fileName = urls[urls.length-1];

if(fileName.match(/.js$/)){
res.writeHead(200,{'Content-Type':'text/javascript'});
res.end(fs.readFileSync(fileName,'utf-8'));
}
else if(fileName.match(/.css$/)){
res.writeHead(200,{'Content-Type':'text/css'});
res.end(fs.readFileSync(fileName,'utf-8'));
}
else if(fileName.match(/.html$/)){
res.writeHead(200,{'Content-Type':'text/html'});
res.end(fs.readFileSync(fileName,'utf-8'));
}
else{
res.writeHead(200,{'Content-Type':'text/html'});
res.end(fs.readFileSync('index.html','utf-8'));
}

}).listen(80);

var io = socketio.listen(server);

console.log("Running...");

//round-check
setInterval(function(){
exec("python sensor.py",function(err,stdout,stderr){
io.sockets.emit("chart",{str:"--"+stdout});
});
},100);

実行


$ node index.js
Running...

この状態でブラウザで、対象サーバー(Raspberry Pi)にアクセスすれば、以下の様な画面が現れます。

解説

image02

画面下部の数値は、pythonで返された値をそのまま表示しています。
100ms毎に値を取得してグラフを描画しているので、センサーを指でつまむと値が変わって計測ができます。

何も触れていない時は周辺の光を受信して意味不明な値を取得してしまうんですが、指でつまむと、安定して値が取れるので、見ていて面白いですね。

ソフトバンク・au・ドコモの方は、公式のオンラインショップを利用すれば頭金不要で通常のショップよりお得に購入できます。

この記事を書いた人
アバター
下駄(弓削田)
Creativeに生きるRunner

【週刊bitWave】(メルマガ)始めました!

登録はこちらからメールアドレスを入力してお申込みください。

ご登録いただいたメールアドレスは 【週刊bitWave】の更新情報の配信にのみ使用します。

個人情報の取扱いに関しては、「プライバシーポリシー」をご確認ください。解除はいつでもこちらから行うことが可能です。

あなたにおすすめ

  • トイレ空き状況確認システムによる業務効率化のススメ 2016年3月時点で我が社は、赤坂見附の一等地にあるビルの4Fと6Fに置かれています。 赤坂見附という駅は、比較的どの路線からもアクセスが良く、会社のビルも駅近で従業員の満足度も高いようです。 しかし、このビル各階にトイ …
  • Raspberry Piのいろいろなバージョンのスペックを確認 先日公開したらラズパイを使った「トイレ空室状況チェック・システム」ですが、この時に使用した端末は「Raspberry Pi B+」 最近ニュースにもなっていた「Raspberry Pi 3」や「Raspberry P …
  • YEOMANとEC2で爆速MEAN環境セットアップ:最新版 お恥ずかしながら最近まで少しの開発言語しか触ってきませんでした。 アプリ:Objective-c(iOS) WEB:javascript サーバーサイド:PHP これだけでも知っていればなんとかなるものですが、新しいサ …
  • IoTを“手軽”に着想・実装を実現するツール6選 先日、社外セミナーで知り合った某大手IT企業の事業部長さんが嘆いていました。 「IoT事業を成功させなければいけないのにアイデアが浮かばず、一体何をどうすればいいか分からないんです……」 どうやら彼は、マネタイズで …