A simple loadcell calibration program based on a load cell and HX711 amp. Using HX711 by Bertrand Bouvier. Calibration code comes from SparkFun example at https://learn.sparkfun.com/tutorials/load-cell-amplifier-hx711-breakout-hookup-guide?_ga=1.169212841.987765858.1442369657.
main.cpp@0:5f789b9ae213, 2015-11-28 (annotated)
- Committer:
- mcragun
- Date:
- Sat Nov 28 19:35:24 2015 +0000
- Revision:
- 0:5f789b9ae213
A sample loadcell calibration program.
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
mcragun | 0:5f789b9ae213 | 1 | #include "mbed.h" |
mcragun | 0:5f789b9ae213 | 2 | #include "HX711.h" |
mcragun | 0:5f789b9ae213 | 3 | |
mcragun | 0:5f789b9ae213 | 4 | DigitalOut gpo(D0); |
mcragun | 0:5f789b9ae213 | 5 | DigitalOut led(LED_BLUE); |
mcragun | 0:5f789b9ae213 | 6 | HX711 scale(A0, A1); |
mcragun | 0:5f789b9ae213 | 7 | |
mcragun | 0:5f789b9ae213 | 8 | AnalogIn scaleRaw(A3); |
mcragun | 0:5f789b9ae213 | 9 | Serial pc(USBTX, USBRX); // USB Serial Terminal |
mcragun | 0:5f789b9ae213 | 10 | float calibration_factor = 1000; //-7050 worked for my 440lb max scale setup |
mcragun | 0:5f789b9ae213 | 11 | int averageSamples = 100; |
mcragun | 0:5f789b9ae213 | 12 | |
mcragun | 0:5f789b9ae213 | 13 | int main(void) |
mcragun | 0:5f789b9ae213 | 14 | { |
mcragun | 0:5f789b9ae213 | 15 | pc.printf("Starting Scale"); |
mcragun | 0:5f789b9ae213 | 16 | pc.printf("HX711 calibration sketch"); |
mcragun | 0:5f789b9ae213 | 17 | pc.printf("Remove all weight from scale"); |
mcragun | 0:5f789b9ae213 | 18 | pc.printf("After readings begin, place known weight on scale"); |
mcragun | 0:5f789b9ae213 | 19 | pc.printf("Press + or a to increase calibration factor"); |
mcragun | 0:5f789b9ae213 | 20 | pc.printf("Press - or z to decrease calibration factor"); |
mcragun | 0:5f789b9ae213 | 21 | |
mcragun | 0:5f789b9ae213 | 22 | |
mcragun | 0:5f789b9ae213 | 23 | scale.setScale(0); |
mcragun | 0:5f789b9ae213 | 24 | scale.tare(); //Reset the scale to 0 |
mcragun | 0:5f789b9ae213 | 25 | |
mcragun | 0:5f789b9ae213 | 26 | long zero_factor = scale.averageValue(averageSamples); //Get a baseline reading |
mcragun | 0:5f789b9ae213 | 27 | pc.printf("Zero factor: %.4f\n" , zero_factor); //This can be used to remove the need to tare the scale. Useful in permanent scale projects. |
mcragun | 0:5f789b9ae213 | 28 | |
mcragun | 0:5f789b9ae213 | 29 | while (true) { |
mcragun | 0:5f789b9ae213 | 30 | scale.setScale(calibration_factor); //Adjust to this calibration factor |
mcragun | 0:5f789b9ae213 | 31 | float weight = scale.getGram(); |
mcragun | 0:5f789b9ae213 | 32 | //float raw = scaleRaw.read(); |
mcragun | 0:5f789b9ae213 | 33 | pc.printf("Reading: %.2f\n", weight); |
mcragun | 0:5f789b9ae213 | 34 | //pc.printf("Raw Value: %.7f\n", raw); |
mcragun | 0:5f789b9ae213 | 35 | pc.printf(" calibration_factor: %.2f\n", calibration_factor); |
mcragun | 0:5f789b9ae213 | 36 | |
mcragun | 0:5f789b9ae213 | 37 | |
mcragun | 0:5f789b9ae213 | 38 | if(pc.readable()) { |
mcragun | 0:5f789b9ae213 | 39 | char temp = pc.getc(); |
mcragun | 0:5f789b9ae213 | 40 | if(temp == '+' || temp == 'a') |
mcragun | 0:5f789b9ae213 | 41 | calibration_factor += 10; |
mcragun | 0:5f789b9ae213 | 42 | else if(temp == '-' || temp == 'z') |
mcragun | 0:5f789b9ae213 | 43 | calibration_factor -= 10; |
mcragun | 0:5f789b9ae213 | 44 | } |
mcragun | 0:5f789b9ae213 | 45 | gpo = !gpo; // toggle pin |
mcragun | 0:5f789b9ae213 | 46 | led = !led; // toggle led |
mcragun | 0:5f789b9ae213 | 47 | wait(0.2f); |
mcragun | 0:5f789b9ae213 | 48 | } |
mcragun | 0:5f789b9ae213 | 49 | } |