Load Cell and HX711 in UNO board

I’m working on a small-scale project using an Arduino Uno, an HX711 amplifier, and a 4-wire load cell. The setup works in the sense that I can read values from the HX711 and the weight changes when I apply force, but the readings are extremely unstable.

Even when a constant weight is applied, the value keeps fluctuating and slowly drifting over time instead of stabilizing. For example, the measurement might start around a certain value and then gradually decrease or wander even though nothing is changing mechanically.

Things I’ve already tried:

  • Averaging multiple samples using scale.get_units(10)
  • Re-taring the scale
  • Letting the HX711 warm up
  • Checking wiring multiple times
  • Powering the system through USB and through a separate supply
  • Ensuring the load cell is mounted properly and not touching other surfaces

Despite all of that, the readings still fluctuate significantly. It makes the system very difficult to use for any measurement that needs even moderate stability.

At this point I’m wondering if this behavior is just typical of cheap HX711 + load cell setups, or if I might have a defective load cell or amplifier module.

Has anyone experienced similar instability with this setup? Are there known tricks to improve stability, or should I consider using a different ADC or higher quality load cell?

Here is a sample of the output data:

���f��~怘����f������fxx�������怘����f������fxx�������怘�f�f���xfx□�~ff�~�`������怘�HX711 scale test

HX711 not ready...

HX711 not ready...

Remove weight...

Scale ready.

Weight: -0.78

Weight: -8.28

Weight: -14.67

Weight: -19.47

Weight: -24.10

Weight: -28.21

Weight: -31.83

Weight: -35.17

Weight: -38.16

Weight: -41.01

Weight: -43.58

Weight: -46.16

Weight: -48.01

Weight: -50.11

Weight: -51.72

Weight: -53.03

Weight: -54.34

Weight: -55.44

Weight: -56.36

Weight: -57.51

Conections:

#include "HX711.h"

#define HX711_DT 8
#define HX711_SCK 9

HX711 scale;

float calibration_factor = 420.0;

void setup() {
  Serial.begin(57600);
  delay(2000);

  Serial.println("HX711 scale test");

  scale.begin(HX711_DT, HX711_SCK);

  while (!scale.is_ready()) {
    Serial.println("HX711 not ready...");
    delay(500);
  }

  Serial.println("Remove weight...");
  delay(3000);

  scale.set_scale(calibration_factor);
  scale.tare();

  Serial.println("Scale ready.");
}

void loop() {
  float weight = scale.get_units(10);

  Serial.print("Weight: ");
  Serial.println(weight);

  delay(500);
}


I had the same thing happen, I fixed it with the multiple readings, sort by value, take median API in the library, sorry don't recall the name.
Your Serial output does NOT show fluctuating and drift, it is constrantly increasing.

  1. Did you calibrate?
  2. Post ALL your code in code tags.

Post a picture of your wiring, that sounds a lot like noise.

Hello,
I just added the code. Yes, I tried to calibrate, but since the values are always decreasing. It makes it difficult to know when it is the right value.

Just added a couple of pictures to the post.

Please read the pinned post 'How to get the most from the Forum'
In the future do NOT edit or add to an existing post, just add on.

Did you run the example calibrate sketch?

hx711can output value between 0 and 8M for one direction, for sure they fluctuate. Take some approx. reading with no load and another with ~ half of the rated load of your cell. What digits you get?

Start with the example Kitchen scale. NOTE: all and every API call must be done in the exact order. The only changes to make to the example is the display part, the rest is correct as is.
I used median_avg and 15 samples. That gives a fairly clean result.

Hi @albaren1
See this topic:

Check if missing ground.

Your soldering needs a bit of practice. It looks like the iron was held a long time burning the wire and not hot enough to properly melt the solder. It appears you are using lead free, try a 60/40 from a known supplier such as Kester.

You might try buying some DuPont type cables and cutting to length, that will keep the module pins clean. They cost less then a pack of cigarettes. The wire in some is very thin so be careful. Do not give up on the soldering practice.

I hve seen you use this analogy before.
Remember that this is a global site.
Cigarette price differs a lot around the world.
Here (NZ) a packet of 20 is US30.00
You can buy a shipload of dupond wires for that.
Leo..

Here in BD, we can by at US$30.00 --
23 x 20-pin x 30-cm male-to-male jumpers.

Data looks like a discharging capacitor.