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

De Wiki de Projets IMA
(Partie info)
(Séances complémentaires)
 
(15 révisions intermédiaires par 2 utilisateurs non affichées)
Ligne 3 : Ligne 3 :
 
==== 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 ====
Ligne 22 : Ligne 22 :
 
====Partie info====
 
====Partie info====
  
''Partie développement interface web:''
+
=====Interface web=====
  
 
Cette interface a pour but de visualiser et de contrôler la matrice de LEDs.
 
Cette interface a pour but de visualiser et de contrôler la matrice de LEDs.
Ligne 28 : Ligne 28 :
 
Pour cela, l'interface est composée de trois fichiers :
 
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.php
+
:-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.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.
+
:-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.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.
+
:-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.
 
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.
  
''Partie liaison série :''
+
[[Image:Site web.png|thumb|center|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.
 
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.
Ligne 42 : Ligne 44 :
  
 
====Partie élec====
 
====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).
 
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).
Ligne 51 : Ligne 55 :
 
====Partie info====
 
====Partie info====
  
création du  CGI_BIN :
+
=====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
 
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
Ligne 57 : Ligne 61 :
 
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.
 
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.
  
Configuration de la FoxBoard :
+
=====Foxboard=====
  
 
Nous avons configuré la FoxBoard via la liaison série avec les caractéristiques suivantes :
 
Nous avons configuré la FoxBoard via la liaison série avec les caractéristiques suivantes :
Ligne 66 : Ligne 70 :
  
 
====Partie élec====
 
====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 utilise des registres 8 bits pour stocker les mots de 8 bits envoyés par la partie info.  
  
On sélectionne en simultanée 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 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.
 
On utilise pour cela un démultiplexeur 1 vers 8 et en sortie un multiplexeur de même type.
Ligne 76 : Ligne 82 :
  
 
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.
 
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=====
  
 
[[Image:Schema_Altium_8_8_monocouleur.jpg|thumb|center|Schéma Altium 8*8 monocouleur]]
 
[[Image:Schema_Altium_8_8_monocouleur.jpg|thumb|center|Schéma Altium 8*8 monocouleur]]
  
=====tests=====
+
=====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 :
 
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 :
  
[[Image:Nom de l'image|thumb|center|alt|Photo de l'analyseur logique]]
+
[[Image:Compteur sortie.jpg|thumb|center|alt|Photo de l'analyseur logique]]
  
 
==Troisième séance==
 
==Troisième séance==
Ligne 89 : Ligne 97 :
 
====Partie info====
 
====Partie info====
  
Test des programmes :
+
=====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 changeait.  
+
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.
  
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.
+
Voici la page lorsque l'on demande une matrice 16*16 :
  
====Partie élec====
+
[[Image:Site web 1.png|thumb|center]]
  
Le circuit Altium étant terminé, nous avons donc câblés la matrice 8*8 en rouge, ainsi que le schéma Altium pour le RGB 16*16. Ci dessous le schéma Altium :
+
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.
  
[[Image:Schema_Altium_16_16_monocouleur.jpg|thumb|center|Schéma matrice 16*16]]
+
====Partie élec====
  
Détermination du choix des résistances
+
=====Cablage de la matrice 8*8 en rouge=====
  
 
Voici le schéma complet du câblage de notre matrice :  
 
Voici le schéma complet du câblage de notre matrice :  
  
[[Image:schemaelec.jpg|thumb|center|Schéma Electrique]]
+
[[Image:SchemaElec.jpg|thumb|center|Schéma Electrique]]
  
 
Et la photo du câblage
 
Et la photo du câblage
  
 
[[Image:Cablage_0F.jpg|thumb|left|Schéma du cablâge 0F]][[Image:Cablage_AA.jpg|thumb|right|Schéma du cablage AA]]
 
[[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=====
 +
 +
Ci dessous le schéma Altium :
 +
 +
[[Image:Schema_Altium_16_16_monocouleur.jpg|thumb|center|Schéma matrice 16*16]]
  
<br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br />
 
 
==Séances complémentaires==
 
==Séances complémentaires==
  
Nous avons réalisé plusieurs images sur le site que nous avons réussi à afficher sur le banc d'essai arduino.
+
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.
  
 
[[Image:Pinguin_data.jpg|thumb|center]]
 
[[Image:Pinguin_data.jpg|thumb|center]]
  
 
[[Fichier:Pinguin.jpg|thumb|left|Pinguin]][[Fichier:Polytech.jpg|thumb|right|Polytech]]
 
[[Fichier:Pinguin.jpg|thumb|left|Pinguin]][[Fichier:Polytech.jpg|thumb|right|Polytech]]

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