======== EMG Grove ======== ===== EMG Grove Gotronic===== {{ :start:arduino:emg:capture_d_ecran_du_2023-02-10_16-14-14.png?direct&600 |}} [[https://www.gotronic.fr/art-detecteur-emg-grove-101020058-21514.htm|EMG Grove Gotronic]] {{ :start:arduino:emg:emg_product.jpg?direct&600 |}} 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é. --Interface compatible Grove --Alimentation: 3,3 ou 5 Vcc --Longueur cordon: 1 mètre --Electrodes: 6 --Dimensions module: 42 x 25 x 11 mm --Référence Seeedstudio: 101020058 (remplace 811006001) =====Plates-formes prises en charge===== {{ :start:arduino:emg:capture_d_ecran_du_2023-02-10_15-49-24.png?direct&300 |}} 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 ===== {{ :start:arduino:emg:grove_emg_detector.jpg?direct&600 |}} --J2 : interface Grove, connexion aux E/S analogiques ; --J1 : connecteur des électrodes de surface jetables EMG. --U1 : INA331IDGKT, amplificateur différentiel. --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¶=== *Branchez Grove - Base Shield à Seeeduino, puis connectez Grove - LED Bar à D8, connectez Grove - EMG Sensor à A0. *Enfin, fixez les trois électrodes à votre muscle et gardez une distance entre chaque électrode. {{ :start:arduino:emg:emg_connect.jpg?direct&600 |}} Vous pouvez télécharger le code de démonstration dans github, [[https://github.com/Seeed-Studio/Grove_EMG_detector_demo_code/|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 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=== {{ :start:arduino:emg:capture_d_ecran_du_2023-02-10_16-03-01.png?direct&600 |}} 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 ===== 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 . {{ :start:arduino:emg:emg-result.jpg?direct&600 |}} ===== Plier le Bras ===== {{ :start:arduino:emg:capture_d_ecran_du_2023-02-10_16-08-17.png?direct&200 |}} ===== Schema Capteur Grove-EMG v1.0 ===== {{ :start:arduino:emg:capture_d_ecran_du_2023-02-10_16-12-01.png?direct&600 |}} ===== Utilisation du capteur EMG avec un servo moteur ===== === Raccordement Arduino et servo === {{ :start:arduino:emg:capture_d_ecran_du_2023-02-13_08-37-59.png?direct&600 |}} === Code arduino Servo-moteur === /* Servo motor with Arduino example code. Position and sweep. More info: https://www.makerguides.com/ */ // Include the servo library: #include // 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 ==== #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===== [[https://eu.robotshop.com/fr/products/grove-emg-detector|EMG Grove Robotshop]] ===== EMG Grove Seedstudio===== [[https://wiki.seeedstudio.com/Grove-EMG_Detector/|EMG Grove Seedstudio]] ===== EMG Grove Semageek===== [[https://boutique.semageek.com/fr/706-capteur-emg-grove-3001085856053.html|EMG Grove Semageek]]