Reading Analog Sensors a Better Way?

I have the ADS1115 which can read 16 bits for 860 samples per second with 4 channels on I2C. I would like to collect data from up to 16 different analog sensors and store this data to an SD card on a CSV format. As the ADS1115 can have up to four different addresses, I would like to be able to use 16 different channels and plot changes in a system from pressure sensors, temperature sensors, etc.!

Traditionally, I would read 1 channel say 11 times with a delay in between each read, throw out the first read (sometimes I notice this first read has difficulty transitioning between two different voltages), and average the last 10. I would then move on to the next channel.

      for (i=0; i< NUMSAMPLES; i++) 
        samples[i] = ads.readADC_SingleEnded(channelRead);
      // average all the samples out
      adcRead = 0;
      for (i=1; i< NUMSAMPLES; i++) 
        adcRead += samples[i];
      adcRead /= NUMSAMPLES-1;

Couple random questions that probably have a way longer answer than I need:

  1. How many samples are enough to average to keep the noise down?

  2. Is there an appropriate delay between readings of the same channel? As the ADC can handle 860 SPS, I figure 2 ms min would be appropriate.

  3. Can I get the 4 ADCs to process data in parallel from their respective A0, A1, A2, or A3 and store their state in independent arrays? I.E. approach 860*4 samples per second? IDK if the juice is worth the squeeze here. I am guessing reading channels 0-3 on ADC #1 and then move on the ADC #2 would be more appropriate.

  4. I would like to read raw data on 16 channels, average an adequate amount of samples, and store all this information on an SD card at 1 second intervals. I would like to be able to turn off channels and increase the sampling frequency up to 1/16 of a second.


Delays and averaging depend on your sensors and signals, find out yourself.

Multiplexed channels need some settling time before meaningful values can be read. Dropping the first read after a channel switch is one way to introduce such a settling delay. Then multiple ADC can be read in turn, resulting in a delay between readings of the same signal.

How many samples are enough to average to keep the noise down?

The standard deviation of random noise is reduced by a factor of sqrt(N), when averaging N samples. Signal averaging - Wikipedia

The sampling delay can be reduced by overlapping reads, i.e. read ADC2 while ADC1 is changing inputs.