Arduino Weight Measurement using Load Cell and HX711 Module

Arduino

BySaddam 75

Arduino Weight Measurement using Load Cell and HX711 Module

Today we are going to Measure the Weight by interfacing Load Cell and HX711 Weight Sensor with Arduino. We have seen weight machines at many shops, where machine displays the weight just by placing any item on the weighing platform. So here we are building the same Weighing machine by using Arduino and Load cells, having capacity of measuring upto 40kg. This limit can be further increased by using the Load cell of higher capacity.

Required Components:

  • Arduino Uno
  • Load cell (40kg)
  • HX711 Load cell Amplifier Module
  • 16x2 LCD
  • Connecting wires
  • USB cable
  • Breadboard
  • Nut bolts, Frame and base

 

Load Cell and HX711 Weight Sensor Module:

Load cell is transducer which transforms force or pressure into electrical output. Magnitude of this electrical output is directly proportion to the force being applied. Load cells have strain gauge, which deforms when pressure is applied on it. And then strain gauge generates electrical signal on deformation as its effective resistance changes on deformation. A load cell usually consists of four strain gauges in a Wheatstone bridge configuration. Load cell comes in various ranges like 5kg, 10kg, 100kg and more, here we have used Load cell, which can weight upto 40kg.

Load-cell-40kg

Now the electrical signals generated by Load cell is in few millivolts, so they need to be further amplify by some amplifier and hence HX711 Weighing Sensor comes into picture. HX711 Weighing Sensor Module has HX711 chip, which is a 24 high precision A/D converter (Analog to digital converter). HX711 has two analog input channels and we can get gain up to128 by programming these channels. So HX711 module amplifies the low electric output of Load cells and then this amplified & digitally converted signal is fed into the Arduino to derive the weight.

HX711-weight-sensor-module

Load cell is connected with HX711 Load cell Amplifier using four wires. These four wires are Red, Black, White and Green/Blue. There may be slight variation in colors of wires from module to module. Below the connection details and diagram:

  • RED Wire is connected to E+
  • BLACK Wire is connected to E-
  • WHITE Wire is connected to A-
  • GREEN Wire is connected to A+ 

connections-between-Load-cell-and-HX711-module

 

Fixing Load Cell with Platform and Base:

This step is optional and you can directly put the weights on the Load cell without Platform and can simply clamp it without fixing it with any base, but it’s better to attach a platform for putting the large things on it and fix it on a Base so that it stand still. So here we need to make a frame or platform for putting the things for weight measurement. A base is also required to fix the load cell over it by using nuts and bolts. Here we have used a hard cardboard for the frame for placing things over it and a wooden board as Base. Now do the connections as shown in the circuit diagram and you are ready to go.

Load-cell-with-frame-and-base-2

Load-cell-with-frame-and-base-1

load-cell-and-HX711-weight-sensor

 

Circuit Explanation:

Connections for this project are easy and schematic is given below. 16x2 LCD pins RS, EN, d4, d5, d6, and d7 are connected with pin number 8, 9, 10, 11, 12 and 13 of Arduino respectively. HX711 Module’s DT and SCK pins are directly connected with Arduino's pin A0 and A1. Load cell connections with HX711 module are already explained earlier and also shown in the below circuit diagram.

Arduino-Weight-Measurement-using-Load-Cell-and-HX711-Module-circuit

 

Working Explanation:

Working of this Arduino Weight Measurement project is easy. Before going into details, first we have to calibrate this system for measuring correct weight. When user will power it up then system will automatically start calibrating. And if user wants to calibrate it manually then press the push button. We have created a function void calibrate() for calibration purpose, check the code below.

For calibration, wait for LCD indication for putting 100 gram over the load cell as shown in below picture. When LCD will show “put 100g” then put the 100g weight over the load cell and wait. After some seconds calibration process will be finished. After calibration user may put any weight (max 40kg) over the load cell and can get the value over LCD in grams.

calibrating-weight-sensor

In this project, we have used Arduino to control whole the process. Load cell senses the weight and supplies a electrical analog voltage to HX711 Load Amplifier Module. HX711 is a 24bit ADC, which amplifies and digitally converts the Load cell output. Then this amplified value is fed to the Arduino. Now Arduino calculate the output of HX711 and converts that into the weight values in grams and show it on LCD. A push button is used for calibrating the system. We have written a Arduino program for whole process, check the Code and demo Video at the end of this tutorial.

Measure-weight-using-Arduino-and-HX711-load-sensor-working

 

Programming Explanation:

Programming part of this project is little complex for beginners. In this project, we did not use any library for interfacing HX711 load sensor with Arduino. We have just followed the datasheet of HX711 and application notes. Although there are some libraries present for this purpose, where you only need to include that library and you can get the weight using one line of code.

First of all, we have included header file for LCD and defined the pins for the same. And for push button also. Then declared some variables for calculation purpose.

#include <LiquidCrystal.h>
LiquidCrystal lcd(8, 9, 10, 11, 12, 13);

#define DT A0
#define SCK A1
#define sw 2

long sample=0;
float val=0;
long count=0;

 

After it, we have created below function for reading data from HX711 module and return its output.

unsigned long readCount(void)
{
  unsigned long Count;
  unsigned char i;
  pinMode(DT, OUTPUT);
  digitalWrite(DT,HIGH);
  digitalWrite(SCK,LOW);
  Count=0;
  pinMode(DT, INPUT);
  while(digitalRead(DT));
  for (i=0;i<24;i++)
  {
    digitalWrite(SCK,HIGH);
    Count=Count<<1;
    digitalWrite(SCK,LOW);
    if(digitalRead(DT)) 
    Count++;
  }
  digitalWrite(SCK,HIGH);
  Count=Count^0x800000;
  digitalWrite(SCK,LOW);
  return(Count);
}

 

After it, we have initialize LCD and give directions to input and output pins in void setup().

void setup()
{
  Serial.begin(9600);
  pinMode(SCK, OUTPUT);
  pinMode(sw, INPUT_PULLUP);
  lcd.begin(16, 2);
  lcd.print("    Weight ");
  lcd.setCursor(0,1);
  lcd.print(" Measurement ");
  delay(1000);
  lcd.clear();
  calibrate();
}

 

Next in void loop() function, we have read data from HX711 module and converted this data into weight (grams) and sent it to the LCD.

void loop()
{
  count= readCount();
  int w=(((count-sample)/val)-2*((count-sample)/val));
  Serial.print("weight:");
  Serial.print((int)w);
  Serial.println("g");
  lcd.setCursor(0,0);
  lcd.print("Weight            ");
  lcd.setCursor(0,1);
  lcd.print(w);
  lcd.print("g             ");

  if(digitalRead(sw)==0)
  {
    val=0;
    sample=0;
    w=0;
    count=0;
    calibrate();
  }
}

 

Before this, we have created a calibration function in which we have calibrated the system by placing the 100gm weight over the Load cell.

void calibrate()
{
    lcd.clear();
  lcd.print("Calibrating...");
  lcd.setCursor(0,1);
  lcd.print("Please Wait...");
  for(int i=0;i<100;i++)
  {
    count=readCount();
    sample+=count;
    Serial.println(count);
  }
  ..... ....
  ..... .....

measuring-100gram-using-arduino-and-HX711-sensor

So here we have learned the basic Interfacing of Load cell and HX11 Weight Sensor with Arduino to measure the weights. In our text tutorials we will create some applications based on weight measurement like Smart container, Automatic gate etc.

Code

#include <LiquidCrystal.h>
LiquidCrystal lcd(8, 9, 10, 11, 12, 13);

#define DT A0
#define SCK A1
#define sw 2

long sample=0;
float val=0;
long count=0;

unsigned long readCount(void)
{
  unsigned long Count;
  unsigned char i;
  pinMode(DT, OUTPUT);
  digitalWrite(DT,HIGH);
  digitalWrite(SCK,LOW);
  Count=0;
  pinMode(DT, INPUT);
  while(digitalRead(DT));
  for (i=0;i<24;i++)
  {
    digitalWrite(SCK,HIGH);
    Count=Count<<1;
    digitalWrite(SCK,LOW);
    if(digitalRead(DT)) 
    Count++;
  }
  digitalWrite(SCK,HIGH);
  Count=Count^0x800000;
  digitalWrite(SCK,LOW);
  return(Count);
}

void setup()
{
  Serial.begin(9600);
  pinMode(SCK, OUTPUT);
  pinMode(sw, INPUT_PULLUP);
  lcd.begin(16, 2);
  lcd.print("    Weight ");
  lcd.setCursor(0,1);
  lcd.print(" Measurement ");
  delay(1000);
  lcd.clear();
  calibrate();
}

void loop()
{
  count= readCount();
  int w=(((count-sample)/val)-2*((count-sample)/val));
  Serial.print("weight:");
  Serial.print((int)w);
  Serial.println("g");
  lcd.setCursor(0,0);
  lcd.print("Weight            ");
  lcd.setCursor(0,1);
  lcd.print(w);
  lcd.print("g             ");

  if(digitalRead(sw)==0)
  {
    val=0;
    sample=0;
    w=0;
    count=0;
    calibrate();
  }
}

void calibrate()
{
    lcd.clear();
  lcd.print("Calibrating...");
  lcd.setCursor(0,1);
  lcd.print("Please Wait...");
  for(int i=0;i<100;i++)
  {
    count=readCount();
    sample+=count;
    Serial.println(count);
  }
  sample/=100;
  Serial.print("Avg:");
  Serial.println(sample);
  lcd.clear();
  lcd.print("Put 100g & wait");
  count=0;
  while(count<1000)
  {
    count=readCount();
    count=sample-count;
    Serial.println(count);
  }
  lcd.clear();
  lcd.print("Please Wait....");
  delay(2000);
  for(int i=0;i<100;i++)
  {
    count=readCount();
    val+=sample-count;
    Serial.println(sample-count);
  }
  val=val/100.0;
  val=val/100.0;        // put here your calibrating weight
  lcd.clear();
}

Video

Get Our Weekly Newsletter!

Subscribe below to receive most popular news, articles and DIY projects from Circuit Digest

Comments

  • Badar's picture
    Badar
    Mar 03, 2017

    will it measure the weight below 10g????

  • roy's picture
    roy
    Mar 10, 2017

    Where to buy just like this? Especially the load cell (40Kg).

  • Maddy's picture
    Maddy
    Jul 07, 2017

    You can buy Load cell and HX711 online from ebay/amazon or get it from local electronics shop.

  • Roy's picture
    Roy
    Mar 15, 2017

    Good Day Sir, how to make the weight stable in the LCD display? and also is it possible to determine the weight of an LPG tank using these materials? THANK YOU.

  • Maddy's picture
    Maddy
    Jul 07, 2017

    You can tweak in the code to make the reading stable and it can measure anything below 40kg.

  • Sebastian Lim's picture
    Sebastian Lim
    Mar 28, 2017

    Dear Sir,

    If i would like to measure 200 kg. Can i use back the code and just change the load cell to 200 kg?

    Thanks

    Sebastian Lim

  • frequency.lim's picture
    frequency.lim
    May 22, 2017

    I have problem with XH711 reading the load cell?

    Pls help

  • Nazir Hossain's picture
    Nazir Hossain
    Sep 10, 2018

    Hi,

    Have you complete your project for 200 kg load cell?

    Please help me for 500kg load cell ,

    It's very urgent

  • Yeswanth's picture
    Yeswanth
    Apr 01, 2017

    sir when i run this program it gets stuck her
    while(count<1000)
    {
    count=readCount();
    count=sample-count;
    Serial.println(count);
    }
    the value of count is never above 1000 and sometimes it is negative also. what should i do. please reply fast. it is very urgent.

  • Hassan's picture
    Hassan
    Apr 22, 2017

    Please send me proteus hx711 and load cell library

  • Didier's picture
    Didier
    May 15, 2018

    I Hassan, did you get the proteus library?
    I try to find, but nothing.
    Thanx, if you found this library, to send me a copy.
    Didier

  • nurhidayat's picture
    nurhidayat
    May 12, 2017

    Dear Sir
    Whether it can use load cell 10 kg to projek like that?

  • frequency.lim's picture
    frequency.lim
    May 22, 2017

    Anyone use this circuit and found it work?

    thank

    Frequency

  • asking's picture
    asking
    Jun 11, 2017

    Hi, can you please give me a sample code for 200kg load cell?

  • Leonardo's picture
    Leonardo
    Jun 22, 2017

    I have done the project according to this page, but I have found two problems, the reading is very unstable with a 20kg cell, every time you power on the calibration should be done, it would be nice if the calibration value will save it.

    Try with another load cell of 40kg and the reading is unstable, the author fails to explain this project better.

    Thank you

  • Jaden's picture
    Jaden
    Jun 27, 2017

    Hello. Is there any way to change the code to make two load cells in series, and just show the sum of two load cells' readings?

  • Maddy's picture
    Maddy
    Jul 07, 2017

    Yes it is possible and you can connect multiple Load cells with Arduino.

  • minhaj's picture
    minhaj
    Jan 03, 2018

    sir your code is not working perfectly

  • shuaib pullissery's picture
    shuaib pullissery
    Jul 08, 2017

    i dont want to calibrate each time i on the arduino. Calibration should occur only wen the switch is pressed. what should i do?

  • pius's picture
    pius
    Jul 09, 2017

    Is it weight or mass u are measuring because weight is measured in Newton while mass is grams

  • Dee's picture
    Dee
    Jul 25, 2017

    Unstable reading on the LCD. Way out pls?

  • Tuen's picture
    Tuen
    Jul 26, 2017

    The code is not working

  • Tedjo's picture
    Tedjo
    Jul 30, 2017

    If i would like to measure 10 kg. Can i use back the code and just change the load cell to 10 kg?

  • Mal's picture
    Mal
    Sep 25, 2017

    Im using 5kg load cell. Do i need to change the code? One more thing. How can I add buzzer?

  • Happy's picture
    Happy
    Sep 25, 2017

    Hello bro project is good but I want to add reset button in this because when I want to measure weight then I need to place sometime like dish or anything so it's give me output value include with that dish so I want to add reset button because when j place dish on that then after reset the value then it's show the exact value so please help me hot to add reset value ?????

  • Hendy's picture
    Hendy
    Nov 02, 2017

    Dear sir, I had an assignment about Arduino project. In my assignment, me not using load cell instead of body weight (180 kg). Wht I m asking for is could u tell me how to makebthe program inout for kilograms since yours was in gram and I m planning on not using calibrate button. Thank You for all your kindness

  • AISHA's picture
    AISHA
    Nov 02, 2017

    Hi Hendy,

    If you are planning to measure 180kg, then there is no way you could do it with single Load cell and there is no way you can escape calibration. But, dont worry its very complex give it a shot

  • Al's picture
    Al
    Nov 02, 2017

    Im using load cell 5kg. I used the code but i just show (put 100g & wait) on lcd display. Can u pls help me with this sir

  • Sergio's picture
    Sergio
    Nov 07, 2017

    Hi, i have a question, if the modulo convert analog to digital signal, why do you connect and use analog pins in arduino? I have reading other tutorials and they use a digital pins for this module, what is the correct conection?
    Thanks.

  • dien's picture
    dien
    Nov 08, 2017

    hi, can i get the library of loadcell for proteus?

  • Jimmy's picture
    Jimmy
    Nov 11, 2017

    Hi, Can i get the detailed explanation of how the alarm goes off due to excess weight on the load cell.

  • Jaden's picture
    Jaden
    Nov 15, 2017

    I lift pin 15 to make the rate to 80SPS, but how to modify the code to make the data rate is 80 hz? Thank yo u so much! BYW, how to make the reading smoother?

  • arun 's picture
    arun
    Nov 19, 2017

    hello my project is not working please help me out in display nothing is showing except lighting

  • Aditya's picture
    Aditya
    Nov 29, 2017

    Hi,programming is compiling, circuit connection is fine and all the arrangements are done, but not getting the output on LCD screen and on serial monitor some random numbers (80563 or something), so what would be the problem and how to resolve it. Please someone help me, thanks in advance.

  • Aditya's picture
    Aditya
    Nov 30, 2017

    all the wiring is done, getting a notification on the screen (put 100 g an weight), if we apply the standard weight, no further notifications are available. Please help me

  • Loris's picture
    Loris
    Dec 09, 2017

    Hi, is there any way to have the Hx711 library that you used on proteus ? I actually really need it ! Thanks a lot. (If not, can someone explain me the way to simulate it ?)

  • Renz Michael Gonzales's picture
    Renz Michael Go...
    Dec 12, 2017

    Can I have the download link of your schematic capture? I need the load cell library for my thesis. Thank you!

  • shaabo's picture
    shaabo
    Dec 31, 2017

    hi, can i get the library of loadcell for proteus?

  • GeneralFrans's picture
    GeneralFrans
    Jan 16, 2018

    Hello! My question is what is the value of resistor you used. Is it a 10k resistor?

  • nithu's picture
    nithu
    Jan 30, 2018

    Is it necessary to put 100g other than any value for calibration..?? Code gets restarts at calibrating point.

  • Manish  mohbiya's picture
    Manish mohbiya
    Feb 06, 2018

    Sir how to conver load cell weight convert into percentage form. Help me for programing design

  • Manas's picture
    Manas
    Feb 06, 2018

    Sir can a 10 kg module differentiate between weight of 100gm and 150gm?

  • bb's picture
    bb
    Feb 13, 2018

    /how can i calibrate it correctly

  • Ammar's picture
    Ammar
    Feb 24, 2018

    Hello sir ,
    How could I upload a program to arduino , where making a buzzer and lifting a glass door near a cook gas to protect a child , that we want to make an alarm under 20 kg/, for example and makes a barrier between the child and the cook gas
    thank you very much

  • satya's picture
    satya
    Feb 25, 2018

    canu send me the total code wheni runned it its not displaying any thing

  • Franko's picture
    Franko
    Feb 25, 2018

    Hello!
    My question is the following. Did you use 2 resistors as I had seen in a video and what are their values in ohms?

  • Aswinth Raj's picture
    Aswinth Raj
    Feb 26, 2018

    Franko., follow the circuit diagram, the 10K resistor in the diagram and the video is optional it just controls the contrast of the LCD display 

  • abel's picture
    abel
    Apr 04, 2018

    pleas send hx711 and load cell IDX &LIB file

  • sravani's picture
    sravani
    Apr 15, 2018

    can u tell me what did you connect for pin 2 arduino??

  • muhammad sasd's picture
    muhammad sasd
    Apr 16, 2018

    Global variables use 364 bytes (17%) of dynamic memory, leaving 1684 bytes for local variables. Maximum is 2048 bytes.
    avrdude: ser_open(): can't set com-state for "\\.\COM4"

  • raimi's picture
    raimi
    May 04, 2018

    can i change load bar 40 kg with load sensor cell 50kg?? and it is necessary to put the calibration code or can if we not put calibration in coding it still working or not?

  • Zeno's picture
    Zeno
    May 16, 2018

    Where can I get the app (Circuit Digest) ?

  • Aswinth Raj's picture
    Aswinth Raj
    May 16, 2018

    App? Which app are you talking about? If you are asking for the code it is given in this same page 

  • Nazir Hossain's picture
    Nazir Hossain
    Sep 10, 2018

    Dear sir,

    Can you help me please for 500 kg load cell on this project.

    Shall i change coding?

    i don't get output .only seen calibrating,please wait.... etc

    please help me 

  • deepa u hegde's picture
    deepa u hegde
    May 17, 2018

    thank u for the above arduino code using hx711..
    .its perfectly working for me in grams for cantilever loadcell of capacity 2kg..
    but i want the above code weigh upto 2000kg and also the calibration code for 2000kg since my loadcell capacity is 2Ton=2000kg .... can u please help me with it

  • Nazir Hossain's picture
    Nazir Hossain
    Sep 10, 2018

    Hi,

    Can you complete your project?

    if you complete ,plese help me for 500 kg load cell coding

  • nimshi kollu's picture
    nimshi kollu
    Jun 12, 2018

    Can I use load cell in highways to measure gross weight of trucks in dynamic weight . Will it be affected by high speed . Is the code same .

  • Hiro_Hamada's picture
    Hiro_Hamada
    Jun 12, 2018

    I dont think it is practically possible to measure the dynamic weight of a moving vehicle. However I am not sure through..

    If it is possible then yes a load cell can be used since this is the most common and feasible method for your project idea

  • Prashant Sharma's picture
    Prashant Sharma
    Jun 18, 2018

    Hi..

    I just need to know ...can we connect the trigger in above scenario...mean when trigger in "ON"...the weight will be store and, when trigger off it will show count of weighs....

    Help to resolve my query

    Thanks
    Prashant

  • Nazir Hossain's picture
    Nazir Hossain
    Sep 10, 2018

    Dear Sir,

    I have used 500kg load cell,but the result in the display does not see.It only see calibrating,please wait......

    please help me .what can i do for this project

  • Amirul's picture
    Amirul
    Nov 11, 2018

    can you pls give me the library for the load cell and hx711 i need it for my thesis

  • Aswinth Raj's picture
    Aswinth Raj
    Jan 05, 2019

    There is no library for load cell and hx711. The code is given above

  • Douglas Nascimento's picture
    Douglas Nascimento
    Jan 27, 2019

    Hello! You has module load cell and HX711 for Proteus? Has possibility you send for me?

  • Sara's picture
    Sara
    Feb 08, 2019

    Hi! 

     

    Can you please explain this formula used in getting the actual weight? 
     

    w=(((count-sample)/val)-2*((count-sample)/val));

  • Fidel Toranzos's picture
    Fidel Toranzos
    Jul 08, 2019

    Buenas, si quiero configurar para una celda de carga de 3 kg, deberia modificar algo, por que solo me aparece el mensaje de please wait, y de calibration, deberia de modificar algo ??

     

  • Rajasekar's picture
    Rajasekar
    Oct 06, 2019

    Hi friends, Im Rajasekar from India, I have one clarification, Is it possible to convert the kilograms into newtons in the LCD display by adding the conversion factor in arduino codes.

  • Rajasekar's picture
    Rajasekar
    Oct 07, 2019

    Hi friends, Im Rajasekar from India, I have one clarification, Is it possible to convert kilograms into newtons in the output LCD display by adding the conversion factor in the arduino codes. If possible somebody please help with the codes. please add the codes in the comments. Thanks in advance.

Log in or register to post Comment