重量計_HX711-ハーフブリッジロードセル1個

 

JUGEMテーマ:電子工作

重さをはかるロードセルシリーズ第4弾です。

 

ハーフブリッジ4個で構成
 https://ameblo.jp/fc2miha/entry-12835245969.html
 http://miha.jugem.cc/?eid=360
フルブリッジ1個で構成
 https://ameblo.jp/fc2miha/entry-12835409272.html
 http://miha.jugem.cc/?eid=361
ハーフブリッジ2個で構成
 https://ameblo.jp/fc2miha/entry-12835545932.html
 http://miha.jugem.cc/?eid=362

 

ハーフブリッジ1個で構成
 →今回の試み。

 

という事で、ハーフブリッジ1個と固定抵抗を組み合わせてフルブリッジ構成にする記事です。

 

■回路

 


 ハーフブリッジロードセルの中身に2個の抵抗がついている。
 それに普通の固定抵抗を加えてフルブリッジ構成になっている。

 

■ハマりポイント

 ゼロ=0が安定しない。
 上記のハーフブリッジ2個の時も安定しない傾向が見られたが、
 1個だと全く安定しません。
 
 何かを載せた時に測定結果が大きくなるので、それなりに重量センサーとして働いてはいます。
 ただ、誤差が大きくて、0が定まらなく、正確に重さをはかる用途には不向きな気がします。
 スイッチみたいに使う分には出来そうだけど、あまり実用的ではないです。
 1個のフルブリッジにするか、ハーフの4個が正確な様です。

 

■プログラム

 

色々試行錯誤してみました。

 

改善点
 測定を10回平均とした。
 HX711の仕様によると、データが準備できると、DTをLowにするとなっているので、
  測定開始時DTのLowを待ってからデータを読み取るように変更

 

long saisyo = 0;

long get2()
{
  while(1){
    if(!digitalRead(8)){
      break;
    }
  }
  
  long ret = 0;
  for (char i = 0; i < 24; i++) {
    digitalWrite(9, 1);
    delayMicroseconds(1);
    digitalWrite(9, 0);
    delayMicroseconds(1);
    ret = (ret << 1) | (digitalRead(8));
  }
  ret = ret ^ 0x800000;
  return ret;
}

long get()
{
  //return get2();
  
  long total = 0;
  long ret = 0;
  //digitalWrite(9, 0);
  //delay(1000);
  for (int i=0;i<10;i++) {
    total = total + get2();
  }
  ret = total / 10;
  return ret;
}

void setup()
{
  Serial.begin(9600);
  Serial.println("start");
  pinMode(9, OUTPUT);
  pinMode(8, INPUT);

  
  for(int i=5;i>0;i--){
    Serial.print(i);
    delay(1000);
  }
  Serial.println("0");
  
  saisyo = get();
  
  Serial.print("saisyo=");
  Serial.println(saisyo);

}
void loop() {

  long atai = 0;

  atai = get();
//  for (char i = 0; i < 24; i++) {
//    digitalWrite(9, 1);
//    delayMicroseconds(1);
//    digitalWrite(9, 0);
//    delayMicroseconds(1);
//    atai = (atai << 1) | (digitalRead(8));
//  }
//  atai = atai ^ 0x800000;

  Serial.print("atai=");
  Serial.println(atai);
  
  long omosa;
  omosa = ((atai - saisyo)) / 640;
  omosa = omosa * 10;
  Serial.print("omosa=");
  Serial.println(omosa);
  
  delay(2000);
}