Contrôle d'accéléromètre, 2011/2012, TD2 : Différence entre versions

De Wiki d'activités IMA
(Séance 1)
(Séance 1)
Ligne 34 : Ligne 34 :
  
 
Après avoir compris comment communiquer avec un port série à partir d'un programme C, il fallait adapter le programme client.c à notre problématique. Nous avons commencé par modifier le port utiliser par le demon.c, donc on est passé au port /dev/ttyUSB0. Nous avions aussi modifié le client.c pour recevoir une seule valeur envoyée par le micro-contrôleur LilyPad.
 
Après avoir compris comment communiquer avec un port série à partir d'un programme C, il fallait adapter le programme client.c à notre problématique. Nous avons commencé par modifier le port utiliser par le demon.c, donc on est passé au port /dev/ttyUSB0. Nous avions aussi modifié le client.c pour recevoir une seule valeur envoyée par le micro-contrôleur LilyPad.
Après avoir réussi cette opération, comme il nous était demandé d'afficher trois valeurs d'accéléromètre sur les trois axes; nous avons modifié le programme Arduino du micro-contrôleur pour envoyer trois valeurs sur le port série à la demande:
+
Après avoir réussi cette opération, comme il nous était demandé d'afficher trois valeurs d'accéléromètre sur les trois axes; nous avions modifié le programme Arduino du micro-contrôleur pour envoyer trois valeurs sur le port série à la demande. A cette étape, il fallait alors taper un chiffre différent de 0 dans le terminal pour demander et recevoir 3 valeurs du micro-contrôleur.
int main(void){
 
 
 
s_cgi *cgi;
 
cgi=cgiInit();
 
cgiHeader();
 
 
 
 
int i = 0;
 
int x = 0, y = 0, z=0, b=0;
 
int c = 0;
 
 
 
int sl=connexionServeur(SOCKET_LECTURE);
 
if(sl<0){
 
fprintf(stderr,"Serveur serie (electure) absent\\n"); 
 
exit(-1);
 
}
 
int se=connexionServeur(SOCKET_ECRITURE);
 
if(se<0){ fprintf(stderr,"Serveur serie (ecriture) absent\\n"); exit(-1); }
 
 
 
while(1){
 
  scanf("%d", &c);
 
 
 
  c = cgiGetValue(cgi,"id");
 
  if ( c != 0){
 
  if(write(se,&c,sizeof(char))!=1){
 
  perror("main.write"); exit(-1);
 
  }
 
 
 
  if(read(sl,&x,sizeof(char))!=1){
 
  perror("main.read");
 
  printf("%d\n", x);
 
  exit(-1);
 
  }
 
  if(read(sl,&y,sizeof(char))!=1){
 
  perror("main.read");
 
  printf("%d\n", y);
 
  exit(-1);
 
  }
 
  if(read(sl,&z,sizeof(char))!=1){
 
  perror("main.read");
 
  printf("%d\n", z);
 
  exit(-1);
 
  }
 
  if(read(sl,&b,sizeof(char))!=1){
 
  perror("main.read");
 
  printf("%d\n", b);
 
  exit(-1);
 
  }
 
  printf("%d %d %d %d\n",x,y,z,b);
 
}
 
c = 0;
 
}
 
 
 
cgiFree(cgi);
 
close(sl);
 
exit(0);
 
}
 
  
 
===Séance 2===
 
===Séance 2===

Version du 15 juin 2012 à 15:22

Rukata Maroy Josué, Li Qiaomu, Liu Zhen

Titre du projet : Sous-système contrôle d'accéléromètre

Le projet consiste à réaliser un sous-système d'acquisition pour un accéléromètre. Un accéléromètre est un capteur analogique qui permet de mesurer les accélérations linéaires suivant les trois axes X, Y et Z d'un corps en mouvement. Dans le cadre de ce projet, il est demandé de convertir les valeurs analogiques d'un accéléromètre,qui nous sera donné, en valeurs numériques pour permettre à un utilisateur de suivre les accélérations des trois axes de l'accéléromètre via une interface Web.

Pour se faire, le projet est divisé en deux parties :

- La partie électronique: elle convertie les valeurs analogies du capteur de l'accéléromètre en valeurs numériques. Il rend alors disponible ces derniers sur un port série.

- La partie informatique: à partir d'une liaison série, elle récupère les valeurs numériques de l'accéléromètre qui sont ensuite traitées par un programme C installé sur la foxBoard. Grâce à la librairie CGI-BIN, une page html effectue constamment des requêtes Ajax pour lire les valeurs de l'accéléromètre et les afficher sur une page web.

I. PARTIE INFORMATIQUE

Le projet est réalisé dans 3 séances de 4h:


Séance 1

L'objectif principal au cours de cette séance était de se familiariser avec le système et les outils à utiliser pour mener à bien le projet. Etant donné que la partie électronique n'était pas encore faite, nous avions reçu une table avec un accéléromètre fixé à une télécommande en balsa et géré par un micro-contrôleur LilyPad. Les données acquises pouvaient alors être lues via une liaison série sans fil (protocole ZigBee). La première chose faite était de récupérer les programmes de teste pour communiquer en liaison série.


Le première programme est celui de la gestion du port série[1], nous l'appellerons demon.c dans la suite de ce rapport. Avant d'utiliser le port série, ce programme doit être opérationnel. Dans le cas contraire, aucune communication peut être faite sur le port série.


Le deuxième programme est un exemple d'utilisation du port série[2] en lecture et en écriture, nous l'appellerons client.c dans la suite de ce rapporte.


Après avoir compris comment communiquer avec un port série à partir d'un programme C, il fallait adapter le programme client.c à notre problématique. Nous avons commencé par modifier le port utiliser par le demon.c, donc on est passé au port /dev/ttyUSB0. Nous avions aussi modifié le client.c pour recevoir une seule valeur envoyée par le micro-contrôleur LilyPad. Après avoir réussi cette opération, comme il nous était demandé d'afficher trois valeurs d'accéléromètre sur les trois axes; nous avions modifié le programme Arduino du micro-contrôleur pour envoyer trois valeurs sur le port série à la demande. A cette étape, il fallait alors taper un chiffre différent de 0 dans le terminal pour demander et recevoir 3 valeurs du micro-contrôleur.

Séance 2

Séance 3

II.PARTIE ELECTRIQUE

Séance 1

Le but de notre sujet est de réaliser un convertisseur analogique numérique. On a utilisé un modulateur de largeur d’impulsion PWM. L’objectif est de créer un signal logique 0 ou 1 avec un fréquence constante mais un rapport cyclique variable.

L’accélération d’un axe est codé sur 5 bits, donc on a choisi un compteur de 1 à 32 ( 2^5=32) pour réaliser la PWM. ( Par exemple, 16 représente un rapport cyclique 0.5 ) L'horloge de PWM est 32 fois que celle de compteur, parce que pour chaque chiffre donné par compteur(1/32 de la période de compteur ), le composant de PWM doit le régler dans une période de l'horloge ( l'horloge de PWM).

Après la PWM, il faut ajouter un filtrage passe bas ( circuit RC ) qui nous permet d’obtenir la valeur moyenne du signal logique avec un rapport cyclique variable. Cette valeur correspondent à la valeur moyenne du rapport cyclique. Globalement, en sortie du filtrage, on va obtenir un signal triangulaire.

Ensuite, il faut ajouter un comparateur qui compare ce signal avec la valeur d’accélération d’un axe. Si la valeur moyenne da la PWM est supérieur à la valeur mesurée, le comparateur envoi 1 ( 5V ), sinon, il envoi 0 ( 0V ). Donc, en sortie du comparateur, on obtient un signal carré qui passe entre 0 et 1. Comme le principe de conversion de chaque axe est le même, on va travailler sur un axe.


Séance 2

Pendant cette sérance, on a câblé le câblage de la PWM. On teste la sortie du schéma de la PWM sur la nanobord et vérifie son fonctionnement avec un oscilloscope. On voit que la sortie est un signal triangulaire. Ensuite, on réalise un filtrage passe bas ( RC ). On a choisi une fréquence 1k. Par la formule R*C=1/(2*f*3.14), on trouve les valeurs de R et C, avec R=16k, C=10nf.

Puis, on a utilisé un amplificateur qui réalise la fonction d’un comparateur. Et on renvoi la sortie à un bascule D qui réalise la fonction comme une mémoire, quand la sortie monte à 1, la mémoire va stocker la donné du compteur, et puis elle attend la prochaine front montant.

Pour capter l’accélération des axes, on a utilisé un capteur ADXL3xx. Et on a choisi le bascule TL072C pour l’amplificateur.

Pour alimenter ADXL3xx, et câbler TL072C, on a cherché des information sur internet.


Séance 3=

Le objectif de cette séance est d'assembler la partie électronique et la partie informatique. Avant de faire ça, on a testé par mettre un Digital IO dans Altium pour voir les valeurs de la mémoire. En fait, si la valeur du comparateur est égal à 1, la mémoire va stocker les valeurs de 5 bits. Ensuite, elle va passer les bits en liaison série.



Shéma électronique.png