Introduction: Arduino Bathroom Scale With 50 Kg Load Cells and HX711 Amplifier
This Instructable describes how to make a weighing scale using readily available off the shelf parts.
Materials needed:
- Arduino - (this design uses a standard Arduino Uno, other Arduino versions or clones should work also)
- HX711 on breakout board - This microchip is specially made for amplifying the signals from load cells and reporting them to another mircocontroller. The load cells plug into this board, and this board tells the Arduino what the load cells measure.
- 50kg load cells (x4) - Load cells are specially shaped metal parts that have strain gauges glue to them. The strain gauges are resistors that change their resitance when they are bent. When the metal part bends, the resistance of the load cell changes (the HX711 measures this small change in resistance accurately). You can buy the load cells and HX711 as a kit here: https://www.amazon.com/Degraw-amplifier-weight-Arduino-Bathroom/dp/B075Y5R7T7/ If you do purchase the kit please leave a review! It is really helpful for future buyers.
- Sturdy flat mounting surface - a stiff piece of hardwood or metal is ideal
- Wires in various colors for connecting all the parts
- Power supply for Arduino
Step 1: Mount the Load Cells
Mount the 4 load cells to the bottom of the scale in the four corners. Epoxy works well to hold them in place. See the mounting diagram, it shows which surface should be mounted to the base and which surface should touch the floor.
Step 2: Verify the Load Cell Wiring
The wiring diagram is made assuming the load cell is constructed like this picture.
To make sure you get it right, be sure to figure out which two terminals on the load cells have the highest resistance between them (E.g. Black and White, to match the schematic), wire them in a big color matching loop, like B-B W-W B-B W-W and then excite (E+/E-) two opposite center taps (R) and sense (A+/A-) on the other pair of center taps.
This page on Sackexchange has even better information: https://arduino.stackexchange.com/questions/11946/how-to-get-weight-data-from-glass-electronic-bathroom-scale-sensors/18698#18698
Step 3: Wire the Load Cells and HX711
See the wiring diagram for how to connect the load cells, HX711, and Arduino.
Some of the load cell wires are connected together to form what is called a Wheatstone bridge arrangement. This can get a little confusing. A good option for connecting all the load cells in a clean, easy to understand way is the SparkFun load cell combinator board - https://www.sparkfun.com/products/13878
This arrangement allows the loads on all of the different load cell sensors to be combined and measured at once.
Step 4: Add HX711 Library to Your Arduino IDE
The HX711 library is available here: https://github.com/bogde/HX711
See this link on the Arduino website for instructions on how to add the library to your Arduino IDE: https://www.arduino.cc/en/Guide/Libraries
Step 5: Calibrate and Weigh!
Sparkfun has great Arduino programs to run the scale. The most up to date versions are available on GitHub and reprinted below: https://github.com/sparkfun/HX711-Load-Cell-Amplifier
The first software step is to determine calibration factors for the scale. To do this, run this code:
/* Example using the SparkFun HX711 breakout board with a scale By: Nathan Seidle SparkFun Electronics Date: November 19th, 2014 License: This code is public domain but you buy me a beer if you use this and we meet someday (Beerware license). This is the calibration sketch. Use it to determine the calibration_factor that the main example uses. It also outputs the zero_factor useful for projects that have a permanent mass on the scale in between power cycles. Setup your scale and start the sketch WITHOUT a weight on the scale Once readings are displayed place the weight on the scale Press +/- or a/z to adjust the calibration_factor until the output readings match the known weight Use this calibration_factor on the example sketch This example assumes pounds (lbs). If you prefer kilograms, change the Serial.print(" lbs"); line to kg. The calibration factor will be significantly different but it will be linearly related to lbs (1 lbs = 0.453592 kg). Your calibration factor may be very positive or very negative. It all depends on the setup of your scale system and the direction the sensors deflect from zero state This example code uses bogde's excellent library:"https://github.com/bogde/HX711" bogde's library is released under a GNU GENERAL PUBLIC LICENSE Arduino pin 2 -> HX711 CLK 3 -> DOUT 5V -> VCC GND -> GND Most any pin on the Arduino Uno will be compatible with DOUT/CLK. The HX711 board can be powered from 2.7V to 5V so the Arduino 5V power should be fine. */ #include "HX711.h" #define LOADCELL_DOUT_PIN 3 #define LOADCELL_SCK_PIN 2 HX711 scale; float calibration_factor = -7050; //-7050 worked for my 440lb max scale setup void setup() { Serial.begin(9600); Serial.println("HX711 calibration sketch"); Serial.println("Remove all weight from scale"); Serial.println("After readings begin, place known weight on scale"); Serial.println("Press + or a to increase calibration factor"); Serial.println("Press - or z to decrease calibration factor"); scale.begin(LOADCELL_DOUT_PIN, LOADCELL_SCK_PIN); scale.set_scale(); scale.tare(); //Reset the scale to 0 long zero_factor = scale.read_average(); //Get a baseline reading Serial.print("Zero factor: "); //This can be used to remove the need to tare the scale. Useful in permanent scale projects. Serial.println(zero_factor); } void loop() { scale.set_scale(calibration_factor); //Adjust to this calibration factor Serial.print("Reading: "); Serial.print(scale.get_units(), 1); Serial.print(" lbs"); //Change this to kg and re-adjust the calibration factor if you follow SI units like a sane person Serial.print(" calibration_factor: "); Serial.print(calibration_factor); Serial.println(); if(Serial.available()) { char temp = Serial.read(); if(temp == '+' || temp == 'a') calibration_factor += 10; else if(temp == '-' || temp == 'z') calibration_factor -= 10; } }
After calibrating the scale, you can run this sample program, then hack it up for your own purposes:
/* Example using the SparkFun HX711 breakout board with a scale By: Nathan Seidle SparkFun Electronics Date: November 19th, 2014 License: This code is public domain but you buy me a beer if you use this and we meet someday (Beerware license). This example demonstrates basic scale output. See the calibration sketch to get the calibration_factor for your specific load cell setup. This example code uses bogde's excellent library:"https://github.com/bogde/HX711" bogde's library is released under a GNU GENERAL PUBLIC LICENSE The HX711 does one thing well: read load cells. The breakout board is compatible with any wheat-stone bridge based load cell which should allow a user to measure everything from a few grams to tens of tons. Arduino pin 2 -> HX711 CLK 3 -> DAT 5V -> VCC GND -> GND The HX711 board can be powered from 2.7V to 5V so the Arduino 5V power should be fine. */ #include "HX711.h" #define calibration_factor -7050.0 //This value is obtained using the SparkFun_HX711_Calibration sketch #define LOADCELL_DOUT_PIN 3 #define LOADCELL_SCK_PIN 2 HX711 scale; void setup() { Serial.begin(9600); Serial.println("HX711 scale demo"); scale.begin(LOADCELL_DOUT_PIN, LOADCELL_SCK_PIN); scale.set_scale(calibration_factor); //This value is obtained by using the SparkFun_HX711_Calibration sketch scale.tare(); //Assuming there is no weight on the scale at start up, reset the scale to 0 Serial.println("Readings:"); } void loop() { Serial.print("Reading: "); Serial.print(scale.get_units(), 1); //scale.get_units() returns a float Serial.print(" lbs"); //You can change this to kg but you'll need to refactor the calibration_factor Serial.println(); }
75 Comments
Question 21 days ago
Is it possible to have each of the 4 sensor work individually to show the weight of for corners of a scale car?
Question 2 years ago on Introduction
Price?
Answer 1 year ago
For the load cells look on Amazon for 50kg and you will find them easly
2 years ago
hi..how to use zero factor for permanent scale
because when the controller is reset, it scale the already placed object to zero
Reply 1 year ago
Probably look for Arduino EEPROM
2 years ago on Step 3
The data (red) wires don't reach where I need them too. Is it okay to splice them with another wire? Also that wire is a slightly smaller gauge (thicker)
Reply 1 year ago
Of course you can add other wire to have a longer cable. The dimension (thickness) is not really important..
Question 2 years ago on Step 3
Hello sir
Can l let me know about connection of 2 load cell for 100kg.
If any one knows help me ....
Thank you
Question 2 years ago
Great tutorial. I wired everything as instructed. However, the weight reading I get is constantly fluctuating. Sometimes increasing linearly with time. Sometimes decreasing. Sometimes all over. I'm trying to figure out where the problem is but I'm having some trouble. Is it more likely an issue with the load cells, wiring, HX711 amplifier, arduino? Thanks in advance for the help.
2 years ago
Is there a way to connect more than 4 load sensors?
I am working on an application that will measure the added cell of a couch.
If the couch is already (say...) 100kg and has 3 seats should i use 8-12 load sensors?
How would i connect them?
Or should i go for larger sensors (150kg each)?
Thank you
Question 2 years ago
Hello,
I want to measure the deflection or the strain induced at a particular load on the rod(member) . I want to attach 4 strain gauges to one rod to measure strain at different points. Can i do it? Can i attach 4 strain gauges to one HX711 . Can u plz help me with wiring and coding. I hope for ur priceless reply.
Thank you
2 years ago on Step 1
Hello....
I want to ask, if i use 4 pcs of 50 kg loadcell, the maximum weight will be 200 kg or still 50 kg?
Thkns...
Question 2 years ago
I'm still not clear about the physical mounting of the load cells... I want to measure the weight of something hanging. I plan to cut a small piece of copper tubing in half and epoxy on the sensor as a channel for nylon cord to rest in, but where exactly on the sensor should I mount the channel for best performance?
Answer 2 years ago
For measuring hanging weight, it is easiest to use the components from a luggage scale. Here is an instructable about it: https://www.instructables.com/id/Arduino-Tension-Scale-With-40-Kg-Luggage-Load-Cell/
3 years ago
how to read measurements?
there is no display
can I read with cell phone?
Reply 2 years ago
You can...
1. easily read via the same USB serial port used to program the Arduino.
2. add an LCD display
3. add a wifi or ethernet shield and host a web page
2 years ago
I’m going to give it a try. This is a great starting place then I can add more features till I have a nice system of my own on all my hives
Question 3 years ago on Step 5
Hey everyone! Is it possible to configure this to only use one of the load cells and not run in a series? How would I go about doing that? Thanks!
Answer 3 years ago
I haven't tried it out but this instructable seems to cover a single load cell https://www.instructables.com/id/Tutorial-to-Interface-HX711-With-Load-Cell-Straigh/
3 years ago
Do we have to use 1K ohm resistors for connection? And also in my setup, when I put weight on the platform, value is getting higher for 2-3 seconds and then it starts to get lower stabily. And if a lift the weight, value is getting lower for a 2-3 seconds then again it starts to get higher stabily. Anyone have any idea why?