Table des matières

EMG Grove

EMG Grove Gotronic

EMG Grove Gotronic

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.

Ne pas utiliser ce produit dans des applications médicales ou de sécurité.
  1. -Interface compatible Grove
  2. -Alimentation: 3,3 ou 5 Vcc
  3. -Longueur cordon: 1 mètre
  4. -Electrodes: 6
  5. -Dimensions module: 42 x 25 x 11 mm
  6. -Référence Seeedstudio: 101020058 (remplace 811006001)

Plates-formes prises en charge

Les plates-formes mentionnées ci-dessus comme prises en charge sont une indication de la compatibilité logicielle ou théorique du module. Nous fournissons uniquement une bibliothèque de logiciels ou des exemples de code pour la plate-forme Arduino dans la plupart des cas. Il n'est pas possible de fournir une bibliothèque de logiciels/un code de démonstration pour toutes les plates-formes MCU possibles. Par conséquent, les utilisateurs doivent écrire leur propre bibliothèque de logiciels.

Présentation du matériel

  1. -J2 : interface Grove, connexion aux E/S analogiques ;
  2. -J1 : connecteur des électrodes de surface jetables EMG.
  3. -U1 : INA331IDGKT, amplificateur différentiel.
  4. -U2, U3 : OPA333, amplificateur à dérive nulle.

Demonstration

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 .

Installation du matériel¶

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.

EMG_Grove001.ino
// 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);
}

Télécharger le code

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.

Code simplifié pour test valeurs de sortie

test_Emg_simplifie_001.ino
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 .

Plier le Bras

Schema Capteur Grove-EMG v1.0

Utilisation du capteur EMG avec un servo moteur

Raccordement Arduino et servo

Code arduino Servo-moteur

arduino-servo.ino
/* 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);
}

Commande Servo-Moteur avec un EMG

Cmdservo-emg001.ino
#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
}

EMG Grove Robotshop

EMG Grove Robotshop

EMG Grove Seedstudio

EMG Grove Seedstudio

EMG Grove Semageek

EMG Grove Semageek