Projet IMA3 P3, 2015/2016, TD1

De Wiki d'activités IMA
Révision datée du 30 mars 2016 à 15:45 par Bgriller (discussion | contributions) (Partie électronique)

Projet IMA3-SC 2015/2016 : Gestion de l'éclairage et du chauffage d'une pièce en fonction du nombre de personne.

Contexte

La gestion de l'énergie étant une problématique d'actualité, nous nous sommes dirigés vers le domaine de la domotique. Notre objectif est de concevoir un système capable, d'une part, de gérer automatiquement l'éclairage d'une pièce et d'autre part, de conseiller l'utilisateur sur le chauffage de cette dernière via une application WEB.

Cahier des charges

Concernant l'éclairage :

  • 2 capteurs de présence (LED IR ou SONAR à définir)
  • Des LEDs représentant l'éclairage

Concernant la gestion du chauffage :

  • 1 capteur de température

Pour acquérir, traiter et afficher les données :

  • Une Nanoboard
  • Une Raspberry PI

Séance 1

Partie électronique

Prise en main de la RedBoard :

  • Clignotement d'une LED
  • Mesures de distance avec SONAR qui servira de capteur de présence.
  • Caractéristiques du capteur de température TMP36GZ :
 Étendue de mesure : -40°C à +125°C
 Précision : +- 1°C à 25°C
 Résolution : 10mV/°C
 Offset : 0.5V
 25°C->750mV

Utilisation de la RedBoard pour acquérir les signaux des capteurs et transmission par la liaison série intégrée jusqu'à l’ordinateur. Vous trouverez ci-dessous le programme Arduino d'acquisition des données capteurs.

int pd=2;
int senRead=0;   // diode #1
int senRead2=2;  // diode #2             
int seuil=20;    //seuil pour un obstacle  
int cpt_IN=0;    //compteur d'entrées
int cpt_OUT=0;   //compteur de sorties
int signal_coupe=0;    //indique le numéro de la diode dont le signal a été coupé   
//pour le capteur de température
int val_t;
int tempPin = 1;

void setup()    
{  
 pinMode(pd,OUTPUT); 
 digitalWrite(pd,HIGH);       //alimentation photodiode 
 Serial.begin(9600);           
}  
void loop()
{  
 // Acquisition, calcul et affichage de la température
 val_t = analogRead(tempPin);
 float cel = ( val_t*125)/767.25; //Conversion en degrés Celsius
 Serial.print(cel);
 Serial.print("*C");
   
 // Lecture photodiode 1
 int val=analogRead(senRead);  //Acquisition de la valeur numérique (comprise entre 0 et 1023) de la première diode   
 delay(10);
 // Lecture photodiode 2
 int val2=analogRead(senRead2); // Acquisition de la valeur numérique (comprise entre 0 et 1023) de la seconde diode 
 delay(10);
 
 // test signal coupé
 if ((val>seuil) && (val2<seuil)){
   Serial.print("Signal 1 COUPE");
   signal_coupe = 1;
   cpt_OUT++;
   delay(100);
 }
 if ((val2>seuil) && (val<seuil)){
   Serial.print("Signal 2 COUPE");
   signal_coupe = 1;
   cpt_IN++;
   delay(100);
 }
 Serial.print(signal_coupe);
 
}

Partie informatique

  • (Re)découverte du langage HTML.
  • Découverte du langage CSS.

Recherche d'outils permettant la réalisation de graphiques 3D dynamique sur une page WEB :

  • JavaScript
  • CANVAS

Séance 2

Partie électronique

Nous choisissons de changer le capteur de présence par deux LED IR. Une personne est comptée entrante/sortante dans la pièce lorsque le faisceau IR est interrompu. Nous devons donc numériser deux signaux, celui à la sortie du capteur de température et celui des LEDs. Pour cela il nous faut utiliser un convertisseur analogique-numérique. Nous sommes contraint de réaliser ce composant avec le FPGA et nous nécessitons donc une conversion par MLI. Cette conversion nécessite la génération d'un signal triangulaire (utilisation d'un filtre passe bas) par le biais du FPGA et l’utilisation d'un comparateur entre ce signal et le signal du capteur pour obtenir un signal TTL interprétable en binaire. Le schéma suivant illustre la conversion.

Pwmproj.png

Pour retrouver la valeur de la tension délivrée par le capteur de température à partir du signal TTL, il faut mesurer la valeur moyenne de ce signal.

Pour le comptage de personne, nous utilisons un comparateur qui permet l’émission d'un état haut lorsque la luminosité reçue par la photodiode descend en dessous d'un certains niveau. Cela correspond à l'interruption de notre faisceau et au passage d'une personne. Nous comptons le nombre d'interruption et l'enregistrons sous forme d'entier dans une mémoire adjacente au FPGA.

Partie informatique

Programmation du capteur de température et de la photodiode.

Séance 3

Partie électronique

Après plusieurs tentatives infructueuses d'accès à la salle d'électronique (car il n'y avait pas suffisamment de poste avec nanoboard pour le nombre de groupe du TD), nous avons pu réaliser les premiers schémas sur Altium. Le premier correspond à l’émission d'un signal carré par le FPGA pour sa conversion future en signal triangulaire.

PWM1 OAG.png

Il est composés des éléments suivants : Un compteur 8 bits relié à deux blocs différents : L'horloge et un module délivrant un mot de 8 bit correspondant à la largeur d’impulsion désirée. Nous utilisons le bloc PWM prédéfini dans Altium pour délivrer sur la broche 2 le signal carré.

Le signal de sortie de ce bloc est un signal carré que nous rendons triangulaire grâce au filtre passe bas. Il suffit ensuite d'utiliser un comparateur (composant électronique) pour obtenir notre signal convertit.

Cependant, nous rencontrons des difficultés lors de la compilation du programme sous Altium. Nous remarquons que cela vient d'un problème de bibliothèque du logiciel et décidons de changer de poste pour le résoudre. Ce problème nous a fortement ralenti et nous décidons de réaliser une séance supplémentaire pour avancer le projet.

Partie informatique

Définition des données à échanger entre la partie électronique et le serveur Websocket. Finition du code gérant les capteurs.

Séance supplémentaire

Partie électronique

Le problème de compilation résolu, c'est le signal en sortie de la nanoboard qui nous pose problème, il n'est pas de forme carrée mais plutôt aléatoire. Après des recherches infructueuses et chronophages, nous nous intéressons à la réalisation de la liaison série. Nous souhaitons transférer la donnée température sous forme d'un mot de 8 bits. Le transfert du nombre de personnes comptées est un accès à la mémoire pour une lecture.

En prenant le cas du transfert de la données température, il convient de la mettre sous forme d'une trame utilisée par la liaisons RS232. Soit un bit de start, 8 bit de données et un bit de stop. Pas de bit de parité. La meilleur façon d'assembler ces bits consiste à utiliser un multiplexeur 8 vers 1 pour une émissions bit à bit temporisée par un compteur. Ce compteur correspond à la vitesse de transmission en bauds, choisit arbitrairement à 9600 bits/s, il faut connecter une horloge de 9600Hz pour cela au compteur. Nous trouvons ces informations en nous renseignant sur internet et en utilisant les travaux réalisés lors des projets précédents. Un programme Altium réalisable correspond au programme suivant, nous ne l'avons pas testé par manque de temps.

Transmission OAG.PNG

Un bloc supplémentaire de cadencement du compteur est utilisé afin d'obtenir la vitesse de 9600 bauds. L'envoie des données se fait par détection de l'appui sur bouton poussoir (SW_USER0). Ci-dessous le détails du bloc de cadencement.

Counter9600.PNG

   L'entrée Bp correspondant au bouton poussoir
   L'entrée clk correspondant à la clock à 50Mhz
   L'entrée Counter[3..0] correspondant au bus du compteur
   La sortie CE_out correspondant à la sortie du système gérant l'entrée CE du compteur 
   Le calcul de la nouvelle séquence d'horloge se fait de la manière suivante :
   Front = Bp . /Bp-1
   C = ( /Counter . C-1 ) + Front
   CE_out = C + Counter

Ces résultats sont à implémenter sur la nanoboard et il reste de plus à corriger les erreurs liées à la conversion.

Démonstration

Conclusion

Ce premier projet SC en IMA3 nous a permis d’acquérir de multiples compétences. En premier lieu des compétences techniques en Arduino, FPGA, Altium, WebSocket, HTML et CANVAS. Nous n'avions aucune connaissances dans ces domaines ce qui a été un frein très important sur notre progression. Cependant leur découverte n'a pu apporter que des choses bénéfiques. Notre programme Arduino fonctionne et nous pourrions l’implémenter directement sur la Raspberry Pie car il n'est en effet pas nécessaire d'utiliser un FPGA dans notre situation. Nous avons pu découvrir deux environnements totalement différents, l'électronique et l'informatique, qu'il a fallu relier entre eux ce qui consistait en un bon exercice. Nous avons développé nos compétences sur le travail en autonomie car nous étions la plupart du temps seuls face aux différents problèmes à résoudre. Nous aurions du revoir notre projet à la baisse au vue des contraintes imposées et de la difficultés de documentation et de prise en main des differents aspects du projet. De cette manière nous aurions pu finaliser un projet moins ambitieux mais fonctionnel.