Sensor Report: Muscle sensor
MyoWare Muscle Sensor
Description
Using our muscles to control things is the way that most of us are accustomed to doing it. We push buttons, pull levers, move joysticks… but what if we could take the buttons, levers and joysticks out of the equation? This is the MyoWare Muscle Sensor, an Arduino-powered, all-in-one electromyography (EMG) sensor from Advancer Technologies. The MyoWare board acts by measuring the filtered and rectified electrical activity of a muscle; outputting 0-Vs Volts depending the amount of activity in the selected muscle, where Vs signifies the voltage of the power source. It’s that easy: stick on a few electrodes (not included), read the voltage out and flex some muscles!
MyoWare Muscle sensor purchase link
https://www.sparkfun.com/products/13723#documents-tab
Biomedical sensor purchase link
https://www.sparkfun.com/products/12969
Tangibility
Measuring muscle activity by detecting its electric potential, referred to as electromyography (EMG), has traditionally been used for medical research. However, with the advent of ever shrinking yet more powerful microcontrollers and integrated circuits, EMG circuits and sensors have found their way into all kinds of control systems. In a traditional manner, it may not be categorized as a tangible control, but it's still physical, needs contact with human muscle, and only triggers based on voluntary muscle activity.
The sensor may not allow you to get a tactile feedback, (Unless you intend to design one by using moving electronic devices like electrical diaphragm, vibrating motor, or knocker/piston attached to a motor to give tactile feedback based on muscle readings) but the sensor most certainly affords you to have some control (not as obvious as using buttons) over actions you intend to have based on muscle activity readings. This feature is currently very useful in the prosthetic industry. People who unfortunately have lost parts of their limbs, like fingers or hand, still have functioning muscles. These muscles movements can be mapped and used as tangible control points for a robotic arm, using this sensor.
Applications
This sensor is relatively new to the 'wearables' market, hence the current applications are very few. As the sensor technology gets better over time, there might be a few new applications that it might have, like the MYO band https://www.myo.com/ where multiple muscle sensors work together to track user's hand accurate gestures.
Possible fields where it could be used as a wearable controller or trigger
- AR/VR
- Media devices
- Drone
- Robotics
- Music
- Exercise / Posture correction tool
- Medical therapy tool
- Augmentation
- Prosthetics
Examples
- https://www.youtube.com/watch?v=oEx5lmbCKtY
- http://www.instructables.com/id/Bionic-Wolverine-Claws/
- https://www.youtube.com/watch?v=fGW2DPFdMgE
Strengths
- New possibilities for prototyping unobtrusive wearable controlling (without the need to hold a controller)
- Fairly accurate muscle activity readings and can be programmed or modified for higher precision in muscle activity readings.
Weaknesses
- Expensive about $40 usd, and may need to buy more components like Biomedical sensor pads $8 for a 10pack, Power shield $4.
- Sensor still not compact and precise enough to be used as a serious tool.
- Not as reliable as tactile controls, needs some practice and training to get used to.
- Uncomfortable to wear
- Requires preparation time for use
Data sheet
The MyoWare Muscle Sensor is the latest revision of the Muscle Sensor of old, now with a new wearable design that allows you to attach biomedical sensor pads directly to the board itself getting rid of those pesky cables. This new board also includes a slew of other new features including, single-supply voltage of +3.1V to +5V, RAW EMG output, polarity protected power pins, indicator LEDs, and (finally) an On/Off switch. Additionally, we have developed a few shields (Cable, Power, and Proto) that can attach to the Myoware Muscle Sensor to help increase its versatility and functionality!
https://cdn.sparkfun.com/datasheets/Sensors/Biometric/MyowareUserManualAT-04-001.pdf
Supply Voltage: Min: +2.9V, Typ: +3.3V or +5V, Max: +5.7V
Adjustable Gain potentiometer: Min: 0.01ohm, Typ: 50ohm, Max: 100ohm
Output Signal Voltage
EMG Envelope: Min 0V, Max +Vs
Raw EMG (Centered about +Vs/2): Min: 0V, Max +Vs
Input Impedance: 110Gohm
Supply Current: Typ 9mA, Max 14 mA
Common Mode Rejection Ratio (CMRR): 110
Input Bias: 1pA
Dimensions: 52.3 mm x 20.7 mm
Assembly
Using 3 biomedical sensor pads, the embedded electrode connectors allow you to stick the board right to the target muscle and avoid the hassle of wires. All you need to do is find the target muscle, attach biomedical sensor pad stickers to the electrodes on the sensor board and then stick it on top of the muscle.
The muscle area needs to have less skin fat, in order to get most out of the readings. Also shaving the area of contact is recommended as the glue might rip out hairduring removal.
Possible points for Myoware muscle activity readings. (Marked in Blue)
Example:
This example shows how to connect the muscle sensor to get analog readings, blink LED and even activate a servo based on the readings.
Materials used: Arduino UNO, Servo motor, 9V battery, Myoware sensor, Biomedical sensor pads, USB A-B cable, Computer with Arduino IDE.
Circuit
Code
(Arduino UNO)
#include <Servo.h> Servo myservo; int sensorPin = A1; // select the input pin for the sensor pin int ledPin = 13; // select the pin for the LED int sensorValue = 0; // variable to store the value coming from the sensor const int threshValue = 100; // used for motor control void setup() { // declare the ledPin as an OUTPUT: pinMode(ledPin, OUTPUT); Serial.begin(9600); myservo.attach(9); } void loop() { // read the value from the sensor: sensorValue = analogRead(sensorPin); // turn the ledPin on digitalWrite(ledPin, HIGH); // stop the program for <sensorValue> milliseconds: delay(sensorValue); // turn the ledPin off: digitalWrite(ledPin, LOW); // stop the program for for <sensorValue> milliseconds: delay(sensorValue); Serial.println(sensorValue); //servo control if(sensorValue < threshValue) { myservo.writeMicroseconds(800); } else { myservo.writeMicroseconds(2250); } }
Citations
The data sheet is copyright of Sparkfun and MyoWare. They have done an amazing job at documenting all the possible information and uses of the sensor, more information on their other products is available on their website here.
Circuit drawing was made with Fritzing and modified in Photoshop.
Example code was written by Nitish Wakalkar, derived from sample code available on Sparkfun and Arduino.
Useful links
https://www.sparkfun.com/products/13723#documents-tab
https://cdn.sparkfun.com/datasheets/Sensors/Biometric/MyowareUserManualAT-04-001.pdf
http://www.advancertechnologies.com/2013/03/diy-conductive-fabric-electrodes.html
https://github.com/AdvancerTechnologies/MyoWare_MuscleSensor
https://www.youtube.com/watch?v=PU1niI2qw1U
https://www.youtube.com/watch?v=Nj3bfRxshQA