Files
-
counter-i2c / eagle / counter.brd
-
counter-i2c / eagle / counter.sch
-
counter-i2c / eagle / designBlock / gate.brd
-
counter-i2c / eagle / designBlock / gate.sch
-
gas-i2c / eagle / gas.brd
-
gas-i2c / eagle / gas.sch
-
lcd-screen-i2c / eagle / lcd-screen.brd
-
lcd-screen-i2c / eagle / lcd-screen.sch
-
master-simple / eagle / simple.brd
-
master-simple / eagle / simple.sch
-
master / eagle / beemos-master.brd
-
master / eagle / beemos-master.sch
-
rpi3-shield / eagle / shield.brd
-
rpi3-shield / eagle / shield.sch
-
scale-i2c / eagle / hx711-RJ12-board.brd
-
scale-i2c / eagle / hx711-RJ12-board.sch
-
scale-i2c / eagle / scale-slave.brd
-
scale-i2c / eagle / scale-slave.sch
-
template-slave-i2c / eagle / slave-basic.brd
-
template-slave-i2c / eagle / slave-basic.sch
-
weather-i2c / eagle / meteo-slave.brd
-
weather-i2c / eagle / meteo-slave.sch
Filesscale-i2carduinotesttest_weightlibHX711 | |
---|---|
.. | |
examples | |
HX711.cpp | |
HX711.h | |
LICENSE | |
README.md | |
library.json |
README.mdHX711
An Arduino library to interface the Avia Semiconductor HX711 24-Bit Analog-to-Digital Converter (ADC) for Weight Scales.
This is my humble attempt at creating an Arduino library for this ADC: http://www.dfrobot.com/image/data/SEN0160/hx711_english.pdf
Other libraries exist, including this very good one, which I first used and which is the starting point for my library: https://github.com/aguegu/ardulibs/tree/master/hx711
Advantages of this library
Although other libraries exist, I needed a slightly different approach, so here's how my library is different than others:
It provides a tare() function, which "resets" the scale to 0. Many other implementations calculate the tare weight when the ADC is initialized only. I needed a way to be able to set the tare weight at any time. Use case: place an empty container on the scale, call tare() to reset the readings to 0, fill the container and get the weight of the content.
It provides a power_down() function, to put the ADC into a low power mode. According to the datasheet, "When PD_SCK pin changes from low to high and stays at high for longer than 60μs, HX711 enters power down mode". Use case: battery powered scales. Accordingly, there is a power_up() function to get the chip out of the low power mode.
It has a set_gain(byte gain) function that allows you to set the gain factor and select the channel. According to the datasheet, "Channel A can be programmed with a gain of 128 or 64, corresponding to a full-scale differential input voltage of ±20mV or ±40mV respectively, when a 5V supply is connected to AVDD analog power supply pin. Channel B has a fixed gain of 32.". The same function is used to select the channel A or channel B, by passing 128 or 64 for channel A, or 32 for channel B as the parameter. The default value is 128, which means "channel A with a gain factor of 128", so one can simply call set_gain(). Also, the function is called from the constructor.
The constructor has an extra parameter "gain" that allows you to set the gain factor and channel. The constructor calls the "set_gain" function mentioned above.
The "get_value" and "get_units" functions can receive an extra parameter "times", and they will return the average of multiple readings instead of a single reading.
How to Calibrate Your Scale
- Call set_scale() with no parameter.
- Call tare() with no parameter.
- Place a known weight on the scale and call get_units(10).
- Divide the result in step 3 to your known weight. You should get about the parameter you need to pass to set_scale.
- Adjust the parameter in step 4 until you get an accurate reading.
How to use
See the example in examples/HX711SerialBegin. Please don't use examples/HX711Serial anymore. It is deprecated because the pin definition within the constructor is not timing safe. (#29)