Arduinoでキッチンスケールの出力を受け取る

題名の通り。

ことの発端は、薬品管理をなんとか楽にできないか、ということです。
学校で使う薬品は、鍵のかかる薬品庫に保管しているわけですが、使用に伴って、管理簿に使用した日付、薬品、使用した質量と、現有質量をその都度記入していかなくてはいけません。ただ、これがとてつもなく大変で、日々のゴタゴタの中では、とりあえずメモしておいて、時間のあるときに転記、というパターンが多い。(つまり、リアルタイムで管理簿に反映されにくい)

この辺を自動化できないか、ということで、理想的にはICタグかなんかを薬品の容器に貼っておいて、電子てんびんに載せると、ICタグ読み取りで薬品の特定と、質量の計量を同時に行って、日付と時間と紐付けて記録、となれば電子てんびんの上に置くだけで現状の記録が全てOKとなるわけです。

Arduinoとストレインゲージあたりでできると思うのですが、結局、薬品管理の関係上、履歴を見たり、必要な分の出力を紙でしたりできないといけないので、そしたら、PCと通信させればいいかなぁと。Arduinoはシリアル通信ができるので、シリアル通信で値を送る。
送られる側はProcessingとかNI LabVIEWとかでもいいんだけど、まぁ、結局帳簿を管理するんならExcelだよねー、ということで、Excel+EasyCommという感じ。

ストレインゲージも、まぁ、薬品を置く機構とか考えたら、既存のキッチンスケールをそのまま使ったら良いんじゃない?ということで、調べるとオペアンプで増幅でもいけるみたいだけど、HX711というモジュールを間にかますといい感じらしいということで、その方向で。

この辺は、2年前くらいにも考えて、そのときは、あんまり情報源がなくって、ネットで検索してもストレインゲージで得た値をオペアンプで増幅くらいの記事ばかりだったんだけど、HX711使う記事が最近出てきたので、軌道に乗った感じ。HX711だとライブラリのおかげで、深く考えなくても質量が出てくるのがいい。ちょー楽。

結論。

  1. Arduino+HX711で安いキッチンスケールからの値を読み取る
  2. 読み取った値はシリアル通信で出力
  3. Excelのvba、EasyCommでシリアル通信を受ける
  4. 読み取ったデータをもとに、帳票をExcelで管理

という流れ。
ICタグ周りは後でやればいいかなぁということでとりあえずここまで。

●実際の配線

省略します。特別なことはしていません。参考サイトからどうぞ。

[blogcard url=”http://barcelona.lomo.jp/wp/?p=23″]

このへん。写真だけ載せておく。


キッチンスケールとArduino+HX711シールド


裏面。

●Arduinoスケッチ

H711ライブラリ使用。キャリブレーション済

#include <Arduino.h>
// https://github.com/bogde/HX711
#include "HX711.h"

//DT,SCKは実際の配線に応じる
const int DT_PIN = 3;
const int SCK_PIN = 2;
//キャリブレーション用変数。ロードセルに依存
const int calibrate_dec = -1099;
HX711 scale;

void setup() {
Serial.begin(9600);
scale.begin(DT_PIN, SCK_PIN);
Serial.println("Init");
// scale.set_scale();の(calibrate_dec)内にロードセルに応じた値を入れる
// 使用したキッチンスケールだと-1099がいい感じの値
scale.set_scale(calibrate_dec);
Serial.println("tare");
scale.tare();
}

void loop() {
// scale.get_units(10)の値を小数点以下2桁まで表示
//scale.get_units(10), 1にすれば1桁
Serial.println(scale.get_units(10), 2);
scale.power_down();
delay(100);
scale.power_up();
}

●Excelファイル

使い方は大体分かると思います。単純な機能のみです。

計測用.xlsm

※Win10Pro(x64) + Excel 2013で作成
※EasyComm使用。有用なモジュールをありがとうございます。
※常識の範囲内で、ご自由にお使いください。
※ご使用において、いかなる損害が生じた場合も、一切責任を持てませんのでご了承ください。

●検証

別のキッチンスケールで計量。ちょっと影になってて暗いけれど、346g(1g単位)。

 

Excel+EasyCommのシリアル通信で得た値。346.11g(小数点以下2桁表示)
少数第2位の値は常にゆらいでいるので、整数桁までは問題なく使用できそう(小数第1位はギリギリ使用できるかどうか微妙なところ)

Excelの結果。勝手にグラフ(散布図)にしてくれる。ポンっと上がったところが試料を載せたところ。

受信ソフト側(Excel+EasyComm)は、単純にシリアル通信で値を受けて表示+記録してるだけなので、g表示だけ直せば、他の用途にも使える。

●参考サイト

  • ストレインゲージの基本的なところとか
    • [blogcard url=”www.eleki-jack.com/FC/2011/11/1.html”]
  • ストレインゲージの出力をオペアンプで増幅するパターン
    • [blogcard url=”http://hackist.jp/?p=4362″]
  • HX711モジュールを使用するパターン。Arduinoスケッチサンプルあり
    • [blogcard url=”https://lowreal.net/2016/12/25/1″]
  • キッチンスケール+HX711版。
  • ロードセルとHX711、キャリブレーションとサンプリング周波数UPについて。Arduinoスケッチサンプルあり(LCD使用)
    • [blogcard url=”http://barcelona.lomo.jp/wp/?p=23″]
  • キッチンスケール+HX711、mbed使用(Not Arduino)
    • [blogcard url=”http://embedded.hateblo.jp/entry/2016/09/23/180733″]
  • キッチンスケール+HX711+LabVIEW Home Edition。Arduinoサンプルあり。
    • [blogcard url=”http://keisoku-lab.mond.jp/2017/07/11/%E3%82%AD%E3%83%83%E3%83%81%E3%83%B3%E3%82%B9%E3%82%B1%E3%83%BC%E3%83%AB%E3%82%92hack%E3%81%97%E3%81%A6-%E3%83%87%E3%82%B8%E3%82%BF%E3%83%AB%E5%87%BA%E5%8A%9B%E3%81%AE%E7%A7%A4%E3%82%92%E4%BD%9C/”]
  • ロードセル+HX711
    • [blogcard url=”http://dokechin.hatenablog.com/entry/2017/01/27/075507″]
  • ArduinoとEasyCommについて、EasyComm導入について詳しい(EasyCommのプロパティ・メソッドについても記述がある)
    • [blogcard url=”https://blogs.yahoo.co.jp/nobita_rx7/28090650.html”]

About the author: loki

Has one comment to “Arduinoでキッチンスケールの出力を受け取る”

You can leave a reply or Trackback this post.

  1. やまさき - 2018年9月25日 at 9:08 午後 Reply

    lokiさん こんばんは。
    今まで、電子天秤の数字をビデオに撮り、その数値と時間をメモにとり、エクセルに入力して、重さの変化を捉えていました。しかし、サンプル数が稼げなくて困っていました。lokiさんのシステムを見て、とても参考になりました。実験に使うため、自作をしようと考えています。ただ、マクロの知識が全くないので、エクセル2007のところで苦心しています。時間依存性をはかるので、計測用.xlsmをそのまま使わせていただけないでしょうか。また、そのままの形で使わせていただきたいので、マクロのパスワードをお教え願えないでしょうか。誠に図々しいお願いで申し訳ありませんが、よろしくお願いいたします。

Leave a Reply

Your email address will not be published.