Arduino-->Gyro-->Servos ????
bonjour,
voilà 3 mois que je bataille, que je cherche à faire un programme en c.
j'ai acheté une carte arduino uno, un accéléromètre gyroscope mpu6050 et 2 servomoteurs, pensant naïvement que la programmation allait être simple même pour un novice comme moi ! car je n'y connais rien en électronique et en programation![smiley-red :smiley-red:](https://forum.arduino.cc/smileys/arduino/smiley-red.png)
mon projet est de faire manoeuvrer les servomoteurs suivant une inclinaison donnée (ex : à partir d'une inclinaison de 5° vers la gauche, je voudrais que mon servomoteur de gauche manoeuvre de 10°; idem pour la droite).
j'ai bien eu quelques bribes de réponses mais même avec ça je n'avance pas...
j'imagine bien que l'idéal serait d'apprendre le langage c dans sa globalité mais j'en ai besoin uniquement pour une partie précise de mon projet et n'en aurait plus besoin par la suite...
j'ai bien trouvé un code qui se rapproche de ce que je veux faire mais c'est pas encore ça...
j'ai bien cherché des assos ou des clubs d'électronique pour m'épauller mais il n'y rien dans les landes. y aurait-il une âme charitable pour m'aider?!
d'avance merci.
voilà 3 mois que je bataille, que je cherche à faire un programme en c.
j'ai acheté une carte arduino uno, un accéléromètre gyroscope mpu6050 et 2 servomoteurs, pensant naïvement que la programmation allait être simple même pour un novice comme moi ! car je n'y connais rien en électronique et en programation
![smiley-red :smiley-red:](https://forum.arduino.cc/smileys/arduino/smiley-red.png)
mon projet est de faire manoeuvrer les servomoteurs suivant une inclinaison donnée (ex : à partir d'une inclinaison de 5° vers la gauche, je voudrais que mon servomoteur de gauche manoeuvre de 10°; idem pour la droite).
j'ai bien eu quelques bribes de réponses mais même avec ça je n'avance pas...
j'imagine bien que l'idéal serait d'apprendre le langage c dans sa globalité mais j'en ai besoin uniquement pour une partie précise de mon projet et n'en aurait plus besoin par la suite...
j'ai bien trouvé un code qui se rapproche de ce que je veux faire mais c'est pas encore ça...
code: [select]
#include <servo.h>
servo myservo;
int pos = 0;
const int max_mesures = 20;
int mesures[max_mesures];
int mesurestriees[max_mesures];
int nbmesures = 0;
void setup()
{
myservo.attach(9);
//serial.begin(9600);
}
void loop()
{
nbmesures = mesurer(mesures, nbmesures, max_mesures);
recopier(mesures,mesurestriees,nbmesures);
trier(mesurestriees,nbmesures);
//debugtab(mesurestriees,nbmesures);
pos = moyennesansextremes(mesurestriees,nbmesures);
//serial.println(pos);
myservo.write(pos);
delay(20);
}
int mesurer(int tab[], int nb, int max)
{
int sensorvalue = analogread(a0);
pos = map(sensorvalue, 165, 510, 0, 180);
pos = constrain(pos, 0, 180);
if(nb < max)
{
tab[nb] = pos;
nb++;
}
else
{
for(int i=0; i<max-1; i++)
{
tab[i] = tab[i+1];
}
tab[max-1] = pos;
}
return nb;
}
void debugtab(int tab[], int nb)
{
serial.print("[");
for(int i=0; i<nb; i++)
{
serial.print(tab[i],dec);
if(i<nb-1)
{
serial.print(",");
}
}
serial.print("]");
serial.println();
}
void recopier(int source[], int destination[], int nb)
{
for(int i=0; i<nb; i++)
{
destination[i] = source[i];
}
}
void trier(int tab[], int nb)
{
int min, imin, tmp;
for(int i=0; i<nb-1; i++)
{
min = tab[i];
imin = i;
for(int j=i+1; j<nb; j++)
{
if(min > tab[j])
{
min = tab[j];
imin = j;
break;
}
}
if(i != imin)
{
tmp = tab[i];
tab[i] = tab[imin];
tab[imin] = tmp;
}
}
}
int moyennesansextremes(int tab[], int nb)
{
int min = nb/4;
int max = nb - (nb/4);
int moyenne = 0;
int j = 0;
for(int i=min; i<max; i++)
{
moyenne += tab[i];
j++;
}
moyenne = moyenne / j;
return moyenne;
}
j'ai bien cherché des assos ou des clubs d'électronique pour m'épauller mais il n'y rien dans les landes. y aurait-il une âme charitable pour m'aider?!
d'avance merci.
heu, tu essai de lire la valeur du mpu6050 en faisant un analogread() ?
le module fonctionne avec i2c, il y un exemple d'utilisation ici :
http://playground.arduino.cc/main/mpu-6050
après, tu auras beaucoup de bruit ou de pics de variation, il faut soit utiliser un filtre complementaire (complementary filter en anglais) soit un filtre de kalman, ce dernier est bien plus compliqué à mettre en place, moi j'utilise le code suivant (il faut installer la lib) :
https://github.com/tkjelectronics/kalmanfilter/blob/master/examples/mpu6050/mpu6050.ino
le module fonctionne avec i2c, il y un exemple d'utilisation ici :
http://playground.arduino.cc/main/mpu-6050
après, tu auras beaucoup de bruit ou de pics de variation, il faut soit utiliser un filtre complementaire (complementary filter en anglais) soit un filtre de kalman, ce dernier est bien plus compliqué à mettre en place, moi j'utilise le code suivant (il faut installer la lib) :
https://github.com/tkjelectronics/kalmanfilter/blob/master/examples/mpu6050/mpu6050.ino
Arduino Forum > International > Français (Moderators: jfs, Snootlab) > Arduino-->Gyro-->Servos ????
arduino
Comments
Post a Comment