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の配線
組みあげた写真
ロードセルのネジ穴はM3かと思ったのですが、もう少し大きかったようでスカスカした感じになってしまった。
M4だったのかな??
monitor audio トールボーイスピーカーが欲しい
542ドルかぁ。6万2千円位ですね。
210円のセンサー+さくらIotで冷蔵庫の開閉回数及び扉が開いていた時間をカウントする
開閉は状態遷移を使った
6軸ジャイロセンサーをArduinoに接続して、測定する。ジャイロyの値をとると
なんか上手くいけそうだったので以下、状態遷移を使いながら測定することにした。
閉まっている状態
ジャイロyが50以上の数値だったら、開いている状態へ遷移。開けた時刻を保存。
あいている状態
ジャイロyが-30以下の数値だったら、閉まっている状態へ遷移。
現在時刻-開けた時刻を空いていた時間として加算
開閉カウントを1加算。
さくらIotへデータを飛ばす
1分ごとに、集計値をさくらIotへ飛ばす。さくらでデータを3回位受け取った後、取れなくなってしまう。
もう少しの所まで来ているので原因を調べなくては・・・
やっぱ乾電池駆動はいけないのかな?
Websocketを作り直したら動き出した
超頻繁にやり取りしたので制限がかかっていたのか。WebSocketを作り直したら、飛ばし続けるようになりました。
あとは、電池駆動はやめてACアダプターから電源を取るようにしました。
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へ飛ばす。
functionの中身
var payload = msg.payload.payload; var data = { "d1" : payload.channels[0].value }; msg.payload = data; return msg;
これで、うまくいけば表示できるはず。
Ambientは5秒ごとで受け取るのでNode-REDでデータを蓄えておくりたい
Ambientは5秒間隔以上でないとデータを受け付けない。
よってNode-REDから1秒毎にデータを送っても間引かれてしまうことになる。
そのため、Node-REDで値を溜め込んで、5秒以上の間隔で溜め込んだデータを
まとめて送る必要がある。
まとめて送る方法、データのフォーマットは以下から
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のパスを入力
とりあえず、WebSocketノードとデバッグノードをGUIでつなぎこむだけでNode-RED上で値の取得が確認できた。
次はグラフ化してみましょう
グラフ表示する外部サービスAmbientへ登録
https://ambidata.io
BlueMixからAmbientノードを作るために
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;
ジャジャジャーン。表示できました。
JSONノード、Functionノードをつなげるだけで、ほぼコーディングレスでグラフ化までできることが証明されたのでありました。
以下のような感じ。
あとは、本物のセンサーが届くのを待つのみ!!