<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="fr">
		<id>https://projets-ima.plil.fr/mediawiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Mde-bie</id>
		<title>Wiki de Projets IMA - Contributions de l’utilisateur [fr]</title>
		<link rel="self" type="application/atom+xml" href="https://projets-ima.plil.fr/mediawiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Mde-bie"/>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php/Sp%C3%A9cial:Contributions/Mde-bie"/>
		<updated>2026-05-15T13:30:16Z</updated>
		<subtitle>Contributions de l’utilisateur</subtitle>
		<generator>MediaWiki 1.29.2</generator>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=Outils_de_maquettage_virtuel&amp;diff=7816</id>
		<title>Outils de maquettage virtuel</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=Outils_de_maquettage_virtuel&amp;diff=7816"/>
				<updated>2013-12-02T08:28:44Z</updated>
		
		<summary type="html">&lt;p&gt;Mde-bie : /* Compte-rendu de réunion du 28 Novembre */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Matthias De Bie - Pierre-Jean Petitprez&lt;br /&gt;
&lt;br /&gt;
= Présentation =&lt;br /&gt;
&lt;br /&gt;
== Objectif ==&lt;br /&gt;
En collaboration avec l'équipe de recherche MINT (IRCICA/LIFL), l'objectif du projet est de développer, en se basant sur un échantillon de code déjà fourni, des outils simples et avec un nombre de commandes réduit permettant d’interagir avec des applications d'édition de géométrie. Cette application sert à créer une couche supplémentaire entre le SDK ThreeGear et toute autre partie responsable de l'affichage de la géométrie. Elle se présente sous forme d'un outil générique qui doit permettre d'interfacer les flux du SDK ThreeGear avec Unity dans un premier temps. Ensuite, notre système doit pouvoir fonctionner avec n'importe quelle source d'entrée (Kinect, Leap Motion, ...) et permettre la réalisation d'applications Unity dans la plus grande transparence et sans dépendance avec la source d'entrée.&lt;br /&gt;
&lt;br /&gt;
== Matériel requis ==&lt;br /&gt;
En raison de l'utilisation de code déjà écrit, il est nécessaire de reprendre les mêmes outils.&lt;br /&gt;
* Utilisation du moteur Unity[http://unity3d.com/] : requiert Microsoft Windows&lt;br /&gt;
* Bibliothèque ThreeGear[http://www.threegear.com/] permettant d'utiliser une Kinect et de faire du ''hand tracking'' : requiert un système 64 bits&lt;br /&gt;
* une caméra Microsoft Kinect&lt;br /&gt;
&lt;br /&gt;
=== Démarche d'installation ===&lt;br /&gt;
* Installation des librairies et pilotes requis :&lt;br /&gt;
** Java SE&lt;br /&gt;
** ThreeGear SDK&lt;br /&gt;
** OpenNI 1.5.2.23 64-bit&lt;br /&gt;
** NITE 1.5.2.21 64-bit&lt;br /&gt;
** SensorKinect 5.1.0.25 64-bit&lt;br /&gt;
** Calibration de la caméra et lancement du serveur avec les scripts camerasetup.bat et handdriver.bat&lt;br /&gt;
** Installation de Unity&lt;br /&gt;
** Autres : Visual Studio et bibliothèques requises pour la connexion TCP entre le serveur ThreeGear et le client&lt;br /&gt;
&lt;br /&gt;
= Gestion de Projet =&lt;br /&gt;
&lt;br /&gt;
=== Semaine 1 ===&lt;br /&gt;
&lt;br /&gt;
Choix des projets&lt;br /&gt;
&lt;br /&gt;
=== Semaine 2 ===&lt;br /&gt;
&lt;br /&gt;
Réunion avec le professeur encadrant le mercredi 18 septembre : description de l'état de l'art, définition des attentes et des besoins, définition des choix technologiques.&lt;br /&gt;
&amp;lt;br&amp;gt;Mise en place des outils sur PC personnel, l'idéal serait de pouvoir également travailler sur un poste fixe en salle de projet : nécessité d'installation de Windows 64 bit sur un poste.&lt;br /&gt;
&lt;br /&gt;
=== Semaines 3 et 4 ===&lt;br /&gt;
[[Fichier:3GearUnity.jpg|300px|thumb|right|Interfaces Unity et ThreeGear]]&lt;br /&gt;
Prise en main du SDK ThreeGear et de la scène Unity fournie, après la phase d'installation plutôt longue mais documentée.&lt;br /&gt;
Demande d'une licence académique chez ThreeGear (validité : 12 mois).&lt;br /&gt;
&lt;br /&gt;
Problématique : la caméra Kinect doit se trouver à une certaine hauteur au-dessus du plan de travail (de l'ordre de 1 m), en étant le plus horizontale possible afin de bénéficier de la meilleure détection des mains possible. &lt;br /&gt;
&lt;br /&gt;
Première étape : analyser et s'approprier le début de code fourni sous Unity. Repérer les différents flux d'entrée provenant de ThreeGear.&lt;br /&gt;
&lt;br /&gt;
Deuxième étape : Créer une application en C++ indépendante de Unity qui récupère le flux de sortie de ThreeGear et l'interprète.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Semaines 5 et 6 ===&lt;br /&gt;
&lt;br /&gt;
La phase de code débute réellement, avec l'écriture d'une application C++ qui reçoit les informations provenant de ThreeGear par TCP. &lt;br /&gt;
La protocole déjà écrit dans l'application Unity en C# est à réécrire complètement en utilisant les conventions C++.&lt;br /&gt;
&lt;br /&gt;
=== Semaine 7 ===&lt;br /&gt;
&lt;br /&gt;
L'utilisation de l'API ThreeGear se révèle assez fastidieuse car la documentation se limite aux headers des exemples C++.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Semaines 8 et 9 ===&lt;br /&gt;
&lt;br /&gt;
Nous avons développé une application qui récupère les messages de ThreeGear et qui les envoie tels quels à l'application Unity (sur protocole TCP). Les messages de configuration (Welcome et User) sont sauvegardés afin que la connexion des différentes parties puisse être indépendante. &amp;lt;br&amp;gt;&lt;br /&gt;
On ouvre une socket TCP entre le serveur ThreeGear et notre application sur le port 1988 (port par défaut de ThreeGear). Ensuite une deuxième socket est créée entre notre application et le client Unity sur le port 1989.&lt;br /&gt;
&lt;br /&gt;
=== Semaine 10 ===&lt;br /&gt;
&lt;br /&gt;
La prochaine étape est de repérer les messages provenant de ThreeGear et contenant les points remarquables comme les bouts des doigts, ou le centre de la main, ce qui va permettre de reconnaître de nouveaux mouvements et de nouvelles positions.&lt;br /&gt;
&lt;br /&gt;
=== Semaine 11 ===&lt;br /&gt;
&lt;br /&gt;
En utilisant les coordonnées des bouts des doigts nous essayons de repérer les amplitudes de déplacement pour chaque doigt entre chaque réception. De cette manière nous pourrions savoir quand survient un mouvement d'un doigt. Pour y parvenir nous utilisons un singleton de manière à mémoriser les valeurs des coordonnées.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Semaine 12 ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ON A TOUT CASSE !!!!!!!!!!!!!!!!!!!!!!!!!! --&amp;gt;&lt;br /&gt;
Nous récupérons les coordonnées d'autres points remarquables des mains : bouts des doigts, articulations, et poignet. Ces 2 derniers sont stockés par ThreeGear dans une matrice afin d'être utilisés pour le skinning des mains. Nous devons donc les extraire. &amp;lt;br&amp;gt; &lt;br /&gt;
Grâce à ces différents points nous pouvons calculer l'angle formé  par les doigts par rapport au plat de la main, c'est-à-dire l'angle que forment les phalanges avec les métacarpes. &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	/*&lt;br /&gt;
	*&lt;br /&gt;
	*	     B __________ C&lt;br /&gt;
	*	   /&lt;br /&gt;
	*	 /&lt;br /&gt;
	*      /&lt;br /&gt;
	*    A&lt;br /&gt;
	*&lt;br /&gt;
	*/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Cependant depuis que nous avons ajouté ces fonctionnalités, nous rencontrons un problème de réception des messages TCP avec Unity : l'analyse syntaxique des messages ne se déroule pas correctement. Il nous faut donc trouver d'où vient le problème et le résoudre.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Compte-rendu de réunion du 28 Novembre ====&lt;br /&gt;
&lt;br /&gt;
Plusieurs points ont été abordés et notre vision du projet a donc été mise à jour. &lt;br /&gt;
Voici la liste des points abordés : &lt;br /&gt;
* Utiliser la bibliothèque EIGEN pour la gestion des matrices, vecteurs, quaternions, ... De manière à ne pas dépendre de la bibliothèque de ThreeGear.&lt;br /&gt;
* Modifier la détection des signes pour être pris en compte dans le référentiel de la main de manière à ce que les signes ne soient pas mal interprétés lorsqu'une main bouge dans l'espace.&lt;br /&gt;
* Implémenter des Observer, un design pattern (Patron de conception) qui nous permet de moduler la partie détection du mouvement. Pour chaque signe à détecter on implémentera un Observer qui possédera une méthode update et qui prendra en argument seulement les &amp;quot;input&amp;quot; indispensables. &lt;br /&gt;
* Pour chaque geste reconnu, définir une probabilité pour ce geste.&lt;br /&gt;
* Détecter les mouvements en se basant sur une temporalité indépendante de la vitesse du flux d'informations.&lt;br /&gt;
* Possibilité, selon l'application, de réduire l'échelle d'observation : par exemple, si une application requiert les 10 doigts, observer les 10 doigts, mais si une application requiert uniquement les index, observer uniquement les index et oublier les autres doigts.&lt;br /&gt;
* La démonstration de l'outil pourrait se faire sous la forme d'une application Unity simple présentant les différents gestes.&lt;br /&gt;
Il s'avère que le projet devient un peu plus précis et défini.&lt;br /&gt;
&lt;br /&gt;
= Technologies =&lt;br /&gt;
&lt;br /&gt;
== ThreeGear ==&lt;br /&gt;
&lt;br /&gt;
ThreeGear est un système de captation de mouvement destiné à récupérer les positions ainsi que l'orientation des mains de l'utilisateur, il peut aussi interpréter quelques poses basiques (en utilisant notamment les 10 doigts) telles que la saisie et le pointé.&lt;br /&gt;
&lt;br /&gt;
==== Limitations ====&lt;br /&gt;
&lt;br /&gt;
Ce système n'est pas générique, dans le sens où il s'appuie sur une base de données pour reconnaitre des mouvements. Des poses et mouvements ne faisant pas partie de la base de données de ThreeGear ne peuvent pas être utilisés car ils ne seront pas reconnus. C'est pourquoi l'idée du projet est de rendre plus générique ce système.&lt;br /&gt;
&lt;br /&gt;
== Singleton ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Un singleton est un ton tout seul. --&amp;gt;&lt;br /&gt;
Afin de résoudre les problèmes d'accès à une variable dans les différents threads de l'application (partie client, partie serveur), il est nécessaire d'utiliser une variable &amp;quot;globale&amp;quot;. En C++, nous utilisons une classe qui contient les différentes variables nécessitant d'être accessibles partout. Or, cette classe ne doit être instanciée qu'une fois dans tout le programme. C'est pourquoi nous utilisons le pattern Singleton qui permet de créer une unique instance de la classe.&lt;br /&gt;
&lt;br /&gt;
== Librairie ASIO ==&lt;br /&gt;
&lt;br /&gt;
ASIO est une librairie C++ haut niveau spécialement conçue pour le développement d'applications réseau. L'avantage de la bibliothèque est d'être portable et non dépendante du système d'exploitation.&lt;br /&gt;
À l'instar de POSIX ASIO implémente les objets socket, bind, connect, listen ou accept ce qui nous permet de créer une connexion entre un serveur et un client TCP ou UDP.&lt;/div&gt;</summary>
		<author><name>Mde-bie</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=Outils_de_maquettage_virtuel&amp;diff=7752</id>
		<title>Outils de maquettage virtuel</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=Outils_de_maquettage_virtuel&amp;diff=7752"/>
				<updated>2013-11-29T15:41:16Z</updated>
		
		<summary type="html">&lt;p&gt;Mde-bie : /* Semaine 12 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Matthias De Bie - Pierre-Jean Petitprez&lt;br /&gt;
&lt;br /&gt;
= Présentation =&lt;br /&gt;
&lt;br /&gt;
== Objectif ==&lt;br /&gt;
En collaboration avec l'équipe de recherche MINT (IRCICA/LIFL), l'objectif du projet est de développer, en se basant sur un échantillon de code déjà fourni, des outils simples et avec un nombre de commandes réduit permettant d’interagir avec des applications d'édition de géométrie. Cette application sert à créer une couche supplémentaire entre le SDK ThreeGear et toute autre partie responsable de l'affichage de la géométrie. Elle se présente sous forme d'un outil générique qui doit permettre d'interfacer les flux du SDK ThreeGear avec Unity dans un premier temps.&lt;br /&gt;
&lt;br /&gt;
== Matériel requis ==&lt;br /&gt;
En raison de l'utilisation de code déjà écrit, il est nécessaire de reprendre les mêmes outils.&lt;br /&gt;
* Utilisation du moteur Unity[http://unity3d.com/] : requiert Microsoft Windows&lt;br /&gt;
* Bibliothèque ThreeGear[http://www.threegear.com/] permettant d'utiliser une Kinect et de faire du ''hand tracking'' : requiert un système 64 bits&lt;br /&gt;
* une caméra Microsoft Kinect&lt;br /&gt;
&lt;br /&gt;
=== Démarche d'installation ===&lt;br /&gt;
* Installation des librairies et pilotes requis :&lt;br /&gt;
** Java SE&lt;br /&gt;
** ThreeGear SDK&lt;br /&gt;
** OpenNI 1.5.2.23 64-bit&lt;br /&gt;
** NITE 1.5.2.21 64-bit&lt;br /&gt;
** SensorKinect 5.1.0.25 64-bit&lt;br /&gt;
** Calibration de la caméra et lancement du serveur avec les scripts camerasetup.bat et handdriver.bat&lt;br /&gt;
** Installation de Unity&lt;br /&gt;
** Autres : Visual Studio et bibliothèques requises pour la connexion TCP entre le serveur ThreeGear et le client&lt;br /&gt;
&lt;br /&gt;
= Gestion de Projet =&lt;br /&gt;
&lt;br /&gt;
=== Semaine 1 ===&lt;br /&gt;
&lt;br /&gt;
Choix des projets&lt;br /&gt;
&lt;br /&gt;
=== Semaine 2 ===&lt;br /&gt;
&lt;br /&gt;
Réunion avec le professeur encadrant le mercredi 18 septembre : description de l'état de l'art, définition des attentes et des besoins, définition des choix technologiques.&lt;br /&gt;
&amp;lt;br&amp;gt;Mise en place des outils sur PC personnel, l'idéal serait de pouvoir également travailler sur un poste fixe en salle de projet : nécessité d'installation de Windows 64 bit sur un poste.&lt;br /&gt;
&lt;br /&gt;
=== Semaines 3 et 4 ===&lt;br /&gt;
[[Fichier:3GearUnity.jpg|300px|thumb|right|Interfaces Unity et ThreeGear]]&lt;br /&gt;
Prise en main du SDK ThreeGear et de la scène Unity fournie, après la phase d'installation plutôt longue mais documentée.&lt;br /&gt;
Demande d'une licence académique chez ThreeGear (validité : 12 mois).&lt;br /&gt;
&lt;br /&gt;
Problématique : la caméra Kinect doit se trouver à une certaine hauteur au-dessus du plan de travail (de l'ordre de 1 m), en étant le plus horizontale possible afin de bénéficier de la meilleure détection des mains possible. &lt;br /&gt;
&lt;br /&gt;
Première étape : analyser et s'approprier le début de code fourni sous Unity. Repérer les différents flux d'entrée provenant de ThreeGear.&lt;br /&gt;
&lt;br /&gt;
Deuxième étape : Créer une application en C++ indépendante de Unity qui récupère le flux de sortie de ThreeGear et l'interprète.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Semaines 5 et 6 ===&lt;br /&gt;
&lt;br /&gt;
La phase de code débute réellement, avec l'écriture d'une application C++ qui reçoit les informations provenant de ThreeGear par TCP. &lt;br /&gt;
La protocole déjà écrit dans l'application Unity en C# est à réécrire complètement en utilisant les conventions C++.&lt;br /&gt;
&lt;br /&gt;
=== Semaine 7 ===&lt;br /&gt;
&lt;br /&gt;
L'utilisation de l'API ThreeGear se révèle assez fastidieuse car la documentation se limite aux headers des exemples C++.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Semaines 8 et 9 ===&lt;br /&gt;
&lt;br /&gt;
Nous avons développé une application qui récupère les messages de ThreeGear et qui les envoie tels quels à l'application Unity (sur protocole TCP). Les messages de configuration (Welcome et User) sont sauvegardés afin que la connexion des différentes parties puisse être indépendante. &amp;lt;br&amp;gt;&lt;br /&gt;
On ouvre une socket TCP entre le serveur ThreeGear et notre application sur le port 1988 (port par défaut de ThreeGear). Ensuite une deuxième socket est créée entre notre application et le client Unity sur le port 1989.&lt;br /&gt;
&lt;br /&gt;
=== Semaine 10 ===&lt;br /&gt;
&lt;br /&gt;
La prochaine étape est de repérer les messages provenant de ThreeGear et contenant les points remarquables comme les bouts des doigts, ou le centre de la main, ce qui va permettre de reconnaître de nouveaux mouvements et de nouvelles positions.&lt;br /&gt;
&lt;br /&gt;
=== Semaine 11 ===&lt;br /&gt;
&lt;br /&gt;
En utilisant les coordonnées des bouts des doigts nous essayons de repérer les amplitudes de déplacement pour chaque doigt entre chaque réception. De cette manière nous pourrions savoir quand survient un mouvement d'un doigt. Pour y parvenir nous utilisons un singleton de manière à mémoriser les valeurs des coordonnées.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Semaine 12 ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ON A TOUT CASSE !!!!!!!!!!!!!!!!!!!!!!!!!! --&amp;gt;&lt;br /&gt;
Nous récupérons les coordonnées d'autres points remarquables des mains : bouts des doigts, articulations, et poignet. Ces 2 derniers sont stockés par ThreeGear dans une matrice afin d'être utilisés pour le skinning des mains. Nous devons donc les extraire. &amp;lt;br&amp;gt; &lt;br /&gt;
Grâce à ces différents points nous pouvons calculer l'angle formé  par les doigts par rapport au plat de la main, c'est-à-dire l'angle que forment les phalanges avec les métacarpes. &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	/*&lt;br /&gt;
	*&lt;br /&gt;
	*	     B __________ C&lt;br /&gt;
	*	   /&lt;br /&gt;
	*	 /&lt;br /&gt;
	*      /&lt;br /&gt;
	*    A&lt;br /&gt;
	*&lt;br /&gt;
	*/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Cependant depuis que nous avons ajouté ces fonctionnalités, nous rencontrons un problème de réception des messages TCP avec Unity : l'analyse syntaxique des messages ne se déroule pas correctement. Il nous faut donc trouver d'où vient le problème et le résoudre.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Compte-rendu de réunion du 28 Novembre ====&lt;br /&gt;
&lt;br /&gt;
Plusieurs points ont été abordés et notre vision du projet a donc été mise à jour. &lt;br /&gt;
Voici la liste des points abordés : &lt;br /&gt;
* Utiliser la bibliothèque EIGEN pour la gestion des matrices, vecteurs, quaternions, ... De manière à ne pas dépendre de la bibliothèque de ThreeGear.&lt;br /&gt;
* Modifier la détection des signes pour être pris en compte dans le référentiel de la main de manière à ce que les signes ne soient pas mal interprétés lorsqu'un main bouge dans l'espace.&lt;br /&gt;
* Implémenter des Observer, un design pattern (Patron de conception) qui nous permet de moduler la partie détection du mouvement. Pour chaque signe à détecter on implémentera un Observer qui possédera une méthode update et qui prendra en argument seulement les &amp;quot;input&amp;quot; indispensables. &lt;br /&gt;
* Pour chaque geste reconnu, définir une probabilité pour ce geste.&lt;br /&gt;
* Détecter les mouvements en se basant sur une temporalité indépendante de la vitesse du flux d'informations.&lt;br /&gt;
* Possibilité, selon l'application, de réduire l'échelle d'observation : par exemple, si une application requiert les 10 doigts, observer les 10 doigts, mais si une application requiert uniquement les index, observer uniquement les index et oublier les autres doigts.&lt;br /&gt;
* La démonstration de l'outil pourrait se faire sous la forme d'une application Unity simple présentant les différents gestes.&lt;br /&gt;
Il s'avère que le projet devient un peu plus précis et défini.&lt;br /&gt;
&lt;br /&gt;
= Technologies =&lt;br /&gt;
&lt;br /&gt;
== ThreeGear ==&lt;br /&gt;
&lt;br /&gt;
ThreeGear est un système de captation de mouvement destiné à récupérer les positions ainsi que l'orientation des mains de l'utilisateur, il peut aussi interpréter quelques poses basiques (en utilisant notamment les 10 doigts) telles que la saisie et le pointé.&lt;br /&gt;
&lt;br /&gt;
==== Limitations ====&lt;br /&gt;
&lt;br /&gt;
Ce système n'est pas générique, dans le sens où il s'appuie sur une base de données pour reconnaitre des mouvements. Des poses et mouvements ne faisant pas partie de la base de données de ThreeGear ne peuvent pas être utilisés car ils ne seront pas reconnus. C'est pourquoi l'idée du projet est de rendre plus générique ce système.&lt;br /&gt;
&lt;br /&gt;
== Singleton ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Un singleton est un ton tout seul. --&amp;gt;&lt;br /&gt;
Afin de résoudre les problèmes d'accès à une variable dans les différents threads de l'application (partie client, partie serveur), il est nécessaire d'utiliser une variable &amp;quot;globale&amp;quot;. En C++, nous utilisons une classe qui contient les différentes variables nécessitant d'être accessibles partout. Or, cette classe ne doit être instanciée qu'une fois dans tout le programme. C'est pourquoi nous utilisons le pattern Singleton qui permet de créer une unique instance de la classe.&lt;br /&gt;
&lt;br /&gt;
== Librairie ASIO ==&lt;br /&gt;
&lt;br /&gt;
ASIO est une librairie C++ haut niveau spécialement conçue pour le développement d'applications réseau. L'avantage de la bibliothèque est d'être portable et non dépendante du système d'exploitation.&lt;br /&gt;
À l'instar de POSIX ASIO implémente les objets socket, bind, connect, listen ou accept ce qui nous permet de créer une connexion entre un serveur et un client TCP ou UDP.&lt;/div&gt;</summary>
		<author><name>Mde-bie</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=Outils_de_maquettage_virtuel&amp;diff=7602</id>
		<title>Outils de maquettage virtuel</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=Outils_de_maquettage_virtuel&amp;diff=7602"/>
				<updated>2013-11-21T08:44:38Z</updated>
		
		<summary type="html">&lt;p&gt;Mde-bie : /* Technologies */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Matthias De Bie - Pierre-Jean Petitprez&lt;br /&gt;
&lt;br /&gt;
= Présentation =&lt;br /&gt;
&lt;br /&gt;
== Objectif ==&lt;br /&gt;
En collaboration avec l'équipe de recherche MINT (IRCICA/LIFL), l'objectif du projet est de développer, en se basant sur un échantillon de code déjà fourni, des outils simples et avec un nombre de commandes réduit permettant d’interagir avec des applications d'édition de géométrie. Cette application sert à créer une couche supplémentaire entre le SDK ThreeGear et toute autre partie responsable de l'affichage de la géométrie. Elle se présente sous forme d'un outil générique qui doit permettre d'interfacer les flux du SDK ThreeGear avec Unity dans un premier temps.&lt;br /&gt;
&lt;br /&gt;
== Matériel requis ==&lt;br /&gt;
En raison de l'utilisation de code déjà écrit, il est nécessaire de reprendre les mêmes outils.&lt;br /&gt;
* Utilisation du moteur Unity[http://unity3d.com/] : requiert Microsoft Windows&lt;br /&gt;
* Bibliothèque ThreeGear[http://www.threegear.com/] permettant d'utiliser une Kinect et de faire du ''hand tracking'' : requiert un système 64 bits&lt;br /&gt;
* une caméra Microsoft Kinect&lt;br /&gt;
&lt;br /&gt;
=== Démarche d'installation ===&lt;br /&gt;
* Installation des librairies et pilotes requis :&lt;br /&gt;
** Java SE&lt;br /&gt;
** ThreeGear SDK&lt;br /&gt;
** OpenNI 1.5.2.23 64-bit&lt;br /&gt;
** NITE 1.5.2.21 64-bit&lt;br /&gt;
** SensorKinect 5.1.0.25 64-bit&lt;br /&gt;
** Calibration de la caméra et lancement du serveur avec les scripts camerasetup.bat et handdriver.bat&lt;br /&gt;
** Installation de Unity&lt;br /&gt;
** Autres : Visual Studio et bibliothèques requises pour la connexion TCP entre le serveur ThreeGear et le client&lt;br /&gt;
&lt;br /&gt;
= Gestion de Projet =&lt;br /&gt;
&lt;br /&gt;
=== Semaine 1 ===&lt;br /&gt;
&lt;br /&gt;
Choix des projets&lt;br /&gt;
&lt;br /&gt;
=== Semaine 2 ===&lt;br /&gt;
&lt;br /&gt;
Réunion avec le professeur encadrant le mercredi 18 septembre : description de l'état de l'art, définition des attentes et des besoins, définition des choix technologiques.&lt;br /&gt;
&amp;lt;br&amp;gt;Mise en place des outils sur PC personnel, l'idéal serait de pouvoir également travailler sur un poste fixe en salle de projet : nécessité d'installation de Windows 64 bit sur un poste.&lt;br /&gt;
&lt;br /&gt;
=== Semaines 3 et 4 ===&lt;br /&gt;
[[Fichier:3GearUnity.jpg|300px|thumb|right|Interfaces Unity et ThreeGear]]&lt;br /&gt;
Prise en main du SDK ThreeGear et de la scène Unity fournie, après la phase d'installation plutôt longue mais documentée.&lt;br /&gt;
Demande d'une licence académique chez ThreeGear (validité : 12 mois).&lt;br /&gt;
&lt;br /&gt;
Problématique : la caméra Kinect doit se trouver à une certaine hauteur au-dessus du plan de travail (de l'ordre de 1 m), en étant le plus horizontale possible afin de bénéficier de la meilleure détection des mains possible. &lt;br /&gt;
&lt;br /&gt;
Première étape : analyser et s'approprier le début de code fourni sous Unity. Repérer les différents flux d'entrée provenant de ThreeGear.&lt;br /&gt;
&lt;br /&gt;
Deuxième étape : Créer une application en C++ indépendante de Unity qui récupère le flux de sortie de ThreeGear et l'interprète.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Semaines 5 et 6 ===&lt;br /&gt;
&lt;br /&gt;
La phase de code débute réellement, avec l'écriture d'une application C++ qui reçoit les informations provenant de ThreeGear par TCP. &lt;br /&gt;
La protocole déjà écrit dans l'application Unity en C# est à réécrire complètement en utilisant les conventions C++.&lt;br /&gt;
&lt;br /&gt;
=== Semaine 7 ===&lt;br /&gt;
&lt;br /&gt;
L'utilisation de l'API ThreeGear se révèle assez fastidieuse car la documentation se limite aux headers des exemples C++.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Semaines 8 et 9 ===&lt;br /&gt;
&lt;br /&gt;
Nous avons développé une application qui récupère les messages de ThreeGear et qui les envoie tels quels à l'application Unity (sur protocole TCP). Les messages de configuration (Welcome et User) sont sauvegardés afin que la connexion des différentes parties puisse être indépendante. &amp;lt;br&amp;gt;&lt;br /&gt;
On ouvre une socket TCP entre le serveur ThreeGear et notre application sur le port 1988 (port par défaut de ThreeGear). Ensuite une deuxième socket est créée entre notre application et le client Unity sur le port 1989.&lt;br /&gt;
&lt;br /&gt;
=== Semaine 10 ===&lt;br /&gt;
&lt;br /&gt;
La prochaine étape est de repérer les messages provenant de ThreeGear et contenant les points remarquables comme les bouts des doigts, ou le centre de la main, ce qui va permettre de reconnaître de nouveaux mouvements et de nouvelles positions.&lt;br /&gt;
&lt;br /&gt;
=== Semaine 11 ===&lt;br /&gt;
&lt;br /&gt;
En utilisant les coordonnées des bouts des doigts nous essayons de repérer les amplitudes de déplacement pour chaque doigt entre chaque réception. De cette manière nous pourrions savoir quand survient un mouvement d'un doigt. Pour y parvenir nous utilisons un singleton de manière à mémoriser les valeurs des coordonnées.&lt;br /&gt;
&lt;br /&gt;
= Technologies =&lt;br /&gt;
&lt;br /&gt;
== ThreeGear ==&lt;br /&gt;
&lt;br /&gt;
ThreeGear est un système de captation de mouvement destiné à récupérer les positions ainsi que l'orientation des mains de l'utilisateur, il peut aussi interpréter quelques poses basiques (en utilisant notamment les 10 doigts) telles que la saisie et le pointé.&lt;br /&gt;
&lt;br /&gt;
==== Limitations ====&lt;br /&gt;
&lt;br /&gt;
Ce système n'est pas générique, dans le sens où il s'appuie sur une base de données pour reconnaitre des mouvements. Des poses et mouvements ne faisant pas partie de la base de données de ThreeGear ne peuvent pas être utilisés car ils ne seront pas reconnus. C'est pourquoi l'idée du projet est de rendre plus générique ce système.&lt;br /&gt;
&lt;br /&gt;
== Singleton ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Un singleton est un ton tout seul. --&amp;gt;&lt;br /&gt;
Afin de résoudre les problèmes d'accès à une variable dans les différents threads de l'application (partie client, partie serveur), il est nécessaire d'utiliser une variable &amp;quot;globale&amp;quot;. En C++, nous utilisons une classe qui contient les différentes variables nécessitant d'être accessibles partout. Or, cette classe ne doit être instanciée qu'une fois dans tout le programme. C'est pourquoi nous utilisons le pattern Singleton qui permet de créer une unique instance de la classe.&lt;br /&gt;
&lt;br /&gt;
== Librairie ASIO ==&lt;br /&gt;
&lt;br /&gt;
ASIO est une librairie C++ haut niveau spécialement conçue pour le développement d'applications réseau. L'avantage de la bibliothèque est d'être portable et non dépendante du système d'exploitation.&lt;br /&gt;
À l'instar de POSIX ASIO implémente les objets socket, bind, connect, listen ou accept ce qui nous permet de créer une connexion entre un serveur et un client TCP ou UDP.&lt;/div&gt;</summary>
		<author><name>Mde-bie</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=Outils_de_maquettage_virtuel&amp;diff=7597</id>
		<title>Outils de maquettage virtuel</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=Outils_de_maquettage_virtuel&amp;diff=7597"/>
				<updated>2013-11-20T09:37:35Z</updated>
		
		<summary type="html">&lt;p&gt;Mde-bie : /* Gestion de Projet */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Matthias De Bie - Pierre-Jean Petitprez&lt;br /&gt;
&lt;br /&gt;
= Présentation =&lt;br /&gt;
&lt;br /&gt;
== Objectif ==&lt;br /&gt;
En collaboration avec l'équipe de recherche MINT (IRCICA/LIFL), l'objectif du projet est de développer, en se basant sur un échantillon de code déjà fourni, des outils simples et avec un nombre de commandes réduit permettant d’interagir avec des applications d'édition de géométrie. Cette application sert à créer une couche supplémentaire entre le SDK ThreeGear et toute autre partie responsable de l'affichage de la géométrie. Elle se présente sous forme d'un outil générique qui doit permettre d'interfacer les flux du SDK ThreeGear avec Unity dans un premier temps.&lt;br /&gt;
&lt;br /&gt;
== Matériel requis ==&lt;br /&gt;
En raison de l'utilisation de code déjà écrit, il est nécessaire de reprendre les mêmes outils.&lt;br /&gt;
* Utilisation du moteur Unity[http://unity3d.com/] : requiert Microsoft Windows&lt;br /&gt;
* Bibliothèque ThreeGear[http://www.threegear.com/] permettant d'utiliser une Kinect et de faire du ''hand tracking'' : requiert un système 64 bits&lt;br /&gt;
* une caméra Microsoft Kinect&lt;br /&gt;
&lt;br /&gt;
=== Démarche d'installation ===&lt;br /&gt;
* Installation des librairies et pilotes requis :&lt;br /&gt;
** Java SE&lt;br /&gt;
** ThreeGear SDK&lt;br /&gt;
** OpenNI 1.5.2.23 64-bit&lt;br /&gt;
** NITE 1.5.2.21 64-bit&lt;br /&gt;
** SensorKinect 5.1.0.25 64-bit&lt;br /&gt;
** Calibration de la caméra et lancement du serveur avec les scripts camerasetup.bat et handdriver.bat&lt;br /&gt;
** Installation de Unity&lt;br /&gt;
** Autres : Visual Studio et bibliothèques requises pour la connexion TCP entre le serveur ThreeGear et le client&lt;br /&gt;
&lt;br /&gt;
= Gestion de Projet =&lt;br /&gt;
&lt;br /&gt;
=== Semaine 1 ===&lt;br /&gt;
&lt;br /&gt;
Choix des projets&lt;br /&gt;
&lt;br /&gt;
=== Semaine 2 ===&lt;br /&gt;
&lt;br /&gt;
Réunion avec le professeur encadrant le mercredi 18 septembre : description de l'état de l'art, définition des attentes et des besoins, définition des choix technologiques.&lt;br /&gt;
&amp;lt;br&amp;gt;Mise en place des outils sur PC personnel, l'idéal serait de pouvoir également travailler sur un poste fixe en salle de projet : nécessité d'installation de Windows 64 bit sur un poste.&lt;br /&gt;
&lt;br /&gt;
=== Semaines 3 et 4 ===&lt;br /&gt;
[[Fichier:3GearUnity.jpg|300px|thumb|right|Interfaces Unity et ThreeGear]]&lt;br /&gt;
Prise en main du SDK ThreeGear et de la scène Unity fournie, après la phase d'installation plutôt longue mais documentée.&lt;br /&gt;
Demande d'une licence académique chez ThreeGear (validité : 12 mois).&lt;br /&gt;
&lt;br /&gt;
Problématique : la caméra Kinect doit se trouver à une certaine hauteur au-dessus du plan de travail (de l'ordre de 1 m), en étant le plus horizontale possible afin de bénéficier de la meilleure détection des mains possible. &lt;br /&gt;
&lt;br /&gt;
Première étape : analyser et s'approprier le début de code fourni sous Unity. Repérer les différents flux d'entrée provenant de ThreeGear.&lt;br /&gt;
&lt;br /&gt;
Deuxième étape : Créer une application en C++ indépendante de Unity qui récupère le flux de sortie de ThreeGear et l'interprète.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Semaines 5 et 6 ===&lt;br /&gt;
&lt;br /&gt;
La phase de code débute réellement, avec l'écriture d'une application C++ qui reçoit les informations provenant de ThreeGear par TCP. &lt;br /&gt;
La protocole déjà écrit dans l'application Unity en C# est à réécrire complètement en utilisant les conventions C++.&lt;br /&gt;
&lt;br /&gt;
=== Semaine 7 ===&lt;br /&gt;
&lt;br /&gt;
L'utilisation de l'API ThreeGear se révèle assez fastidieuse car la documentation se limite aux headers des exemples C++.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Semaines 8 et 9 ===&lt;br /&gt;
&lt;br /&gt;
Nous avons développé une application qui récupère les messages de ThreeGear et qui les envoie tels quels à l'application Unity (sur protocole TCP). Les messages de configuration (Welcome et User) sont sauvegardés afin que la connexion des différentes parties puisse être indépendante. &amp;lt;br&amp;gt;&lt;br /&gt;
On ouvre une socket TCP entre le serveur ThreeGear et notre application sur le port 1988 (port par défaut de ThreeGear). Ensuite une deuxième socket est créée entre notre application et le client Unity sur le port 1989.&lt;br /&gt;
&lt;br /&gt;
=== Semaine 10 ===&lt;br /&gt;
&lt;br /&gt;
La prochaine étape est de repérer les messages provenant de ThreeGear et contenant les points remarquables comme les bouts des doigts, ou le centre de la main, ce qui va permettre de reconnaître de nouveaux mouvements et de nouvelles positions.&lt;br /&gt;
&lt;br /&gt;
=== Semaine 11 ===&lt;br /&gt;
&lt;br /&gt;
En utilisant les coordonnées des bouts des doigts nous essayons de repérer les amplitudes de déplacement pour chaque doigt entre chaque réception. De cette manière nous pourrions savoir quand survient un mouvement d'un doigt. Pour y parvenir nous utilisons un singleton de manière à mémoriser les valeurs des coordonnées.&lt;br /&gt;
&lt;br /&gt;
= Technologies =&lt;br /&gt;
&lt;br /&gt;
== ThreeGear ==&lt;br /&gt;
&lt;br /&gt;
ThreeGear est un système de captation de mouvement destiné à récupérer les positions ainsi que l'orientation des mains de l'utilisateur, il peut aussi interpréter quelques poses basiques (en utilisant notamment les 10 doigts) telles que la saisie et le pointé.&lt;br /&gt;
&lt;br /&gt;
==== Limitations ====&lt;br /&gt;
&lt;br /&gt;
Ce système n'est pas générique, dans le sens où il s'appuie sur une base de données pour reconnaitre des mouvements. Des poses et mouvements ne faisant pas partie de la base de données de ThreeGear ne peuvent pas être utilisés car ils ne seront pas reconnus. C'est pourquoi l'idée du projet est de rendre plus générique ce système.&lt;br /&gt;
&lt;br /&gt;
== Singleton ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Un singleton est un ton tout seul. --&amp;gt;&lt;br /&gt;
Afin de résoudre les problèmes d'accès à une variable dans les différents threads de l'application (partie client, partie serveur), il est nécessaire d'utiliser une variable &amp;quot;globale&amp;quot;. En C++, nous utilisons une classe qui contient les différentes variables nécessitant d'être accessibles partout. Or, cette classe ne doit être instanciée qu'une fois dans tout le programme. C'est pourquoi nous utilisons le pattern Singleton qui permet de créer une unique instance de la classe.&lt;/div&gt;</summary>
		<author><name>Mde-bie</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=Outils_de_maquettage_virtuel&amp;diff=7309</id>
		<title>Outils de maquettage virtuel</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=Outils_de_maquettage_virtuel&amp;diff=7309"/>
				<updated>2013-10-03T07:56:33Z</updated>
		
		<summary type="html">&lt;p&gt;Mde-bie : /* Semaines 3 et 4 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Matthias De Bie - Pierre-Jean Petitprez&lt;br /&gt;
&lt;br /&gt;
= Présentation =&lt;br /&gt;
&lt;br /&gt;
== Objectif ==&lt;br /&gt;
En collaboration avec l'équipe de recherche MINT (IRCICA/LIFL), l'objectif du projet est de développer, en se basant sur un échantillon de code déjà fourni, des outils simples et avec un nombre de commandes réduit permettant d’interagir avec des applications d'édition de géométrie. Cette application sert à créer une couche supplémentaire entre le SDK ThreeGear et toute autre partie responsable de l'affichage de la géométrie. Elle se présente sous forme d'un outil générique qui doit permettre d'interfacer les flux du SDK ThreeGear avec Unity dans un premier temps.&lt;br /&gt;
&lt;br /&gt;
== Matériel requis ==&lt;br /&gt;
En raison de l'utilisation de code déjà écrit, il est nécessaire de reprendre les mêmes outils.&lt;br /&gt;
* Utilisation du moteur Unity[http://unity3d.com/] : requiert Microsoft Windows&lt;br /&gt;
* Bibliothèque ThreeGear[http://www.threegear.com/] permettant d'utiliser une Kinect : requiert un système 64 bits&lt;br /&gt;
* une caméra Microsoft Kinect&lt;br /&gt;
&lt;br /&gt;
=== Démarche d'installation ===&lt;br /&gt;
* Installation des librairies et pilotes requis :&lt;br /&gt;
** Java SE&lt;br /&gt;
** ThreeGear SDK&lt;br /&gt;
** OpenNI 1.5.2.23 64-bit&lt;br /&gt;
** NITE 1.5.2.21 64-bit&lt;br /&gt;
** SensorKinect 5.1.0.25 64-bit&lt;br /&gt;
** Calibration de la caméra avec les scripts camerasetup.bat et handdriver.bat&lt;br /&gt;
** Installation de Unity&lt;br /&gt;
&lt;br /&gt;
= Gestion de Projet =&lt;br /&gt;
&lt;br /&gt;
=== Présentation ===&lt;br /&gt;
&lt;br /&gt;
=== Semaine 1 ===&lt;br /&gt;
&lt;br /&gt;
Choix des projets&lt;br /&gt;
&lt;br /&gt;
=== Semaine 2 ===&lt;br /&gt;
&lt;br /&gt;
Réunion avec le professeur encadrant le mercredi 18 septembre : description de l'état de l'art, définition des attentes et des besoins, définition des choix technologiques.&lt;br /&gt;
&amp;lt;br&amp;gt;Mise en place des outils sur PC personnel, l'idéal serait de pouvoir également travailler sur un poste fixe en salle de projet : nécessité d'installation de Windows 64 bit sur un poste.&lt;br /&gt;
&lt;br /&gt;
=== Semaines 3 et 4 ===&lt;br /&gt;
[[Fichier:3GearUnity.jpg|300px|thumb|right|Interfaces Unity et ThreeGear]]&lt;br /&gt;
Prise en main du SDK ThreeGear et de la scène Unity fournie, après la phase d'installation plutôt longue mais documentée.&lt;br /&gt;
Demande d'une licence académique chez ThreeGear (validité : 12 mois).&lt;br /&gt;
&lt;br /&gt;
Problématique : la caméra Kinect doit se trouver à une certaine hauteur au-dessus du plan de travail (de l'ordre de 1 m), en étant le plus horizontale possible afin de bénéficier de la meilleure détection des mains possible. &lt;br /&gt;
&lt;br /&gt;
Première étape : analyser et s'approprier le début de code fourni sous Unity. Repérer les différents flux d'entrée provenant de ThreeGear.&lt;br /&gt;
&lt;br /&gt;
Deuxième étape : Créer une application en C++ indépendante de Unity qui récupère le flux de sortie de ThreeGear et l'interprète.&lt;/div&gt;</summary>
		<author><name>Mde-bie</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=Outils_de_maquettage_virtuel&amp;diff=7308</id>
		<title>Outils de maquettage virtuel</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=Outils_de_maquettage_virtuel&amp;diff=7308"/>
				<updated>2013-10-03T07:49:00Z</updated>
		
		<summary type="html">&lt;p&gt;Mde-bie : /* Objectif */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Matthias De Bie - Pierre-Jean Petitprez&lt;br /&gt;
&lt;br /&gt;
= Présentation =&lt;br /&gt;
&lt;br /&gt;
== Objectif ==&lt;br /&gt;
En collaboration avec l'équipe de recherche MINT (IRCICA/LIFL), l'objectif du projet est de développer, en se basant sur un échantillon de code déjà fourni, des outils simples et avec un nombre de commandes réduit permettant d’interagir avec des applications d'édition de géométrie. Cette application sert à créer une couche supplémentaire entre le SDK ThreeGear et toute autre partie responsable de l'affichage de la géométrie. Elle se présente sous forme d'un outil générique qui doit permettre d'interfacer les flux du SDK ThreeGear avec Unity dans un premier temps.&lt;br /&gt;
&lt;br /&gt;
== Matériel requis ==&lt;br /&gt;
En raison de l'utilisation de code déjà écrit, il est nécessaire de reprendre les mêmes outils.&lt;br /&gt;
* Utilisation du moteur Unity[http://unity3d.com/] : requiert Microsoft Windows&lt;br /&gt;
* Bibliothèque ThreeGear[http://www.threegear.com/] permettant d'utiliser une Kinect : requiert un système 64 bits&lt;br /&gt;
* une caméra Microsoft Kinect&lt;br /&gt;
&lt;br /&gt;
=== Démarche d'installation ===&lt;br /&gt;
* Installation des librairies et pilotes requis :&lt;br /&gt;
** Java SE&lt;br /&gt;
** ThreeGear SDK&lt;br /&gt;
** OpenNI 1.5.2.23 64-bit&lt;br /&gt;
** NITE 1.5.2.21 64-bit&lt;br /&gt;
** SensorKinect 5.1.0.25 64-bit&lt;br /&gt;
** Calibration de la caméra avec les scripts camerasetup.bat et handdriver.bat&lt;br /&gt;
** Installation de Unity&lt;br /&gt;
&lt;br /&gt;
= Gestion de Projet =&lt;br /&gt;
&lt;br /&gt;
=== Présentation ===&lt;br /&gt;
&lt;br /&gt;
=== Semaine 1 ===&lt;br /&gt;
&lt;br /&gt;
Choix des projets&lt;br /&gt;
&lt;br /&gt;
=== Semaine 2 ===&lt;br /&gt;
&lt;br /&gt;
Réunion avec le professeur encadrant le mercredi 18 septembre : description de l'état de l'art, définition des attentes et des besoins, définition des choix technologiques.&lt;br /&gt;
&amp;lt;br&amp;gt;Mise en place des outils sur PC personnel, l'idéal serait de pouvoir également travailler sur un poste fixe en salle de projet : nécessité d'installation de Windows 64 bit sur un poste.&lt;br /&gt;
&lt;br /&gt;
=== Semaines 3 et 4 ===&lt;br /&gt;
[[Fichier:3GearUnity.jpg|300px|thumb|right|Interfaces Unity et ThreeGear]]&lt;br /&gt;
Prise en main du SDK ThreeGear et de la scène Unity fournie, après la phase d'installation plutôt longue mais documentée.&lt;br /&gt;
&lt;br /&gt;
Problématique : la caméra Kinect doit se trouver à une certaine hauteur au-dessus du plan de travail (de l'ordre de 1 m), en étant le plus horizontale possible afin de bénéficier de la meilleure détection des mains possible. &lt;br /&gt;
&lt;br /&gt;
Première étape : analyser et s'approprier le début de code fourni sous Unity.&lt;/div&gt;</summary>
		<author><name>Mde-bie</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=Matrice_de_LED_3D&amp;diff=5958</id>
		<title>Matrice de LED 3D</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=Matrice_de_LED_3D&amp;diff=5958"/>
				<updated>2013-05-10T14:05:38Z</updated>
		
		<summary type="html">&lt;p&gt;Mde-bie : /* Rendu */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Présentation ==&lt;br /&gt;
Le but de ce projet est de concevoir une matrice 3D composée de 512 leds (8x8x8) et d'y faire afficher dans un premier temps des formes géométriques (par exemple à partir de formules mathématiques) et dans un second temps de réaliser un jeu de type Snake, pilotable grâce à une manette de Wii.&lt;br /&gt;
Le tout sera présenté lors des journées Portes Ouvertes de l'école afin de promouvoir le département IMA.&lt;br /&gt;
&lt;br /&gt;
=== Matériel requis ===&lt;br /&gt;
* 512 LED et leur connectique&lt;br /&gt;
* un Arduino&lt;br /&gt;
* des composants permettant de commander les 64 entrées et 8 sorties de la matrice avec beaucoup moins de sorties disponibles sur l'Arduino&lt;br /&gt;
** (x1) SN74HCT138 - 3-line to 8-line Decoder (pour les etages)&lt;br /&gt;
** (x8) 74HCT595 - 8-bit Serial-in/serial or parallel-out shift register with output latches 3-state&lt;br /&gt;
** (x8) 74HCT244 - 8-bit buffer/line driver with 3-state outputs&lt;br /&gt;
** 2e solution :  &lt;br /&gt;
*** 74HC154 decoder 4-16&lt;br /&gt;
*** (x8) ULN2804 buffer 8 bit ou (x8) UDN2981 buffer 8 bit&lt;br /&gt;
&lt;br /&gt;
* de quoi alimenter les LED et les composants (bloc secteur pour l'Arduino, un régulateur 5V pour les composants)&lt;br /&gt;
* un Nunchuck&lt;br /&gt;
&lt;br /&gt;
=== Rendu ===&lt;br /&gt;
* Rapport de projet en PDF : [[Fichier:Rapport_Matrice3D_DeBie_Petitprez.pdf‎]]&lt;br /&gt;
* Programme pour le Snake en 2D piloté par nunchuck sur une matrice 8x8 Sparkfun : [[Fichier:Snake2D.zip]]&lt;br /&gt;
* Programme pour le Snake sur la matrice 3D (non 100% fonctionnel) : [[Fichier:Snake3D.zip‎]]&lt;br /&gt;
* Programme de test pour la matrice 3D (effet &amp;quot;rideau de pluie&amp;quot;) : [[Fichier:Matrice3D rideau pluie.zip‎]]&lt;br /&gt;
* Projet Altium designer de la carte de commande pour la matrice de LED : [[Fichier:Altium part.zip]]&lt;br /&gt;
&lt;br /&gt;
== Avancement du projet==&lt;br /&gt;
=== Lundi 4 Février ===&lt;br /&gt;
Cette première séance a été mise à profit afin de mieux cerner le projet, en discutant avec les enseignants et en commançant les recherches sur la manière de réaliser la matrice.&lt;br /&gt;
=== Jeudi 7 Février ===&lt;br /&gt;
Traçage de plans de montage, remise en question quant au moyen de commander les 64 colonnes de leds (le multiplexage semblait le plus évident mais d'autres possibilités comme des registres à décalage pourraient également convenir).&lt;br /&gt;
=== Lundi 11 Février ===&lt;br /&gt;
Définition des moyens en composants pour créer le circuit de commande. Création du patron du guide qui servira à aligner les leds et les souder facilement.&lt;br /&gt;
&amp;lt;br&amp;gt;Ce patron a été transmis à la personne qui se chargera de fabriquer le support par commande numérique.&lt;br /&gt;
&lt;br /&gt;
=== Jeudi 14 Février ===&lt;br /&gt;
Séance mise à profit pour compter et tester les 512 LEDs (en y ajoutant quelques pièces en cas de souci au montage).&lt;br /&gt;
=== Lundi 25 Février ===&lt;br /&gt;
Recherche à propos du moyen de connecter un nunchuck en filaire ou une Wiimote en bluetooth. La Wiimote requiert un type de connexion non offert nativement par les cartes Arduino (Bluetooth HID). Une solution serait d'utiliser un shield bluetooth externe, mais cela complique le montage et réduit le nombre de broches. En revanche brancher un Nunchuck en filaire ne semble pas poser de problème particulier.&lt;br /&gt;
&amp;lt;br&amp;gt;Création de PCB pour la carte qui supportera les composants et redéfinition des composants nécessaires (les ULN2803 seront utilisés à la place des 74HCT244 dans la première solution).&lt;br /&gt;
&lt;br /&gt;
=== Mercredi 27 Février ===&lt;br /&gt;
Le travail de création du PCB est bien avancé, il a été retardé car il fallait recréer des librairies de composants utilisés dans le montage.&lt;br /&gt;
&amp;lt;br&amp;gt;Un petit inconvénient est survenu, il semble que les ULN2803 ne soient pas parfaitement adaptés, en effet il nous faudrait plutôt des montages de transistors capables de fournir de la puissance vers les LEDs. À première vue il faudrait utiliser des composants de type &amp;quot;Source type darlington transistor array&amp;quot; (comme le M54564P).&lt;br /&gt;
&amp;lt;br&amp;gt;Le nunchuck est connecté sur Arduino Uno dans un premier temps (problèmes de drivers pour un Mega sur Windows), nous reconsidérons l'utilité de prendre un Mega pour ce projet. Une Uno semble suffire du point de vue matériel.&lt;br /&gt;
&amp;lt;br&amp;gt;Le nunchuck utilise I2C, nous savons récupérer les différentes informations provenant de celui-ci (accéléromètre X,Y,Z, joystick X,Y, boutons Z et C). Pour le connecter sur Arduino nous avons utilisé un adaptateur &amp;quot;wiichuck&amp;quot; mais nous avons également pensé fabriquer cet adaptateur par nous-mêmes au vu de la simplicité du montage. &lt;br /&gt;
&amp;lt;br&amp;gt;Point à travailler : savoir quels seuils de l'accéléromètre sont exploitables pour l'utilisation envisagée (choix des modes de jeu, etc...), ceux-ci sont différents en fonction de la vitesse à laquelle le nunchuck est déplacé.&lt;br /&gt;
&lt;br /&gt;
=== Jeudi 28 Février ===&lt;br /&gt;
Après quelques recherches il semble que nos doutes soient fondés, il faut remplacer les ULN2803 initialement prévus par des TD62783 APG/AFG/AFWG. En effet les ULN2804 sont des &amp;quot;sink drivers&amp;quot; alors qu'il nous faut des &amp;quot;source drivers&amp;quot; comme les TD62783.&lt;br /&gt;
&amp;lt;br&amp;gt;Au niveau de l'Arduino, l'acquisition des données provenant du Nunchuck est à présent fonctionnelle, on peut donc passer au traitement de ces données.&lt;br /&gt;
&lt;br /&gt;
=== Lundi 4 Mars ===&lt;br /&gt;
Nous contrôlons des LEDs grâce au nunchuck. On peut remarquer que les axes X,Y et Z de l'accéléromètre ne réagissent pas de la même manière et ne sont pas réellement indépendants. Ceci pose un problème de choix de l'axe à utiliser pour telle ou telle fonction : les axes Y et Z réagissent quasiment de la même manière à un mouvement vers le haut.&lt;br /&gt;
&amp;lt;br&amp;gt;De plus les broches 0 et 1 numériques servent à la liaison série (RX TX), ce qui pose problème pour l'instant car nous avons besoin de toutes les broches numériques et si on initialise le port série dans le code( Serial.begin), ces 2 broches deviennent uniquement utilisées pour la liaison série. Cependant les broches analogiques non utilisées semblent pouvoir être utilisées en tant que sorties numériques.&lt;br /&gt;
&lt;br /&gt;
=== Mercredi 6 Mars ===&lt;br /&gt;
Test du jour : gérer l'allumage d'une ligne de leds, une par une et dans les 2 sens, grâce au nunchuck (accéléromètre X), choix de la vitesse de défilement avec le joystick. &lt;br /&gt;
&amp;lt;br&amp;gt;Réflexion quant à l'algorithme du jeu Snake, et à l'implémentation sur l'arduino.&lt;br /&gt;
&amp;lt;br&amp;gt;La structure du code se déroule ainsi :&lt;br /&gt;
*setup : initialisation du nunchuck, calibrage des valeurs des accéléromètes, joystick et boutons&lt;br /&gt;
*loop :&lt;br /&gt;
**demande et réception des données du nunchuck et décodage de ces données&lt;br /&gt;
**partie traitement des données : calcul des ordres à donner à la matrice&lt;br /&gt;
**affichage sur la matrice&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Lundi 11 Mars ===&lt;br /&gt;
Voici l'avancement du PCB de la carte qui commandera les 512 LED (partie Hardware) :&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;[[Fichier:PCB_commande_matrice.png|center]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Il reste quelques pistes à relier sur le PCB suite à quoi nous pourrons commencer les tests sur plaquette grâce aux composants reçus.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Niveau informatique : détermination des seuils de perception d'allumage des LEDs en multiplexage, c'est-à-dire quelle est la durée maximale qui permet de voir les LEDs (allumées l'une après l'autre) comme si elles étaient allumées en même temps.&lt;br /&gt;
&amp;lt;br&amp;gt;On obtient pour 6 LEDs de test un temps de pause maximal de 4 ms par LED, soit une boucle de 24 ms max (rafraichissement de 42 Hz minimum).&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Arduino_nunchuck.jpg|200px|thumb|L'Arduino Uno avec le Nunchuck]]&lt;br /&gt;
&lt;br /&gt;
=== Mercredi 13 Mars ===&lt;br /&gt;
Réception d'un nouveau Nunchuck. Un peu de temps perdu à devoir retester et recalibrer les valeurs, car les accéléromètres réagissent différemment de ceux du Nunchuck que nous avions emprunté.&lt;br /&gt;
&amp;lt;br&amp;gt;D'un autre côté, nous avons commencé à écrire un algorithme de jeu Snake en utilisant une matrice 2D 8x8 Sparkfun en attendant la vraie matrice 3D. Cette matrice de développement a l'avantage de représenter une méthode de transfert qui ressemble en partie à la solution que nous avons adoptée pour la matrice 3D, c'est à dire que l'on envoie les informations bit par bit en série.&lt;br /&gt;
&amp;lt;br&amp;gt;Une fois l'algorithme opérationnel en 2D, ajouter une troisième dimension devrait être assez aisée.&lt;br /&gt;
&amp;lt;br&amp;gt;Le PCB de la carte de commande est a priori terminé, désormais il faut faire des tests pour assurer le fonctionnement du modèle électronique choisi.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Matrice_snake.jpg|200px|thumb|La matrice 2D de test affichant un Snake]]&lt;br /&gt;
&lt;br /&gt;
=== Mercredi 20 Mars ===&lt;br /&gt;
Nous avons maintenant un Snake totalement fonctionnel en 2D sur matrice 8x8, pilotable par le nunchuck. La troisième dimension est codée, il ne restera qu'à la tester une fois en possession de la matrice 3D.&lt;br /&gt;
&amp;lt;br&amp;gt;Cependant il faut revoir le moyen de stocker les valeurs du serpent en mémoire. Un tableau[8][8][8] est le plus simple mais pas le plus efficace pour envoyer les données à la matrice. Un tableau de 8 octets est mieux adapté mais plus compliqué à mettre en œuvre.&lt;br /&gt;
&lt;br /&gt;
Nous avons reçu les registres à décalage et le multiplexeur et avons créé un PCB pour insérer les composants CMS sur des plaques de test.&lt;br /&gt;
Le premier test à réaliser est d'essayer d’allumer toutes les LEDs en même temps à travers le 74HCT595D pour savoir si le composant peut délivrer un courant suffisant. &lt;br /&gt;
&lt;br /&gt;
[[Fichier:74HCT595D_LED.jpg|200px|thumb|upright=3|Plaque de test du composant 74HCT595D]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fichier:74HCT595D.jpg|200px|thumb|upright=3|plaque d'adaptation CMS vers ThroughHole du 74HCT595D]]&lt;br /&gt;
&lt;br /&gt;
La partie Arduino qui réalise la liaison entre Hardware et Software a été commencée. Le but est de construire une fonction qui prend en paramètre la matrice 8x8x8 et qui envoi les bons signaux sur les pattes de sortie de l'Arduino pour commander la carte électronique que nous avons conçue.&lt;br /&gt;
Jusqu'à présent nous avons utilisé les interruptions internes de l'Arduino grâce à la bibliothèque [http://playground.arduino.cc/Main/MsTimer2 MsTimer2] qui permet de déclencher une fonction grâce à une interruption survenant toutes les n millisecondes. Les interruptions permettent de gérer l'affichage indépendamment du programme qui est en cours d’exécution.&lt;br /&gt;
&lt;br /&gt;
=== Mercredi 27 Mars ===&lt;br /&gt;
&lt;br /&gt;
Remplacer le tableau de 1 octet pour 1 LED par un tableau de 1 octet pour 8 LEDs n'est finalement pas si efficace que cela. D'un côté on gagne en mémoire (dans le premier cas on n'utilisait qu'un bit sur 8), d'un autre côté cela oblige à manipuler les bits par des masques et des fonctions de conversion tableau &amp;lt;-&amp;gt; octet, ce qui au final alourdit le code et oblige à réaliser de nombreuses opérations supplémentaires à chaque rafraichissement de l'affichage.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
L'utilisation des interruptions (bibliothèque MsTimer2) amène de nouveaux problèmes : le nunchuck ne peut pas être interrompu lorsqu'on l'interroge et si on appelle la fonction qui gère le nunchuck dans l'interruption, elle ne fonctionne pas car son temps d'exécution est trop grand pour une interruption.&lt;br /&gt;
Au final utiliser les interruptions pose plus de problèmes que cela n'en résout. Il suffit de positionner correctement des delay() dans la boucle pour que le rafraichissement soit correct et que le nunchuck réponde.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Le circuit imprimé de la carte de commande est terminé, il ne reste plus qu'à réaliser la carte. D'un point de vue logiciel de pilotage de la carte plusieurs tests ont étés réalisés et un programme &amp;quot;final&amp;quot; est prêt. L'affichage de la matrice est réalisé toutes les 20 millisecondes par interruption récurrente.&lt;br /&gt;
* Premier test : test d'allumage des LEDs en simultanées &lt;br /&gt;
Le premier test a prouvé que l'on pouvais allumer toutes les LEDs avec un 74HCT595D et avec un bon niveau de luminosité.&lt;br /&gt;
&lt;br /&gt;
* Deuxième test : test d'allumage des LEDs en &amp;quot;condition réelle&amp;quot;&lt;br /&gt;
Toutes les LEDs sont allumées en même temps mais seulement 1/8ème de temps. La luminosité n'est pas importante voire insuffisante.&lt;br /&gt;
&lt;br /&gt;
* Programme final : Contrôle des 512 LEDs et affichage aléatoire des LEDs en mode &amp;quot;rideau de pluie&amp;quot;.&lt;br /&gt;
Ce programme pourra être testé quand nous aurons la matrice de LEDs et la carte réalisée et soudée.&lt;br /&gt;
&lt;br /&gt;
=== Mercredi 03 Avril ===&lt;br /&gt;
&lt;br /&gt;
L'utilisation des interruptions sur Arduino est maintenant opérationnel, le problème précédent venait de l'utilisation abusive de la commande delay(), qui est interdite dans les interruptions. Quelques tests ont permis de trouver le bon timing à appliquer.&lt;br /&gt;
&amp;lt;br&amp;gt; Amélioration du code du Snake sur de nombreux points, notamment simplification de certaines fonctions peu optimisées.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Lundi 08 Avril ===&lt;br /&gt;
&lt;br /&gt;
Le PCB de la carte de commande a été entièrement recréé pour suivre les indications techniques, notamment l'écartement des pistes, la largeur des vias et pour simplifier le tracé des pistes. Des connecteurs HE10 de 50 broches ont étés ajoutés pour permettre de brancher plus facilement la carte de commande avec la matrice. En effet un support sous forme de carte électronique doit être fabriqué pour brancher directement la matrice. &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Pendant les vacances ===&lt;br /&gt;
&lt;br /&gt;
En attente de réception des composants commandés, nous nous attardons plus particulèrement sur l'optimisation et la simplification du programme Arduino. En effet, la version précédente fonctionnait sur les 64 LED de la matrice 2D, mais crashait avec des tableaux prévus pour la matrice 3D (512 LED), ceci en raison de dépassements de mémoire : l'Aruino Uno ne dispose que de 2ko de RAM, or nous les dépassions à cause de 2 tableaux de 512 cases d'entiers.&lt;br /&gt;
&amp;lt;br&amp;gt;Après refonte d'une grosse partie du code, nous somme parvenus à régler le dépassement de mémoire en supprimant complètement un tableau (son utilité était de sauvegarder l'état de serpent avant l'état suivant ; un simple changement d'ordre des actions réalisées et l'ajout d'une variable globale stockant la taille du serpent l'a remplacé) et en transformant complètement la manière de stocker en mémoire l'état des LED : au lieu d'utilise un octet par LED, on n'utilise plus qu'un bit, ce qui réduit la taille de ce tableau par 8. Ainsi l'occupation de la mémoire se situe aux alentours de 1400 octets.&lt;br /&gt;
&lt;br /&gt;
=== Vendredi 03 Mai ===&lt;br /&gt;
&lt;br /&gt;
Nous avons enfin reçu les composants manquants, et plus important encore : la matrice est terminée. Il nous faut réaliser les derniers montages (soudage des derniers composants, sertissage des nappes de commande,...). En raison du manque de temps et de contraintes techniques, les cartes qui auraient dû servir à la connexion avec la matrice et à l'alimentation ne peuvent être réalisées, nous nous contentons donc de montages sur breadboard.&lt;br /&gt;
&lt;br /&gt;
== Explications techniques ==&lt;br /&gt;
&lt;br /&gt;
=== Le jeu Snake ===&lt;br /&gt;
&lt;br /&gt;
Le but du jeu est de tenir le plus longtemps possible en mangeant des &amp;quot;fruits&amp;quot; qui apparaissent sur la matrice. Il faut diriger le serpent vers ces fruits, une fois mangés la queue du serpent s'allonge d'une unité. Si le serpent arrive en bord de la matrice, il réapparait par la face opposée. Le joueur perd lorsque le serpent rencontre sa propre queue.&lt;br /&gt;
&lt;br /&gt;
=== Protocole I2C ===&lt;br /&gt;
&lt;br /&gt;
I2C (Inter Integrated Circuit) est la norme à utiliser pour dialoguer avec le nunchuck. Celle-ci utilise 2 fils (data et clock), les 2 autres fils étant l'alimentation et la masse. L'utilisation de cette norme impose d'utiliser les broches A4 et A5 sur un Arduino Uno car seules celles-ci sont utilisables pour ce protocole. En utilisant un adaptateur comme le [https://www.sparkfun.com/products/9281 wiichuck], on se retrouve à devoir envoyer VCC sur A3 et GND sur A2 : &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#define pwrpin PORTC3&lt;br /&gt;
#define gndpin PORTC2&lt;br /&gt;
    DDRC |= _BV(pwrpin) | _BV(gndpin);&lt;br /&gt;
    PORTC &amp;amp;=~ _BV(gndpin);&lt;br /&gt;
    PORTC |=  _BV(pwrpin);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
_BV sert à assigner une sortie particulière plutôt que de devoir assigner tout le port comme en assignation explicite.&lt;br /&gt;
&lt;br /&gt;
=== Commande de la matrice ===&lt;br /&gt;
La matrice est accessible par les 64 colonnes et les 8 étages. Ceci signifie qu'il faudrait, si l'on souhaitait connecter toutes ces entrées / sorties directement sur les sorties d'un Arduino, utiliser 72 broches, ce qui n'est pas possible. Il faut donc réduire le nombre de broches à commander grâce à du multiplexage et des registres à décalage.&lt;br /&gt;
&amp;lt;br&amp;gt;Pour commmander les sorties, on peut soit faire une boucle qui assigne la bonne valeur à chaque broche, soit écrire directement dans le port qui gère ces sorties, ce qui semble être plus rapide et évite de devoir utiliser les Digital.Write().&lt;br /&gt;
&lt;br /&gt;
=== Alimentation ===&lt;br /&gt;
Pour les tests, l'Arduino est connecté au PC par USB. Cependant dans le montage final, il faudra alimenter l'Arduino ainsi que les composants électroniques.&lt;br /&gt;
&amp;lt;br&amp;gt;L'Arduino peut s'alimenter en 9V à partir d'un bloc branché sur secteur. Les composants de commande sont alimentés en 5V, on utilise un régulateur à partir de la tension délivrée par le bloc secteur pour obtenir les 5V.&lt;/div&gt;</summary>
		<author><name>Mde-bie</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=Fichier:Altium_part.zip&amp;diff=5957</id>
		<title>Fichier:Altium part.zip</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=Fichier:Altium_part.zip&amp;diff=5957"/>
				<updated>2013-05-10T13:20:53Z</updated>
		
		<summary type="html">&lt;p&gt;Mde-bie : Fichiers Altium utilisés pour créer la carte de commande&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Fichiers Altium utilisés pour créer la carte de commande&lt;/div&gt;</summary>
		<author><name>Mde-bie</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=Fichier:PCB_commande_matrice.png&amp;diff=4768</id>
		<title>Fichier:PCB commande matrice.png</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=Fichier:PCB_commande_matrice.png&amp;diff=4768"/>
				<updated>2013-04-08T14:29:54Z</updated>
		
		<summary type="html">&lt;p&gt;Mde-bie : a téléversé une nouvelle version de « Fichier:PCB commande matrice.png » : (PCB de la carte de commande de la matrice de LED 3D. Révision du 08/04/2013.)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;PCB et Schématic de la carte de commande de la matrice de LED 3D.&lt;br /&gt;
Révision du 11/03/2013.&lt;/div&gt;</summary>
		<author><name>Mde-bie</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=Matrice_de_LED_3D&amp;diff=4767</id>
		<title>Matrice de LED 3D</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=Matrice_de_LED_3D&amp;diff=4767"/>
				<updated>2013-04-08T14:17:19Z</updated>
		
		<summary type="html">&lt;p&gt;Mde-bie : /* Avancement du projet */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Présentation ==&lt;br /&gt;
Le but de ce projet est de concevoir une matrice 3D composée de 512 leds (8x8x8) et d'y faire afficher dans un premier temps des formes géométriques (par exemple à partir de formules mathématiques) et dans un second temps de réaliser un jeu de type Snake, pilotable grâce à une manette de Wii.&lt;br /&gt;
Le tout sera présenté lors des journées Portes Ouvertes de l'école afin de promouvoir le département IMA.&lt;br /&gt;
&lt;br /&gt;
=== Matériel requis ===&lt;br /&gt;
* 512 LEDs et leur connectique&lt;br /&gt;
* un Arduino&lt;br /&gt;
* des composants permettant de commander les 64 entrées et 8 sorties de la matrice avec beaucoup moins de sorties disponibles sur l'Arduino&lt;br /&gt;
** (x1) SN74HCT138 - 3-line to 8-line Decoder (pour les etages)&lt;br /&gt;
** (x8) 74HCT595 - 8-bit Serial-in/serial or parallel-out shift register with output latches 3-state&lt;br /&gt;
** (x8) 74HCT244 - 8-bit buffer/line driver with 3-state outputs&lt;br /&gt;
** 2e solution :  &lt;br /&gt;
*** 74HC154 decoder 4-16&lt;br /&gt;
*** (x8) ULN2804 buffer 8 bit (500 mA -&amp;gt; ok pour les leds)&lt;br /&gt;
&lt;br /&gt;
* de quoi alimenter les leds (alimentation de 1A à 1.5A)&lt;br /&gt;
* une manette de Wii&lt;br /&gt;
&lt;br /&gt;
== Avancement du projet==&lt;br /&gt;
=== Lundi 4 Février ===&lt;br /&gt;
Cette première séance a été mise à profit afin de mieux cerner le projet, en discutant avec les enseignants et en commançant les recherches sur la manière de réaliser la matrice.&lt;br /&gt;
=== Jeudi 7 Février ===&lt;br /&gt;
Traçage de plans de montage, remise en question quant au moyen de commander les 64 colonnes de leds (le multiplexage semblait le plus évident mais d'autres possibilités comme des registres à décalage pourraient également convenir).&lt;br /&gt;
=== Lundi 11 Février ===&lt;br /&gt;
Définition des moyens en composants pour créer le circuit de commande. Création du patron du guide qui servira à aligner les leds et les souder facilement.&lt;br /&gt;
&amp;lt;br&amp;gt;Ce patron a été transmis à la personne qui se chargera de fabriquer le support par commande numérique.&lt;br /&gt;
&lt;br /&gt;
=== Jeudi 14 Février ===&lt;br /&gt;
Séance mise à profit pour compter et tester les 512 leds (en y ajoutant quelques pièces en cas de souci au montage).&lt;br /&gt;
=== Lundi 25 Février ===&lt;br /&gt;
Recherche à propos du moyen de connecter un nunchuck en filaire ou une Wiimote en bluetooth. La Wiimote requiert un type de connexion non offert par les cartes Arduino.&lt;br /&gt;
Création de PCB pour la carte qui supportera les composants et redéfinition des composants nécessaires (les ULN2803 seront utilisés à la place des 74HCT244 dans la première solution).&lt;br /&gt;
&lt;br /&gt;
=== Mercredi 27 Février ===&lt;br /&gt;
Le travail de création du PCB est bien avancé, il a été retardé car il fallait recréer des librairies de composants utilisés dans le montage.&lt;br /&gt;
&amp;lt;br&amp;gt;Un petit inconvénient est survenu, il semble que les ULN2803 ne soient pas parfaitement adaptés, en effet il nous faudrait plutôt des montages de transistors capables de fournir de la puissance vers les LEDs. À première vue il faudrait utiliser des composants de type &amp;quot;Source type darlington transistor array&amp;quot; (comme le M54564P).&lt;br /&gt;
&amp;lt;br&amp;gt;Le nunchuck est connecté sur Arduino Uno dans un premier temps (problèmes de drivers pour un Mega sur Windows), nous reconsidérons l'utilité de prendre un Mega pour ce projet. Une Uno semble suffire du point de vue matériel.&lt;br /&gt;
&amp;lt;br&amp;gt;Le nunchuck utilise I2C, nous savons récupérer les différentes informations provenant de celui-ci (accéléromètre X,Y,Z, joystick X,Y, boutons Z et C). Pour le connecter sur Arduino nous avons utilisé un adaptateur &amp;quot;wiichuck&amp;quot; mais nous avons également pensé fabriquer cet adaptateur par nous-mêmes au vu de la simplicité du montage. &lt;br /&gt;
&amp;lt;br&amp;gt;Point à travailler : savoir quels seuils de l'accéléromètre sont exploitables pour l'utilisation envisagée (choix des modes de jeu, etc...), ceux-ci sont différents en focntion de la vitesse à laquelle le nunchuck est déplacé.&lt;br /&gt;
&lt;br /&gt;
=== Jeudi 28 Février ===&lt;br /&gt;
Après quelques recherches il semble que nos doutes soient fondés, il faut remplacer les ULN2803 initialement prévus par des TD62783 APG/AFG/AFWG. En effet les ULN2804 sont des &amp;quot;sink drivers&amp;quot; alors qu'il nous faut des &amp;quot;source drivers&amp;quot; comme les TD62783.&lt;br /&gt;
&amp;lt;br&amp;gt;Au niveau de l'Arduino, l'acquisition des données provenant du Nunchuck est à présent fonctionnelle, on peut donc passer au traitement de ces données.&lt;br /&gt;
&lt;br /&gt;
=== Lundi 4 Mars ===&lt;br /&gt;
Nous contrôlons des LEDs grâce au nunchuck. On peut remarquer que les axes X,Y et Z de l'accéléromètre ne réagissent pas de la même manière et ne sont pas réellement indépendants. Ceci pose un problème de choix de l'axe à utiliser pour telle ou telle fonction : les axes Y et Z réagissent quasiment de la même manière à un mouvement vers le haut.&lt;br /&gt;
&amp;lt;br&amp;gt;De plus les broches 0 et 1 numériques servent à la liaison série (RX TX), ce qui pose problème pour l'instant car nous avons besoin de toutes les broches numériques et si on initialise le port série dans le code( Serial.begin), ces 2 broches deviennent uniquement utilisées pour la liaison série. Cependant les broches analogiques non utilisées semblent pouvoir être utilisées en tant que sorties numériques.&lt;br /&gt;
&lt;br /&gt;
=== Mercredi 6 Mars ===&lt;br /&gt;
Test du jour : gérer l'allumage d'une ligne de leds, une par une et dans les 2 sens, grâce au nunchuck (accéléromètre X), choix de la vitesse de défilement avec le joystick. &lt;br /&gt;
&amp;lt;br&amp;gt;Réflexion quant à l'algorithme du jeu Snake, et à l'implémentation sur l'arduino.&lt;br /&gt;
&amp;lt;br&amp;gt;La structure du code se déroule ainsi :&lt;br /&gt;
*setup : initialisation du nunchuck, calibrage des valeurs des accéléromètes, joystick et boutons&lt;br /&gt;
*loop :&lt;br /&gt;
**demande et réception des données du nunchuck et décodage de ces données&lt;br /&gt;
**partie traitement des données : calcul des ordres à donner à la matrice&lt;br /&gt;
**affichage sur la matrice&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Lundi 11 Mars ===&lt;br /&gt;
Voici l'avancement du PCB de la carte qui commandera les 512 LED (partie Hardware) :&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;[[Fichier:PCB_commande_matrice.png|600px|center]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Il reste quelques pistes à relier sur le PCB suite à quoi nous pourrons commencer les tests sur plaquette grâce aux composants reçus.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Niveau informatique : détermination des seuils de perception d'allumage des LEDs, c'est à dire quelle est la durée maximale qui permet de voir les LEDs (allumées l'une après l'autre) comme si elles étaient allumées en même temps.&lt;br /&gt;
&amp;lt;br&amp;gt;On obtient pour 6 LEDs de test un temps de pause maximal de 4 ms par LED, soit une boucle de 24 ms max (rafraichissement de 42 Hz minimum).&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Arduino_nunchuck.jpg|200px|thumb|L'Arduino Uno avec le Nunchuck]]&lt;br /&gt;
&lt;br /&gt;
=== Mercredi 13 Mars ===&lt;br /&gt;
Réception d'un nouveau Nunchuck. Un peu de temps perdu à devoir retester et recalibrer les valeurs, car les accéléromètres réagissent différemment du Nunchuck que nous avions emprunté.&lt;br /&gt;
&amp;lt;br&amp;gt;D'un autre côté, nous avons commencé à écrire un algorithme de jeu Snake en utilisant une matrice 2D 8x8 Sparkfun en attendant la vraie matrice 3D. Cette matrice de développement a l'avantage de représenter une méthode de transfert qui ressemble en partie à la solution que nous avons adoptée pour la matrice 3D, c'est à dire que l'on envoie les informations bit par bit en série.&lt;br /&gt;
&amp;lt;br&amp;gt;Une fois l'algorithme opérationnel en 2D, ajouter une troisième dimension devrait être assez aisée.&lt;br /&gt;
&amp;lt;br&amp;gt;Le PCB de la carte de commande est à priori terminé, désormais il faut faire des tests pour assurer le fonctionnement du modèle électronique choisit.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Matrice_snake.jpg|200px|thumb|La matrice 2D de test affichant un Snake]]&lt;br /&gt;
&lt;br /&gt;
=== Mercredi 20 Mars ===&lt;br /&gt;
Nous avons maintenant un Snake totalement fonctionnel en 2D sur matrice 8x8, pilotable par le nunchuck. La troisième dimension est codée, il ne restera qu'à la tester une fois en possession de la matrice 3D.&lt;br /&gt;
&amp;lt;br&amp;gt;Cependant il faut revoir le moyen de stocker les valeurs du serpent en mémoire. Un tableau[8][8][8] est le plus simple mais pas le plus efficace pour envoyer les données à la matrice. Un tableau de 8 octets est mieux adapté mais plus compliqué à mettre en œuvre.&lt;br /&gt;
&lt;br /&gt;
Nous avons reçus les registres à décalage et le multiplexeur et avons créé un PCB pour insérer les composants CMS sur des plaques de test.&lt;br /&gt;
Le premier test à réaliser est d'essayer d’allumer toutes les LEDs en même temps à travers le 74HCT595D pour savoir si le composant peut délivrer un courant suffisant. &lt;br /&gt;
&lt;br /&gt;
[[Fichier:74HCT595D_LED.jpg|200px|thumb|upright=3|Plaque de test du composant 74HCT595D]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fichier:74HCT595D.jpg|200px|thumb|upright=3|plaque d'adaptation CMS vers ThroughHole du 74HCT595D]]&lt;br /&gt;
&lt;br /&gt;
La partie Arduino qui réalise la liaison entre HardWare et SoftWare à été commencé. Le but est de construire une fonction qui prend en paramètre la matrice 8x8x8 et qui envoi les bons signaux sur les pattes de sortie de l'Arduino pour commander la carte électronique que nous avons conçu.&lt;br /&gt;
Jusqu'à présent nous avons utilisé les interruptions internes de l'Arduino grâce à la bibliothèque [http://playground.arduino.cc/Main/MsTimer2 MsTimer2] qui permet de déclencher une fonction grâce à une interruption survenant toutes les n millisecondes. Les interruptions permettent de gérer l'affichage indépendamment du programme qui est en cours d’exécution.&lt;br /&gt;
&lt;br /&gt;
=== Mercredi 27 Mars ===&lt;br /&gt;
&lt;br /&gt;
Remplacer le tableau de 1 octet pour 1 LED par un tableau de 1 octet pour 8 LEDs n'est finalement pas si efficace que cela. D'un côté on gagne en mémoire (dans le premier cas on n'utilisait qu'un bit sur 8), d'un autre côté cela oblige à manipuler les bits par des masques et des fonctions de conversion tableau &amp;lt;-&amp;gt; octet, ce qui au final alourdit le code et oblige à réaliser de nombreuses opérations supplémentaires à chaque rafraichissement de l'affichage.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
L'utilisation des interruptions (bibliothèque MsTimer2) amène de nouveaux problèmes : le nunchuck ne peut pas être interrompu lorsqu'on l'interroge et si on appelle la fonction qui gère le nunchuck dans l'interruption, elle ne fonctionne pas car son temps d'exécution est trop grand pour une interruption.&lt;br /&gt;
Au final utiliser les interruptions pose plus de problèmes que cela n'en résout. Il suffit de positionner correctement des delay() dans la boucle pour que le rafraichissement soit correct et que le nunchuck réponde.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Le circuit imprimé de la carte de commande est terminé, il ne reste plus qu'à réaliser la carte. D'un point de vue logiciel de pilotage de la carte plusieurs tests ont étés réalisés et un programme &amp;quot;final&amp;quot; est prêt. L'affichage de la matrice est réalisé toutes les 20 millisecondes par interruption récurrente.&lt;br /&gt;
* Premier test : test d'allumage des LEDs en simultanées &lt;br /&gt;
Le premier test a prouvé que l'on pouvais allumer toutes les LEDs avec un 74HCT595D et avec un bon niveau de luminosité.&lt;br /&gt;
&lt;br /&gt;
* Deuxième test : test d'allumage des LEDs en &amp;quot;condition réelle&amp;quot;&lt;br /&gt;
Toutes les LEDs sont allumées en même temps mais seulement 1/8ème de temps. La luminosité n'est pas importante voire insuffisante.&lt;br /&gt;
&lt;br /&gt;
* Programme final : Contrôle des 512 LEDs et affichage aléatoire les LEDs en mode &amp;quot;rideau de pluie&amp;quot;.&lt;br /&gt;
Ce programme pourra être testé quand nous aurons la matrice de LEDs et la carte réalisée et soudée.&lt;br /&gt;
&lt;br /&gt;
=== Mercredi 03 Avril ===&lt;br /&gt;
&lt;br /&gt;
L'utilisation des interruptions sur Arduino est maintenant opérationnel, le problème précédent venait de l'utilisation abusive de la commande delay(), qui est interdite dans les interruptions. Quelques tests ont permis de trouver le bon timing à appliquer.&lt;br /&gt;
&amp;lt;br&amp;gt; Amélioration du code du Snake sur de nombreux points, notamment simplification de certaines fonctions peu optimisées.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Lundi 08 Avril ===&lt;br /&gt;
&lt;br /&gt;
Le PCB de la carte de commande a été entièrement recréé pour suivre les indications techniques, notamment l'écartement des pistes, la largeur des vias et pour simplifier le tracé des pistes. Des connecteurs HE10 de 50 broches ont étés ajoutés pour permettre de brancher plus facilement la carte de commande avec la matrice. En effet un support sous forme de carte électronique vas être fabriqué pour brancher directement la matrice. &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Explications techniques ==&lt;br /&gt;
&lt;br /&gt;
=== Le jeu Snake ===&lt;br /&gt;
&lt;br /&gt;
Le but du jeu est de tenir le plus longtemps possible en mangeant des &amp;quot;fruits&amp;quot; qui apparaissent sur la matrice. Il faut diriger le serpent vers ces fruits, une fois mangés la queue du serpent s'allonge d'une unité. Si le serpent arrive en bord de la matrice, il réapparait par la face opposée. Le joueur perd lorsque le serpent rencontre sa propre queue.&lt;br /&gt;
&lt;br /&gt;
=== Protocole I2C ===&lt;br /&gt;
&lt;br /&gt;
I2C (Inter Integrated Circuit) est la norme à utiliser pour dialoguer avec le nunchuck. Celle-ci utilise 2 fils (data et clock), les 2 autres fils étant l'alimentation et la masse. L'utilisation de cette norme impose d'utiliser les broches A4 et A5 sur un Arduino Uno car seules celles-ci sont utilisables pour ce protocole. En utilisant un adaptateur comme le [https://www.sparkfun.com/products/9281 wiichuck], on se retrouve à devoir envoyer VCC sur A3 et GND sur A2 : &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#define pwrpin PORTC3&lt;br /&gt;
#define gndpin PORTC2&lt;br /&gt;
    DDRC |= _BV(pwrpin) | _BV(gndpin);&lt;br /&gt;
    PORTC &amp;amp;=~ _BV(gndpin);&lt;br /&gt;
    PORTC |=  _BV(pwrpin);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
_BV sert à assigner une sortie particulière plutôt que de devoir assigner tout le port comme en assignation explicite.&lt;br /&gt;
&lt;br /&gt;
=== Commande de la matrice ===&lt;br /&gt;
La matrice est accessible par les 64 colonnes et les 8 étages. Ceci signifie qu'il faudrait, si l'on souhaitait connecter toutes ces entrées / sorties directement sur les sorties d'un Arduino, utiliser 72 broches, ce qui n'est pas possible. Il faut donc réduire le nombre de broches à commander grâce à du multiplexage et des registres à décalage.&lt;br /&gt;
&amp;lt;br&amp;gt;Pour commmander les sorties, on peut soit faire une boucle qui assigne la bonne valeur à chaque broche, soit écrire directement dans le port qui gère ces sorties, ce qui semble être plus rapide et évite de devoir utiliser les Digital.Write().&lt;br /&gt;
&lt;br /&gt;
=== Alimentation ===&lt;br /&gt;
Pour les tests, l'Arduino est connecté au PC par USB. Cependant dans le montage final, il faudra alimenter l'Arduino ainsi que les composants électroniques.&lt;br /&gt;
&amp;lt;br&amp;gt;L'Arduino peut s'alimenter en 9V à partir d'un bloc branché sur secteur. Les composants de commande sont alimentés en 5V, on utilise un régulateur à partir de la tension délivrée par le bloc secteur pour obtenir les 5V.&lt;/div&gt;</summary>
		<author><name>Mde-bie</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=Matrice_de_LED_3D&amp;diff=4638</id>
		<title>Matrice de LED 3D</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=Matrice_de_LED_3D&amp;diff=4638"/>
				<updated>2013-03-27T16:55:13Z</updated>
		
		<summary type="html">&lt;p&gt;Mde-bie : /* Mercredi 27 Mars */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Présentation ==&lt;br /&gt;
Le but de ce projet est de concevoir une matrice 3D composée de 512 leds (8x8x8) et d'y faire afficher dans un premier temps des formes géométriques (par exemple à partir de formules mathématiques) et dans un second temps de réaliser un jeu de type Snake, pilotable grâce à une manette de Wii.&lt;br /&gt;
Le tout sera présenté lors des journées Portes Ouvertes de l'école afin de promouvoir le département IMA.&lt;br /&gt;
&lt;br /&gt;
=== Matériel requis ===&lt;br /&gt;
* 512 leds et des fils pour les connecter entre elles&lt;br /&gt;
* un Arduino&lt;br /&gt;
* des composants permettant de commander les 64 entrées et 8 sorties de la matrice avec beaucoup moins de sorties disponibles sur l'Arduino&lt;br /&gt;
** (x1) SN74HCT138 - 3-line to 8-line Decoder (pour les etages)&lt;br /&gt;
** (x8) 74HCT595 - 8-bit Serial-in/serial or parallel-out shift register with output latches 3-state&lt;br /&gt;
** (x8) 74HCT244 - 8-bit buffer/line driver with 3-state outputs (attention : courant max trop faible ??)&lt;br /&gt;
http://www.zem.fr/decouverte-du-composant-74hc595-8-bit-shift-register/&lt;br /&gt;
** 2e solution :  &lt;br /&gt;
*** 74HC154 decoder 4-16&lt;br /&gt;
*** (x8) ULN2804 buffer 8 bit (500 mA -&amp;gt; ok pour les leds)&lt;br /&gt;
&lt;br /&gt;
* de quoi alimenter les leds (alimentation de 1A à 1.5A)&lt;br /&gt;
* une manette de Wii&lt;br /&gt;
&lt;br /&gt;
== Avancement du projet==&lt;br /&gt;
=== Lundi 4 Février ===&lt;br /&gt;
Cette première séance a été mise à profit afin de mieux cerner le projet, en discutant avec les enseignants et en commançant les recherches sur la manière de réaliser la matrice.&lt;br /&gt;
=== Jeudi 7 Février ===&lt;br /&gt;
Traçage de plans de montage, remise en question quant au moyen de commander les 64 colonnes de leds (le multiplexage semblait le plus évident mais d'autres possibilités comme des registres à décalage pourraient également convenir).&lt;br /&gt;
=== Lundi 11 Février ===&lt;br /&gt;
Définition des moyens en composants pour créer le circuit de commande. Création du patron du guide qui servira à aligner les leds et les souder facilement.&lt;br /&gt;
&amp;lt;br&amp;gt;Ce patron a été transmis à la personne qui se chargera de fabriquer le support par commande numérique.&lt;br /&gt;
&lt;br /&gt;
=== Jeudi 14 Février ===&lt;br /&gt;
Séance mise à profit pour compter et tester les 512 leds (en y ajoutant quelques pièces en cas de souci au montage).&lt;br /&gt;
=== Lundi 25 Février ===&lt;br /&gt;
Recherche à propos du moyen de connecter un nunchuck en filaire ou une Wiimote en bluetooth. La Wiimote requiert un type de connexion non offert par les cartes Arduino.&lt;br /&gt;
Création de PCB pour la carte qui supportera les composants et redéfinition des composants nécessaires (les ULN2803 seront utilisés à la place des 74HCT244 dans la première solution).&lt;br /&gt;
&lt;br /&gt;
=== Mercredi 27 Février ===&lt;br /&gt;
Le travail de création du PCB est bien avancé, il a été retardé car il fallait recréer des librairies de composants utilisés dans le montage.&lt;br /&gt;
&amp;lt;br&amp;gt;Un petit inconvénient est survenu, il semble que les ULN2803 ne soient pas parfaitement adaptés, en effet il nous faudrait plutôt des montages de transistors capables de fournir de la puissance vers les LEDs. À première vue il faudrait utiliser des composants de type &amp;quot;Source type darlington transistor array&amp;quot; (comme le M54564P).&lt;br /&gt;
&amp;lt;br&amp;gt;Le nunchuck est connecté sur Arduino Uno dans un premier temps (problèmes de drivers pour un Mega sur Windows), nous reconsidérons l'utilité de prendre un Mega pour ce projet. Une Uno semble suffire du point de vue matériel.&lt;br /&gt;
&amp;lt;br&amp;gt;Le nunchuck utilise I2C, nous savons récupérer les différentes informations provenant de celui-ci (accéléromètre X,Y,Z, joystick X,Y, boutons Z et C). Pour le connecter sur Arduino nous avons utilisé un adaptateur &amp;quot;wiichuck&amp;quot; mais nous avons également pensé fabriquer cet adaptateur par nous-mêmes au vu de la simplicité du montage. &lt;br /&gt;
&amp;lt;br&amp;gt;Point à travailler : savoir quels seuils de l'accéléromètre sont exploitables pour l'utilisation envisagée (choix des modes de jeu, etc...), ceux-ci sont différents en focntion de la vitesse à laquelle le nunchuck est déplacé.&lt;br /&gt;
&lt;br /&gt;
=== Jeudi 28 Février ===&lt;br /&gt;
Après quelques recherches il semble que nos doutes soient fondés, il faut remplacer les ULN2803 initialement prévus par des TD62783 APG/AFG/AFWG. En effet les ULN2804 sont des &amp;quot;sink drivers&amp;quot; alors qu'il nous faut des &amp;quot;source drivers&amp;quot; comme les TD62783.&lt;br /&gt;
&amp;lt;br&amp;gt;Au niveau de l'Arduino, l'acquisition des données provenant du Nunchuck est à présent fonctionnelle, on peut donc passer au traitement de ces données.&lt;br /&gt;
&lt;br /&gt;
=== Lundi 4 Mars ===&lt;br /&gt;
Nous contrôlons des LEDs grâce au nunchuck. On peut remarquer que les axes X,Y et Z de l'accéléromètre ne réagissent pas de la même manière et ne sont pas réellement indépendants. Ceci pose un problème de choix de l'axe à utiliser pour telle ou telle fonction : les axes Y et Z réagissent quasiment de la même manière à un mouvement vers le haut.&lt;br /&gt;
&amp;lt;br&amp;gt;De plus les broches 0 et 1 numériques servent à la liaison série (RX TX), ce qui pose problème pour l'instant car nous avons besoin de toutes les broches numériques et si on initialise le port série dans le code( Serial.begin), ces 2 broches deviennent uniquement utilisées pour la liaison série. Cependant les broches analogiques non utilisées semblent pouvoir être utilisées en tant que sorties numériques.&lt;br /&gt;
&lt;br /&gt;
=== Mercredi 6 Mars ===&lt;br /&gt;
Test du jour : gérer l'allumage d'une ligne de leds, une par une et dans les 2 sens, grâce au nunchuck (accéléromètre X), choix de la vitesse de défilement avec le joystick. &lt;br /&gt;
&amp;lt;br&amp;gt;Réflexion quant à l'algorithme du jeu Snake, et à l'implémentation sur l'arduino.&lt;br /&gt;
&amp;lt;br&amp;gt;La structure du code se déroule ainsi :&lt;br /&gt;
*setup : initialisation du nunchuck, calibrage des valeurs des accéléromètes, joystick et boutons&lt;br /&gt;
*loop :&lt;br /&gt;
**demande et réception des données du nunchuck et décodage de ces données&lt;br /&gt;
**partie traitement des données : calcul des ordres à donner à la matrice&lt;br /&gt;
**affichage sur la matrice&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Lundi 11 Mars ===&lt;br /&gt;
Voici l'avancement du PCB de la carte qui commandera les 512 LED (partie Hardware) :&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;[[Fichier:PCB_commande_matrice.png|600px|center]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Il reste quelques pistes à relier sur le PCB suite à quoi nous pourrons commencer les tests sur plaquette grâce aux composants reçus.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Niveau informatique : détermination des seuils de perception d'allumage des LEDs, c'est à dire quelle est la durée maximale qui permet de voir les LEDs (allumées l'une après l'autre) comme si elles étaient allumées en même temps.&lt;br /&gt;
&amp;lt;br&amp;gt;On obtient pour 6 LEDs de test un temps de pause maximal de 4 ms par LED, soit une boucle de 24 ms max (rafraichissement de 42 Hz minimum).&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Arduino_nunchuck.jpg|200px|thumb|L'Arduino Uno avec le Nunchuck]]&lt;br /&gt;
&lt;br /&gt;
=== Mercredi 13 Mars ===&lt;br /&gt;
Réception d'un nouveau Nunchuck. Un peu de temps perdu à devoir retester et recalibrer les valeurs, car les accéléromètres réagissent différemment du Nunchuck que nous avions emprunté.&lt;br /&gt;
&amp;lt;br&amp;gt;D'un autre côté, nous avons commencé à écrire un algorithme de jeu Snake en utilisant une matrice 2D 8x8 Sparkfun en attendant la vraie matrice 3D. Cette matrice de développement a l'avantage de représenter une méthode de transfert qui ressemble en partie à la solution que nous avons adoptée pour la matrice 3D, c'est à dire que l'on envoie les informations bit par bit en série.&lt;br /&gt;
&amp;lt;br&amp;gt;Une fois l'algorithme opérationnel en 2D, ajouter une troisième dimension devrait être assez aisée.&lt;br /&gt;
&amp;lt;br&amp;gt;Le PCB de la carte de commande est à priori terminé, désormais il faut faire des tests pour assurer le fonctionnement du modèle électronique choisit.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Matrice_snake.jpg|200px|thumb|La matrice 2D de test affichant un Snake]]&lt;br /&gt;
&lt;br /&gt;
=== Mercredi 20 Mars ===&lt;br /&gt;
Nous avons maintenant un Snake totalement fonctionnel en 2D sur matrice 8x8, pilotable par le nunchuck. La troisième dimension est codée, il ne restera qu'à la tester une fois en possession de la matrice 3D.&lt;br /&gt;
&amp;lt;br&amp;gt;Cependant il faut revoir le moyen de stocker les valeurs du serpent en mémoire. Un tableau[8][8][8] est le plus simple mais pas le plus efficace pour envoyer les données à la matrice. Un tableau de 8 octets est mieux adapté mais plus compliqué à mettre en œuvre.&lt;br /&gt;
&lt;br /&gt;
Nous avons reçus les registres à décalage et le multiplexeur et avons créé un PCB pour insérer les composants CMS sur des plaques de test.&lt;br /&gt;
Le premier test à réaliser est d'essayer d’allumer toutes les LEDs en même temps à travers le 74HCT595D pour savoir si le composant peut délivrer un courant suffisant. &lt;br /&gt;
&lt;br /&gt;
[[Fichier:74HCT595D_LED.jpg|200px|thumb|upright=3|Plaque de test du composant 74HCT595D]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fichier:74HCT595D.jpg|200px|thumb|upright=3|plaque d'adaptation CMS vers ThroughHole du 74HCT595D]]&lt;br /&gt;
&lt;br /&gt;
La partie Arduino qui réalise la liaison entre HardWare et SoftWare à été commencé. Le but est de construire une fonction qui prend en paramètre la matrice 8x8x8 et qui envoi les bons signaux sur les pattes de sortie de l'Arduino pour commander la carte électronique que nous avons conçu.&lt;br /&gt;
Jusqu'à présent nous avons utilisé les interruptions internes de l'Arduino grâce à la bibliothèque [http://playground.arduino.cc/Main/MsTimer2 MsTimer2] qui permet de déclencher une fonction grâce à une interruption survenant toutes les n millisecondes. Les interruptions permettent de gérer l'affichage indépendamment du programme qui est en cours d’exécution.&lt;br /&gt;
&lt;br /&gt;
=== Mercredi 27 Mars ===&lt;br /&gt;
&lt;br /&gt;
Remplacer le tableau de 1 octet pour 1 LED par un tableau de 1 octet pour 8 LEDs n'est finalement pas si efficace que cela. D'un côté on gagne en mémoire (dans le premier cas on n'utilisait qu'un bit sur 8), d'un autre côté cela oblige à manipuler les bits par des masques et des fonctions de conversion tableau &amp;lt;-&amp;gt; octet, ce qui au final alourdit le code et oblige à réaliser de nombreuses opérations supplémentaires à chaque rafraichissement de l'affichage.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
L'utilisation des interruptions (bibliothèque MsTimer2) amène de nouveaux problèmes : le nunchuck ne peut pas être interrompu lorsqu'on l'interroge et si on appelle la fonction qui gère le nunchuck dans l'interruption, elle ne fonctionne pas car son temps d'exécution est trop grand pour une interruption.&lt;br /&gt;
Au final utiliser les interruptions pose plus de problèmes que cela n'en résout. Il suffit de positionner correctement des delay() dans la boucle pour que le rafraichissement soit correct et que le nunchuck réponde.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Le circuit imprimé de la carte de commande est terminé, il ne reste plus qu'à réaliser la carte. D'un point de vue logiciel de pilotage de la carte plusieurs tests ont étés réalisés et un programme &amp;quot;final&amp;quot; est prêt. L'affichage de la matrice est réalisé toutes les 20 millisecondes par interruption récurrente.&lt;br /&gt;
* Premier test : test d'allumage des LEDs en simultanées &lt;br /&gt;
Le premier test a prouvé que l'on pouvais allumer toutes les LEDs avec un 74HCT595D et avec un bon niveau de luminosité.&lt;br /&gt;
&lt;br /&gt;
* Deuxième test : test d'allumage des LEDs en &amp;quot;condition réelle&amp;quot;&lt;br /&gt;
Toutes les LEDs sont allumées en même temps mais seulement 1/8ème de temps. La luminosité n'est pas importante voire insuffisante.&lt;br /&gt;
&lt;br /&gt;
* Programme final : Contrôle des 512 LEDs et affichage aléatoire les LEDs en mode &amp;quot;rideau de pluie&amp;quot;.&lt;br /&gt;
Ce programme pourra être testé quand nous aurons la matrice de LEDs et la carte réalisée et soudée.&lt;br /&gt;
&lt;br /&gt;
== Explications techniques ==&lt;br /&gt;
&lt;br /&gt;
=== Le jeu Snake ===&lt;br /&gt;
&lt;br /&gt;
Le but du jeu est de tenir le plus longtemps possible en mangeant des &amp;quot;fruits&amp;quot; qui apparaissent sur la matrice. Il faut diriger le serpent vers ces fruits, une fois mangés la queue du serpent s'allonge d'une unité. Si le serpent arrive en bord de la matrice, il réapparait par la face opposée. Le joueur perd lorsque le serpent rencontre sa propre queue.&lt;br /&gt;
&lt;br /&gt;
=== Protocole I2C ===&lt;br /&gt;
&lt;br /&gt;
I2C (Inter Integrated Circuit) est la norme à utiliser pour dialoguer avec le nunchuck. Celle-ci utilise 2 fils (data et clock), les 2 autres fils étant l'alimentation et la masse. L'utilisation de cette norme impose d'utiliser les broches A4 et A5 sur un Arduino Uno car seules celles-ci sont utilisables pour ce protocole. En utilisant un adaptateur comme le [https://www.sparkfun.com/products/9281 wiichuck], on se retrouve à devoir envoyer VCC sur A3 et GND sur A2 : &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#define pwrpin PORTC3&lt;br /&gt;
#define gndpin PORTC2&lt;br /&gt;
    DDRC |= _BV(pwrpin) | _BV(gndpin);&lt;br /&gt;
    PORTC &amp;amp;=~ _BV(gndpin);&lt;br /&gt;
    PORTC |=  _BV(pwrpin);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
_BV sert à assigner une sortie particulière plutôt que de devoir assigner tout le port comme en assignation explicite.&lt;br /&gt;
&lt;br /&gt;
=== Commande de la matrice ===&lt;br /&gt;
La matrice est accessible par les 64 colonnes et les 8 étages. Ceci signifie qu'il faudrait, si l'on souhaitait connecter toutes ces entrées / sorties directement sur les sorties d'un Arduino, utiliser 72 broches, ce qui n'est pas possible. Il faut donc réduire le nombre de broches à commander grâce à du multiplexage et des registres à décalage.&lt;br /&gt;
&amp;lt;br&amp;gt;Pour commmander les sorties, on peut soit faire une boucle qui assigne la bonne valeur à chaque broche, soit écrire directement dans le port qui gère ces sorties, ce qui semble être plus rapide et évite de devoir utiliser les Digital.Write().&lt;br /&gt;
&lt;br /&gt;
=== Alimentation ===&lt;br /&gt;
Pour les tests, l'Arduino est connecté au PC par USB. Cependant dans le montage final, il faudra alimenter l'Arduino ainsi que les composants électroniques.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;i&amp;gt;Tensions et courants à délivrer / type d'alim / ...&amp;lt;/i&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mde-bie</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=Fichier:PCB_commande_matrice.png&amp;diff=4632</id>
		<title>Fichier:PCB commande matrice.png</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=Fichier:PCB_commande_matrice.png&amp;diff=4632"/>
				<updated>2013-03-27T16:32:11Z</updated>
		
		<summary type="html">&lt;p&gt;Mde-bie : a téléversé une nouvelle version de « Fichier:PCB commande matrice.png »&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;PCB et Schématic de la carte de commande de la matrice de LED 3D.&lt;br /&gt;
Révision du 11/03/2013.&lt;/div&gt;</summary>
		<author><name>Mde-bie</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=Matrice_de_LED_3D&amp;diff=4577</id>
		<title>Matrice de LED 3D</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=Matrice_de_LED_3D&amp;diff=4577"/>
				<updated>2013-03-21T10:02:51Z</updated>
		
		<summary type="html">&lt;p&gt;Mde-bie : /* Mercredi 13 Mars */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Présentation ==&lt;br /&gt;
Le but de ce projet est de concevoir une matrice 3D composée de 512 leds (8x8x8) et d'y faire afficher dans un premier temps des formes géométriques (par exemple à partir de formules mathématiques) et dans un second temps de réaliser un jeu de type Snake, pilotable grâce à une manette de Wii.&lt;br /&gt;
Le tout sera présenté lors des journées Portes Ouvertes de l'école afin de promouvoir le département IMA.&lt;br /&gt;
&lt;br /&gt;
=== Matériel requis ===&lt;br /&gt;
* 512 leds et des fils pour les connecter entre elles&lt;br /&gt;
* un Arduino&lt;br /&gt;
* des composants permettant de commander les 64 entrées et 8 sorties de la matrice avec beaucoup moins de sorties disponibles sur l'Arduino&lt;br /&gt;
** (x1) SN74HCT138 - 3-line to 8-line Decoder (pour les etages)&lt;br /&gt;
** (x8) 74HCT595 - 8-bit Serial-in/serial or parallel-out shift register with output latches 3-state&lt;br /&gt;
** (x8) 74HCT244 - 8-bit buffer/line driver with 3-state outputs (attention : courant max trop faible ??)&lt;br /&gt;
http://www.zem.fr/decouverte-du-composant-74hc595-8-bit-shift-register/&lt;br /&gt;
** 2e solution :  &lt;br /&gt;
*** 74HC154 decoder 4-16&lt;br /&gt;
*** (x8) ULN2804 buffer 8 bit (500 mA -&amp;gt; ok pour les leds)&lt;br /&gt;
&lt;br /&gt;
* de quoi alimenter les leds (alimentation de 1A à 1.5A)&lt;br /&gt;
* une manette de Wii&lt;br /&gt;
&lt;br /&gt;
== Avancement du projet==&lt;br /&gt;
=== Lundi 4 Février ===&lt;br /&gt;
Cette première séance a été mise à profit afin de mieux cerner le projet, en discutant avec les enseignants et en commançant les recherches sur la manière de réaliser la matrice.&lt;br /&gt;
=== Jeudi 7 Février ===&lt;br /&gt;
Traçage de plans de montage, remise en question quant au moyen de commander les 64 colonnes de leds (le multiplexage semblait le plus évident mais d'autres possibilités comme des registres à décalage pourraient également convenir).&lt;br /&gt;
=== Lundi 11 Février ===&lt;br /&gt;
Définition des moyens en composants pour créer le circuit de commande. Création du patron du guide qui servira à aligner les leds et les souder facilement.&lt;br /&gt;
&amp;lt;br&amp;gt;Ce patron a été transmis à la personne qui se chargera de fabriquer le support par commande numérique.&lt;br /&gt;
&lt;br /&gt;
=== Jeudi 14 Février ===&lt;br /&gt;
Séance mise à profit pour compter et tester les 512 leds (en y ajoutant quelques pièces en cas de souci au montage).&lt;br /&gt;
=== Lundi 25 Février ===&lt;br /&gt;
Recherche à propos du moyen de connecter un nunchuck en filaire ou une Wiimote en bluetooth. La Wiimote requiert un type de connexion non offert par les cartes Arduino.&lt;br /&gt;
Création de PCB pour la carte qui supportera les composants et redéfinition des composants nécessaires (les ULN2803 seront utilisés à la place des 74HCT244 dans la première solution).&lt;br /&gt;
&lt;br /&gt;
=== Mercredi 27 Février ===&lt;br /&gt;
Le travail de création du PCB est bien avancé, il a été retardé car il fallait recréer des librairies de composants utilisés dans le montage.&lt;br /&gt;
&amp;lt;br&amp;gt;Un petit inconvénient est survenu, il semble que les ULN2803 ne soient pas parfaitement adaptés, en effet il nous faudrait plutôt des montages de transistors capables de fournir de la puissance vers les LEDs. À première vue il faudrait utiliser des composants de type &amp;quot;Source type darlington transistor array&amp;quot; (comme le M54564P).&lt;br /&gt;
&amp;lt;br&amp;gt;Le nunchuck est connecté sur Arduino Uno dans un premier temps (problèmes de drivers pour un Mega sur Windows), nous reconsidérons l'utilité de prendre un Mega pour ce projet. Une Uno semble suffire du point de vue matériel.&lt;br /&gt;
&amp;lt;br&amp;gt;Le nunchuck utilise I2C, nous savons récupérer les différentes informations provenant de celui-ci (accéléromètre X,Y,Z, joystick X,Y, boutons Z et C). Pour le connecter sur Arduino nous avons utilisé un adaptateur &amp;quot;wiichuck&amp;quot; mais nus avons également pensé fabriquer cet adaptateur par nous-mêmes au vu de la simplicité du montage. &lt;br /&gt;
&amp;lt;br&amp;gt;Point à travailler : savoir quels seuils de l'accéléromètre sont exploitables pour l'utilisation envisagée (choix des modes de jeu, etc...), ceux-ci sont différents en focntion de la vitesse à laquelle le nunchuck est déplacé.&lt;br /&gt;
&lt;br /&gt;
=== Jeudi 28 Février ===&lt;br /&gt;
Après quelques recherches il semble que nos doutes soient fondés, il faut remplacer les ULN2803 initialement prévus par des TD62783 APG/AFG/AFWG. En effet les ULN2804 sont des &amp;quot;sink drivers&amp;quot; alors qu'il nous faut des &amp;quot;source drivers&amp;quot; comme les TD62783.&lt;br /&gt;
&amp;lt;br&amp;gt;Au niveau de l'Arduino, l'acquisition des données provenant du Nunchuck est à présent fonctionnelle, on peut donc passer au traitement de ces données.&lt;br /&gt;
&lt;br /&gt;
=== Lundi 4 Mars ===&lt;br /&gt;
Nous contrôlons des LEDs grâce au nunchuck. On peut remarquer que les axes X,Y et Z de l'accéléromètre ne réagissent pas de la même manière et ne sont pas réellement indépendants. Ceci pose un problème de choix de l'axe à utiliser pour telle ou telle fonction : les axes Y et Z réagissent quasiment de la même manière à un mouvement vers le haut.&lt;br /&gt;
&amp;lt;br&amp;gt;De plus les broches 0 et 1 numériques servent à la liaison série (RX TX), ce qui pose problème pour l'instant car nous avons besoin de toutes les broches numériques et si on initialise le port série dans le code( Serial.begin), ces 2 broches deviennent uniquement utilisées pour la liaison série. Cependant les broches analogiques non utilisées semblent pouvoir être utilisées en tant que sorties numériques.&lt;br /&gt;
&lt;br /&gt;
=== Mercredi 6 Mars ===&lt;br /&gt;
Test du jour : gérer l'allumage d'une ligne de leds, une par une et dans les 2 sens, grâce au nunchuck (accéléromètre X), choix de la vitesse de défilement avec le joystick. &lt;br /&gt;
&amp;lt;br&amp;gt;Réflexion quant à l'algorithme du jeu Snake, et à l'implémentation sur l'arduino.&lt;br /&gt;
&amp;lt;br&amp;gt;La structure du code se déroule ainsi :&lt;br /&gt;
*setup : initialisation du nunchuck, calibrage des valeurs des accéléromètes, joystick et boutons&lt;br /&gt;
*loop :&lt;br /&gt;
**demande et réception des données du nunchuck et décodage de ces données&lt;br /&gt;
**partie traitement des données : calcul des ordres à donner à la matrice&lt;br /&gt;
**affichage sur la matrice&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Lundi 11 Mars ===&lt;br /&gt;
Voici l'avancement du PCB de la carte qui commandera les 512 LED (partie Hardware) :&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;[[Fichier:PCB_commande_matrice.png]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Il reste quelques pistes à relier sur le PCB suite à quoi nous pourrons commencer les tests sur plaquette grâce aux composants reçus.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Niveau informatique : détermination des seuils de perception d'allumage des LEDs, c'est à dire quelle est la durée maximale qui permet de voir les LEDs (allumées l'une après l'autre) comme si elles étaient allumées en même temps.&lt;br /&gt;
&amp;lt;br&amp;gt;On obtient pour 6 LEDs de test un temps de pause maximal de 4 ms par LED, soit une boucle de 24 ms max (rafraichissement de 42 Hz minimum).&lt;br /&gt;
&lt;br /&gt;
=== Mercredi 13 Mars ===&lt;br /&gt;
Réception d'un nouveau Nunchuck. Un peu de temps perdu à devoir retester et recalibrer les valeurs, car les accéléromètres réagissent différemment du Nunchuck que nous avions emprunté.&lt;br /&gt;
&amp;lt;br&amp;gt;D'un autre côté, nous avons commencé à écrire un algorithme de jeu Snake en utilisant une matrice 2D 8x8 Sparkfun en attendant la vraie matrice 3D. Cette matrice de développement a l'avantage de représenter une méthode de transfert qui ressemble en partie à la solution que nous avons adoptée pour la matrice 3D, c'est à dire que l'on envoie les informations bit par bit en série.&lt;br /&gt;
&amp;lt;br&amp;gt;Une fois l'algorithme opérationnel en 2D, ajouter une troisième dimension devrait être assez aisée.&lt;br /&gt;
&amp;lt;br&amp;gt;Le PCB de la carte de commande est à priori terminé, désormais il faut faire des tests pour assurer le fonctionnement du modèle électronique choisit.&lt;br /&gt;
&lt;br /&gt;
=== Mercredi 20 Mars ===&lt;br /&gt;
Nous avons maintenant un Snake totalement fonctionnel en 2D sur matrice 8x8, pilotable par le nunchuck. La troisième dimension est codée, il ne restera qu'à la tester une fois en possession de la matrice 3D.&lt;br /&gt;
&amp;lt;br&amp;gt;Cependant il faut revoir le moyen de stocker les valeurs du serpent en mémoire. Un tableau[8][8][8] est le plus simple mais pas le plus efficace pour envoyer les données à la matrice. Un tableau de 8 octets est mieux adapté mais plus compliqué à mettre en œuvre.&lt;br /&gt;
&lt;br /&gt;
Nous avons reçus les registres à décalage et le multiplexeur et avons créé un PCB pour insérer les composants CMS sur des plaques de test.&lt;br /&gt;
Le premier test à réaliser est d'essayer d’allumer toutes les LEDs en même temps à travers le 74HCT595D pour savoir si le composant peut délivrer un courant suffisant. &lt;br /&gt;
&lt;br /&gt;
[[Fichier:74HCT595D_LED.jpg|thumb|center|upright=3|Plaque de test du composant 74HCT595D]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fichier:74HCT595D.jpg|thumb|center|upright=3|plaque d'adaptation CMS vers ThroughHole du 74HCT595D]]&lt;br /&gt;
&lt;br /&gt;
La partie Arduino qui réalise la liaison entre HardWare et SoftWare à été commencé. Le but est de construire une fonction qui prend en paramètre la matrice 8x8x8 et qui envoi les bons signaux sur les pattes de sortie de l'Arduino pour commander la carte électronique que nous avons conçu.&lt;br /&gt;
Jusqu'à présent nous avons utilisé les interruptions internes de l'Arduino grâce à la bibliothèque [http://playground.arduino.cc/Main/MsTimer2 MsTimer2] qui permet de déclencher une fonction grâce à une interruption survenant toutes les n millisecondes. Les interruptions permettent de gérer l'affichage indépendamment du programme qui est en cours d’exécution.&lt;br /&gt;
&lt;br /&gt;
== Explications techniques ==&lt;br /&gt;
&lt;br /&gt;
=== Le jeu Snake ===&lt;br /&gt;
&lt;br /&gt;
Le but du jeu est de tenir le plus longtemps possible en mangeant des &amp;quot;fruits&amp;quot; qui apparaissent sur la matrice. Il faut diriger le serpent vers ces fruits, une fois mangés la queue du serpent s'allonge d'une unité. Si le serpent arrive en bord de la matrice, il réapparait par la face opposée. Le joueur perd lorsque le serpent rencontre sa propre queue.&lt;br /&gt;
&lt;br /&gt;
=== Protocole I2C ===&lt;br /&gt;
&lt;br /&gt;
I2C (Inter Integrated Circuit) est la norme à utiliser pour dialoguer avec le nunchuck. Celle-ci utilise 2 fils (data et clock), les 2 autres fils étant l'alimentation et la masse. L'utilisation de cette norme impose d'utiliser les broches A4 et A5 sur un Arduino Uno car seules celles-ci sont utilisables pour ce protocole. En utilisant un adaptateur comme le [https://www.sparkfun.com/products/9281 wiichuck], on se retrouve à devoir envoyer VCC sur A3 et GND sur A2 : &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#define pwrpin PORTC3&lt;br /&gt;
#define gndpin PORTC2&lt;br /&gt;
    DDRC |= _BV(pwrpin) | _BV(gndpin);&lt;br /&gt;
    PORTC &amp;amp;=~ _BV(gndpin);&lt;br /&gt;
    PORTC |=  _BV(pwrpin);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
_BV sert à assigner une sortie particulière plutôt que de devoir assigner tout le port comme en assignation explicite.&lt;br /&gt;
&lt;br /&gt;
=== Commande de la matrice ===&lt;br /&gt;
La matrice est accessible par les 64 colonnes et les 8 étages. Ceci signifie qu'il faudrait, si l'on souhaitait connecter toutes ces entrées / sorties directement sur les sorties d'un Arduino, utiliser 72 broches, ce qui n'est pas possible. Il faut donc réduire le nombre de broches à commander grâce à du multiplexage et des registres à décalage.&lt;br /&gt;
&amp;lt;br&amp;gt;Pour commmander les sorties, on peut soit faire une boucle qui assigne la bonne valeur à chaque broche, soit écrire directement dans le port qui gère ces sorties, ce qui semble être plus rapide et évite de devoir utiliser les Digital.Write().&lt;/div&gt;</summary>
		<author><name>Mde-bie</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=Matrice_de_LED_3D&amp;diff=4576</id>
		<title>Matrice de LED 3D</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=Matrice_de_LED_3D&amp;diff=4576"/>
				<updated>2013-03-21T09:58:57Z</updated>
		
		<summary type="html">&lt;p&gt;Mde-bie : /* Mercredi 20 Mars */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Présentation ==&lt;br /&gt;
Le but de ce projet est de concevoir une matrice 3D composée de 512 leds (8x8x8) et d'y faire afficher dans un premier temps des formes géométriques (par exemple à partir de formules mathématiques) et dans un second temps de réaliser un jeu de type Snake, pilotable grâce à une manette de Wii.&lt;br /&gt;
Le tout sera présenté lors des journées Portes Ouvertes de l'école afin de promouvoir le département IMA.&lt;br /&gt;
&lt;br /&gt;
=== Matériel requis ===&lt;br /&gt;
* 512 leds et des fils pour les connecter entre elles&lt;br /&gt;
* un Arduino&lt;br /&gt;
* des composants permettant de commander les 64 entrées et 8 sorties de la matrice avec beaucoup moins de sorties disponibles sur l'Arduino&lt;br /&gt;
** (x1) SN74HCT138 - 3-line to 8-line Decoder (pour les etages)&lt;br /&gt;
** (x8) 74HCT595 - 8-bit Serial-in/serial or parallel-out shift register with output latches 3-state&lt;br /&gt;
** (x8) 74HCT244 - 8-bit buffer/line driver with 3-state outputs (attention : courant max trop faible ??)&lt;br /&gt;
http://www.zem.fr/decouverte-du-composant-74hc595-8-bit-shift-register/&lt;br /&gt;
** 2e solution :  &lt;br /&gt;
*** 74HC154 decoder 4-16&lt;br /&gt;
*** (x8) ULN2804 buffer 8 bit (500 mA -&amp;gt; ok pour les leds)&lt;br /&gt;
&lt;br /&gt;
* de quoi alimenter les leds (alimentation de 1A à 1.5A)&lt;br /&gt;
* une manette de Wii&lt;br /&gt;
&lt;br /&gt;
== Avancement du projet==&lt;br /&gt;
=== Lundi 4 Février ===&lt;br /&gt;
Cette première séance a été mise à profit afin de mieux cerner le projet, en discutant avec les enseignants et en commançant les recherches sur la manière de réaliser la matrice.&lt;br /&gt;
=== Jeudi 7 Février ===&lt;br /&gt;
Traçage de plans de montage, remise en question quant au moyen de commander les 64 colonnes de leds (le multiplexage semblait le plus évident mais d'autres possibilités comme des registres à décalage pourraient également convenir).&lt;br /&gt;
=== Lundi 11 Février ===&lt;br /&gt;
Définition des moyens en composants pour créer le circuit de commande. Création du patron du guide qui servira à aligner les leds et les souder facilement.&lt;br /&gt;
&amp;lt;br&amp;gt;Ce patron a été transmis à la personne qui se chargera de fabriquer le support par commande numérique.&lt;br /&gt;
&lt;br /&gt;
=== Jeudi 14 Février ===&lt;br /&gt;
Séance mise à profit pour compter et tester les 512 leds (en y ajoutant quelques pièces en cas de souci au montage).&lt;br /&gt;
=== Lundi 25 Février ===&lt;br /&gt;
Recherche à propos du moyen de connecter un nunchuck en filaire ou une Wiimote en bluetooth. La Wiimote requiert un type de connexion non offert par les cartes Arduino.&lt;br /&gt;
Création de PCB pour la carte qui supportera les composants et redéfinition des composants nécessaires (les ULN2803 seront utilisés à la place des 74HCT244 dans la première solution).&lt;br /&gt;
&lt;br /&gt;
=== Mercredi 27 Février ===&lt;br /&gt;
Le travail de création du PCB est bien avancé, il a été retardé car il fallait recréer des librairies de composants utilisés dans le montage.&lt;br /&gt;
&amp;lt;br&amp;gt;Un petit inconvénient est survenu, il semble que les ULN2803 ne soient pas parfaitement adaptés, en effet il nous faudrait plutôt des montages de transistors capables de fournir de la puissance vers les LEDs. À première vue il faudrait utiliser des composants de type &amp;quot;Source type darlington transistor array&amp;quot; (comme le M54564P).&lt;br /&gt;
&amp;lt;br&amp;gt;Le nunchuck est connecté sur Arduino Uno dans un premier temps (problèmes de drivers pour un Mega sur Windows), nous reconsidérons l'utilité de prendre un Mega pour ce projet. Une Uno semble suffire du point de vue matériel.&lt;br /&gt;
&amp;lt;br&amp;gt;Le nunchuck utilise I2C, nous savons récupérer les différentes informations provenant de celui-ci (accéléromètre X,Y,Z, joystick X,Y, boutons Z et C). Pour le connecter sur Arduino nous avons utilisé un adaptateur &amp;quot;wiichuck&amp;quot; mais nus avons également pensé fabriquer cet adaptateur par nous-mêmes au vu de la simplicité du montage. &lt;br /&gt;
&amp;lt;br&amp;gt;Point à travailler : savoir quels seuils de l'accéléromètre sont exploitables pour l'utilisation envisagée (choix des modes de jeu, etc...), ceux-ci sont différents en focntion de la vitesse à laquelle le nunchuck est déplacé.&lt;br /&gt;
&lt;br /&gt;
=== Jeudi 28 Février ===&lt;br /&gt;
Après quelques recherches il semble que nos doutes soient fondés, il faut remplacer les ULN2803 initialement prévus par des TD62783 APG/AFG/AFWG. En effet les ULN2804 sont des &amp;quot;sink drivers&amp;quot; alors qu'il nous faut des &amp;quot;source drivers&amp;quot; comme les TD62783.&lt;br /&gt;
&amp;lt;br&amp;gt;Au niveau de l'Arduino, l'acquisition des données provenant du Nunchuck est à présent fonctionnelle, on peut donc passer au traitement de ces données.&lt;br /&gt;
&lt;br /&gt;
=== Lundi 4 Mars ===&lt;br /&gt;
Nous contrôlons des LEDs grâce au nunchuck. On peut remarquer que les axes X,Y et Z de l'accéléromètre ne réagissent pas de la même manière et ne sont pas réellement indépendants. Ceci pose un problème de choix de l'axe à utiliser pour telle ou telle fonction : les axes Y et Z réagissent quasiment de la même manière à un mouvement vers le haut.&lt;br /&gt;
&amp;lt;br&amp;gt;De plus les broches 0 et 1 numériques servent à la liaison série (RX TX), ce qui pose problème pour l'instant car nous avons besoin de toutes les broches numériques et si on initialise le port série dans le code( Serial.begin), ces 2 broches deviennent uniquement utilisées pour la liaison série. Cependant les broches analogiques non utilisées semblent pouvoir être utilisées en tant que sorties numériques.&lt;br /&gt;
&lt;br /&gt;
=== Mercredi 6 Mars ===&lt;br /&gt;
Test du jour : gérer l'allumage d'une ligne de leds, une par une et dans les 2 sens, grâce au nunchuck (accéléromètre X), choix de la vitesse de défilement avec le joystick. &lt;br /&gt;
&amp;lt;br&amp;gt;Réflexion quant à l'algorithme du jeu Snake, et à l'implémentation sur l'arduino.&lt;br /&gt;
&amp;lt;br&amp;gt;La structure du code se déroule ainsi :&lt;br /&gt;
*setup : initialisation du nunchuck, calibrage des valeurs des accéléromètes, joystick et boutons&lt;br /&gt;
*loop :&lt;br /&gt;
**demande et réception des données du nunchuck et décodage de ces données&lt;br /&gt;
**partie traitement des données : calcul des ordres à donner à la matrice&lt;br /&gt;
**affichage sur la matrice&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Lundi 11 Mars ===&lt;br /&gt;
Voici l'avancement du PCB de la carte qui commandera les 512 LED (partie Hardware) :&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;[[Fichier:PCB_commande_matrice.png]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Il reste quelques pistes à relier sur le PCB suite à quoi nous pourrons commencer les tests sur plaquette grâce aux composants reçus.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Niveau informatique : détermination des seuils de perception d'allumage des LEDs, c'est à dire quelle est la durée maximale qui permet de voir les LEDs (allumées l'une après l'autre) comme si elles étaient allumées en même temps.&lt;br /&gt;
&amp;lt;br&amp;gt;On obtient pour 6 LEDs de test un temps de pause maximal de 4 ms par LED, soit une boucle de 24 ms max (rafraichissement de 42 Hz minimum).&lt;br /&gt;
&lt;br /&gt;
=== Mercredi 13 Mars ===&lt;br /&gt;
Réception d'un nouveau Nunchuck. Un peu de temps perdu à devoir retester et recalibrer les valeurs, car les accéléromètres réagissent différemment du Nunchuck que nous avions emprunté.&lt;br /&gt;
&amp;lt;br&amp;gt;D'un autre côté, nous avons commencé à écrire un algorithme de jeu Snake en utilisant une matrice 2D 8x8 Sparkfun en attendant la vraie matrice 3D. Cette matrice de développement a l'avantage de représenter une méthode de transfert qui ressemble en partie à la solution que nous avons adoptée pour la matrice 3D, c'est à dire que l'on envoie les informations bit par bit en série.&lt;br /&gt;
&amp;lt;br&amp;gt;Une fois l'algorithme opérationnel en 2D, ajouter une troisième dimension devrait être assez aisée.&lt;br /&gt;
&lt;br /&gt;
=== Mercredi 20 Mars ===&lt;br /&gt;
Nous avons maintenant un Snake totalement fonctionnel en 2D sur matrice 8x8, pilotable par le nunchuck. La troisième dimension est codée, il ne restera qu'à la tester une fois en possession de la matrice 3D.&lt;br /&gt;
&amp;lt;br&amp;gt;Cependant il faut revoir le moyen de stocker les valeurs du serpent en mémoire. Un tableau[8][8][8] est le plus simple mais pas le plus efficace pour envoyer les données à la matrice. Un tableau de 8 octets est mieux adapté mais plus compliqué à mettre en œuvre.&lt;br /&gt;
&lt;br /&gt;
Nous avons reçus les registres à décalage et le multiplexeur et avons créé un PCB pour insérer les composants CMS sur des plaques de test.&lt;br /&gt;
Le premier test à réaliser est d'essayer d’allumer toutes les LEDs en même temps à travers le 74HCT595D pour savoir si le composant peut délivrer un courant suffisant. &lt;br /&gt;
&lt;br /&gt;
[[Fichier:74HCT595D_LED.jpg|thumb|center|upright=3|Plaque de test du composant 74HCT595D]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fichier:74HCT595D.jpg|thumb|center|upright=3|plaque d'adaptation CMS vers ThroughHole du 74HCT595D]]&lt;br /&gt;
&lt;br /&gt;
La partie Arduino qui réalise la liaison entre HardWare et SoftWare à été commencé. Le but est de construire une fonction qui prend en paramètre la matrice 8x8x8 et qui envoi les bons signaux sur les pattes de sortie de l'Arduino pour commander la carte électronique que nous avons conçu.&lt;br /&gt;
Jusqu'à présent nous avons utilisé les interruptions internes de l'Arduino grâce à la bibliothèque [http://playground.arduino.cc/Main/MsTimer2 MsTimer2] qui permet de déclencher une fonction grâce à une interruption survenant toutes les n millisecondes. Les interruptions permettent de gérer l'affichage indépendamment du programme qui est en cours d’exécution.&lt;br /&gt;
&lt;br /&gt;
== Explications techniques ==&lt;br /&gt;
&lt;br /&gt;
=== Le jeu Snake ===&lt;br /&gt;
&lt;br /&gt;
Le but du jeu est de tenir le plus longtemps possible en mangeant des &amp;quot;fruits&amp;quot; qui apparaissent sur la matrice. Il faut diriger le serpent vers ces fruits, une fois mangés la queue du serpent s'allonge d'une unité. Si le serpent arrive en bord de la matrice, il réapparait par la face opposée. Le joueur perd lorsque le serpent rencontre sa propre queue.&lt;br /&gt;
&lt;br /&gt;
=== Protocole I2C ===&lt;br /&gt;
&lt;br /&gt;
I2C (Inter Integrated Circuit) est la norme à utiliser pour dialoguer avec le nunchuck. Celle-ci utilise 2 fils (data et clock), les 2 autres fils étant l'alimentation et la masse. L'utilisation de cette norme impose d'utiliser les broches A4 et A5 sur un Arduino Uno car seules celles-ci sont utilisables pour ce protocole. En utilisant un adaptateur comme le [https://www.sparkfun.com/products/9281 wiichuck], on se retrouve à devoir envoyer VCC sur A3 et GND sur A2 : &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#define pwrpin PORTC3&lt;br /&gt;
#define gndpin PORTC2&lt;br /&gt;
    DDRC |= _BV(pwrpin) | _BV(gndpin);&lt;br /&gt;
    PORTC &amp;amp;=~ _BV(gndpin);&lt;br /&gt;
    PORTC |=  _BV(pwrpin);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
_BV sert à assigner une sortie particulière plutôt que de devoir assigner tout le port comme en assignation explicite.&lt;br /&gt;
&lt;br /&gt;
=== Commande de la matrice ===&lt;br /&gt;
La matrice est accessible par les 64 colonnes et les 8 étages. Ceci signifie qu'il faudrait, si l'on souhaitait connecter toutes ces entrées / sorties directement sur les sorties d'un Arduino, utiliser 72 broches, ce qui n'est pas possible. Il faut donc réduire le nombre de broches à commander grâce à du multiplexage et des registres à décalage.&lt;br /&gt;
&amp;lt;br&amp;gt;Pour commmander les sorties, on peut soit faire une boucle qui assigne la bonne valeur à chaque broche, soit écrire directement dans le port qui gère ces sorties, ce qui semble être plus rapide et évite de devoir utiliser les Digital.Write().&lt;/div&gt;</summary>
		<author><name>Mde-bie</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=Matrice_de_LED_3D&amp;diff=4575</id>
		<title>Matrice de LED 3D</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=Matrice_de_LED_3D&amp;diff=4575"/>
				<updated>2013-03-21T09:48:14Z</updated>
		
		<summary type="html">&lt;p&gt;Mde-bie : /* Mercredi 20 Mars */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Présentation ==&lt;br /&gt;
Le but de ce projet est de concevoir une matrice 3D composée de 512 leds (8x8x8) et d'y faire afficher dans un premier temps des formes géométriques (par exemple à partir de formules mathématiques) et dans un second temps de réaliser un jeu de type Snake, pilotable grâce à une manette de Wii.&lt;br /&gt;
Le tout sera présenté lors des journées Portes Ouvertes de l'école afin de promouvoir le département IMA.&lt;br /&gt;
&lt;br /&gt;
=== Matériel requis ===&lt;br /&gt;
* 512 leds et des fils pour les connecter entre elles&lt;br /&gt;
* un Arduino&lt;br /&gt;
* des composants permettant de commander les 64 entrées et 8 sorties de la matrice avec beaucoup moins de sorties disponibles sur l'Arduino&lt;br /&gt;
** (x1) SN74HCT138 - 3-line to 8-line Decoder (pour les etages)&lt;br /&gt;
** (x8) 74HCT595 - 8-bit Serial-in/serial or parallel-out shift register with output latches 3-state&lt;br /&gt;
** (x8) 74HCT244 - 8-bit buffer/line driver with 3-state outputs (attention : courant max trop faible ??)&lt;br /&gt;
http://www.zem.fr/decouverte-du-composant-74hc595-8-bit-shift-register/&lt;br /&gt;
** 2e solution :  &lt;br /&gt;
*** 74HC154 decoder 4-16&lt;br /&gt;
*** (x8) ULN2804 buffer 8 bit (500 mA -&amp;gt; ok pour les leds)&lt;br /&gt;
&lt;br /&gt;
* de quoi alimenter les leds (alimentation de 1A à 1.5A)&lt;br /&gt;
* une manette de Wii&lt;br /&gt;
&lt;br /&gt;
== Avancement du projet==&lt;br /&gt;
=== Lundi 4 Février ===&lt;br /&gt;
Cette première séance a été mise à profit afin de mieux cerner le projet, en discutant avec les enseignants et en commançant les recherches sur la manière de réaliser la matrice.&lt;br /&gt;
=== Jeudi 7 Février ===&lt;br /&gt;
Traçage de plans de montage, remise en question quant au moyen de commander les 64 colonnes de leds (le multiplexage semblait le plus évident mais d'autres possibilités comme des registres à décalage pourraient également convenir).&lt;br /&gt;
=== Lundi 11 Février ===&lt;br /&gt;
Définition des moyens en composants pour créer le circuit de commande. Création du patron du guide qui servira à aligner les leds et les souder facilement.&lt;br /&gt;
&amp;lt;br&amp;gt;Ce patron a été transmis à la personne qui se chargera de fabriquer le support par commande numérique.&lt;br /&gt;
&lt;br /&gt;
=== Jeudi 14 Février ===&lt;br /&gt;
Séance mise à profit pour compter et tester les 512 leds (en y ajoutant quelques pièces en cas de souci au montage).&lt;br /&gt;
=== Lundi 25 Février ===&lt;br /&gt;
Recherche à propos du moyen de connecter un nunchuck en filaire ou une Wiimote en bluetooth. La Wiimote requiert un type de connexion non offert par les cartes Arduino.&lt;br /&gt;
Création de PCB pour la carte qui supportera les composants et redéfinition des composants nécessaires (les ULN2803 seront utilisés à la place des 74HCT244 dans la première solution).&lt;br /&gt;
&lt;br /&gt;
=== Mercredi 27 Février ===&lt;br /&gt;
Le travail de création du PCB est bien avancé, il a été retardé car il fallait recréer des librairies de composants utilisés dans le montage.&lt;br /&gt;
&amp;lt;br&amp;gt;Un petit inconvénient est survenu, il semble que les ULN2803 ne soient pas parfaitement adaptés, en effet il nous faudrait plutôt des montages de transistors capables de fournir de la puissance vers les LEDs. À première vue il faudrait utiliser des composants de type &amp;quot;Source type darlington transistor array&amp;quot; (comme le M54564P).&lt;br /&gt;
&amp;lt;br&amp;gt;Le nunchuck est connecté sur Arduino Uno dans un premier temps (problèmes de drivers pour un Mega sur Windows), nous reconsidérons l'utilité de prendre un Mega pour ce projet. Une Uno semble suffire du point de vue matériel.&lt;br /&gt;
&amp;lt;br&amp;gt;Le nunchuck utilise I2C, nous savons récupérer les différentes informations provenant de celui-ci (accéléromètre X,Y,Z, joystick X,Y, boutons Z et C). Pour le connecter sur Arduino nous avons utilisé un adaptateur &amp;quot;wiichuck&amp;quot; mais nus avons également pensé fabriquer cet adaptateur par nous-mêmes au vu de la simplicité du montage. &lt;br /&gt;
&amp;lt;br&amp;gt;Point à travailler : savoir quels seuils de l'accéléromètre sont exploitables pour l'utilisation envisagée (choix des modes de jeu, etc...), ceux-ci sont différents en focntion de la vitesse à laquelle le nunchuck est déplacé.&lt;br /&gt;
&lt;br /&gt;
=== Jeudi 28 Février ===&lt;br /&gt;
Après quelques recherches il semble que nos doutes soient fondés, il faut remplacer les ULN2803 initialement prévus par des TD62783 APG/AFG/AFWG. En effet les ULN2804 sont des &amp;quot;sink drivers&amp;quot; alors qu'il nous faut des &amp;quot;source drivers&amp;quot; comme les TD62783.&lt;br /&gt;
&amp;lt;br&amp;gt;Au niveau de l'Arduino, l'acquisition des données provenant du Nunchuck est à présent fonctionnelle, on peut donc passer au traitement de ces données.&lt;br /&gt;
&lt;br /&gt;
=== Lundi 4 Mars ===&lt;br /&gt;
Nous contrôlons des LEDs grâce au nunchuck. On peut remarquer que les axes X,Y et Z de l'accéléromètre ne réagissent pas de la même manière et ne sont pas réellement indépendants. Ceci pose un problème de choix de l'axe à utiliser pour telle ou telle fonction : les axes Y et Z réagissent quasiment de la même manière à un mouvement vers le haut.&lt;br /&gt;
&amp;lt;br&amp;gt;De plus les broches 0 et 1 numériques servent à la liaison série (RX TX), ce qui pose problème pour l'instant car nous avons besoin de toutes les broches numériques et si on initialise le port série dans le code( Serial.begin), ces 2 broches deviennent uniquement utilisées pour la liaison série. Cependant les broches analogiques non utilisées semblent pouvoir être utilisées en tant que sorties numériques.&lt;br /&gt;
&lt;br /&gt;
=== Mercredi 6 Mars ===&lt;br /&gt;
Test du jour : gérer l'allumage d'une ligne de leds, une par une et dans les 2 sens, grâce au nunchuck (accéléromètre X), choix de la vitesse de défilement avec le joystick. &lt;br /&gt;
&amp;lt;br&amp;gt;Réflexion quant à l'algorithme du jeu Snake, et à l'implémentation sur l'arduino.&lt;br /&gt;
&amp;lt;br&amp;gt;La structure du code se déroule ainsi :&lt;br /&gt;
*setup : initialisation du nunchuck, calibrage des valeurs des accéléromètes, joystick et boutons&lt;br /&gt;
*loop :&lt;br /&gt;
**demande et réception des données du nunchuck et décodage de ces données&lt;br /&gt;
**partie traitement des données : calcul des ordres à donner à la matrice&lt;br /&gt;
**affichage sur la matrice&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Lundi 11 Mars ===&lt;br /&gt;
Voici l'avancement du PCB de la carte qui commandera les 512 LED (partie Hardware) :&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;[[Fichier:PCB_commande_matrice.png]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Il reste quelques pistes à relier sur le PCB suite à quoi nous pourrons commencer les tests sur plaquette grâce aux composants reçus.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Niveau informatique : détermination des seuils de perception d'allumage des LEDs, c'est à dire quelle est la durée maximale qui permet de voir les LEDs (allumées l'une après l'autre) comme si elles étaient allumées en même temps.&lt;br /&gt;
&amp;lt;br&amp;gt;On obtient pour 6 LEDs de test un temps de pause maximal de 4 ms par LED, soit une boucle de 24 ms max (rafraichissement de 42 Hz minimum).&lt;br /&gt;
&lt;br /&gt;
=== Mercredi 13 Mars ===&lt;br /&gt;
Réception d'un nouveau Nunchuck. Un peu de temps perdu à devoir retester et recalibrer les valeurs, car les accéléromètres réagissent différemment du Nunchuck que nous avions emprunté.&lt;br /&gt;
&amp;lt;br&amp;gt;D'un autre côté, nous avons commencé à écrire un algorithme de jeu Snake en utilisant une matrice 2D 8x8 Sparkfun en attendant la vraie matrice 3D. Cette matrice de développement a l'avantage de représenter une méthode de transfert qui ressemble en partie à la solution que nous avons adoptée pour la matrice 3D, c'est à dire que l'on envoie les informations bit par bit en série.&lt;br /&gt;
&amp;lt;br&amp;gt;Une fois l'algorithme opérationnel en 2D, ajouter une troisième dimension devrait être assez aisée.&lt;br /&gt;
&lt;br /&gt;
=== Mercredi 20 Mars ===&lt;br /&gt;
Nous avons maintenant un Snake totalement fonctionnel en 2D sur matrice 8x8, pilotable par le nunchuck. La troisième dimension est codée, il ne restera qu'à la tester une fois en possession de la matrice 3D.&lt;br /&gt;
&amp;lt;br&amp;gt;Cependant il faut revoir le moyen de stocker les valeurs du serpent en mémoire. Un tableau[8][8][8] est le plus simple mais pas le plus efficace pour envoyer les données à la matrice. Un tableau de 8 octets est mieux adapté mais plus compliqué à mettre en œuvre.&lt;br /&gt;
&lt;br /&gt;
Nous avons reçus les registres à décalage et le multiplexeur et avons créé un PCB pour insérer les composants CMS sur des plaques de test. Le premier test à réaliser est d'essayer d’allumer toutes les LEDs en même temps à travers le 74HCT595D pour savoir si le composant peut délivrer un courant suffisant. &lt;br /&gt;
&lt;br /&gt;
[[Fichier:74HCT595D_LED.jpg|thumb|center|upright=3|Plaque de test du composant 74HCT595D]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fichier:74HCT595D.jpg|thumb|center|upright=3|plaque d'adaptation CMS vers ThroughHole du 74HCT595D]]&lt;br /&gt;
&lt;br /&gt;
== Explications techniques ==&lt;br /&gt;
&lt;br /&gt;
=== Le jeu Snake ===&lt;br /&gt;
&lt;br /&gt;
Le but du jeu est de tenir le plus longtemps possible en mangeant des &amp;quot;fruits&amp;quot; qui apparaissent sur la matrice. Il faut diriger le serpent vers ces fruits, une fois mangés la queue du serpent s'allonge d'une unité. Si le serpent arrive en bord de la matrice, il réapparait par la face opposée. Le joueur perd lorsque le serpent rencontre sa propre queue.&lt;br /&gt;
&lt;br /&gt;
=== Protocole I2C ===&lt;br /&gt;
&lt;br /&gt;
I2C (Inter Integrated Circuit) est la norme à utiliser pour dialoguer avec le nunchuck. Celle-ci utilise 2 fils (data et clock), les 2 autres fils étant l'alimentation et la masse. L'utilisation de cette norme impose d'utiliser les broches A4 et A5 sur un Arduino Uno car seules celles-ci sont utilisables pour ce protocole. En utilisant un adaptateur comme le [https://www.sparkfun.com/products/9281 wiichuck], on se retrouve à devoir envoyer VCC sur A3 et GND sur A2 : &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#define pwrpin PORTC3&lt;br /&gt;
#define gndpin PORTC2&lt;br /&gt;
    DDRC |= _BV(pwrpin) | _BV(gndpin);&lt;br /&gt;
    PORTC &amp;amp;=~ _BV(gndpin);&lt;br /&gt;
    PORTC |=  _BV(pwrpin);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
_BV sert à assigner une sortie particulière plutôt que de devoir assigner tout le port comme en assignation explicite.&lt;br /&gt;
&lt;br /&gt;
=== Commande de la matrice ===&lt;br /&gt;
La matrice est accessible par les 64 colonnes et les 8 étages. Ceci signifie qu'il faudrait, si l'on souhaitait connecter toutes ces entrées / sorties directement sur les sorties d'un Arduino, utiliser 72 broches, ce qui n'est pas possible. Il faut donc réduire le nombre de broches à commander grâce à du multiplexage et des registres à décalage.&lt;br /&gt;
&amp;lt;br&amp;gt;Pour commmander les sorties, on peut soit faire une boucle qui assigne la bonne valeur à chaque broche, soit écrire directement dans le port qui gère ces sorties, ce qui semble être plus rapide et évite de devoir utiliser les Digital.Write().&lt;/div&gt;</summary>
		<author><name>Mde-bie</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=Fichier:74HCT595D.jpg&amp;diff=4574</id>
		<title>Fichier:74HCT595D.jpg</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=Fichier:74HCT595D.jpg&amp;diff=4574"/>
				<updated>2013-03-21T09:46:36Z</updated>
		
		<summary type="html">&lt;p&gt;Mde-bie : Circuit CMS adapté à une plaque de type DIP&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Circuit CMS adapté à une plaque de type DIP&lt;/div&gt;</summary>
		<author><name>Mde-bie</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=Matrice_de_LED_3D&amp;diff=4573</id>
		<title>Matrice de LED 3D</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=Matrice_de_LED_3D&amp;diff=4573"/>
				<updated>2013-03-21T09:45:16Z</updated>
		
		<summary type="html">&lt;p&gt;Mde-bie : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Présentation ==&lt;br /&gt;
Le but de ce projet est de concevoir une matrice 3D composée de 512 leds (8x8x8) et d'y faire afficher dans un premier temps des formes géométriques (par exemple à partir de formules mathématiques) et dans un second temps de réaliser un jeu de type Snake, pilotable grâce à une manette de Wii.&lt;br /&gt;
Le tout sera présenté lors des journées Portes Ouvertes de l'école afin de promouvoir le département IMA.&lt;br /&gt;
&lt;br /&gt;
=== Matériel requis ===&lt;br /&gt;
* 512 leds et des fils pour les connecter entre elles&lt;br /&gt;
* un Arduino&lt;br /&gt;
* des composants permettant de commander les 64 entrées et 8 sorties de la matrice avec beaucoup moins de sorties disponibles sur l'Arduino&lt;br /&gt;
** (x1) SN74HCT138 - 3-line to 8-line Decoder (pour les etages)&lt;br /&gt;
** (x8) 74HCT595 - 8-bit Serial-in/serial or parallel-out shift register with output latches 3-state&lt;br /&gt;
** (x8) 74HCT244 - 8-bit buffer/line driver with 3-state outputs (attention : courant max trop faible ??)&lt;br /&gt;
http://www.zem.fr/decouverte-du-composant-74hc595-8-bit-shift-register/&lt;br /&gt;
** 2e solution :  &lt;br /&gt;
*** 74HC154 decoder 4-16&lt;br /&gt;
*** (x8) ULN2804 buffer 8 bit (500 mA -&amp;gt; ok pour les leds)&lt;br /&gt;
&lt;br /&gt;
* de quoi alimenter les leds (alimentation de 1A à 1.5A)&lt;br /&gt;
* une manette de Wii&lt;br /&gt;
&lt;br /&gt;
== Avancement du projet==&lt;br /&gt;
=== Lundi 4 Février ===&lt;br /&gt;
Cette première séance a été mise à profit afin de mieux cerner le projet, en discutant avec les enseignants et en commançant les recherches sur la manière de réaliser la matrice.&lt;br /&gt;
=== Jeudi 7 Février ===&lt;br /&gt;
Traçage de plans de montage, remise en question quant au moyen de commander les 64 colonnes de leds (le multiplexage semblait le plus évident mais d'autres possibilités comme des registres à décalage pourraient également convenir).&lt;br /&gt;
=== Lundi 11 Février ===&lt;br /&gt;
Définition des moyens en composants pour créer le circuit de commande. Création du patron du guide qui servira à aligner les leds et les souder facilement.&lt;br /&gt;
&amp;lt;br&amp;gt;Ce patron a été transmis à la personne qui se chargera de fabriquer le support par commande numérique.&lt;br /&gt;
&lt;br /&gt;
=== Jeudi 14 Février ===&lt;br /&gt;
Séance mise à profit pour compter et tester les 512 leds (en y ajoutant quelques pièces en cas de souci au montage).&lt;br /&gt;
=== Lundi 25 Février ===&lt;br /&gt;
Recherche à propos du moyen de connecter un nunchuck en filaire ou une Wiimote en bluetooth. La Wiimote requiert un type de connexion non offert par les cartes Arduino.&lt;br /&gt;
Création de PCB pour la carte qui supportera les composants et redéfinition des composants nécessaires (les ULN2803 seront utilisés à la place des 74HCT244 dans la première solution).&lt;br /&gt;
&lt;br /&gt;
=== Mercredi 27 Février ===&lt;br /&gt;
Le travail de création du PCB est bien avancé, il a été retardé car il fallait recréer des librairies de composants utilisés dans le montage.&lt;br /&gt;
&amp;lt;br&amp;gt;Un petit inconvénient est survenu, il semble que les ULN2803 ne soient pas parfaitement adaptés, en effet il nous faudrait plutôt des montages de transistors capables de fournir de la puissance vers les LEDs. À première vue il faudrait utiliser des composants de type &amp;quot;Source type darlington transistor array&amp;quot; (comme le M54564P).&lt;br /&gt;
&amp;lt;br&amp;gt;Le nunchuck est connecté sur Arduino Uno dans un premier temps (problèmes de drivers pour un Mega sur Windows), nous reconsidérons l'utilité de prendre un Mega pour ce projet. Une Uno semble suffire du point de vue matériel.&lt;br /&gt;
&amp;lt;br&amp;gt;Le nunchuck utilise I2C, nous savons récupérer les différentes informations provenant de celui-ci (accéléromètre X,Y,Z, joystick X,Y, boutons Z et C). Pour le connecter sur Arduino nous avons utilisé un adaptateur &amp;quot;wiichuck&amp;quot; mais nus avons également pensé fabriquer cet adaptateur par nous-mêmes au vu de la simplicité du montage. &lt;br /&gt;
&amp;lt;br&amp;gt;Point à travailler : savoir quels seuils de l'accéléromètre sont exploitables pour l'utilisation envisagée (choix des modes de jeu, etc...), ceux-ci sont différents en focntion de la vitesse à laquelle le nunchuck est déplacé.&lt;br /&gt;
&lt;br /&gt;
=== Jeudi 28 Février ===&lt;br /&gt;
Après quelques recherches il semble que nos doutes soient fondés, il faut remplacer les ULN2803 initialement prévus par des TD62783 APG/AFG/AFWG. En effet les ULN2804 sont des &amp;quot;sink drivers&amp;quot; alors qu'il nous faut des &amp;quot;source drivers&amp;quot; comme les TD62783.&lt;br /&gt;
&amp;lt;br&amp;gt;Au niveau de l'Arduino, l'acquisition des données provenant du Nunchuck est à présent fonctionnelle, on peut donc passer au traitement de ces données.&lt;br /&gt;
&lt;br /&gt;
=== Lundi 4 Mars ===&lt;br /&gt;
Nous contrôlons des LEDs grâce au nunchuck. On peut remarquer que les axes X,Y et Z de l'accéléromètre ne réagissent pas de la même manière et ne sont pas réellement indépendants. Ceci pose un problème de choix de l'axe à utiliser pour telle ou telle fonction : les axes Y et Z réagissent quasiment de la même manière à un mouvement vers le haut.&lt;br /&gt;
&amp;lt;br&amp;gt;De plus les broches 0 et 1 numériques servent à la liaison série (RX TX), ce qui pose problème pour l'instant car nous avons besoin de toutes les broches numériques et si on initialise le port série dans le code( Serial.begin), ces 2 broches deviennent uniquement utilisées pour la liaison série. Cependant les broches analogiques non utilisées semblent pouvoir être utilisées en tant que sorties numériques.&lt;br /&gt;
&lt;br /&gt;
=== Mercredi 6 Mars ===&lt;br /&gt;
Test du jour : gérer l'allumage d'une ligne de leds, une par une et dans les 2 sens, grâce au nunchuck (accéléromètre X), choix de la vitesse de défilement avec le joystick. &lt;br /&gt;
&amp;lt;br&amp;gt;Réflexion quant à l'algorithme du jeu Snake, et à l'implémentation sur l'arduino.&lt;br /&gt;
&amp;lt;br&amp;gt;La structure du code se déroule ainsi :&lt;br /&gt;
*setup : initialisation du nunchuck, calibrage des valeurs des accéléromètes, joystick et boutons&lt;br /&gt;
*loop :&lt;br /&gt;
**demande et réception des données du nunchuck et décodage de ces données&lt;br /&gt;
**partie traitement des données : calcul des ordres à donner à la matrice&lt;br /&gt;
**affichage sur la matrice&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Lundi 11 Mars ===&lt;br /&gt;
Voici l'avancement du PCB de la carte qui commandera les 512 LED (partie Hardware) :&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;[[Fichier:PCB_commande_matrice.png]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Il reste quelques pistes à relier sur le PCB suite à quoi nous pourrons commencer les tests sur plaquette grâce aux composants reçus.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Niveau informatique : détermination des seuils de perception d'allumage des LEDs, c'est à dire quelle est la durée maximale qui permet de voir les LEDs (allumées l'une après l'autre) comme si elles étaient allumées en même temps.&lt;br /&gt;
&amp;lt;br&amp;gt;On obtient pour 6 LEDs de test un temps de pause maximal de 4 ms par LED, soit une boucle de 24 ms max (rafraichissement de 42 Hz minimum).&lt;br /&gt;
&lt;br /&gt;
=== Mercredi 13 Mars ===&lt;br /&gt;
Réception d'un nouveau Nunchuck. Un peu de temps perdu à devoir retester et recalibrer les valeurs, car les accéléromètres réagissent différemment du Nunchuck que nous avions emprunté.&lt;br /&gt;
&amp;lt;br&amp;gt;D'un autre côté, nous avons commencé à écrire un algorithme de jeu Snake en utilisant une matrice 2D 8x8 Sparkfun en attendant la vraie matrice 3D. Cette matrice de développement a l'avantage de représenter une méthode de transfert qui ressemble en partie à la solution que nous avons adoptée pour la matrice 3D, c'est à dire que l'on envoie les informations bit par bit en série.&lt;br /&gt;
&amp;lt;br&amp;gt;Une fois l'algorithme opérationnel en 2D, ajouter une troisième dimension devrait être assez aisée.&lt;br /&gt;
&lt;br /&gt;
=== Mercredi 20 Mars ===&lt;br /&gt;
Nous avons maintenant un Snake totalement fonctionnel en 2D sur matrice 8x8, pilotable par le nunchuck. La troisième dimension est codée, il ne restera qu'à la tester une fois en possession de la matrice 3D.&lt;br /&gt;
&amp;lt;br&amp;gt;Cependant il faut revoir le moyen de stocker les valeurs du serpent en mémoire. Un tableau[8][8][8] est le plus simple mais pas le plus efficace pour envoyer les données à la matrice. Un tableau de 8 octets est mieux adapté mais plus compliqué à mettre en œuvre.&lt;br /&gt;
&lt;br /&gt;
Nous avons reçus les registres à décalage et le multiplexeur et avons créé un PCB pour insérer les composants CMS sur des plaques de test. Le premier test à réaliser est d'essayer d’allumer toutes les LEDs en même temps à travers le 74HCT595D pour savoir si le composant peut délivrer un courant suffisant. &lt;br /&gt;
&lt;br /&gt;
[[Fichier:74HCT595D_LED.jpg|thumb|center|upright=3|Plaque de test du composant 74HCT595D]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Explications techniques ==&lt;br /&gt;
&lt;br /&gt;
=== Le jeu Snake ===&lt;br /&gt;
&lt;br /&gt;
Le but du jeu est de tenir le plus longtemps possible en mangeant des &amp;quot;fruits&amp;quot; qui apparaissent sur la matrice. Il faut diriger le serpent vers ces fruits, une fois mangés la queue du serpent s'allonge d'une unité. Si le serpent arrive en bord de la matrice, il réapparait par la face opposée. Le joueur perd lorsque le serpent rencontre sa propre queue.&lt;br /&gt;
&lt;br /&gt;
=== Protocole I2C ===&lt;br /&gt;
&lt;br /&gt;
I2C (Inter Integrated Circuit) est la norme à utiliser pour dialoguer avec le nunchuck. Celle-ci utilise 2 fils (data et clock), les 2 autres fils étant l'alimentation et la masse. L'utilisation de cette norme impose d'utiliser les broches A4 et A5 sur un Arduino Uno car seules celles-ci sont utilisables pour ce protocole. En utilisant un adaptateur comme le [https://www.sparkfun.com/products/9281 wiichuck], on se retrouve à devoir envoyer VCC sur A3 et GND sur A2 : &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#define pwrpin PORTC3&lt;br /&gt;
#define gndpin PORTC2&lt;br /&gt;
    DDRC |= _BV(pwrpin) | _BV(gndpin);&lt;br /&gt;
    PORTC &amp;amp;=~ _BV(gndpin);&lt;br /&gt;
    PORTC |=  _BV(pwrpin);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
_BV sert à assigner une sortie particulière plutôt que de devoir assigner tout le port comme en assignation explicite.&lt;br /&gt;
&lt;br /&gt;
=== Commande de la matrice ===&lt;br /&gt;
La matrice est accessible par les 64 colonnes et les 8 étages. Ceci signifie qu'il faudrait, si l'on souhaitait connecter toutes ces entrées / sorties directement sur les sorties d'un Arduino, utiliser 72 broches, ce qui n'est pas possible. Il faut donc réduire le nombre de broches à commander grâce à du multiplexage et des registres à décalage.&lt;br /&gt;
&amp;lt;br&amp;gt;Pour commmander les sorties, on peut soit faire une boucle qui assigne la bonne valeur à chaque broche, soit écrire directement dans le port qui gère ces sorties, ce qui semble être plus rapide et évite de devoir utiliser les Digital.Write().&lt;/div&gt;</summary>
		<author><name>Mde-bie</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=Matrice_de_LED_3D&amp;diff=4572</id>
		<title>Matrice de LED 3D</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=Matrice_de_LED_3D&amp;diff=4572"/>
				<updated>2013-03-21T09:44:16Z</updated>
		
		<summary type="html">&lt;p&gt;Mde-bie : /* Mercredi 20 Mars */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Présentation ==&lt;br /&gt;
Le but de ce projet est de concevoir une matrice 3D composée de 512 leds (8x8x8) et d'y faire afficher dans un premier temps des formes géométriques (par exemple à partir de formules mathématiques) et dans un second temps de réaliser un jeu de type Snake, pilotable grâce à une manette de Wii.&lt;br /&gt;
Le tout sera présenté lors des journées Portes Ouvertes de l'école afin de promouvoir le département IMA.&lt;br /&gt;
&lt;br /&gt;
=== Matériel requis ===&lt;br /&gt;
* 512 leds et des fils pour les connecter entre elles&lt;br /&gt;
* un Arduino&lt;br /&gt;
* des composants permettant de commander les 64 entrées et 8 sorties de la matrice avec beaucoup moins de sorties disponibles sur l'Arduino&lt;br /&gt;
** (x1) SN74HCT138 - 3-line to 8-line Decoder (pour les etages)&lt;br /&gt;
** (x8) 74HCT595 - 8-bit Serial-in/serial or parallel-out shift register with output latches 3-state&lt;br /&gt;
** (x8) 74HCT244 - 8-bit buffer/line driver with 3-state outputs (attention : courant max trop faible ??)&lt;br /&gt;
http://www.zem.fr/decouverte-du-composant-74hc595-8-bit-shift-register/&lt;br /&gt;
** 2e solution :  &lt;br /&gt;
*** 74HC154 decoder 4-16&lt;br /&gt;
*** (x8) ULN2804 buffer 8 bit (500 mA -&amp;gt; ok pour les leds)&lt;br /&gt;
&lt;br /&gt;
* de quoi alimenter les leds (alimentation de 1A à 1.5A)&lt;br /&gt;
* une manette de Wii&lt;br /&gt;
&lt;br /&gt;
== Avancement du projet==&lt;br /&gt;
=== Lundi 4 Février ===&lt;br /&gt;
Cette première séance a été mise à profit afin de mieux cerner le projet, en discutant avec les enseignants et en commançant les recherches sur la manière de réaliser la matrice.&lt;br /&gt;
=== Jeudi 7 Février ===&lt;br /&gt;
Traçage de plans de montage, remise en question quant au moyen de commander les 64 colonnes de leds (le multiplexage semblait le plus évident mais d'autres possibilités comme des registres à décalage pourraient également convenir).&lt;br /&gt;
=== Lundi 11 Février ===&lt;br /&gt;
Définition des moyens en composants pour créer le circuit de commande. Création du patron du guide qui servira à aligner les leds et les souder facilement.&lt;br /&gt;
&amp;lt;br&amp;gt;Ce patron a été transmis à la personne qui se chargera de fabriquer le support par commande numérique.&lt;br /&gt;
&lt;br /&gt;
=== Jeudi 14 Février ===&lt;br /&gt;
Séance mise à profit pour compter et tester les 512 leds (en y ajoutant quelques pièces en cas de souci au montage).&lt;br /&gt;
=== Lundi 25 Février ===&lt;br /&gt;
Recherche à propos du moyen de connecter un nunchuck en filaire ou une Wiimote en bluetooth. La Wiimote requiert un type de connexion non offert par les cartes Arduino.&lt;br /&gt;
Création de PCB pour la carte qui supportera les composants et redéfinition des composants nécessaires (les ULN2803 seront utilisés à la place des 74HCT244 dans la première solution).&lt;br /&gt;
&lt;br /&gt;
=== Mercredi 27 Février ===&lt;br /&gt;
Le travail de création du PCB est bien avancé, il a été retardé car il fallait recréer des librairies de composants utilisés dans le montage.&lt;br /&gt;
&amp;lt;br&amp;gt;Un petit inconvénient est survenu, il semble que les ULN2803 ne soient pas parfaitement adaptés, en effet il nous faudrait plutôt des montages de transistors capables de fournir de la puissance vers les LEDs. À première vue il faudrait utiliser des composants de type &amp;quot;Source type darlington transistor array&amp;quot; (comme le M54564P).&lt;br /&gt;
&amp;lt;br&amp;gt;Le nunchuck est connecté sur Arduino Uno dans un premier temps (problèmes de drivers pour un Mega sur Windows), nous reconsidérons l'utilité de prendre un Mega pour ce projet. Une Uno semble suffire du point de vue matériel.&lt;br /&gt;
&amp;lt;br&amp;gt;Le nunchuck utilise I2C, nous savons récupérer les différentes informations provenant de celui-ci (accéléromètre X,Y,Z, joystick X,Y, boutons Z et C). Pour le connecter sur Arduino nous avons utilisé un adaptateur &amp;quot;wiichuck&amp;quot; mais nus avons également pensé fabriquer cet adaptateur par nous-mêmes au vu de la simplicité du montage. &lt;br /&gt;
&amp;lt;br&amp;gt;Point à travailler : savoir quels seuils de l'accéléromètre sont exploitables pour l'utilisation envisagée (choix des modes de jeu, etc...), ceux-ci sont différents en focntion de la vitesse à laquelle le nunchuck est déplacé.&lt;br /&gt;
&lt;br /&gt;
=== Jeudi 28 Février ===&lt;br /&gt;
Après quelques recherches il semble que nos doutes soient fondés, il faut remplacer les ULN2803 initialement prévus par des TD62783 APG/AFG/AFWG. En effet les ULN2804 sont des &amp;quot;sink drivers&amp;quot; alors qu'il nous faut des &amp;quot;source drivers&amp;quot; comme les TD62783.&lt;br /&gt;
&amp;lt;br&amp;gt;Au niveau de l'Arduino, l'acquisition des données provenant du Nunchuck est à présent fonctionnelle, on peut donc passer au traitement de ces données.&lt;br /&gt;
&lt;br /&gt;
=== Lundi 4 Mars ===&lt;br /&gt;
Nous contrôlons des LEDs grâce au nunchuck. On peut remarquer que les axes X,Y et Z de l'accéléromètre ne réagissent pas de la même manière et ne sont pas réellement indépendants. Ceci pose un problème de choix de l'axe à utiliser pour telle ou telle fonction : les axes Y et Z réagissent quasiment de la même manière à un mouvement vers le haut.&lt;br /&gt;
&amp;lt;br&amp;gt;De plus les broches 0 et 1 numériques servent à la liaison série (RX TX), ce qui pose problème pour l'instant car nous avons besoin de toutes les broches numériques et si on initialise le port série dans le code( Serial.begin), ces 2 broches deviennent uniquement utilisées pour la liaison série. Cependant les broches analogiques non utilisées semblent pouvoir être utilisées en tant que sorties numériques.&lt;br /&gt;
&lt;br /&gt;
=== Mercredi 6 Mars ===&lt;br /&gt;
Test du jour : gérer l'allumage d'une ligne de leds, une par une et dans les 2 sens, grâce au nunchuck (accéléromètre X), choix de la vitesse de défilement avec le joystick. &lt;br /&gt;
&amp;lt;br&amp;gt;Réflexion quant à l'algorithme du jeu Snake, et à l'implémentation sur l'arduino.&lt;br /&gt;
&amp;lt;br&amp;gt;La structure du code se déroule ainsi :&lt;br /&gt;
*setup : initialisation du nunchuck, calibrage des valeurs des accéléromètes, joystick et boutons&lt;br /&gt;
*loop :&lt;br /&gt;
**demande et réception des données du nunchuck et décodage de ces données&lt;br /&gt;
**partie traitement des données : calcul des ordres à donner à la matrice&lt;br /&gt;
**affichage sur la matrice&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Lundi 11 Mars ===&lt;br /&gt;
Voici l'avancement du PCB de la carte qui commandera les 512 LED (partie Hardware) :&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;[[Fichier:PCB_commande_matrice.png]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Il reste quelques pistes à relier sur le PCB suite à quoi nous pourrons commencer les tests sur plaquette grâce aux composants reçus.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Niveau informatique : détermination des seuils de perception d'allumage des LEDs, c'est à dire quelle est la durée maximale qui permet de voir les LEDs (allumées l'une après l'autre) comme si elles étaient allumées en même temps.&lt;br /&gt;
&amp;lt;br&amp;gt;On obtient pour 6 LEDs de test un temps de pause maximal de 4 ms par LED, soit une boucle de 24 ms max (rafraichissement de 42 Hz minimum).&lt;br /&gt;
&lt;br /&gt;
=== Mercredi 13 Mars ===&lt;br /&gt;
Réception d'un nouveau Nunchuck. Un peu de temps perdu à devoir retester et recalibrer les valeurs, car les accéléromètres réagissent différemment du Nunchuck que nous avions emprunté.&lt;br /&gt;
&amp;lt;br&amp;gt;D'un autre côté, nous avons commencé à écrire un algorithme de jeu Snake en utilisant une matrice 2D 8x8 Sparkfun en attendant la vraie matrice 3D. Cette matrice de développement a l'avantage de représenter une méthode de transfert qui ressemble en partie à la solution que nous avons adoptée pour la matrice 3D, c'est à dire que l'on envoie les informations bit par bit en série.&lt;br /&gt;
&amp;lt;br&amp;gt;Une fois l'algorithme opérationnel en 2D, ajouter une troisième dimension devrait être assez aisée.&lt;br /&gt;
&lt;br /&gt;
=== Mercredi 20 Mars ===&lt;br /&gt;
Nous avons maintenant un Snake totalement fonctionnel en 2D sur matrice 8x8, pilotable par le nunchuck. La troisième dimension est codée, il ne restera qu'à la tester une fois en possession de la matrice 3D.&lt;br /&gt;
&amp;lt;br&amp;gt;Cependant il faut revoir le moyen de stocker les valeurs du serpent en mémoire. Un tableau[8][8][8] est le plus simple mais pas le plus efficace pour envoyer les données à la matrice. Un tableau de 8 octets est mieux adapté mais plus compliqué à mettre en œuvre.&lt;br /&gt;
&lt;br /&gt;
Nous avons reçus les registres à décalage et le multiplexeur et avons créé un PCB pour insérer les composants CMS sur des plaques de test. Le premier test à réaliser est d'essayer d’allumer toutes les LEDs en même temps à travers le 74HCT595D pour savoir si le composant peut délivrer un courant suffisant. &lt;br /&gt;
&lt;br /&gt;
[[Fichier:74HCT595D_LED.jpg|thumb|left|upright=3|Plaque de test du composant 74HCT595D]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Explications techniques ==&lt;br /&gt;
&lt;br /&gt;
=== Le jeu Snake ===&lt;br /&gt;
&lt;br /&gt;
Le but du jeu est de tenir le plus longtemps possible en mangeant des &amp;quot;fruits&amp;quot; qui apparaissent sur la matrice. Il faut diriger le serpent vers ces fruits, une fois mangés la queue du serpent s'allonge d'une unité. Si le serpent arrive en bord de la matrice, il réapparait par la face opposée. Le joueur perd lorsque le serpent rencontre sa propre queue.&lt;br /&gt;
&lt;br /&gt;
=== Protocole I2C ===&lt;br /&gt;
&lt;br /&gt;
I2C (Inter Integrated Circuit) est la norme à utiliser pour dialoguer avec le nunchuck. Celle-ci utilise 2 fils (data et clock), les 2 autres fils étant l'alimentation et la masse. L'utilisation de cette norme impose d'utiliser les broches A4 et A5 sur un Arduino Uno car seules celles-ci sont utilisables pour ce protocole. En utilisant un adaptateur comme le [https://www.sparkfun.com/products/9281 wiichuck], on se retrouve à devoir envoyer VCC sur A3 et GND sur A2 : &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#define pwrpin PORTC3&lt;br /&gt;
#define gndpin PORTC2&lt;br /&gt;
    DDRC |= _BV(pwrpin) | _BV(gndpin);&lt;br /&gt;
    PORTC &amp;amp;=~ _BV(gndpin);&lt;br /&gt;
    PORTC |=  _BV(pwrpin);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
_BV sert à assigner une sortie particulière plutôt que de devoir assigner tout le port comme en assignation explicite.&lt;br /&gt;
&lt;br /&gt;
=== Commande de la matrice ===&lt;br /&gt;
La matrice est accessible par les 64 colonnes et les 8 étages. Ceci signifie qu'il faudrait, si l'on souhaitait connecter toutes ces entrées / sorties directement sur les sorties d'un Arduino, utiliser 72 broches, ce qui n'est pas possible. Il faut donc réduire le nombre de broches à commander grâce à du multiplexage et des registres à décalage.&lt;br /&gt;
&amp;lt;br&amp;gt;Pour commmander les sorties, on peut soit faire une boucle qui assigne la bonne valeur à chaque broche, soit écrire directement dans le port qui gère ces sorties, ce qui semble être plus rapide et évite de devoir utiliser les Digital.Write().&lt;/div&gt;</summary>
		<author><name>Mde-bie</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=Matrice_de_LED_3D&amp;diff=4571</id>
		<title>Matrice de LED 3D</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=Matrice_de_LED_3D&amp;diff=4571"/>
				<updated>2013-03-21T09:43:44Z</updated>
		
		<summary type="html">&lt;p&gt;Mde-bie : /* Mercredi 20 Mars */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Présentation ==&lt;br /&gt;
Le but de ce projet est de concevoir une matrice 3D composée de 512 leds (8x8x8) et d'y faire afficher dans un premier temps des formes géométriques (par exemple à partir de formules mathématiques) et dans un second temps de réaliser un jeu de type Snake, pilotable grâce à une manette de Wii.&lt;br /&gt;
Le tout sera présenté lors des journées Portes Ouvertes de l'école afin de promouvoir le département IMA.&lt;br /&gt;
&lt;br /&gt;
=== Matériel requis ===&lt;br /&gt;
* 512 leds et des fils pour les connecter entre elles&lt;br /&gt;
* un Arduino&lt;br /&gt;
* des composants permettant de commander les 64 entrées et 8 sorties de la matrice avec beaucoup moins de sorties disponibles sur l'Arduino&lt;br /&gt;
** (x1) SN74HCT138 - 3-line to 8-line Decoder (pour les etages)&lt;br /&gt;
** (x8) 74HCT595 - 8-bit Serial-in/serial or parallel-out shift register with output latches 3-state&lt;br /&gt;
** (x8) 74HCT244 - 8-bit buffer/line driver with 3-state outputs (attention : courant max trop faible ??)&lt;br /&gt;
http://www.zem.fr/decouverte-du-composant-74hc595-8-bit-shift-register/&lt;br /&gt;
** 2e solution :  &lt;br /&gt;
*** 74HC154 decoder 4-16&lt;br /&gt;
*** (x8) ULN2804 buffer 8 bit (500 mA -&amp;gt; ok pour les leds)&lt;br /&gt;
&lt;br /&gt;
* de quoi alimenter les leds (alimentation de 1A à 1.5A)&lt;br /&gt;
* une manette de Wii&lt;br /&gt;
&lt;br /&gt;
== Avancement du projet==&lt;br /&gt;
=== Lundi 4 Février ===&lt;br /&gt;
Cette première séance a été mise à profit afin de mieux cerner le projet, en discutant avec les enseignants et en commançant les recherches sur la manière de réaliser la matrice.&lt;br /&gt;
=== Jeudi 7 Février ===&lt;br /&gt;
Traçage de plans de montage, remise en question quant au moyen de commander les 64 colonnes de leds (le multiplexage semblait le plus évident mais d'autres possibilités comme des registres à décalage pourraient également convenir).&lt;br /&gt;
=== Lundi 11 Février ===&lt;br /&gt;
Définition des moyens en composants pour créer le circuit de commande. Création du patron du guide qui servira à aligner les leds et les souder facilement.&lt;br /&gt;
&amp;lt;br&amp;gt;Ce patron a été transmis à la personne qui se chargera de fabriquer le support par commande numérique.&lt;br /&gt;
&lt;br /&gt;
=== Jeudi 14 Février ===&lt;br /&gt;
Séance mise à profit pour compter et tester les 512 leds (en y ajoutant quelques pièces en cas de souci au montage).&lt;br /&gt;
=== Lundi 25 Février ===&lt;br /&gt;
Recherche à propos du moyen de connecter un nunchuck en filaire ou une Wiimote en bluetooth. La Wiimote requiert un type de connexion non offert par les cartes Arduino.&lt;br /&gt;
Création de PCB pour la carte qui supportera les composants et redéfinition des composants nécessaires (les ULN2803 seront utilisés à la place des 74HCT244 dans la première solution).&lt;br /&gt;
&lt;br /&gt;
=== Mercredi 27 Février ===&lt;br /&gt;
Le travail de création du PCB est bien avancé, il a été retardé car il fallait recréer des librairies de composants utilisés dans le montage.&lt;br /&gt;
&amp;lt;br&amp;gt;Un petit inconvénient est survenu, il semble que les ULN2803 ne soient pas parfaitement adaptés, en effet il nous faudrait plutôt des montages de transistors capables de fournir de la puissance vers les LEDs. À première vue il faudrait utiliser des composants de type &amp;quot;Source type darlington transistor array&amp;quot; (comme le M54564P).&lt;br /&gt;
&amp;lt;br&amp;gt;Le nunchuck est connecté sur Arduino Uno dans un premier temps (problèmes de drivers pour un Mega sur Windows), nous reconsidérons l'utilité de prendre un Mega pour ce projet. Une Uno semble suffire du point de vue matériel.&lt;br /&gt;
&amp;lt;br&amp;gt;Le nunchuck utilise I2C, nous savons récupérer les différentes informations provenant de celui-ci (accéléromètre X,Y,Z, joystick X,Y, boutons Z et C). Pour le connecter sur Arduino nous avons utilisé un adaptateur &amp;quot;wiichuck&amp;quot; mais nus avons également pensé fabriquer cet adaptateur par nous-mêmes au vu de la simplicité du montage. &lt;br /&gt;
&amp;lt;br&amp;gt;Point à travailler : savoir quels seuils de l'accéléromètre sont exploitables pour l'utilisation envisagée (choix des modes de jeu, etc...), ceux-ci sont différents en focntion de la vitesse à laquelle le nunchuck est déplacé.&lt;br /&gt;
&lt;br /&gt;
=== Jeudi 28 Février ===&lt;br /&gt;
Après quelques recherches il semble que nos doutes soient fondés, il faut remplacer les ULN2803 initialement prévus par des TD62783 APG/AFG/AFWG. En effet les ULN2804 sont des &amp;quot;sink drivers&amp;quot; alors qu'il nous faut des &amp;quot;source drivers&amp;quot; comme les TD62783.&lt;br /&gt;
&amp;lt;br&amp;gt;Au niveau de l'Arduino, l'acquisition des données provenant du Nunchuck est à présent fonctionnelle, on peut donc passer au traitement de ces données.&lt;br /&gt;
&lt;br /&gt;
=== Lundi 4 Mars ===&lt;br /&gt;
Nous contrôlons des LEDs grâce au nunchuck. On peut remarquer que les axes X,Y et Z de l'accéléromètre ne réagissent pas de la même manière et ne sont pas réellement indépendants. Ceci pose un problème de choix de l'axe à utiliser pour telle ou telle fonction : les axes Y et Z réagissent quasiment de la même manière à un mouvement vers le haut.&lt;br /&gt;
&amp;lt;br&amp;gt;De plus les broches 0 et 1 numériques servent à la liaison série (RX TX), ce qui pose problème pour l'instant car nous avons besoin de toutes les broches numériques et si on initialise le port série dans le code( Serial.begin), ces 2 broches deviennent uniquement utilisées pour la liaison série. Cependant les broches analogiques non utilisées semblent pouvoir être utilisées en tant que sorties numériques.&lt;br /&gt;
&lt;br /&gt;
=== Mercredi 6 Mars ===&lt;br /&gt;
Test du jour : gérer l'allumage d'une ligne de leds, une par une et dans les 2 sens, grâce au nunchuck (accéléromètre X), choix de la vitesse de défilement avec le joystick. &lt;br /&gt;
&amp;lt;br&amp;gt;Réflexion quant à l'algorithme du jeu Snake, et à l'implémentation sur l'arduino.&lt;br /&gt;
&amp;lt;br&amp;gt;La structure du code se déroule ainsi :&lt;br /&gt;
*setup : initialisation du nunchuck, calibrage des valeurs des accéléromètes, joystick et boutons&lt;br /&gt;
*loop :&lt;br /&gt;
**demande et réception des données du nunchuck et décodage de ces données&lt;br /&gt;
**partie traitement des données : calcul des ordres à donner à la matrice&lt;br /&gt;
**affichage sur la matrice&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Lundi 11 Mars ===&lt;br /&gt;
Voici l'avancement du PCB de la carte qui commandera les 512 LED (partie Hardware) :&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;[[Fichier:PCB_commande_matrice.png]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Il reste quelques pistes à relier sur le PCB suite à quoi nous pourrons commencer les tests sur plaquette grâce aux composants reçus.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Niveau informatique : détermination des seuils de perception d'allumage des LEDs, c'est à dire quelle est la durée maximale qui permet de voir les LEDs (allumées l'une après l'autre) comme si elles étaient allumées en même temps.&lt;br /&gt;
&amp;lt;br&amp;gt;On obtient pour 6 LEDs de test un temps de pause maximal de 4 ms par LED, soit une boucle de 24 ms max (rafraichissement de 42 Hz minimum).&lt;br /&gt;
&lt;br /&gt;
=== Mercredi 13 Mars ===&lt;br /&gt;
Réception d'un nouveau Nunchuck. Un peu de temps perdu à devoir retester et recalibrer les valeurs, car les accéléromètres réagissent différemment du Nunchuck que nous avions emprunté.&lt;br /&gt;
&amp;lt;br&amp;gt;D'un autre côté, nous avons commencé à écrire un algorithme de jeu Snake en utilisant une matrice 2D 8x8 Sparkfun en attendant la vraie matrice 3D. Cette matrice de développement a l'avantage de représenter une méthode de transfert qui ressemble en partie à la solution que nous avons adoptée pour la matrice 3D, c'est à dire que l'on envoie les informations bit par bit en série.&lt;br /&gt;
&amp;lt;br&amp;gt;Une fois l'algorithme opérationnel en 2D, ajouter une troisième dimension devrait être assez aisée.&lt;br /&gt;
&lt;br /&gt;
=== Mercredi 20 Mars ===&lt;br /&gt;
Nous avons maintenant un Snake totalement fonctionnel en 2D sur matrice 8x8, pilotable par le nunchuck. La troisième dimension est codée, il ne restera qu'à la tester une fois en possession de la matrice 3D.&lt;br /&gt;
&amp;lt;br&amp;gt;Cependant il faut revoir le moyen de stocker les valeurs du serpent en mémoire. Un tableau[8][8][8] est le plus simple mais pas le plus efficace pour envoyer les données à la matrice. Un tableau de 8 octets est mieux adapté mais plus compliqué à mettre en œuvre.&lt;br /&gt;
&lt;br /&gt;
Nous avons reçus les registres à décalage et le multiplexeur et avons créé un PCB pour insérer les composants CMS sur des plaques de test. Le premier test à réaliser est d'essayer d’allumer toutes les LEDs en même temps à travers le 74HCT595D pour savoir si le composant peut délivrer un courant suffisant. &lt;br /&gt;
&lt;br /&gt;
[[Fichier:74HCT595D_LED.jpg|thumb|left|upright=3|Plaque de test du composant 74HCT595D]]&lt;br /&gt;
&lt;br /&gt;
== Explications techniques ==&lt;br /&gt;
&lt;br /&gt;
=== Le jeu Snake ===&lt;br /&gt;
&lt;br /&gt;
Le but du jeu est de tenir le plus longtemps possible en mangeant des &amp;quot;fruits&amp;quot; qui apparaissent sur la matrice. Il faut diriger le serpent vers ces fruits, une fois mangés la queue du serpent s'allonge d'une unité. Si le serpent arrive en bord de la matrice, il réapparait par la face opposée. Le joueur perd lorsque le serpent rencontre sa propre queue.&lt;br /&gt;
&lt;br /&gt;
=== Protocole I2C ===&lt;br /&gt;
&lt;br /&gt;
I2C (Inter Integrated Circuit) est la norme à utiliser pour dialoguer avec le nunchuck. Celle-ci utilise 2 fils (data et clock), les 2 autres fils étant l'alimentation et la masse. L'utilisation de cette norme impose d'utiliser les broches A4 et A5 sur un Arduino Uno car seules celles-ci sont utilisables pour ce protocole. En utilisant un adaptateur comme le [https://www.sparkfun.com/products/9281 wiichuck], on se retrouve à devoir envoyer VCC sur A3 et GND sur A2 : &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#define pwrpin PORTC3&lt;br /&gt;
#define gndpin PORTC2&lt;br /&gt;
    DDRC |= _BV(pwrpin) | _BV(gndpin);&lt;br /&gt;
    PORTC &amp;amp;=~ _BV(gndpin);&lt;br /&gt;
    PORTC |=  _BV(pwrpin);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
_BV sert à assigner une sortie particulière plutôt que de devoir assigner tout le port comme en assignation explicite.&lt;br /&gt;
&lt;br /&gt;
=== Commande de la matrice ===&lt;br /&gt;
La matrice est accessible par les 64 colonnes et les 8 étages. Ceci signifie qu'il faudrait, si l'on souhaitait connecter toutes ces entrées / sorties directement sur les sorties d'un Arduino, utiliser 72 broches, ce qui n'est pas possible. Il faut donc réduire le nombre de broches à commander grâce à du multiplexage et des registres à décalage.&lt;br /&gt;
&amp;lt;br&amp;gt;Pour commmander les sorties, on peut soit faire une boucle qui assigne la bonne valeur à chaque broche, soit écrire directement dans le port qui gère ces sorties, ce qui semble être plus rapide et évite de devoir utiliser les Digital.Write().&lt;/div&gt;</summary>
		<author><name>Mde-bie</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=Fichier:74HCT595D_LED.jpg&amp;diff=4570</id>
		<title>Fichier:74HCT595D LED.jpg</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=Fichier:74HCT595D_LED.jpg&amp;diff=4570"/>
				<updated>2013-03-21T09:28:58Z</updated>
		
		<summary type="html">&lt;p&gt;Mde-bie : Plaque de test pour le 74HCT595D&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Plaque de test pour le 74HCT595D&lt;/div&gt;</summary>
		<author><name>Mde-bie</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=Matrice_de_LED_3D&amp;diff=4488</id>
		<title>Matrice de LED 3D</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=Matrice_de_LED_3D&amp;diff=4488"/>
				<updated>2013-03-11T16:01:54Z</updated>
		
		<summary type="html">&lt;p&gt;Mde-bie : /* Avancement du projet */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Présentation ==&lt;br /&gt;
Le but de ce projet est de concevoir une matrice 3D composée de 512 leds (8x8x8) et d'y faire afficher dans un premier temps des formes géométriques (par exemple à partir de formules mathématiques) et dans un second temps de réaliser un jeu de type Snake, pilotable grâce à une manette de Wii.&lt;br /&gt;
Le tout sera présenté lors des journées Portes Ouvertes de l'école afin de promouvoir le département IMA.&lt;br /&gt;
&lt;br /&gt;
=== Matériel requis ===&lt;br /&gt;
* 512 leds et des fils pour les connecter entre elles&lt;br /&gt;
* un Arduino&lt;br /&gt;
* des composants permettant de commander les 64 entrées et 8 sorties de la matrice avec beaucoup moins de sorties disponibles sur l'Arduino&lt;br /&gt;
** (x1) SN74HCT138 - 3-line to 8-line Decoder (pour les etages)&lt;br /&gt;
** (x8) 74HCT595 - 8-bit Serial-in/serial or parallel-out shift register with output latches 3-state&lt;br /&gt;
** (x8) 74HCT244 - 8-bit buffer/line driver with 3-state outputs (attention : courant max trop faible ??)&lt;br /&gt;
http://www.zem.fr/decouverte-du-composant-74hc595-8-bit-shift-register/&lt;br /&gt;
** 2e solution :  &lt;br /&gt;
*** 74HC154 decoder 4-16&lt;br /&gt;
*** (x8) ULN2804 buffer 8 bit (500 mA -&amp;gt; ok pour les leds)&lt;br /&gt;
&lt;br /&gt;
* de quoi alimenter les leds (alimentation de 1A à 1.5A)&lt;br /&gt;
* une manette de Wii&lt;br /&gt;
&lt;br /&gt;
== Avancement du projet==&lt;br /&gt;
=== Lundi 4 Février ===&lt;br /&gt;
Cette première séance a été mise à profit afin de mieux cerner le projet, en discutant avec les enseignants et en commançant les recherches sur la manière de réaliser la matrice.&lt;br /&gt;
=== Jeudi 7 Février ===&lt;br /&gt;
Traçage de plans de montage, remise en question quant au moyen de commander les 64 colonnes de leds (le multiplexage semblait le plus évident mais d'autres possibilités comme des registres à décalage pourraient également convenir).&lt;br /&gt;
=== Lundi 11 Février ===&lt;br /&gt;
Définition des moyens en composants pour créer le circuit de commande. Création du patron du guide qui servira à aligner les leds et les souder facilement.&lt;br /&gt;
&amp;lt;br&amp;gt;Ce patron a été transmis à la personne qui se chargera de fabriquer le support par commande numérique.&lt;br /&gt;
&lt;br /&gt;
=== Jeudi 14 Février ===&lt;br /&gt;
Séance mise à profit pour compter et tester les 512 leds (en y ajoutant quelques pièces en cas de souci au montage).&lt;br /&gt;
=== Lundi 25 Février ===&lt;br /&gt;
Recherche à propos du moyen de connecter un nunchuck en filaire ou une Wiimote en bluetooth. La Wiimote requiert un type de connexion non offert par les cartes Arduino.&lt;br /&gt;
Création de PCB pour la carte qui supportera les composants et redéfinition des composants nécessaires (les ULN2803 seront utilisés à la place des 74HCT244 dans la première solution).&lt;br /&gt;
&lt;br /&gt;
=== Mercredi 27 Février ===&lt;br /&gt;
Le travail de création du PCB est bien avancé, il a été retardé car il fallait recréer des librairies de composants utilisés dans le montage.&lt;br /&gt;
&amp;lt;br&amp;gt;Un petit inconvénient est survenu, il semble que les ULN2803 ne soient pas parfaitement adaptés, en effet il nous faudrait plutôt des montages de transistors capables de fournir de la puissance vers les LEDs. À première vue il faudrait utiliser des composants de type &amp;quot;Source type darlington transistor array&amp;quot; (comme le M54564P).&lt;br /&gt;
&amp;lt;br&amp;gt;Le nunchuck est connecté sur Arduino Uno dans un premier temps (problèmes de drivers pour un Mega sur Windows), nous reconsidérons l'utilité de prendre un Mega pour ce projet. Une Uno semble suffire du point de vue matériel.&lt;br /&gt;
&amp;lt;br&amp;gt;Le nunchuck utilise I2C, nous savons récupérer les différentes informations provenant de celui-ci (accéléromètre X,Y,Z, joystick X,Y, boutons Z et C). Pour le connecter sur Arduino nous avons utilisé un adaptateur &amp;quot;wiichuck&amp;quot; mais nus avons également pensé fabriquer cet adaptateur par nous-mêmes au vu de la simplicité du montage. &lt;br /&gt;
&amp;lt;br&amp;gt;Point à travailler : savoir quels seuils de l'accéléromètre sont exploitables pour l'utilisation envisagée (choix des modes de jeu, etc...), ceux-ci sont différents en focntion de la vitesse à laquelle le nunchuck est déplacé.&lt;br /&gt;
&lt;br /&gt;
=== Jeudi 28 Février ===&lt;br /&gt;
Après quelques recherches il semble que nos doutes soient fondés, il faut remplacer les ULN2803 initialement prévus par des TD62783 APG/AFG/AFWG. En effet les ULN2804 sont des &amp;quot;sink drivers&amp;quot; alors qu'il nous faut des &amp;quot;source drivers&amp;quot; comme les TD62783.&lt;br /&gt;
&amp;lt;br&amp;gt;Au niveau de l'Arduino, l'acquisition des données provenant du Nunchuck est à présent fonctionnelle, on peut donc passer au traitement de ces données.&lt;br /&gt;
&lt;br /&gt;
=== Lundi 4 Mars ===&lt;br /&gt;
Nous contrôlons des LEDs grâce au nunchuck. On peut remarquer que les axes X,Y et Z de l'accéléromètre ne réagissent pas de la même manière et ne sont pas réellement indépendants. Ceci pose un problème de choix de l'axe à utiliser pour telle ou telle fonction : les axes Y et Z réagissent quasiment de la même manière à un mouvement vers le haut.&lt;br /&gt;
&amp;lt;br&amp;gt;De plus les broches 0 et 1 numériques servent à la liaison série (RX TX), ce qui pose problème pour l'instant car nous avons besoin de toutes les broches numériques et si on initialise le port série dans le code( Serial.begin), ces 2 broches deviennent uniquement utilisées pour la liaison série. Cependant les broches analogiques non utilisées semblent pouvoir être utilisées en tant que sorties numériques.&lt;br /&gt;
&lt;br /&gt;
=== Mercredi 6 Mars ===&lt;br /&gt;
Test du jour : gérer l'allumage d'une ligne de leds, une par une et dans les 2 sens, grâce au nunchuck (accéléromètre X), choix de la vitesse de défilement avec le joystick. &lt;br /&gt;
&amp;lt;br&amp;gt;Réflexion quant à l'algorithme du jeu Snake, et à l'implémentation sur l'arduino.&lt;br /&gt;
&amp;lt;br&amp;gt;La structure du code se déroule ainsi :&lt;br /&gt;
*setup : initialisation du nunchuck, calibrage des valeurs des accéléromètes, joystick et boutons&lt;br /&gt;
*loop :&lt;br /&gt;
**demande et réception des données du nunchuck et décodage de ces données&lt;br /&gt;
**partie traitement des données : calcul des ordres à donner à la matrice&lt;br /&gt;
**affichage sur la matrice&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Lundi 11 Mars ===&lt;br /&gt;
Voici l'avancement du PCB de la carte qui commandera les 512 LED (partie Hardware) :&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;[[Fichier:PCB_commande_matrice.png]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Il reste quelques pistes à relier sur le PCB suite à quoi nous pourrons commencer les tests sur plaquette grâce aux composants reçus.&lt;br /&gt;
&lt;br /&gt;
== Explications techniques ==&lt;br /&gt;
&lt;br /&gt;
=== Le jeu Snake ===&lt;br /&gt;
&lt;br /&gt;
Le but du jeu est de tenir le plus longtemps possible en mangeant des &amp;quot;fruits&amp;quot; qui apparaissent sur la matrice. Il faut diriger le serpent vers ces fruits, une fois mangés la queue du serpent s'allonge d'une unité. Si le serpent arrive en bord de la matrice, il réapparait par la face opposée. Le joueur perd lorsque le serpent rencontre sa propre queue.&lt;br /&gt;
&lt;br /&gt;
=== Protocole I2C ===&lt;br /&gt;
&lt;br /&gt;
I2C (Inter Integrated Circuit) est la norme à utiliser pour dialoguer avec le nunchuck. Celle-ci utilise 2 fils (data et clock), les 2 autres fils étant l'alimentation et la masse. L'utilisation de cette norme impose d'utiliser les broches A4 et A5 sur un Arduino Uno car seules celles-ci sont utilisables pour ce protocole. En utilisant un adaptateur comme le [https://www.sparkfun.com/products/9281 wiichuck], on se retrouve à devoir envoyer VCC sur A3 et GND sur A2 : &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#define pwrpin PORTC3&lt;br /&gt;
#define gndpin PORTC2&lt;br /&gt;
    DDRC |= _BV(pwrpin) | _BV(gndpin);&lt;br /&gt;
    PORTC &amp;amp;=~ _BV(gndpin);&lt;br /&gt;
    PORTC |=  _BV(pwrpin);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
_BV sert à assigner une sortie particulière plutôt que de devoir assigner tout le port comme en assignation explicite.&lt;br /&gt;
&lt;br /&gt;
=== Commande de la matrice ===&lt;br /&gt;
La matrice est accessible par les 64 colonnes et les 8 étages. Ceci signifie qu'il faudrait, si l'on souhaitait connecter toutes ces entrées / sorties directement sur les sorties d'un Arduino, utiliser 72 broches, ce qui n'est pas possible. Il faut donc réduire le nombre de broches à commander grâce à du multiplexage et des registres à décalage.&lt;br /&gt;
&amp;lt;br&amp;gt;Pour commmander les sorties, on peut soit faire une boucle qui assigne la bonne valeur à chaque broche, soit écrire directement dans le port qui gère ces sorties, ce qui semble être plus rapide et évite de devoir utiliser les Digital.Write().&lt;/div&gt;</summary>
		<author><name>Mde-bie</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=Matrice_de_LED_3D&amp;diff=4487</id>
		<title>Matrice de LED 3D</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=Matrice_de_LED_3D&amp;diff=4487"/>
				<updated>2013-03-11T15:56:43Z</updated>
		
		<summary type="html">&lt;p&gt;Mde-bie : /* Lundi 11 Mars */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Présentation ==&lt;br /&gt;
Le but de ce projet est de concevoir une matrice 3D composée de 512 leds (8x8x8) et d'y faire afficher dans un premier temps des formes géométriques (par exemple à partir de formules mathématiques) et dans un second temps de réaliser un jeu de type Snake, pilotable grâce à une manette de Wii.&lt;br /&gt;
Le tout sera présenté lors des journées Portes Ouvertes de l'école afin de promouvoir le département IMA.&lt;br /&gt;
&lt;br /&gt;
=== Matériel requis ===&lt;br /&gt;
* 512 leds et des fils pour les connecter entre elles&lt;br /&gt;
* un Arduino&lt;br /&gt;
* des composants permettant de commander les 64 entrées et 8 sorties de la matrice avec beaucoup moins de sorties disponibles sur l'Arduino&lt;br /&gt;
** (x1) SN74HCT138 - 3-line to 8-line Decoder (pour les etages)&lt;br /&gt;
** (x8) 74HCT595 - 8-bit Serial-in/serial or parallel-out shift register with output latches 3-state&lt;br /&gt;
** (x8) 74HCT244 - 8-bit buffer/line driver with 3-state outputs (attention : courant max trop faible ??)&lt;br /&gt;
http://www.zem.fr/decouverte-du-composant-74hc595-8-bit-shift-register/&lt;br /&gt;
** 2e solution :  &lt;br /&gt;
*** 74HC154 decoder 4-16&lt;br /&gt;
*** (x8) ULN2804 buffer 8 bit (500 mA -&amp;gt; ok pour les leds)&lt;br /&gt;
&lt;br /&gt;
* de quoi alimenter les leds (alimentation de 1A à 1.5A)&lt;br /&gt;
* une manette de Wii&lt;br /&gt;
&lt;br /&gt;
== Avancement du projet==&lt;br /&gt;
=== Lundi 4 Février ===&lt;br /&gt;
Cette première séance a été mise à profit afin de mieux cerner le projet, en discutant avec les enseignants et en commançant les recherches sur la manière de réaliser la matrice.&lt;br /&gt;
=== Jeudi 7 Février ===&lt;br /&gt;
Traçage de plans de montage, remise en question quant au moyen de commander les 64 colonnes de leds (le multiplexage semblait le plus évident mais d'autres possibilités comme des registres à décalage pourraient également convenir).&lt;br /&gt;
=== Lundi 11 Février ===&lt;br /&gt;
Définition des moyens en composants pour créer le circuit de commande. Création du patron du guide qui servira à aligner les leds et les souder facilement.&lt;br /&gt;
&amp;lt;br&amp;gt;Ce patron a été transmis à la personne qui se chargera de fabriquer le support par commande numérique.&lt;br /&gt;
&lt;br /&gt;
=== Jeudi 14 Février ===&lt;br /&gt;
Séance mise à profit pour compter et tester les 512 leds (en y ajoutant quelques pièces en cas de souci au montage).&lt;br /&gt;
=== Lundi 25 Février ===&lt;br /&gt;
Recherche à propos du moyen de connecter un nunchuck en filaire ou une Wiimote en bluetooth. La Wiimote requiert un type de connexion non offert par les cartes Arduino.&lt;br /&gt;
Création de PCB pour la carte qui supportera les composants et redéfinition des composants nécessaires (les ULN2803 seront utilisés à la place des 74HCT244 dans la première solution).&lt;br /&gt;
&lt;br /&gt;
=== Mercredi 27 Février ===&lt;br /&gt;
Le travail de création du PCB est bien avancé, il a été retardé car il fallait recréer des librairies de composants utilisés dans le montage.&lt;br /&gt;
&amp;lt;br&amp;gt;Un petit inconvénient est survenu, il semble que les ULN2803 ne soient pas parfaitement adaptés, en effet il nous faudrait plutôt des montages de transistors capables de fournir de la puissance vers les LEDs. À première vue il faudrait utiliser des composants de type &amp;quot;Source type darlington transistor array&amp;quot; (comme le M54564P).&lt;br /&gt;
&amp;lt;br&amp;gt;Le nunchuck est connecté sur Arduino Uno dans un premier temps (problèmes de drivers pour un Mega sur Windows), nous reconsidérons l'utilité de prendre un Mega pour ce projet. Une Uno semble suffire du point de vue matériel.&lt;br /&gt;
&amp;lt;br&amp;gt;Le nunchuck utilise I2C, nous savons récupérer les différentes informations provenant de celui-ci (accéléromètre X,Y,Z, joystick X,Y, boutons Z et C). Pour le connecter sur Arduino nous avons utilisé un adaptateur &amp;quot;wiichuck&amp;quot; mais nus avons également pensé fabriquer cet adaptateur par nous-mêmes au vu de la simplicité du montage. &lt;br /&gt;
&amp;lt;br&amp;gt;Point à travailler : savoir quels seuils de l'accéléromètre sont exploitables pour l'utilisation envisagée (choix des modes de jeu, etc...), ceux-ci sont différents en focntion de la vitesse à laquelle le nunchuck est déplacé.&lt;br /&gt;
&lt;br /&gt;
=== Jeudi 28 Février ===&lt;br /&gt;
Après quelques recherches il semble que nos doutes soient fondés, il faut remplacer les ULN2803 initialement prévus par des TD62783 APG/AFG/AFWG. En effet les ULN2804 sont des &amp;quot;sink drivers&amp;quot; alors qu'il nous faut des &amp;quot;source drivers&amp;quot; comme les TD62783.&lt;br /&gt;
&amp;lt;br&amp;gt;Au niveau de l'Arduino, l'acquisition des données provenant du Nunchuck est à présent fonctionnelle, on peut donc passer au traitement de ces données.&lt;br /&gt;
&lt;br /&gt;
=== Lundi 4 Mars ===&lt;br /&gt;
Nous contrôlons des LEDs grâce au nunchuck. On peut remarquer que les axes X,Y et Z de l'accéléromètre ne réagissent pas de la même manière et ne sont pas réellement indépendants. Ceci pose un problème de choix de l'axe à utiliser pour telle ou telle fonction : les axes Y et Z réagissent quasiment de la même manière à un mouvement vers le haut.&lt;br /&gt;
&amp;lt;br&amp;gt;De plus les broches 0 et 1 numériques servent à la liaison série (RX TX), ce qui pose problème pour l'instant car nous avons besoin de toutes les broches numériques et si on initialise le port série dans le code( Serial.begin), ces 2 broches deviennent uniquement utilisées pour la liaison série. Cependant les broches analogiques non utilisées semblent pouvoir être utilisées en tant que sorties numériques.&lt;br /&gt;
&lt;br /&gt;
=== Lundi 11 Mars ===&lt;br /&gt;
Voici l'avancement du PCB de la carte qui commandera les 512 LED (partie Hardware) :&lt;br /&gt;
&lt;br /&gt;
=== Mercredi 6 Mars ===&lt;br /&gt;
Test du jour : gérer l'allumage d'une ligne de leds, une par une et dans les 2 sens, grâce au nunchuck (accéléromètre X), choix de la vitesse de défilement avec le joystick. &lt;br /&gt;
&amp;lt;br&amp;gt;Réflexion quant à l'algorithme du jeu Snake, et à l'implémentation sur l'arduino.&lt;br /&gt;
&amp;lt;br&amp;gt;La structure du code se déroule ainsi :&lt;br /&gt;
*setup : initialisation du nunchuck, calibrage des valeurs des accéléromètes, joystick et boutons&lt;br /&gt;
*loop :&lt;br /&gt;
**demande et réception des données du nunchuck et décodage de ces données&lt;br /&gt;
**partie traitement des données : calcul des ordres à donner à la matrice&lt;br /&gt;
**affichage sur la matrice&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Explications techniques ==&lt;br /&gt;
&lt;br /&gt;
=== Le jeu Snake ===&lt;br /&gt;
&lt;br /&gt;
Le but du jeu est de tenir le plus longtemps possible en mangeant des &amp;quot;fruits&amp;quot; qui apparaissent sur la matrice. Il faut diriger le serpent vers ces fruits, une fois mangés la queue du serpent s'allonge d'une unité. Si le serpent arrive en bord de la matrice, il réapparait par la face opposée. Le joueur perd lorsque le serpent rencontre sa propre queue.&lt;br /&gt;
&lt;br /&gt;
=== Protocole I2C ===&lt;br /&gt;
&lt;br /&gt;
I2C (Inter Integrated Circuit) est la norme à utiliser pour dialoguer avec le nunchuck. Celle-ci utilise 2 fils (data et clock), les 2 autres fils étant l'alimentation et la masse. L'utilisation de cette norme impose d'utiliser les broches A4 et A5 sur un Arduino Uno car seules celles-ci sont utilisables pour ce protocole. En utilisant un adaptateur comme le [https://www.sparkfun.com/products/9281 wiichuck], on se retrouve à devoir envoyer VCC sur A3 et GND sur A2 : &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#define pwrpin PORTC3&lt;br /&gt;
#define gndpin PORTC2&lt;br /&gt;
    DDRC |= _BV(pwrpin) | _BV(gndpin);&lt;br /&gt;
    PORTC &amp;amp;=~ _BV(gndpin);&lt;br /&gt;
    PORTC |=  _BV(pwrpin);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
_BV sert à assigner une sortie particulière plutôt que de devoir assigner tout le port comme en assignation explicite.&lt;br /&gt;
&lt;br /&gt;
=== Commande de la matrice ===&lt;br /&gt;
La matrice est accessible par les 64 colonnes et les 8 étages. Ceci signifie qu'il faudrait, si l'on souhaitait connecter toutes ces entrées / sorties directement sur les sorties d'un Arduino, utiliser 72 broches, ce qui n'est pas possible. Il faut donc réduire le nombre de broches à commander grâce à du multiplexage et des registres à décalage.&lt;br /&gt;
&amp;lt;br&amp;gt;Pour commmander les sorties, on peut soit faire une boucle qui assigne la bonne valeur à chaque broche, soit écrire directement dans le port qui gère ces sorties, ce qui semble être plus rapide et évite de devoir utiliser les Digital.Write().&lt;/div&gt;</summary>
		<author><name>Mde-bie</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=Fichier:PCB_commande_matrice.png&amp;diff=4486</id>
		<title>Fichier:PCB commande matrice.png</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=Fichier:PCB_commande_matrice.png&amp;diff=4486"/>
				<updated>2013-03-11T15:55:28Z</updated>
		
		<summary type="html">&lt;p&gt;Mde-bie : PCB et Schématic de la carte de commande de la matrice de LED 3D.
Révision du 11/03/2013.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;PCB et Schématic de la carte de commande de la matrice de LED 3D.&lt;br /&gt;
Révision du 11/03/2013.&lt;/div&gt;</summary>
		<author><name>Mde-bie</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=Matrice_de_LED_3D&amp;diff=4485</id>
		<title>Matrice de LED 3D</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=Matrice_de_LED_3D&amp;diff=4485"/>
				<updated>2013-03-11T15:53:16Z</updated>
		
		<summary type="html">&lt;p&gt;Mde-bie : /* Avancement du projet */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Présentation ==&lt;br /&gt;
Le but de ce projet est de concevoir une matrice 3D composée de 512 leds (8x8x8) et d'y faire afficher dans un premier temps des formes géométriques (par exemple à partir de formules mathématiques) et dans un second temps de réaliser un jeu de type Snake, pilotable grâce à une manette de Wii.&lt;br /&gt;
Le tout sera présenté lors des journées Portes Ouvertes de l'école afin de promouvoir le département IMA.&lt;br /&gt;
&lt;br /&gt;
=== Matériel requis ===&lt;br /&gt;
* 512 leds et des fils pour les connecter entre elles&lt;br /&gt;
* un Arduino&lt;br /&gt;
* des composants permettant de commander les 64 entrées et 8 sorties de la matrice avec beaucoup moins de sorties disponibles sur l'Arduino&lt;br /&gt;
** (x1) SN74HCT138 - 3-line to 8-line Decoder (pour les etages)&lt;br /&gt;
** (x8) 74HCT595 - 8-bit Serial-in/serial or parallel-out shift register with output latches 3-state&lt;br /&gt;
** (x8) 74HCT244 - 8-bit buffer/line driver with 3-state outputs (attention : courant max trop faible ??)&lt;br /&gt;
http://www.zem.fr/decouverte-du-composant-74hc595-8-bit-shift-register/&lt;br /&gt;
** 2e solution :  &lt;br /&gt;
*** 74HC154 decoder 4-16&lt;br /&gt;
*** (x8) ULN2804 buffer 8 bit (500 mA -&amp;gt; ok pour les leds)&lt;br /&gt;
&lt;br /&gt;
* de quoi alimenter les leds (alimentation de 1A à 1.5A)&lt;br /&gt;
* une manette de Wii&lt;br /&gt;
&lt;br /&gt;
== Avancement du projet==&lt;br /&gt;
=== Lundi 4 Février ===&lt;br /&gt;
Cette première séance a été mise à profit afin de mieux cerner le projet, en discutant avec les enseignants et en commançant les recherches sur la manière de réaliser la matrice.&lt;br /&gt;
=== Jeudi 7 Février ===&lt;br /&gt;
Traçage de plans de montage, remise en question quant au moyen de commander les 64 colonnes de leds (le multiplexage semblait le plus évident mais d'autres possibilités comme des registres à décalage pourraient également convenir).&lt;br /&gt;
=== Lundi 11 Février ===&lt;br /&gt;
Définition des moyens en composants pour créer le circuit de commande. Création du patron du guide qui servira à aligner les leds et les souder facilement.&lt;br /&gt;
&amp;lt;br&amp;gt;Ce patron a été transmis à la personne qui se chargera de fabriquer le support par commande numérique.&lt;br /&gt;
&lt;br /&gt;
=== Jeudi 14 Février ===&lt;br /&gt;
Séance mise à profit pour compter et tester les 512 leds (en y ajoutant quelques pièces en cas de souci au montage).&lt;br /&gt;
=== Lundi 25 Février ===&lt;br /&gt;
Recherche à propos du moyen de connecter un nunchuck en filaire ou une Wiimote en bluetooth. La Wiimote requiert un type de connexion non offert par les cartes Arduino.&lt;br /&gt;
Création de PCB pour la carte qui supportera les composants et redéfinition des composants nécessaires (les ULN2803 seront utilisés à la place des 74HCT244 dans la première solution).&lt;br /&gt;
&lt;br /&gt;
=== Mercredi 27 Février ===&lt;br /&gt;
Le travail de création du PCB est bien avancé, il a été retardé car il fallait recréer des librairies de composants utilisés dans le montage.&lt;br /&gt;
&amp;lt;br&amp;gt;Un petit inconvénient est survenu, il semble que les ULN2803 ne soient pas parfaitement adaptés, en effet il nous faudrait plutôt des montages de transistors capables de fournir de la puissance vers les LEDs. À première vue il faudrait utiliser des composants de type &amp;quot;Source type darlington transistor array&amp;quot; (comme le M54564P).&lt;br /&gt;
&amp;lt;br&amp;gt;Le nunchuck est connecté sur Arduino Uno dans un premier temps (problèmes de drivers pour un Mega sur Windows), nous reconsidérons l'utilité de prendre un Mega pour ce projet. Une Uno semble suffire du point de vue matériel.&lt;br /&gt;
&amp;lt;br&amp;gt;Le nunchuck utilise I2C, nous savons récupérer les différentes informations provenant de celui-ci (accéléromètre X,Y,Z, joystick X,Y, boutons Z et C). Pour le connecter sur Arduino nous avons utilisé un adaptateur &amp;quot;wiichuck&amp;quot; mais nus avons également pensé fabriquer cet adaptateur par nous-mêmes au vu de la simplicité du montage. &lt;br /&gt;
&amp;lt;br&amp;gt;Point à travailler : savoir quels seuils de l'accéléromètre sont exploitables pour l'utilisation envisagée (choix des modes de jeu, etc...), ceux-ci sont différents en focntion de la vitesse à laquelle le nunchuck est déplacé.&lt;br /&gt;
&lt;br /&gt;
=== Jeudi 28 Février ===&lt;br /&gt;
Après quelques recherches il semble que nos doutes soient fondés, il faut remplacer les ULN2803 initialement prévus par des TD62783 APG/AFG/AFWG. En effet les ULN2804 sont des &amp;quot;sink drivers&amp;quot; alors qu'il nous faut des &amp;quot;source drivers&amp;quot; comme les TD62783.&lt;br /&gt;
&amp;lt;br&amp;gt;Au niveau de l'Arduino, l'acquisition des données provenant du Nunchuck est à présent fonctionnelle, on peut donc passer au traitement de ces données.&lt;br /&gt;
&lt;br /&gt;
=== Lundi 4 Mars ===&lt;br /&gt;
Nous contrôlons des LEDs grâce au nunchuck. On peut remarquer que les axes X,Y et Z de l'accéléromètre ne réagissent pas de la même manière et ne sont pas réellement indépendants. Ceci pose un problème de choix de l'axe à utiliser pour telle ou telle fonction : les axes Y et Z réagissent quasiment de la même manière à un mouvement vers le haut.&lt;br /&gt;
&amp;lt;br&amp;gt;De plus les broches 0 et 1 numériques servent à la liaison série (RX TX), ce qui pose problème pour l'instant car nous avons besoin de toutes les broches numériques et si on initialise le port série dans le code( Serial.begin), ces 2 broches deviennent uniquement utilisées pour la liaison série. Cependant les broches analogiques non utilisées semblent pouvoir être utilisées en tant que sorties numériques.&lt;br /&gt;
&lt;br /&gt;
=== Lundi 11 Mars ===&lt;br /&gt;
Voici l'avancement du PCB de la carte qui commandera les 512 LED (partie Hardware) :&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Mercredi 6 Mars ===&lt;br /&gt;
Test du jour : gérer l'allumage d'une ligne de leds, une par une et dans les 2 sens, grâce au nunchuck (accéléromètre X), choix de la vitesse de défilement avec le joystick. &lt;br /&gt;
&amp;lt;br&amp;gt;Réflexion quant à l'algorithme du jeu Snake, et à l'implémentation sur l'arduino.&lt;br /&gt;
&amp;lt;br&amp;gt;La structure du code se déroule ainsi :&lt;br /&gt;
*setup : initialisation du nunchuck, calibrage des valeurs des accéléromètes, joystick et boutons&lt;br /&gt;
*loop :&lt;br /&gt;
**demande et réception des données du nunchuck et décodage de ces données&lt;br /&gt;
**partie traitement des données : calcul des ordres à donner à la matrice&lt;br /&gt;
**affichage sur la matrice&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Explications techniques ==&lt;br /&gt;
&lt;br /&gt;
=== Le jeu Snake ===&lt;br /&gt;
&lt;br /&gt;
Le but du jeu est de tenir le plus longtemps possible en mangeant des &amp;quot;fruits&amp;quot; qui apparaissent sur la matrice. Il faut diriger le serpent vers ces fruits, une fois mangés la queue du serpent s'allonge d'une unité. Si le serpent arrive en bord de la matrice, il réapparait par la face opposée. Le joueur perd lorsque le serpent rencontre sa propre queue.&lt;br /&gt;
&lt;br /&gt;
=== Protocole I2C ===&lt;br /&gt;
&lt;br /&gt;
I2C (Inter Integrated Circuit) est la norme à utiliser pour dialoguer avec le nunchuck. Celle-ci utilise 2 fils (data et clock), les 2 autres fils étant l'alimentation et la masse. L'utilisation de cette norme impose d'utiliser les broches A4 et A5 sur un Arduino Uno car seules celles-ci sont utilisables pour ce protocole. En utilisant un adaptateur comme le [https://www.sparkfun.com/products/9281 wiichuck], on se retrouve à devoir envoyer VCC sur A3 et GND sur A2 : &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#define pwrpin PORTC3&lt;br /&gt;
#define gndpin PORTC2&lt;br /&gt;
    DDRC |= _BV(pwrpin) | _BV(gndpin);&lt;br /&gt;
    PORTC &amp;amp;=~ _BV(gndpin);&lt;br /&gt;
    PORTC |=  _BV(pwrpin);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
_BV sert à assigner une sortie particulière plutôt que de devoir assigner tout le port comme en assignation explicite.&lt;br /&gt;
&lt;br /&gt;
=== Commande de la matrice ===&lt;br /&gt;
La matrice est accessible par les 64 colonnes et les 8 étages. Ceci signifie qu'il faudrait, si l'on souhaitait connecter toutes ces entrées / sorties directement sur les sorties d'un Arduino, utiliser 72 broches, ce qui n'est pas possible. Il faut donc réduire le nombre de broches à commander grâce à du multiplexage et des registres à décalage.&lt;br /&gt;
&amp;lt;br&amp;gt;Pour commmander les sorties, on peut soit faire une boucle qui assigne la bonne valeur à chaque broche, soit écrire directement dans le port qui gère ces sorties, ce qui semble être plus rapide et évite de devoir utiliser les Digital.Write().&lt;/div&gt;</summary>
		<author><name>Mde-bie</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=Matrice_de_LED_3D&amp;diff=4484</id>
		<title>Matrice de LED 3D</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=Matrice_de_LED_3D&amp;diff=4484"/>
				<updated>2013-03-11T15:45:34Z</updated>
		
		<summary type="html">&lt;p&gt;Mde-bie : /* Explications techinques */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Présentation ==&lt;br /&gt;
Le but de ce projet est de concevoir une matrice 3D composée de 512 leds (8x8x8) et d'y faire afficher dans un premier temps des formes géométriques (par exemple à partir de formules mathématiques) et dans un second temps de réaliser un jeu de type Snake, pilotable grâce à une manette de Wii.&lt;br /&gt;
Le tout sera présenté lors des journées Portes Ouvertes de l'école afin de promouvoir le département IMA.&lt;br /&gt;
&lt;br /&gt;
=== Matériel requis ===&lt;br /&gt;
* 512 leds et des fils pour les connecter entre elles&lt;br /&gt;
* un Arduino&lt;br /&gt;
* des composants permettant de commander les 64 entrées et 8 sorties de la matrice avec beaucoup moins de sorties disponibles sur l'Arduino&lt;br /&gt;
** (x1) SN74HCT138 - 3-line to 8-line Decoder (pour les etages)&lt;br /&gt;
** (x8) 74HCT595 - 8-bit Serial-in/serial or parallel-out shift register with output latches 3-state&lt;br /&gt;
** (x8) 74HCT244 - 8-bit buffer/line driver with 3-state outputs (attention : courant max trop faible ??)&lt;br /&gt;
http://www.zem.fr/decouverte-du-composant-74hc595-8-bit-shift-register/&lt;br /&gt;
** 2e solution :  &lt;br /&gt;
*** 74HC154 decoder 4-16&lt;br /&gt;
*** (x8) ULN2804 buffer 8 bit (500 mA -&amp;gt; ok pour les leds)&lt;br /&gt;
&lt;br /&gt;
* de quoi alimenter les leds (alimentation de 1A à 1.5A)&lt;br /&gt;
* une manette de Wii&lt;br /&gt;
&lt;br /&gt;
== Avancement du projet==&lt;br /&gt;
=== Lundi 4 Février ===&lt;br /&gt;
Cette première séance a été mise à profit afin de mieux cerner le projet, en discutant avec les enseignants et en commançant les recherches sur la manière de réaliser la matrice.&lt;br /&gt;
=== Jeudi 7 Février ===&lt;br /&gt;
Traçage de plans de montage, remise en question quant au moyen de commander les 64 colonnes de leds (le multiplexage semblait le plus évident mais d'autres possibilités comme des registres à décalage pourraient également convenir).&lt;br /&gt;
=== Lundi 11 Février ===&lt;br /&gt;
Définition des moyens en composants pour créer le circuit de commande. Création du patron du guide qui servira à aligner les leds et les souder facilement.&lt;br /&gt;
&amp;lt;br&amp;gt;Ce patron a été transmis à la personne qui se chargera de fabriquer le support par commande numérique.&lt;br /&gt;
&lt;br /&gt;
=== Jeudi 14 Février ===&lt;br /&gt;
Séance mise à profit pour compter et tester les 512 leds (en y ajoutant quelques pièces en cas de souci au montage).&lt;br /&gt;
=== Lundi 25 Février ===&lt;br /&gt;
Recherche à propos du moyen de connecter un nunchuck en filaire ou une Wiimote en bluetooth. La Wiimote requiert un type de connexion non offert par les cartes Arduino.&lt;br /&gt;
Création de PCB pour la carte qui supportera les composants et redéfinition des composants nécessaires (les ULN2803 seront utilisés à la place des 74HCT244 dans la première solution).&lt;br /&gt;
&lt;br /&gt;
=== Mercredi 27 Février ===&lt;br /&gt;
Le travail de création du PCB est bien avancé, il a été retardé car il fallait recréer des librairies de composants utilisés dans le montage.&lt;br /&gt;
&amp;lt;br&amp;gt;Un petit inconvénient est survenu, il semble que les ULN2803 ne soient pas parfaitement adaptés, en effet il nous faudrait plutôt des montages de transistors capables de fournir de la puissance vers les LEDs. À première vue il faudrait utiliser des composants de type &amp;quot;Source type darlington transistor array&amp;quot; (comme le M54564P).&lt;br /&gt;
&amp;lt;br&amp;gt;Le nunchuck est connecté sur Arduino Uno dans un premier temps (problèmes de drivers pour un Mega sur Windows), nous reconsidérons l'utilité de prendre un Mega pour ce projet. Une Uno semble suffire du point de vue matériel.&lt;br /&gt;
&amp;lt;br&amp;gt;Le nunchuck utilise I2C, nous savons récupérer les différentes informations provenant de celui-ci (accéléromètre X,Y,Z, joystick X,Y, boutons Z et C). Pour le connecter sur Arduino nous avons utilisé un adaptateur &amp;quot;wiichuck&amp;quot; mais nus avons également pensé fabriquer cet adaptateur par nous-mêmes au vu de la simplicité du montage. &lt;br /&gt;
&amp;lt;br&amp;gt;Point à travailler : savoir quels seuils de l'accéléromètre sont exploitables pour l'utilisation envisagée (choix des modes de jeu, etc...), ceux-ci sont différents en focntion de la vitesse à laquelle le nunchuck est déplacé.&lt;br /&gt;
&lt;br /&gt;
=== Jeudi 28 Février ===&lt;br /&gt;
Après quelques recherches il semble que nos doutes soient fondés, il faut remplacer les ULN2803 initialement prévus par des TD62783 APG/AFG/AFWG. En effet les ULN2804 sont des &amp;quot;sink drivers&amp;quot; alors qu'il nous faut des &amp;quot;source drivers&amp;quot; comme les TD62783.&lt;br /&gt;
&amp;lt;br&amp;gt;Au niveau de l'Arduino, l'acquisition des données provenant du Nunchuck est à présent fonctionnelle, on peut donc passer au traitement de ces données.&lt;br /&gt;
&lt;br /&gt;
=== Lundi 4 Mars ===&lt;br /&gt;
Nous contrôlons des LEDs grâce au nunchuck. On peut remarquer que les axes X,Y et Z de l'accéléromètre ne réagissent pas de la même manière et ne sont pas réellement indépendants. Ceci pose un problème de choix de l'axe à utiliser pour telle ou telle fonction : les axes Y et Z réagissent quasiment de la même manière à un mouvement vers le haut.&lt;br /&gt;
&amp;lt;br&amp;gt;De plus les broches 0 et 1 numériques servent à la liaison série (RX TX), ce qui pose problème pour l'instant car nous avons besoin de toutes les broches numériques et si on initialise le port série dans le code( Serial.begin), ces 2 broches deviennent uniquement utilisées pour la liaison série. Cependant les broches analogiques non utilisées semblent pouvoir être utilisées en tant que sorties numériques.&lt;br /&gt;
&lt;br /&gt;
=== Mercredi 6 Mars ===&lt;br /&gt;
Test du jour : gérer l'allumage d'une ligne de leds, une par une et dans les 2 sens, grâce au nunchuck (accéléromètre X), choix de la vitesse de défilement avec le joystick. &lt;br /&gt;
&amp;lt;br&amp;gt;Réflexion quant à l'algorithme du jeu Snake, et à l'implémentation sur l'arduino.&lt;br /&gt;
&amp;lt;br&amp;gt;La structure du code se déroule ainsi :&lt;br /&gt;
*setup : initialisation du nunchuck, calibrage des valeurs des accéléromètes, joystick et boutons&lt;br /&gt;
*loop :&lt;br /&gt;
**demande et réception des données du nunchuck et décodage de ces données&lt;br /&gt;
**partie traitement des données : calcul des ordres à donner à la matrice&lt;br /&gt;
**affichage sur la matrice&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Explications techniques ==&lt;br /&gt;
&lt;br /&gt;
=== Le jeu Snake ===&lt;br /&gt;
&lt;br /&gt;
Le but du jeu est de tenir le plus longtemps possible en mangeant des &amp;quot;fruits&amp;quot; qui apparaissent sur la matrice. Il faut diriger le serpent vers ces fruits, une fois mangés la queue du serpent s'allonge d'une unité. Si le serpent arrive en bord de la matrice, il réapparait par la face opposée. Le joueur perd lorsque le serpent rencontre sa propre queue.&lt;br /&gt;
&lt;br /&gt;
=== Protocole I2C ===&lt;br /&gt;
&lt;br /&gt;
I2C (Inter Integrated Circuit) est la norme à utiliser pour dialoguer avec le nunchuck. Celle-ci utilise 2 fils (data et clock), les 2 autres fils étant l'alimentation et la masse. L'utilisation de cette norme impose d'utiliser les broches A4 et A5 sur un Arduino Uno car seules celles-ci sont utilisables pour ce protocole. En utilisant un adaptateur comme le [https://www.sparkfun.com/products/9281 wiichuck], on se retrouve à devoir envoyer VCC sur A3 et GND sur A2 : &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#define pwrpin PORTC3&lt;br /&gt;
#define gndpin PORTC2&lt;br /&gt;
    DDRC |= _BV(pwrpin) | _BV(gndpin);&lt;br /&gt;
    PORTC &amp;amp;=~ _BV(gndpin);&lt;br /&gt;
    PORTC |=  _BV(pwrpin);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
_BV sert à assigner une sortie particulière plutôt que de devoir assigner tout le port comme en assignation explicite.&lt;br /&gt;
&lt;br /&gt;
=== Commande de la matrice ===&lt;br /&gt;
La matrice est accessible par les 64 colonnes et les 8 étages. Ceci signifie qu'il faudrait, si l'on souhaitait connecter toutes ces entrées / sorties directement sur les sorties d'un Arduino, utiliser 72 broches, ce qui n'est pas possible. Il faut donc réduire le nombre de broches à commander grâce à du multiplexage et des registres à décalage.&lt;br /&gt;
&amp;lt;br&amp;gt;Pour commmander les sorties, on peut soit faire une boucle qui assigne la bonne valeur à chaque broche, soit écrire directement dans le port qui gère ces sorties, ce qui semble être plus rapide et évite de devoir utiliser les Digital.Write().&lt;/div&gt;</summary>
		<author><name>Mde-bie</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=Matrice_de_LED_3D&amp;diff=4353</id>
		<title>Matrice de LED 3D</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=Matrice_de_LED_3D&amp;diff=4353"/>
				<updated>2013-02-28T10:45:09Z</updated>
		
		<summary type="html">&lt;p&gt;Mde-bie : /* Avancement du projet */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Présentation ==&lt;br /&gt;
Le but de ce projet est de concevoir une matrice 3D composée de 512 leds (8x8x8) et d'y faire afficher dans un premier temps des formes géométriques (par exemple à partir de formules mathématiques) et dans un second temps de réaliser un jeu de type Snake, pilotable grâce à une manette de Wii.&lt;br /&gt;
Le tout sera présenté lors des journées Portes Ouvertes de l'école afin de promouvoir le département IMA.&lt;br /&gt;
&lt;br /&gt;
=== Matériel requis ===&lt;br /&gt;
* 512 leds et des fils pour les connecter entre elles&lt;br /&gt;
* un Arduino&lt;br /&gt;
* des composants permettant de commander les 64 entrées et 8 sorties de la matrice avec beaucoup moins de sorties disponibles sur l'Arduino&lt;br /&gt;
** (x1) SN74HCT138 - 3-line to 8-line Decoder (pour les etages)&lt;br /&gt;
** (x8) 74HCT595 - 8-bit Serial-in/serial or parallel-out shift register with output latches 3-state&lt;br /&gt;
** (x8) 74HCT244 - 8-bit buffer/line driver with 3-state outputs (attention : courant max trop faible ??)&lt;br /&gt;
http://www.zem.fr/decouverte-du-composant-74hc595-8-bit-shift-register/&lt;br /&gt;
** 2e solution :  &lt;br /&gt;
*** 74HC154 decoder 4-16&lt;br /&gt;
*** (x8) ULN2804 buffer 8 bit (500 mA -&amp;gt; ok pour les leds)&lt;br /&gt;
&lt;br /&gt;
* de quoi alimenter les leds (alimentation de 1A à 1.5A)&lt;br /&gt;
* une manette de Wii&lt;br /&gt;
http://web.mit.edu/6.111/www/f2005/projects/wyatt_Project_Final_Report.pdf&lt;br /&gt;
&lt;br /&gt;
== Avancement du projet==&lt;br /&gt;
=== Lundi 4 Février ===&lt;br /&gt;
Cette première séance a été mise à profit afin de mieux cerner le projet, en discutant avec les enseignants et en commançant les recherches sur la manière de réaliser la matrice.&lt;br /&gt;
=== Jeudi 7 Février ===&lt;br /&gt;
Traçage de plans de montage, remise en question quant au moyen de commander les 64 colonnes de leds (le multiplexage semblait le plus évident mais d'autres possibilités comme des registres à décalage pourraient également convenir).&lt;br /&gt;
=== Lundi 11 Février ===&lt;br /&gt;
Définition des moyens en composants pour créer le circuit de commande. Création du patron du guide qui servira à aligner les leds et les souder facilement.&lt;br /&gt;
&amp;lt;br&amp;gt;Ce patron a été transmis à la personne qui se chargera de fabriquer le support par commande numérique.&lt;br /&gt;
&lt;br /&gt;
=== Jeudi 14 Février ===&lt;br /&gt;
Séance mise à profit pour compter et tester les 512 leds (en y ajoutant quelques pièces en cas de souci au montage).&lt;br /&gt;
=== Lundi 25 Février ===&lt;br /&gt;
Recherche à propos du moyen de connecter un nunchuck en filaire ou une Wiimote en bluetooth. La Wiimote requiert un type de connexion non offert par les cartes Arduino.&lt;br /&gt;
Création de PCB pour la carte qui supportera les composants et redéfinition des composants nécessaires (les ULN2803 seront utilisés à la place des 74HCT244 dans la première solution).&lt;br /&gt;
&lt;br /&gt;
=== Mercredi 27 Février ===&lt;br /&gt;
Le travail de création du PCB est bien avancé, il a été retardé car il fallait recréer des librairies de composants utilisés dans le montage.&lt;br /&gt;
&amp;lt;br&amp;gt;Un petit inconvénient est survenu, il semble que les ULN2803 ne soient pas parfaitement adaptés, en effet il nous faudrait plutôt des montages de transistors capables de fournir de la puissance vers les LEDs. À première vue il faudrait utiliser des composants de type &amp;quot;Source type darlington transistor array&amp;quot; (comme le M54564P).&lt;br /&gt;
&amp;lt;br&amp;gt;Le nunchuck est connecté sur Arduino Uno dans un premier temps (problèmes de drivers pour un Mega sur Windows), nous reconsidérons l'utilité de prendre un Mega pour ce projet. Une Uno semble suffire du point de vue matériel.&lt;br /&gt;
&amp;lt;br&amp;gt;Le nunchuck utilise I2C, nous savons récupérer les différentes informations provenant de celui-ci (accéléromètre X,Y,Z, joystick X,Y, boutons Z et C). Pour le connecter sur Arduino nous avons utilisé un adaptateur &amp;quot;wiichuck&amp;quot; mais nus avons également pensé fabriquer cet adaptateur par nous-mêmes au vu de la simplicité du montage. &lt;br /&gt;
&amp;lt;br&amp;gt;Point à travailler : savoir quels seuils de l'accéléromètre sont exploitables pour l'utilisation envisagée (choix des modes de jeu, etc...), ceux-ci sont différents en focntion de la vitesse à laquelle le nunchuck est déplacé.&lt;br /&gt;
&lt;br /&gt;
=== Jeudi 28 Février ===&lt;br /&gt;
Après quelques recherches il semble que nos doutes soient fondés, il faut remplacer les ULN2803 initialement prévus par des TD62783 APG/AFG/AFWG. En effet les ULN2804 sont des &amp;quot;sink drivers&amp;quot; alors qu'il nous faut des &amp;quot;source drivers&amp;quot; comme les TD62783.&lt;/div&gt;</summary>
		<author><name>Mde-bie</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=Matrice_de_LED_3D&amp;diff=4332</id>
		<title>Matrice de LED 3D</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=Matrice_de_LED_3D&amp;diff=4332"/>
				<updated>2013-02-27T17:15:12Z</updated>
		
		<summary type="html">&lt;p&gt;Mde-bie : /* Avancement du projet */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Présentation ==&lt;br /&gt;
Le but de ce projet est de concevoir une matrice 3D composée de 512 leds (8x8x8) et d'y faire afficher dans un premier temps des formes géométriques (par exemple à partir de formules mathématiques) et dans un second temps de réaliser un jeu de type Snake, pilotable grâce à une manette de Wii.&lt;br /&gt;
Le tout sera présenté lors des journées Portes Ouvertes de l'école afin de promouvoir le département IMA.&lt;br /&gt;
&lt;br /&gt;
=== Matériel requis ===&lt;br /&gt;
* 512 leds et des fils pour les connecter entre elles&lt;br /&gt;
* un Arduino&lt;br /&gt;
* des composants permettant de commander les 64 entrées et 8 sorties de la matrice avec beaucoup moins de sorties disponibles sur l'Arduino&lt;br /&gt;
** (x1) SN74HCT138 - 3-line to 8-line Decoder (pour les etages)&lt;br /&gt;
** (x8) 74HCT595 - 8-bit Serial-in/serial or parallel-out shift register with output latches 3-state&lt;br /&gt;
** (x8) 74HCT244 - 8-bit buffer/line driver with 3-state outputs (attention : courant max trop faible ??)&lt;br /&gt;
http://www.zem.fr/decouverte-du-composant-74hc595-8-bit-shift-register/&lt;br /&gt;
** 2e solution :  &lt;br /&gt;
*** 74HC154 decoder 4-16&lt;br /&gt;
*** (x8) ULN2804 buffer 8 bit (500 mA -&amp;gt; ok pour les leds)&lt;br /&gt;
&lt;br /&gt;
* de quoi alimenter les leds (alimentation de 1A à 1.5A)&lt;br /&gt;
* une manette de Wii&lt;br /&gt;
http://web.mit.edu/6.111/www/f2005/projects/wyatt_Project_Final_Report.pdf&lt;br /&gt;
&lt;br /&gt;
== Avancement du projet==&lt;br /&gt;
=== Lundi 4 Février ===&lt;br /&gt;
Cette première séance a été mise à profit afin de mieux cerner le projet, en discutant avec les enseignants et en commançant les recherches sur la manière de réaliser la matrice.&lt;br /&gt;
=== Jeudi 7 Février ===&lt;br /&gt;
Traçage de plans de montage, remise en question quant au moyen de commander les 64 colonnes de leds (le multiplexage semblait le plus évident mais d'autres possibilités comme des registres à décalage pourraient également convenir).&lt;br /&gt;
=== Lundi 11 Février ===&lt;br /&gt;
Définition des moyens en composants pour créer le circuit de commande. Création du patron du guide qui servira à aligner les leds et les souder facilement.&lt;br /&gt;
&amp;lt;br&amp;gt;Ce patron a été transmis à la personne qui se chargera de fabriquer le support par commande numérique.&lt;br /&gt;
&lt;br /&gt;
=== Jeudi 14 Février ===&lt;br /&gt;
Séance mise à profit pour compter et tester les 512 leds (en y ajoutant quelques pièces en cas de souci au montage).&lt;br /&gt;
=== Lundi 25 Février ===&lt;br /&gt;
Recherche à propos du moyen de connecter un nunchuck en filaire ou une Wiimote en bluetooth. La Wiimote requiert un type de connexion non offert par les cartes Arduino.&lt;br /&gt;
Création de PCB pour la carte qui supportera les composants et redéfinition des composants nécessaires (les ULN2803 seront utilisés à la place des 74HCT244 dans la première solution).&lt;br /&gt;
&lt;br /&gt;
=== Mercredi 27 Février ===&lt;br /&gt;
Le travail de création du PCB est bien avancé, il a été retardé car il fallait recréer des librairies de composants utilisés dans le montage.&lt;br /&gt;
&amp;lt;br&amp;gt;Un petit inconvénient est survenu, il semble que les ULN2803 ne soient pas parfaitement adaptés, en effet il nous faudrait plutôt des montages de transistors capables de fournir de la puissance vers les LEDs. À première vue il faudrait utiliser des composants de type &amp;quot;Source type darlington transistor array&amp;quot; (comme le M54564P).&lt;br /&gt;
&amp;lt;br&amp;gt;Le nunchuck est connecté sur Arduino Uno dans un premier temps (problèmes de drivers pour un Mega sur Windows), nous reconsidérons l'utilité de prendre un Mega pour ce projet. Une Uno semble suffire du point de vue matériel.&lt;br /&gt;
&amp;lt;br&amp;gt;Le nunchuck utilise I2C, nous savons récupérer les différentes informations provenant de celui-ci (accéléromètre X,Y,Z, joystick X,Y, boutons Z et C). Pour le connecter sur Arduino nous avons utilisé un adaptateur &amp;quot;wiichuck&amp;quot; mais nus avons également pensé fabriquer cet adaptateur par nous-mêmes au vu de la simplicité du montage. &lt;br /&gt;
&amp;lt;br&amp;gt;Point à travailler : savoir quels seuils de l'accéléromètre sont exploitables pour l'utilisation envisagée (choix des modes de jeu, etc...), ceux-ci sont différents en focntion de la vitesse à laquelle le nunchuck est déplacé.&lt;/div&gt;</summary>
		<author><name>Mde-bie</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=Matrice_de_LED_3D&amp;diff=4331</id>
		<title>Matrice de LED 3D</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=Matrice_de_LED_3D&amp;diff=4331"/>
				<updated>2013-02-27T17:02:58Z</updated>
		
		<summary type="html">&lt;p&gt;Mde-bie : /* Lundi 25 Février */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Présentation ==&lt;br /&gt;
Le but de ce projet est de concevoir une matrice 3D composée de 512 leds (8x8x8) et d'y faire afficher dans un premier temps des formes géométriques (par exemple à partir de formules mathématiques) et dans un second temps de réaliser un jeu de type Snake, pilotable grâce à une manette de Wii.&lt;br /&gt;
Le tout sera présenté lors des journées Portes Ouvertes de l'école afin de promouvoir le département IMA.&lt;br /&gt;
&lt;br /&gt;
=== Matériel requis ===&lt;br /&gt;
* 512 leds et des fils pour les connecter entre elles&lt;br /&gt;
* un Arduino&lt;br /&gt;
* des composants permettant de commander les 64 entrées et 8 sorties de la matrice avec beaucoup moins de sorties disponibles sur l'Arduino&lt;br /&gt;
** (x1) SN74HCT138 - 3-line to 8-line Decoder (pour les etages)&lt;br /&gt;
** (x8) 74HCT595 - 8-bit Serial-in/serial or parallel-out shift register with output latches 3-state&lt;br /&gt;
** (x8) 74HCT244 - 8-bit buffer/line driver with 3-state outputs (attention : courant max trop faible ??)&lt;br /&gt;
http://www.zem.fr/decouverte-du-composant-74hc595-8-bit-shift-register/&lt;br /&gt;
** 2e solution :  &lt;br /&gt;
*** 74HC154 decoder 4-16&lt;br /&gt;
*** (x8) ULN2804 buffer 8 bit (500 mA -&amp;gt; ok pour les leds)&lt;br /&gt;
&lt;br /&gt;
* de quoi alimenter les leds (alimentation de 1A à 1.5A)&lt;br /&gt;
* une manette de Wii&lt;br /&gt;
http://web.mit.edu/6.111/www/f2005/projects/wyatt_Project_Final_Report.pdf&lt;br /&gt;
&lt;br /&gt;
== Avancement du projet==&lt;br /&gt;
=== Lundi 4 Février ===&lt;br /&gt;
Cette première séance a été mise à profit afin de mieux cerner le projet, en discutant avec les enseignants et en commançant les recherches sur la manière de réaliser la matrice.&lt;br /&gt;
=== Jeudi 7 Février ===&lt;br /&gt;
Traçage de plans de montage, remise en question quant au moyen de commander les 64 colonnes de leds (le multiplexage semblait le plus évident mais d'autres possibilités comme des registres à décalage pourraient également convenir).&lt;br /&gt;
=== Lundi 11 Février ===&lt;br /&gt;
Définition des moyens en composants pour créer le circuit de commande. Création du patron du guide qui servira à aligner les leds et les souder facilement.&lt;br /&gt;
&amp;lt;br&amp;gt;Ce patron a été transmis à la personne qui se chargera de fabriquer le support par commande numérique.&lt;br /&gt;
&lt;br /&gt;
=== Jeudi 14 Février ===&lt;br /&gt;
Séance mise à profit pour compter et tester les 512 leds (en y ajoutant quelques pièces en cas de souci au montage).&lt;br /&gt;
=== Lundi 25 Février ===&lt;br /&gt;
Recherche à propos du moyen de connecter un nunchuck en filaire ou une Wiimote en bluetooth. La Wiimote requiert un type de connexion non offert par les cartes Arduino.&lt;br /&gt;
Création de PCB pour la carte qui supportera les composants et redéfinition des composants nécessaires (les ULN2803 seront utilisés à la place des 74HCT244 dans la première solution).&lt;/div&gt;</summary>
		<author><name>Mde-bie</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=Matrice_de_LED_3D&amp;diff=3974</id>
		<title>Matrice de LED 3D</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=Matrice_de_LED_3D&amp;diff=3974"/>
				<updated>2013-02-11T13:59:55Z</updated>
		
		<summary type="html">&lt;p&gt;Mde-bie : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Présentation ==&lt;br /&gt;
Le but de ce projet est de concevoir une matrice 3D composée de 512 leds (8x8x8) et d'y faire afficher dans un premier temps des formes géométriques (par exemple à partir de formules mathématiques) et dans un second temps de réaliser un jeu de type Snake, pilotable grâce à une manette de Wii.&lt;br /&gt;
Le tout sera présenté lors des journées Portes Ouvertes de l'école afin de promouvoir le département IMA.&lt;br /&gt;
&lt;br /&gt;
=== Matériel requis ===&lt;br /&gt;
* 512 leds et des fils pour les connecter entre elles&lt;br /&gt;
* un Arduino&lt;br /&gt;
* des composants permettant de commander les 64 entrées et 8 sorties de la matrice avec beaucoup moins de sorties disponibles sur l'Arduino&lt;br /&gt;
** (x1) SN74HCT138 - 3-line to 8-line Decoder&lt;br /&gt;
** (x8) 74HCT595 - 8-bit Serial-in/serial or parallel-out shift register with output latches 3-state&lt;br /&gt;
** (x8) 74HCT244 - 8-bit buffer/line driver with 3-state outputs&lt;br /&gt;
* de quoi alimenter les leds (alimentation de 1A à 1.5A)&lt;br /&gt;
* une manette de Wii&lt;br /&gt;
== Avancement du projet==&lt;br /&gt;
=== Lundi 4 Février 2012 ===&lt;br /&gt;
Cette première séance a été mise à profit afin de mieux cerner le projet, en discutant avec les enseignants et en commançant les recherches sur la manière de réaliser la matrice.&lt;br /&gt;
=== Jeudi 7 Février 2012 ===&lt;br /&gt;
Traçage de plans de montage, remise en question quant au moyen de commander les 64 colonnes de leds (le multiplexage semblait le plus évident mais d'autres possibilités comme des registres à décalage pourraient également convenir).&lt;br /&gt;
=== Lundi 11 Février ===&lt;br /&gt;
Définitions des moyens en composants pour créer le circuit de commande. Création d'un guide (en bois) pour aligner les leds et les souder facilement.&lt;/div&gt;</summary>
		<author><name>Mde-bie</name></author>	</entry>

	</feed>