# ADS1115 measuring body resistance has a noisy output, how to fix it?

I am trying to measure body resistance with an ESP8266 and ADS1115 without much success.

At first the ADS1115 power supply was connected to 3.3V but there was a lot of noise. I then powered it from a battery but the noise wasn't get reduced, maybe because it needs to share ground with the Arduino for I2C.

The ADS1115 ADC pin is connected to a voltage divider of body probes and 500k to ground.

I cannot power the Arduino from a battery as I need to monitor results fast enough through serial monitor, specifically a plotter to see the results. The moment I touch (only) the ADC pin, the noise intensifies as if I am an antenna but if I touch the positive probe which is same as the ADS1115 powersupply, the noise gets reduced to nothing.

I also tried changing sample rate, 860sps is good, 8sps better and 128sps (default) is worst.

Is there anything I can do get rid of the noise? My main purpose is to make a somewhat accurate acupressure point locator. I doubt if I am heading the right direction but still would like see some noise free curves.

Wiring & Schematics:

8 SPS plotter:

128 SPS plotter:

Update: Probing body after attaching 100nf ceramic capacitor on probes (8SPS):

• There is a great reason why EEs draw schematics. Do you know what that is? Jun 6 '21 at 17:06
• The ADS1115 is, on itself, typically quite stable. However you can do a lot of things wrong both with cabling as well as in the code to configure it.
– PMF
Jun 6 '21 at 17:21
• "I cannot power arduino from battery as I need to monitor results fast enough through serial monitor," -- you can use an USB isolator like these Jun 7 '21 at 1:16
• @Asim: What "noise" are you seeing? 50Hz hum and maybe harmonics of that? Random noise?
– JRE
Jun 7 '21 at 7:58
• multimeter probes, I attached connectors of a broken multimeter to circuit to easily attach/detach probes @tlfong01
– asim
Jun 7 '21 at 8:10

Question

How come human body impedance measurement using ADC such as ADS1115 is so noisy?

2. This is a hundred year old problem. The solution is the Einthoven Triangle. See Ref 1 below for more details.

3. The Einthoven Triangle is a very specific case of eliminating noise by using the concept of "differential signalling". The OP needs to wiki to know more about differential input and differential amplifier.

4. For ADS1115, there are four single ended inputs or two differential inputs, which should always be used to reduce noise.

5. Differential signalling can reduce noise, but never eliminate it. So we need to use other tricks, including using analog/digital filtering, which is actually already implemented in 16-bit and 24-bit ADCs such as ADS1115, HX711 and NAU7801.

6. Another simple trick to eliminate noise is to use moving time average, to "average out" too noisy readings/measurements, or exclude the measurements to far away from the moving average (actually sort of very simple digital filtering).

7. ADS1115 can either do continuous (up to about 800 conversions per second) or single shot mode, and its PGA (Programming Gain Amplifier) can entertain a wide input range of about ±250mV to about ±6V. This programming gain setting is very important to fit the body impedance situation which might be of order of uA or mA, Note 1.

Note 1: ADS111x ΔΣ ADCs are based on the principle of oversampling, ... to reduce noise of low level signals, see Section 8.1 of Datasheet, and also Technical Documentation.

8. The OP's interest to locate acupressure points. So first thing first is to specify the acupressure points and do some rough voltage/current measurements using perhaps a cheapy oscilloscope.

/ to continue, ...

References

(6) Valley Closing Point (合谷穴) - Wikipedia https://zh.wikipedia.org/wiki/%E5%90%88%E8%B0%B7%E7%A9%B4

Appendices

Appendix A - The Einthoven Triangle

Appendix B - ADS1115 Block Diagram

Appendix C - ECG Measurement Noisy Example

Appendix D - Acupressure Points for Back Pain

When one uses acupressure or acupuncture endorphins and serotonin is released in the body and acts as a natural painkiller.

By applying pressure between the thumb and forefinger also known as LI-4 is effective to not only relieve back pain but other ailments as well.

Here one can apply pressure while relaxing on a bed or sofa on this Acupoint for at least 10 seconds and release for 5 seconds – repeat this method at least three times.

Appendix D - External/mains noise measurement and ADS1115 small signal full range setting calibration

1. Now before measuring body resistance using ADS1115, I think we need to measure the magnitude of the external/mains noise. We need to make sure the external/mains noise is small enough not to affect the body resistance related signals.

2. I used my Rigol DS1054Z 50MHz scope to measure the noise level of the following signal sources: (a) 10kΩ, 10MΩ, 10cm wire, 30cm wire. I found the noise is in a range of 10mVpp to 100mVpp. So it should not be meaningless if we set the ADS1115 full range to the smallest +/-250mV

3. So we now need to check three things: (a) The magnitude of the body resistance/voltage, (b) appropriate gain factor setting of the ADS1115 PGA (Programmable Gain Amplifier), (c) If ADS1115 does indeed filter out the external/mains noise.

• body impedance measurement is not the same as ecg. Einthoven has zip to do with it. Jun 7 '21 at 2:08
• @Scott Seidman, (1) many thanks for pointing out my sloppiness. I must confess that I am only a newbie in biomedical applications. (2) I am not sure if the central idea of Einthoven is to eliminate noise using sort of "differential input", so the noise in two or more wires/leads sort of "cancels out". (3) Another noise elimination technique is to "modulate" a signal using a carrier, say a sine wave (Note 1), and use analog or digital filtering to extract the original very small signal, perhaps in the order of uA (micro amperes), using Wheatstone Bridge or Holland Bridge, to continue, ... Jun 7 '21 at 2:28
• Note 1: Bio-impedance circuit inputs - EESE, 2021may31 electronics.stackexchange.com/questions/567701/… Jun 7 '21 at 2:30
• My long term project plan is to use ADS1115. HX711, NAU7801, and ADS8232 to do bio-impedance experiments. Perhaps I could later explain to the OP how I will be doing it. Jun 7 '21 at 2:42
• I can clearly notice changes in plotter on different areas of my body but I doubt the readings because of the noise, I have a nokia display I will try to plot my results next so I don't have to rely on pc and can power the system with battery while also trying differential input, I would like to be in touch to know about your experiments @tlfong01
– asim
Jun 7 '21 at 9:02
1. You're lucky: body impedance measurements are a simpler problem than measuring external voltages in presence of noise. As long as you can keep the electrode-to-skin resistance relatively constant by strain-relieving the leads so they don't tug on the electrodes, it's not hard to get good signals.

2. The core idea is to drive a small AC current through the body, and synchronously demodulate the resulting small AC voltage. The synchronous demodulation acts as a narrowband filter that will not be sensitive to ECG, EMG, 50/60Hz interference, nor similar artifacts. The skin impedance drops significantly with frequency, so you'll want to measure at 10-20kHz where it's hundreds of times lower than around DC (!).

3. In your case, you'd be driving a preset amplitude square wave current from a current source, with zero mean value (that's super important!) - IIRC clinical equipment uses on the order of 1uA amplitude. Take an ADC sample each time the current is reversed. Compute the voltage drop by adding up a number of ADC samples, alternating their signs, i.e. sample1 - sample2 + sample3 - sample4 and so on - you'd want to average across multiple samples, for respiration a 100ms worth of samples is a good starting point. The impedance is then the measured voltage divided by the driving amplitude. Since the drive amplitude should be fixed, the division is just multiplying by the reciprocal.

4. Since your ADC is not fast enough, you can instead use a digital switch to invert the polarity of the signal coming out of the preamplifier, synchronously with the switching of the polarity of the drive current. The slow ADC will then naturally act as an averager.

5. If you're feeling fancy and have some computing cycles to burn, the AC signal can come from a DAC, and be a band-limited random signal (i.e. pass output from rand() though a FIR or IIR filter than shapes the bandwidth appropriately) - say between 10kHz and 50kHz. The voltage is then cross-correlation of the signal sent to the DAC with the signal received from the ADC - this is much less sensitive to narrowband interference (also called CW signals). On the other hand, the human body has a complex impedance that is frequency-dependent, so this approach only works up to a point - beyond that, you'll need to compute complex impedance as a function of frequency, and that will come from convolution of the DAC and ADC signals.

6. As a point of reference, the respiration signal (if that's what you're after) is about 1 Ohm in amplitude, and IIRC the EKG Lead II is most sensitive i.e. will yield highest impedance amplitude.