HX711 Explained: How to Read a Load Cell and Wire It to an Arduino Uno
Share
The HX711 is a 24-bit analog-to-digital converter module built specifically to read the tiny differential voltage produced by a load cell and turn it into a digital weight reading a microcontroller can use. It sits between a load cell (a strain-gauge sensor that flexes under weight) and a board like an Arduino Uno, amplifying a signal that is normally too small to measure directly and sending it over a simple two-wire interface, not I2C or SPI. Because it runs on anywhere from 2.6V to 5.5V, it works on both 3.3V and 5V microcontrollers without a level shifter.
What does the HX711 do?
A load cell works by bonding strain gauges to a piece of metal that flexes slightly under load. That flex changes the gauges' electrical resistance by a very small amount, producing a differential voltage in the microvolt-to-millivolt range at its four output wires (commonly labelled E+, E-, A+, and A-, or A+/A- and B+/B- depending on the module). No microcontroller's analog input can resolve a signal that small on its own. The HX711 exists to close that gap: it is a precision 24-bit ADC with a built-in instrumentation amplifier, purpose-built for load cells and strain-gauge bridges. It takes the load cell's raw bridge voltage, amplifies it, digitizes it at 24-bit resolution, and hands a clean digital value to the microcontroller.
How does the HX711 actually work?
Once wired to a load cell, the HX711 continuously samples the bridge voltage and converts it at a selectable rate of 10 or 80 samples per second, set by its RATE pin. It does not use I2C or SPI. Instead, it uses its own simple bit-banged protocol: the microcontroller clocks the SCK (serial clock) line and reads the resulting bit stream back on the DT (data, sometimes labelled DOUT) line. A library, such as the widely used HX711.h (bogde/avinabmalla or Q2HX711), handles this clocking for you and returns a ready-to-use integer reading. That raw reading is not a weight in grams by itself — it is a count that only becomes a real weight after calibration.
How do you wire the HX711 to an Arduino Uno?
The HX711 needs exactly two digital I/O pins on the Arduino Uno for communication, plus power and ground. There is no fixed pin requirement; DT and SCK can go to almost any digital pins, but pins 2 and 3 are a common, conflict-free choice on an Uno.
| Arduino Uno Pin | HX711 Pin | Signal |
|---|---|---|
| 5V | VCC | Power (2.6V-5.5V accepted) |
| GND | GND | Ground |
| Digital Pin 2 | DT (DOUT) | Data output from HX711 to Arduino |
| Digital Pin 3 | SCK | Clock signal from Arduino to HX711 |
On the other side of the module, the load cell's four wires connect to the HX711's bridge inputs: the two excitation wires go to E+ and E-, and the two signal wires go to A+ and A- (check your specific load cell's datasheet for its wire colors, since these vary by manufacturer). Keep these leads short and away from noisy wiring, since the bridge signal is small enough that electrical noise can show up as reading jitter.
How do you calibrate the HX711?
A raw HX711 reading is meaningless until it is calibrated against a known weight. The standard procedure is: first, tare the scale by taking a reading with nothing on the load cell and storing that as the zero offset. Second, place an object of known weight (a kitchen weight, a set of coins, anything with a known mass) on the load cell and take another reading. Third, compute a calibration factor by dividing the raw reading difference by the known weight. Once that factor is set in your firmware, every subsequent raw reading is converted into grams or kilograms by subtracting the tare offset and dividing by the calibration factor. This calibration is specific to each individual load cell and mounting, so it needs to be redone if you swap the load cell or change how it is mounted.
Watch it built live
To see the HX711 selected and explained in a real build, we typed this into Compoden's storefront build assistant:
"I want to build a digital weighing scale project using an HX711 load cell amplifier and an Arduino Uno"
The assistant matched a full parts tray in seconds and explained the module in its own words: "The HX711 Load Cell Amplifier Module is designed to measure the tiny electrical changes from a load cell. It works with both 3.3V and 5V logic and runs on 2.6-5.5V, drawing about 15mA. This module takes the very small analog signal from the load cell and amplifies it, converting it into a digital signal that the Arduino can easily read using its GPIO pins." That matches the verified specifications above. For the exact pin assignments, use the wiring table in this article as the source of truth rather than any single generic wiring note in a chat response.
Watch the firmware get generated
We also asked Compoden's Soldr code assistant (voltiq-pwa) to generate firmware: "I want to build a digital weighing scale using an HX711 load cell amplifier and an Arduino Uno. Write the full Arduino firmware to read weight and print it to the serial monitor."
The Firmware tab shows a complete sketch built around the HX711.h library, with the build log noting it should be flashed via the Arduino IDE and read over the Serial Monitor at 115200 baud. As with any generated sketch, treat the pin numbers in the code as a starting point and cross-check them against the wiring table above before you wire anything up.
What is the HX711 good for?
The HX711 shows up anywhere a project needs to turn physical force or weight into a number: digital kitchen scales, luggage and parcel scales, industrial weighing and batching systems, fill-level and stock-tracking bins, and general strain-gauge readout for force or load monitoring in DIY and student projects. It is not a sensor itself — it is the amplifier and ADC that makes a plain load cell usable by a microcontroller.
Get everything in this build
These are the exact parts and prices Compoden's build assistant selected for this project, captured live from the storefront:
| Part | Price | Add to cart |
|---|---|---|
| Arduino Uno R3 CH340G ATmega328P Board | Rs.230 | Add to cart |
| HX711 Load Cell Amplifier Module | Rs.120 | Add to cart |
| 50kg Load Cell (Strain Gauge) | Rs.45 | Add to cart |
| 16x2 I2C Character LCD Display Module (1602 + PCF8574, pre-soldered) | Rs.235 | Add to cart |
| 5V 2A Micro-USB Power Adapter | Rs.140 | Add to cart |
| Male-to-Male Breadboard Jumper Wires (20 cm, 24 AWG) | Rs.40 | Add to cart |
| 400-point solderless breadboard | Rs.40 | Add to cart |
| Total (all 7 parts) | Rs.850 | Add all to cart |
Built and Backed by Compoden
Every part listed above ships from Compoden's India stock, with compatibility checked against the Arduino Uno before it is added to a build tray. Orders typically arrive in 3-7 days, with Cash on Delivery and UPI available at checkout. If a wiring or calibration step in your build does not behave as expected, Compoden's support team and the Soldr build assistant are available to help you get from parts to a working scale.
Frequently Asked Questions
Is the HX711 an I2C or SPI device?
No. The HX711 uses its own simple two-wire bit-banged protocol: the microcontroller clocks the SCK line and reads data back on the DT line. It does not use the I2C or SPI bus, so it does not share an address or a bus with other I2C/SPI peripherals.
Can the HX711 run on 3.3V logic?
Yes. Its operating voltage range is 2.6V to 5.5V, so it works with both 3.3V boards (like many ESP32 and STM32 boards) and 5V boards like the Arduino Uno without needing a level shifter.
How many pins does the HX711 need on an Arduino Uno?
Two digital I/O pins for communication (commonly DT to pin 2 and SCK to pin 3), plus power and ground. It does not require any analog pins.
Why do I need to calibrate the HX711 every time I change the load cell?
The calibration factor converts a raw reading into grams or kilograms based on that specific load cell's sensitivity and how it is mounted. A different load cell, or the same load cell remounted differently, will have a different relationship between raw counts and actual weight, so the calibration factor needs to be recalculated.