Difference between revisions of "Interface the HX711 to Pi"

From HiveTool
Jump to: navigation, search
(Calibration)
(Calibration)
Line 157: Line 157:
 
# That should be the weight in pounds.
 
# That should be the weight in pounds.
  
I run this short bash script during testing. Note that the utility bc (binary calculator) must be installed. It will read the scale and output the weight every 5 second:
+
I run this short bash script during testing. It will read the scale and output the weight every 5 seconds. Note that the utility bc (binary calculator) must be installed.  
  
 
  while [ 1 ]
 
  while [ 1 ]
Line 172: Line 172:
 
You will have to change the zero and the 1/slope to the numbers  you  measured. Edit the file:
 
You will have to change the zero and the 1/slope to the numbers  you  measured. Edit the file:
  
# change 23000 to your zero
+
# change 23000 in line 5 to your zero
# change 20550 the the number you calculated as 1/slope
+
# change 20550 in line 7 to the the number you calculated as 1/slope
  
 
Copy this code to a file like scale_test  and make it executable:
 
Copy this code to a file like scale_test  and make it executable:

Revision as of 04:24, 29 December 2014

Building a Raspberry based electronic scale using the DCT Electronic HX711 board is as easy as Pi!

The DCT board comes with a metal shield and two sets of male headers: straight and right angle.

Required Parts

HX711 board without driver chip
Hx711 board with driver chip

There are several HX711 boards available. We have been testing the brown boards that have a metal shield. There appear to be two versions of those available. Some only have one chip, some have two.



Installation

Method 1: Connect HX711 to P1/J8

HX711 with screw terminals and metal shield installed connected to P1/J8 on the Pi.
P1/J8 close up

This will work with all models of the Pi: A, B, A+, B+.

Prepare the HX711 board

First prepare the HX711 board by soldering the shield and connectors.


Pins 2, 16, 18, 20 on P1 (Model A and B) or J8 (Model A+ and B+)are used:

P1/J8 Pi HX711 Color
Pin 2 +5 Vcc Red
Pin 16 GPIO28 DO/RX White
Pin 18 GPIO30 CK/TX Green
Pin 20 Ground GND Black


#define CLOCK_PIN 24
#define DATA_PIN 23


Method 2: Connect HX711 to P5

Two DCT Electronic HX711 boards with metal shield.
DCT Electronic HX711 board plugged into P5

You will need a 1x4 female header (2.54mm Pitch Straight Single Row PCB Female Pin Headers) and load cells.

  1. Order the board for $6.99 on Ebay
    This one for $2.17 should work, too.
  2. Download the software from gitHub
    git clone https://github.com/ggurov/hx711
  3. Solder a 1x4 straight female header in P5 on Pi (bottom side of board) and a 1x4 male header on the DCT board
  4. Solder the load cells to the DCT board.
  5. Plug the DTC board into the Pi.
  6. Change the GPIO pins in hx711.c from 30 and 31 to 28 and 30. This way they are all on one side of P5:
P5 Pi HX711
P5-1 +5 Vcc
P5-3 GPIO28 DO/RX
P5-5 GPIO30 CK/TX
P5-7 Ground GND


#define CLOCK_PIN       30
#define DATA_PIN        28


Testing

There is a README file with the HX711 software. After the HX711 software is installed run the hx711 program with no arguments:

sudo hx711

It will spit out 64 lines and after the last line, there will be a number (in this case 146640):

0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 1 1 1 0 0 1 1 0 0 1 1 0 0 1 0 1 1 n:    1546646     -  
0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 1 1 1 0 0 1 1 0 1 0 0 0 1 0 1 0 1 n:    1546794     -  
0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 1 1 1 0 0 1 1 0 1 1 0 1 0 1 0 0 0 n:    1547088     -  
0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 1 1 1 0 0 1 0 1 1 1 1 0 1 1 1 0 0 n:    1546168     -  
0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 1 1 1 0 0 1 0 1 1 1 1 0 0 0 0 1 1 n:    1546118     -  
0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 1 1 1 0 0 1 0 1 1 1 0 0 0 1 1 1 1 n:    1546014     -  
1546640

The numbers you get will be totally different (this was run with a 57 lb hive on the load cells)

The last number 1546640 is the average of the 64 reads. The numbers may be negative. That is OK.

You should be able to put some weight on the load cells, run hx711 again and the numbers should be different.

Calibration

Calibration consists of determining the zero value (intercept) and then the slope. A linear transformation is used: Y=mx+b where m is the slope and b is the intercept.

The hx711 program will subtract the zero for you.

  1. With the load cells mounted in some kind of frame and possibly with a bottom board attached, run hx711. Remember the last number it displays. You may wish to run hx711 several time to make sure it is stable.
  2. Now run hx711 with that number as an argument:
$ sudo hx711 1546640

Your number will be different. It will depend on the load cells and the load that you are calling zero.

There will be a short delay. This time it will not output the 64 lines, just the average at the end. The average should be small, close to zero. There will be some noise, but it should be a relatively small number. (Remember this is a 24 bit A to D converter. 2 to the 24th power is 16,777,216 so a "small" number may be several hundred.)

  1. Now put a know weight on the frame. It could be a 5 lb bag of sugar. The bigger, the better. I usually weigh myself, then step on the frame and run hx711.

I use a small delay like ten seconds (sleep 10) to give me time to step on the frame:

$ sudo sleep 10; hx711 12345

Note that the number you pass to the hx711 program (here 12345) will be different and will be the number you determined in the previous step as the zero reading.

All that remains is to determine the slope. I use the inverse of the slope ( 1/slope) but the method is the same.

Determine counts per pound by dividing the number returned in the previous step by the weight. For example,

If the output was 3,088,500 with 150 lbs on the scale, divide 3,088,500 by 150. In this case 1/slope would be 20590 counts per pound.

So, to summarize:

  1. determine the zero reading
  2. Run hx711 with the zero reading as an argument
  3. Divide the output by 1/slope
  4. That should be the weight in pounds.

I run this short bash script during testing. It will read the scale and output the weight every 5 seconds. Note that the utility bc (binary calculator) must be installed.

while [ 1 ]
do
DATE=`date`
echo $DATE
COUNTS=`timeout 5 ./hx711 23000`
echo $COUNTS
WEIGHT=`echo "scale=2; ($COUNTS/20550)" | bc`
echo -e "$WEIGHT\n\r"
sleep 5
done

You will have to change the zero and the 1/slope to the numbers you measured. Edit the file:

  1. change 23000 in line 5 to your zero
  2. change 20550 in line 7 to the the number you calculated as 1/slope

Copy this code to a file like scale_test and make it executable:

sudo chmod a+x scale_test

then run it

sudo ./scale_test



Temperature Compensation

Temperature drift using the HX711 and CZL635. This is a 37.9 lb piece of railroad track

Temperature Sensitivity

From the CZL635 Spec Sheet link below:

Temperature Effect on Span 2.5 g/°C
Temperature Effect on Zero 5 g/°C

From the CZL602X Spec Sheet link below:

Temperature Effect on Span 0.02%F.S/10℃
Temperature Effect on Zero 0.03%F.S/10℃

Full Scale = 50 kg 

.02% F.S/10℃
.0002 * 50 kg = .01 kg / 10℃
              = .001 kg / 1℃
              = 1 g/ 1℃

So the CZL602X are 2.5 times more stable than the CZL635

HX711 Spec Sheets

http://hivetool.org/w/images/d/d2/Hx711_english.pdf

Load Cells

Spec Sheets

  1. CZL635 Spec Sheet (from Phidgets.com)
  2. CZL602X Spec Sheet

Theory and Application Notes

  1. LOAD CELL TECHNOLOGY IN PRACTICE by REVERE TRANSDUCERS APPLICATION NOTE 07/6-13/01