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


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

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

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

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

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

https://www.switch-science.com/catalog/6260/

https://akizukidenshi.com/catalog/g/gP-13043/

https://www.amazon.co.jp/gp/product/B01MZBBIO2/ref=ppx_yo_dt_b_asin_title_o01_s00?ie=UTF8&psc=1

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


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

https://kohacraft.com/archives/201910031018.html

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

![台.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/153631/8c78a977-7803-86da-66f2-4c675bd4cf92.jpeg)

これに乗せると

![台2.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/153631/00284ef3-4d82-4560-692f-6f20dc41eb93.jpeg)

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

![台3.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/153631/f47f9841-7733-6586-f3b6-7f53fec875f5.jpeg)


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

https://github.com/bogde/HX711

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

```c: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();
}
```

```c
  scale.set_scale(k);
```
は、購入したロードセルによって値が変わるので
重さがわかっているものを置いてその値になるように値を調整

#組み立て
![DSC_0707.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/153631/51900f81-b253-d3de-7303-343b9d8d357a.jpeg)
![DSC_0708.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/153631/91fed65c-3f76-d9b1-2b87-2a9c6dc619cc.jpeg)
![DSC_0709.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/153631/beeb8b3a-a85a-e120-8895-3b2c154ba9be.jpeg)
加湿器に貼り付け
![DSC_0711.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/153631/c79b07a1-3e23-b9f1-40a4-d06833f98300.jpeg)
![DSC_0807.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/153631/df66d7ad-f7f9-a7e8-fe2d-9cddcf8b4355.jpeg)


##完成！