2018/07/07

体重計をインターネットにつないでスマートスピーカーと連携させてみた

体重計を改造して、測った体重を無線LAN経由でクラウドに記録できるようにしてみました。さらに、一台の体重計を家族で共有するために、スマートスピーカーで誰の体重かを知らせてあげられるようにしました。

体重計の改造

一般に、デジタル式の体重計では、ひずみゲージセンサを使った「ロードセル」というデバイスで重さを計測しています。このロードセル、単体でも入手できますが、体重計を作 るなら、市販の体重計をばらしてロードセルと筐体をそのまま流用してしまったほうが、手間もコストもかからず楽です。
というわけで、タニタのシンプルなデジタル式体重計(HD-661)を購入して分解・改造。ロードセルを使った重さの計測には、HX711というICチップを使ったロードセル用のADコンバータを、マイコンには無線LAN内蔵のESP-WROOM-02(ESP8266)を、体重の表示には4桁の7セグメントLEDロジックIC(シフトレジスタ)の74HC595を使います。体重計そのものとこれらの部品など含めて、部品代は総額3500円くらい。
過程はすっ飛ばして、出来上がった体重計はこんな感じです。



回路図は以下の通り。7セグメントLEDと74HC595の周辺の配線が多くて苦労しました。。。
(回路図を書くためにFritzingを初めて使ってみましたが、便利ですねこれ)

マイコン側はArduinoで体重を計測してHTTP POSTするプログラムを、クラウド側はAWSのAPI Gateway + Lambda + DynamoDBで計測した体重を記録するだけのWEBサービスを、それぞれ作りました。

スマートスピーカーとの連携

このままだと誰の体重かが分からないので、Alexa Skill Kitでカスタムスキルを作って、スマートスピーカー(Amazon Echo dot)に誰の体重を測ったのかを伝えられるようにしてみました。使う人とスマートスピーカーとのやり取りはこんな感じ(やり取りがわかりやすかったのでテスト用の画面で)。

これで、人ごとにデータを記録できるようになります。
実際のデータ記録先は、IoT向けのセンサデータなどの記録・分析用WEBサービスであるThingSpeak(運営しているのはMatlabのMathWorks)。グラフでログも確認できます。


というわけで、体重を毎日測って健康管理できるようになりました。

※今回のハードとソフトを作るにあたっては、以下の記事などを参考にしました。

2018/05/27

無線LAN&BluetoothモジュールESP-WROOM-32とBLEタグで誰かの在宅状況を見守ってみる

子供のランドセルとかに付けたBLE(Bluetooth Low Energy)タグのIDをモニタリングして、家から出発したり、家に帰ってきたことを検知してLINEに通知してくれる見守りセンサを作ってみました。

見守りセンサの方には、無線LANとBluetoothが一体になった小型モジュールで数百円で入手できてしまうESP32 (ESP-WROOM-32) を使います。前回のESP8266と同様、技適取得済みで安心、入手も容易です。
BLEタグの方には、例えばmamorioなどの紛失防止タグをそのまま使います。要は、BLEのadvertisingパケットを出し続けてくれてればOK。


苦労したポイントだけまとめておくと、、、
  • ESP32上で無線LANとBluetoothを同時に使うときのメモリ不足
    ⇒ Arduino IDEでのビルドオプション変更で解決
  • ESP32上で無線LANとBluetoothを同時に使うときの電源容量不足
    ⇒ 電源回路用のレギュレータ選定(ADP3338)で解決
  • 1台のESP32でカバーできる範囲が狭い
    ⇒ 複数台のモニタリング結果をクラウド連携で統合(AWS Lambda + DynamoDB + API Gateway)

見守りセンサ側のコード(ESP32上で動くArduinoコード)と、クラウド側のコード(AWS Lambda上で動くPythonコード)は、備忘録として以下に。
nikotan/BLETagMonitor_esp32.ino - GitHubGist
nikotan/BLETagMonitor_lambda.py - GitHubGist

実際しばらく使ってみると、在宅状況を把握できるだけで得られる安心もあるということが分かりました。


※今回のハードとソフトを作るにあたっては、以下の記事などを参考にしました。

2018/04/30

無線LANモジュールESP-WROOM-02と傾斜スイッチでポストへの投函を検知する電池駆動センサを作ってみた

個人でも安く容易に入手できて、かつ技適取得済みで安心の、ESP-WROOM-02(ESP8266)。恥ずかしながらつい先日教えてもらって初めてその存在を知ったので、使い方の勉強がてら動くものを作ってみました。

今回作ったのは、家のポストにモノが投函されたことを検知してIFTTT経由でLINE通知してくれる電池駆動のセンサ。仕上がりはこんな感じ。


我が家のポストは外にあって電源が取れない場所にあるので、ESP-WROOM-02の「deep sleep」機能(超低消費電力でのスリープ動作)を使って、乾電池での長期間駆動を目指します。似たようなことをやっているINTERNET Watchの記事などを参考に、以下の方針で作りました。
  • 普段はESP-WROOM-02はdeep sleepモードで寝かせとく
  • ポストにモノが投函されたことをESP-WROOM-02のリセットピンにつないだ傾斜スイッチで検知、deep sleepから起こす
  • 起きたら、自宅の無線LAN APにつないでIFTTTにWEBHOOK、通信終わったらすぐまたdeep sleepモードで寝かす

傾斜センサの部分は「型想い」と両面テープでポストのフタの内側へ、センサ本体と電池ケースは3Mの面ファスナーで着脱できるようにポストの内側へ、それぞれ固定しました。



ESP-WROOM-02上で動いているコード(Arduinoのコード)は以下に置いておきます。
nikotan/esp8266_PostMonitor.ino - GitHubGist

Arduinoのコードで動かせるってすばらしい。手軽にネットワーク機能を使ったデバイスを試作できて楽しいです。今回作ったものは今のところちゃんと動いていますが、どれくらい長期間駆動できるかはまだ不明。しばらく様子を見てみます。


※今回のハードとソフトを作るにあたっては、以下の記事などを参考にしました。

2018/04/22

Raspberry PiとWEBカメラで洗濯機の動作状況をモニタリングして、洗濯終了をLINEに通知するIoTボットを作ってみた

家の一階にある洗濯機で洗濯が終わったかどうかを、二階のリビングにいても分かるようにしたい!というわけで、タイトルのとおりです。

洗濯終了を判定するための手がかりとしては、洗濯終了時に鳴るビープ音、洗濯機の使用電力(電流)、などがありそうですが、今回は操作パネルの表示を使います。我が家の洗濯機には、操作パネルの中に洗濯終了時にだけ点灯する場所があったので、この場所の点灯状況で洗濯終了が自動判定できちゃいます。


Raspberry PiにつないだWEBカメラで操作パネルの特定位置の点灯状況を判定するだけなんですが、操作パネルをうまく写せるカメラの固定場所があまりない、というのが実は問題です。ちょっと離れた場所から監視せざるを得ないので、向きをざっくり合わせるだけでも使える、とか、カメラが多少動いたりしても使える、とかするための工夫が必要です。


基本的な方針は以下の通りですが、点灯状況を監視したい場所の近くにARマーカーを貼って、これを基準に監視場所の画像を切り出して点灯状況の判定をするようにしました。
  • ARマーカを点灯状況を監視すべき場所の近くに貼付
  • WEBカメラで撮影した画像からARマーカを検出
  • 検出したARマーカを基準に監視場所の画像を切り出して点灯判定
  • 点灯していると判定された場合にはIFTTT経由でLINEに「洗濯が終わっています」を通知
Raspberry Pi用のPythonコードは備忘録がてら以下に置きます。
nikotan/WashingMonitor

誤報対策で苦労しましたが、今は安定して動いてます。結構便利。


ARマーカーの検出のために使ったOpenCVのarucoライブラリや、arucoライブラリを使うためのRaspberry Pi上でのOpenCVのビルドや、IFTTTを使ったプッシュ通知などについては、以下記事を参考にしました。