2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

M5AtomとHX711とロードセルで加湿器の水の量を可視化する

Posted at

家の加湿器の水の残量が分かりづらい

家の加湿器は水の残量をタンクの横からみて実際の水の量を見るしかない。。。
水切れにいたってはちっちゃい赤いLEDがつくだけ!

一応音なるけどそれ聞き逃したらわからん!

なので、水の量をもうちょっと可視化できるようにしようと思う。
ついでにAmbientにもデータを送信

##材料
1.M5 ATOM   重さを測ってambientに重量を送信、ついでにLEDで残量も表示
2.ロードセル  重さを図るセンサー、今回はハーフブリッジのやつ
3.HX711    ロードセルから値を取得するために必要なアンプ的なもの?
4.その他もろもろ

なんか無駄に高いの買っちゃった気がするけども。。。

参考にさせていただいた、というかやってることはほぼこちらのページ

##まずはロードセルを乗せる台を作成
ロードセルは金属が歪むことで重さを測るわけだけども
今回買ったロードセルは床に直に置かず、歪む部分を中に浮かさないいけないので
まずはロードセルを乗せる台を作成。

台.jpg

これに乗せると

台2.jpg

こうなる
加湿器の足にはまるように上にも追加

台3.jpg

#ソース
HX711 のライブラリはこちらを使用

ライブラリ内のサンプルソースを元に改良

HX711_WeightMeasurement.ino
#include "M5Atom.h"
#include <WiFi.h>
#include "Ambient.h"
#include "HX711.h"

#define ssid xxxx
#define password xxxx

// Ambient関係
unsigned int channelId = xxxx; // AmbientのチャネルID
const char* writeKey = xxxx // ライトキー
WiFiClient client;  // ambient送信用
Ambient ambient;

// ロードセル関係
HX711 scale;
float k = -25.0;
// HX711 circuit wiring
const int LOADCELL_DOUT_PIN = 21;
const int LOADCELL_SCK_PIN = 25;

void setup() {
  M5.begin(true, false, true);
  Serial.println("HX711");
  M5.dis.drawpix(0, 0xffffff);            // W点灯
  delay(1000);
  M5.dis.drawpix(0, 0x000000);            // 消灯
  M5.dis.drawpix(0, 0x0000FF); // Blue

  WiFi.mode(WIFI_STA);
  WiFi.begin(ssid, password);
  for (int i = 0; WiFi.status() != WL_CONNECTED; i++) { // 接続できるまで
    if (i >= 60) esp_restart(); // 60秒つながらない場合はリブート
    delay(1000);
    Serial.print(".");
  }

  M5.dis.drawpix(0, 0xFF0000); // Green
  delay(1000);
  M5.dis.drawpix(0, 0x000000);            // 消灯

  // 自分のIPアドレスを表示
  Serial.println("");
  Serial.println("WiFi connected");
  Serial.print("IP address = ");
  Serial.println(WiFi.localIP());

  // チャネルIDとライトキーを指定してAmbientの初期化
  Serial.println("ambient setup");
  ambient.begin(channelId, writeKey, &client);

  // HX711の初期化
  Serial.println("scale setup");
  scale.begin(LOADCELL_DOUT_PIN, LOADCELL_SCK_PIN);
  scale.set_scale(k);
  scale.tare();                // reset the scale to 0

}

float maxWeight = 100000;
void loop(void) {
  Serial.println("loop");

  // 重量を取得
  float weight = scale.get_units(10);
  scale.power_down();// put the ADC in sleep mode
  Serial.println(weight, 1);

  // LEDを消灯
  for (int i = 0; i < 25; i++)
    M5.dis.drawpix(i, 0x000000);

  int ledCnt = int((weight / maxWeight) * 25);
  for (int i = 0; i < ledCnt; i++)
  {
    if (i < 10)
      M5.dis.drawpix(i, 0x00ff00); //red
    else if ( 10 <= i &&  i < 15)
      M5.dis.drawpix(i, 0xffff00); // yellow
    else
      M5.dis.drawpix(i, 0xff0000); // green
  }

  // ambientに送信
  ambient.set(1, String(weight/1000).c_str());
  ambient.send();
  Serial.println("Ambient Send");
  delay(1000 * 60 * 5); // 5分おきに計測&データ送信
  //delay(10000); // 10Sおきにに計測&データ送信
  scale.power_up();
}
  scale.set_scale(k);

は、購入したロードセルによって値が変わるので
重さがわかっているものを置いてその値になるように値を調整

#組み立て
DSC_0707.jpg
DSC_0708.jpg
DSC_0709.jpg
加湿器に貼り付け
DSC_0711.jpg
DSC_0807.jpg

##完成!

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?