Navigation Menu

Skip to content

Instantly share code, notes, and snippets.

@matt448
Last active March 13, 2023 16:56
Show Gist options
  • Star 10 You must be signed in to star a gist
  • Fork 2 You must be signed in to fork a gist
  • Save matt448/14d118e2fc5b6217da11 to your computer and use it in GitHub Desktop.
Save matt448/14d118e2fc5b6217da11 to your computer and use it in GitHub Desktop.
HX711 Calibration for Arduino
/*
Started with example code written by Nathan Seidle from SparkFun Electronics and added
LCD output with gram and ounce values.
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
Arduino pin 6 -> HX711 CLK
Arduino pin 5 -> HX711 DOUT
Arduino pin 5V -> HX711 VCC
Arduino pin GND -> HX711 GND
The HX711 board can be powered from 2.7V to 5V so the Arduino 5V power should be fine.
The HX711 library can be downloaded from here: https://github.com/bogde/HX711
*/
#include <LiquidCrystal.h>
LiquidCrystal lcd(51, 50, 49, 48, 47, 46);
#include "HX711.h"
#define DOUT 5
#define CLK 6
HX711 scale(DOUT, CLK);
float calibration_factor = 2125; //-7050 worked for my 440lb max scale setup
float units;
float ounces;
void setup() {
Serial.begin(9600);
// set up the LCD's number of columns and rows:
lcd.begin(20, 4);
lcd.setCursor(0, 0);
lcd.print("HX711 calibration");
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.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: ");
units = scale.get_units(), 10;
if (units < 0) {
units = 0.00;
}
ounces = units * 0.035274; //Convert grams to ounces
Serial.print(units);
Serial.print(" grams");
Serial.print(" calibration_factor: ");
Serial.print(calibration_factor);
Serial.println();
lcd.setCursor(0, 1);
lcd.print("Grams: ");
lcd.print(units);
lcd.setCursor(0, 2);
lcd.print("Ounce: ");
lcd.print(ounces);
lcd.setCursor(0, 3);
lcd.print("Calbr: ");
lcd.print(calibration_factor);
if(Serial.available())
{
char temp = Serial.read();
if(temp == '+' || temp == 'a')
calibration_factor += 1;
else if(temp == '-' || temp == 'z')
calibration_factor -= 1;
}
}
@flowmeter
Copy link

flowmeter commented May 9, 2022

Hi,
Something seems strange on line 30 ;

`float calibration_factor = 2125; //-7050 worked for my 440lb max scale setup'

2125 seems to be :

  • a constant
  • an unsigned integer

Best.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment