鈍足ランナーのIT日記

走るのが好きな5流のITエンジニアのブログ。

趣味の範囲は広いけど、どれも中途半端なクソブロガー楽しめるWebアプリを作ってあっと言わせたい。サーバーサイドPerl(Mojolicious)、クライアントサイドVue.js。Arduinoにも触手を伸ばす予定。

Arduinoを使って吊り下げ型、重量計を自作したい

下記を参考にしつつものを作っていきたい。
【7月22日】ELITEローラ台 hackー自作PushPullゲージで静トルク測定と次の一手ー | 信州MAKERS日記
歪みゲージと HX711 を使って重量計測する (Arduino) | tech - 氾濫原
ロードセルを使った簡易スケールの製作 – Arduinoで遊ぼう。


使用したロードセルは以下のものです。現物はかなり小さくて、本当に50kgまで測れるのかな?

単体では吊り下げ部品がないので、3DモデルをFusion360で作成してみた。
出力はDMM.makeを利用してみた。結構早めに届きました。

アイボルトの購入先

eBay.comで「eye bolt M3」で安い順に検索すると出てきた。ただ、ネジの長さが9ミリだった。3Dプリンターで
出力した接続用部品は10mmで設計してしまったのでちょっと長さが足りないけど。。まぁなんとなつながればいいから
これでいいや。

ネジとナット

ヨドバシが送料無料で安いので、こちらにしました。

HX711の配線

www.aitendo.com

組みあげた写真

f:id:kechiya:20170216060103j:plain

ロードセルのネジ穴はM3かと思ったのですが、もう少し大きかったようでスカスカした感じになってしまった。
M4だったのかな??

monitor audio トールボーイスピーカーが欲しい

www.ebay.com

542ドルかぁ。6万2千円位ですね。

210円のセンサー+さくらIotで冷蔵庫の開閉回数及び扉が開いていた時間をカウントする

f:id:kechiya:20170121210838j:plain

開閉は状態遷移を使った

6軸ジャイロセンサーArduinoに接続して、測定する。ジャイロyの値をとると
なんか上手くいけそうだったので以下、状態遷移を使いながら測定することにした。

閉まっている状態

ジャイロyが50以上の数値だったら、開いている状態へ遷移。開けた時刻を保存。

あいている状態

ジャイロyが-30以下の数値だったら、閉まっている状態へ遷移。
現在時刻-開けた時刻を空いていた時間として加算
開閉カウントを1加算。

さくらIotへデータを飛ばす

1分ごとに、集計値をさくらIotへ飛ばす。さくらでデータを3回位受け取った後、取れなくなってしまう。
もう少しの所まで来ているので原因を調べなくては・・・
やっぱ乾電池駆動はいけないのかな?

Websocketを作り直したら動き出した

超頻繁にやり取りしたので制限がかかっていたのか。WebSocketを作り直したら、飛ばし続けるようになりました。
あとは、電池駆動はやめてACアダプターから電源を取るようにしました。

Ambientグラフ化もできた

f:id:kechiya:20170128205611p:plain

見える化、結構楽しいですね。

金曜日の朝のNHKニュースは中小製造業の工場の見える化
自動車部品メーカーで初期コスト数百万円で部品の製造時間を見えるようにして
ネックと成っている機械を特定したという話でした。
どんな、Iotシステムを使っているんだろうか?
Node-REDなのかな。

Arduinoで1秒ごとに冷蔵庫の開け閉めをカウントして、1分ごとにデータを飛ばしたい。

1秒ごとに、集計して、1分ごとに飛ばす方法。
Arduinoにつないだセンサからの値をパソコンで記録する(1) | Ukkari blog

上記を参考に、以下のようなプログラムをしてみた。
チャンネル0に1分間の開け閉めカウントを入れてさくら通信モジュールでデータを飛ばす。

  if (acc_angle_x > 100 ){ //センサーの値を検知して開けたらフラグを立てる。要調整
    openFlg = 1;
  }
  if (nextTime < millis()) {
     nextTime = nextTime + 1000;  // Set Next analyze time
     if (openFlg == 1){
       openCount++;
       openFlg = 0;
     }
  }
  if (sakuraTime < millis()) {
    sakuraTime = nextTime + 60000;  // Set Next send time
    sakuraio.enqueueTx(0,openCount);
    sakuraio.send();
    openCount = 0;   
  }


さくらで飛ばしたデータをWebSocketでつながったBluemix上のNode-REDで受ける。
それをAmbientへ飛ばす。

f:id:kechiya:20170118075959p:plain

functionの中身

var payload = msg.payload.payload;

var data = {
    "d1" : payload.channels[0].value
};
msg.payload = data;
return msg;

これで、うまくいけば表示できるはず。

都度都度データを送ってNode-REDでデータを蓄えずに、Arduinoで蓄える。

Ambientへデータを送って、解析する方法で行こうと考えたけれど、
よくよく考えたらArduinoである程度解析し、その結果をNode-REDで受けて
Ambientへ渡すのが効率的ということに気づいた。
これならNode-REDで蓄えておく必要もなくなる。

以下は、6軸ジェイセンサーの値を100msecごとにとったグラフを
ArduinoIDEのシリアルプロッタで表示。
f:id:kechiya:20170117211623p:plain

例えば、冷蔵庫の開け閉めを適当に閾値を設けて検出。
60秒間の開け閉め回数をSakuraIotで飛ばして、Ambientで可視化すればいいのかな。

Ambientは5秒ごとで受け取るのでNode-REDでデータを蓄えておくりたい

Ambientは5秒間隔以上でないとデータを受け付けない。
よってNode-REDから1秒毎にデータを送っても間引かれてしまうことになる。
そのため、Node-REDで値を溜め込んで、5秒以上の間隔で溜め込んだデータを
まとめて送る必要がある。

まとめて送る方法、データのフォーマットは以下から

https://ambidata.io/blog/2016/06/13/bulk_send/

Node-REDのflowへ配列でデータを蓄えておく。

Node-REDでデータを蓄える方法は
context,flow,globalというところがあって、
qiita.com
場面場面、適切に使わないといけません。

さくらIot+Bluemix(Node-RED)+Ambientでグラフを描写するまで

http://sssslide.com/www.slideshare.net/sakura_pr/iot-platform-20161201

Node-REDアプリの作成

BlueMixへログイン、カタログからNode-REDスターターで
アプリ名を入力して、作成ボタンを押す
起動されるので
あとはhttpでアクセスするだけ。簡単ですね。

Node-RED エディタ

WebSocketをドラッグ&ドロップする
PathへさくらのIotのWebSocketのパスを入力
f:id:kechiya:20161224081720p:plain
とりあえず、WebSocketノードとデバッグノードをGUIでつなぎこむだけでNode-RED上で値の取得が確認できた。

次はグラフ化してみましょう

グラフ表示する外部サービスAmbientへ登録
https://ambidata.io

BlueMixからAmbientノードを作るために

qiita.com

Ambientで表示するためには

Ambientで描写するためには、チャンネルの値をd1,d2…と言う値に変えて
あげる必要がある。ここはNode-Redでのコーディングが必要になります。

さくらのデータからAmbientノード用のJSONへ変換するときに

JSONが文字列なので、そのままでは値が取り出せません。オブジェクトに変換する必要ありはまりました。
qiita.com

JSONノードの後段にfunctionノードを配置して以下のように変換関数を
コーディングしてみました。

var payload = msg.payload.payload;

var data = {
    "d1" : payload.channels[0].value,
    "d2" : payload.channels[1].value,
    "d3" : payload.channels[2].value
};
msg.payload = data;
return msg;

ジャジャジャーン。表示できました。

f:id:kechiya:20161224162329p:plain

JSONノード、Functionノードをつなげるだけで、ほぼコーディングレスでグラフ化までできることが証明されたのでありました。
以下のような感じ。

f:id:kechiya:20161224163840p:plain

あとは、本物のセンサーが届くのを待つのみ!!