ESP8266と心拍センサーを使って心拍データーを取り、Ambientに送って波形をモニターします。心拍波形ではなく、心拍数のモニターはもう一つの事例「Genuino 101からBLE経由で心拍数をAmbientに送りモニターする」をご覧ください。

心拍モニターの構成

心拍センサーはスィッチサイエンスさんで購入した「Pulse Sensor Amped」を使いました。この心拍センサーは光学式で、LEDと受光部、いくつかの部品が直径16mmの丸い基盤に載っています。部品がむき出しなので、 センサーのWebサイトの動画を参考に、センサーを保護します。このあたりは「Ambientと「Simple IoT Board」で心拍をモニターする」に書きましたので、ご参照ください。「Simple IoT Board」に搭載されているマイコンはLPC1114FN28というもので、RAMエリアが4kBと小さく、数百件のデーターをメモリー上で扱うのは向いていません。 そこで今回はESP8266というArduinoが動くマイコンを使います。 ESP8266はユーザーが使えるRAMエリアが40〜45kBぐらいあるので、 数百件のデーターも楽に扱えそうです。

心拍センサーを10ビットのADコンバーターMCP3002を介してESP8266につなぎます。回路図が不要なほど単純な構成ですが、一応、回路図を示します。

heartbeat1

プログラム

Genuino 101を使った心拍数モニターは、Genuinoをインターネットにつなぐゲートウェイが必要でしたが、ESP8266はWi-Fi経由でインターネットにつながるので、プログラムも単純です。

心拍センサーを5m秒ごとに600回読み、値をメモリーに保存し、600回読み終わったら、データーをJSON形式に変換します。Ambient::delete_data()でそれまでにAmbientに送ったデーターを削除し、Ambient::bulk_send()で600回分のデーターを一括でAmbientに送り、グラフ化しました。bulk_send()の詳細は「複数データーの一括送信機能 bulk_send()を実現しました」 をご覧ください。この「測定・送信・表示」というサイクルを5秒ごとに繰り返すようにしました。Ambientは1日に登録できるデーターがチャネルあたり3,000件までです。600回分のデーターは600件として扱われるので、5回一括登録するとその日の登録の上限になり、その日はそれ以上はデーターが登録できなくなります。

心拍値の測定時刻は、本来はセンサー値を読んだ時刻をmillis()で取得し、 時刻とデーターのペアを配列にしてメモリーに記録して送信する必要がありますが、 今回はサボって時刻は5ミリ秒の倍数として計算しました。 タイマー割り込みでセンサー値を読んでいるので、実際とそれほどずれていないと思います。

プログラムはGithubに公開しました。

Ambient_ESP8266_lib

実測

実際に心拍データーを測定してグラフ化したスクリーンショットはこんな感じです。

心拍波形

動画も撮ってみました。5秒ごとに波形が更新されているのが確認できます。