(著者:菊地 宏司)
さてIoT企画の第2弾ということで今回も「Raspberry Pi」を使った連携サンプルをご紹介したいと思います。
やりたかったこと
よく健康診断が面倒で放置して年が過ぎていることがあります。
もっと気楽に病院での検診ができれば・・・あ!病院に行かなくてもクラウドでできたらいいな!という妄想を今回は小さく形にしてみました。 今回のテーマはkintone Hospital なんか大風呂敷を広げてる感がありますが、kintone × 医療のキッカケになればと思います。 さて、今回は以下のようなイメージで作成していきます。
- センサーを使ってRaspberry Piで心拍数を取得する。
- 1分間あたりの心拍数を測定する。
- kintoneへ登録する。
環境準備
Raspberry Pi
Raspberry Pi Model B Revision 2
心拍センサー
心拍を取得するためのパルスセンサー 通電するとハートの中に埋め込まれたLEDが光っていい感じ ちなみに今回はこのまま使っていますが、基盤部分が汗でショートすることもあるためラバーなどを被せて保護したほうがいいです。
Document:
http://pulse-sensor.googlecode.com/files/PulseSensorAmpedGettingStartedGuide.pdf
アナログデジタルコンバータ(MCP3002)
Raspberry Piがデジタル入力のみ対応のためアナログ出力の心拍センサーを取得するための変換機として間に繋ぎます。
kintone アプリ
計測結果登録用のアプリを用意します。
フィールド名 | フィールドコード | フィールドタイプ |
測定日時 | createdate | 日時 (作成日時) |
心拍 | pulse | 数値 |
Raspberry Piの配線を組んでみる
配線図はこんな感じにしてみました。
ハートマークからでている紫の線がセンサーで、この出力データがADコンバータを通してRaspberry Piに送られます。
実際に配線を組んだものがこちらになります。
プログラムを組んでみる
測定のプログラムはPythonで作成します。
今回Raspberry Piからkintoneに登録するのにkintone SDK for Pythonを使用しました。なんと5行あればkintoneにPOST、PUT、GETができる超便利SDKです。
シンプル操作でお手軽に利用できるのでオススメです。
ソースコード
pulse.pyのファイル名で以下コードを保存します。
処理の流れはこちら
- kintoneの接続処理をする
- センサーデータ入出力用のSPIモジュールを準備する
- 1秒ごとにセンサーからの情報を取得し、これをループ処理で300回行う
計測時間は0.1秒 × 300回で30秒とする - 測定値が8V以上の値をカウントする
大体脈ありの時に2.8V以上になったのでそれを基準値としています。
また、センサーの仕組み上連続して2.8Vを超える時があるのでそのような時はカウントせずにスキップしています。 - 計測処理が完了したらカウントした心拍数をkintoneに登録する
計測時間は30秒なのでkintoneに登録する際は2倍して1分間の心拍数とする
動かしてみる
実際に動作させてみるとコンソールにログが出力され、0.1秒ごとの計測値と心拍カウントが確認できます。
実行コマンド
python pulse.py
アプリ側には以下のように測定結果が表示されます。
あとはこんな感じに月や週ごとの集計グラフ作ったりしてもいいですね。
最後に
IoT企画第2弾お楽しみ頂けたでしょうか。本当は脈拍だけではなく血圧も測りたいなーと思っていたのですがハードウェア的な問題で今回は見送らせていただきました(涙) また機会があれば挑戦したいと思います。
ちなみに私は普段コードばかり書いているのですが、今回の企画ではメンバの皆でワイワイと夏休みの工作をしている感じで楽しく作業させて頂きました。興味がある方はぜひ息抜きにやってみるといいかなと思います!
さて、このシリーズは全6回の予定となっています。まだまだ色んなネタが出てきますのでお楽しみに!
お世話になります。
下記の記事を参考にして、心拍数ではないですがグラフを作成することができました。
できれば、アプリを開いたままで、データが追加されたタイミングに画面が更新されてグラフが書き換わるようにしたいのですが、その方法を教えていただくことはできませんか。
mkwt 様
お世話になっております。cybozu developer network 運営局です。
「データが追加されたタイミングで画面を更新」は難しいかと思われます。
kintone JavaScript API には、「データが追加されたタイミングで」といったトリガーがないためです。
ただし、グラフ表示イベントを使って、タイマーで定期的に画面をリロードするといったことは可能かと思います。
なお、こちらのコメント欄は、記事の内容に対するフィードバックとなっております。
紹介されている内容に発展して行いたいことなどのご質問は、コミュニティをご活用ください。