128 independent Analog Load Cell interfacing to Arduino Board

What is the best way to interface 128 load cells to Arduino board? The load cell sensor to controller distance will be 3 meters.
I thought of using Analog Mux to select the load Cell signal and then amplifying and digitize the load cell signal before feeding to Microcontroller.
Can anyone guide me on this.

ashishmahajan:
I thought of using Analog Mux to select the load Cell signal and then amplifying and digitize the load cell signal before feeding to Microcontroller.

This is a valid idea which could be made to work practically.
lc128.png

lc128p.png

lc128.png

lc128p.png

it depends on who is paying for it. my current project:

Intrusion sensor > NANO > HC-12 Serial RF Module > ( the sky ) HC-12 Serial RF Module > NANO > MEGA

I need to send a frequent but not continuous stream of data down the serial ports, enough to let the MEGA know that the link is alive. a heartbeat. I decided to buy weather station sensors and send those down the serial stream, interrupted on rare occasions by the intrusion sensor.

the NANO on the receiving end can transfer the weather data to I2C. up to 127 I2C addresses are available. I2C address 0 is the I2c Master . I won’t have anything close to 127 sensors, but the channels are available

the web site that explains how to do this was devised by a person who thinks gray on black, #6 font, is the way to present tech info:

how to network up to 127 sensors with I2C

I extracted the HTML, hacked off the CSS at the top, and replaced it with

<font size="4"><font color="black">

to make it readable

all you really need is the code:

I2C Sender code:

// Program: I2C slave sender template for multi-node Arduino I2C network
// Programmer: Hazim Bitar (techbitar.com)
// Date: March 30, 2014
// This example code is in the public domain.

#include <Wire.h>

#define NODE_ADDRESS 2  // Change this unique address for each I2C slave node
#define PAYLOAD_SIZE 2 // Number of bytes  expected to be received by the master I2C node

byte nodePayload[PAYLOAD_SIZE];

void setup()
{

  Serial.begin(9600);  
  Serial.println("SLAVE SENDER NODE");
  Serial.print("Node address: ");
  Serial.println(NODE_ADDRESS);
  Serial.print("Payload size: ");
  Serial.println(PAYLOAD_SIZE);
  Serial.println("***********************");

  Wire.begin(NODE_ADDRESS);  // Activate I2C network
  Wire.onRequest(requestEvent); // Request attention of master node
}

void loop()
{ 
  delay(100);
  nodePayload[0] = NODE_ADDRESS; // I am sending Node address back.  Replace with any other data 
  nodePayload[1] = analogRead(A0)/4; // Read A0 and fit into 1 byte. Replace this line with your sensor value
  
}

void requestEvent()
{
  Wire.write(nodePayload,PAYLOAD_SIZE);  
  Serial.print("Sensor value: ");  // for debugging purposes. 
  Serial.println(nodePayload[1]); // for debugging purposes. 
}

I2C Master code:

// Program: I2C slave sender template for multi-node Arduino I2C network
// Programmer: Hazim Bitar (techbitar.com)
// Date: March 30, 2014
// This example code is in the public domain.

#include <Wire.h>

#define NODE_ADDRESS 2  // Change this unique address for each I2C slave node
#define PAYLOAD_SIZE 2 // Number of bytes  expected to be received by the master I2C node

byte nodePayload[PAYLOAD_SIZE];

void setup()
{

  Serial.begin(9600);  
  Serial.println("SLAVE SENDER NODE");
  Serial.print("Node address: ");
  Serial.println(NODE_ADDRESS);
  Serial.print("Payload size: ");
  Serial.println(PAYLOAD_SIZE);
  Serial.println("***********************");

  Wire.begin(NODE_ADDRESS);  // Activate I2C network
  Wire.onRequest(requestEvent); // Request attention of master node
}

void loop()
{ 
  delay(100);
  nodePayload[0] = NODE_ADDRESS; // I am sending Node address back.  Replace with any other data 
  nodePayload[1] = analogRead(A0)/4; // Read A0 and fit into 1 byte. Replace this line with your sensor value
  
}

void requestEvent()
{
  Wire.write(nodePayload,PAYLOAD_SIZE);  
  Serial.print("Sensor value: ");  // for debugging purposes. 
  Serial.println(nodePayload[1]); // for debugging purposes. 
}

… and an extra $3.44 for a NANO at every sender

Load cells work in the millivolt and microvolt range. Crucially they use differential signals. You must amplify the differential signal and convert it to a single-ended 0-5V or 0-3.3V signal before sending it through the MUX.

This could be done with a single opamp next to each load cell but the gain required is relatively large so it would take an experienced analog engineer a little time to design a suitable circuit. Maybe there are off-the-shelf amplifiers you can buy?

How far apart are these 128 load cells and how fast do you need to read them? An integrated load cell amplifier and digitizer like the HX711 can be used for each load cell and then the digital signals can be transmitted relatively long distances.

There are 8-channel differential analog multiplexers(4097); probably, these multiplexers could be used in stead of 4067 in order to be compatible with the x128 gain input differential amplifier of the HX711.
lc128p.png

I don’t think I’d try to multiplex the analogue signals from the load cells. HX711 Load Cell Amplifiers are pretty cheap and I would look instead at multiplexing the digital serial signals. I think in the HX11 you can signal an individual chip to power down by holding the PD_SCK high. So you could build a digital circuit using a shift register and some NOR gates to allow you to select a specific HX711 unit to clock and read data from, and force all the others to be standby/power-down.

gardner:
I don't think I'd try to multiplex the analogue signals from the load cells. HX711 Load Cell Amplifiers are pretty cheap and I would look instead at multiplexing the digital serial signals. I think in the HX11 you can signal an individual chip to power down by holding the PD_SCK high. So you could build a digital circuit using a shift register and some NOR gates to allow you to select a specific HX711 unit to clock and read data from, and force all the others to be standby/power-down.

An optimum design is a compromise of: cost, performance, robustness, reliability, maintainability , weight, and space.

It would be useful to know why you want to connect so many load cells - are you really weighing that much stuff ? or are you using them as switches to sense some weight and not interested in actual weight - in which case you can buy pressure pads designed for alarm systems which are contact closure with additional tamper leads.

https://cpc.farnell.com/c/security-cctv/alarms-security-systems/alarm-pressure-mats

Dealing with the calibration and all the data from 128 will be a pain and the hard part of the project

another use for load cells: stack them up on a column, give the column a robust thump, measure the propagation time of the thump along the beams. measure how far it travels, and if it propagates to the floor above.

I don’t think I’d try to multiplex the analogue signals from the load cells. HX711 Load Cell Amplifiers are pretty cheap and I would look instead at multiplexing the digital serial signals.

analog signals lose voltage and acquire noise rapidly. digitizing hardens the signal. getting it done close to the source eliminates a false variable from your equations