Projet IMA3 P7, 2016/2017, TD2

De Wiki d'activités IMA
Révision datée du 18 juin 2017 à 13:36 par Groux (discussion | contributions) (Partie électronique)

Projet IMA3-SC 2016/2017 : Station météo connectée

Cahier des charges

Pour notre projet Système Communicant, nous avons choisi de réaliser une station météo qui pourrait mesurer la température, l'humidité et la pression atmosphérique. Nous pourrions songer également à relever la luminosité, la quantité de précipitation etc mais il faut rester vigilent au nombre de pins de l'Arduino. Grâce à celui-ci, nous pourrons réaliser une application web qui afficherait en détails les grandeurs mesurées.

=== Le matériel ===

  • Un capteur de pression (type BMP085)
  • Un capteur d'humidité (A0SONG AM2302)
  • Un capteur de température
  • Un Raspberry Pi
  • Une alimentation
  • Un Arduino
  • Une nanoboard
  • Plaque d'essais
  • Fils

Séance 1

Partie électronique

Pour le capteur AM2302, on constate que la broche de sortie SDA est une broche complexe et bidirectionnelle. On souhaite, grâce au FPGA, lire les informations envoyées par le capteur AM2302 toutes les n secondes. Pour lire une mesure, il faut envoyer un front descendant sur SDA, puis le capteur envoie 5 octets :

AM2302.jpeg

Pour pouvoir gérer la bidirectionnalité de la broche SDA, on utilisera un composant spécifique de Altium : le IOBUF

Voici les caractéristiques sensorielles du capteur de température et d'humidité

AM2302 sensor.jpeg

Partie informatique

Pour la programmation, nous avons décidé de ne pas utiliser la carte arduino mais plutôt un circuit logique programmable (puce FPGA). Cette puce servira à collecter les informations envoyées par les différents capteurs et les convertir en valeurs numériques pour pouvoir les afficher sur notre application web.

Séance 2

Partie électronique

Etude de la transmission d’informations avec la sonde AM2302 : Attendre la détection d’un front descendant (entre 0,8 et 20 ms) envoyé par l’utilisateur. On reçoit ensuit un signal haut nommé Tgo qui correspond à la libération du bus de données compris entre 20 et 200 us On recoit une réponse du signal bas et une réponse du signal haut compris tous les duex entre 75 et 85 µs Ensuite, la transmission des 40 caractères de données commence. Pour chaque bit, le capteur envoie un signal bas puis un signal haut.
Pour envoyer un 0 ou un 1, le temps du signal bas (TLOW) ne varie pas. C’est donc grâce au temps de signal haut que l’on va distinguer la reception d’un « 0 » ou d’un « 1 » Pour compter le temps de signal haut et savoir si le capteur nous a envoyé un 1 ou un 0, il faut détecter le front montant, lancer un compteur toutes les 1 µs puis détecter un front descendant pour arrêter le compteur.
Si 48 < compteur < 55 µs, alors le capteur nous a envoyé un « 0 »
Si 22 < compteur < 30 µs, alors le capteur nous a envoyé un « 1 » Après avoir envoyé 40 bits de données à traiter, le capteur envoie un dernier signal bas compris entre 45 et 55 µs pour indiquer que la transmission est terminée

Capture1.png


Capture2roux.png


Capture3.png


Capture4.png


Grâce à ce compteur, nous stockons chaque bit reçu grâce à des bascules D. Une fois les 5 octets de données récupérées, il suffit d’effectuer quelques opérations mathématiques pour récupérer les valeurs décimales du pourcentage d’Humidité et de la température. Voici à quoi correspondent les 5 octets reçus : Le temps maximum de réception est (55 + 75 µs) x 8 x 5 = 5,2 ms.
C’est l’intervalle de temps minimum avec lequel on peut récupérer une nouvelle valeur de température et d’humidité. 


Capture5.png


Pour vérifier que les informations reçues sont correctes, on additionne les 4 premiers octets (HH + HL + TH + TL). Si cette somme est égale au dernier octet (Parity bit), alors la transmission est correcte. Pour avoir la valeur décimale de l’hygrométrie (en %), on converti en décimal les deux octets HH et HL puis on divise cette valeur par 10. On applique les mêmes manipulations pour la température en °C. Exemple : 40 bits recus : 0000 0010 1001 0010 0000 0001 0000 1101 1010 0010
High Humidity Low Humidity High Temperature Low Temperature Parity bit Calculs : 0000 0010 + 1001 0010 + 0000 0001 + 0000 1101 = 1010 0010
Ici, cette égalité est vraie, donc la transmission est correcte. Humidité : 0000 0010 1001 0010 = 0292H = 2 x 256 + 9x16 + 2 = 658 
On divise cette valeur décimale par 10
 Humidité = 65,8%RH Température : 0000 0001 0000 1101 = 010DH = 1 x 256 + 0 x x16 + 13 = 269
On divise cette valeur décimale par 10
 Température = 26,9°C

Partie informatique

Séance 3

Partie électronique

Partie informatique

Séance supplémentaire 1

Partie électronique

Partie informatique

Conclusion