I2C load/weight sensor

I would like to measure weight of 50 boxes from one Arduino. One box can be from 5 to 100 kg. Measuring precision of 0.1 or 0.2 kg is enough. Measuring interval is about 1hr, so speed or simultaneously reading is not issue.

What options for some cheap and simple sensors do I have?
Is there some I2C sensors available to use with Arduino?

Hopefully I should find something with low height profile so I don’t have to make modifications on existing boxes, something like this but with I2C: seeedstudio Load-Sensor-p-1344

This types give me more “mechanical headaches”, but if there is no other options I’l take this type also: phidgets

A load cell will measure weight. You need an OpAmp (INA125) or specific chip (HX711) to amplify the signal. Most scales have a load cell, and they have already the mechanical construction to get the weight applied to the load cell in a proper way.

It is also possible to use a load cell in four corners, for example four of these : https://www.sparkfun.com/products/10245

Adafruit has a 16-bit ADC with I2C : https://www.adafruit.com/products/1085 I think they can be used with a load cell if the gain can be set high. Perhaps 16x gain is not enough.

Since only a resolution of 0.1kg is needed, you could perhaps use the differential analog input with gain that some ATmega chips have.

Hi,

I have a similar project for only a few boxes (beehives).

I2C is fine in many ways but the main problem with i2C is the distance between the load cells (slaves) and board (master). I2C is very limited in distance and extending it is quite a challenge ! There are a few solutions though...

I was thinking of using the I2C MCP3424 A/D converter which looks very interesting. The weight cell could be a Bosche one, they are very precise and relatively cheap... The one that Phidget sells are similar.

The other cells you are thinking about are not good for a continuous load. And they drift a LOT !! If you want to measure from time to time and can calibrate them before each measure, it's ok.

Another option would be to use a pressure cell and to convert the weight into pressure. (bag under a box) But most (in not all) pressure cells are made for air pressure and air is compressible and you have to deal with the atmosphéric pressure . So the bags should be filled with a liquid... Yet another problem !

There are a lot of projects around, but i couldn't find a finished and complete one !

Thank You both for answers.

I wasn’t aware of drifting of measuring signal from load sensor (except temperature). You mean for this type ?

I2C distance would be max 15m of cable on each side. That’s too much? As I can see from web, it can go up to 100 m, but with lowering speed?

Another option is wireless communication (making single “bare” arduinos for each sensor, but complicated beacuse power supply’s, communication protocols, etc …)

The I2C bus can go up to 50 cm. Some have 2 meters cable working, but only with low resistor values for the pullup resistors and a cable that has very little crosstalk between SDA and SCL and little capacitance for SDA-GND and SCL-GND.

There are chips that can push I2C onto a cable to extend the range. However, if every unit would have an Arduino, then for 15 meters of cable you can use RS-485 or low baudrate plain serial communication (with some input and output protection). Many use CAT5 cable, it is cheap and has enough wires for data and power.

To use a central Arduino and have sensors at the end of long wires, is not easy. The OneWire protocol can be used with 15 meters cable, but I don't know if a OneWire chip is available for a load cell. I think it is easier to have an Arduino at every unit and transfer the data digital (either with a cable or wireless).

If you really want to use a single Arduino and 50 simple units, perhaps you can make 50 analog units that output an analog voltage of 0-5V for 0-100kg. The Arduino would have an analog mux (or 8 mux of 8 channels) to choose one of the analog signals. Using an analog signal requires a careful design, since almost everything (like the supply voltage) will change the analog signal.

For price and precision an HX711 module for the load cell amplifier is the best you can buy. It has a digital interface; the data is read/written using bit banging so a couple meter length cable between the module and an Arduino should be OK. You cannot have long leads between the load cell and amplifier, however -- you'll get too much noise. If you need more distance you should be building custom boards with an ATTiny/etc. and RS485 or wireless interfaces.

Snappy2002: I2C distance would be max 15m of cable on each side.

I am wondering whether you could connect an analogue-to-digital conversion module such as this directly to your Anduino over 15m of cable. The data rate can be quite slow so distance should not be a problem.

A HX711 module is 1 dollar on Ebay. Sadly, I think it can not be controlled over long wires. According to the datasheet of th HX711 the "PD_SCK high time" has a maximum of 50us. The long wires could also introduce spikes and glitches.

The 50us is not extremely short. Perhaps with a simple RC filter it could be done. But I doubt if that will be reliable with a cable of 15 meters.

Peter_n: A HX711 module is 1 dollar on Ebay. Sadly, I think it can not be controlled over long wires. According to the datasheet of th HX711 the "PD_SCK high time" has a maximum of 50us. The long wires could also introduce spikes and glitches.

The 50us is not extremely short. Perhaps with a simple RC filter it could be done. But I doubt if that will be reliable with a cable of 15 meters.

Well spotted! However I'm more optimistic that it may work.

Placing a resistor of about 270Ω from PD_SCK to earth near the HX711 may help if necessary. If power-down control is not required, electronics could be introduced before PD_SCK to give sharp pulses of less than 50μs duration (I understand the bit rate can be as low as 300 bit/s).