Close
0%
0%

uMyo - wearable EMG sensor with wet/dry electrodes

EMG sensors for controlling devices and PC with muscle commands

Similar projects worth following
uMyo is a single channel wearable EMG sensor with wireless data transmission. Multiple sensors can be connected to one receiver.
uMyo is a flexible EMG system allowing to pick up signals from different muscles - and not only from arms, but also legs, torso or even face.
It is certified open source hardware (https://certification.oshwa.org/ua000003.html)

Main features of uMyo are:
- It's wireless! No more mess of wires when working with EMG
- Works with any Arduino via nRF24 radio module (you can use our Arduino library)
- Works with ESP32 with no extra hardware (we also wrote an Arduino library)
- Multiple units (up to 12 in current version) can send data to the same Arduino/ESP32
- Sends out detected muscle activity level, 4-bins spectrum; and raw EMG data (in nRF24 mode)
- Can be used with a bracelet and dry electrodes, or with gel electrodes via soldered connector

Join our Discord where we discuss uMyo and other open source projects https://discord.gg/dEmCPBzv9G

The project was started spontaneously in November 2021 - it was more of an idea that was interesting to implement. But from January to February we had no time to work on it, and then the war began in Ukraine... And only in May we returned back to this project and decided to finalize it.

Initially, we did not think much about the way it will be attached to a hand, so we used 6mm textile button connectors but they were rather useless without some matching fabric electrodes. Yet at the same time they inspired us to try dry metal contact - an option that never worked well enough before so we didn’t consider it here initially. Also, the design of the board had several mistakes and missed an important property of the front-end amplifier we used there, and fixing that involved quite extreme soldering with 3 SMD components forming a filtering network not present in design.

In this design we decided to drop external ADC and use nRF52 in-built ADC - which turned out to be not that bad, but only after proper signal amplification. We added AD8293 fixed-gain zero-drift input amplifier, seduced by its low price - although its input properties are far from stellar, so we weren’t sure if it would work well enough. Turns out, it works, more or less - but tends to saturate the signal to upper or lower rail due to its high bias current. Well, you should fight fire with fire - we added a heavily filtered PWM with 10M resistor that adds bias current on itself - and PWM width is dynamically adjusted to keep the amplifier’s output between the rails. That sounds quite fishy - but the result is not only usable, it turns out to be quite good!

Now, in parallel with the firmware, we are working on changing the design of the board and purchasing the necessary additional elements. Therefore, follow the logs - it will be interesting soon!

  • Mouse emulation with muscle commands

    Ultimate Robotics05/30/2023 at 18:16 0 comments

    Making a convenient - or at least usable - input device proven to be much more difficult than it seems. PC interface is seriously optimized for mouse properties, assuming that a mouse can be moved easily over a few pixels. When a gyroscope is used to track uMyo orientation, translating its data alone into cursor placement is not convenient - with such approach you must keep your hand in the same orientation with high precision and try to click with muscle effort without moving a hand even a tiny bit.

    We approached this problem by using 2 uMyo sensors: while one muscle is active, mouse cursor follows hand motion (and scroll is produced when arm rotates). When another becomes active, mouse click is generated. With this approach, mouse can be controlled from much more relaxed hand position and precise clicks become much simpler/

  • Another step towards our goal: prosthetic arm control demo

    Ultimate Robotics05/14/2023 at 15:00 0 comments

    The next step in uMyo development is combining data from multiple sensors. And since a significant part of our goal is using uMyo in prosthetics control - this demo shows how it can work.

    In a sense it's a remake of our effort from 2019 based on uECG sensors in EMG role, but seriously upgraded - both in reliability and in simplicity of replication. Now it works basically out of the box - only thresholds need adjustment for a particular person. This particular demo took about 8 hours in total - that includes coding, adjusting and making the video (we used the same robotic arm as in 2019 - making one from scratch of course would take much longer).

    Three uMyo units are used here: two next to the elbow, placed over muscles controlling 3rd, 4th and 5th fingers (one unit is monitoring 3rd finger, another monitoring 4th and 5th without differentiating between the two). The third uMyo is placed on a wrist to pick up thumb motion. That part is good for demo only - in case of amputation, prosthetic's thumb must be controlled with some other muscle. We tested several variants on the arm - even attached thumb control to a triceps - but none are both reliable and illustrative at the same time, so we stuck with the wrist placement for a demo.

    Signal processing is intentionally very simple - only thresholding, scaling and averaging - with the goal to make it easy to understand and adjust. For practical applications much better results can be obtained with machine learning - which we'll show in further work.

    Control quality is quite good - the only noticeable problem here is cross-sensitivity between 3rd and 4th fingers, not huge but it takes some effort to apply just enough force to trigger one finger motion without triggering another. Response time is very good - basically limited only with servo speed, servo motion starts immediately when the effort is applied.

    We believe with some ML and possibly more sensors involved, this can be applied in practice without significant additional work on the hardware.

  • uMyo is back in stock! + new PCB update

    Ultimate Robotics04/10/2023 at 16:29 0 comments

    Hello everyone! Last week, we reopened uMyo sales - it's back in stock with a new version, v3! 

    It's actually been available since April 5, but we were so busy with our workload we kept postponing to write the posts. So, a week later, here it is at our Tindie store - run, do not walk, and get your uMyo today! 

    Just joking - but definitely do go check it out :)

    We made some changes in the new version, including a new board shape, a separate charger board and a CR2032 battery holder so you can start working with uMyo even if you don't have a lipo battery. There are also hardware changes with the components, some new firmware functions, and general improvements.

    Changelog for v3:

    • changed board design for more dense placement and easier connection of multiple units, it's now smaller - 28*47*7 mm vs 32*49*7 mm for previous version (2.1)
    • added on-board compass in addition to IMU in v2.1. Orientation tracking now has no drift!
    • moved on-board charger to a separate charging board (included in kits), reducing uMyo size and weight
    • changed chip to nRF52832 instead of nRF52810 (due to chips availability)
    • added CR2032 operation mode with LED turned off to minimize power consumption, single battery can provide ~3 hours of operation for one uMyo

    Our team will have some more updates for you in the coming months, so keep an eye out and stay safe, everyone!

  • Tetris on a LED board - controlled with uMyo

    Olya Gry03/19/2023 at 21:47 0 comments

    Our new demo project using one uMyo, this time it's Tetris! 

    We used LEDs from a previous LED clothing project and made a square. First, we implemented the game itself, and then added control using an EMG signal from the muscles of the arm and its position in space. 

    That's what came out of it:


    Project details and files can be found here!

  • New light patterns for LED clothes

    Olya Gry12/16/2022 at 15:50 0 comments

    We decided all the same to use more muscle control capabilities with the help of uMyo.

    The code and control details can be found here: https://www.hackster.io/frogolina/led-clothes-controlled-by-emg-d487da

    And here is the result:

  • LED clothes controlled by uMyo

    Olya Gry11/30/2022 at 13:31 0 comments

    When we started making uMyo, one of the concepts was relative ease of use, for a wider range of possibilities. Because EMG is often perceived as something medical, prostheses, rehabilitation. We wanted to add more variety and application possibilities for our future devices. 

    Toward the end of development, we began to try to create small projects to demonstrate the possibilities of muscle control. One of the unexpected directions was this project - smart clothes. The idea of   the project is to change the LED patterns that are right on your clothes with the help of hand movements! 

    The implementation is very simple, it is described in more detail here

    And here is the result: 

    In the future, I want to expand the functionality of movements and use triangles. So stay tuned for updates!

  • uMyo is officially on sale

    Ultimate Robotics11/26/2022 at 08:13 0 comments

    We have launched uMyo sales! 

    It actually happened a few days ago - we submitted the product on Tindie, it got approved, we started writing posts about sales launch, first orders started coming in... and then we got hit with massive air strikes targeting infrastructure, which caused country-wide blackouts. You probably already read about that in the news. 

    Because of that, we didn't have internet (or stuff like running water for some time, although it came back after a day or so). But electricity was harder to restore, mostly because this time nuclear plants turned off and needed some effort to bring them back on. They produce a lot of energy, a major chunk of the total power supply in Ukraine. It also didn't help that russians stole all solar panels and equipment from our Tokmak solar power plant in the south... Why can't they ever buy their own stuff? Eventually power came back for a few hours a day for some of the city areas, but a part of our team didn't have electricity for exactly 61 hours and 16 minutes... During this time, they were mostly only able to charge devices in the city and check the restoration effort updates when the mobile networks were not overloaded.

    Blackout looks like this. This is taken at rush hour at a busy intersection near several large shopping malls.

    Anyway, the light came back a few hours ago, so we're writing this project log. 

    We're very happy to finally launch uMyo. It's the first batch, and there will be more versions and updates in the future, but it's finally tangible and available for everybody to use in their EMG projects. 

    You can check it out and buy here in our Tindie shop

    We'll be shipping the first orders soon - most probably by Monday. We'll also update the instructions so you can have more details about uMyo and how to use it. The power will probably come on and off, so we'll be working around that.

    Most of all, we're very excited to get the first uMyos to our buyers, get feedback - and start working on new features and updates! (and, of course, bugfixes :)

  • The fifth challenge is disposable electrodes

    Olya Gry11/10/2022 at 20:31 0 comments

    According to our observations, existing EMG sensors often use disposable electrodes to receive a signal. We initially began to look for an alternative to them, and as you can see from past logs, we found it.  

    But when we already debugged uMyo using dry connectors, it became interesting what kind of signal quality a gel electrode would give for comparison. And while we were looking for a way to check this, the idea came to make the possibility of a combined use, a kind of device with a hybrid attachment method. Because gel electrodes are still the classic way to receive a signal and perhaps some people will want to use it, and not the dry ones.  

    To begin with, we had a hard time finding metal buttons of the right diameter for the 3.9 mm connector of standard medical electrodes. After, we tried to solder them to uMyo. It turned out to be easier than soldering the connectors to the uECG... 

    Also, the distance between the connectors on the board is about 34 mm, so the diameter of the electrodes should be no more than 30 mm.  It wasn't easy, but we found 20x20mm square baby electrodes and used them for testing.  

    Then we tested them - basically just attaching it to a hand over a particular muscle. Results turned out to be great - it was practically immune to noise and able to pick signal from a muscle that controls particular finger, while other fingers movement produced barely visible response.

    Let's summarize - uMyo can now be used in two ways, depending on the required signal quality. Dry electrodes are quite suitable for all purposes - yet when high precision is necessary gel electrodes outperforms them, to the point that they can be used on muscles not functioning properly like in rehabilitation.

  • The fourth challenge is the design of the bracelet vol 2

    Olya Gry11/06/2022 at 21:35 0 comments

    Initially, the conceptual design of uMyo, as a device, was in a simple modular assembly, not only for the user, but also for us. Therefore, I wanted to find existing bracelets - if there are chest belts for pulse trackers, maybe there is something for our case too.

    After a long search, it turned out that wrist bracelets for fitness trackers also exist! They are used for a certain category of devices, but the very concept of fastening was also suitable for uMyo. Yet in order to check how well these bracelets actually fit our case, we had to wait for their delivery for about a month ...

    Therefore, I made the first prototypes of bracelets from the previous log, for testing and improving the firmware. In any case, the bracelets we were waiting for would be either hit or miss so it couldn't be out only plan.

    When we had already forgotten about these bracelets and were thinking about finding a seamstress, we received a notification about the delivery of the package. We had the bracelets and... they exceeded our expectations! Their texture, design, functionality suited us perfectly!

    But in order to decide on the right variant, we ordered another batch of different sizes and colors.

    After the whole team tried on bracelets for different hand sizes we chose the optimal lengths, and selected colors that suited our PCBs.

    In the meantime, the prototype boards of the second version arrived. The black "cocoon" of uMyo's first prototype has turned into a beautiful orange butterfly!

    And the first tests of the new board and bracelet can be seen on the video!

  • The third challenge is board design 

    Olya Gry11/03/2022 at 18:48 0 comments

    As I said in the first project log - to mount the first uMyo prototype, we printed the case on a 3D printer. But it was a temporary solution... 

    We had to come up with a bracelet connected directly to the board, otherwise the uMyo manufacturing process would become unnecessarily complicated. Therefore, we had to change the design of the board... 

    To find the ideal shape, I drew several sketches... 

    Dmytro implemented one of them in the form of a new board design. uMyo looks like a butterfly now, but will it be durable and functional enough to use?  

    This we had to find out after the production of a trial batch. But not only that!

View all 13 project logs

  • 1
    Getting started with uMyo

    uMyo is a fairly versatile device, so we designed it so that some users do not spend money on additional components or can purchase them in any online store (or local) if necessary.

    We have created a Discord Chat for additional support or feedback, join us!

    What components are we talking about?

    1. Battery. You can solder any lipo battery to uMyo, but you can also plug in any battery with a 2-pin 2mm JST-PH connector. Links to some suitable batteries are below:

    https://www.adafruit.com/product/1570 - this one is from Adafruit and can be ordered quickly if you're in the US.

    https://www.aliexpress.com/item/32617056181.html?spm=a2g0o.productlist.0.0.4fc075e1xbrbGy&algo_pvid=9b750b75-f41e-4ea3-80dd-f674e1b0e7e6&algo_exp_id=9b750b75-f41e-4ea3-80dd-f674e1b0e7e6-25&pdp_ext_f=%7B - this one is from AliExpress and will take more time to arrive if you order. There are several options: you need the '2 line 2mm' option. If you order, make sure the red and black wires match the + and - of the JST connector on uMyo.

    2. Arduino: uMyo can be used with any Arduino via nRF24 radio module.

    3. ESP32: uMyo can be used directly with ESP32 BLE radio, with no additional hardware required

    If you still have questions, feel free to email us hi@ultimaterobotics.com.ua

  • 2
    Power on/off

    1. Before turning on, you need to attach the battery to the uMyo:

    • You can use a battery with a JST connector cable (links to suitable ones can be found above);
    • You can also solder any lipo battery directly to BAT+ and BAT- pads on uMyo;
    • Always use only one battery for all connected uMyo devices;
    • After plugging the battery, it's ready for use;
    • Charging the battery: you can plug a USB-C cable into any uMyo connected to the battery to charge it, even if it's one of several uMyos connected together.

    2. Press button to turn uMyo on;

    3. You should see several LED blinks: - red-red-green, blue, then it will blink 3 times indicating current radio mode:

    • pink - nRF24 mode
    • blue - BLE mode
    • green - PC station mode

    4. Turning off: hold button for more than 2 seconds. LED will switch from blue to red, release the button -> uMyo stays off.

    See video instruction for more details:

  • 3
    Using uMyo with bracelet and dry connectors

    1. First you need to attach dry connectors to uMyo. The board has two holes for attaching connectors (see the figure above) - a cross-shaped screw is inserted on the side of the components, and a bolt with a flat head is screwed into it on the back side, flat surface contacts the skin.

    2. Pass through the "ear" (see picture above) one end of the bracelet and fix it with Velcro. Pass the second edge of the bracelet through the second "ear".

    3. Put the bracelet in this form on your hand and find the necessary muscle position by alternately squeezing your fingers or fist.

    4. After determining the required active muscle, place the uMyo connectors on it and tighten the bracelet so that it sits tightly, fix the selected position with Velcro (which is located on the second end of the bracelet).

    5. After placing it is necessary to check whether the position is optimal by repeated contraction of the selected muscle. The Muscle Activity LED (see picture above) should glow brighter with each contraction. This way you will know that the device captures your movements.

    See video instruction for more details:

View all 8 instructions

Enjoy this project?

Share

Discussions

Rene van Ee wrote 05/30/2023 at 19:07 point

Hats off to you for this project! I'm amazed by the prosthetic arm demo, given the very simple setup you describe. I don't think you're right in stating that each sensor can only detect one muscle's signal, though. It is possible to distinguish MUAPs from multiple muscles using surface EMG, although the decomposition algorithms required may be hard to implement on reatively low-powered hardware. ML may help, but could be sensitive to precise sensor placement, and to muscle movement relative to the skin. Anyway, keep up the good work!

  Are you sure? yes | no

the_3d6 wrote 05/31/2023 at 00:27 point

Thanks! :) You are right that some significant ML is necessary to extract more data here - and to compensate effects of muscles moving vs the skin, especially when arm rotates. With 3 sensors placed over large muscles it's less of a problem, but for more sensors placed more densely it becomes a major issue (tested that a bit and with simple processing, 4 sensors placed next to each other are only marginally better than 2 - I bet a proper ML model would extract much more useful data). I wish we had more time to work on this part, the war makes it somewhat difficult - but that's definitely in our plans!

  Are you sure? yes | no

msuicc wrote 01/08/2023 at 17:20 point

It looks like this device doesn't have a ground electrode. Is it not neccessary?

  Are you sure? yes | no

Ultimate Robotics wrote 01/08/2023 at 20:02 point

Yes, it doesn't - it's much simpler to get clean signal with ground electrode, but it also makes it much more inconvenient to wear. So we put some effort into it and got clean enough results without ground electrode (there is very high 50/60 Hz noise on the ADC input, but it can be partially filtered out, partially ignored since most relevant EMG part is in 150+ Hz area)

  Are you sure? yes | no

msuicc wrote 01/09/2023 at 12:25 point

Isn't the most relevant EMG part between 50-150 Hz? I've read that most of the signal energy is between that range so it's quite hard to deal with the power line noise.

  Are you sure? yes | no

Ultimate Robotics wrote 01/09/2023 at 12:57 point

It somewhat depends on applied effort (the higher the effort, the higher is median frequency) - but even for minimal activity there is a significant energy in 200+ Hz range. You can check this video: https://www.youtube.com/watch?v=OStowb1K4vU - I'm applying barely visible effort to 2 different fingers, and spectrogram from 2 uMyo devices produces very clear response in upper frequency bins.
Each spectrogram has 4 bins obtained from ~1100 Hz stream using 8-point FFT, so first bin represents DC component, 2nd bin - frequencies in 0-180 Hz range, 3rd in 180-360 and 4th in 360+ Hz range. When even such a small effort is applied, 3rd bin level clearly increases - and 4th bin also gets noticeable increase.

While a lot of energy is below 180 Hz, there is still enough in 180+ range - and detecting that part is much simpler due to absence of 50/60 noise and its harmonics (only 3rd+ harmonics gets there - and they are small enough)

  Are you sure? yes | no

Alan Jousting wrote 12/24/2022 at 13:20 point

Can the uMyo transmit data on more than one muscle group at different times. For example, could the uMyo transmit data on the thumb’s muscle group when the thumb is moved, and then transmit data on the ring finger’s muscle group when the ring finger is moved?

  Are you sure? yes | no

Ultimate Robotics wrote 12/27/2022 at 22:37 point

Single uMyo device is physically placed in a fixed place - so it can read only muscle group over which it is located. For such functionality you need more than one device - but data from multiple devices can be received on a single Arduino or ESP32 (they all stream in parallel, we tested up to 4 devices and there are next to no packet overlaps, and overall up to 12 should be still usable - although we hadn't tested that much yet)

  Are you sure? yes | no

James Kissel wrote 12/15/2022 at 00:53 point

7ms spectral shots appears to be the best solution.  The reading of the IMU is a very low overhead.  Is there a wired method of access of the spectral shots?  I2C preferred but I could change to SPI if required.

  Are you sure? yes | no

Ultimate Robotics wrote 12/15/2022 at 02:08 point

No, any wired connection would introduce a (relatively) huge noise, decreasing sensitivity at least 10x - or more likely 100x times, so we don't even have a wired connector there. We have ADC resolution of ~2 uV (and typical noise of ~10 uV). The only way to reach that was to make it completely isolated - it uses on-board battery and radio channel to transmit data.

In terms of programming complexity, it's very simple: we made an Arduino IDE library which handles everything - you just need to add ~10 lines of code from an included example. The only restriction is that radio handler function must be called at least once in 5 ms (preferably once per 2-3 ms) - even though it will work if it's called less often, that would definitely lead to lost packets

  Are you sure? yes | no

James Kissel wrote 12/14/2022 at 22:42 point

I need to determine in time, when a tremor signal is transmitted to one of the forearm muscles and plot that time vs the semi-sinusoidal movement of the forearm as measured by a IMU gyroscope.  The movement is the  Pronation-Supination movement of the forearm.

Any help you could provide  in regards to using the uMyo for my project would be greatly appreciated.

  Are you sure? yes | no

Ultimate Robotics wrote 12/15/2022 at 00:39 point

In fact we have a tool (initially created for uEMG development, then adapted for uMyo) which we can configure to plot (and record) exactly these data - but it's Linux only, porting it to other platforms would be unreasonably complicated. If you are willing to try it, we can make a build tailored for your task (this tool is meant to be open source as well - at the moment its code is in quite terrible state so it's not published yet, but its time will come soon)

If you will use uMyo in combination with PC base (also available on Tindie) - then it can stream full set of data (raw EMG at 1100 Hz, 7 ms spectral shots and IMU data at 140 Hz) - the main advantage here is that EMG and IMU data would be always synchronized by design.

Alternatively, you can connect uMyo to your current system via nRF24 module: it has the same data rate (but with some lost packets). ESP32 BLE mode won't work for this purpose, packet rate is only ~30 Hz there (so no raw data are sent, only spectral shots).
In this case you can plot/record high part of calculated spectrum directly. That may be simpler to implement - and if IMU processing doesn't take much time, it also will be in good sync with IMU data

  Are you sure? yes | no

Similar Projects

Does this project spark your interest?

Become a member to follow this project and never miss any updates