Arduino Digital Scale Hack

How to hack a digital postal / kitchen scale to work with Arduino? This tutorial shows how to take a cheap $6 digital scale and have Arduino read the weight. 

There are many cool projects you can then do.

Arduino Digital Scale Hack

Technical Overview

a digital scale has something called a load cell to measure weigh. Load cell is a metal bar that gets stretched when weight is put on top. When the metal gets stretched it changes its electrical resistance. You can make a relation ship between amount of stretch and resistance change. That is what how we get the weight.

The issue is that the streatch is very very tiny, so is the resistance change, very very tiny. So inorder to read that small electrical resistance change, we need an amplifier. The operational amplifier that was designed just for that function is called Instrumentation Amplifier.

An Instrumentation amplifier can take tiny reistance changes an scale into 0v to 5v range that any microcontroller can read.

One last note, a technique to measure that tiny electrical resistance variation is called Wheatstone bridge. You’ll that nomenclature used through this turorial

Material needed

  • Arduino Uno
  • Digital Scale (from eBay)
  • Instrumentation amplifier: INA122P  or similar
  • Wires (eBay)

How to get the scale: Do a search for “5kg digital scale” on eBay and you should find the same scale as the one below.

Project Objective:

Have a Arduino (or other microcontroller) reading the the load cell that I removed from a kitchen scale.

This is the scale I am using. It is sold as having a max load rating of 5kg.
 digital kitchen postal scale to be hacked
The load cell has a sticker that reads 5kg. It uses two AA batteries.

Arduino Digital Scale Hack


Read the load cell’s 4 wires and use an Instrumentation Amplifier to get the signal in the voltage range the microcontroller can read. My microcontroller has a 10 bit analog to digital converter mapped 0-5v.

This is the circuit board inside the scale. Note wire color & labels in the left.
Red : E+
Black: E-
Green: I+
White: I-
I will assume that E stands for excitation and I for Input.
digital scale circuit
Probing the circuit with an oscilloscope during normal scale operation, I measure an excitation voltage of 2.10v. That is around 200mV below battery voltag. I did not observe an alternating polarity in the excitation voltage.

Load Cell Interface Circuit

I created the circuit below to make the interface between the load cell and the microcontroller. I selected a Texas Instruments INA122P as my Instrumentation Amplifier. And I’m using a 5v  the excitation voltage. That IC takes the tiny voltage variations of the load cell’s strain and amplified into a 0 to 5v range
After discussing this with a Texas Instruments expert I note that R13 and R14 are not needed since the cell is already being biased.

Intermediate Results

I performed a “load swipe” with 4 configurations. With a gain of 9761 and 4883 and swapping the polarity of I+/I- going to the op amp IN+/IN-. Convention:  POL+ means I’m connecting  I+ to opamp IN+ and POL- means that I am swapping I+ and I- .
As you can see in the graph below, I could not find gain & polarity combination that would work in the weight full range. It seems like one polarity works best for higher weights (over 400g) and the opposite polarity works best for less weight (under 300g)

Why not working?

The answer is that I need to remove the offset.
* When I take my circuit out and put the original back in scale still works fine. Meaning load cell not damaged.
* I don’t see a resistor in the load cell that would let me balance its internal Wheatstone bridge.

Removing the off-set: balancing the bridge

In order to utilize the full range the load cell can offer we need to shift the signal. That is accomplished by a trim offset circuit. There are several ways to construct that circuit. Here’s what I have:
8741.Bridge trim

Updated Results

By adding a trim circuit to remove the voltage offset, we now read the value encompasses the full weight range, that the load cell is capable of.

0312.Load Cell Curve_w_offset

Have a question? Leave a comment and I’ll respond.