analog input introduces noise into EMG sensor signal

I developed an EMG sensor that detects muscle contractions. Using a scope, the output of the sensor has a peak to peak value of a few hundred millivolts when not contracting. However, when the output of the sensor is connected to an analog input of the Arduino Uno, the signal jumps to a peak to peak of over 1 volt, sometimes close to 2 volts.

Where is this noise coming from and how I can get rid of it?

Please and Thank you

How did you hook up the ground reference of your sensor to the Arduino?

--
The Basic Motor Driver: simple, inexpensive motor driver for 1 stepper motor or 2 DC motors

Because of the nature of the sensor, the circuit is grounded by the user's body. The arduino ground is floating.

I think this explains what you are observing. The 1V-2V offset is the difference in "ground potential" between the Arduino and the user's body.

--
The Flexible MIDI Shield: MIDI IN/OUT, stacking headers, your choice of I/O pins

I understand what you're saying, but it's not really an offset...the signal doesn't simply shift up. The amplitude increases.

Do you think a common ground will fix the signal?

You are possibly seeing good old 60 Hz noise from fluorescent lights and such superimposed upon your signal, causing an increase in amplitude. Looking at the signal with an oscilloscope right at the Arduino pin might confirm (though it introduces its own earth ground and could disturb the measurement).

I think a common ground will definitely help, or perhaps actively driving the Arduino's ground to a sensor on the body (using an op-amp) to set the body's potential to be the same as the Arduino. There are lots of "open source" EMG interface circuits on the web that might provide some inspiration for this. Googling "emg circuit schematic" brings up lots of related information.

--
The Aussie Shield: breakout all 28 pins to quick-connect terminals

I don't think it's 60 Hz because it only occurs when the arduino is connected. Without any bridge between the circuit and the arduino, the signal is perfect.

Also, I tried a common ground and the signal gets huge and clips.

I've done quite a bit of research on this...I just think it's something specific with my setup, but I can't figure out what.

Perhaps you can post more details on your wiring and your sensor design?

It could still be 60 Hz, if the Arduino is connected over USB, which comes from a computer, which is connected to a 60 Hz supply!

--
The Rugged Motor Driver: two H-bridges, more power than an L298, fully protected

Okay I've pinpointed the problem, but I have no idea how to fix it. The common ground fixed the issue (I messed up something the first time). Now, the signal is fine until I open the Serial Monitor. THEN, it goes crazy. Any ideas??

Hmmm....are you connecting to a laptop? Try disconnecting the laptop's power supply.

--
The Rugged Circuits Yellowjacket: 802.11 WiFi module with ATmega328P microcontroller, only 1.6" x 1.2", bootloader

Yes I'm using a laptop, and I've tried it with and without the power cable connected...same issue.

It sounds like it's pretty susceptible to noise, and the constant activity of the USB port once you connect is coupling into your signal (my guess). How close are your wires to the "USB side" of your Arduino? Any chance you can keep them as far away as possible?

Can you post more details on your circuit and setup?

--
The Gadget Shield: accelerometer, RGB LED, IR transmit/receive, speaker, microphone, light sensor, potentiometer, pushbuttons

that's my schematic.

When you say

RuggedCircuits:
Any chance you can keep them as far away as possible?

do you mean, on the board use say A5 instead of A0 because its further from the USB port?

do you mean, on the board use say A5 instead of A0 because its further from the USB port?

Well, yes, and also make sure the wires go away from the board and don't run over the USB part as they are exiting. Though if your signal is "going crazy" I have a feeling it's more serious than just picking up some stray noise from the USB.

There are a couple of issues with your schematic. The LM741 is not a good choice for this kind of "sensitive" work. A higher-quality rail-to-rail op-amp would be better. Also, it looks like your final output stage is bipolar (goes both positive and negative) and you cannot put negative voltages into the Arduino.

--
The Ruggeduino: compatible with Arduino UNO, 24V operation, all I/O's fused and protected

I've moved the wires away as you suggested and I'm getting the same issue. I understand there are better op amps than the 741, but it doesn't seem like that would be the reason the serial monitor is distorting the signal so much. Also, the final two op amps act as a rectifier so the final waveform is all positive.

You are probably measuring some capacitive pickup. Are the probes double-shielded? (outer shield ground, inner-shield is a low impedance buffered version of the signal to cancel cable capacitance loading).
This is the scheme recommended in "The Art of Electronics" from what I recall - it shields all the signal wires from capacitive pickup without imposing any capacitive load on the high-impedance signals at low frequencies.

You certainly need to move the subject well clear of any mains wiring, computer or fluorescent or compact-fluorescent bulb, these put out lots of noise. Is the subject grounded?

Your circuit is differential, so how are you routing the two signal wires? Ideally they should to run parallel (and preferably twisted together) to reduce magnetic (near-field) interference.

The LM741 is an unfortunate choice of op-amp for this circuit, its not designed for less than a +/-15V supply and has very poor specs by modern standards. It was state of the art in 1968.