Introduction: Arduino Load Cell / Scale

Picture of Arduino Load Cell / Scale

From the minds at http://arduinotronics.blogspot.com/

Important Update!

Since so many people were having problems with the INA125P, we now have a new and improved version that uses the Hx711 24bit ADC amplifier module. http://arduinotronics.blogspot.com/2015/06/arduino-hx711-digital-scale.html


My goal was to create a programmable scale for weighing objects, parts counting, even directing product flow on a conveyor system.

I needed a load cell, a Arduino, and an amplifier.

Step 1: The Load Cell

Picture of The Load Cell

On this load cell (from a Accuteck  W-8260-86W Postal Scale) the 4 wires coming from the load cell are:

Red: Excitation +
White: Signal +
Green: Signal -
Black: Excitation -

This matches the GSE / NCI / Sensotec wiring scheme.

http://www.controlweigh.com/loadcell_colors.htm
I disconnected the 4 wires from the control board in the scale, so they would be available for the next step.

Step 2: The Amplifier

Picture of The Amplifier

To increase the output of the load cell so that the Arduino can read it on an analog input, we will need a INA125P amplifier and a 10 ohm resistor. Connect to the Arduino as indicated on the attached schematic.

Data Sheet: http://www.ti.com/lit/ds/symlink/ina125.pdf

Step 3: The Code

Picture of The Code

// Arduino as load cell amplifier
// by Christian Liljedahl
// christian.liljedahl.dk

// Load cells are linear. So once you have established two data pairs, you can interpolate the rest.

// Step 1: Upload this sketch to your arduino board

// You need two loads of well know weight. In this example A = 10 kg. B = 30 kg
// Put on load A
// read the analog value showing (this is analogvalA)
// put on load B
// read the analog value B

// Enter you own analog values here
float loadA = 10; // kg
int analogvalA = 200; // analog reading taken with load A on the load cell

float loadB = 30; // kg
int analogvalB = 600; // analog reading taken with load B on the load cell

// Upload the sketch again, and confirm, that the kilo-reading from the serial output now is correct, using your known loads

float analogValueAverage = 0;

// How often do we do readings?
long time = 0; //
int timeBetweenReadings = 200; // We want a reading every 200 ms;

void setup() {
  Serial.begin(9600);
}

void loop() {
  int analogValue = analogRead(0);

  // running average - We smooth the readings a little bit
  analogValueAverage = 0.99*analogValueAverage + 0.01*analogValue;

  // Is it time to print?
  if(millis() > time + timeBetweenReadings){
    float load = analogToLoad(analogValueAverage);

    Serial.print("analogValue: ");Serial.println(analogValueAverage);
    Serial.print("             load: ");Serial.println(load,5);
    time = millis();
  }
}

float analogToLoad(float analogval){

  // using a custom map-function, because the standard arduino map function only uses int
  float load = mapfloat(analogval, analogvalA, analogvalB, loadA, loadB);
  return load;
}

float mapfloat(float x, float in_min, float in_max, float out_min, float out_max)
{
  return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min;
}

Step 4: Calibration and Use

Picture of Calibration and Use

You'll now see data displayed in the Serial monitor, but it won't make much sense until you calibrate the scale. Follow the steps in the code for calibration, and you are now ready to use this scale, add additional features like buttons for zeroing tare weight, or controlling servos and relays  for process control.

http://arduinotronics.blogspot.com/2013/01/working-with-sainsmart-5v-relay-board.html

Comments

StevenH178 (author)2016-11-10

i am trying to get my fixed bowl that will be sitting on top of my load cell to be my zero points. can you tell me how to do this?

my bowl weighs 0.147 kg and the analog reading i got is 96.

i created a variable and set it to 96 and then subtracted analogValueAverage = analogvalA - variable. I do get the analog value to read zero, but when something is added to the bowl the analog value will not change why?

i am getting:

analogValue: 0.00
load: -6.40610

mrouse25 (author)StevenH1782017-04-19

Don't try and do that on the hardware side, do that on the software side. Every time you read an analog value, just subtract the analog value of just the bowl from it and you'll get the difference (i.e., what is inside the bowl).

Marcod96 (author)2016-12-04

Looking at the comments there are a lot of confusion relating to calibration.... It's important to select the correct load cell for the correct application.

A max = 200g loadcell won't cope with 5 kg, the same way that a 20t won't cope with 5 kgs.

It's important to define the zero (no load) and a full load calibration with a knowing weigh mass or object. Also is important to define the division (or increments) that you trying to establish.

A 20Kg X 0.100g = 200 divisions, mean the displayed weight will be 0.00kg (for zero).

Hope this helps.

markjuvida (author)2016-11-06

The cell gives output even though im not pressuring the load cell.

Please help. I juse hx711

Marcod96 (author)markjuvida2016-12-04

So it should!? do you mean floating output? what's the capacity of it?

sspence (author)2016-10-25

it's in the directions, btu I have found the ina to be troublesome unless wired very carefully.

lynduh (author)2016-10-22

I am working on my final year project in college and I chose this project topic. Please can I get the schematic to this project. If not can you show me how to. It will make my day. thanks a lot.

sspence (author)lynduh2016-10-22

Schematics are posted in the instructable.

StevenH178 (author)2016-10-20

how can i get the results to be read in grams or ounces?

sspence (author)StevenH1782016-10-21

Use a HX-711, those are calibrated fro grams, and it's easy to do a math conversion to ounces.

sunil78965400 (author)2016-09-29

Connecting formats are wrong.

sspence (author)sunil789654002016-09-29

How so?

sspence (author)2016-09-02

It's possible that load cell (4 wire?) will not work with the hx-711. I don't know.

sspence (author)2016-08-23

I noticed this in the spec: excitation voltage 9 VDC – Maximum 12 VDC

Also How do you have the load cell mounted?

NaveenI7 (author)sspence2016-09-02

I used arduino to power the hx711 circuit .My arduino was powered using USB cable.It shows 50 gms for 40 kg weight.

sspence (author)NaveenI72016-09-02

Are you using channel a or channel b, B is fixed amplification, A is programmable.

NaveenI7 (author)sspence2016-09-02

I am using channel A.

sspence (author)2016-08-23

what weight does it show, and what weight should it say?

NaveenI7 made it! (author)2016-08-21

I am using hx711 with 200kg loadcell.This is my code but output is very bad even though I put a platform for weighing scale it shows zero weight.But when I give pressure it changes but to small extent.

#include <hx711.h>

// Hx711.SCK - pin #A0

Hx711 scale(A1, A0);

void setup() {

Serial.begin(9600);

}

void loop() {

Serial.print(scale.getGram(), 0);

Serial.println(" g");

delay(200);

}

sspence (author)NaveenI72016-08-23

Are you using a 4 wire load cell?

NaveenI7 (author)sspence2016-08-23

Yes , it's a 4 wire load cell.Below is the link for image

http://www.gjimpex.co.in/load-cell-czl-601ac.htm

NaveenI7 (author)NaveenI72016-08-23

Actually when I give pressure to one end of sensor ,weight increases but showing wrong weight.In rest position ,it shows zero value.

NomatoG (author)2016-08-11

i got random data sir, how to calibrate hx711 with 5kg loadcell?

sspence (author)NomatoG2016-08-12

if you loaded the hx-711 library, it should be outputting in grams. make sure your s (a) wires are not reversed.

NomatoG (author)sspence2016-08-17

i have trouble sir, any idea?

sspence (author)NomatoG2016-08-17

Your wires are reversed.

ShreeB3 (author)2016-07-28

how can i get the output in kg .tell me the code for this and also i needthe basic of this gram program

sspence (author)ShreeB32016-07-29

The hx-711 version outputs in grams. Use that version.

ChenH9 (author)2016-07-20

Can u estimate from the results, what is the accurecy rate of the results? Is it possible to get grams?

sspence (author)ChenH92016-07-20

The HX-711 version is accurate, and outputs in grams.

ChenH9 (author)sspence2016-07-20

Thanks for your reply, can i count on it to return 50g differences?

sspence (author)ChenH92016-07-20

I've measured 0.05 gram differences

ChenH9 (author)sspence2016-07-20

Amazing, thank you sir!

DominicM23 (author)2016-02-22

Can a load cell be programmed to alert when something weighs less than it did when it was first placed on the sensor?

sspence (author)DominicM232016-02-22

yes, you can program it to alert on any decision code you write.

DominicM23 (author)sspence2016-02-23

Thanks for the quick response. Would there be any instructions that come with the product on how to do this or is it something that only a tech savvy person knows?

sspence (author)DominicM232016-07-07

The companies that make the parts have no way of knowing how you will use them, but they do provide data sheets. You have to know what you want to do with it, and how.

Shankar NarayanP (author)2016-04-11

All the hacks on internet pertaining to load cell recommends use of an amplifier to get the signal readable by any microcontroller like Atmega (arduino). That's fair. But what I always wonder is how does the lcd work without an amplifier? How is that the scale is able to work without that amplifier??!!

sspence (author)Shankar NarayanP2016-07-01

The LCD is digital, no amplifier is needed. it works on the same 5v signalling the arduino uses.

PaulJ75 (author)Shankar NarayanP2016-07-01

Hello. The amplifier is needed to change the signal (in this case voltage in anaologue form) to a readable level but proportional to what a load cell uses. The lcd communicates at the same voltage level already. A load cell system built for the arduini platform is already working witht he same voltage reqyiremwnts and will not need an aditional aplifier circuit. I hope that this is helpful. The sensors built for arduino are designed to be modular and have these presets already desig ed to work together.

KeyurV1 (author)2016-04-10

I have made same circuit but I am getting a problem in amplifying the voltage. I have tried this with a 3 wired load sensor in which I am keeping 2 resistors on the breadboard and 2 wires (black and white) coming out of load sensor are connected to make a Wheatstone bridge and I am reading the value of voltage between red wire of load sensor and its other end in Wheatstone bridge. Now when I am applying force on load sensor then it's value are changing ( very minute change but still change I have to amplify that). Now my problem is I am able to amplify the value of the voltage but the change is so minute that it's amplification doesn't show up in comparison to the actual voltage. How should I go about it?

matti.virta.1 (author)2016-03-06

I have weight sensor(load cell) 4 wire sensor+hx711 amp,+arduino uno r3, test code what i found at net working fine.

but how i adding code weight limit alarm led ?

mean if value = X then ledpin output hight else low. i try many code but no working ?

full code need be if button1 high ledpin1 high.(run pump) then value == X limit then ledpin2 high else low(alarm stop pump). but i try many time write code and all style not working ,how thats must made ??????

Christelle JoyL (author)2016-02-27

Hi, sir! I have a project about BMI Machine and I use the load cell as my sensor in weight. I just want to ask if how to call the output of the amplifier so I can manipulate it in the program, and use it in my actuator, which is the servo motor. Thank you so much for the response.

Nur Amelinaz (author)2016-02-24

hello sir, I use the weight sensor for my final project. so, I want to ask you some question about weight sensor coding. can I use, the arduino coding in the microcontroller coding? its same or not? or in microcontroller have a other coding to make a programming? that,s all. thank you.

sspence (author)Nur Amelinaz2016-02-24

The arduino is a microcontroller, based on the Atmel 328P. If you have a different microcontroller, you will have to modify the code and library appropriately.

sspence (author)2016-02-23

Well, I posted all the code that make this project work, so you are free to change the code, but it does require some C programming savvy. I am available for custom programming. Cost would depend on the scope of the changes, but might be as little as $25

TannerW4 (author)2016-01-04

I got a Taylor scale (http://www.taylorusa.com/kitchen/food-scales/glass-digital-kitchen-scale.html) and can't seem to find the manufacturer, unless they are the manufacturer in which case they're not listed on the color charts you linked. The labels seem to be misaligned as well. Is there any other way to tell which are signal and excitations?

sspence (author)TannerW42016-01-05

assume red and black are power and ground, and white and green are signal, if scale reads funny, reverse white and green.

tunay02 (author)2015-12-26

Hello! Can you help me very urgent I need all the code for the operation of this scale var.lütf hx711 I am using the Layout in this project? I'm sorry for bad english.

sspence (author)tunay022015-12-26

code for the hx711 is at http://arduinotronics.blogspot.com/2015/06/arduino-hx711-digital-scale.html make sure you download and install the library.

About This Instructable

330,597views

129favorites

License:

Bio: Professionally, I'm an IT Engineer (Executive Level) and Electronics Tech. I'm a Amateur Radio Operator (KK4HFJ). I lived off grid, with Solar (PV ... More »
More by sspence:DIY I2C LCD Display with InputsRaspberry Pi & the Neo 6M GPSEarthquake / Vibration Sensor
Add instructable to: