带有HX711和ESP32模块的20kg电子称重传感器获得的值不正确

时间:2019-08-17 05:14:44

标签: arduino esp32

我有一个20公斤电子称重传感器来测量项目中的重量。要将称重传感器的值转换为人类可读的格式,我使用了HX711模块,该模块转换该值并将其提供给我的ESP32模块。问题是最大900gms可以给出适当的权重,但是当我们放更多的权重时,它会给出随机的长负值(例如-806235)。我不知道为什么会发生这种情况,即使称重传感器的能力是要测量20kg以下的体重。

我已将HX711库包含在ESP32的代码中。链接为:https://github.com/bogde/HX711

#include "HX711.h"

#define snsr_clk 4
#define snsr_data 15

HX711 scale;
float currentweight, scale_factor;

void setup()
{
    Serial.begin(9600);
    scale.begin(snsr_data, snsr_clk);

    //scale.set_scale();           //for calibration
    scale.set_scale(103229);       //measured scale factor
    scale.tare();
}

void loop()
{
  //For calibration purpose---------------------
  /*currentweight = scale.get_units(10);
  //Serial.print("Current weight:\t");
  //Serial.println(currentweight);

  scale_factor = (currentweight);
  Serial.print("Scale Factor:\t");
  Serial.println(scale_factor);*/
  //--------------------------------------------

  //To get value in kg---------------------
  Serial.print("Get Unit:\t");
  Serial.println((scale.get_units(10)*1000));
  //----------------------------------------------
}

请指导如何获得超过900克的重量。

1 个答案:

答案 0 :(得分:0)

Yeppee .. !!我解决了错误。 HX711的库中有一些更改。 shiftIn函数的更改如下所示:

uint8_t shiftIn(uint8_t dataPin, uint8_t clockPin, uint8_t bitOrder) 
{
    uint8_t value = 0;
    uint8_t i;

    for(i = 0; i < 8; ++i) {
        digitalWrite(clockPin, HIGH);     //remove comment from here
        if(bitOrder == LSBFIRST)
            value |= digitalRead(dataPin) << i;
        else
            value |= digitalRead(dataPin) << (7 - i);
        //digitalWrite(clockPin, HIGH);    //comment this line

        digitalWrite(clockPin, LOW);
    }
    return value;
}