Simple Dry Electrode EMG for Arduino

Introduction: Simple Dry Electrode EMG for Arduino

Electromyography is a technique used for recording the electrical activity of a muscle. In order for a muscle to move, it must receive an electrical signal from the brain via a motor neuron, with the frequency of nerve impulses controlling the force of contraction. This generates a potential difference on the surface of the skin (in the magnitude of 30micro - 50millivolts)* which the EMG circuit can pick up and amplify to around 1-2V, allowing it to be easily read on an analog pin of a microcontroller such as Arduino.

The simplest EMG circuit has 3 electrodes and can measure the electrical activity of one muscle. 2 electrodes are placed next to each other in the middle of the muscle, approx. 3-8cm apart, and the 3rd one is grounded and placed on a bone or held in hand and acts as a reference electrode. Typically, EMG electrodes are 'wet', consisting of a conductive gel sticker that is stuck on the muscle. and ensures a constant connection. Unfortunately, these electrodes can be a bit expensive, difficult to get, and usually not reusable. 'Dry' electrodes do not contain any gel and although they can produce more noisy signals and sometimes disconnect, they do are much more convenient and can be made from just a piece of metal and wire.

Materials Needed:

- At least 2-3 meters of wire, for electrodes and circuitry.

-Metal sheet (can use a drink can with the plastic coating removed)

-1x LM324n general use opamp IC

-1x 200 - 220Ω resistor

-3x 10kΩ resistors

-2x 100kΩ resistors

-2x 1MΩ resistors



-Microcontroller (Arduino)

-Tape (for sticking on the electrodes


-Soldering iron


-Oscilloscope (does not need to be big and expensive


Step 1: Making the Electrodes

1 - Cut 3 60-100cm pieces of wire and strip ends.

2 - Cut out 3 small pieces of metal sheet and solder one to the end of each wire.

3 - Optional: embed/stick 2 electrodes in a piece of plastic for more firm design.

Step 2: The Circuit

The circuit includes consists of a differential amplifier, to acquire and pre-amplify the signals, followed by a regular opamp, to further amplify the signals.

It also includes a potential divider (100k resistors at the bottom) to create reference "ground" for the opamps and electrodes between the +5V and 0V GND pins of an Arduino which are now used as the + and - voltages of the IC. This eliminates the need for a negative voltage rail and the extra circuitry/batteries associated with it, allowing the circuit to be powered directly from the Arduino voltage pins. It also eliminates any risk of damage to the microcontroller caused by accidentally feeding a negative voltage into its analog pins.

The differential amplifier amplifies the difference between two voltages. The two inputs are used for the 2 electrodes that are placed across the muscle. It includes high value resistors to ensure that the input impedance is also high and matches the skin impedance, allowing it to pick up signals from the muscles. It has a gain of 100.

Following on is a simple non-inverting amplifier with a gain of about 46. G = 1+10000/220 = 46. The output of this amplifier can be connected directly to an analog pin.

Filters: To simplify this design, no filters were included. This means that no capacitors are needed to build the circuit. This may make it susceptible to noise, especially from 50/60Hz mains signals. However, upon testing, I have found that such a circuit can function reasonably well and any external interference should not significantly affect the circuit's performance.

Warning: - reversing opamp polarity can fry the IC

Step 3: Attaching the Electrodes and Connecting Everything Up

Before placing the electrodes, wet the skin and wipe to clean and ensure better conductivity. Slightly moist skin will yield better results, as such any mild sweating under the electrode will act in your favor.

Place the 2 input electrodes on the muscle and the reference electrode on a nearby bone or simply hold it in your hand. Not all positions will yield good results; it may take some experimentation to determine the ideal positioning.

There should be 6 connections made to the circuit: 3 inputs, 2 power, and 1 output:

-2 input electrodes connected to the + and - input pins of the differential amplifier and the reference electrode to the reference "ground" voltage between the 2 resistors of the potential divider.

- +5V and GND microcontroller pins should be connected across the potential divider and the output of the circuit to an analog pin.

(N.B. the pen markings in the photos are not necessary)

Step 4: Enjoy!

Be the First to Share


    • Anything Goes Contest

      Anything Goes Contest



    Question 1 year ago on Step 2

    Can you send one photo of the Back of the circuit?
    I don’t know how to do the circuit seeing the diagram.


    Question 1 year ago

    That's looks amazing, but i don't now how it's work in arduino. I have no idea how write code with using Electrode EMG. Can u paste me simply template code with that? I admire you, and a great project!


    Answer 1 year ago

    Thank you for admiring my project. The code is actually very simple - you connect the output of the EMG circuit to an analog pin on the arduino and read and display the value on the Serial Monitor. Let me know if you need anything else.

    int analogPin = <name of analog pin (i.e. A3)>;
    int val = 0;

    void setup()

    // setup serial


    void loop()

    val = analogRead(analogPin);
    // read the input pin

    // debug value



    1 year ago

    I have no idea what I'm doing.. I get the general idea of what is trying to be done.. before I looked this up I naively just tried connecting a ground to myself and then 2 analog inputs to my muscle, completely unamplified, and then programmatically subtracting them. I am using aluminum foil and scotch tape as electrodes.. I think I recreated the circuit but I get a lot of noise, it seems to be oscillating rapidly between high and low voltage. Occasionally I get what looks like a response to my flexing, and it stops oscillating as much and goes either high and low.. but mostly I get a lot of oscillating.. I tried disconnecting my laptop from mains, that didn't seem to help but it did slightly alter the signal. I am not sure where to debug. The output from the first opamp is in the same range as the output from the second.. this is correct right? Since they are connected? Naively I would have guessed that the first amp would be In a lower range?? I think I'm hopeless lol. I think one of my issues is I am using a breadboard and the resistors wiggle around a lot


    Reply 1 year ago

    At least you got a signal. I remeber the noise and the oscillations are caused by bad contact of electrodes. This is the major disadvantage of dry EMG electrodes. I suggest that you replace the aluminium foil with electrodes made of solid metal sheets and wet them slightly. The gain of the first opamp (differential setup) is 100 and the gain of the second one is 46. This gives a total of 4600x which is bound to be quite suseptable to noise, especially if there are no filters to bandwidth limit the signal. Furthermore, bread board connections add-in noise and differential amplification of such small noise signals is bound to be prone to noise. In the next month or two I plan to improve the circuit and update the instrucatble.