[Arduino] Programme pour accélérometre

Bonjour,

Actuellement en classe de STI2D SIN (Système information et numérique), je suis, avec mon groupe, en train de réaliser notre projet de fin d’année coefficient 12 (6 par nos professeurs, 6 par le Jury).

Notre projet consiste à la réalisation d’un sac à dos connecté pour cycliste.

Notre groupe est constitué de 4 personnes, avec 4 tâches réparties :

Géolocalisation (GPS/GSM)
Mouvement (Accéléromètre direction droite/gauche - afficheur)
Mouvement (Accéléromètre freiner - afficheur)
Alimentation

Composants :

LED Rouge

Platine Arduino Uno

Module accelerometre 3 axes MMA 7660

Ci-joint le diaporama que j’ai dû réaliser afin de montrer à mon professeur l’avancement du projet et recevoir une note pour le second trimestre : http://www.mediafire.com/view/7tdfv12968z4o7v/Mercredi_04,02,2015.pptx Ainsi que les notes que j’avais prise pour me préparer à ce passage http://www.mediafire.com/view/2jrfanlnba6549b/Premier_passage.docx)

Le problème que nous rencontrons est avec le programme pour l’accéléromètre. Nous ne savons pas comment procéder exactement pour qu’il exécute nos demandes. Nous avons trouvé ces différents sites qui concernent notre accéléromètre MMA7660FC mais on ne sait pas s’ils nous seront bien utiles :

http://www.timzaman.com/?p=1089

Le but est donc que lorsque le cycliste lève sa main à gauche ou droite de 90 à 180°, cela envoie un signal au sac qui affichera une flèche sur l’afficheur LED qui indiquera le sens dans lequel le cycliste tournera.

Lorsque le cycliste freinera, un signal sera envoyé à l’afficheur LED pour afficher « STOP ».

Merci pour votre aide.

Bonjour ! On a un début de programme trouvé sur un site, nous l'avons commenté on aimerait savoir si c'est juste ou s'il manque des choses, ect ...

#include Wire.h
#include MMA7660.h

void setup()
{
 Serial.begin(9600);
 MMA7660.init();
}

void loop()
{
 int x,y,z;
 delay(100);  There will be new values every 100ms
 MMA7660.getValues(&x,&y,&z);
 Serial.print(x );
 Serial.print(x);
 Serial.print( y );
 Serial.print(y);
 Serial.print( z );
 Serial.println(z);

}

//inclure la biblothèque (directives de préprocesseur, programme qui se lance au début de la compilation et lues par un programme. Ce sont des fichiers source tout prêt, contiennent du code tout prêt qui permet d’afficher du texte à l’écran)
//Lancement de “setup” (donc du programme)
//Initialise l’accéléromètre
//Créer une boucle
//Créer variable X,Y,Z (int permet de stocker des nombres entiers entre - 2 10407 40830 6408 à 20 1047 483 647)
//Délai de 100 milliseconde (0,1 seconde) Une nouvelle valeur arrivera tous les 100ms
//L’accéléromètre prend la valeur de X, Y et Z (voir chapitre pointeurs)
//Donne la valeur X
//Donne la valeur X
//Donne la valeur Y
//Donne la valeur Y

On aimerait détecter un mouvement pour tourner à droite ou à gauche et prévenir d'un arrêt. Le but étant d'afficher un message par la suite avec des LED. Est ce que vous avez un programme qui pourrait nous aider ?

Les balises code stp

Nous avons des accéléromètres 3 axes (3.3v) en I2C
Du coup on est vraiment coincés

(j’ai réédité le code.)

1/ En général, on met les commentaires dans le code, comme ça on voit directement à quelle ligne ils sont associée

2/ la directive préprocesseur include ne fonctionne pas comme vous l'avez fait. Lorsque tu compiles ton programme, il te donne le détail et la ligne de chaque erreur, et souvent comment la résoudre. Si t'arrives pas, tu peux poser une question précise sur ton problème

3/pourquoi faire un delay après avoir déclaré 3 variables ? Le microprocesseur n'est pas comme nous. il n'a pas besoin d'une pause pour retenir quelque chose.

4/

Serial.print(x );
 Serial.print(x);
 Serial.print( y );
 Serial.print(y);
 Serial.print( z );
 Serial.println(z);

Pourquoi afficher 2 fois la valeur de chaque axe ? Je pense que c'était plutôt ça que tu voulais :

Serial.print( "x=" ); // on affiche le texte "x="
 Serial.print( x ); //on affiche la valeur de x
 Serial.print( " y=" ); //idem
 Serial.print( y );
 Serial.print( " z=" );
 Serial.println( z );

Tant que ce code ne fonctionne pas, c'est pas la peine d'essayer d'interpréter ces chiffres

  1. Merci pour la gentillesse de la réponse ^-^

  2. Ce programme nous l'avons trouvé sur un site qu'on nous a conseillé pour ça avec ce programme là donc on l'a juste commenté pour le moment. On est qu'en terminal, loin d'être doué en programmation.

  3. Je vais prendre en compte ton commentaire et changer tout ça.

Merci ! :stuck_out_tongue:

( sur le logiciel de transfert arduino le programme qu'on a mis fonctionne et avec les modifications proposées il y a pleins d'erreur
)

Up.

J'aimerais bien que l'on me donne une piste pour le programme. Je n'ai quasi aucune connaissance en programmation du coup j'aimerais bien une indication, un début de programme, etc...

Merci

On veut bien donner des pistes... mais ou en êtes vous? avez vous réussi à lire les valeurs X Y Z de votre capteur?

Question : comment comptez vous différencier le mouvement du cycliste pour tourner (lever le bras) d'une secousse (bosse / trottoir...) ? L'accéléromètre, comme son nom l'indique, mesure une accélération, pas une position !? Pour l'arrêt du cycliste OK, mais pour indiquer la direction...