Last active
March 13, 2023 16:56
-
-
Save matt448/14d118e2fc5b6217da11 to your computer and use it in GitHub Desktop.
HX711 Calibration for Arduino
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* | |
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; | |
} | |
} |
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
In line 59 you wrote: units = scale.get_units(), 10; What it really means?
Number 10 is not an argument of get units function, but rather the number of times that some function will be rolled but it is outside funcion variables ().