- Hanna Nowak
- Mikołaj Pocheć
This project aims to utilize technology of electrode-based muscle contraction detection to form a basic form of communication with partially paralyzed people.
The project was built with:
- Arduino Uno,
- EMG analogue sensor (SEN0240) with amplifier,
- servomechanism,
- LED diode.
In general, detecting muscle contraction involves placing three electrodes (MID, END and REF) in specific places. As name suggests, MID electrode should be placed in the middle of muscle of interest, END electrode is placed in direction of the muscle and REF (reference) electrode placement depends on specific muscle, but most often it is placed somewhere else than the muscle.
A device that implements the description above is e.g. DFRobot Gravity analogue EMG sensor shown below: Three of the electrodes are placed in the direction of a muscle. The complete circuit is shown below.
The gathered signal is rather noisy and not very useful, therefore manufacturer shared a simple library for data filtering and some examplary programs (which were in fact used in this project).
The original code mentioned above requires adjusting threshold manually (by editing code). As it is not very comfortable, we implemented an automatic calibration activated by pressing a button. A simple algorithm of setting a threshold to ~80% of the maximum value of a 10 second signal sample works very well for our applications.
An useful feature of a circuit above is a LED diode signalizing calibration process.
At the current stage, we managed to implement gesture detection (gesture means contraction of corresponding muscle) and it works suprisingly well. If placed in the right spot, the device is able to differentiate between an intentional muscle contraction and false-positives. Implemented automatic calibration not only allows to use the device at different muscles and by different people, but also allows to detect a strenght of later detected gestures.
The processed signal looks like this:
Gesture detection is based on setting (in our case - by an automatic calibration) some threshold. Signal below that point is just cut off. Function getEMGCount
is responsible for deciding whether detected signal can be indeed considered a muscle contraction.
To suggest possible usage of our project, we added a support for servomechanism.
The idea is that for each successful gesture detection, servomechanism rotates by a constant angle, (e.g.
Unfortunately, our project is not perfect. This fact is directly tied to the used technology. The EMG sensor we use is a rather simple device and it is not as reliable, as we imagine it for a real usage.
Therefore, the next step could be to build sensor with reusable electrodes (they could be placed on a tightening strap) ourselves. This could be much cheaper and allow us to use multiple detection devices to establish more advanced forms of communication or even to control more complex devices than servomechanism used here. We think that five of such devices could be enough to build a simple artifitial hand for example.
https://codeload.github.com/yuyouliang/EMG_Filter/zip/master https://wiki.dfrobot.com/Analog_EMG_Sensor_by_OYMotion_SKU_SEN0240