Analog inputs interfering with one another?

Hello community,

I have encountered a rather strange issue while using two sensors and was hoping for some help. The two sensors of which I speak are as follows:

  1. a Galvanic skin response sensor (measuring skin conductivity)
    link: http://wiki.seeedstudio.com/Grove-GSR_Sensor/

  2. a Pulse sensor to measure heart rate (beats per minute, inter-beat interval, PPG waveform)
    https://pulsesensor.com/

So, the issue is as follows:

When i connect the sensors to analog slots (GSR on A0, and pulse sensor on A2 specifically), I experience readings that seem to suggest that the both data streams from the GSR and pulse sensor are interfering with one another (i.e. the pulse readings influence the GSR sensor’s readings). Please see the images for clarification.

In the images, the pulse readings is the orange curve, and the GSR reading the dark blue curve.

I suspect it is interference within the Arduino and because all of these screenshots were taken while I was not wearing the GSR sensor.

One observation I have made was that the interference only starts when the pulse rate (orange curve) increases it’s amplitude (as shown in attachment 2). As we can see, during low amplitude readings, no interference is present (e.g. in attachment 3). Similarly, in attachment 4, we notice the only time the GSR reading spikes up (dark blue curve) is when a large amplitude pulse reading simultaneously occurs (orange curve).

Please find the code I am using below.

#define USE_ARDUINO_INTERRUPTS false
#include <PulseSensorPlayground.h>

const int GSR=A0;
const int PULSE_INPUT=A2;

const int OUTPUT_TYPE = SERIAL_PLOTTER;
const int THRESHOLD = 550;  
int sensorValue=0;
int gsr_average=0;

byte samplesUntilReport;
const byte SAMPLES_PER_SERIAL_SAMPLE = 10;

/* load pulseSensor library */
PulseSensorPlayground pulseSensor;

void setup() {
  Serial.begin(115200);
  
  /* ===== Setting up the pulse sensor ===== */
  pulseSensor.analogInput(PULSE_INPUT);
  pulseSensor.setSerial(Serial);
  pulseSensor.setOutputType(OUTPUT_TYPE);
  pulseSensor.setThreshold(THRESHOLD);
  // Skip the first SAMPLES_PER_SERIAL_SAMPLE in the loop().
  samplesUntilReport = SAMPLES_PER_SERIAL_SAMPLE;
}

void loop() {

    /* ========== Collecting data from the GSR sensor ========== */
    long sum=0;
    //Average 10 measurements to reduce noise
    for(int i=0;i<10;i++) {          
      sensorValue=analogRead(GSR);
      sum += sensorValue;
      }
   gsr_average = sum/10;
 
  if (pulseSensor.sawNewSample()) {
    /*
       Every so often, send the latest Sample.
       We don't print every sample, because our baud rate
       won't support that much I/O.
    */
    if (--samplesUntilReport == (byte) 0) {
      samplesUntilReport = SAMPLES_PER_SERIAL_SAMPLE;

      /* outputs GSR readings along with pulse readings in the same line, separated by commas */
      pulseSensor.outputSample(gsr_average);
    }
  }
}

Any help would be greatly appreciated! I have been trying to figure this out for a while now…

EDIT: added image links so people wouldn’t have to download attachments