Bonjour,
Je travaille pour mon projet de terminale de Science de l'Ingénieur sur un bras robot, dont le but est que ce bras puisse reproduire les mouvements qui sont fait par l'humain.
Nous sommes 4 à travailler sur ce projet mais pour ma part, je devais me concentrer sur la partie de l'épaule du robot ainsi que le bras ( hors doigts, main et poignet ).
Nous arrivons à la fin du projet et voilà où j'en suis à l'heure actuelle : Je disposais d'une carte d'Arduino, d'un gyroscope itg3200 et d'un accéléromètre ADXL345. J'ai réussi à contrôler un servomoteur avec le gyroscope et également avec l'accéléromètre, mais de manière séparée.
Je chercher donc maintenant à pouvoir contrôler le servomoteur en utilisant à la fois le gyroscope et l'accéléromètre, les deux qui seraient donc en simultanés.
Cependant, ayant fait de nombreuses recherches au travers de forum, je ne trouve pas de code qui relient ces deux dispositifs, je me demande même si au finale cela est possible de les faire fonctionner ensemble.
Je viens donc vers vous pour pouvoir me donner une piste ou plus encore, toute aide est la bienvenue même un bout de code sera mis en valeur, en sachant que ce projet ne sera dans tout les cas pas fini.
Je vous mets ci-dessous les codes que j'ai utilisé pour contrôler le servomoteur avec le gyro et l'accéléromètre. Je précise que je n'ai que très peu de notions sur Arduino d'où sûrement la présence d'erreur de code ou de structure.
Merci d'avance pour votre attention et d'avoir pris le temps de me lire et merci à tous ceux qui m'aideront d'une manière ou d'une autre à la résolution de ce problème !
Code controler un servo avec gyro :
#include <Wire.h>
#include <ITG3200.h>
#include <Servo.h>
Servo servo1;
Servo servo2;
ITG3200 Gyro;
int x, y, z;
int rawX, rawY, rawZ;
int mappedRawX, mappedRawY;
void setup() {
Serial.begin(9600);
Gyro.init();
servo1.attach(9);
servo2.attach(6);
}
void loop() {
Gyro.getXYZ(&x, &y, &z);
rawX = x - 7;
rawY = y - 6;
rawZ = z + 10;
if (rawX < -255) rawX = -255; else if (rawX > 255) rawX = 255;
if (rawY < -255) rawY = -255; else if (rawY > 255) rawY = 255;
mappedRawX = map(rawX, -255, 255, 0, 180);
mappedRawY = map(rawY, -255, 255, 0, 180);
servo1.write(mappedRawX);
delay(15);
servo2.write(180 - mappedRawY);
delay(15);
Serial.print(" mappedRawX = "); Serial.print(mappedRawX); // raw data with offset
Serial.print(" mappedRawY = "); Serial.println(mappedRawY); // raw data with offset
}
Code controler un servo avec accéléromètre :
#include <Wire.h>
#include <ADXL345.h>
#include <Servo.h>
Servo servo1; // create servo object to control a servo
Servo servo2;
ADXL345 adxl; //variable adxl is an instance of the ADXL345 library
int x, y, z;
int rawX, rawY, rawZ;
int mappedRawX, mappedRawY;
void setup() {
Serial.begin(9600);
adxl.powerOn();
servo1.attach(9);
servo2.attach(6);
}
void loop() {
adxl.readXYZ(&x, &y, &z); //read the accelerometer values and store them in variables x,y,z
rawX = x - 7;
rawY = y - 6;
rawZ = z + 10;
if (rawX < -255) rawX = -255; else if (rawX > 255) rawX = 255;
if (rawY < -255) rawY = -255; else if (rawY > 255) rawY = 255;
mappedRawX = map(rawX, -255, 255, 0, 180);
mappedRawY = map(rawY, -255, 255, 0, 180);
servo1.write(mappedRawX);
delay(15);
servo2.write(180 - mappedRawY);
delay(15);
Serial.print(" mappedRawX = "); Serial.print(mappedRawX); // raw data with offset
Serial.print(" mappedRawY = "); Serial.println(mappedRawY); // raw data with offset