Ce détecteur EMG (électromyogramme) compatible Grove permet de mesurer les courants électriques qui accompagnent l'activité musculaire et d'interfacer cette activité musculaire avec une carte Arduino.
En mode stand-by, la tension de sortie est 1,5 Vcc. Lorsque que le muscle est activé, la tension augmente pour atteindre 3,3 Vcc maximum. Livré avec 6 électrodes.
Ce module se raccorde sur une entrée analogique du Grove Base Shield ou du Mega Shield via un câble 4 conducteurs inclus.
Cette démonstration vous montrera comment utiliser Grove - LCD RGB Backlight, nous avons besoin d'un Seeeduino V3.0 , d'une Grove - LED Bar et d'un Grove - Base Shield .
Vous pouvez télécharger le code de démonstration dans github, cliquez ici , puis extrayez-le n'importe où.
Téléchargez ensuite le code sur Seeeduino ou arduino.
// Grove - EMG Sensor demo code // This demo will need a Grove - Led Bar to show the motion // Grove - EMG Sensor connect to A0 // Grove - LED Bar connect to D8, D9 // note: it'll take about serval seconds to detect static analog value // when you should hold your muscle static. You will see led bar from level 10 turn to // level 0, it means static analog value get ok #include <LED_Bar.h> LED_Bar bar(9, 8); int max_analog_dta = 300; // max analog data int min_analog_dta = 100; // min analog data int static_analog_dta = 0; // static analog data // get analog value int getAnalog(int pin) { long sum = 0; for(int i=0; i<32; i++) { sum += analogRead(pin); } int dta = sum>>5; max_analog_dta = dta>max_analog_dta ? dta : max_analog_dta; // if max data min_analog_dta = min_analog_dta>dta ? dta : min_analog_dta; // if min data return sum>>5; } void setup() { Serial.begin(115200); long sum = 0; for(int i=0; i<=10; i++) { for(int j=0; j<100; j++) { sum += getAnalog(A0); delay(1); } bar.setLevel(10-i); } sum /= 1100; static_analog_dta = sum; Serial.print("static_analog_dta = "); Serial.println(static_analog_dta); } int level = 5; int level_buf = 5; void loop() { int val = getAnalog(A0); // get Analog value int level2; if(val>static_analog_dta) // larger than static_analog_dta { level2 = 5 + map(val, static_analog_dta, max_analog_dta, 0, 5); } else { level2 = 5 - map(val, min_analog_dta, static_analog_dta, 0, 5); } // to smooth the change of led bar if(level2 > level) { level++; } else if(level2 < level) { level--; } if(level != level_buf) { level_buf = level; bar.setLevel(level); } delay(10); }
Une fois le téléchargement du code de démonstration terminé, l'initialisation prendra environ 5 secondes. Vous devez rester statique lors de l'initialisation.
Vous pouvez voir que lors de l'initialisation, le Led Bar passera du niveau 10 au niveau 0. Lorsque Led Bar All est éteint, vous pouvez maintenant vous déplacer.
Lorsque vous vous déplacez, vous pouvez constater que le niveau de Led Bar va changer.
void setup() { Serial.begin(9600); } void loop() { Serial.println(analogRead(A0)); }
Nous voulons observer les changements dans le signal de sortie analogique du module lorsque le muscle du bras se dilate et se contracte. Pour ce faire, ouvrez le traceur série et voyez le signal de sortie.
L'image ci-dessous montre les valeurs de sortie sous forme graphique .
/* Servo motor with Arduino example code. Position and sweep. More info: https://www.makerguides.com/ */ // Include the servo library: #include <Servo.h> // Create a new servo object: Servo myservo; // Define the servo pin: #define servoPin 9 // Create a variable to store the servo position: int angle = 0; void setup() { // Attach the Servo variable to a pin: myservo.attach(servoPin); } void loop() { // Tell the servo to go to a particular angle: myservo.write(90); delay(1000); myservo.write(180); delay(1000); myservo.write(0); delay(1000); // Sweep from 0 to 180 degrees: for (angle = 0; angle <= 180; angle += 1) { myservo.write(angle); delay(15); } // And back from 180 to 0 degrees: for (angle = 180; angle >= 0; angle -= 1) { myservo.write(angle); delay(30); } delay(1000); }
#include "Servo.h" int PinEmg = A0; int PinServo = 9; Servo servo; // création de l'objet "servo" void setup() { servo.attach(PinServo); // attache le servo au pin spécifié pinMode(PinEmg, INPUT); Serial.begin(9600); // ouvre le port série } void loop() { int val = analogRead(PinEmg); // lit la valeur actuelle du capteur EMG // mise à l'échelle pour renvoyer la position entre 0 et 180° val = map(val, 0, 1023, 0, 180); Serial.println(val); Serial.println(); servo.write(val); delay(100); // attend 100 ms }