Contrôle de matrice leds, 2014/2015, TD1

De Wiki de Projets IMA

Projet IMA3-SC 2014/2015 : Matrice LEDS

Présentation du projet

Le projet consiste à réaliser la gestion d'une matrice de LEDs 8x8. L'utilisateur doit donc pouvoir afficher un dessin sur 64 pixels via une interface Web. Le travail repose sur deux composantes :

- Une partie informatique représentant la matrice de LEDs sur l'interface, permettant ainsi d'allumer les LEDs que l'utilisateur souhaite.

- Une partie électronique servant à décoder le message envoyé depuis l'interface et à l'afficher sur la matrice.

Séance 1

Partie électronique

Le but a été de prendre en main le sujet, le logiciel Altium Designer Summer 09 ainsi que la NanoBoard. Après lecture du cahier des charges, nous avons décidé de simuler un envoi de données et l'affichage sur des LEDS, sachant que nous utilisons une matrice en mode monocouleur. Dans un premier temps, le signal part de la liaison série, nous devons le recevoir comme un signal de 1 octet. De plus, nous devons stocker ces 8 octets car le but est d'afficher les 8x1 octets en même temps, nous utilisons donc des bascules pour alterner les différents envois de signaux. D'autre part, nous avons besoin de générer un bit de sélection pour choisir la colonne à allumer. Ces réflexions nous ont conduit à choisir nos composants et à établir un premier schéma qui nous servira de base pour la suite :

Esquisse Projet


Partie informatique

Programme Port_serie.c

Durant la première séance, nous avons pris connaissance du sujet et l'objectif a été de comprendre le fonctionnement de la matrice de LEDs par la liaison série. Un fichier serial.c ainsi qu'un serial.h ont donc été créés pour configurer le port série puis un fichier Port_serie.c permettant de changer les couleurs de toutes les LEDs de la matrice du banc Arduino. Pour cela, il se connecte au périphérique série /dev/ttyUSB0 et envoie, via une boucle, une valeur en hexadécimal qui change la couleur des LEDs (0x80 = rouge, 0x03 = bleu, 0x10 = vert ou autres). En modifiant les arguments de la boucle, nous pouvons contrôler le nombre de LEDs voulu (jusqu'à la matrice entière 16x16).


Problème : Un petit problème rencontré était que seulement la moitié de la matrice changeait de couleur lorsque le programme était lancé. Ce problème est du au fait que lorsque l'on recompile et relance le programme, la liaison série est reconnectée et l'Arduino garde en mémoire la dernière commande. Pour le résoudre, il a suffit d'ouvrir une deuxième console et utiliser la commande "sleep 9999d < /dev/ttyUSB0" permettant conserver la liaison série et de réinitialiser l'Arduino.



Séance 2

Partie électronique

Etablissement du schéma Altium

Nous avons décidé de modéliser notre premier schéma sur le logiciel Altium. Voici le résultat :

Schéma 1
  • Le générateur modélise la liaison série de l'interface web en générant 8bits.
  • Les bascules contiennent les mots de 8 bits afin de les délivrer au MUX.
  • L'horloge permet aux bascules de délivrer ou non l'octet qu'elles contiennent.
  • Le MUX permet d'envoyer le message souhaité via un compteur 8 bits (il y a donc un signal allant de 0 à 7 désignant sur quelle colonne envoyer le mot).

Problèmes : Il n'est pas possible, avec ce schéma, de sélectionner la colonne où on attribue le mot. De plus, l'horloge déclenche toutes les bascules en même temps !

Correction des défauts

Suite aux différents problèmes rencontrés précédemment, voici le second schéma que nous avons adopté :

Schéma 2
  • Le DEMUX situé en avant des bascules permet de palier au problème du choix de la bascule à actionner. En effet, avec cette configuration le DEMUX 1 vers 8 peut sélectionner l'entrée de la bascule souhaitée.
  • Un compteur 3 bits a été ajouté devant le précédent DEMUX. C'est le compteur qui décide de la sortie à commander. En effet, sur 3 bits, on peut compter de 0 à 7, on peut ainsi sélectionner une bascule parmi 8 et non toutes à la fois comme sur le schéma1.
  • Nous avons également ajouté un deuxième bloc compteur/DEMUX qui nous permet de choisir la colonne de la matrice sur laquelle on souhaite envoyer l'information. En ce qui concerne la version précédente, on pouvait envoyer un octet sur une des 8 lignes mais on ne pouvait pas choisir la colonne.

Simulation sur la NanoBoard

...


Partie informatique

Pour cette deuxième séance, nous nous sommes lancé sur l'interface Web affichant la matrice et l'état des LEDs et permettant à l'utilisateur de modifier cet état en cliquant sur la LED souhaitée. Dans un premier temps, la création et l'affichage des LEDs se faisait dans le fichier index.html qui gère également la mise en page et l'accès à notre interface Web. Mais dans un deuxième temps nous avons transférer ces fonctions dans un fichier javascript (nous avons donc du trouver le langage et les commandes adéquates) de façon à laisser à index.php le seul contrôle de la page Web.

Nous avons donc créé deux fichiers :

  • index.html : gère la mise en forme de l'interface Web et fait appel au fichier javascript.
  • disque.js : dessine les disques représentant les LEDs et gère la modification des couleurs suivant leur état afin d'avoir une modification visuelle instantanément.
Affichage des LEDs sur l'interface Web


Séance 3

Partie électronique

Branchement de la matrice

(Calcul de la résistance et test d'alimentation de la matrice non-connectée à la NanoBoard)

Partie informatique

Pour cette dernière séance nous avons associé nos programme et notre interface Web au serveur WebSockets.

(Création de la page d'accueil du site)