Documentation

50kg Half-Bridge Load Cell Strain Sensor for Body Scale | ShillehTek Product Manual
Documentation / 50kg Half-Bridge Load Cell Strain Sensor for Body Scale | ShillehTek Product Manual

50kg Half-Bridge Load Cell Strain Sensor for Body Scale | ShillehTek Product Manual

manualshillehtek

Overview

This is the sensor hiding under every bathroom scale: a 50 kg half-bridge strain gauge cell in a slim 34 x 34 x 7.8 mm package. Inside, two ~1 kΩ strain gauge resistors sit on a flexing metal plate — one stretched and one compressed as weight presses the center button — with three wires bringing out the bridge: white and black are the two ends, and red is the center tap between the gauges. Press on the cell and the red wire's voltage shifts by microvolts per gram, which an HX711 amplifier turns into clean digital weight readings.

"Half-bridge" is the key word: one cell is half of the Wheatstone bridge that strain measurement needs. The classic build uses four of these cells, one under each corner of a platform — wired together, the four halves complete each other into a full bridge with 200 kg of combined capacity, exactly like a commercial body scale. Prefer a single cell? Two ordinary 1 kΩ resistors complete the bridge and give you a compact 0-50 kg sensor for one corner of whatever you are weighing.

Either way the readout side is identical to any load cell project: HX711 amplifier, a tare, a one-time calibration against a known weight, and gram-to-hectogram accuracy from Arduino, ESP32, Raspberry Pi, or Pico. Typical builds: DIY body scales, smart luggage checkers, keg and propane-tank level monitors, furniture occupancy sensing, and heavy-duty inventory shelves.

At a Glance

Capacity
50 kg per cell
Type
Half-bridge strain gauge
Wires
Red (signal), White + Black (ends)
Gauge Resistance
~1 kΩ per half
4-Cell Scale
200 kg full bridge
Size
34 x 34 x 7.8 mm

Specifications

Parameter Value
Sensor Type Half-bridge resistive strain gauge
Rated Capacity 50 kg per cell (4 cells = 200 kg platform)
Wiring Red = signal (center tap), White & Black = bridge ends
Resistance ~1 kΩ white-to-red and red-to-black (~2 kΩ end to end)
Sensitivity ~1 mV/V at rated load (full-bridge configuration)
Recommended Excitation ≤ 5V (supplied by the HX711)
Readout HX711 24-bit amplifier (required — signal is microvolts)
Dimensions 34 x 34 mm, 7.8 ± 0.2 mm thick, 14 mm center button
Body Aluminum alloy plate with raised center contact
Overload Behavior Brief overloads tolerated; sustained loads past rating skew calibration

Pinout Diagram

Three wires, one rule: red is special. Measure with a multimeter and you will find about 1 kΩ from white to red and 1 kΩ from red to black — red is the tap between the two strain gauge halves (the "positive strain" and "negative strain" resistors), and its voltage is what shifts under load. The cell only flexes correctly when the center button carries the load and the outer rim sits on its mounting ring — which is why scale kits mount each cell in a plastic cradle that touches only the rim.

50kg half-bridge load cell pinout diagram showing black, red, and white wires, 1k ohm strain gauge halves, and 34x34x7.8mm dimensions

Wiring Guide

The wiring puzzle for these cells is on the bridge side, and it is the same for every microcontroller. Four-cell scale (200 kg): place one cell under each corner, then join the outer wires of neighboring cells in a ring — white to white on two opposite sides, black to black on the other two — so the four half-bridges chain into one full bridge. The four red wires then go to the HX711: one opposite pair to E+ and E-, the other opposite pair to A+ and A-. Single cell (50 kg): complete the bridge with two 1 kΩ resistors in series across E+ and E-; wire white to E+, black to E-, red to A+, and the resistor junction to A-. After that, the HX711-to-board wiring is the standard four pins.

Arduino Wiring

Connection Goes To Details
4 cells (corner ring) HX711 E+, E-, A+, A- Opposite reds to E pair, other reds to A pair
HX711 VCC 5V
HX711 GND GND
HX711 DT D3
HX711 SCK D2
Tip: If the assembled scale reads negative when you step on, swap the A+ and A- wires at the HX711 — the bridge is fine, just inverted.

ESP32 Wiring

Connection Goes To Details
4 cells (corner ring) HX711 E+, E-, A+, A- As described above
HX711 VCC 3V3 Keeps DT at 3.3V logic
HX711 GND GND
HX711 DT GPIO 16
HX711 SCK GPIO 4
Warning: Power the HX711 from 3V3, not VIN — at 5V supply its DT pin outputs 5V, above the ESP32's rating.

Raspberry Pi Wiring

Connection Goes To Details
4 cells (corner ring) HX711 E+, E-, A+, A- As described above
HX711 VCC Pin 1 (3.3V) Never a 5V pin
HX711 GND Pin 6 (GND)
HX711 DT Pin 29 (GPIO 5)
HX711 SCK Pin 31 (GPIO 6)

Raspberry Pi Pico Wiring

Connection Goes To Details
4 cells (corner ring) HX711 E+, E-, A+, A- As described above
HX711 VCC 3V3(OUT) (pin 36) Do NOT use VBUS (5V)
HX711 GND GND (pin 38)
HX711 DT GP14 (pin 19)
HX711 SCK GP15 (pin 20)

Code Examples

Reading a 4-cell (or resistor-completed single-cell) bridge is identical to any HX711 project: tare empty, weigh a known object, divide to get your calibration factor. For a 200 kg scale, calibrate with something substantial — a person of known weight works far better than a 100 g weight at the bottom of the range.

Arduino

scale50kg_arduino.ino
// 4x 50kg Load Cells + HX711 - Arduino Body Scale Example
// DT -> D3, SCK -> D2, VCC -> 5V
// Library: "HX711" by Bogdan Necula (bogde)

#include "HX711.h"

const int DT_PIN = 3;
const int SCK_PIN = 2;

// After calibrating: factor = tared raw reading / known weight in kg
float CALIBRATION_FACTOR = 1.0;

HX711 scale;

void setup() {
  Serial.begin(9600);
  scale.begin(DT_PIN, SCK_PIN);

  Serial.println("Empty the platform... taring in 3 s");
  delay(3000);
  scale.tare(20);
  scale.set_scale(CALIBRATION_FACTOR);
  Serial.println("Ready - step on!");
}

void loop() {
  if (scale.is_ready()) {
    float kg = scale.get_units(10);   // average of 10 samples
    long raw = scale.get_value(10);   // tared raw (for calibration)

    Serial.print("Raw: ");
    Serial.print(raw);
    Serial.print("  |  Weight: ");
    Serial.print(kg, 2);
    Serial.println(" kg");
  }
  delay(500);
}

ESP32 (Arduino IDE)

scale50kg_esp32.ino
// 4x 50kg Load Cells + HX711 - ESP32 Example
// DT -> GPIO 16, SCK -> GPIO 4, VCC -> 3V3
// Library: "HX711" by Bogdan Necula

#include "HX711.h"

HX711 scale;
float CALIBRATION_FACTOR = 1.0;   // set after calibrating

void setup() {
  Serial.begin(115200);
  scale.begin(16, 4);               // DT, SCK

  Serial.println("Empty the platform... taring in 3 s");
  delay(3000);
  scale.tare(20);
  scale.set_scale(CALIBRATION_FACTOR);
  Serial.println("Ready - step on!");
}

void loop() {
  if (scale.wait_ready_timeout(1000)) {
    Serial.printf("Weight: %.2f kg\n", scale.get_units(10));
  }
  delay(500);
}

Raspberry Pi (Python)

scale50kg_rpi.py
#!/usr/bin/env python3
# 4x 50kg Load Cells + HX711 - Raspberry Pi Example (no library needed)
# DT -> GPIO 5 (pin 29), SCK -> GPIO 6 (pin 31), VCC -> 3.3V (pin 1)

import time
import RPi.GPIO as GPIO

DT, SCK = 5, 6
CALIBRATION_FACTOR = 1.0   # tared raw / known kg

GPIO.setmode(GPIO.BCM)
GPIO.setup(DT, GPIO.IN)
GPIO.setup(SCK, GPIO.OUT, initial=GPIO.LOW)

def read_raw():
    while GPIO.input(DT) == 1:      # wait for data ready
        time.sleep(0.001)
    value = 0
    for _ in range(24):             # 24 data bits
        GPIO.output(SCK, GPIO.HIGH)
        GPIO.output(SCK, GPIO.LOW)
        value = (value << 1) | GPIO.input(DT)
    GPIO.output(SCK, GPIO.HIGH)     # gain 128, channel A
    GPIO.output(SCK, GPIO.LOW)
    if value & 0x800000:
        value -= 1 << 24
    return value

def read_average(n=10):
    return sum(read_raw() for _ in range(n)) / n

print("Empty the platform... taring")
time.sleep(2)
zero = read_average(20)
print("Ready - step on!")

try:
    while True:
        kg = (read_average(10) - zero) / CALIBRATION_FACTOR
        print("Weight: {:.2f} kg".format(kg))
        time.sleep(0.5)
except KeyboardInterrupt:
    print("Stopped by user")
finally:
    GPIO.cleanup()

Raspberry Pi Pico (MicroPython)

scale50kg_pico.py
# 4x 50kg Load Cells + HX711 - Pico MicroPython Example (no library)
# DT -> GP14, SCK -> GP15, VCC -> 3V3(OUT)

from machine import Pin
import time

dt = Pin(14, Pin.IN)
sck = Pin(15, Pin.OUT, value=0)

CALIBRATION_FACTOR = 1.0   # tared raw / known kg

def read_raw():
    while dt.value() == 1:
        time.sleep_ms(1)
    value = 0
    for _ in range(24):
        sck.value(1)
        sck.value(0)
        value = (value << 1) | dt.value()
    sck.value(1)               # gain 128, channel A
    sck.value(0)
    if value & 0x800000:
        value -= 1 << 24
    return value

def read_average(n=10):
    return sum(read_raw() for _ in range(n)) / n

print("Empty the platform... taring")
time.sleep(2)
zero = read_average(20)
print("Ready - step on!")

while True:
    kg = (read_average(10) - zero) / CALIBRATION_FACTOR
    print("Weight: {:.2f} kg".format(kg))
    time.sleep(0.5)

Frequently Asked Questions

Why does this load cell have only three wires?
Because it is half of a Wheatstone bridge: two strain gauge resistors with the red wire tapping their midpoint, white and black at the ends. Full-bridge cells (like bar load cells) carry four wires because they contain all four resistors. Half-bridge cells trade that for a slimmer package — you supply the other half, either with three more cells or with two fixed resistors.
Can I use just one cell instead of four?
Yes. Complete the bridge with two 1 kΩ resistors in series across the HX711's E+ and E-: white to E+, black to E-, red to A+, resistor junction to A-. You get a 0-50 kg sensor with slightly more temperature drift than a 4-cell ring, since fixed resistors do not compensate the way matching gauges do. Use 0.1% resistors if you have them.
How do I wire four cells into a 200 kg scale?
Corner the four cells, then join outer wires of neighbors in a ring: white-to-white junctions on two opposite sides, black-to-black on the other two. That chains the four half-bridges into one full bridge. The four red wires go to the HX711 — one diagonal pair to E+ and E-, the other diagonal pair to A+ and A-. If the finished scale reads negative, swap A+ and A-.
Do I really need an HX711 — can my board's ADC read it directly?
You need the amplifier. At full load the bridge outputs only a few millivolts, and each kilogram is mere microvolts — far below what a 10- or 12-bit microcontroller ADC can resolve. The HX711 amplifies 128x and digitizes at 24 bits, which is precisely why it ships with every load cell kit.
How should the cells be mounted?
Only the outer rim should rest on the base, leaving the center button free to press down and flex the plate — the plastic cradle feet from bathroom-scale kits do exactly this. Bolting or gluing the whole underside flat to a board prevents flexing and kills the signal. Put a rigid platform across all four center buttons and keep it from rocking.
My readings wander a few hundred grams. How do I stabilize them?
Let the electronics warm up for a couple of minutes, average 10-20 samples per reading (the examples do), keep the cell wiring short and away from motors, and tare right before each measuring session. Mechanical issues — a rocking platform, debris under a rim, twisted cheap wiring — cause far more wander than the electronics; a solid build usually lands within ±50-100 g on a 200 kg platform.
What happens if I exceed 50 kg on one cell?
Brief moderate overloads are survivable, but sustained loads past the rating permanently deform the plate and shift calibration — the cell reads wrong forever after. Size with margin: for a 4-cell platform the 200 kg total assumes even distribution, so keep the expected maximum comfortably below it and re-check calibration if the scale takes a hard shock.

Related Tutorials