Contrôle de matrice leds, 2013/2014, TD1 : Différence entre versions

De Wiki de Projets IMA
(Séances complémentaires)
 
(55 révisions intermédiaires par 2 utilisateurs non affichées)
Ligne 1 : Ligne 1 :
==Contrôle de matrice de LEDs==
+
==Présentation du projet==
 
 
===Présentation du projet===
 
  
 
==== Principe ====
 
==== Principe ====
  
Le projet consiste à allumer et éteindre des leds sur une matrice 8x8 de leds à partir d'un site web hébergé sur une Foxboard. Ainsi l'utilisateur peut créer l'image qu'il souhaite à travers son navigateur et ensuite l'envoyer sur la maquette d'essai, ici la Nanoboard, qui contrôlera la matrice de LEDS. Il a été réalisé par Colautti Kevin, Danel Thomas et Lefort Benjamin.
+
Le projet consiste à commander des leds RGB sur une matrice 8x8 de leds à partir d'un site web hébergé sur une Foxboard. Ainsi l'utilisateur peut créer l'image qu'il souhaite à travers son navigateur et ensuite l'envoyer sur la maquette d'essai, ici la Nanoboard, qui contrôlera la matrice de LEDS. Il a été réalisé par Colautti Kevin, Danel Thomas et Lefort Benjamin.
  
 
==== Eléments ====
 
==== Eléments ====
  
 
Les éléments mis en oeuvre pour la réalisation du projets sont :
 
Les éléments mis en oeuvre pour la réalisation du projets sont :
**navigateur pour visualiser le site web
+
::- navigateur pour visualiser le site web
**Foxboard hébergeant le serveur Web
+
::- Foxboard hébergeant le serveur Web
**module de communication série
+
::- module de communication série
**Nanoboard contrôlant la matrice 8x8 de leds câblée en rouge
+
::- Nanoboard contrôlant la matrice 8x8 de leds câblée en rouge
**banc d'essai Arduino avec une matrice 16x16 de leds RGB
+
::- banc d'essai Arduino avec une matrice 16x16 de leds RGB
  
 
==== Modes ====
 
==== Modes ====
Ligne 20 : Ligne 18 :
 
L'interface web permet de choisir la taille de la matrice et le type de LED (monocouleur ou RGB).
 
L'interface web permet de choisir la taille de la matrice et le type de LED (monocouleur ou RGB).
  
===Première séance===
+
==Première séance==
 
 
====Partie info:====
 
 
 
création site web
 
page d'accueil permettant de choisir la taille de la matrice (n lignes et m colonnes)
 
le type de LEDs (couleurs ou non)
 
le formulaire envoie vers un php (matrice.php "a vérifier")
 
qui affiche cette matrice de LEDs qui pour l'instant sont vertes par défaut et deviennent rouge en cliquant dessus
 
  
====Partie élec:====
+
====Partie info====
  
Pendant cette première séance, nous nous sommes définis un cahier des charges restreint compte tenu de la difficulté du sujet. A savoir, nous ne traiterons dans la partie électronique que la matrice 8*8 en monocouleur. Nous avons alors étudié la documentation technique de la matrice de Leds pour savoir comment la commander. Nos TP de microprocesseurs nous ont alors servis à trouver l'astuce pour afficher toute la matrice. Notre idée est de stocker des mots de 8 bits dans un registre, pour chaque ligne. Ensuite, on envoie les bits un à un puis on affiche les colonnes une à une, en synchronisation avec l'envoi des bits (même clock).
+
=====Interface web=====
  
Il nous faut donc en tout 16 sorties : 8 pour les colonnes et 8 autres pour les lignes. La prochaine étape serait de mettre ça au propre sous Altium, ce qu'on a commencé  à faire en fin de séance.
+
Cette interface a pour but de visualiser et de contrôler la matrice de LEDs.
  
===Deuxième séance====
+
Pour cela, l'interface est composée de trois fichiers :
  
====Partie info:====
+
:-index.html : cette page sert de page d'accueil et permet à l'utilisateur de choisir les caractéristiques de la matrice de LEDs. En effet, il est possible de choisir le nombre de ligne n, le nombre de colonnes m, et le type de LEDs : monochrone ou RGB. Le fichier est donc composé d'un formulaire qui envoie vers un autre fichier : matrice_leds.php
  
essaie de la liaison série
+
:-matrice_leds.php : nous recevons donc le nombre de lignes et de colonnes désirées. Ce php permet de générer l'interface entre l'utilisateur et la matrice de LEDs avec les caractéristiques demandées. Il est également possible de constater les changements de couleurs afin de connaître à chaque instant le statut de chaque LED. De plus, il permet d'envoyer le statut des LEDs via un CGI_BIN et des requêtes AJAX qui seront créés lors de la prochaine séance.
  
USB :
+
:-cercle.php : ce fichier permet la création de cercles afin de symboliser les LEDs dans le fichier matrice_leds.php, de plus il gère les différentes couleurs prédéfinies : à savoir le bleu, vert, rouge, orange et noir pour les LEDs éteintes.
pifou@zabeth15:/media/usb0/projet_SC$ stty -F /dev/ttyUSB0 9600 cs8  -hupcl -icrnl -ixon -opost -onlcr -isig -icanon  -iexten -echo -echoe -echok -echoctl -echoke ignbrk
 
pifou@zabeth15:/media/usb0/projet_SC$ sleep 9999d 3</dev/ttyUSB0 &[1] 8179
 
  
Programme :
+
Les page web sont opérationnelles mais on ne peut pas encore vérifier l'envoi des données dans le CGI_BIN avec les requêtes AJAX.
pifou@zabeth15:/media/usb0/projet_SC$ stty -F /dev/ttyUSB0 9600 cs8  -hupcl -icrnl -ixon -opost -onlcr -isig -icanon  -iexten -echo -echoe -echok -echoctl -echoke ignbrk
 
pifou@zabeth15:/media/usb0/projet_SC$ sleep 9999d 3</dev/ttyUSB0 &[1] 8179
 
  
c=0 ou 256 led éteinte
+
[[Image:Site web.png|thumb|center|Page d'accueil de notre site]]
c=1 bleu
 
c=255 rouge
 
  
création matrice de 256 caractères reçu par matrice.php
+
=====Liaison série=====
ces caractères correspondent aux couleurs B=bleu, R=rouge ... (recherche couleur finie ou pas selon les besoins juste une traduction de binaire à hexa)
 
switch case pour traiter les infos de la matrice
 
  
début du cgi-bin et en galère =D
+
Nous avons simplement ouvert le port série afin de tester un programme C plutôt basique permettant simplement de changer la couleur des LEDs.
 +
Pour cela, on envoie les 256 couleurs les unes après les autres grâce à une matrice de 1 seule ligne et 256 colonnes.
  
 
====Partie élec====
 
====Partie élec====
  
Cette séance fut riche en avancées pour la partie électronique : nous avons en effet pu mettre en place le circuit nécessaire à la réalisation de notre projet.
+
=====Cahier des Charges=====
  
 +
Pendant cette première séance, nous nous sommes définis un cahier des charges restreint compte tenu de la difficulté du sujet. A savoir, nous ne traiterons dans la partie électronique que la matrice 8*8 en monocouleur. Nous avons alors étudié la documentation technique de la matrice de Leds pour savoir comment la commander. Nos TP de microprocesseurs nous ont alors servis à trouver l'astuce pour afficher toute la matrice. Notre idée est de stocker des mots de 8 bits dans un registre, pour chaque ligne. Ensuite, on envoie les bits un à un puis on affiche les colonnes une à une, en synchronisation avec l'envoi des bits (même clock).
  
==== Justification du choix des composants ====
+
Il nous faut donc en tout 16 sorties : 8 pour les colonnes et 8 autres pour les lignes. La prochaine étape serait de mettre ça au propre sous Altium, ce qu'on a commencé  à faire en fin de séance.
  
 +
==Deuxième séance==
  
Transcrire le fonctionnement général ne fut pas chose aisée : en effet, nous devions trouver des composants  correspondant parfaitement à nos besoins. Tout d'abord, nous avons réfléchi à la manière dont nous pouvions stocker les "messages" qui nous parvenaient. Une petite révision dans nos cours de logique nous a rapidement conduit à prendre 8 bascules pouvant chacune stocker 8 bits d'information (une bascule stocke l'information d'une colonne). Il restait malgré tout à les sélectionner, pour que la bascule 1 stocke le message 1, la bascule 2 le message 2 etc. Sachant qu'une bascule est sélectionnée uniquement quand le bit de passage est à 1, nous avons rapidement compris que l'usage d'un démultiplexeur complémenté par un compteur était nécessaire. Le raisonnement fut similaire pour créer les 16 sorties de notre système : nous devions sélectionner les bascules à tour de rôle, mais assez rapidement pour que l’œil y voit un système fixe. Nous avons donc utilisé un multiplexeur et un démultiplexeur, accompagnés par un compteur.
+
====Partie info====
  
                    [[Fichier:Capture15.jpg]]
+
=====CGI_BIN=====
  
==== Détails et explications approfondies ====
+
nous avons récupéré le fichier qui a permis de tester la liaison série. Ainsi, nous avons un fichier qui sert exclusivement à ouvrir la liaison série : serial.c accompagné de serial.h
  
 +
L'autre fichier .c sert à récupérer les différentes couleurs reçues via les requêtes AJAX. En effet, on traite les différentes couleurs grâce à ce fichier et on les stocke dans un tableau.
  
''Un compteur 3 bits''
+
=====Foxboard=====
  
Les deux compteurs que nous avons choisis devaient sélectionner les 8 bascules, à tour de rôle. Nous avons donc choisi un compteur pouvant s’incrémenter de 0 à 7 pour les sélectionner. Or, pour compter sur cette plage, il suffit de 3 bits, ce qui justifie notre choix.
+
Nous avons configuré la FoxBoard via la liaison série avec les caractéristiques suivantes :
  
''Un multiplexeur 8 vers 1''
+
[[Image:Configuration foxboard.png|thumb|center|config foxboard]]
  
Comme dit précédemment, le multiplexeur a pour rôle de sélectionner à tour de rôle les bascules, et permettre d'afficher uniquement le message de celle qui a été sélectionnée. Nous avons donc choisi un multiplexeur 8 vers 1 : 8 bascules en entrée et 1 bus en sortie. Puis nous avons décomposé le bus de sortie en 8 bits, les 8 bits du message envoyé.
+
Ce qui nous permet ainsi d'accéder à celle-ci grâce au ssh et ainsi de transférer les trois fichiers nécessaires à l'interface web. Aussi, il a fallu recompiler les fichiers .c afin de créer l'exécutable CGI_BIN.
  
''Les démultiplexeurs 1 vers 8''
+
====Partie élec====
  
Les démultiplexeurs servant uniquement à envoyer des "1" sur les différents ports (les 8 bascules et les sorties), il s'est imposé de prendre des démultiplexeurs 1 vers 8, où l'entrée serait un "1" (VCC dans le schéma).
+
=====Réflexions et justifications=====
  
''Justification du choix sur les horloges et premiers problèmes''
+
On utilise des registres 8 bits pour stocker les mots de 8 bits envoyés par la partie info.
  
Il était nécessaire de pouvoir régler l'horloge de sortie du système, afin de trouver une fréquence idéale à la réalisation de notre système.
+
On sélectionne une à une les bascules qui doivent recevoir les bons mots au bon moment. Au moment de l'envoie des mots, la liaison série envoie un bit de validation qui sert à incrémenter un compteur pour sélectionner les registres.
La Nanoboard dispose d'une horloge interne, réglable directement sur Altium. Nous avons donc décidé de l'utiliser pour notre projet, celle-ci répondant parfaitement à nos critères. De plus, la sélection des colonnes et l'envoi des informations devant se faire au même rythme, il fut aisé de comprendre que le multiplexeur et le démultiplexeur de sortie devaient être reliés à la même horloge.
 
  
Pour le multiplexeur d'entrée, la réflexion fut plus difficile et des problèmes apparurent lors des tout premiers tests.
+
On utilise pour cela un démultiplexeur 1 vers 8 et en sortie un multiplexeur de même type.
En effet à l'origine, nous avions relié le compteur d'entrée à la même horloge que celui de sortie. Mais notre groupe s'est rapidement aperçu que cela ne fonctionnait pas. Il fallait que le compteur soit coordonné avec la réception du mot. Il était clair alors qu'il fallait relier le bit de présence du mot avec l'horloge de notre compteur d'entrée, afin d'obtenir le résultat voulu.
 
  
==== Résultats des tests ====
+
Les compteurs utilisés sont des compteurs 3 bits pouvant compter de 0 à 7 (8 registres).
  
 +
Pour le multiplexeur d'entrée, la réflexion fut plus difficile et des problèmes apparurent lors des tout premiers tests. En effet à l'origine, nous avions relié le compteur d'entrée à la même horloge que celui de sortie. Mais notre groupe s'est rapidement aperçu que cela ne fonctionnait pas. Il fallait que le compteur soit coordonné avec la réception du mot. Il était clair alors qu'il fallait relier le bit de présence du mot avec l'horloge de notre compteur d'entrée, afin d'obtenir le résultat voulu.
  
Après avoir fini et compilé le montage sur Altium, nous avons effectué des tests, afin de savoir si il était correct. Nous avons donc branché les ports de sortie de la Nanoboard sur un oscilloscope. Voici ce que nous avons observé :
+
=====Schéma Altium 8*8=====
  
[[Fichier:Capture16.jpg]]                                                        
+
[[Image:Schema_Altium_8_8_monocouleur.jpg|thumb|center|Schéma Altium 8*8 monocouleur]]
  
----
+
=====Tests=====
  
+
Après avoir fini et compilé le montage sur Altium, nous avons effectué des tests afin de savoir si il était correct. Nous avons donc branché les ports de sortie de la Nanoboard sur un oscilloscope :
[[Fichier:Capture17.jpg]]
 
  
Nous avons envoyé 8 messages l'un après l'autre, puis observé les résultats. Sur les images ci-dessus, on voit bien que chaque message est rangé dans une colonne. Il nous restait maintenant à câbler notre matrice, et à faire de nouveau des tests sur celle-ci.
+
[[Image:Compteur sortie.jpg|thumb|center|alt|Photo de l'analyseur logique]]
  
===Séance 3===
+
==Troisième séance==
----
 
===Partie informatique===
 
  
====Configuration supplémentaire du CGI-BIN====
+
====Partie info====
  
Pour pouvoir afficher quelque chose sur la matrice du banc Arduino, il faut modifier les droits dans le dossier /etc/group afin que l'utilisateur (www-data) en tapant ceci :
+
=====Tests=====
chown www-data /dev/ttyUSB0
 
  
====Configuration Foxboard====
+
Nous avons commencé par vérifier que l'interface web fonctionnait. Il y avait un problème avec l'affichage de cercle.php car nous avions vérifier que lorsque l'on cliquait dessus, la valeur envoyée par matrice_leds.php changeait.
  
L'adresse de notre Foxboard est : 172.26.79.8. Chaque modification devra être suivie d'un reboot de la Foxboard afin que ces modifications soient prises en compte. Dans le fichier /etc/apt/sources.list, il faut changer l'adresse du serveur existant pour le remplacer par celui de Polytech'Lille.
+
Voici la page lorsque l'on demande une matrice 16*16 :
Pour configurer la carte Ethernet, il faut écrire les lignes suivantes dans le fichier /etc/network/interfaces : [[Fichier:avant.png|thumb|right|Avant]] [[Fichier:après.png|thumb|right|Après]]
 
auto eth0                                               
 
iface eth0 inet static
 
  address 172.26.79.8
 
  netmask 255.255.240.0
 
  gateway 172.26.79.254
 
  dns-nameservers 193.48.57.34
 
  
====Importation des fichiers sur la Foxboard====
+
[[Image:Site web 1.png|thumb|center]]
 
 
Pour pouvoir mettre les différents fichiers nécessaires au projet, on se connecte en SSH en tant que root. On a placé dans le dossier /root les fichiers serial.h, serial.c et matrice.c et dans le répertoire /var/www les fichiers index.html, cercle.php, matrice.php, jquery.js. L'installation de php5-gd et de cgilib sera nécessaire. Nous avons inclus dans le fichier /etc/rc.local les utilitaires stty et sleep afin d'éviter de les réécrire à chaque compilation du CGI-BIN.
 
 
 
====Mise en forme de l'interface====
 
 
 
Pour rendre l'interface plus agréable à visionner nous avons créé un fichier style.css utilisé dans les fichiers index.html et matrice.php, nous avons également mis dans le répertoire du serveur local une image du logo de Polytech'Lille.
 
 
 
====Conclusion====
 
 
 
Voilà à présent une image récapitulant les différentes interactions entre les fichiers réalisés dans la partie informatique de ce projet.
 
[[Fichier:interactivites.png]]
 
 
 
===Partie électronique===
 
  
 +
Après avoir résolu ce problème d'affichage, nous avons rencontré un problème de l'envoi des couleurs grâce aux requêtes AJAX sur le banc d'essai. Cela ne venait pas du programme mais d'une mauvaise remise à zéro de l'arduino.
  
 +
====Partie élec====
  
==== Câblage de la matrice de leds ====
+
=====Cablage de la matrice 8*8 en rouge=====
 
 
 
Le circuit Altium étant terminé,  il ne manquait plus qu'à réaliser le câblage de notre matrice de led 8×8. Nous avions à notre disposition la datasheet de la matrice ainsi que tous les composants dont nous pourrions avoir éventuellement besoin.
 
 
 
==== Détermination du choix des résistances ====
 
 
 
 
 
 
 
À chaque couleur de notre matrice correspondait un voltage différent, soient des résistances différentes. Il a donc fallu choisir une seule couleur, qui pour notre groupe fut le bleu. Nous devions alors appliquer une tension de 3,2 V aux bornes des leds, alors que la Nanoboard fournissait en sortie une tension de 5V.
 
 
 
La datasheet fournie nous recommandait de prendre un ampérage de 20mA, mais sur conseil de Mr Boe nous en avons pris un plus faible, soit 7mA.
 
Nous avons d'abord effectué le calcul pour une led :
 
[[Fichier:loimaille.jpg]]
 
 
 
 
 
En faisant la loi des mailles 5V-3,2-RI=0, on obtient rapidement R=250 ohm, et la seule résistance qui se rapprochait était 220 ohm.
 
 
 
Mais comme nous n'avions pas qu'une led, le professeur nous a conseillé d'en prendre une de 880 ohm.
 
 
 
==== Sélection des broches ====
 
 
 
Comme notre groupe avait choisi la couleur bleu, il fallait brancher la matrice de sorte à ce qu'elle affiche les leds en cette couleur. D'après la datasheet qui nous avait été fournie, seules certaines broches correspondaient à cette couleur, ce qui justifie les emplacements de nos fils et résistances.
 
 
 
[[Fichier:CablageElise.jpg|thumb|right|Elise en train de réaliser le câblage de la matrice]]
 
  
 
Voici le schéma complet du câblage de notre matrice :  
 
Voici le schéma complet du câblage de notre matrice :  
  
[[Fichier:Cablage2.jpg]]
+
[[Image:SchemaElec.jpg|thumb|center|Schéma Electrique]]
 
 
==== Derniers tests ====
 
 
 
Suite à ce branchement, nous avons pris la décision de le tester immédiatement. Nous avons donc branché la Nanoboard à notre montage, et envoyé des mots pour observer le résultat.
 
[[Fichier:Capture52.jpg|thumb|right|Schéma final projet]]
 
[[Fichier:Branchement.jpg|thumb|left|Branchements à la Nanoboard]]
 
 
 
 
 
C'est lors de ce dernier test que nous avons remarqué deux problèmes :
 
  
- D'abord la matrice affichait l'inverse des mots envoyés. Nous avons rapidement compris que la matrice allumait une led lors du passage à 0 et non à 1. Il fut alors facile de mettre des inverseurs sur les 8 sorties du message de notre schéma Altium, afin de régler ce problème.
+
Et la photo du câblage
  
- Nous nous sommes également rendus compte qu'il y avait un décalage dans l'envoi des mots. En effet, la première colonne ne recevait que le huitième mot et non le premier. Celui-ci était reçu par la deuxième colonne. Ce problème nous surprit car lors des premiers tests, ni nous ni le professeur ne l'avions remarqué. Ce problème fut résolu lors des tests où les 2 systèmes, informatique et électronique, furent reliés. La résolution est expliquée dans la partie leur étant dédiée.
+
[[Image:Cablage_0F.jpg|thumb|left|Schéma du cablâge 0F]][[Image:Cablage_AA.jpg|thumb|right|Schéma du cablage AA]]
 +
<br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br />
 +
=====Schéma Altium 16*16=====
  
Vous pouvez apercevoir à droite le schéma final de notre projet, après que le professeur ait rajouté la liaison série, permettant de recevoir le mot et le bit de présence.
+
Ci dessous le schéma Altium :
  
===Séance de tests et vidéo===
+
[[Image:Schema_Altium_16_16_monocouleur.jpg|thumb|center|Schéma matrice 16*16]]
----
 
[[Fichier:capture_windows.png|thumb|right|Logo qui fait tout buguer =D]] [[Fichier:photo_windows.jpg|thumb|right|Visualisation sur le banc Arduino]] [[Fichier:Resulat.jpg|thumb|left|Résultats des tests]]
 
  
====Différents tests====
+
==Séances complémentaires==
  
Durant la séance de test, nous avons pu constater qu'en branchant directement la Foxboard sur le banc Arduino, le mode 16x16 multicolore fonctionnait parfaitement. Cependant, le mode 8x8 monocolore n'était pas encore fonctionnel car nous n'avions pas encore modifié le CGI-BIN pour qu'il puisse également fonctionner dans ce mode. En effet, dans ce mode, chaque colonne de la matrice reçoit un octet (c'est-à-dire chaque led reçoit un bit pour signaler l'état allumée ou éteinte). Ayant choisi dans la partie électronique de colorier en bleu les leds de la matrice, nous avons également mis en bleu celles de l'interface Web.  
+
Tout d'abord nous avons voulu rendre la Foxboard autonome. Pour cela, nous avons modifier le rc.local. Nous avons intégrer les lignes permettant à l'arduino de ne pas se réinitialiser après la fermeture d'un programme et la ligne permettant de ne pas "perdre" de caractère : le "sleep". Ainsi, dès que la Foxboard est branchée, il suffit de sélectionner le mode 14 sur le banc d'essai et le site web permet de gérer celui-ci.
  
Lorsque le mode 8x8 a fonctionné, nous avons commencé à brancher tout le système avec le module de communication série et la Nanoboard. Nous devions à présent corriger le problème de décalage rencontré à la dernière séance. Au départ, une solution informatique avait été envisagée. Mais il s'est avéré que recâbler les entrées des bascules D était plus rapide et fonctionnait également. Après avoir fait ceci, nous avons modifié la fréquence d'horloge de la Nanoboard pour que la persistance rétinienne nous permette de voir un signal fixe et pour que la luminosité des leds soit suffisante pour être bien visible.
+
Ensuite, nous avons réalisé plusieurs images sur le site que nous avons réussi à afficher sur le banc d'essai arduino. L'une en monochrome et l'autre en RGB.
  
====Vidéo====
+
Enfin, nous avons également amélioré le code de matrice_leds.php afin d'intégrer trois boutons :
 +
- le premier "image surprise" permet d'afficher le manchot
 +
- le second "RESET" permet de remettre toutes les LEDs à l'état "OFF"
 +
- le dernier "polytech" permet d'afficher le logo de Polytech
  
Nous avons pu être filmés afin de montrer que notre système est fonctionnel en particulier le mode 8x8 monocolore et ainsi le mode 16x16 multicolore lorsque l'on branche directement la Foxboard sur le banc Arduino.
+
Pour cela, nous avions préparé un programme en php mais celui n'aurait pas fonctionné notamment vis à vis de l'envoi des caractères correspondants à l'état de chaque LEDs.
 +
Grâce à Mr Redon, nous avons repris la base de ce programme et l'avons adapté pour le langage Javascript.
  
===Conclusion===
+
[[Image:Pinguin_data.jpg|thumb|center]]
  
Pour conclure, nous avons, lors de ce projet, mis en place un système permettant à un utilisateur de créer l'image qu'il souhaite sur une matrice de leds à partir d'une interface web.
+
[[Fichier:Pinguin.jpg|thumb|left|Pinguin]][[Fichier:Polytech.jpg|thumb|right|Polytech]]
Malgré les difficultés rencontrées que ce soit dans la partie informatique ou électronique, nous avons réussi à faire la relation entre les deux pour avoir un système fonctionnel.
 

Version actuelle datée du 19 juin 2014 à 12:47

Présentation du projet

Principe

Le projet consiste à commander des leds RGB sur une matrice 8x8 de leds à partir d'un site web hébergé sur une Foxboard. Ainsi l'utilisateur peut créer l'image qu'il souhaite à travers son navigateur et ensuite l'envoyer sur la maquette d'essai, ici la Nanoboard, qui contrôlera la matrice de LEDS. Il a été réalisé par Colautti Kevin, Danel Thomas et Lefort Benjamin.

Eléments

Les éléments mis en oeuvre pour la réalisation du projets sont :

- navigateur pour visualiser le site web
- Foxboard hébergeant le serveur Web
- module de communication série
- Nanoboard contrôlant la matrice 8x8 de leds câblée en rouge
- banc d'essai Arduino avec une matrice 16x16 de leds RGB

Modes

L'interface web permet de choisir la taille de la matrice et le type de LED (monocouleur ou RGB).

Première séance

Partie info

Interface web

Cette interface a pour but de visualiser et de contrôler la matrice de LEDs.

Pour cela, l'interface est composée de trois fichiers :

-index.html : cette page sert de page d'accueil et permet à l'utilisateur de choisir les caractéristiques de la matrice de LEDs. En effet, il est possible de choisir le nombre de ligne n, le nombre de colonnes m, et le type de LEDs : monochrone ou RGB. Le fichier est donc composé d'un formulaire qui envoie vers un autre fichier : matrice_leds.php
-matrice_leds.php : nous recevons donc le nombre de lignes et de colonnes désirées. Ce php permet de générer l'interface entre l'utilisateur et la matrice de LEDs avec les caractéristiques demandées. Il est également possible de constater les changements de couleurs afin de connaître à chaque instant le statut de chaque LED. De plus, il permet d'envoyer le statut des LEDs via un CGI_BIN et des requêtes AJAX qui seront créés lors de la prochaine séance.
-cercle.php : ce fichier permet la création de cercles afin de symboliser les LEDs dans le fichier matrice_leds.php, de plus il gère les différentes couleurs prédéfinies : à savoir le bleu, vert, rouge, orange et noir pour les LEDs éteintes.

Les page web sont opérationnelles mais on ne peut pas encore vérifier l'envoi des données dans le CGI_BIN avec les requêtes AJAX.

Page d'accueil de notre site
Liaison série

Nous avons simplement ouvert le port série afin de tester un programme C plutôt basique permettant simplement de changer la couleur des LEDs. Pour cela, on envoie les 256 couleurs les unes après les autres grâce à une matrice de 1 seule ligne et 256 colonnes.

Partie élec

Cahier des Charges

Pendant cette première séance, nous nous sommes définis un cahier des charges restreint compte tenu de la difficulté du sujet. A savoir, nous ne traiterons dans la partie électronique que la matrice 8*8 en monocouleur. Nous avons alors étudié la documentation technique de la matrice de Leds pour savoir comment la commander. Nos TP de microprocesseurs nous ont alors servis à trouver l'astuce pour afficher toute la matrice. Notre idée est de stocker des mots de 8 bits dans un registre, pour chaque ligne. Ensuite, on envoie les bits un à un puis on affiche les colonnes une à une, en synchronisation avec l'envoi des bits (même clock).

Il nous faut donc en tout 16 sorties : 8 pour les colonnes et 8 autres pour les lignes. La prochaine étape serait de mettre ça au propre sous Altium, ce qu'on a commencé à faire en fin de séance.

Deuxième séance

Partie info

CGI_BIN

nous avons récupéré le fichier qui a permis de tester la liaison série. Ainsi, nous avons un fichier qui sert exclusivement à ouvrir la liaison série : serial.c accompagné de serial.h

L'autre fichier .c sert à récupérer les différentes couleurs reçues via les requêtes AJAX. En effet, on traite les différentes couleurs grâce à ce fichier et on les stocke dans un tableau.

Foxboard

Nous avons configuré la FoxBoard via la liaison série avec les caractéristiques suivantes :

config foxboard

Ce qui nous permet ainsi d'accéder à celle-ci grâce au ssh et ainsi de transférer les trois fichiers nécessaires à l'interface web. Aussi, il a fallu recompiler les fichiers .c afin de créer l'exécutable CGI_BIN.

Partie élec

Réflexions et justifications

On utilise des registres 8 bits pour stocker les mots de 8 bits envoyés par la partie info.

On sélectionne une à une les bascules qui doivent recevoir les bons mots au bon moment. Au moment de l'envoie des mots, la liaison série envoie un bit de validation qui sert à incrémenter un compteur pour sélectionner les registres.

On utilise pour cela un démultiplexeur 1 vers 8 et en sortie un multiplexeur de même type.

Les compteurs utilisés sont des compteurs 3 bits pouvant compter de 0 à 7 (8 registres).

Pour le multiplexeur d'entrée, la réflexion fut plus difficile et des problèmes apparurent lors des tout premiers tests. En effet à l'origine, nous avions relié le compteur d'entrée à la même horloge que celui de sortie. Mais notre groupe s'est rapidement aperçu que cela ne fonctionnait pas. Il fallait que le compteur soit coordonné avec la réception du mot. Il était clair alors qu'il fallait relier le bit de présence du mot avec l'horloge de notre compteur d'entrée, afin d'obtenir le résultat voulu.

Schéma Altium 8*8
Schéma Altium 8*8 monocouleur
Tests

Après avoir fini et compilé le montage sur Altium, nous avons effectué des tests afin de savoir si il était correct. Nous avons donc branché les ports de sortie de la Nanoboard sur un oscilloscope :

Photo de l'analyseur logique

Troisième séance

Partie info

Tests

Nous avons commencé par vérifier que l'interface web fonctionnait. Il y avait un problème avec l'affichage de cercle.php car nous avions vérifier que lorsque l'on cliquait dessus, la valeur envoyée par matrice_leds.php changeait.

Voici la page lorsque l'on demande une matrice 16*16 :

Site web 1.png

Après avoir résolu ce problème d'affichage, nous avons rencontré un problème de l'envoi des couleurs grâce aux requêtes AJAX sur le banc d'essai. Cela ne venait pas du programme mais d'une mauvaise remise à zéro de l'arduino.

Partie élec

Cablage de la matrice 8*8 en rouge

Voici le schéma complet du câblage de notre matrice :

Schéma Electrique

Et la photo du câblage

Schéma du cablâge 0F
Schéma du cablage AA





















Schéma Altium 16*16

Ci dessous le schéma Altium :

Schéma matrice 16*16

Séances complémentaires

Tout d'abord nous avons voulu rendre la Foxboard autonome. Pour cela, nous avons modifier le rc.local. Nous avons intégrer les lignes permettant à l'arduino de ne pas se réinitialiser après la fermeture d'un programme et la ligne permettant de ne pas "perdre" de caractère : le "sleep". Ainsi, dès que la Foxboard est branchée, il suffit de sélectionner le mode 14 sur le banc d'essai et le site web permet de gérer celui-ci.

Ensuite, nous avons réalisé plusieurs images sur le site que nous avons réussi à afficher sur le banc d'essai arduino. L'une en monochrome et l'autre en RGB.

Enfin, nous avons également amélioré le code de matrice_leds.php afin d'intégrer trois boutons : - le premier "image surprise" permet d'afficher le manchot - le second "RESET" permet de remettre toutes les LEDs à l'état "OFF" - le dernier "polytech" permet d'afficher le logo de Polytech

Pour cela, nous avions préparé un programme en php mais celui n'aurait pas fonctionné notamment vis à vis de l'envoi des caractères correspondants à l'état de chaque LEDs. Grâce à Mr Redon, nous avons repris la base de ce programme et l'avons adapté pour le langage Javascript.

Pinguin data.jpg
Pinguin
Polytech