OpenEMG Arduino Sensor


Electronics - 18-06-2019

Major update (18/06/2019): added the new SMD version of OpenEMG.

Context

Electromyography (EMG) is an electrodiagnostic medicine technique for evaluating and recording the electrical activity produced by skeletal muscles. An electromyograph detects the electric potential generated by muscle cells when these cells are electrically or neurologically activated.

It can be a useful and intriguing sensor technology to use with Arduino or any other micro-controller. Therefore, I designed the openEMG project, an open-hardware, easy to use and very reliable EMG sensor.

OpenEMG PCB (SMD version) OpenEMG PCB (SMD version), fully populated.

With its compact form factor, this sensor board outputs an analog voltage (0 to 5V), depending of the muscular signal.

This video showcases the project:


Features & usage

This table gives the electrical caracteristics of the board.

Description Value
Input Voltage 5V
Output Voltage 0 to 5V (proportional to muscle contraction)
Maximum input current < 10 mA

OpenEMG should be wired like this:

OpenEMG wiring diagram

Both muscle electrodes must be placed on the same muscle, about 2cm apart; the ground electrode should be place on a neutral zone (bone) about 5cm from the other electrodes.

On the board, there is a potentiometer to tune the gain of the output amplifier. This gain is strongly dependent on the muscle that is measured and the position of the electrodes. If it is set too high, OpenEMG will be very sensitive and output either 0 or 5V. If it is set too low, muscle contractions may not be properly picked up.

For instance, this video shows a basic sketch that turns a servomotor based on the strength of the contraction (old THT version of the board).


The graph in the top right corner displays the output waveform of the board as it is read from the Arduino nano.

The corresponding Arduino code is the following:

#include <Servo.h>
Servo myServo = Servo(2);
void setup(){
    myServo.attach();
}
void loop(){
    myServo.write(map(analogRead(A0),0,1023,0,180));
    delay(50);
}

The circuit

OpenEMG's circuit is designed to be as simple to make as possible. This is the complete circuit diagram (click on image to view in full-screen):

Full OpenEMG circuit diagram

There are 5 parts to this circuit:

  1. The ICL7660 generates a -5V rail for the operationnal amplifiers;
  2. The first OP-amp (U1B) is a classic differential amplifier configuration;
  3. The next two OP-amps (U1A and U1D) are a second order bandpass filter with a gain of 2.5 and a frequency range of 20 Hz to 500 Hz;
  4. The last OP-amp (U1C) is an amplifier with a tunable gain from 50 to 150;
  5. Finally, D1 rectifies and C9 smoothes the signal to make it readable by a micro-controller.

The LM324 chip can be replaced with any pin-compatible quad OP-amp, such as the TL084.

Note: the C9 capacitor makes the output more micro-controller friendly. It can be removed to obtain the raw signal.

The PCB files

In these archives, you will find:

  • The KiCad circuit design files;
  • The bill of material (BOM);
  • The Gerber files for manufacturing.

I designed two versions of the PCB:

  • A standard through-hole version;
  • A more compact surface mount version.

Both version are functionnally identical.

Surface-mount (SMD) version

The surface mount (SMD) version is compact and suitable for professionnal PCB manufacturing.

PCB (SMD version)

It is 32mm×26mm, using 0805 components (fairly easy to hand-solder). I ordered panels of it on JLCPCB.

Interactive view

Download SMD version

Through-hole (THT) version

As an alternative, the through-hole (THT) version is designed to be very easy to make with DIY tools: it is a single layer board with large clearances and wide tracks.

PCB (THT version)

It is 47mm×35mm. See my article on homemade PCB manufacturing.

Interactive view

Download THT version

Safety warning: It is recommanded that the power supply of the Arduino is not connected to the wall outlet. Although it is extremely unlikely, a faulty power adapter could technically have its output connected to the live wire!

Bonus - ECG with OpenEMG

Although OpenEMG is designed for electromyography, I tried placing the electrodes near the heart (positions V3 and V4). I removed the C9 smoothing cap to get the raw capture. This graph is the result:

PCB (THT version)

We can clearly see 3 pulses per cycle, separated by 850ms (70 BPM).

Author: Charles Grassin


What is on your mind?

  • #1 student

    you did a really great.
    this is exactly what i was looking for.
    thank you

    on March 16 2019, 17:04

  • #2 Magansomaa

    Amazing low cost and best for choosing lm324 its very famous and easly available

    on August 5 2019, 17:24

  • #3 Magansoma

    Amazing low cost and best for choosing lm324 its very famous and easly available we have also done some cool work here and wiling to do emg also

    on August 5 2019, 17:27

  • #4 Magansoma

    Thanks a lot for sharing your precious work ! Love it !

    on August 5 2019, 17:30

  • #5 fanton

    Doesnt work, whats problems can be?

    on October 5 2019, 16:10

  • #6 Paul

    Une amélioration serait les électrodes actives (sèches métalliques) qui nécessitent 2 amplis op suiveurs adaptateurs d'impédance.
    Pour l'alimentation , un étage avec le lm324 serait suffisant.
    Les filtres ne sont pas utiles. Un seul tnotchfilter a ampli op serait suffisant. Le reste serait fait par soft.Ce qui fait 4 ampli op .
    Pour l'amplification principale un ampli instrumentation style INXXX est suffisant et mieux car plus précis et demandant moins de composants annexes.
    On reste à 2 CIs, un quadri ampli Op et un ampli d'instrumentation.

    on October 21 2019, 11:58

  • #7 Paul

    Une amélioration serait les électrodes actives (sèches métalliques) qui nécessitent 2 amplis op suiveurs adaptateurs d'impédance.
    Pour l'alimentation , un étage avec le lm324 serait suffisant.
    Les filtres ne sont pas utiles. Un seul tnotchfilter a ampli op serait suffisant. Le reste serait fait par soft.Ce qui fait 4 ampli op .
    Pour l'amplification principale un ampli instrumentation style INXXX est suffisant et mieux car plus précis et demandant moins de composants annexes.
    On reste à 2 CIs, un quadri ampli Op et un ampli d'instrumentation.

    on October 21 2019, 11:58

  • #8 Paul92

    Une amélioration serait les électrodes actives (sèches métalliques) qui nécessitent 2 amplis op suiveurs adaptateurs d'impédance.
    Pour l'alimentation , un étage avec le lm324 serait suffisant.
    Les filtres ne sont pas utiles. Un seul tnotchfilter a ampli op serait suffisant. Le reste serait fait par soft.Ce qui fait 4 ampli op .
    Pour l'amplification principale un ampli instrumentation style INXXX est suffisant et mieux car plus précis et demandant moins de composants annexes.
    On reste à 2 CIs, un quadri ampli Op et un ampli d'instrumentation.

    on October 21 2019, 11:59

  • #9 Paul

    Une amélioration serait les électrodes actives (séches) qui nécessitent 2 amplis op suiveurs adaptateurs d'impédance.
    Pour l'alimentation , un étage avec le lm324 serait suffisant.
    Les filtres ne sont pas utiles. Un seul tnotchfilter a ampli op serait suffisant. Le reste serait fait par soft.Ce qui fait 4 ampli op . Pour l'amplification principale un ampli instrumentation style INXXX est suffisant et mieux car plus précis et demandant moins de composants annexes. On reste à 2 CIs, un quadri ampli Op et un ampli d'instrumentation.

    on October 21 2019, 12:09

  Back to projects

Related articles