M5AtomMatrixで重量の検査


#M5AtomMatrixが届いたので早速…

M5StickCと違ってバッテリーが搭載されていません。
電源供給さえなければ、きちんと電源が落ちる 良心的設計。
横のボタンのリセットボタンを押せばちゃんと再起動してくれる。

標準でLED Matrixがついているため、簡易信号が作れるなと思い、ロードセルを使って、
規定の重量になったら緑色、それを超えたら赤色→紫色になるような仕様で
野菜の重量選別機を作ろうと思いました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/399986/a481f0d0-3d36-64b8-7e46-fa71a57fe895.png)





M5Stackで既にロードセルを使用していた事例が紹介されていましたので参考にさせていただきました。
<b>M5Stackで始めるセンサ・インターフェーシング (5) 重量センサとHX711</b>
https://www.denshi.club/cookbook/arduino/m5stack/m5stack-5.html

##準備するもの
###M5AtomMatrix ￥1,397(税込み)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/399986/e385f065-fac2-9ce2-cded-b63135ea4066.png)
https://www.switch-science.com/catalog/6260/


###ロードセル(5kgまで)
(半田付けしてあるこちらがおすすめ)　￥1300(税込み)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/399986/765599f9-fb6b-f537-c83f-1ee1cec868de.png)
https://www.amazon.co.jp/dp/B07JL7NP3F/ref=cm_sw_em_r_mt_dp_U_EhIsEbG3YD690


###GROVE - 4ピン-ジャンパメスケーブル(1本あればOK) ￥550(税込み)
https://www.switch-science.com/catalog/1048/


##配線図
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/399986/8c98e256-8eb5-7dc0-b1d3-9ed7ef51b8ca.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/399986/0f6b82fa-a0e1-7996-c5f1-c7e4811b5e1a.png)


###ソース



```atom.c
#include "M5Atom.h"
#include "hx711.h"

float firstReadData;
float weight;
#define M_SIZE 1.3333
#define TFT_GREY 0x5AEB
float ltx = 0; // Saved x coord of bottom of needle
uint16_t osx = M_SIZE*120, osy = M_SIZE*120; // Saved x & y coords
int old_analog = -999; // Value last displayed

HX711 scale(32, 26); // 32:DOUT 26:SCK

extern const unsigned char AtomImageData[375 + 2];

uint8_t DisBuff[2 + 5 * 5 * 3];

void setBuff(uint8_t Rdata, uint8_t Gdata, uint8_t Bdata)
{
    DisBuff[0] = 0x05;
    DisBuff[1] = 0x05;
    for (int i = 0; i < 25; i++)
    {
        DisBuff[2 + i * 3 + 0] = Rdata;
        DisBuff[2 + i * 3 + 1] = Gdata;
        DisBuff[2 + i * 3 + 2] = Bdata;
    }
}

void setup()
{
    M5.begin(true, false, true);
    delay(10);
    setBuff(0x00, 0x00, 0x00);
    M5.dis.displaybuff(DisBuff);
 
//下記2行の値を調整して重さ検知時の値が0に近くなるように調整します。
    scale.setOffset(8800);
    scale.setScale(1889250);
//
 
    scale.getGram();
    delay(1000);
    firstReadData = scale.getGram();     
}

void loop()
{
    //weight = (scale.getGram() - firstReadData) / 2.0;
    weight=0;
    weight = scale.getGram();
    Serial.print("weight: ");
    Serial.println(weight); 
    delay(100);

    if(weight<=0.5){    //何もないとき
      setBuff(0xFF, 0xFF, 0xFF);
      M5.dis.displaybuff(DisBuff);
        
    }else if(weight<=0.6 && weight>=0.5){
      setBuff(0x00, 0xFF, 0x00);
      M5.dis.displaybuff(DisBuff);

    }else if(weight<0.7 && weight>=0.6){
      setBuff(0xFF, 0x00, 0x00);
      M5.dis.displaybuff(DisBuff);
      
    }else if(weight>=0.7){
      setBuff(0xFF, 0x00, 0xFF);
      M5.dis.displaybuff(DisBuff);
      
    }else{
      setBuff(0xFF, 0xFF, 0x00);
      M5.dis.displaybuff(DisBuff);
      
      }
    
    M5.update();
}
```

M5Stack用のHX711のライブラリをダウンロードして、同じフォルダ内に解凍したファイルをコピーします。
https://github.com/m5stack/M5-ProductExampleCodes

##動画

<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">
<a href="https://t.co/hVjOtk2GWf">pic.twitter.com/hVjOtk2GWf</a></p>&mdash; iizuka@情シスとかの人 (@t_iizuka_camp) <a href="https://twitter.com/t_iizuka_camp/status/1257444752783486986?ref_src=twsrc%5Etfw">May 4, 2020</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

##さいごに
グラム単位の正確な精度を出せてないので野菜の選別まではまだ難しいですが、
ソース内のスケールとオフセットを工夫すればうまく行けそうな気がします。

以上です。