<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="fr">
		<id>https://wiki-ima.plil.fr/mediawiki//api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Tstieven</id>
		<title>Wiki d'activités IMA - Contributions de l’utilisateur [fr]</title>
		<link rel="self" type="application/atom+xml" href="https://wiki-ima.plil.fr/mediawiki//api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Tstieven"/>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php/Sp%C3%A9cial:Contributions/Tstieven"/>
		<updated>2026-05-12T22:12:29Z</updated>
		<subtitle>Contributions de l’utilisateur</subtitle>
		<generator>MediaWiki 1.29.2</generator>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=IMA4_2016/2017_P14&amp;diff=42905</id>
		<title>IMA4 2016/2017 P14</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=IMA4_2016/2017_P14&amp;diff=42905"/>
				<updated>2017-05-20T16:52:57Z</updated>
		
		<summary type="html">&lt;p&gt;Tstieven : /* Feuille d'heures */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Projet IMA4 : Sex-toy connecté =&lt;br /&gt;
&lt;br /&gt;
== Présentation du projet ==&lt;br /&gt;
&lt;br /&gt;
L'objectif de ce projet est de développer un système d'échange entre deux partenaires distants afin de rendre plus facile la vie de couple à distance.&lt;br /&gt;
&lt;br /&gt;
Pour ce faire, le dispositif sera constitué de deux sextoys connectés (un par appareil génital désiré) à leur téléphone portable respectif. Une application mobile permettra aux utilisateurs de s'échanger des données de manière sécurisé, ceci au travers d'un serveur embarqué dans le téléphone portable.&lt;br /&gt;
&lt;br /&gt;
Les données échangées pourront être l'accélération ou la température. Elles seront traitées et transmises au sextoy qui adaptera sa vitesse, son retour vibratoire ou sa position en conséquence.&lt;br /&gt;
&lt;br /&gt;
Les sextoys pourraient être composés de :&lt;br /&gt;
* Pour l'appareil masculin (dédié à la femme) :&lt;br /&gt;
:* un servomoteur ;&lt;br /&gt;
:* un vibreur ;&lt;br /&gt;
:* une sonde de température ;&lt;br /&gt;
:* un accéléromètre.&lt;br /&gt;
* Pour l'appareil féminin (dédié à l'homme) :&lt;br /&gt;
:* 4 servomoteurs (dans le but de &amp;quot;masser&amp;quot; en déplaçant le silicone);&lt;br /&gt;
:* des vibreurs ;&lt;br /&gt;
:* un accéléromètre.&lt;br /&gt;
* Pour les deux appareils :&lt;br /&gt;
:* un micro-contrôleur (Arduino mini) ;&lt;br /&gt;
:* un module de transmission / réception bluetooth afin de se connecter au téléphone ;&lt;br /&gt;
:* du silicone.&lt;br /&gt;
	&lt;br /&gt;
* L'application mobile devra :&lt;br /&gt;
:* mettre en place une communication cryptée à travers un serveur (embarqué ou bien intermédiaire ?) ;&lt;br /&gt;
:* effectuer un échange de données en bluetooth avec le sextoy connecté.&lt;br /&gt;
&lt;br /&gt;
* L'application mobile pourra :&lt;br /&gt;
:* utiliser la vidéo-conférence ;&lt;br /&gt;
:* enregistrer les meilleurs moments et enventuellement pouvoir les partager ;&lt;br /&gt;
:* effectuer une recherche de partenaire aléatoire.&lt;br /&gt;
&lt;br /&gt;
* S'il nous reste du temps, il peut être envisageable de :&lt;br /&gt;
:* mettre en place un réseau social interne à Polytech.&lt;br /&gt;
&lt;br /&gt;
== Liste des tâches ==&lt;br /&gt;
* Conception de l'appareil masculin (Cédric)&lt;br /&gt;
:* mettre en place le bus I2C avec les différents capteurs ;&lt;br /&gt;
:* création d'un PCB au format gerber ;&lt;br /&gt;
:* création d'un prototype.&lt;br /&gt;
&lt;br /&gt;
* Conception de l'appareil féminin (Cédric)&lt;br /&gt;
:* mettre en place le bus I2C ;&lt;br /&gt;
:* traitement des données afin d'en déduire la position et l'entrain de l'utilisateur ;&lt;br /&gt;
:* création d'un PCB ;&lt;br /&gt;
:* création d'un prototype.&lt;br /&gt;
&lt;br /&gt;
* Communication bluetooth (Cédric et Thomas)&lt;br /&gt;
:* étudier l'émission/réception vue de l'arduino ;&lt;br /&gt;
:* étudier l'émission/réception vue du téléphone ;&lt;br /&gt;
:* mise en place du protocole ;&lt;br /&gt;
:* test de portée.&lt;br /&gt;
&lt;br /&gt;
* Développement mobile (Thomas)&lt;br /&gt;
:* déterminer la meilleure approche : utilisation d'un serveur intermédiaire ou bien mise en place d'un &amp;quot;client-serveur&amp;quot; dans l'application mobile ;&lt;br /&gt;
:* mettre en place le choix retenu ;&lt;br /&gt;
:* tester dans un premier temps une transmission de texte ;&lt;br /&gt;
:* programmer le traitement de données reçues par bluetooth ;&lt;br /&gt;
:* rajouter un côté esthétique à l'application.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Recapitulatif sextoy.png|center|recap]]&lt;br /&gt;
&lt;br /&gt;
==Feuille d'heures==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Tâche !! Prélude !! Heures S1 !! Heures S2 !! Heures S3 !! Heures S4 !! Heures vacances !! Heures S5 !! Heures S6 !! Heures S7 !! Heures S8 !! Heures S9 !! Heures S10 !! Heures vacances et après!! Total&lt;br /&gt;
|-&lt;br /&gt;
| Définition cahier des charges &lt;br /&gt;
| 2H&lt;br /&gt;
| 2H&lt;br /&gt;
| 1H&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 5H&lt;br /&gt;
|-&lt;br /&gt;
| Dimensionnement et établissement de la liste de matériel&lt;br /&gt;
| &lt;br /&gt;
| 3H&lt;br /&gt;
| 4H&lt;br /&gt;
|&lt;br /&gt;
| 4H&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 11H&lt;br /&gt;
|-&lt;br /&gt;
| Établissement de la liste et de la répartition des tâches&lt;br /&gt;
| 1H&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 1H&lt;br /&gt;
|-&lt;br /&gt;
| Appareil masculin : programmation&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 1H&lt;br /&gt;
| 2H&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| 14H&lt;br /&gt;
| 17H &lt;br /&gt;
|-&lt;br /&gt;
| Appareil masculin &amp;amp; féminin : étude des datasheets&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 1H&lt;br /&gt;
| 1H&lt;br /&gt;
|&lt;br /&gt;
| 4H&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| 1H&lt;br /&gt;
|&lt;br /&gt;
| 7H&lt;br /&gt;
|-&lt;br /&gt;
| Appareil masculin : PCB&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 4H&lt;br /&gt;
| 4H&lt;br /&gt;
| 6H&lt;br /&gt;
| 30H&lt;br /&gt;
| 44H&lt;br /&gt;
|-&lt;br /&gt;
| Appareil masculin : 3D&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| 6H&lt;br /&gt;
| 6H&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
| Appareil féminin : programmation&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 24H&lt;br /&gt;
| 24H&lt;br /&gt;
|-&lt;br /&gt;
| Appareil féminin : PCB&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| 2H&lt;br /&gt;
| 1H&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 4H&lt;br /&gt;
| 7H&lt;br /&gt;
|-&lt;br /&gt;
| Appareil féminin : 3D&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 0H&lt;br /&gt;
|-&lt;br /&gt;
| Liaison bluetooth (embarqué)&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 3H&lt;br /&gt;
| 1H&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 8H&lt;br /&gt;
| 12H&lt;br /&gt;
|-&lt;br /&gt;
| Liaison bluetooth (téléphone)&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 10H&lt;br /&gt;
| 10H&lt;br /&gt;
|-&lt;br /&gt;
| Recherche et discussion autour de la meilleure approche de communication&lt;br /&gt;
| 2H&lt;br /&gt;
| 2H&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 4H&lt;br /&gt;
|-&lt;br /&gt;
| Synchronisation temporelle des téléphones (par sms)&lt;br /&gt;
| &lt;br /&gt;
| 2H&lt;br /&gt;
| 4H&lt;br /&gt;
| 6H&lt;br /&gt;
| 8H&lt;br /&gt;
| 8H&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 28H&lt;br /&gt;
|-&lt;br /&gt;
| Transmission de paquets UDP&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 8H&lt;br /&gt;
| 6H&lt;br /&gt;
| 6H&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 10H&lt;br /&gt;
| 30H&lt;br /&gt;
|-&lt;br /&gt;
| Streaming video(UDP)&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 4H&lt;br /&gt;
| 4H&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 8H&lt;br /&gt;
|-&lt;br /&gt;
| Application et bases de données&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 8H&lt;br /&gt;
| 40H&lt;br /&gt;
| 48H&lt;br /&gt;
|-&lt;br /&gt;
| Total&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 262H&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Conception des sextoys==&lt;br /&gt;
===Introduction===&lt;br /&gt;
&lt;br /&gt;
La conception de sextoys doit respecter différents règles, notamment sanitaires. C'est pourquoi nous nous sommes intéressés à l'utilisation de silicone pour ce projet. Nous avons notamment rencontré un ingénieur compétant dans ce domaine afin de nous aiguiller sur cette éventuelle conception.&lt;br /&gt;
&lt;br /&gt;
La conception passera également par une conception 3D que nous effectuerons à l'aide d'imprimantes 3D au fabricarium de Polytech Lille.&lt;br /&gt;
&lt;br /&gt;
Enfin, les prototypes seront embarqués de cartes électroniques (aussi appelés PCB) que nous constituerons.&lt;br /&gt;
&lt;br /&gt;
===Choix du silicone, rencontre avec Mario Sanz===&lt;br /&gt;
&lt;br /&gt;
Le projet nécessite l'utilisation d'une matière souple et non irritante, c'est pourquoi nous avons choisi de nous tourner vers l'utilisation du silicone. Afin de choisir au mieux le produit correspondant à nos besoins, nous avons rencontré Mario Sanz, ingénieur à l'INRIA, qui travail régulièrement avec du silicone.&lt;br /&gt;
&lt;br /&gt;
Ce dernier nous a expliqué les différents points importants sur lesquels nous baser afin de choisir au mieux un produit en accord avec le projet. Ne serait-ce que pour le choix de la dureté, il existe une échelle propre au silicone (&amp;quot;Shore hardness scale&amp;quot;), nous pensions au départ rechercher un silicone le plus mou possible, cependant, il faut savoir que le plus le silicone est mou, plus il a tendance à être &amp;quot;collant&amp;quot;. Finalement, après discutions, un shore de 40A (correspondant à la dureté d'une gomme) suffisamment mince fera l'affaire pour la conception des prototypes.&lt;br /&gt;
&lt;br /&gt;
Il nous a également expliqué que le silicone peut être travaillé à l'aide d'additifs et sous cloche à vide afin d'améliorer le moulage, l'absence de &amp;quot;bulles&amp;quot; sur la surface de la pièce et la souplesse. Nous pouvons cependant travailler sans tout cela car il n'est pas spécialement important, pour notre projet, de rechercher des propriétés physiques homogènes dans tout le sextoy.&lt;br /&gt;
&lt;br /&gt;
Pour ce qui est de la création de moules, nous pourrons les effectuer via imprimante 3D. Il existe un bon nombre de tutoriels sur internet pour s'y référer en cas de soucis.&lt;br /&gt;
&lt;br /&gt;
===Impression 3D===&lt;br /&gt;
&lt;br /&gt;
Pour la création d'objets en 3D, de nombreux outils sont disponibles. Nous avons décidé d'utiliser Tinkercad, un outil qui s'intègre directement au navigateur internet utilisé. &lt;br /&gt;
&lt;br /&gt;
L'avantage d'un tel outil est sa grande communauté qui permet un accès simple et rapide à une multitudes de projets dont on pourrait s'inspirer pour générer nos pièces.&lt;br /&gt;
&lt;br /&gt;
====Création des moules====&lt;br /&gt;
&lt;br /&gt;
A l'aide d'une imprimante 3D, nous pouvons concevoir des moules afin de créer des pièces en silicone. Il s'agit de la manière la plus rapide et accessible pour notre projet.&lt;br /&gt;
&lt;br /&gt;
Cette méthode comporte des désavantages, dont le principal est la présence d'imperfection et de non homogénéité dans les pièces réalisées. Ceci n'a pas de grande importance dans la mesure où nous souhaitons du qualitatif.&lt;br /&gt;
&lt;br /&gt;
====Création d'un prototype====&lt;br /&gt;
&lt;br /&gt;
=====Pénis=====&lt;br /&gt;
&lt;br /&gt;
Afin de visualiser qualitativement la forme et le passage des câbles, un prototype imprimé au Fabricarium de Polytech Lille a été réalisé. &lt;br /&gt;
&lt;br /&gt;
Ce prototype se divise en 3 pièces : un boîtier (pour y loger le PCB), un cylindre (afin de reproduire la forme désirée) et un &amp;quot;tête&amp;quot; qui devait à l'origine être un moule en silicone (pour y loger le PCB du capteur de température).&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Sextoy_penis.png|400px|thumb|center|Prototype 3D pénis]]&lt;br /&gt;
&lt;br /&gt;
===Conception des PCB===&lt;br /&gt;
&lt;br /&gt;
Afin de diminuer un maximum la taille des cartes electroniques, nous utilisons principalement des composants CMS. &lt;br /&gt;
&lt;br /&gt;
La conception des cartes peut-être effectué à l'aide de logicels de CAO tels qu'Altium ou Eagle. Dans notre cas, nous avons utilisé Eagle. &lt;br /&gt;
&lt;br /&gt;
Ce travail consiste à créer une librairie regroupant l'intégralité des composants nécessaires et, ensuite, de  créer un schéma du circuit. Une fois le schéma terminé, il ne restera plus qu'à faire le routage et exporter les fichiers au format &amp;quot;Gerber&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Pour ce projet, nous aurons besoin de deux cartes, une par prototype. Chaque carte embarquera des composants similaires, c'est pourquoi nous nous contenterons d'abord d'un seul PCB pour effectuer des tests. Si ces derniers sont concluants, nous pourrons graver le second.&lt;br /&gt;
&lt;br /&gt;
====PCB du pénis====&lt;br /&gt;
&lt;br /&gt;
Le premier PCB imprimé et soudé est celui du pénis. Une première carte avait été imprimé regroupant sur cette dernière : un support pour l'arduino, un accéléromètre, un module bluetooth. &lt;br /&gt;
&lt;br /&gt;
[[Fichier:PCB_penis_VB.png|400px|thumb|center|PCB v1.0]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous avons expérimentés des problèmes dûs aux dimensions de l'accéléromètre, l'utilisation d'un boîtier CMS de type TDFN10 2x2 était optimiste pour la réalisation du projet, compte tenu du matériel à disposition.&lt;br /&gt;
&lt;br /&gt;
C'est pourquoi une seconde carte a été gravée, cette fois sans l'accéléromètre.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:PCB_penis_VF.png|400px|thumb|center|PCB v2.0]]&lt;br /&gt;
&lt;br /&gt;
[[Fichier:PCB_VF.png|400px|thumb|center|PCB v2.0 schema]]&lt;br /&gt;
&lt;br /&gt;
Ce prototype est sensé embarquer un capteur de température que nous avons décidé de mettre sur un PCB à part. Cette carte avait pour but d'être coulé dans le silicone, afin de mesurer la température au plus près de la zone intéressée.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:TEMPERATURE_PCB_VF.png|400px|thumb|center|PCB temperature]]&lt;br /&gt;
&lt;br /&gt;
[[Fichier:TEMPERATURE_VF.png|400px|thumb|center|PCB temperature schema]]&lt;br /&gt;
&lt;br /&gt;
====PCB du vagin====&lt;br /&gt;
&lt;br /&gt;
Compte tenu des soucis rencontrés avec l'accéléromètre, la carte sera gravée afin de pouvoir y plugger un accéléromètre analogique en traversant. Le but étant d'avoir un prototype fonctionnel d'ici la fin du projet.&lt;br /&gt;
&lt;br /&gt;
Nous avons également eu des problèmes avec le module bluetooth utilisé, ce dernier ne pouvant être reconfiguré manuellement par minicom, nous utiliserons le bluetooth HC-05 utilisé pour les essais de code. De même que pour l'accéléromètre, nous prévoirons un endroit pour le plugger sur la carte.&lt;br /&gt;
&lt;br /&gt;
''image PCB vagin''&lt;br /&gt;
&lt;br /&gt;
''Reste à graver le PCB du vagin''&lt;br /&gt;
&lt;br /&gt;
===Conclusion===&lt;br /&gt;
&lt;br /&gt;
Dans cette partie du projet, tous les PCB ont été soudés, pour certains même plusieurs fois. Nous avons eu des soucis avec certains composants, nous imposant de perdre du temps sur des tests plus poussés que la simple vérification de court circuit et soudures correctes. Finalement, nous avons dû re-designer les cartes et faire autrement que prévu initialement. Ainsi, nous avons appris qu'en se lançant dans un projet, il ne suffit pas de prévoir un seul plan, mais il faut également une solution de secours, ce qui nous aurait économisé un temps précieux.&lt;br /&gt;
&lt;br /&gt;
Nous avons également pu apprendre à utiliser l'imprimante 3D du fabricarium en imprimant un des deux prototypes. Malheureusement, nous n'avons pas eu le temps de mettre à profit les conseils de Mario Sanz sur le silicone.&lt;br /&gt;
&lt;br /&gt;
==Gestion des composants==&lt;br /&gt;
===Introduction===&lt;br /&gt;
&lt;br /&gt;
Notre projet implique l'utilisation de capteurs, de servomoteurs et de buzzers, constituant chacun une partie de la programmation embarquée.&lt;br /&gt;
&lt;br /&gt;
Pour cette programmation, nous avons décidé d'utiliser AVR-gcc et ainsi coder les arduinos en C.&lt;br /&gt;
&lt;br /&gt;
Les capteurs utilisés utilisent un protocole de communication IIC (ou I²C, I2C), ce protocole de multiples avantages que nous expliciterons par la suite. Cependant, comme un des capteurs (l'accéléromètre) prévus initialement nous a causé beaucoup de soucis, nous expliciterons également la mesure à l'aide de capteurs analogiques. Ces différents capteurs nous permettront de mesurer l'excitation d'un utilisateur.&lt;br /&gt;
&lt;br /&gt;
Une fois l'excitation mesurée, il faut induire une réponse &amp;quot;physique&amp;quot;. Pour ce faire, nous utilisons d'une part des servomoteurs dans le but de produire une sensation de massage.&lt;br /&gt;
&lt;br /&gt;
D'autre part, nous utilisons également des buzzers.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'' Veuillez noter que le code ne sera pas détaillé dans le wiki, vous pouvez vous référer au dépôt git contenant les différents codes. ''&lt;br /&gt;
&lt;br /&gt;
===Utilisation des capteurs===&lt;br /&gt;
&lt;br /&gt;
====Capteurs par IIC====&lt;br /&gt;
&lt;br /&gt;
Le choix de l'IIC n'était pas anodin. L'IIC permet, pour un bus de seulement deux fils (SDA et SCL), d'utiliser un nombre important de capteurs. Ainsi, si nous décidions au cours du projet de rajouter tel ou tel capteurs, nous n'avions qu'à les greffer à ce bus IIC.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Iic.jpg|400px|center|Schema iic]]&lt;br /&gt;
&lt;br /&gt;
Tout d’abord, nous devons initialiser le bus IIC de l’arduino. Pour ce faire, il suffit de préciser la fréquence désirée, ici 400KHz, dans les registres TWSR (prescaler) et TWBR. (fréquence désirée suivant la fonction TWBR = (Fcpu - 16 Fscl ) / (2 Fscl Prescaler) ) avant de lancer l'utilisation IIC via le bit TWIE.&lt;br /&gt;
&lt;br /&gt;
Comme il peut y avoir potentiellement plusieurs capteurs sur ce bus, il faut respecter un certain protocole afin de récupérer la valeur du capteur de température. Attardons nous sur la lecture d’une valeur sur le capteur de température. Il faut : &lt;br /&gt;
&lt;br /&gt;
* Lancer un message de start&lt;br /&gt;
* Envoyer l’adresse du capteur de température (0x98 dans notre cas)&lt;br /&gt;
* Envoyer l’adresse du registre qui nous intéresse (0x00 pour celui contenant la température), ceci placera le pointeur de registre du capteur sur cette adresse&lt;br /&gt;
* Restart la communication pour laisser la main au capteur&lt;br /&gt;
* Envoyer l’adresse du capteur en ajoutant 1 (Ceci permet de stipuler que nous désirons lire la valeur pointée)&lt;br /&gt;
* Lire la partie haute de la température&lt;br /&gt;
* Lire la partie basse de la température&lt;br /&gt;
* Envoyer un message de stop&lt;br /&gt;
&lt;br /&gt;
Chaque action correspond à l'utilisation d'une fonction de la librairie IIC codée. (cf déport git) Et après chaque action, nous devons vérifier le status du bus dans le registre TWSR. Ce &amp;quot;status&amp;quot; nous donnera des indications sur le bon déroulement de la communication, à savoir la réception d'ACK (équivalent d'accusé de réception) ou confirmation d'envoie de start, restart, etc.&lt;br /&gt;
&lt;br /&gt;
=====Test=====&lt;br /&gt;
&lt;br /&gt;
Le test de la librairie iic s'est fait directement lorsque la carte du capteur de température a été soudée. Pour ce faire, nous utilisons une compilation en mode &amp;quot;DEBUG&amp;quot; (make debug upload) qui nous permettait de lire la valeur des &amp;quot;status&amp;quot; avec minicom. &lt;br /&gt;
Après différents tests, nous avons finalement réussi à faire fonctionner le capteur de température en IIC, ce dernier nous renvoyait bel et bien une valeur de température précise à 0.5degrés près, vérifié à l'aidé d'un autre capteur de température.&lt;br /&gt;
&lt;br /&gt;
Il est néanmoins regrettable que ce capteur ne sera pas utilisable dans les prototypes finaux dans la mesure où il est greffé à une carte dont le module bluetooth n'est pas utilisable.&lt;br /&gt;
&lt;br /&gt;
====Capteurs analogique====&lt;br /&gt;
&lt;br /&gt;
Comme dit précédemment, nous avons abandonné l'utilisation de l’accéléromètre IIC prévu initialement dans le vagin car nous n'avons pas réussi à le souder sur les cartes du pénis. Nous avons donc utilisé ce qui était à notre disposition à savoir un capteur analogique.&lt;br /&gt;
&lt;br /&gt;
La mesure analogique sous AVR se fait simplement via l'utilisation de la fonction ad_sample(numéro de la broche analogique lue). Elle renvoie directement une valeur entre 0 et 255 correspondant à une conversion analogique-numérique de la tension sur la broche lue du capteur.&lt;br /&gt;
&lt;br /&gt;
=====Test=====&lt;br /&gt;
&lt;br /&gt;
Nous avions déjà utilisé ce genre de fonctionnalité dans le projet de système et réseau, donc comme attendu, les tests étaient réussis.&lt;br /&gt;
&lt;br /&gt;
===Contrôle des servomoteurs===&lt;br /&gt;
&lt;br /&gt;
Un servomoteur se contrôle à l'aide d'un signal PWM (Pulse Width Modulation). Ce signal consiste à modifier la largeur de l'impulsion en fonction de la consigne désirée. &lt;br /&gt;
&lt;br /&gt;
La génération de PWM via microcontrôleur se fait à l'aide de TIMERS. Il faut savoir qu'il existe une priorité dans les interruptions, pour un TIMER_X donné, plus le X est proche de 0, plus l'interruption sera prioritaire. Nos signaux PWM se doivent d'être le plus en accord avec nos consignes, c'est pourquoi nous avons choisi d'utiliser les TIMER les plus prioritaires pour les générer. (TIMER0 et TIMER1)&lt;br /&gt;
&lt;br /&gt;
====PWM sur un seul servomoteur====&lt;br /&gt;
&lt;br /&gt;
Notre première manière de procéder consistait à générer la PWM nous même à l'aide du vecteur d'interruption d'un TIMER. La méthode consistait à compter de 0 à 255 en permanence. Lorsque le compteur était inférieur à la consigne, on passait une sortie à l'état haut, sinon elle restait à l'état bas. &lt;br /&gt;
&lt;br /&gt;
Cette méthode simulait plutôt bien le signal PWM et avait pour avantage d'être utilisable pour n'importe quelle de l'arduino. Cependant, cette méthode a le gros désavantage d'être sensible à l'utilisation d'autres interruptions, rendant le TIMER imprécis.&lt;br /&gt;
&lt;br /&gt;
Or, notre projet utilisera d'autres procédures d'interruption. Nous avons donc décidé d'utiliser une méthode plus simple mais nous restreignant sur le choix de nos sorties.&lt;br /&gt;
&lt;br /&gt;
En effet, un atmega possède des registres que l'on peut configurer pour générer des signaux PWM sur des broches spécifiques.&lt;br /&gt;
&lt;br /&gt;
Ainsi, en configurant le registre TCCR0A à 0x81 et TCCR0B à 0x05, on se place en mode PWM non inversée à fréquence élevée. En résumé, cette configuration nous permet de faire varier les signaux PWM en introduisant une consigne dans le registre OCR0A.&lt;br /&gt;
&lt;br /&gt;
Ainsi, nous pouvons donc contrôler le moteur simplement en changeant la consigne dans OCR0A.&lt;br /&gt;
&lt;br /&gt;
====Tests====&lt;br /&gt;
&lt;br /&gt;
Dans un premier lieu, les moteurs servomoteurs ne recevaient pas les consignes. Nous pensions que le fait que la PWM soit en 3V3 était l'origine du problème. Nous avons donc fait le montage à l'aide d'un transistor NPN monté en saturé. Le problème n'a pas été résolu. &lt;br /&gt;
&lt;br /&gt;
Finalement, le soucis viendrait du fait que les tests étaient effectués avec des valeurs du registre OCR0A à 0 (pwm nulle). Nous n'aurons donc pas besoin d'un montage à transistor pour le PCB.&lt;br /&gt;
&lt;br /&gt;
Le but des servomoteurs est d'effectuer un semblant de massage, nous allons donc modifier le code afin d'effectuer la tâche de manière périodique via l'utilisation d'un TIMER.&lt;br /&gt;
&lt;br /&gt;
====Gestion d'un ensemble de servomoteurs====&lt;br /&gt;
&lt;br /&gt;
Dans le vagin, nous utilisons 4 servomoteurs afin de masser l'utilisateur. Nous avons trouvé intéressant de diviser ces moteurs en deux couples afin d'intensifier ou non ce massage en fonction des seuils d'excitation détectés par les capteurs.&lt;br /&gt;
&lt;br /&gt;
Pour ce faire, nous aurons besoin de deux signaux PWM différents, donc de l'utilisation de deux timers configurés en PWM. &lt;br /&gt;
&lt;br /&gt;
Comme dit en introduction de cette section, nous nous imposons l'utilisation du TIMER1 pour cette deuxième PWM. Il existe une différence dans la configuration de cette dernière dans la mesure où le signal peut recevoir des consignes allant de 8 à 16bits en fonction de la configuration. Afin de simplifier les choses, nous avons configuré cette dernière sur 8bits pour lui envoyer les mêmes consignes que pour le TIMER0.&lt;br /&gt;
&lt;br /&gt;
====Tests====&lt;br /&gt;
&lt;br /&gt;
Avant tout, nous devions vérifier que la consigne avait une intensité suffisante pour être envoyée sur deux servomoteurs en même temps. Ce qui était le cas.&lt;br /&gt;
&lt;br /&gt;
Ensuite, nous avons testés des changements de consignes plus ou moins rapides afin de déterminer ce qui répondrait le mieux à nos attentes.&lt;br /&gt;
&lt;br /&gt;
Les tests concluants, nous pouvions passer à la suite.&lt;br /&gt;
&lt;br /&gt;
===Utilisation des buzzers===&lt;br /&gt;
&lt;br /&gt;
En fonction du niveau d'excitation, nous ferons vibrer un ou deux buzzers. Pour ce faire, nous avons fait le choix de souder leur broche GND au GND de nos cartes et ainsi souder leur potentiel VCC à une broche de l'arduino. Ainsi, si nous plaçons la broche à l'état bas, le tension dans le buzzer est nulle et si nous passons la broche à l'état haut, la tension aux bornes du buzzers devient 3.3V et il vibre.&lt;br /&gt;
&lt;br /&gt;
Pour ce faire, nous utilisons simplement deux broches, ici PXX et PXX, que nous avons initialisés en tant que sorties en mettant à un leur bit correspondant dans le registre DDRX. Ainsi, il ne reste plus qu'à commander la valeur haute ou basse de ces broches en mettant à 1 ou 0 leur bit dans le registre PORTX.&lt;br /&gt;
&lt;br /&gt;
====Tests====&lt;br /&gt;
&lt;br /&gt;
Ceci a été testé sur breadboard et était fonctionnel. Cependant, une chose à quoi nous n'avions pas pensé était que lorsque nous les avons soudés sur le PCB, nous aurions dû utiliser des câbles plus épais, car comme nous n'avions pas de prototype sur quoi coller les buzzers, l'un des buzzers s'est arraché de la carte en vibrant.&lt;br /&gt;
&lt;br /&gt;
===TIMER2===&lt;br /&gt;
&lt;br /&gt;
Maintenant que nous avons chaque partie pouvant fonctionner indépendamment, nous avons choisi d'utiliser le dernier TIMER à disposition afin de rendre l'intégralité du programme basé sur les interruptions et ainsi s'assurer que les priorités désirées soient respectées.&lt;br /&gt;
&lt;br /&gt;
Ce TIMER nous servira donc à :&lt;br /&gt;
&lt;br /&gt;
* Effectuer des mesures régulières des capteurs&lt;br /&gt;
* Changer les consignes PWM quand il le faut&lt;br /&gt;
&lt;br /&gt;
Nous avons fait en sorte que ce TIMER provoque une interruption le plus lentement possible (à savoir toutes les 32ms environ), afin de ne pas surcharger le contrôleur inutilement. En effet, la mesure des capteurs n'a pas besoin d'être faite de manière intensive.&lt;br /&gt;
&lt;br /&gt;
====Test====&lt;br /&gt;
&lt;br /&gt;
Au cours des tests, nous nous sommes rendu compte que la mesure d'excitation avec l'accéléromètre ne pouvait être fait que sur une seule mesure du capteur. Ainsi, nous avons décidé de moyenner les valeurs sur 20mesures et calculons ce qui se rapproche de la dérivée des valeurs de l'accéléromètre sur une période donnée.&lt;br /&gt;
&lt;br /&gt;
Ainsi, nous mesurons réellement l'entrain de l'utilisateur sur une période de temps significative et non pas à un instant donné.&lt;br /&gt;
&lt;br /&gt;
===Résumé===&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Resume sextoy.png|center|recap]]&lt;br /&gt;
&lt;br /&gt;
===Conclusion===&lt;br /&gt;
&lt;br /&gt;
Cette partie du projet a été finalisée. Nous avons réussi à utiliser toutes les fonctionnalités &amp;quot;embarquées&amp;quot; de notre projet.&lt;br /&gt;
&lt;br /&gt;
==Gestion de la communication bluetooth==&lt;br /&gt;
===Introduction===&lt;br /&gt;
Dans le cadre de notre projet, la communication entre le sextoy et le téléphone se fera à faible portée. C'est pourquoi nous avons considéré comme intéressante l'utilisation de la technologie bluetooth.&lt;br /&gt;
&lt;br /&gt;
La première partie consiste à coder une librairie au niveau de l'arduino. Cette librairie, codée en C, consiste simplement en une lecture / écriture via les broches RX/TX de l'arduino et du module bluetooth. &lt;br /&gt;
&lt;br /&gt;
La seconde partie conssite à coder la partie application mobile qui communiquera avec la arduino.&lt;br /&gt;
&lt;br /&gt;
Une fois que cette transmission sera mise en place, il ne reste plus qu'à expliciter le protocole des paquets transmis.&lt;br /&gt;
&lt;br /&gt;
===Arduino===&lt;br /&gt;
&lt;br /&gt;
Afin de communiquer à travers le module bluetooth, il faut relier la broche RX de l'arduino à celle TX du module bluetooth et inversement. Pour tester nos codes, nous avons utilisé un module bluetooth HC-05 et l'application [https://play.google.com/store/apps/details?id=Qwerty.BluetoothTerminal&amp;amp;hl=fr| Bluetooth Terminal]. &lt;br /&gt;
&lt;br /&gt;
Dans la mesure où l'arduino devra traiter l'arrivée asynchrone de messages tout en effectuant le traitement des capteurs, il est intéressant d'effectuer des lectures à l'aide d'interruptions. Pour cela, nous utilisons le vecteur d'interruption USART_RXC_vect qui déclenchera la fonction de lecture à chaque fois qu'un message est reçu.&lt;br /&gt;
&lt;br /&gt;
Une fois le niveau d'excitation lu, nous pouvons utiliser la fonction &amp;quot;lovometre()&amp;quot; qui activera ou désactivera tel ou tel dispositif en fonction du niveau reçu. En réponse à cette lecture, pour confirmer notre réception, nous envoyons le niveau d'excitation actuel de l'utilisateur.&lt;br /&gt;
&lt;br /&gt;
====Test====&lt;br /&gt;
&lt;br /&gt;
A l'aide de [https://play.google.com/store/apps/details?id=Qwerty.BluetoothTerminal&amp;amp;hl=fr| Bluetooth Terminal], nous avons pu effectuer un test sans l'application mobile de notre projet. Ayant fait ces tests avant la partie &amp;quot;gestion des composants&amp;quot;, nous nous sommes juste assurés du bon fonctionnement de la communication en effectuant un echo à chaque réception.&lt;br /&gt;
&lt;br /&gt;
===Module bluetooth utilisé===&lt;br /&gt;
&lt;br /&gt;
Le module bluetooth embarqué sur le PCB est un module reprogrammable. Ainsi il était nécessaire de connaître la configuration par défaut du composant, dans le but de savoir s'il fallait ou non prévoir un pcb de reconfiguration.&lt;br /&gt;
&lt;br /&gt;
Le CYBLE-012012 est configuré par défaut avec le firmware &amp;quot;EZ-Serial BLE Firmware&amp;quot;. La configuration par défaut de ce firmware est la suivante : &lt;br /&gt;
&lt;br /&gt;
* 115200 baud, 8bits de donnée, pas de bit de parité, 1bit de stop&lt;br /&gt;
* &amp;quot;UART flow control&amp;quot; désactivé&lt;br /&gt;
* firmware activé en mode &amp;quot;auto-start&amp;quot;, qui correspond à une recherche automatique de connection bluetooth et de redirection RX-TX en cas de connection&lt;br /&gt;
&lt;br /&gt;
Ces [http://www.cypress.com/file/285326/download| informations] sont importantes car, si elles sont vraiment respectées, nous n'auront pas à créer notre propre kit de développement, ce qui est un gain de temps considérable.&lt;br /&gt;
&lt;br /&gt;
Qui plus est, l'utilisation d'une fonction &amp;quot;auto-start&amp;quot; est en adéquation avec le module bluetooth HC-05 utilisé pour les tests. Nous pouvons donc commencer la programmation mobile du bluetooth en parallèle de l'impression des pcb. Et, dans le cas où les pcb seraient disfonctionnels, nous pourront quand meme envisager un prototype sur breadboard.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Test====&lt;br /&gt;
&lt;br /&gt;
Après avoir alimenté la carte, nous n'avons pas pu nous connecter au module bluetooth, ce dernier n'étant même pas visible dans les appareils alentours. &lt;br /&gt;
&lt;br /&gt;
Nous avons alors vérifié si la carte était correctement alimentée. Pour ce faire, nous avons mesuré différents points de tensions sensé être mis par défaut en PULL-DOWN ou PULL-UP à des niveaux de tensions d'1.7V. Ces niveaux étaient respectés. Le problème n'est donc pas d'ordre électronique. &lt;br /&gt;
&lt;br /&gt;
Par la suite, nous avons voulu vérifier la communication du module. Ce dernier, en déclenchant l'auto start est sensé émettre (en suivant le protocole UART rappelé précédemment) un message START. Nous avons donc inspecté ceci en utilisant minicom. En effet, minicom reçoit un message, mais ne sait pas le déchiffré. Qui plus est, impossible d'envoyer un message au module afin de le reprogrammer (de manière similaire à un XBee).&lt;br /&gt;
&lt;br /&gt;
Devant ces soucis, nous décidons donc d'abandonner ce module bluetooth et de poursuivre avec celui utilisé pour les essais de programmation, le HC-05.&lt;br /&gt;
&lt;br /&gt;
Pour gérer la communication entre le téléphone et un sextoys, il faut utiliser une communication Bluetooth.&lt;br /&gt;
&lt;br /&gt;
Dans un premier temps il faut se connecter avec l'appareil:&lt;br /&gt;
 &lt;br /&gt;
 new ConnectBT().execute();&lt;br /&gt;
&lt;br /&gt;
Avec ConnectBT une classe trouvée sur internet.&lt;br /&gt;
&lt;br /&gt;
Ensuite il faut communiquer :&lt;br /&gt;
&lt;br /&gt;
Pour envoyer un message on utilise: &lt;br /&gt;
&lt;br /&gt;
 btSocket.getOutputStream().write(message);&lt;br /&gt;
&lt;br /&gt;
Avec btSocket un socket Bluetooth ayant été connecté avec le sextoy dans la classe ConnectBT.&lt;br /&gt;
&lt;br /&gt;
Ensuite il faut recevoir :&lt;br /&gt;
&lt;br /&gt;
 btSocket.getInputStream().read(mmBuffer);&lt;br /&gt;
&lt;br /&gt;
Avec mmBuffer qui contient le message reçu.&lt;br /&gt;
&lt;br /&gt;
Mais contrairement à la réception UDP, la réception Bluetooth n'est pas bloquante, ainsi on peut recevoir des messages nuls.&lt;br /&gt;
&lt;br /&gt;
===Protocole de transmission===&lt;br /&gt;
Pour éviter que l'application ne reçoit de message vide, nous avons choisi que le sextoy réponde juste après avoir reçu un paquet.&lt;br /&gt;
&lt;br /&gt;
Ainsi l'application à juste a envoyer un paquet Bluetooth et juste après à chercher à lire le message reçu, pour que tout fonctionne comme prévue&lt;br /&gt;
&lt;br /&gt;
==Conception de l'application Android==&lt;br /&gt;
===Envoie et réception de SMS===&lt;br /&gt;
Afin de ne pas utiliser de serveur, les deux appareils Android doivent synchroniser l'envoi de paquet UDP, pour cela nous avons voulu utiliser des SMS.&lt;br /&gt;
Les SMS permettent d'envoyer des informations, comme les adresses IP, les ports utilisés, l'heure à laquelle les deux téléphones vont envoyer leur premier paquet UDP.&lt;br /&gt;
&lt;br /&gt;
Dans un premier temps nous avons créer une application pour envoyer les SMS:&lt;br /&gt;
&lt;br /&gt;
L'application était très simple, l'envoi de SMS se faisait en deux lignes&lt;br /&gt;
  // initialisation d'une variable sms gérant les sms&lt;br /&gt;
  SmsManager sms = SmsManager.getDefault() ;&lt;br /&gt;
  // envoie un sms comportant le texte de la variable message de type String au numéro contenu dans la variable num de type String&lt;br /&gt;
  sms.sendTextMessage(num, null, message, null, null);&lt;br /&gt;
&lt;br /&gt;
Dans un deuxième temps il fallait recevoir un SMS, ou plutôt savoir qu'un nouvel SMS avait été reçu :&lt;br /&gt;
&lt;br /&gt;
Pour cela il fallait utiliser un thread qui était appelé par interruption avec la réception d'un SMS comme vecteur d’interruption.&lt;br /&gt;
Ce thread effectuait ce qui était demandé dans sa fonction onReceive(), comme par exemple lire les informations contenues dans le SMS:&lt;br /&gt;
  public class IncomingSms extends BroadcastReceiver {&lt;br /&gt;
     final SmsManager sms = SmsManager.getDefault();&lt;br /&gt;
     public void onReceive(Context context, Intent intent) {&lt;br /&gt;
       //Ce qui doit etre fait lors de la reception de SMS&lt;br /&gt;
     }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Malheureusement ce programme ne marchait pas pendant des semaines, malgré de nombreuses modifications et de nombreux essais. Et le problème semblait être ma carte SIM, car en changeant de SIM, tous les programmes contenant ce code fonctionnaient parfaitement.&lt;br /&gt;
&lt;br /&gt;
===Protocole UDP===&lt;br /&gt;
Afin d'effectuer un échange de données entre les deux utilisateurs, et essayer de faire une vidéo-conférence, nous avons choisi d'utiliser le protocole UDP.&lt;br /&gt;
&lt;br /&gt;
Une première application permettait de tester l'envoi de paquet UDP, pour cela un serveur UDP a été utilisé sur un PC.&lt;br /&gt;
Le serveur attendait un message et l'affichait quand il le recevait.&lt;br /&gt;
&lt;br /&gt;
Pour envoyer un paquet nous utilisons :&lt;br /&gt;
&lt;br /&gt;
 DatagramSocket ds = null;&lt;br /&gt;
 ds = new DatagramSocket(PortA);&lt;br /&gt;
 DatagramPacket dp;&lt;br /&gt;
 InetAddress local = InetAddress.getByName(AdrIp);&lt;br /&gt;
 dp = new DatagramPacket(message.getBytes(),message.length(),local,PortA );&lt;br /&gt;
 ds.setBroadcast(true);&lt;br /&gt;
 ds.send(dp);&lt;br /&gt;
&lt;br /&gt;
Ce code crée un paquet qui comporte l’adresse et le port du destinataire, mais surtout les données à envoyer.&lt;br /&gt;
Ce paquet est ensuite envoyer grâce à un socket.&lt;br /&gt;
&lt;br /&gt;
Une fois que tout fonctionnait comme il le fallait, nous avons pu créer une application qui comportait l'envoi et la réception de paquet.&lt;br /&gt;
En mettant l'application sur deux téléphones on pouvait tester si tout fonctionnait.&lt;br /&gt;
Les tests ont seulement été effectué sur un réseau local, on ne sait pas pour le moment si des box internet pourraient empêcher la transmission.&lt;br /&gt;
Pour la réception nous utilisons :&lt;br /&gt;
 dsocket.receive(packet);&lt;br /&gt;
 buff = packet.getData();&lt;br /&gt;
&lt;br /&gt;
Pour récupérer les données du paquet dans la variable buff, il suffit ensuite de créer une boucle pour recevoir plusieurs messages.&lt;br /&gt;
La fonction de réception étant bloquante, il a été préférable de l'effectuer dans un thread.&lt;br /&gt;
&lt;br /&gt;
L'application est donc composé de un thread d'écoute, un thread d'envoi et d'un thread principal gérant l'affichage et appelant le thread d'envoi lorsque que le bouton de l'application est appuyé.&lt;br /&gt;
Voici une image de l'application, les champs d’adresseIp et de port du destinataire sont à remplir avant d'envoyer un paquet UDP.&lt;br /&gt;
Et le port d'écoute est défini dans le code de cette application, ce qui n'est pas très pratique, mais suffisant pour les tests.&lt;br /&gt;
&lt;br /&gt;
Le TextView est mis à jour à chaque que le bouton envoyer est appuyé, en prenant comme valeur celle d'un registre comprenant la valeurs du dernier paquet UDP reçu.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:ClientUdp.png]]&lt;br /&gt;
&lt;br /&gt;
===Application principale===&lt;br /&gt;
Afin d'être ergonomique,l'application doit pouvoir enregistrer des contacts, pour plus facilement communiquer avec eux.&lt;br /&gt;
Nous avons choisi de ne pas utiliser les contacts du téléphone, pour pouvoir avoir des contacts &amp;quot;confidentiels&amp;quot; qui ne seront que dans la base de donnée de l'application.&lt;br /&gt;
&lt;br /&gt;
Il fallait donc créer une base de donnée, nous avons donc utilisé SQLite car cette bibliothèque est utilisée par Android comme base de données embarquée.&lt;br /&gt;
La base ne comporte qu'une seule table, avec seulement les pseudos et les numéros de téléphone.&lt;br /&gt;
&lt;br /&gt;
Une fois la base crée, pour interagir avec, nous avons coder des activités:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
- Ajout de contact:&lt;br /&gt;
&lt;br /&gt;
Il faut entrer dans les champs de textes les informations pour la base de données,puis appuyer sur le bouton &amp;quot;Ajouter&amp;quot; pour créer un nouveau contact dans la base de donnée.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:AjoutContact.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-Fiche de Contact: &lt;br /&gt;
&lt;br /&gt;
Affiche le pseudo et le numéro de téléphone dans les &amp;quot;TextView&amp;quot;, et permet de : supprimer le contact en cliquant sur la croix, envoyer un SMS en cliquant sur l'icone &amp;quot;Message&amp;quot;, mais aussi commencer une communication UDP en cliquant sur le téléphone.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:FicheContact.png]]  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-Liste de contact :&lt;br /&gt;
&lt;br /&gt;
Affiche la liste de contacts, en cliquant sur un des contacts on arrive sur la page Fiche de Contact, et en cliquant sur le plus on arrive sur la page Ajout de Contact.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:ListView.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ensuite il faut ajouter la gestion de communication:&lt;br /&gt;
&lt;br /&gt;
-Les SMS :&lt;br /&gt;
&lt;br /&gt;
Il faut remplir les champs de texte et appuyer sur SMS pour envoyer un message du type&lt;br /&gt;
&lt;br /&gt;
Message&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Address Ip :&amp;quot; Addresse Ip&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Port :&amp;quot; Port&lt;br /&gt;
&lt;br /&gt;
Avec Message,Addresse Ip, et Port les champs à remplir, &amp;quot;Addresse Ip :&amp;quot; et &amp;quot;Port :&amp;quot; deux chaines de caractères.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:SMS.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-Protocole UDP : &lt;br /&gt;
&lt;br /&gt;
Quatre champs sont à remplir, cliquer sur Envoyer pour passez à l'activité de gestion Bluetooth.&lt;br /&gt;
&lt;br /&gt;
Les champs sont:&lt;br /&gt;
&lt;br /&gt;
-L'addresse Ip&lt;br /&gt;
&lt;br /&gt;
-Le port destination&lt;br /&gt;
&lt;br /&gt;
-Le port source&lt;br /&gt;
&lt;br /&gt;
-L'heure qui n'est pas utilisée, qui devait servir pour la synchronisation.&lt;br /&gt;
&lt;br /&gt;
Les valeurs des champs sont conservés pour la communication UDP à venir.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:UDP.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-Gestion Bluetooth :&lt;br /&gt;
&lt;br /&gt;
En cliquant sur &amp;quot;Paired Devices&amp;quot;, l'application affichera la liste des appareils appairés.&lt;br /&gt;
&lt;br /&gt;
Puis en cliquant un des appareils, l'application essayera de connecter avec, tout en lançant l'activité UDP avec Bluetooth.&lt;br /&gt;
&lt;br /&gt;
Si l'on souhaite ne pas utiliser de périphérique Bluetooth, il suffit de cliquer sur le bouton moins en haut à droite.&lt;br /&gt;
&lt;br /&gt;
L'activité UDP sans Bluetooth se lancera.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Bluetooth.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-Communication UDP avec Bluetooth:&lt;br /&gt;
&lt;br /&gt;
Pour lancer la communication UDP, appuyer sur le bouton Off ,il passera en mode On.&lt;br /&gt;
&lt;br /&gt;
Si vous cliquez sur le bouton On il passera en mode Off, et coupera la communication UDP.&lt;br /&gt;
&lt;br /&gt;
Le bouton envoyer, permet de forcer l'envoi d'un paquet UDP.&lt;br /&gt;
&lt;br /&gt;
Et le bouton croix coupe toutes les communications(UDP et Bluetooth), et retourne à la page précédente.&lt;br /&gt;
&lt;br /&gt;
Lorsque l'application reçoit un paquet UDP, un message est envoyé via Bluetooth au sextoys.&lt;br /&gt;
&lt;br /&gt;
Celui-ci répond automatiquement en envoyant une valeur moyennée des ses capteurs, cette valeur est récupérée et mise dans un registre.&lt;br /&gt;
&lt;br /&gt;
En parallèle, toutes les secondes un paquet UDP est envoyé et les données envoyés sont celle du registre.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Com.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-Communication UDP sans Bluetooth.&lt;br /&gt;
&lt;br /&gt;
Le bouton On/Off est utilisé comme dans l'activité &amp;quot;Communication UDP avec Bluetooth&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Les boutons de niveaux, mettent une valeur dans un même registre.&lt;br /&gt;
&lt;br /&gt;
Chaque boutons correspond à une valeur, qui correspondent avec un niveau d'excitation du sextoys.&lt;br /&gt;
&lt;br /&gt;
Ainsi toutes les secondes, un paquet UDP est envoyé avec comme donnée la valeur du registre.&lt;br /&gt;
&lt;br /&gt;
Lorsqu'un paquet UDP est reçu, la donnée reçue est mise dans un registre qui détermine l’affichage du &amp;quot;TextView&amp;quot; en bas à droite.&lt;br /&gt;
&lt;br /&gt;
Ce TextView est mis à jours en même temps qu'un paquet UDP est envoyé.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Co2.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Streaming vidéo===&lt;br /&gt;
&lt;br /&gt;
Nous nous sommes attardés sur le streaming vidéo avant d'avoir fait l'application principale et le gestion du Bluetooth. &lt;br /&gt;
Nous avions trouvé un code sur Github, qui permettait de streamer la vidéo du téléphone sur un pc.&lt;br /&gt;
Il aurait fallut adapter ce code pour streamer entre deux téléphones.&lt;br /&gt;
Mais la recherche du code avait pris trop de temps, et il restait encore trop de chose importante à faire avant de pouvoir continuer cette partie.&lt;br /&gt;
C'est pourquoi il n'y a pas de Streaming vidéo dans l'application finale.&lt;br /&gt;
&lt;br /&gt;
===Conclusion===&lt;br /&gt;
Il reste beaucoup de travail, on ne sait pas si l'application fonctionne avec les boxs, il faudrait améliorer l'ergonomie pour l'utilisateur( par exemple l'application pourrait récupérer elle-même l'addresse Ip pour l'envoyer par SMS), et le streaming vidéo aurait été vraiment intéressant.&lt;br /&gt;
&lt;br /&gt;
Mais l'application arrive tout de même à communiquer avec les sextoys, mais aussi avec un deuxième téléphone en même temps.&lt;br /&gt;
La connexion avec un sextoy est simple, on peut simuler les relevés des capteurs si on désire ne pas utiliser de sextoys, on peut facilement agencer sa liste de contact et interagir avec.&lt;br /&gt;
Ce qui est déjà une très bonne base.&lt;br /&gt;
&lt;br /&gt;
== Rapport et codes ==&lt;br /&gt;
&lt;br /&gt;
Rapport : [[Fichier:CR_sextoy_connecte.pdf]]&lt;br /&gt;
&lt;br /&gt;
[https://archives.plil.fr/croussel/Projet_sextoy_connecte.git Codes]&lt;/div&gt;</summary>
		<author><name>Tstieven</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=IMA4_2016/2017_P14&amp;diff=42896</id>
		<title>IMA4 2016/2017 P14</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=IMA4_2016/2017_P14&amp;diff=42896"/>
				<updated>2017-05-20T16:48:00Z</updated>
		
		<summary type="html">&lt;p&gt;Tstieven : /* Streaming vidéo */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Projet IMA4 : Sex-toy connecté =&lt;br /&gt;
&lt;br /&gt;
== Présentation du projet ==&lt;br /&gt;
&lt;br /&gt;
L'objectif de ce projet est de développer un système d'échange entre deux partenaires distants afin de rendre plus facile la vie de couple à distance.&lt;br /&gt;
&lt;br /&gt;
Pour ce faire, le dispositif sera constitué de deux sextoys connectés (un par appareil génital désiré) à leur téléphone portable respectif. Une application mobile permettra aux utilisateurs de s'échanger des données de manière sécurisé, ceci au travers d'un serveur embarqué dans le téléphone portable.&lt;br /&gt;
&lt;br /&gt;
Les données échangées pourront être l'accélération ou la température. Elles seront traitées et transmises au sextoy qui adaptera sa vitesse, son retour vibratoire ou sa position en conséquence.&lt;br /&gt;
&lt;br /&gt;
Les sextoys pourraient être composés de :&lt;br /&gt;
* Pour l'appareil masculin (dédié à la femme) :&lt;br /&gt;
:* un servomoteur ;&lt;br /&gt;
:* un vibreur ;&lt;br /&gt;
:* une sonde de température ;&lt;br /&gt;
:* un accéléromètre.&lt;br /&gt;
* Pour l'appareil féminin (dédié à l'homme) :&lt;br /&gt;
:* 4 servomoteurs (dans le but de &amp;quot;masser&amp;quot; en déplaçant le silicone);&lt;br /&gt;
:* des vibreurs ;&lt;br /&gt;
:* un accéléromètre.&lt;br /&gt;
* Pour les deux appareils :&lt;br /&gt;
:* un micro-contrôleur (Arduino mini) ;&lt;br /&gt;
:* un module de transmission / réception bluetooth afin de se connecter au téléphone ;&lt;br /&gt;
:* du silicone.&lt;br /&gt;
	&lt;br /&gt;
* L'application mobile devra :&lt;br /&gt;
:* mettre en place une communication cryptée à travers un serveur (embarqué ou bien intermédiaire ?) ;&lt;br /&gt;
:* effectuer un échange de données en bluetooth avec le sextoy connecté.&lt;br /&gt;
&lt;br /&gt;
* L'application mobile pourra :&lt;br /&gt;
:* utiliser la vidéo-conférence ;&lt;br /&gt;
:* enregistrer les meilleurs moments et enventuellement pouvoir les partager ;&lt;br /&gt;
:* effectuer une recherche de partenaire aléatoire.&lt;br /&gt;
&lt;br /&gt;
* S'il nous reste du temps, il peut être envisageable de :&lt;br /&gt;
:* mettre en place un réseau social interne à Polytech.&lt;br /&gt;
&lt;br /&gt;
== Liste des tâches ==&lt;br /&gt;
* Conception de l'appareil masculin (Cédric)&lt;br /&gt;
:* mettre en place le bus I2C avec les différents capteurs ;&lt;br /&gt;
:* création d'un PCB au format gerber ;&lt;br /&gt;
:* création d'un prototype.&lt;br /&gt;
&lt;br /&gt;
* Conception de l'appareil féminin (Cédric)&lt;br /&gt;
:* mettre en place le bus I2C ;&lt;br /&gt;
:* traitement des données afin d'en déduire la position et l'entrain de l'utilisateur ;&lt;br /&gt;
:* création d'un PCB ;&lt;br /&gt;
:* création d'un prototype.&lt;br /&gt;
&lt;br /&gt;
* Communication bluetooth (Cédric et Thomas)&lt;br /&gt;
:* étudier l'émission/réception vue de l'arduino ;&lt;br /&gt;
:* étudier l'émission/réception vue du téléphone ;&lt;br /&gt;
:* mise en place du protocole ;&lt;br /&gt;
:* test de portée.&lt;br /&gt;
&lt;br /&gt;
* Développement mobile (Thomas)&lt;br /&gt;
:* déterminer la meilleure approche : utilisation d'un serveur intermédiaire ou bien mise en place d'un &amp;quot;client-serveur&amp;quot; dans l'application mobile ;&lt;br /&gt;
:* mettre en place le choix retenu ;&lt;br /&gt;
:* tester dans un premier temps une transmission de texte ;&lt;br /&gt;
:* programmer le traitement de données reçues par bluetooth ;&lt;br /&gt;
:* rajouter un côté esthétique à l'application.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Recapitulatif sextoy.png|center|recap]]&lt;br /&gt;
&lt;br /&gt;
==Feuille d'heures==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Tâche !! Prélude !! Heures S1 !! Heures S2 !! Heures S3 !! Heures S4 !! Heures vacances !! Heures S5 !! Heures S6 !! Heures S7 !! Heures S8 !! Heures S9 !! Heures S10 !! Heures vacances et après!! Total&lt;br /&gt;
|-&lt;br /&gt;
| Définition cahier des charges &lt;br /&gt;
| 2H&lt;br /&gt;
| 2H&lt;br /&gt;
| 1H&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 5H&lt;br /&gt;
|-&lt;br /&gt;
| Dimensionnement et établissement de la liste de matériel&lt;br /&gt;
| &lt;br /&gt;
| 3H&lt;br /&gt;
| 4H&lt;br /&gt;
|&lt;br /&gt;
| 4H&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 11H&lt;br /&gt;
|-&lt;br /&gt;
| Établissement de la liste et de la répartition des tâches&lt;br /&gt;
| 1H&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 1H&lt;br /&gt;
|-&lt;br /&gt;
| Appareil masculin : programmation&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 1H&lt;br /&gt;
| 2H&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| 14H&lt;br /&gt;
| 17H &lt;br /&gt;
|-&lt;br /&gt;
| Appareil masculin &amp;amp; féminin : étude des datasheets&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 1H&lt;br /&gt;
| 1H&lt;br /&gt;
|&lt;br /&gt;
| 4H&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| 1H&lt;br /&gt;
|&lt;br /&gt;
| 7H&lt;br /&gt;
|-&lt;br /&gt;
| Appareil masculin : PCB&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 4H&lt;br /&gt;
| 4H&lt;br /&gt;
| 6H&lt;br /&gt;
| 30H&lt;br /&gt;
| 44H&lt;br /&gt;
|-&lt;br /&gt;
| Appareil masculin : 3D&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| 6H&lt;br /&gt;
| 6H&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
| Appareil féminin : programmation&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 24H&lt;br /&gt;
| 24H&lt;br /&gt;
|-&lt;br /&gt;
| Appareil féminin : PCB&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| 2H&lt;br /&gt;
| 1H&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 4H&lt;br /&gt;
| 7H&lt;br /&gt;
|-&lt;br /&gt;
| Appareil féminin : 3D&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 0H&lt;br /&gt;
|-&lt;br /&gt;
| Liaison bluetooth (embarqué)&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 3H&lt;br /&gt;
| 1H&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 8H&lt;br /&gt;
| 12H&lt;br /&gt;
|-&lt;br /&gt;
| Liaison bluetooth (téléphone)&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 15H&lt;br /&gt;
| 15H&lt;br /&gt;
|-&lt;br /&gt;
| Recherche et discussion autour de la meilleure approche de communication&lt;br /&gt;
| 2H&lt;br /&gt;
| 2H&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 4H&lt;br /&gt;
|-&lt;br /&gt;
| Synchronisation temporelle des téléphones (par sms)&lt;br /&gt;
| &lt;br /&gt;
| 2H&lt;br /&gt;
| 4H&lt;br /&gt;
| 6H&lt;br /&gt;
| 8H&lt;br /&gt;
| 6H&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 26H&lt;br /&gt;
|-&lt;br /&gt;
| Transmission de paquets UDP&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 4H&lt;br /&gt;
| 4H&lt;br /&gt;
| 4H&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 6H&lt;br /&gt;
| 18H&lt;br /&gt;
|-&lt;br /&gt;
| Streaming video(UDP)&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 4H&lt;br /&gt;
| 4H&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 8H&lt;br /&gt;
|-&lt;br /&gt;
| Application et bases de données&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 6H&lt;br /&gt;
| 20H&lt;br /&gt;
| 26H&lt;br /&gt;
|-&lt;br /&gt;
| Total&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 231H&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Conception des sextoys==&lt;br /&gt;
===Introduction===&lt;br /&gt;
&lt;br /&gt;
La conception de sextoys doit respecter différents règles, notamment sanitaires. C'est pourquoi nous nous sommes intéressés à l'utilisation de silicone pour ce projet. Nous avons notamment rencontré un ingénieur compétant dans ce domaine afin de nous aiguiller sur cette éventuelle conception.&lt;br /&gt;
&lt;br /&gt;
La conception passera également par une conception 3D que nous effectuerons à l'aide d'imprimantes 3D au fabricarium de Polytech Lille.&lt;br /&gt;
&lt;br /&gt;
Enfin, les prototypes seront embarqués de cartes électroniques (aussi appelés PCB) que nous constituerons.&lt;br /&gt;
&lt;br /&gt;
===Choix du silicone, rencontre avec Mario Sanz===&lt;br /&gt;
&lt;br /&gt;
Le projet nécessite l'utilisation d'une matière souple et non irritante, c'est pourquoi nous avons choisi de nous tourner vers l'utilisation du silicone. Afin de choisir au mieux le produit correspondant à nos besoins, nous avons rencontré Mario Sanz, ingénieur à l'INRIA, qui travail régulièrement avec du silicone.&lt;br /&gt;
&lt;br /&gt;
Ce dernier nous a expliqué les différents points importants sur lesquels nous baser afin de choisir au mieux un produit en accord avec le projet. Ne serait-ce que pour le choix de la dureté, il existe une échelle propre au silicone (&amp;quot;Shore hardness scale&amp;quot;), nous pensions au départ rechercher un silicone le plus mou possible, cependant, il faut savoir que le plus le silicone est mou, plus il a tendance à être &amp;quot;collant&amp;quot;. Finalement, après discutions, un shore de 40A (correspondant à la dureté d'une gomme) suffisamment mince fera l'affaire pour la conception des prototypes.&lt;br /&gt;
&lt;br /&gt;
Il nous a également expliqué que le silicone peut être travaillé à l'aide d'additifs et sous cloche à vide afin d'améliorer le moulage, l'absence de &amp;quot;bulles&amp;quot; sur la surface de la pièce et la souplesse. Nous pouvons cependant travailler sans tout cela car il n'est pas spécialement important, pour notre projet, de rechercher des propriétés physiques homogènes dans tout le sextoy.&lt;br /&gt;
&lt;br /&gt;
Pour ce qui est de la création de moules, nous pourrons les effectuer via imprimante 3D. Il existe un bon nombre de tutoriels sur internet pour s'y référer en cas de soucis.&lt;br /&gt;
&lt;br /&gt;
===Impression 3D===&lt;br /&gt;
&lt;br /&gt;
Pour la création d'objets en 3D, de nombreux outils sont disponibles. Nous avons décidé d'utiliser Tinkercad, un outil qui s'intègre directement au navigateur internet utilisé. &lt;br /&gt;
&lt;br /&gt;
L'avantage d'un tel outil est sa grande communauté qui permet un accès simple et rapide à une multitudes de projets dont on pourrait s'inspirer pour générer nos pièces.&lt;br /&gt;
&lt;br /&gt;
====Création des moules====&lt;br /&gt;
&lt;br /&gt;
A l'aide d'une imprimante 3D, nous pouvons concevoir des moules afin de créer des pièces en silicone. Il s'agit de la manière la plus rapide et accessible pour notre projet.&lt;br /&gt;
&lt;br /&gt;
Cette méthode comporte des désavantages, dont le principal est la présence d'imperfection et de non homogénéité dans les pièces réalisées. Ceci n'a pas de grande importance dans la mesure où nous souhaitons du qualitatif.&lt;br /&gt;
&lt;br /&gt;
====Création d'un prototype====&lt;br /&gt;
&lt;br /&gt;
=====Pénis=====&lt;br /&gt;
&lt;br /&gt;
Afin de visualiser qualitativement la forme et le passage des câbles, un prototype imprimé au Fabricarium de Polytech Lille a été réalisé. &lt;br /&gt;
&lt;br /&gt;
Ce prototype se divise en 3 pièces : un boîtier (pour y loger le PCB), un cylindre (afin de reproduire la forme désirée) et un &amp;quot;tête&amp;quot; qui devait à l'origine être un moule en silicone (pour y loger le PCB du capteur de température).&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Sextoy_penis.png|400px|thumb|center|Prototype 3D pénis]]&lt;br /&gt;
&lt;br /&gt;
===Conception des PCB===&lt;br /&gt;
&lt;br /&gt;
Afin de diminuer un maximum la taille des cartes electroniques, nous utilisons principalement des composants CMS. &lt;br /&gt;
&lt;br /&gt;
La conception des cartes peut-être effectué à l'aide de logicels de CAO tels qu'Altium ou Eagle. Dans notre cas, nous avons utilisé Eagle. &lt;br /&gt;
&lt;br /&gt;
Ce travail consiste à créer une librairie regroupant l'intégralité des composants nécessaires et, ensuite, de  créer un schéma du circuit. Une fois le schéma terminé, il ne restera plus qu'à faire le routage et exporter les fichiers au format &amp;quot;Gerber&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Pour ce projet, nous aurons besoin de deux cartes, une par prototype. Chaque carte embarquera des composants similaires, c'est pourquoi nous nous contenterons d'abord d'un seul PCB pour effectuer des tests. Si ces derniers sont concluants, nous pourrons graver le second.&lt;br /&gt;
&lt;br /&gt;
====PCB du pénis====&lt;br /&gt;
&lt;br /&gt;
Le premier PCB imprimé et soudé est celui du pénis. Une première carte avait été imprimé regroupant sur cette dernière : un support pour l'arduino, un accéléromètre, un module bluetooth. &lt;br /&gt;
&lt;br /&gt;
[[Fichier:PCB_penis_VB.png|400px|thumb|center|PCB v1.0]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous avons expérimentés des problèmes dûs aux dimensions de l'accéléromètre, l'utilisation d'un boîtier CMS de type TDFN10 2x2 était optimiste pour la réalisation du projet, compte tenu du matériel à disposition.&lt;br /&gt;
&lt;br /&gt;
C'est pourquoi une seconde carte a été gravée, cette fois sans l'accéléromètre.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:PCB_penis_VF.png|400px|thumb|center|PCB v2.0]]&lt;br /&gt;
&lt;br /&gt;
[[Fichier:PCB_VF.png|400px|thumb|center|PCB v2.0 schema]]&lt;br /&gt;
&lt;br /&gt;
Ce prototype est sensé embarquer un capteur de température que nous avons décidé de mettre sur un PCB à part. Cette carte avait pour but d'être coulé dans le silicone, afin de mesurer la température au plus près de la zone intéressée.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:TEMPERATURE_PCB_VF.png|400px|thumb|center|PCB temperature]]&lt;br /&gt;
&lt;br /&gt;
[[Fichier:TEMPERATURE_VF.png|400px|thumb|center|PCB temperature schema]]&lt;br /&gt;
&lt;br /&gt;
====PCB du vagin====&lt;br /&gt;
&lt;br /&gt;
Compte tenu des soucis rencontrés avec l'accéléromètre, la carte sera gravée afin de pouvoir y plugger un accéléromètre analogique en traversant. Le but étant d'avoir un prototype fonctionnel d'ici la fin du projet.&lt;br /&gt;
&lt;br /&gt;
Nous avons également eu des problèmes avec le module bluetooth utilisé, ce dernier ne pouvant être reconfiguré manuellement par minicom, nous utiliserons le bluetooth HC-05 utilisé pour les essais de code. De même que pour l'accéléromètre, nous prévoirons un endroit pour le plugger sur la carte.&lt;br /&gt;
&lt;br /&gt;
''image PCB vagin''&lt;br /&gt;
&lt;br /&gt;
''Reste à graver le PCB du vagin''&lt;br /&gt;
&lt;br /&gt;
===Conclusion===&lt;br /&gt;
&lt;br /&gt;
Dans cette partie du projet, tous les PCB ont été soudés, pour certains même plusieurs fois. Nous avons eu des soucis avec certains composants, nous imposant de perdre du temps sur des tests plus poussés que la simple vérification de court circuit et soudures correctes. Finalement, nous avons dû re-designer les cartes et faire autrement que prévu initialement. Ainsi, nous avons appris qu'en se lançant dans un projet, il ne suffit pas de prévoir un seul plan, mais il faut également une solution de secours, ce qui nous aurait économisé un temps précieux.&lt;br /&gt;
&lt;br /&gt;
Nous avons également pu apprendre à utiliser l'imprimante 3D du fabricarium en imprimant un des deux prototypes. Malheureusement, nous n'avons pas eu le temps de mettre à profit les conseils de Mario Sanz sur le silicone.&lt;br /&gt;
&lt;br /&gt;
==Gestion des composants==&lt;br /&gt;
===Introduction===&lt;br /&gt;
&lt;br /&gt;
Notre projet implique l'utilisation de capteurs, de servomoteurs et de buzzers, constituant chacun une partie de la programmation embarquée.&lt;br /&gt;
&lt;br /&gt;
Pour cette programmation, nous avons décidé d'utiliser AVR-gcc et ainsi coder les arduinos en C.&lt;br /&gt;
&lt;br /&gt;
Les capteurs utilisés utilisent un protocole de communication IIC (ou I²C, I2C), ce protocole de multiples avantages que nous expliciterons par la suite. Cependant, comme un des capteurs (l'accéléromètre) prévus initialement nous a causé beaucoup de soucis, nous expliciterons également la mesure à l'aide de capteurs analogiques. Ces différents capteurs nous permettront de mesurer l'excitation d'un utilisateur.&lt;br /&gt;
&lt;br /&gt;
Une fois l'excitation mesurée, il faut induire une réponse &amp;quot;physique&amp;quot;. Pour ce faire, nous utilisons d'une part des servomoteurs dans le but de produire une sensation de massage.&lt;br /&gt;
&lt;br /&gt;
D'autre part, nous utilisons également des buzzers.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'' Veuillez noter que le code ne sera pas détaillé dans le wiki, vous pouvez vous référer au dépôt git contenant les différents codes. ''&lt;br /&gt;
&lt;br /&gt;
===Utilisation des capteurs===&lt;br /&gt;
&lt;br /&gt;
====Capteurs par IIC====&lt;br /&gt;
&lt;br /&gt;
Le choix de l'IIC n'était pas anodin. L'IIC permet, pour un bus de seulement deux fils (SDA et SCL), d'utiliser un nombre important de capteurs. Ainsi, si nous décidions au cours du projet de rajouter tel ou tel capteurs, nous n'avions qu'à les greffer à ce bus IIC.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Iic.jpg|400px|center|Schema iic]]&lt;br /&gt;
&lt;br /&gt;
Tout d’abord, nous devons initialiser le bus IIC de l’arduino. Pour ce faire, il suffit de préciser la fréquence désirée, ici 400KHz, dans les registres TWSR (prescaler) et TWBR. (fréquence désirée suivant la fonction TWBR = (Fcpu - 16 Fscl ) / (2 Fscl Prescaler) ) avant de lancer l'utilisation IIC via le bit TWIE.&lt;br /&gt;
&lt;br /&gt;
Comme il peut y avoir potentiellement plusieurs capteurs sur ce bus, il faut respecter un certain protocole afin de récupérer la valeur du capteur de température. Attardons nous sur la lecture d’une valeur sur le capteur de température. Il faut : &lt;br /&gt;
&lt;br /&gt;
* Lancer un message de start&lt;br /&gt;
* Envoyer l’adresse du capteur de température (0x98 dans notre cas)&lt;br /&gt;
* Envoyer l’adresse du registre qui nous intéresse (0x00 pour celui contenant la température), ceci placera le pointeur de registre du capteur sur cette adresse&lt;br /&gt;
* Restart la communication pour laisser la main au capteur&lt;br /&gt;
* Envoyer l’adresse du capteur en ajoutant 1 (Ceci permet de stipuler que nous désirons lire la valeur pointée)&lt;br /&gt;
* Lire la partie haute de la température&lt;br /&gt;
* Lire la partie basse de la température&lt;br /&gt;
* Envoyer un message de stop&lt;br /&gt;
&lt;br /&gt;
Chaque action correspond à l'utilisation d'une fonction de la librairie IIC codée. (cf déport git) Et après chaque action, nous devons vérifier le status du bus dans le registre TWSR. Ce &amp;quot;status&amp;quot; nous donnera des indications sur le bon déroulement de la communication, à savoir la réception d'ACK (équivalent d'accusé de réception) ou confirmation d'envoie de start, restart, etc.&lt;br /&gt;
&lt;br /&gt;
=====Test=====&lt;br /&gt;
&lt;br /&gt;
Le test de la librairie iic s'est fait directement lorsque la carte du capteur de température a été soudée. Pour ce faire, nous utilisons une compilation en mode &amp;quot;DEBUG&amp;quot; (make debug upload) qui nous permettait de lire la valeur des &amp;quot;status&amp;quot; avec minicom. &lt;br /&gt;
Après différents tests, nous avons finalement réussi à faire fonctionner le capteur de température en IIC, ce dernier nous renvoyait bel et bien une valeur de température précise à 0.5degrés près, vérifié à l'aidé d'un autre capteur de température.&lt;br /&gt;
&lt;br /&gt;
Il est néanmoins regrettable que ce capteur ne sera pas utilisable dans les prototypes finaux dans la mesure où il est greffé à une carte dont le module bluetooth n'est pas utilisable.&lt;br /&gt;
&lt;br /&gt;
====Capteurs analogique====&lt;br /&gt;
&lt;br /&gt;
Comme dit précédemment, nous avons abandonné l'utilisation de l’accéléromètre IIC prévu initialement dans le vagin car nous n'avons pas réussi à le souder sur les cartes du pénis. Nous avons donc utilisé ce qui était à notre disposition à savoir un capteur analogique.&lt;br /&gt;
&lt;br /&gt;
La mesure analogique sous AVR se fait simplement via l'utilisation de la fonction ad_sample(numéro de la broche analogique lue). Elle renvoie directement une valeur entre 0 et 255 correspondant à une conversion analogique-numérique de la tension sur la broche lue du capteur.&lt;br /&gt;
&lt;br /&gt;
=====Test=====&lt;br /&gt;
&lt;br /&gt;
Nous avions déjà utilisé ce genre de fonctionnalité dans le projet de système et réseau, donc comme attendu, les tests étaient réussis.&lt;br /&gt;
&lt;br /&gt;
===Contrôle des servomoteurs===&lt;br /&gt;
&lt;br /&gt;
Un servomoteur se contrôle à l'aide d'un signal PWM (Pulse Width Modulation). Ce signal consiste à modifier la largeur de l'impulsion en fonction de la consigne désirée. &lt;br /&gt;
&lt;br /&gt;
La génération de PWM via microcontrôleur se fait à l'aide de TIMERS. Il faut savoir qu'il existe une priorité dans les interruptions, pour un TIMER_X donné, plus le X est proche de 0, plus l'interruption sera prioritaire. Nos signaux PWM se doivent d'être le plus en accord avec nos consignes, c'est pourquoi nous avons choisi d'utiliser les TIMER les plus prioritaires pour les générer. (TIMER0 et TIMER1)&lt;br /&gt;
&lt;br /&gt;
====PWM sur un seul servomoteur====&lt;br /&gt;
&lt;br /&gt;
Notre première manière de procéder consistait à générer la PWM nous même à l'aide du vecteur d'interruption d'un TIMER. La méthode consistait à compter de 0 à 255 en permanence. Lorsque le compteur était inférieur à la consigne, on passait une sortie à l'état haut, sinon elle restait à l'état bas. &lt;br /&gt;
&lt;br /&gt;
Cette méthode simulait plutôt bien le signal PWM et avait pour avantage d'être utilisable pour n'importe quelle de l'arduino. Cependant, cette méthode a le gros désavantage d'être sensible à l'utilisation d'autres interruptions, rendant le TIMER imprécis.&lt;br /&gt;
&lt;br /&gt;
Or, notre projet utilisera d'autres procédures d'interruption. Nous avons donc décidé d'utiliser une méthode plus simple mais nous restreignant sur le choix de nos sorties.&lt;br /&gt;
&lt;br /&gt;
En effet, un atmega possède des registres que l'on peut configurer pour générer des signaux PWM sur des broches spécifiques.&lt;br /&gt;
&lt;br /&gt;
Ainsi, en configurant le registre TCCR0A à 0x81 et TCCR0B à 0x05, on se place en mode PWM non inversée à fréquence élevée. En résumé, cette configuration nous permet de faire varier les signaux PWM en introduisant une consigne dans le registre OCR0A.&lt;br /&gt;
&lt;br /&gt;
Ainsi, nous pouvons donc contrôler le moteur simplement en changeant la consigne dans OCR0A.&lt;br /&gt;
&lt;br /&gt;
====Tests====&lt;br /&gt;
&lt;br /&gt;
Dans un premier lieu, les moteurs servomoteurs ne recevaient pas les consignes. Nous pensions que le fait que la PWM soit en 3V3 était l'origine du problème. Nous avons donc fait le montage à l'aide d'un transistor NPN monté en saturé. Le problème n'a pas été résolu. &lt;br /&gt;
&lt;br /&gt;
Finalement, le soucis viendrait du fait que les tests étaient effectués avec des valeurs du registre OCR0A à 0 (pwm nulle). Nous n'aurons donc pas besoin d'un montage à transistor pour le PCB.&lt;br /&gt;
&lt;br /&gt;
Le but des servomoteurs est d'effectuer un semblant de massage, nous allons donc modifier le code afin d'effectuer la tâche de manière périodique via l'utilisation d'un TIMER.&lt;br /&gt;
&lt;br /&gt;
====Gestion d'un ensemble de servomoteurs====&lt;br /&gt;
&lt;br /&gt;
Dans le vagin, nous utilisons 4 servomoteurs afin de masser l'utilisateur. Nous avons trouvé intéressant de diviser ces moteurs en deux couples afin d'intensifier ou non ce massage en fonction des seuils d'excitation détectés par les capteurs.&lt;br /&gt;
&lt;br /&gt;
Pour ce faire, nous aurons besoin de deux signaux PWM différents, donc de l'utilisation de deux timers configurés en PWM. &lt;br /&gt;
&lt;br /&gt;
Comme dit en introduction de cette section, nous nous imposons l'utilisation du TIMER1 pour cette deuxième PWM. Il existe une différence dans la configuration de cette dernière dans la mesure où le signal peut recevoir des consignes allant de 8 à 16bits en fonction de la configuration. Afin de simplifier les choses, nous avons configuré cette dernière sur 8bits pour lui envoyer les mêmes consignes que pour le TIMER0.&lt;br /&gt;
&lt;br /&gt;
====Tests====&lt;br /&gt;
&lt;br /&gt;
Avant tout, nous devions vérifier que la consigne avait une intensité suffisante pour être envoyée sur deux servomoteurs en même temps. Ce qui était le cas.&lt;br /&gt;
&lt;br /&gt;
Ensuite, nous avons testés des changements de consignes plus ou moins rapides afin de déterminer ce qui répondrait le mieux à nos attentes.&lt;br /&gt;
&lt;br /&gt;
Les tests concluants, nous pouvions passer à la suite.&lt;br /&gt;
&lt;br /&gt;
===Utilisation des buzzers===&lt;br /&gt;
&lt;br /&gt;
En fonction du niveau d'excitation, nous ferons vibrer un ou deux buzzers. Pour ce faire, nous avons fait le choix de souder leur broche GND au GND de nos cartes et ainsi souder leur potentiel VCC à une broche de l'arduino. Ainsi, si nous plaçons la broche à l'état bas, le tension dans le buzzer est nulle et si nous passons la broche à l'état haut, la tension aux bornes du buzzers devient 3.3V et il vibre.&lt;br /&gt;
&lt;br /&gt;
Pour ce faire, nous utilisons simplement deux broches, ici PXX et PXX, que nous avons initialisés en tant que sorties en mettant à un leur bit correspondant dans le registre DDRX. Ainsi, il ne reste plus qu'à commander la valeur haute ou basse de ces broches en mettant à 1 ou 0 leur bit dans le registre PORTX.&lt;br /&gt;
&lt;br /&gt;
====Tests====&lt;br /&gt;
&lt;br /&gt;
Ceci a été testé sur breadboard et était fonctionnel. Cependant, une chose à quoi nous n'avions pas pensé était que lorsque nous les avons soudés sur le PCB, nous aurions dû utiliser des câbles plus épais, car comme nous n'avions pas de prototype sur quoi coller les buzzers, l'un des buzzers s'est arraché de la carte en vibrant.&lt;br /&gt;
&lt;br /&gt;
===TIMER2===&lt;br /&gt;
&lt;br /&gt;
Maintenant que nous avons chaque partie pouvant fonctionner indépendamment, nous avons choisi d'utiliser le dernier TIMER à disposition afin de rendre l'intégralité du programme basé sur les interruptions et ainsi s'assurer que les priorités désirées soient respectées.&lt;br /&gt;
&lt;br /&gt;
Ce TIMER nous servira donc à :&lt;br /&gt;
&lt;br /&gt;
* Effectuer des mesures régulières des capteurs&lt;br /&gt;
* Changer les consignes PWM quand il le faut&lt;br /&gt;
&lt;br /&gt;
Nous avons fait en sorte que ce TIMER provoque une interruption le plus lentement possible (à savoir toutes les 32ms environ), afin de ne pas surcharger le contrôleur inutilement. En effet, la mesure des capteurs n'a pas besoin d'être faite de manière intensive.&lt;br /&gt;
&lt;br /&gt;
====Test====&lt;br /&gt;
&lt;br /&gt;
Au cours des tests, nous nous sommes rendu compte que la mesure d'excitation avec l'accéléromètre ne pouvait être fait que sur une seule mesure du capteur. Ainsi, nous avons décidé de moyenner les valeurs sur 20mesures et calculons ce qui se rapproche de la dérivée des valeurs de l'accéléromètre sur une période donnée.&lt;br /&gt;
&lt;br /&gt;
Ainsi, nous mesurons réellement l'entrain de l'utilisateur sur une période de temps significative et non pas à un instant donné.&lt;br /&gt;
&lt;br /&gt;
===Résumé===&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Resume sextoy.png|center|recap]]&lt;br /&gt;
&lt;br /&gt;
===Conclusion===&lt;br /&gt;
&lt;br /&gt;
Cette partie du projet a été finalisée. Nous avons réussi à utiliser toutes les fonctionnalités &amp;quot;embarquées&amp;quot; de notre projet.&lt;br /&gt;
&lt;br /&gt;
==Gestion de la communication bluetooth==&lt;br /&gt;
===Introduction===&lt;br /&gt;
Dans le cadre de notre projet, la communication entre le sextoy et le téléphone se fera à faible portée. C'est pourquoi nous avons considéré comme intéressante l'utilisation de la technologie bluetooth.&lt;br /&gt;
&lt;br /&gt;
La première partie consiste à coder une librairie au niveau de l'arduino. Cette librairie, codée en C, consiste simplement en une lecture / écriture via les broches RX/TX de l'arduino et du module bluetooth. &lt;br /&gt;
&lt;br /&gt;
La seconde partie conssite à coder la partie application mobile qui communiquera avec la arduino.&lt;br /&gt;
&lt;br /&gt;
Une fois que cette transmission sera mise en place, il ne reste plus qu'à expliciter le protocole des paquets transmis.&lt;br /&gt;
&lt;br /&gt;
===Arduino===&lt;br /&gt;
&lt;br /&gt;
Afin de communiquer à travers le module bluetooth, il faut relier la broche RX de l'arduino à celle TX du module bluetooth et inversement. Pour tester nos codes, nous avons utilisé un module bluetooth HC-05 et l'application [https://play.google.com/store/apps/details?id=Qwerty.BluetoothTerminal&amp;amp;hl=fr| Bluetooth Terminal]. &lt;br /&gt;
&lt;br /&gt;
Dans la mesure où l'arduino devra traiter l'arrivée asynchrone de messages tout en effectuant le traitement des capteurs, il est intéressant d'effectuer des lectures à l'aide d'interruptions. Pour cela, nous utilisons le vecteur d'interruption USART_RXC_vect qui déclenchera la fonction de lecture à chaque fois qu'un message est reçu.&lt;br /&gt;
&lt;br /&gt;
Une fois le niveau d'excitation lu, nous pouvons utiliser la fonction &amp;quot;lovometre()&amp;quot; qui activera ou désactivera tel ou tel dispositif en fonction du niveau reçu. En réponse à cette lecture, pour confirmer notre réception, nous envoyons le niveau d'excitation actuel de l'utilisateur.&lt;br /&gt;
&lt;br /&gt;
====Test====&lt;br /&gt;
&lt;br /&gt;
A l'aide de [https://play.google.com/store/apps/details?id=Qwerty.BluetoothTerminal&amp;amp;hl=fr| Bluetooth Terminal], nous avons pu effectuer un test sans l'application mobile de notre projet. Ayant fait ces tests avant la partie &amp;quot;gestion des composants&amp;quot;, nous nous sommes juste assurés du bon fonctionnement de la communication en effectuant un echo à chaque réception.&lt;br /&gt;
&lt;br /&gt;
===Module bluetooth utilisé===&lt;br /&gt;
&lt;br /&gt;
Le module bluetooth embarqué sur le PCB est un module reprogrammable. Ainsi il était nécessaire de connaître la configuration par défaut du composant, dans le but de savoir s'il fallait ou non prévoir un pcb de reconfiguration.&lt;br /&gt;
&lt;br /&gt;
Le CYBLE-012012 est configuré par défaut avec le firmware &amp;quot;EZ-Serial BLE Firmware&amp;quot;. La configuration par défaut de ce firmware est la suivante : &lt;br /&gt;
&lt;br /&gt;
* 115200 baud, 8bits de donnée, pas de bit de parité, 1bit de stop&lt;br /&gt;
* &amp;quot;UART flow control&amp;quot; désactivé&lt;br /&gt;
* firmware activé en mode &amp;quot;auto-start&amp;quot;, qui correspond à une recherche automatique de connection bluetooth et de redirection RX-TX en cas de connection&lt;br /&gt;
&lt;br /&gt;
Ces [http://www.cypress.com/file/285326/download| informations] sont importantes car, si elles sont vraiment respectées, nous n'auront pas à créer notre propre kit de développement, ce qui est un gain de temps considérable.&lt;br /&gt;
&lt;br /&gt;
Qui plus est, l'utilisation d'une fonction &amp;quot;auto-start&amp;quot; est en adéquation avec le module bluetooth HC-05 utilisé pour les tests. Nous pouvons donc commencer la programmation mobile du bluetooth en parallèle de l'impression des pcb. Et, dans le cas où les pcb seraient disfonctionnels, nous pourront quand meme envisager un prototype sur breadboard.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Test====&lt;br /&gt;
&lt;br /&gt;
Après avoir alimenté la carte, nous n'avons pas pu nous connecter au module bluetooth, ce dernier n'étant même pas visible dans les appareils alentours. &lt;br /&gt;
&lt;br /&gt;
Nous avons alors vérifié si la carte était correctement alimentée. Pour ce faire, nous avons mesuré différents points de tensions sensé être mis par défaut en PULL-DOWN ou PULL-UP à des niveaux de tensions d'1.7V. Ces niveaux étaient respectés. Le problème n'est donc pas d'ordre électronique. &lt;br /&gt;
&lt;br /&gt;
Par la suite, nous avons voulu vérifier la communication du module. Ce dernier, en déclenchant l'auto start est sensé émettre (en suivant le protocole UART rappelé précédemment) un message START. Nous avons donc inspecté ceci en utilisant minicom. En effet, minicom reçoit un message, mais ne sait pas le déchiffré. Qui plus est, impossible d'envoyer un message au module afin de le reprogrammer (de manière similaire à un XBee).&lt;br /&gt;
&lt;br /&gt;
Devant ces soucis, nous décidons donc d'abandonner ce module bluetooth et de poursuivre avec celui utilisé pour les essais de programmation, le HC-05.&lt;br /&gt;
&lt;br /&gt;
Pour gérer la communication entre le téléphone et un sextoys, il faut utiliser une communication Bluetooth.&lt;br /&gt;
&lt;br /&gt;
Dans un premier temps il faut se connecter avec l'appareil:&lt;br /&gt;
 &lt;br /&gt;
 new ConnectBT().execute();&lt;br /&gt;
&lt;br /&gt;
Avec ConnectBT une classe trouvée sur internet.&lt;br /&gt;
&lt;br /&gt;
Ensuite il faut communiquer :&lt;br /&gt;
&lt;br /&gt;
Pour envoyer un message on utilise: &lt;br /&gt;
&lt;br /&gt;
 btSocket.getOutputStream().write(message);&lt;br /&gt;
&lt;br /&gt;
Avec btSocket un socket Bluetooth ayant été connecté avec le sextoy dans la classe ConnectBT.&lt;br /&gt;
&lt;br /&gt;
Ensuite il faut recevoir :&lt;br /&gt;
&lt;br /&gt;
 btSocket.getInputStream().read(mmBuffer);&lt;br /&gt;
&lt;br /&gt;
Avec mmBuffer qui contient le message reçu.&lt;br /&gt;
&lt;br /&gt;
Mais contrairement à la réception UDP, la réception Bluetooth n'est pas bloquante, ainsi on peut recevoir des messages nuls.&lt;br /&gt;
&lt;br /&gt;
===Protocole de transmission===&lt;br /&gt;
Pour éviter que l'application ne reçoit de message vide, nous avons choisi que le sextoy réponde juste après avoir reçu un paquet.&lt;br /&gt;
&lt;br /&gt;
Ainsi l'application à juste a envoyer un paquet Bluetooth et juste après à chercher à lire le message reçu, pour que tout fonctionne comme prévue&lt;br /&gt;
&lt;br /&gt;
==Conception de l'application Android==&lt;br /&gt;
===Envoie et réception de SMS===&lt;br /&gt;
Afin de ne pas utiliser de serveur, les deux appareils Android doivent synchroniser l'envoi de paquet UDP, pour cela nous avons voulu utiliser des SMS.&lt;br /&gt;
Les SMS permettent d'envoyer des informations, comme les adresses IP, les ports utilisés, l'heure à laquelle les deux téléphones vont envoyer leur premier paquet UDP.&lt;br /&gt;
&lt;br /&gt;
Dans un premier temps nous avons créer une application pour envoyer les SMS:&lt;br /&gt;
&lt;br /&gt;
L'application était très simple, l'envoi de SMS se faisait en deux lignes&lt;br /&gt;
  // initialisation d'une variable sms gérant les sms&lt;br /&gt;
  SmsManager sms = SmsManager.getDefault() ;&lt;br /&gt;
  // envoie un sms comportant le texte de la variable message de type String au numéro contenu dans la variable num de type String&lt;br /&gt;
  sms.sendTextMessage(num, null, message, null, null);&lt;br /&gt;
&lt;br /&gt;
Dans un deuxième temps il fallait recevoir un SMS, ou plutôt savoir qu'un nouvel SMS avait été reçu :&lt;br /&gt;
&lt;br /&gt;
Pour cela il fallait utiliser un thread qui était appelé par interruption avec la réception d'un SMS comme vecteur d’interruption.&lt;br /&gt;
Ce thread effectuait ce qui était demandé dans sa fonction onReceive(), comme par exemple lire les informations contenues dans le SMS:&lt;br /&gt;
  public class IncomingSms extends BroadcastReceiver {&lt;br /&gt;
     final SmsManager sms = SmsManager.getDefault();&lt;br /&gt;
     public void onReceive(Context context, Intent intent) {&lt;br /&gt;
       //Ce qui doit etre fait lors de la reception de SMS&lt;br /&gt;
     }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Malheureusement ce programme ne marchait pas pendant des semaines, malgré de nombreuses modifications et de nombreux essais. Et le problème semblait être ma carte SIM, car en changeant de SIM, tous les programmes contenant ce code fonctionnaient parfaitement.&lt;br /&gt;
&lt;br /&gt;
===Protocole UDP===&lt;br /&gt;
Afin d'effectuer un échange de données entre les deux utilisateurs, et essayer de faire une vidéo-conférence, nous avons choisi d'utiliser le protocole UDP.&lt;br /&gt;
&lt;br /&gt;
Une première application permettait de tester l'envoi de paquet UDP, pour cela un serveur UDP a été utilisé sur un PC.&lt;br /&gt;
Le serveur attendait un message et l'affichait quand il le recevait.&lt;br /&gt;
&lt;br /&gt;
Pour envoyer un paquet nous utilisons :&lt;br /&gt;
&lt;br /&gt;
 DatagramSocket ds = null;&lt;br /&gt;
 ds = new DatagramSocket(PortA);&lt;br /&gt;
 DatagramPacket dp;&lt;br /&gt;
 InetAddress local = InetAddress.getByName(AdrIp);&lt;br /&gt;
 dp = new DatagramPacket(message.getBytes(),message.length(),local,PortA );&lt;br /&gt;
 ds.setBroadcast(true);&lt;br /&gt;
 ds.send(dp);&lt;br /&gt;
&lt;br /&gt;
Ce code crée un paquet qui comporte l’adresse et le port du destinataire, mais surtout les données à envoyer.&lt;br /&gt;
Ce paquet est ensuite envoyer grâce à un socket.&lt;br /&gt;
&lt;br /&gt;
Une fois que tout fonctionnait comme il le fallait, nous avons pu créer une application qui comportait l'envoi et la réception de paquet.&lt;br /&gt;
En mettant l'application sur deux téléphones on pouvait tester si tout fonctionnait.&lt;br /&gt;
Les tests ont seulement été effectué sur un réseau local, on ne sait pas pour le moment si des box internet pourraient empêcher la transmission.&lt;br /&gt;
Pour la réception nous utilisons :&lt;br /&gt;
 dsocket.receive(packet);&lt;br /&gt;
 buff = packet.getData();&lt;br /&gt;
&lt;br /&gt;
Pour récupérer les données du paquet dans la variable buff, il suffit ensuite de créer une boucle pour recevoir plusieurs messages.&lt;br /&gt;
La fonction de réception étant bloquante, il a été préférable de l'effectuer dans un thread.&lt;br /&gt;
&lt;br /&gt;
L'application est donc composé de un thread d'écoute, un thread d'envoi et d'un thread principal gérant l'affichage et appelant le thread d'envoi lorsque que le bouton de l'application est appuyé.&lt;br /&gt;
Voici une image de l'application, les champs d’adresseIp et de port du destinataire sont à remplir avant d'envoyer un paquet UDP.&lt;br /&gt;
Et le port d'écoute est défini dans le code de cette application, ce qui n'est pas très pratique, mais suffisant pour les tests.&lt;br /&gt;
&lt;br /&gt;
Le TextView est mis à jour à chaque que le bouton envoyer est appuyé, en prenant comme valeur celle d'un registre comprenant la valeurs du dernier paquet UDP reçu.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:ClientUdp.png]]&lt;br /&gt;
&lt;br /&gt;
===Application principale===&lt;br /&gt;
Afin d'être ergonomique,l'application doit pouvoir enregistrer des contacts, pour plus facilement communiquer avec eux.&lt;br /&gt;
Nous avons choisi de ne pas utiliser les contacts du téléphone, pour pouvoir avoir des contacts &amp;quot;confidentiels&amp;quot; qui ne seront que dans la base de donnée de l'application.&lt;br /&gt;
&lt;br /&gt;
Il fallait donc créer une base de donnée, nous avons donc utilisé SQLite car cette bibliothèque est utilisée par Android comme base de données embarquée.&lt;br /&gt;
La base ne comporte qu'une seule table, avec seulement les pseudos et les numéros de téléphone.&lt;br /&gt;
&lt;br /&gt;
Une fois la base crée, pour interagir avec, nous avons coder des activités:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
- Ajout de contact:&lt;br /&gt;
&lt;br /&gt;
Il faut entrer dans les champs de textes les informations pour la base de données,puis appuyer sur le bouton &amp;quot;Ajouter&amp;quot; pour créer un nouveau contact dans la base de donnée.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:AjoutContact.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-Fiche de Contact: &lt;br /&gt;
&lt;br /&gt;
Affiche le pseudo et le numéro de téléphone dans les &amp;quot;TextView&amp;quot;, et permet de : supprimer le contact en cliquant sur la croix, envoyer un SMS en cliquant sur l'icone &amp;quot;Message&amp;quot;, mais aussi commencer une communication UDP en cliquant sur le téléphone.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:FicheContact.png]]  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-Liste de contact :&lt;br /&gt;
&lt;br /&gt;
Affiche la liste de contacts, en cliquant sur un des contacts on arrive sur la page Fiche de Contact, et en cliquant sur le plus on arrive sur la page Ajout de Contact.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:ListView.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ensuite il faut ajouter la gestion de communication:&lt;br /&gt;
&lt;br /&gt;
-Les SMS :&lt;br /&gt;
&lt;br /&gt;
Il faut remplir les champs de texte et appuyer sur SMS pour envoyer un message du type&lt;br /&gt;
&lt;br /&gt;
Message&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Address Ip :&amp;quot; Addresse Ip&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Port :&amp;quot; Port&lt;br /&gt;
&lt;br /&gt;
Avec Message,Addresse Ip, et Port les champs à remplir, &amp;quot;Addresse Ip :&amp;quot; et &amp;quot;Port :&amp;quot; deux chaines de caractères.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:SMS.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-Protocole UDP : &lt;br /&gt;
&lt;br /&gt;
Quatre champs sont à remplir, cliquer sur Envoyer pour passez à l'activité de gestion Bluetooth.&lt;br /&gt;
&lt;br /&gt;
Les champs sont:&lt;br /&gt;
&lt;br /&gt;
-L'addresse Ip&lt;br /&gt;
&lt;br /&gt;
-Le port destination&lt;br /&gt;
&lt;br /&gt;
-Le port source&lt;br /&gt;
&lt;br /&gt;
-L'heure qui n'est pas utilisée, qui devait servir pour la synchronisation.&lt;br /&gt;
&lt;br /&gt;
Les valeurs des champs sont conservés pour la communication UDP à venir.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:UDP.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-Gestion Bluetooth :&lt;br /&gt;
&lt;br /&gt;
En cliquant sur &amp;quot;Paired Devices&amp;quot;, l'application affichera la liste des appareils appairés.&lt;br /&gt;
&lt;br /&gt;
Puis en cliquant un des appareils, l'application essayera de connecter avec, tout en lançant l'activité UDP avec Bluetooth.&lt;br /&gt;
&lt;br /&gt;
Si l'on souhaite ne pas utiliser de périphérique Bluetooth, il suffit de cliquer sur le bouton moins en haut à droite.&lt;br /&gt;
&lt;br /&gt;
L'activité UDP sans Bluetooth se lancera.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Bluetooth.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-Communication UDP avec Bluetooth:&lt;br /&gt;
&lt;br /&gt;
Pour lancer la communication UDP, appuyer sur le bouton Off ,il passera en mode On.&lt;br /&gt;
&lt;br /&gt;
Si vous cliquez sur le bouton On il passera en mode Off, et coupera la communication UDP.&lt;br /&gt;
&lt;br /&gt;
Le bouton envoyer, permet de forcer l'envoi d'un paquet UDP.&lt;br /&gt;
&lt;br /&gt;
Et le bouton croix coupe toutes les communications(UDP et Bluetooth), et retourne à la page précédente.&lt;br /&gt;
&lt;br /&gt;
Lorsque l'application reçoit un paquet UDP, un message est envoyé via Bluetooth au sextoys.&lt;br /&gt;
&lt;br /&gt;
Celui-ci répond automatiquement en envoyant une valeur moyennée des ses capteurs, cette valeur est récupérée et mise dans un registre.&lt;br /&gt;
&lt;br /&gt;
En parallèle, toutes les secondes un paquet UDP est envoyé et les données envoyés sont celle du registre.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Com.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-Communication UDP sans Bluetooth.&lt;br /&gt;
&lt;br /&gt;
Le bouton On/Off est utilisé comme dans l'activité &amp;quot;Communication UDP avec Bluetooth&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Les boutons de niveaux, mettent une valeur dans un même registre.&lt;br /&gt;
&lt;br /&gt;
Chaque boutons correspond à une valeur, qui correspondent avec un niveau d'excitation du sextoys.&lt;br /&gt;
&lt;br /&gt;
Ainsi toutes les secondes, un paquet UDP est envoyé avec comme donnée la valeur du registre.&lt;br /&gt;
&lt;br /&gt;
Lorsqu'un paquet UDP est reçu, la donnée reçue est mise dans un registre qui détermine l’affichage du &amp;quot;TextView&amp;quot; en bas à droite.&lt;br /&gt;
&lt;br /&gt;
Ce TextView est mis à jours en même temps qu'un paquet UDP est envoyé.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Co2.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Streaming vidéo===&lt;br /&gt;
&lt;br /&gt;
Nous nous sommes attardés sur le streaming vidéo avant d'avoir fait l'application principale et le gestion du Bluetooth. &lt;br /&gt;
Nous avions trouvé un code sur Github, qui permettait de streamer la vidéo du téléphone sur un pc.&lt;br /&gt;
Il aurait fallut adapter ce code pour streamer entre deux téléphones.&lt;br /&gt;
Mais la recherche du code avait pris trop de temps, et il restait encore trop de chose importante à faire avant de pouvoir continuer cette partie.&lt;br /&gt;
C'est pourquoi il n'y a pas de Streaming vidéo dans l'application finale.&lt;br /&gt;
&lt;br /&gt;
===Conclusion===&lt;br /&gt;
Il reste beaucoup de travail, on ne sait pas si l'application fonctionne avec les boxs, il faudrait améliorer l'ergonomie pour l'utilisateur( par exemple l'application pourrait récupérer elle-même l'addresse Ip pour l'envoyer par SMS), et le streaming vidéo aurait été vraiment intéressant.&lt;br /&gt;
&lt;br /&gt;
Mais l'application arrive tout de même à communiquer avec les sextoys, mais aussi avec un deuxième téléphone en même temps.&lt;br /&gt;
La connexion avec un sextoy est simple, on peut simuler les relevés des capteurs si on désire ne pas utiliser de sextoys, on peut facilement agencer sa liste de contact et interagir avec.&lt;br /&gt;
Ce qui est déjà une très bonne base.&lt;br /&gt;
&lt;br /&gt;
== Rapport et codes ==&lt;br /&gt;
&lt;br /&gt;
Rapport : [[Fichier:CR_sextoy_connecte.pdf]]&lt;br /&gt;
&lt;br /&gt;
[https://archives.plil.fr/croussel/Projet_sextoy_connecte.git Codes]&lt;/div&gt;</summary>
		<author><name>Tstieven</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=IMA4_2016/2017_P14&amp;diff=42887</id>
		<title>IMA4 2016/2017 P14</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=IMA4_2016/2017_P14&amp;diff=42887"/>
				<updated>2017-05-20T16:39:25Z</updated>
		
		<summary type="html">&lt;p&gt;Tstieven : /* Protocole de transmission */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Projet IMA4 : Sex-toy connecté =&lt;br /&gt;
&lt;br /&gt;
== Présentation du projet ==&lt;br /&gt;
&lt;br /&gt;
L'objectif de ce projet est de développer un système d'échange entre deux partenaires distants afin de rendre plus facile la vie de couple à distance.&lt;br /&gt;
&lt;br /&gt;
Pour ce faire, le dispositif sera constitué de deux sextoys connectés (un par appareil génital désiré) à leur téléphone portable respectif. Une application mobile permettra aux utilisateurs de s'échanger des données de manière sécurisé, ceci au travers d'un serveur embarqué dans le téléphone portable.&lt;br /&gt;
&lt;br /&gt;
Les données échangées pourront être l'accélération ou la température. Elles seront traitées et transmises au sextoy qui adaptera sa vitesse, son retour vibratoire ou sa position en conséquence.&lt;br /&gt;
&lt;br /&gt;
Les sextoys pourraient être composés de :&lt;br /&gt;
* Pour l'appareil masculin (dédié à la femme) :&lt;br /&gt;
:* un servomoteur ;&lt;br /&gt;
:* un vibreur ;&lt;br /&gt;
:* une sonde de température ;&lt;br /&gt;
:* un accéléromètre.&lt;br /&gt;
* Pour l'appareil féminin (dédié à l'homme) :&lt;br /&gt;
:* 4 servomoteurs (dans le but de &amp;quot;masser&amp;quot; en déplaçant le silicone);&lt;br /&gt;
:* des vibreurs ;&lt;br /&gt;
:* un accéléromètre.&lt;br /&gt;
* Pour les deux appareils :&lt;br /&gt;
:* un micro-contrôleur (Arduino mini) ;&lt;br /&gt;
:* un module de transmission / réception bluetooth afin de se connecter au téléphone ;&lt;br /&gt;
:* du silicone.&lt;br /&gt;
	&lt;br /&gt;
* L'application mobile devra :&lt;br /&gt;
:* mettre en place une communication cryptée à travers un serveur (embarqué ou bien intermédiaire ?) ;&lt;br /&gt;
:* effectuer un échange de données en bluetooth avec le sextoy connecté.&lt;br /&gt;
&lt;br /&gt;
* L'application mobile pourra :&lt;br /&gt;
:* utiliser la vidéo-conférence ;&lt;br /&gt;
:* enregistrer les meilleurs moments et enventuellement pouvoir les partager ;&lt;br /&gt;
:* effectuer une recherche de partenaire aléatoire.&lt;br /&gt;
&lt;br /&gt;
* S'il nous reste du temps, il peut être envisageable de :&lt;br /&gt;
:* mettre en place un réseau social interne à Polytech.&lt;br /&gt;
&lt;br /&gt;
== Liste des tâches ==&lt;br /&gt;
* Conception de l'appareil masculin (Cédric)&lt;br /&gt;
:* mettre en place le bus I2C avec les différents capteurs ;&lt;br /&gt;
:* création d'un PCB au format gerber ;&lt;br /&gt;
:* création d'un prototype.&lt;br /&gt;
&lt;br /&gt;
* Conception de l'appareil féminin (Cédric)&lt;br /&gt;
:* mettre en place le bus I2C ;&lt;br /&gt;
:* traitement des données afin d'en déduire la position et l'entrain de l'utilisateur ;&lt;br /&gt;
:* création d'un PCB ;&lt;br /&gt;
:* création d'un prototype.&lt;br /&gt;
&lt;br /&gt;
* Communication bluetooth (Cédric et Thomas)&lt;br /&gt;
:* étudier l'émission/réception vue de l'arduino ;&lt;br /&gt;
:* étudier l'émission/réception vue du téléphone ;&lt;br /&gt;
:* mise en place du protocole ;&lt;br /&gt;
:* test de portée.&lt;br /&gt;
&lt;br /&gt;
* Développement mobile (Thomas)&lt;br /&gt;
:* déterminer la meilleure approche : utilisation d'un serveur intermédiaire ou bien mise en place d'un &amp;quot;client-serveur&amp;quot; dans l'application mobile ;&lt;br /&gt;
:* mettre en place le choix retenu ;&lt;br /&gt;
:* tester dans un premier temps une transmission de texte ;&lt;br /&gt;
:* programmer le traitement de données reçues par bluetooth ;&lt;br /&gt;
:* rajouter un côté esthétique à l'application.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Recapitulatif sextoy.png|center|recap]]&lt;br /&gt;
&lt;br /&gt;
==Feuille d'heures==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Tâche !! Prélude !! Heures S1 !! Heures S2 !! Heures S3 !! Heures S4 !! Heures vacances !! Heures S5 !! Heures S6 !! Heures S7 !! Heures S8 !! Heures S9 !! Heures S10 !! Heures vacances et après!! Total&lt;br /&gt;
|-&lt;br /&gt;
| Définition cahier des charges &lt;br /&gt;
| 2H&lt;br /&gt;
| 2H&lt;br /&gt;
| 1H&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 5H&lt;br /&gt;
|-&lt;br /&gt;
| Dimensionnement et établissement de la liste de matériel&lt;br /&gt;
| &lt;br /&gt;
| 3H&lt;br /&gt;
| 4H&lt;br /&gt;
|&lt;br /&gt;
| 4H&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 11H&lt;br /&gt;
|-&lt;br /&gt;
| Établissement de la liste et de la répartition des tâches&lt;br /&gt;
| 1H&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 1H&lt;br /&gt;
|-&lt;br /&gt;
| Appareil masculin : programmation&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 1H&lt;br /&gt;
| 2H&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| 14H&lt;br /&gt;
| 17H &lt;br /&gt;
|-&lt;br /&gt;
| Appareil masculin &amp;amp; féminin : étude des datasheets&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 1H&lt;br /&gt;
| 1H&lt;br /&gt;
|&lt;br /&gt;
| 4H&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| 1H&lt;br /&gt;
|&lt;br /&gt;
| 7H&lt;br /&gt;
|-&lt;br /&gt;
| Appareil masculin : PCB&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 4H&lt;br /&gt;
| 4H&lt;br /&gt;
| 6H&lt;br /&gt;
| 30H&lt;br /&gt;
| 44H&lt;br /&gt;
|-&lt;br /&gt;
| Appareil masculin : 3D&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| 6H&lt;br /&gt;
| 6H&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
| Appareil féminin : programmation&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 24H&lt;br /&gt;
| 24H&lt;br /&gt;
|-&lt;br /&gt;
| Appareil féminin : PCB&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| 2H&lt;br /&gt;
| 1H&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 4H&lt;br /&gt;
| 7H&lt;br /&gt;
|-&lt;br /&gt;
| Appareil féminin : 3D&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 0H&lt;br /&gt;
|-&lt;br /&gt;
| Liaison bluetooth (embarqué)&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 3H&lt;br /&gt;
| 1H&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 8H&lt;br /&gt;
| 12H&lt;br /&gt;
|-&lt;br /&gt;
| Liaison bluetooth (téléphone)&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 15H&lt;br /&gt;
| 15H&lt;br /&gt;
|-&lt;br /&gt;
| Recherche et discussion autour de la meilleure approche de communication&lt;br /&gt;
| 2H&lt;br /&gt;
| 2H&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 4H&lt;br /&gt;
|-&lt;br /&gt;
| Synchronisation temporelle des téléphones (par sms)&lt;br /&gt;
| &lt;br /&gt;
| 2H&lt;br /&gt;
| 4H&lt;br /&gt;
| 6H&lt;br /&gt;
| 8H&lt;br /&gt;
| 6H&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 26H&lt;br /&gt;
|-&lt;br /&gt;
| Transmission de paquets UDP&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 4H&lt;br /&gt;
| 4H&lt;br /&gt;
| 4H&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 6H&lt;br /&gt;
| 18H&lt;br /&gt;
|-&lt;br /&gt;
| Streaming video(UDP)&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 4H&lt;br /&gt;
| 4H&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 8H&lt;br /&gt;
|-&lt;br /&gt;
| Application et bases de données&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 6H&lt;br /&gt;
| 20H&lt;br /&gt;
| 26H&lt;br /&gt;
|-&lt;br /&gt;
| Total&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 231H&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Conception des sextoys==&lt;br /&gt;
===Introduction===&lt;br /&gt;
&lt;br /&gt;
La conception de sextoys doit respecter différents règles, notamment sanitaires. C'est pourquoi nous nous sommes intéressés à l'utilisation de silicone pour ce projet. Nous avons notamment rencontré un ingénieur compétant dans ce domaine afin de nous aiguiller sur cette éventuelle conception.&lt;br /&gt;
&lt;br /&gt;
La conception passera également par une conception 3D que nous effectuerons à l'aide d'imprimantes 3D au fabricarium de Polytech Lille.&lt;br /&gt;
&lt;br /&gt;
Enfin, les prototypes seront embarqués de cartes électroniques (aussi appelés PCB) que nous constituerons.&lt;br /&gt;
&lt;br /&gt;
===Choix du silicone, rencontre avec Mario Sanz===&lt;br /&gt;
&lt;br /&gt;
Le projet nécessite l'utilisation d'une matière souple et non irritante, c'est pourquoi nous avons choisi de nous tourner vers l'utilisation du silicone. Afin de choisir au mieux le produit correspondant à nos besoins, nous avons rencontré Mario Sanz, ingénieur à l'INRIA, qui travail régulièrement avec du silicone.&lt;br /&gt;
&lt;br /&gt;
Ce dernier nous a expliqué les différents points importants sur lesquels nous baser afin de choisir au mieux un produit en accord avec le projet. Ne serait-ce que pour le choix de la dureté, il existe une échelle propre au silicone (&amp;quot;Shore hardness scale&amp;quot;), nous pensions au départ rechercher un silicone le plus mou possible, cependant, il faut savoir que le plus le silicone est mou, plus il a tendance à être &amp;quot;collant&amp;quot;. Finalement, après discutions, un shore de 40A (correspondant à la dureté d'une gomme) suffisamment mince fera l'affaire pour la conception des prototypes.&lt;br /&gt;
&lt;br /&gt;
Il nous a également expliqué que le silicone peut être travaillé à l'aide d'additifs et sous cloche à vide afin d'améliorer le moulage, l'absence de &amp;quot;bulles&amp;quot; sur la surface de la pièce et la souplesse. Nous pouvons cependant travailler sans tout cela car il n'est pas spécialement important, pour notre projet, de rechercher des propriétés physiques homogènes dans tout le sextoy.&lt;br /&gt;
&lt;br /&gt;
Pour ce qui est de la création de moules, nous pourrons les effectuer via imprimante 3D. Il existe un bon nombre de tutoriels sur internet pour s'y référer en cas de soucis.&lt;br /&gt;
&lt;br /&gt;
===Impression 3D===&lt;br /&gt;
&lt;br /&gt;
Pour la création d'objets en 3D, de nombreux outils sont disponibles. Nous avons décidé d'utiliser Tinkercad, un outil qui s'intègre directement au navigateur internet utilisé. &lt;br /&gt;
&lt;br /&gt;
L'avantage d'un tel outil est sa grande communauté qui permet un accès simple et rapide à une multitudes de projets dont on pourrait s'inspirer pour générer nos pièces.&lt;br /&gt;
&lt;br /&gt;
====Création des moules====&lt;br /&gt;
&lt;br /&gt;
A l'aide d'une imprimante 3D, nous pouvons concevoir des moules afin de créer des pièces en silicone. Il s'agit de la manière la plus rapide et accessible pour notre projet.&lt;br /&gt;
&lt;br /&gt;
Cette méthode comporte des désavantages, dont le principal est la présence d'imperfection et de non homogénéité dans les pièces réalisées. Ceci n'a pas de grande importance dans la mesure où nous souhaitons du qualitatif.&lt;br /&gt;
&lt;br /&gt;
====Création d'un prototype====&lt;br /&gt;
&lt;br /&gt;
=====Pénis=====&lt;br /&gt;
&lt;br /&gt;
Afin de visualiser qualitativement la forme et le passage des câbles, un prototype imprimé au Fabricarium de Polytech Lille a été réalisé. &lt;br /&gt;
&lt;br /&gt;
Ce prototype se divise en 3 pièces : un boîtier (pour y loger le PCB), un cylindre (afin de reproduire la forme désirée) et un &amp;quot;tête&amp;quot; qui devait à l'origine être un moule en silicone (pour y loger le PCB du capteur de température).&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Sextoy_penis.png|400px|thumb|center|Prototype 3D pénis]]&lt;br /&gt;
&lt;br /&gt;
===Conception des PCB===&lt;br /&gt;
&lt;br /&gt;
Afin de diminuer un maximum la taille des cartes electroniques, nous utilisons principalement des composants CMS. &lt;br /&gt;
&lt;br /&gt;
La conception des cartes peut-être effectué à l'aide de logicels de CAO tels qu'Altium ou Eagle. Dans notre cas, nous avons utilisé Eagle. &lt;br /&gt;
&lt;br /&gt;
Ce travail consiste à créer une librairie regroupant l'intégralité des composants nécessaires et, ensuite, de  créer un schéma du circuit. Une fois le schéma terminé, il ne restera plus qu'à faire le routage et exporter les fichiers au format &amp;quot;Gerber&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Pour ce projet, nous aurons besoin de deux cartes, une par prototype. Chaque carte embarquera des composants similaires, c'est pourquoi nous nous contenterons d'abord d'un seul PCB pour effectuer des tests. Si ces derniers sont concluants, nous pourrons graver le second.&lt;br /&gt;
&lt;br /&gt;
====PCB du pénis====&lt;br /&gt;
&lt;br /&gt;
Le premier PCB imprimé et soudé est celui du pénis. Une première carte avait été imprimé regroupant sur cette dernière : un support pour l'arduino, un accéléromètre, un module bluetooth. &lt;br /&gt;
&lt;br /&gt;
[[Fichier:PCB_penis_VB.png|400px|thumb|center|PCB v1.0]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous avons expérimentés des problèmes dûs aux dimensions de l'accéléromètre, l'utilisation d'un boîtier CMS de type TDFN10 2x2 était optimiste pour la réalisation du projet, compte tenu du matériel à disposition.&lt;br /&gt;
&lt;br /&gt;
C'est pourquoi une seconde carte a été gravée, cette fois sans l'accéléromètre.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:PCB_penis_VF.png|400px|thumb|center|PCB v2.0]]&lt;br /&gt;
&lt;br /&gt;
[[Fichier:PCB_VF.png|400px|thumb|center|PCB v2.0 schema]]&lt;br /&gt;
&lt;br /&gt;
Ce prototype est sensé embarquer un capteur de température que nous avons décidé de mettre sur un PCB à part. Cette carte avait pour but d'être coulé dans le silicone, afin de mesurer la température au plus près de la zone intéressée.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:TEMPERATURE_PCB_VF.png|400px|thumb|center|PCB temperature]]&lt;br /&gt;
&lt;br /&gt;
[[Fichier:TEMPERATURE_VF.png|400px|thumb|center|PCB temperature schema]]&lt;br /&gt;
&lt;br /&gt;
====PCB du vagin====&lt;br /&gt;
&lt;br /&gt;
Compte tenu des soucis rencontrés avec l'accéléromètre, la carte sera gravée afin de pouvoir y plugger un accéléromètre analogique en traversant. Le but étant d'avoir un prototype fonctionnel d'ici la fin du projet.&lt;br /&gt;
&lt;br /&gt;
Nous avons également eu des problèmes avec le module bluetooth utilisé, ce dernier ne pouvant être reconfiguré manuellement par minicom, nous utiliserons le bluetooth HC-05 utilisé pour les essais de code. De même que pour l'accéléromètre, nous prévoirons un endroit pour le plugger sur la carte.&lt;br /&gt;
&lt;br /&gt;
''image PCB vagin''&lt;br /&gt;
&lt;br /&gt;
''Reste à graver le PCB du vagin''&lt;br /&gt;
&lt;br /&gt;
==Gestion des composants==&lt;br /&gt;
===Introduction===&lt;br /&gt;
&lt;br /&gt;
Notre projet implique l'utilisation de capteurs, de servomoteurs et de buzzers, constituant chacun une partie de la programmation embarquée.&lt;br /&gt;
&lt;br /&gt;
Pour cette programmation, nous avons décidé d'utiliser AVR-gcc et ainsi coder les arduinos en C.&lt;br /&gt;
&lt;br /&gt;
Les capteurs utilisés utilisent un protocole de communication IIC (ou I²C, I2C), ce protocole de multiples avantages que nous expliciterons par la suite. Cependant, comme un des capteurs (l'accéléromètre) prévus initialement nous a causé beaucoup de soucis, nous expliciterons également la mesure à l'aide de capteurs analogiques. Ces différents capteurs nous permettront de mesurer l'excitation d'un utilisateur.&lt;br /&gt;
&lt;br /&gt;
Une fois l'excitation mesurée, il faut induire une réponse &amp;quot;physique&amp;quot;. Pour ce faire, nous utilisons d'une part des servomoteurs dans le but de produire une sensation de massage.&lt;br /&gt;
&lt;br /&gt;
D'autre part, nous utilisons également des buzzers.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'' Veuillez noter que le code ne sera pas détaillé dans le wiki, vous pouvez vous référer au dépôt git contenant les différents codes. ''&lt;br /&gt;
&lt;br /&gt;
===Utilisation des capteurs===&lt;br /&gt;
&lt;br /&gt;
====Capteurs par IIC====&lt;br /&gt;
&lt;br /&gt;
Le choix de l'IIC n'était pas anodin. L'IIC permet, pour un bus de seulement deux fils (SDA et SCL), d'utiliser un nombre important de capteurs. Ainsi, si nous décidions au cours du projet de rajouter tel ou tel capteurs, nous n'avions qu'à les greffer à ce bus IIC.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Iic.jpg|400px|center|Schema iic]]&lt;br /&gt;
&lt;br /&gt;
Tout d’abord, nous devons initialiser le bus IIC de l’arduino. Pour ce faire, il suffit de préciser la fréquence désirée, ici 400KHz, dans les registres TWSR (prescaler) et TWBR. (fréquence désirée suivant la fonction TWBR = (Fcpu - 16 Fscl ) / (2 Fscl Prescaler) ) avant de lancer l'utilisation IIC via le bit TWIE.&lt;br /&gt;
&lt;br /&gt;
Comme il peut y avoir potentiellement plusieurs capteurs sur ce bus, il faut respecter un certain protocole afin de récupérer la valeur du capteur de température. Attardons nous sur la lecture d’une valeur sur le capteur de température. Il faut : &lt;br /&gt;
&lt;br /&gt;
* Lancer un message de start&lt;br /&gt;
* Envoyer l’adresse du capteur de température (0x98 dans notre cas)&lt;br /&gt;
* Envoyer l’adresse du registre qui nous intéresse (0x00 pour celui contenant la température), ceci placera le pointeur de registre du capteur sur cette adresse&lt;br /&gt;
* Restart la communication pour laisser la main au capteur&lt;br /&gt;
* Envoyer l’adresse du capteur en ajoutant 1 (Ceci permet de stipuler que nous désirons lire la valeur pointée)&lt;br /&gt;
* Lire la partie haute de la température&lt;br /&gt;
* Lire la partie basse de la température&lt;br /&gt;
* Envoyer un message de stop&lt;br /&gt;
&lt;br /&gt;
Chaque action correspond à l'utilisation d'une fonction de la librairie IIC codée. (cf déport git) Et après chaque action, nous devons vérifier le status du bus dans le registre TWSR. Ce &amp;quot;status&amp;quot; nous donnera des indications sur le bon déroulement de la communication, à savoir la réception d'ACK (équivalent d'accusé de réception) ou confirmation d'envoie de start, restart, etc.&lt;br /&gt;
&lt;br /&gt;
=====Test=====&lt;br /&gt;
&lt;br /&gt;
Le test de la librairie iic s'est fait directement lorsque la carte du capteur de température a été soudée. Pour ce faire, nous utilisons une compilation en mode &amp;quot;DEBUG&amp;quot; (make debug upload) qui nous permettait de lire la valeur des &amp;quot;status&amp;quot; avec minicom. &lt;br /&gt;
Après différents tests, nous avons finalement réussi à faire fonctionner le capteur de température en IIC, ce dernier nous renvoyait bel et bien une valeur de température précise à 0.5degrés près, vérifié à l'aidé d'un autre capteur de température.&lt;br /&gt;
&lt;br /&gt;
Il est néanmoins regrettable que ce capteur ne sera pas utilisable dans les prototypes finaux dans la mesure où il est greffé à une carte dont le module bluetooth n'est pas utilisable.&lt;br /&gt;
&lt;br /&gt;
====Capteurs analogique====&lt;br /&gt;
&lt;br /&gt;
Comme dit précédemment, nous avons abandonné l'utilisation de l’accéléromètre IIC prévu initialement dans le vagin car nous n'avons pas réussi à le souder sur les cartes du pénis. Nous avons donc utilisé ce qui était à notre disposition à savoir un capteur analogique.&lt;br /&gt;
&lt;br /&gt;
La mesure analogique sous AVR se fait simplement via l'utilisation de la fonction ad_sample(numéro de la broche analogique lue). Elle renvoie directement une valeur entre 0 et 255 correspondant à une conversion analogique-numérique de la tension sur la broche lue du capteur.&lt;br /&gt;
&lt;br /&gt;
=====Test=====&lt;br /&gt;
&lt;br /&gt;
Nous avions déjà utilisé ce genre de fonctionnalité dans le projet de système et réseau, donc comme attendu, les tests étaient réussis.&lt;br /&gt;
&lt;br /&gt;
===Contrôle des servomoteurs===&lt;br /&gt;
&lt;br /&gt;
Un servomoteur se contrôle à l'aide d'un signal PWM (Pulse Width Modulation). Ce signal consiste à modifier la largeur de l'impulsion en fonction de la consigne désirée. &lt;br /&gt;
&lt;br /&gt;
La génération de PWM via microcontrôleur se fait à l'aide de TIMERS. Il faut savoir qu'il existe une priorité dans les interruptions, pour un TIMER_X donné, plus le X est proche de 0, plus l'interruption sera prioritaire. Nos signaux PWM se doivent d'être le plus en accord avec nos consignes, c'est pourquoi nous avons choisi d'utiliser les TIMER les plus prioritaires pour les générer. (TIMER0 et TIMER1)&lt;br /&gt;
&lt;br /&gt;
====PWM sur un seul servomoteur====&lt;br /&gt;
&lt;br /&gt;
Notre première manière de procéder consistait à générer la PWM nous même à l'aide du vecteur d'interruption d'un TIMER. La méthode consistait à compter de 0 à 255 en permanence. Lorsque le compteur était inférieur à la consigne, on passait une sortie à l'état haut, sinon elle restait à l'état bas. &lt;br /&gt;
&lt;br /&gt;
Cette méthode simulait plutôt bien le signal PWM et avait pour avantage d'être utilisable pour n'importe quelle de l'arduino. Cependant, cette méthode a le gros désavantage d'être sensible à l'utilisation d'autres interruptions, rendant le TIMER imprécis.&lt;br /&gt;
&lt;br /&gt;
Or, notre projet utilisera d'autres procédures d'interruption. Nous avons donc décidé d'utiliser une méthode plus simple mais nous restreignant sur le choix de nos sorties.&lt;br /&gt;
&lt;br /&gt;
En effet, un atmega possède des registres que l'on peut configurer pour générer des signaux PWM sur des broches spécifiques.&lt;br /&gt;
&lt;br /&gt;
Ainsi, en configurant le registre TCCR0A à 0x81 et TCCR0B à 0x05, on se place en mode PWM non inversée à fréquence élevée. En résumé, cette configuration nous permet de faire varier les signaux PWM en introduisant une consigne dans le registre OCR0A.&lt;br /&gt;
&lt;br /&gt;
Ainsi, nous pouvons donc contrôler le moteur simplement en changeant la consigne dans OCR0A.&lt;br /&gt;
&lt;br /&gt;
====Tests====&lt;br /&gt;
&lt;br /&gt;
Dans un premier lieu, les moteurs servomoteurs ne recevaient pas les consignes. Nous pensions que le fait que la PWM soit en 3V3 était l'origine du problème. Nous avons donc fait le montage à l'aide d'un transistor NPN monté en saturé. Le problème n'a pas été résolu. &lt;br /&gt;
&lt;br /&gt;
Finalement, le soucis viendrait du fait que les tests étaient effectués avec des valeurs du registre OCR0A à 0 (pwm nulle). Nous n'aurons donc pas besoin d'un montage à transistor pour le PCB.&lt;br /&gt;
&lt;br /&gt;
Le but des servomoteurs est d'effectuer un semblant de massage, nous allons donc modifier le code afin d'effectuer la tâche de manière périodique via l'utilisation d'un TIMER.&lt;br /&gt;
&lt;br /&gt;
====Gestion d'un ensemble de servomoteurs====&lt;br /&gt;
&lt;br /&gt;
Dans le vagin, nous utilisons 4 servomoteurs afin de masser l'utilisateur. Nous avons trouvé intéressant de diviser ces moteurs en deux couples afin d'intensifier ou non ce massage en fonction des seuils d'excitation détectés par les capteurs.&lt;br /&gt;
&lt;br /&gt;
Pour ce faire, nous aurons besoin de deux signaux PWM différents, donc de l'utilisation de deux timers configurés en PWM. &lt;br /&gt;
&lt;br /&gt;
Comme dit en introduction de cette section, nous nous imposons l'utilisation du TIMER1 pour cette deuxième PWM. Il existe une différence dans la configuration de cette dernière dans la mesure où le signal peut recevoir des consignes allant de 8 à 16bits en fonction de la configuration. Afin de simplifier les choses, nous avons configuré cette dernière sur 8bits pour lui envoyer les mêmes consignes que pour le TIMER0.&lt;br /&gt;
&lt;br /&gt;
====Tests====&lt;br /&gt;
&lt;br /&gt;
Avant tout, nous devions vérifier que la consigne avait une intensité suffisante pour être envoyée sur deux servomoteurs en même temps. Ce qui était le cas.&lt;br /&gt;
&lt;br /&gt;
Ensuite, nous avons testés des changements de consignes plus ou moins rapides afin de déterminer ce qui répondrait le mieux à nos attentes.&lt;br /&gt;
&lt;br /&gt;
Les tests concluants, nous pouvions passer à la suite.&lt;br /&gt;
&lt;br /&gt;
===Utilisation des buzzers===&lt;br /&gt;
&lt;br /&gt;
En fonction du niveau d'excitation, nous ferons vibrer un ou deux buzzers. Pour ce faire, nous avons fait le choix de souder leur broche GND au GND de nos cartes et ainsi souder leur potentiel VCC à une broche de l'arduino. Ainsi, si nous plaçons la broche à l'état bas, le tension dans le buzzer est nulle et si nous passons la broche à l'état haut, la tension aux bornes du buzzers devient 3.3V et il vibre.&lt;br /&gt;
&lt;br /&gt;
Pour ce faire, nous utilisons simplement deux broches, ici PXX et PXX, que nous avons initialisés en tant que sorties en mettant à un leur bit correspondant dans le registre DDRX. Ainsi, il ne reste plus qu'à commander la valeur haute ou basse de ces broches en mettant à 1 ou 0 leur bit dans le registre PORTX.&lt;br /&gt;
&lt;br /&gt;
====Tests====&lt;br /&gt;
&lt;br /&gt;
Ceci a été testé sur breadboard et était fonctionnel. Cependant, une chose à quoi nous n'avions pas pensé était que lorsque nous les avons soudés sur le PCB, nous aurions dû utiliser des câbles plus épais, car comme nous n'avions pas de prototype sur quoi coller les buzzers, l'un des buzzers s'est arraché de la carte en vibrant.&lt;br /&gt;
&lt;br /&gt;
===TIMER2===&lt;br /&gt;
&lt;br /&gt;
Maintenant que nous avons chaque partie pouvant fonctionner indépendamment, nous avons choisi d'utiliser le dernier TIMER à disposition afin de rendre l'intégralité du programme basé sur les interruptions et ainsi s'assurer que les priorités désirées soient respectées.&lt;br /&gt;
&lt;br /&gt;
Ce TIMER nous servira donc à :&lt;br /&gt;
&lt;br /&gt;
* Effectuer des mesures régulières des capteurs&lt;br /&gt;
* Changer les consignes PWM quand il le faut&lt;br /&gt;
&lt;br /&gt;
Nous avons fait en sorte que ce TIMER provoque une interruption le plus lentement possible (à savoir toutes les 32ms environ), afin de ne pas surcharger le contrôleur inutilement. En effet, la mesure des capteurs n'a pas besoin d'être faite de manière intensive.&lt;br /&gt;
&lt;br /&gt;
====Test====&lt;br /&gt;
&lt;br /&gt;
Au cours des tests, nous nous sommes rendu compte que la mesure d'excitation avec l'accéléromètre ne pouvait être fait que sur une seule mesure du capteur. Ainsi, nous avons décidé de moyenner les valeurs sur 20mesures et calculons ce qui se rapproche de la dérivée des valeurs de l'accéléromètre sur une période donnée.&lt;br /&gt;
&lt;br /&gt;
Ainsi, nous mesurons réellement l'entrain de l'utilisateur sur une période de temps significative et non pas à un instant donné.&lt;br /&gt;
&lt;br /&gt;
===Résumé===&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Resume sextoy.png|center|recap]]&lt;br /&gt;
&lt;br /&gt;
===Conclusion===&lt;br /&gt;
&lt;br /&gt;
Cette partie du projet a été finalisée. Nous avons réussi à utiliser toutes les fonctionnalités &amp;quot;embarquées&amp;quot; de notre projet.&lt;br /&gt;
&lt;br /&gt;
==Gestion de la communication bluetooth==&lt;br /&gt;
===Introduction===&lt;br /&gt;
Dans le cadre de notre projet, la communication entre le sextoy et le téléphone se fera à faible portée. C'est pourquoi nous avons considéré comme intéressante l'utilisation de la technologie bluetooth.&lt;br /&gt;
&lt;br /&gt;
La première partie consiste à coder une librairie au niveau de l'arduino. Cette librairie, codée en C, consiste simplement en une lecture / écriture via les broches RX/TX de l'arduino et du module bluetooth. &lt;br /&gt;
&lt;br /&gt;
La seconde partie conssite à coder la partie application mobile qui communiquera avec la arduino.&lt;br /&gt;
&lt;br /&gt;
Une fois que cette transmission sera mise en place, il ne reste plus qu'à expliciter le protocole des paquets transmis.&lt;br /&gt;
&lt;br /&gt;
===Arduino===&lt;br /&gt;
&lt;br /&gt;
Afin de communiquer à travers le module bluetooth, il faut relier la broche RX de l'arduino à celle TX du module bluetooth et inversement. Pour tester nos codes, nous avons utilisé un module bluetooth HC-05 et l'application [https://play.google.com/store/apps/details?id=Qwerty.BluetoothTerminal&amp;amp;hl=fr| Bluetooth Terminal]. &lt;br /&gt;
&lt;br /&gt;
Dans la mesure où l'arduino devra traiter l'arrivée asynchrone de messages tout en effectuant le traitement des capteurs, il est intéressant d'effectuer des lectures à l'aide d'interruptions. Pour cela, nous utilisons le vecteur d'interruption USART_RXC_vect qui déclenchera la fonction de lecture à chaque fois qu'un message est reçu.&lt;br /&gt;
&lt;br /&gt;
Une fois le niveau d'excitation lu, nous pouvons utiliser la fonction &amp;quot;lovometre()&amp;quot; qui activera ou désactivera tel ou tel dispositif en fonction du niveau reçu. En réponse à cette lecture, pour confirmer notre réception, nous envoyons le niveau d'excitation actuel de l'utilisateur.&lt;br /&gt;
&lt;br /&gt;
====Test====&lt;br /&gt;
&lt;br /&gt;
A l'aide de [https://play.google.com/store/apps/details?id=Qwerty.BluetoothTerminal&amp;amp;hl=fr| Bluetooth Terminal], nous avons pu effectuer un test sans l'application mobile de notre projet. Ayant fait ces tests avant la partie &amp;quot;gestion des composants&amp;quot;, nous nous sommes juste assurés du bon fonctionnement de la communication en effectuant un echo à chaque réception.&lt;br /&gt;
&lt;br /&gt;
===Module bluetooth utilisé===&lt;br /&gt;
&lt;br /&gt;
Le module bluetooth embarqué sur le PCB est un module reprogrammable. Ainsi il était nécessaire de connaître la configuration par défaut du composant, dans le but de savoir s'il fallait ou non prévoir un pcb de reconfiguration.&lt;br /&gt;
&lt;br /&gt;
Le CYBLE-012012 est configuré par défaut avec le firmware &amp;quot;EZ-Serial BLE Firmware&amp;quot;. La configuration par défaut de ce firmware est la suivante : &lt;br /&gt;
&lt;br /&gt;
* 115200 baud, 8bits de donnée, pas de bit de parité, 1bit de stop&lt;br /&gt;
* &amp;quot;UART flow control&amp;quot; désactivé&lt;br /&gt;
* firmware activé en mode &amp;quot;auto-start&amp;quot;, qui correspond à une recherche automatique de connection bluetooth et de redirection RX-TX en cas de connection&lt;br /&gt;
&lt;br /&gt;
Ces [http://www.cypress.com/file/285326/download| informations] sont importantes car, si elles sont vraiment respectées, nous n'auront pas à créer notre propre kit de développement, ce qui est un gain de temps considérable.&lt;br /&gt;
&lt;br /&gt;
Qui plus est, l'utilisation d'une fonction &amp;quot;auto-start&amp;quot; est en adéquation avec le module bluetooth HC-05 utilisé pour les tests. Nous pouvons donc commencer la programmation mobile du bluetooth en parallèle de l'impression des pcb. Et, dans le cas où les pcb seraient disfonctionnels, nous pourront quand meme envisager un prototype sur breadboard.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Test====&lt;br /&gt;
&lt;br /&gt;
Après avoir alimenté la carte, nous n'avons pas pu nous connecter au module bluetooth, ce dernier n'étant même pas visible dans les appareils alentours. &lt;br /&gt;
&lt;br /&gt;
Nous avons alors vérifié si la carte était correctement alimentée. Pour ce faire, nous avons mesuré différents points de tensions sensé être mis par défaut en PULL-DOWN ou PULL-UP à des niveaux de tensions d'1.7V. Ces niveaux étaient respectés. Le problème n'est donc pas d'ordre électronique. &lt;br /&gt;
&lt;br /&gt;
Par la suite, nous avons voulu vérifier la communication du module. Ce dernier, en déclenchant l'auto start est sensé émettre (en suivant le protocole UART rappelé précédemment) un message START. Nous avons donc inspecté ceci en utilisant minicom. En effet, minicom reçoit un message, mais ne sait pas le déchiffré. Qui plus est, impossible d'envoyer un message au module afin de le reprogrammer (de manière similaire à un XBee).&lt;br /&gt;
&lt;br /&gt;
Devant ces soucis, nous décidons donc d'abandonner ce module bluetooth et de poursuivre avec celui utilisé pour les essais de programmation, le HC-05.&lt;br /&gt;
&lt;br /&gt;
Pour gérer la communication entre le téléphone et un sextoys, il faut utiliser une communication Bluetooth.&lt;br /&gt;
&lt;br /&gt;
Dans un premier temps il faut se connecter avec l'appareil:&lt;br /&gt;
 &lt;br /&gt;
 new ConnectBT().execute();&lt;br /&gt;
&lt;br /&gt;
Avec ConnectBT une classe trouvée sur internet.&lt;br /&gt;
&lt;br /&gt;
Ensuite il faut communiquer :&lt;br /&gt;
&lt;br /&gt;
Pour envoyer un message on utilise: &lt;br /&gt;
&lt;br /&gt;
 btSocket.getOutputStream().write(message);&lt;br /&gt;
&lt;br /&gt;
Avec btSocket un socket Bluetooth ayant été connecté avec le sextoy dans la classe ConnectBT.&lt;br /&gt;
&lt;br /&gt;
Ensuite il faut recevoir :&lt;br /&gt;
&lt;br /&gt;
 btSocket.getInputStream().read(mmBuffer);&lt;br /&gt;
&lt;br /&gt;
Avec mmBuffer qui contient le message reçu.&lt;br /&gt;
&lt;br /&gt;
Mais contrairement à la réception UDP, la réception Bluetooth n'est pas bloquante, ainsi on peut recevoir des messages nuls.&lt;br /&gt;
&lt;br /&gt;
===Protocole de transmission===&lt;br /&gt;
Pour éviter que l'application ne reçoit de message vide, nous avons choisi que le sextoy réponde juste après avoir reçu un paquet.&lt;br /&gt;
&lt;br /&gt;
Ainsi l'application à juste a envoyer un paquet Bluetooth et juste après à chercher à lire le message reçu, pour que tout fonctionne comme prévue&lt;br /&gt;
&lt;br /&gt;
==Conception de l'application Android==&lt;br /&gt;
===Envoie et réception de SMS===&lt;br /&gt;
Afin de ne pas utiliser de serveur, les deux appareils Android doivent synchroniser l'envoi de paquet UDP, pour cela nous avons voulu utiliser des SMS.&lt;br /&gt;
Les SMS permettent d'envoyer des informations, comme les adresses IP, les ports utilisés, l'heure à laquelle les deux téléphones vont envoyer leur premier paquet UDP.&lt;br /&gt;
&lt;br /&gt;
Dans un premier temps nous avons créer une application pour envoyer les SMS:&lt;br /&gt;
&lt;br /&gt;
L'application était très simple, l'envoi de SMS se faisait en deux lignes&lt;br /&gt;
  // initialisation d'une variable sms gérant les sms&lt;br /&gt;
  SmsManager sms = SmsManager.getDefault() ;&lt;br /&gt;
  // envoie un sms comportant le texte de la variable message de type String au numéro contenu dans la variable num de type String&lt;br /&gt;
  sms.sendTextMessage(num, null, message, null, null);&lt;br /&gt;
&lt;br /&gt;
Dans un deuxième temps il fallait recevoir un SMS, ou plutôt savoir qu'un nouvel SMS avait été reçu :&lt;br /&gt;
&lt;br /&gt;
Pour cela il fallait utiliser un thread qui était appelé par interruption avec la réception d'un SMS comme vecteur d’interruption.&lt;br /&gt;
Ce thread effectuait ce qui était demandé dans sa fonction onReceive(), comme par exemple lire les informations contenues dans le SMS:&lt;br /&gt;
  public class IncomingSms extends BroadcastReceiver {&lt;br /&gt;
     final SmsManager sms = SmsManager.getDefault();&lt;br /&gt;
     public void onReceive(Context context, Intent intent) {&lt;br /&gt;
       //Ce qui doit etre fait lors de la reception de SMS&lt;br /&gt;
     }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Malheureusement ce programme ne marchait pas pendant des semaines, malgré de nombreuses modifications et de nombreux essais. Et le problème semblait être ma carte SIM, car en changeant de SIM, tous les programmes contenant ce code fonctionnaient parfaitement.&lt;br /&gt;
&lt;br /&gt;
===Protocole UDP===&lt;br /&gt;
Afin d'effectuer un échange de données entre les deux utilisateurs, et essayer de faire une vidéo-conférence, nous avons choisi d'utiliser le protocole UDP.&lt;br /&gt;
&lt;br /&gt;
Une première application permettait de tester l'envoi de paquet UDP, pour cela un serveur UDP a été utilisé sur un PC.&lt;br /&gt;
Le serveur attendait un message et l'affichait quand il le recevait.&lt;br /&gt;
&lt;br /&gt;
Pour envoyer un paquet nous utilisons :&lt;br /&gt;
&lt;br /&gt;
 DatagramSocket ds = null;&lt;br /&gt;
 ds = new DatagramSocket(PortA);&lt;br /&gt;
 DatagramPacket dp;&lt;br /&gt;
 InetAddress local = InetAddress.getByName(AdrIp);&lt;br /&gt;
 dp = new DatagramPacket(message.getBytes(),message.length(),local,PortA );&lt;br /&gt;
 ds.setBroadcast(true);&lt;br /&gt;
 ds.send(dp);&lt;br /&gt;
&lt;br /&gt;
Ce code crée un paquet qui comporte l’adresse et le port du destinataire, mais surtout les données à envoyer.&lt;br /&gt;
Ce paquet est ensuite envoyer grâce à un socket.&lt;br /&gt;
&lt;br /&gt;
Une fois que tout fonctionnait comme il le fallait, nous avons pu créer une application qui comportait l'envoi et la réception de paquet.&lt;br /&gt;
En mettant l'application sur deux téléphones on pouvait tester si tout fonctionnait.&lt;br /&gt;
Les tests ont seulement été effectué sur un réseau local, on ne sait pas pour le moment si des box internet pourraient empêcher la transmission.&lt;br /&gt;
Pour la réception nous utilisons :&lt;br /&gt;
 dsocket.receive(packet);&lt;br /&gt;
 buff = packet.getData();&lt;br /&gt;
&lt;br /&gt;
Pour récupérer les données du paquet dans la variable buff, il suffit ensuite de créer une boucle pour recevoir plusieurs messages.&lt;br /&gt;
La fonction de réception étant bloquante, il a été préférable de l'effectuer dans un thread.&lt;br /&gt;
&lt;br /&gt;
L'application est donc composé de un thread d'écoute, un thread d'envoi et d'un thread principal gérant l'affichage et appelant le thread d'envoi lorsque que le bouton de l'application est appuyé.&lt;br /&gt;
Voici une image de l'application, les champs d’adresseIp et de port du destinataire sont à remplir avant d'envoyer un paquet UDP.&lt;br /&gt;
Et le port d'écoute est défini dans le code de cette application, ce qui n'est pas très pratique, mais suffisant pour les tests.&lt;br /&gt;
&lt;br /&gt;
Le TextView est mis à jour à chaque que le bouton envoyer est appuyé, en prenant comme valeur celle d'un registre comprenant la valeurs du dernier paquet UDP reçu.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:ClientUdp.png]]&lt;br /&gt;
&lt;br /&gt;
===Application principale===&lt;br /&gt;
Afin d'être ergonomique,l'application doit pouvoir enregistrer des contacts, pour plus facilement communiquer avec eux.&lt;br /&gt;
Nous avons choisi de ne pas utiliser les contacts du téléphone, pour pouvoir avoir des contacts &amp;quot;confidentiels&amp;quot; qui ne seront que dans la base de donnée de l'application.&lt;br /&gt;
&lt;br /&gt;
Il fallait donc créer une base de donnée, nous avons donc utilisé SQLite car cette bibliothèque est utilisée par Android comme base de données embarquée.&lt;br /&gt;
La base ne comporte qu'une seule table, avec seulement les pseudos et les numéros de téléphone.&lt;br /&gt;
&lt;br /&gt;
Une fois la base crée, pour interagir avec, nous avons coder des activités:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
- Ajout de contact:&lt;br /&gt;
&lt;br /&gt;
Il faut entrer dans les champs de textes les informations pour la base de données,puis appuyer sur le bouton &amp;quot;Ajouter&amp;quot; pour créer un nouveau contact dans la base de donnée.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:AjoutContact.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-Fiche de Contact: &lt;br /&gt;
&lt;br /&gt;
Affiche le pseudo et le numéro de téléphone dans les &amp;quot;TextView&amp;quot;, et permet de : supprimer le contact en cliquant sur la croix, envoyer un SMS en cliquant sur l'icone &amp;quot;Message&amp;quot;, mais aussi commencer une communication UDP en cliquant sur le téléphone.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:FicheContact.png]]  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-Liste de contact :&lt;br /&gt;
&lt;br /&gt;
Affiche la liste de contacts, en cliquant sur un des contacts on arrive sur la page Fiche de Contact, et en cliquant sur le plus on arrive sur la page Ajout de Contact.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:ListView.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ensuite il faut ajouter la gestion de communication:&lt;br /&gt;
&lt;br /&gt;
-Les SMS :&lt;br /&gt;
&lt;br /&gt;
Il faut remplir les champs de texte et appuyer sur SMS pour envoyer un message du type&lt;br /&gt;
&lt;br /&gt;
Message&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Address Ip :&amp;quot; Addresse Ip&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Port :&amp;quot; Port&lt;br /&gt;
&lt;br /&gt;
Avec Message,Addresse Ip, et Port les champs à remplir, &amp;quot;Addresse Ip :&amp;quot; et &amp;quot;Port :&amp;quot; deux chaines de caractères.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:SMS.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-Protocole UDP : &lt;br /&gt;
&lt;br /&gt;
Quatre champs sont à remplir, cliquer sur Envoyer pour passez à l'activité de gestion Bluetooth.&lt;br /&gt;
&lt;br /&gt;
Les champs sont:&lt;br /&gt;
&lt;br /&gt;
-L'addresse Ip&lt;br /&gt;
&lt;br /&gt;
-Le port destination&lt;br /&gt;
&lt;br /&gt;
-Le port source&lt;br /&gt;
&lt;br /&gt;
-L'heure qui n'est pas utilisée, qui devait servir pour la synchronisation.&lt;br /&gt;
&lt;br /&gt;
Les valeurs des champs sont conservés pour la communication UDP à venir.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:UDP.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-Gestion Bluetooth :&lt;br /&gt;
&lt;br /&gt;
En cliquant sur &amp;quot;Paired Devices&amp;quot;, l'application affichera la liste des appareils appairés.&lt;br /&gt;
&lt;br /&gt;
Puis en cliquant un des appareils, l'application essayera de connecter avec, tout en lançant l'activité UDP avec Bluetooth.&lt;br /&gt;
&lt;br /&gt;
Si l'on souhaite ne pas utiliser de périphérique Bluetooth, il suffit de cliquer sur le bouton moins en haut à droite.&lt;br /&gt;
&lt;br /&gt;
L'activité UDP sans Bluetooth se lancera.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Bluetooth.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-Communication UDP avec Bluetooth:&lt;br /&gt;
&lt;br /&gt;
Pour lancer la communication UDP, appuyer sur le bouton Off ,il passera en mode On.&lt;br /&gt;
&lt;br /&gt;
Si vous cliquez sur le bouton On il passera en mode Off, et coupera la communication UDP.&lt;br /&gt;
&lt;br /&gt;
Le bouton envoyer, permet de forcer l'envoi d'un paquet UDP.&lt;br /&gt;
&lt;br /&gt;
Et le bouton croix coupe toutes les communications(UDP et Bluetooth), et retourne à la page précédente.&lt;br /&gt;
&lt;br /&gt;
Lorsque l'application reçoit un paquet UDP, un message est envoyé via Bluetooth au sextoys.&lt;br /&gt;
&lt;br /&gt;
Celui-ci répond automatiquement en envoyant une valeur moyennée des ses capteurs, cette valeur est récupérée et mise dans un registre.&lt;br /&gt;
&lt;br /&gt;
En parallèle, toutes les secondes un paquet UDP est envoyé et les données envoyés sont celle du registre.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Com.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-Communication UDP sans Bluetooth.&lt;br /&gt;
&lt;br /&gt;
Le bouton On/Off est utilisé comme dans l'activité &amp;quot;Communication UDP avec Bluetooth&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Les boutons de niveaux, mettent une valeur dans un même registre.&lt;br /&gt;
&lt;br /&gt;
Chaque boutons correspond à une valeur, qui correspondent avec un niveau d'excitation du sextoys.&lt;br /&gt;
&lt;br /&gt;
Ainsi toutes les secondes, un paquet UDP est envoyé avec comme donnée la valeur du registre.&lt;br /&gt;
&lt;br /&gt;
Lorsqu'un paquet UDP est reçu, la donnée reçue est mise dans un registre qui détermine l’affichage du &amp;quot;TextView&amp;quot; en bas à droite.&lt;br /&gt;
&lt;br /&gt;
Ce TextView est mis à jours en même temps qu'un paquet UDP est envoyé.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Co2.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Streaming vidéo===&lt;br /&gt;
&lt;br /&gt;
Nous nous sommes attardés sur le streaming vidéo avant d'avoir fait l'application principale et le gestion du Bluetooth. &lt;br /&gt;
Nous avions trouvé un code sur Github, qui permettait de streamer la vidéo du téléphone sur un pc.&lt;br /&gt;
Il aurait fallut adapter ce code pour streamer entre deux téléphones.&lt;br /&gt;
Mais la recherche du code avait pris trop de temps, et il restait encore trop de chose importante à faire avant de pouvoir continuer cette partie.&lt;br /&gt;
C'est pourquoi il n'y a pas de Streaming vidéo dans l'application finale.&lt;br /&gt;
&lt;br /&gt;
== Rapport et codes ==&lt;br /&gt;
&lt;br /&gt;
Rapport : [[Fichier:CR_sextoy_connecte.pdf]]&lt;br /&gt;
&lt;br /&gt;
[https://archives.plil.fr/croussel/Projet_sextoy_connecte.git Codes]&lt;/div&gt;</summary>
		<author><name>Tstieven</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=IMA4_2016/2017_P14&amp;diff=42886</id>
		<title>IMA4 2016/2017 P14</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=IMA4_2016/2017_P14&amp;diff=42886"/>
				<updated>2017-05-20T16:39:08Z</updated>
		
		<summary type="html">&lt;p&gt;Tstieven : /* Application mobile */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Projet IMA4 : Sex-toy connecté =&lt;br /&gt;
&lt;br /&gt;
== Présentation du projet ==&lt;br /&gt;
&lt;br /&gt;
L'objectif de ce projet est de développer un système d'échange entre deux partenaires distants afin de rendre plus facile la vie de couple à distance.&lt;br /&gt;
&lt;br /&gt;
Pour ce faire, le dispositif sera constitué de deux sextoys connectés (un par appareil génital désiré) à leur téléphone portable respectif. Une application mobile permettra aux utilisateurs de s'échanger des données de manière sécurisé, ceci au travers d'un serveur embarqué dans le téléphone portable.&lt;br /&gt;
&lt;br /&gt;
Les données échangées pourront être l'accélération ou la température. Elles seront traitées et transmises au sextoy qui adaptera sa vitesse, son retour vibratoire ou sa position en conséquence.&lt;br /&gt;
&lt;br /&gt;
Les sextoys pourraient être composés de :&lt;br /&gt;
* Pour l'appareil masculin (dédié à la femme) :&lt;br /&gt;
:* un servomoteur ;&lt;br /&gt;
:* un vibreur ;&lt;br /&gt;
:* une sonde de température ;&lt;br /&gt;
:* un accéléromètre.&lt;br /&gt;
* Pour l'appareil féminin (dédié à l'homme) :&lt;br /&gt;
:* 4 servomoteurs (dans le but de &amp;quot;masser&amp;quot; en déplaçant le silicone);&lt;br /&gt;
:* des vibreurs ;&lt;br /&gt;
:* un accéléromètre.&lt;br /&gt;
* Pour les deux appareils :&lt;br /&gt;
:* un micro-contrôleur (Arduino mini) ;&lt;br /&gt;
:* un module de transmission / réception bluetooth afin de se connecter au téléphone ;&lt;br /&gt;
:* du silicone.&lt;br /&gt;
	&lt;br /&gt;
* L'application mobile devra :&lt;br /&gt;
:* mettre en place une communication cryptée à travers un serveur (embarqué ou bien intermédiaire ?) ;&lt;br /&gt;
:* effectuer un échange de données en bluetooth avec le sextoy connecté.&lt;br /&gt;
&lt;br /&gt;
* L'application mobile pourra :&lt;br /&gt;
:* utiliser la vidéo-conférence ;&lt;br /&gt;
:* enregistrer les meilleurs moments et enventuellement pouvoir les partager ;&lt;br /&gt;
:* effectuer une recherche de partenaire aléatoire.&lt;br /&gt;
&lt;br /&gt;
* S'il nous reste du temps, il peut être envisageable de :&lt;br /&gt;
:* mettre en place un réseau social interne à Polytech.&lt;br /&gt;
&lt;br /&gt;
== Liste des tâches ==&lt;br /&gt;
* Conception de l'appareil masculin (Cédric)&lt;br /&gt;
:* mettre en place le bus I2C avec les différents capteurs ;&lt;br /&gt;
:* création d'un PCB au format gerber ;&lt;br /&gt;
:* création d'un prototype.&lt;br /&gt;
&lt;br /&gt;
* Conception de l'appareil féminin (Cédric)&lt;br /&gt;
:* mettre en place le bus I2C ;&lt;br /&gt;
:* traitement des données afin d'en déduire la position et l'entrain de l'utilisateur ;&lt;br /&gt;
:* création d'un PCB ;&lt;br /&gt;
:* création d'un prototype.&lt;br /&gt;
&lt;br /&gt;
* Communication bluetooth (Cédric et Thomas)&lt;br /&gt;
:* étudier l'émission/réception vue de l'arduino ;&lt;br /&gt;
:* étudier l'émission/réception vue du téléphone ;&lt;br /&gt;
:* mise en place du protocole ;&lt;br /&gt;
:* test de portée.&lt;br /&gt;
&lt;br /&gt;
* Développement mobile (Thomas)&lt;br /&gt;
:* déterminer la meilleure approche : utilisation d'un serveur intermédiaire ou bien mise en place d'un &amp;quot;client-serveur&amp;quot; dans l'application mobile ;&lt;br /&gt;
:* mettre en place le choix retenu ;&lt;br /&gt;
:* tester dans un premier temps une transmission de texte ;&lt;br /&gt;
:* programmer le traitement de données reçues par bluetooth ;&lt;br /&gt;
:* rajouter un côté esthétique à l'application.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Recapitulatif sextoy.png|center|recap]]&lt;br /&gt;
&lt;br /&gt;
==Feuille d'heures==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Tâche !! Prélude !! Heures S1 !! Heures S2 !! Heures S3 !! Heures S4 !! Heures vacances !! Heures S5 !! Heures S6 !! Heures S7 !! Heures S8 !! Heures S9 !! Heures S10 !! Heures vacances et après!! Total&lt;br /&gt;
|-&lt;br /&gt;
| Définition cahier des charges &lt;br /&gt;
| 2H&lt;br /&gt;
| 2H&lt;br /&gt;
| 1H&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 5H&lt;br /&gt;
|-&lt;br /&gt;
| Dimensionnement et établissement de la liste de matériel&lt;br /&gt;
| &lt;br /&gt;
| 3H&lt;br /&gt;
| 4H&lt;br /&gt;
|&lt;br /&gt;
| 4H&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 11H&lt;br /&gt;
|-&lt;br /&gt;
| Établissement de la liste et de la répartition des tâches&lt;br /&gt;
| 1H&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 1H&lt;br /&gt;
|-&lt;br /&gt;
| Appareil masculin : programmation&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 1H&lt;br /&gt;
| 2H&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| 14H&lt;br /&gt;
| 17H &lt;br /&gt;
|-&lt;br /&gt;
| Appareil masculin &amp;amp; féminin : étude des datasheets&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 1H&lt;br /&gt;
| 1H&lt;br /&gt;
|&lt;br /&gt;
| 4H&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| 1H&lt;br /&gt;
|&lt;br /&gt;
| 7H&lt;br /&gt;
|-&lt;br /&gt;
| Appareil masculin : PCB&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 4H&lt;br /&gt;
| 4H&lt;br /&gt;
| 6H&lt;br /&gt;
| 30H&lt;br /&gt;
| 44H&lt;br /&gt;
|-&lt;br /&gt;
| Appareil masculin : 3D&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| 6H&lt;br /&gt;
| 6H&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
| Appareil féminin : programmation&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 24H&lt;br /&gt;
| 24H&lt;br /&gt;
|-&lt;br /&gt;
| Appareil féminin : PCB&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| 2H&lt;br /&gt;
| 1H&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 4H&lt;br /&gt;
| 7H&lt;br /&gt;
|-&lt;br /&gt;
| Appareil féminin : 3D&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 0H&lt;br /&gt;
|-&lt;br /&gt;
| Liaison bluetooth (embarqué)&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 3H&lt;br /&gt;
| 1H&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 8H&lt;br /&gt;
| 12H&lt;br /&gt;
|-&lt;br /&gt;
| Liaison bluetooth (téléphone)&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 15H&lt;br /&gt;
| 15H&lt;br /&gt;
|-&lt;br /&gt;
| Recherche et discussion autour de la meilleure approche de communication&lt;br /&gt;
| 2H&lt;br /&gt;
| 2H&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 4H&lt;br /&gt;
|-&lt;br /&gt;
| Synchronisation temporelle des téléphones (par sms)&lt;br /&gt;
| &lt;br /&gt;
| 2H&lt;br /&gt;
| 4H&lt;br /&gt;
| 6H&lt;br /&gt;
| 8H&lt;br /&gt;
| 6H&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 26H&lt;br /&gt;
|-&lt;br /&gt;
| Transmission de paquets UDP&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 4H&lt;br /&gt;
| 4H&lt;br /&gt;
| 4H&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 6H&lt;br /&gt;
| 18H&lt;br /&gt;
|-&lt;br /&gt;
| Streaming video(UDP)&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 4H&lt;br /&gt;
| 4H&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 8H&lt;br /&gt;
|-&lt;br /&gt;
| Application et bases de données&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 6H&lt;br /&gt;
| 20H&lt;br /&gt;
| 26H&lt;br /&gt;
|-&lt;br /&gt;
| Total&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 231H&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Conception des sextoys==&lt;br /&gt;
===Introduction===&lt;br /&gt;
&lt;br /&gt;
La conception de sextoys doit respecter différents règles, notamment sanitaires. C'est pourquoi nous nous sommes intéressés à l'utilisation de silicone pour ce projet. Nous avons notamment rencontré un ingénieur compétant dans ce domaine afin de nous aiguiller sur cette éventuelle conception.&lt;br /&gt;
&lt;br /&gt;
La conception passera également par une conception 3D que nous effectuerons à l'aide d'imprimantes 3D au fabricarium de Polytech Lille.&lt;br /&gt;
&lt;br /&gt;
Enfin, les prototypes seront embarqués de cartes électroniques (aussi appelés PCB) que nous constituerons.&lt;br /&gt;
&lt;br /&gt;
===Choix du silicone, rencontre avec Mario Sanz===&lt;br /&gt;
&lt;br /&gt;
Le projet nécessite l'utilisation d'une matière souple et non irritante, c'est pourquoi nous avons choisi de nous tourner vers l'utilisation du silicone. Afin de choisir au mieux le produit correspondant à nos besoins, nous avons rencontré Mario Sanz, ingénieur à l'INRIA, qui travail régulièrement avec du silicone.&lt;br /&gt;
&lt;br /&gt;
Ce dernier nous a expliqué les différents points importants sur lesquels nous baser afin de choisir au mieux un produit en accord avec le projet. Ne serait-ce que pour le choix de la dureté, il existe une échelle propre au silicone (&amp;quot;Shore hardness scale&amp;quot;), nous pensions au départ rechercher un silicone le plus mou possible, cependant, il faut savoir que le plus le silicone est mou, plus il a tendance à être &amp;quot;collant&amp;quot;. Finalement, après discutions, un shore de 40A (correspondant à la dureté d'une gomme) suffisamment mince fera l'affaire pour la conception des prototypes.&lt;br /&gt;
&lt;br /&gt;
Il nous a également expliqué que le silicone peut être travaillé à l'aide d'additifs et sous cloche à vide afin d'améliorer le moulage, l'absence de &amp;quot;bulles&amp;quot; sur la surface de la pièce et la souplesse. Nous pouvons cependant travailler sans tout cela car il n'est pas spécialement important, pour notre projet, de rechercher des propriétés physiques homogènes dans tout le sextoy.&lt;br /&gt;
&lt;br /&gt;
Pour ce qui est de la création de moules, nous pourrons les effectuer via imprimante 3D. Il existe un bon nombre de tutoriels sur internet pour s'y référer en cas de soucis.&lt;br /&gt;
&lt;br /&gt;
===Impression 3D===&lt;br /&gt;
&lt;br /&gt;
Pour la création d'objets en 3D, de nombreux outils sont disponibles. Nous avons décidé d'utiliser Tinkercad, un outil qui s'intègre directement au navigateur internet utilisé. &lt;br /&gt;
&lt;br /&gt;
L'avantage d'un tel outil est sa grande communauté qui permet un accès simple et rapide à une multitudes de projets dont on pourrait s'inspirer pour générer nos pièces.&lt;br /&gt;
&lt;br /&gt;
====Création des moules====&lt;br /&gt;
&lt;br /&gt;
A l'aide d'une imprimante 3D, nous pouvons concevoir des moules afin de créer des pièces en silicone. Il s'agit de la manière la plus rapide et accessible pour notre projet.&lt;br /&gt;
&lt;br /&gt;
Cette méthode comporte des désavantages, dont le principal est la présence d'imperfection et de non homogénéité dans les pièces réalisées. Ceci n'a pas de grande importance dans la mesure où nous souhaitons du qualitatif.&lt;br /&gt;
&lt;br /&gt;
====Création d'un prototype====&lt;br /&gt;
&lt;br /&gt;
=====Pénis=====&lt;br /&gt;
&lt;br /&gt;
Afin de visualiser qualitativement la forme et le passage des câbles, un prototype imprimé au Fabricarium de Polytech Lille a été réalisé. &lt;br /&gt;
&lt;br /&gt;
Ce prototype se divise en 3 pièces : un boîtier (pour y loger le PCB), un cylindre (afin de reproduire la forme désirée) et un &amp;quot;tête&amp;quot; qui devait à l'origine être un moule en silicone (pour y loger le PCB du capteur de température).&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Sextoy_penis.png|400px|thumb|center|Prototype 3D pénis]]&lt;br /&gt;
&lt;br /&gt;
===Conception des PCB===&lt;br /&gt;
&lt;br /&gt;
Afin de diminuer un maximum la taille des cartes electroniques, nous utilisons principalement des composants CMS. &lt;br /&gt;
&lt;br /&gt;
La conception des cartes peut-être effectué à l'aide de logicels de CAO tels qu'Altium ou Eagle. Dans notre cas, nous avons utilisé Eagle. &lt;br /&gt;
&lt;br /&gt;
Ce travail consiste à créer une librairie regroupant l'intégralité des composants nécessaires et, ensuite, de  créer un schéma du circuit. Une fois le schéma terminé, il ne restera plus qu'à faire le routage et exporter les fichiers au format &amp;quot;Gerber&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Pour ce projet, nous aurons besoin de deux cartes, une par prototype. Chaque carte embarquera des composants similaires, c'est pourquoi nous nous contenterons d'abord d'un seul PCB pour effectuer des tests. Si ces derniers sont concluants, nous pourrons graver le second.&lt;br /&gt;
&lt;br /&gt;
====PCB du pénis====&lt;br /&gt;
&lt;br /&gt;
Le premier PCB imprimé et soudé est celui du pénis. Une première carte avait été imprimé regroupant sur cette dernière : un support pour l'arduino, un accéléromètre, un module bluetooth. &lt;br /&gt;
&lt;br /&gt;
[[Fichier:PCB_penis_VB.png|400px|thumb|center|PCB v1.0]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous avons expérimentés des problèmes dûs aux dimensions de l'accéléromètre, l'utilisation d'un boîtier CMS de type TDFN10 2x2 était optimiste pour la réalisation du projet, compte tenu du matériel à disposition.&lt;br /&gt;
&lt;br /&gt;
C'est pourquoi une seconde carte a été gravée, cette fois sans l'accéléromètre.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:PCB_penis_VF.png|400px|thumb|center|PCB v2.0]]&lt;br /&gt;
&lt;br /&gt;
[[Fichier:PCB_VF.png|400px|thumb|center|PCB v2.0 schema]]&lt;br /&gt;
&lt;br /&gt;
Ce prototype est sensé embarquer un capteur de température que nous avons décidé de mettre sur un PCB à part. Cette carte avait pour but d'être coulé dans le silicone, afin de mesurer la température au plus près de la zone intéressée.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:TEMPERATURE_PCB_VF.png|400px|thumb|center|PCB temperature]]&lt;br /&gt;
&lt;br /&gt;
[[Fichier:TEMPERATURE_VF.png|400px|thumb|center|PCB temperature schema]]&lt;br /&gt;
&lt;br /&gt;
====PCB du vagin====&lt;br /&gt;
&lt;br /&gt;
Compte tenu des soucis rencontrés avec l'accéléromètre, la carte sera gravée afin de pouvoir y plugger un accéléromètre analogique en traversant. Le but étant d'avoir un prototype fonctionnel d'ici la fin du projet.&lt;br /&gt;
&lt;br /&gt;
Nous avons également eu des problèmes avec le module bluetooth utilisé, ce dernier ne pouvant être reconfiguré manuellement par minicom, nous utiliserons le bluetooth HC-05 utilisé pour les essais de code. De même que pour l'accéléromètre, nous prévoirons un endroit pour le plugger sur la carte.&lt;br /&gt;
&lt;br /&gt;
''image PCB vagin''&lt;br /&gt;
&lt;br /&gt;
''Reste à graver le PCB du vagin''&lt;br /&gt;
&lt;br /&gt;
==Gestion des composants==&lt;br /&gt;
===Introduction===&lt;br /&gt;
&lt;br /&gt;
Notre projet implique l'utilisation de capteurs, de servomoteurs et de buzzers, constituant chacun une partie de la programmation embarquée.&lt;br /&gt;
&lt;br /&gt;
Pour cette programmation, nous avons décidé d'utiliser AVR-gcc et ainsi coder les arduinos en C.&lt;br /&gt;
&lt;br /&gt;
Les capteurs utilisés utilisent un protocole de communication IIC (ou I²C, I2C), ce protocole de multiples avantages que nous expliciterons par la suite. Cependant, comme un des capteurs (l'accéléromètre) prévus initialement nous a causé beaucoup de soucis, nous expliciterons également la mesure à l'aide de capteurs analogiques. Ces différents capteurs nous permettront de mesurer l'excitation d'un utilisateur.&lt;br /&gt;
&lt;br /&gt;
Une fois l'excitation mesurée, il faut induire une réponse &amp;quot;physique&amp;quot;. Pour ce faire, nous utilisons d'une part des servomoteurs dans le but de produire une sensation de massage.&lt;br /&gt;
&lt;br /&gt;
D'autre part, nous utilisons également des buzzers.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'' Veuillez noter que le code ne sera pas détaillé dans le wiki, vous pouvez vous référer au dépôt git contenant les différents codes. ''&lt;br /&gt;
&lt;br /&gt;
===Utilisation des capteurs===&lt;br /&gt;
&lt;br /&gt;
====Capteurs par IIC====&lt;br /&gt;
&lt;br /&gt;
Le choix de l'IIC n'était pas anodin. L'IIC permet, pour un bus de seulement deux fils (SDA et SCL), d'utiliser un nombre important de capteurs. Ainsi, si nous décidions au cours du projet de rajouter tel ou tel capteurs, nous n'avions qu'à les greffer à ce bus IIC.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Iic.jpg|400px|center|Schema iic]]&lt;br /&gt;
&lt;br /&gt;
Tout d’abord, nous devons initialiser le bus IIC de l’arduino. Pour ce faire, il suffit de préciser la fréquence désirée, ici 400KHz, dans les registres TWSR (prescaler) et TWBR. (fréquence désirée suivant la fonction TWBR = (Fcpu - 16 Fscl ) / (2 Fscl Prescaler) ) avant de lancer l'utilisation IIC via le bit TWIE.&lt;br /&gt;
&lt;br /&gt;
Comme il peut y avoir potentiellement plusieurs capteurs sur ce bus, il faut respecter un certain protocole afin de récupérer la valeur du capteur de température. Attardons nous sur la lecture d’une valeur sur le capteur de température. Il faut : &lt;br /&gt;
&lt;br /&gt;
* Lancer un message de start&lt;br /&gt;
* Envoyer l’adresse du capteur de température (0x98 dans notre cas)&lt;br /&gt;
* Envoyer l’adresse du registre qui nous intéresse (0x00 pour celui contenant la température), ceci placera le pointeur de registre du capteur sur cette adresse&lt;br /&gt;
* Restart la communication pour laisser la main au capteur&lt;br /&gt;
* Envoyer l’adresse du capteur en ajoutant 1 (Ceci permet de stipuler que nous désirons lire la valeur pointée)&lt;br /&gt;
* Lire la partie haute de la température&lt;br /&gt;
* Lire la partie basse de la température&lt;br /&gt;
* Envoyer un message de stop&lt;br /&gt;
&lt;br /&gt;
Chaque action correspond à l'utilisation d'une fonction de la librairie IIC codée. (cf déport git) Et après chaque action, nous devons vérifier le status du bus dans le registre TWSR. Ce &amp;quot;status&amp;quot; nous donnera des indications sur le bon déroulement de la communication, à savoir la réception d'ACK (équivalent d'accusé de réception) ou confirmation d'envoie de start, restart, etc.&lt;br /&gt;
&lt;br /&gt;
=====Test=====&lt;br /&gt;
&lt;br /&gt;
Le test de la librairie iic s'est fait directement lorsque la carte du capteur de température a été soudée. Pour ce faire, nous utilisons une compilation en mode &amp;quot;DEBUG&amp;quot; (make debug upload) qui nous permettait de lire la valeur des &amp;quot;status&amp;quot; avec minicom. &lt;br /&gt;
Après différents tests, nous avons finalement réussi à faire fonctionner le capteur de température en IIC, ce dernier nous renvoyait bel et bien une valeur de température précise à 0.5degrés près, vérifié à l'aidé d'un autre capteur de température.&lt;br /&gt;
&lt;br /&gt;
Il est néanmoins regrettable que ce capteur ne sera pas utilisable dans les prototypes finaux dans la mesure où il est greffé à une carte dont le module bluetooth n'est pas utilisable.&lt;br /&gt;
&lt;br /&gt;
====Capteurs analogique====&lt;br /&gt;
&lt;br /&gt;
Comme dit précédemment, nous avons abandonné l'utilisation de l’accéléromètre IIC prévu initialement dans le vagin car nous n'avons pas réussi à le souder sur les cartes du pénis. Nous avons donc utilisé ce qui était à notre disposition à savoir un capteur analogique.&lt;br /&gt;
&lt;br /&gt;
La mesure analogique sous AVR se fait simplement via l'utilisation de la fonction ad_sample(numéro de la broche analogique lue). Elle renvoie directement une valeur entre 0 et 255 correspondant à une conversion analogique-numérique de la tension sur la broche lue du capteur.&lt;br /&gt;
&lt;br /&gt;
=====Test=====&lt;br /&gt;
&lt;br /&gt;
Nous avions déjà utilisé ce genre de fonctionnalité dans le projet de système et réseau, donc comme attendu, les tests étaient réussis.&lt;br /&gt;
&lt;br /&gt;
===Contrôle des servomoteurs===&lt;br /&gt;
&lt;br /&gt;
Un servomoteur se contrôle à l'aide d'un signal PWM (Pulse Width Modulation). Ce signal consiste à modifier la largeur de l'impulsion en fonction de la consigne désirée. &lt;br /&gt;
&lt;br /&gt;
La génération de PWM via microcontrôleur se fait à l'aide de TIMERS. Il faut savoir qu'il existe une priorité dans les interruptions, pour un TIMER_X donné, plus le X est proche de 0, plus l'interruption sera prioritaire. Nos signaux PWM se doivent d'être le plus en accord avec nos consignes, c'est pourquoi nous avons choisi d'utiliser les TIMER les plus prioritaires pour les générer. (TIMER0 et TIMER1)&lt;br /&gt;
&lt;br /&gt;
====PWM sur un seul servomoteur====&lt;br /&gt;
&lt;br /&gt;
Notre première manière de procéder consistait à générer la PWM nous même à l'aide du vecteur d'interruption d'un TIMER. La méthode consistait à compter de 0 à 255 en permanence. Lorsque le compteur était inférieur à la consigne, on passait une sortie à l'état haut, sinon elle restait à l'état bas. &lt;br /&gt;
&lt;br /&gt;
Cette méthode simulait plutôt bien le signal PWM et avait pour avantage d'être utilisable pour n'importe quelle de l'arduino. Cependant, cette méthode a le gros désavantage d'être sensible à l'utilisation d'autres interruptions, rendant le TIMER imprécis.&lt;br /&gt;
&lt;br /&gt;
Or, notre projet utilisera d'autres procédures d'interruption. Nous avons donc décidé d'utiliser une méthode plus simple mais nous restreignant sur le choix de nos sorties.&lt;br /&gt;
&lt;br /&gt;
En effet, un atmega possède des registres que l'on peut configurer pour générer des signaux PWM sur des broches spécifiques.&lt;br /&gt;
&lt;br /&gt;
Ainsi, en configurant le registre TCCR0A à 0x81 et TCCR0B à 0x05, on se place en mode PWM non inversée à fréquence élevée. En résumé, cette configuration nous permet de faire varier les signaux PWM en introduisant une consigne dans le registre OCR0A.&lt;br /&gt;
&lt;br /&gt;
Ainsi, nous pouvons donc contrôler le moteur simplement en changeant la consigne dans OCR0A.&lt;br /&gt;
&lt;br /&gt;
====Tests====&lt;br /&gt;
&lt;br /&gt;
Dans un premier lieu, les moteurs servomoteurs ne recevaient pas les consignes. Nous pensions que le fait que la PWM soit en 3V3 était l'origine du problème. Nous avons donc fait le montage à l'aide d'un transistor NPN monté en saturé. Le problème n'a pas été résolu. &lt;br /&gt;
&lt;br /&gt;
Finalement, le soucis viendrait du fait que les tests étaient effectués avec des valeurs du registre OCR0A à 0 (pwm nulle). Nous n'aurons donc pas besoin d'un montage à transistor pour le PCB.&lt;br /&gt;
&lt;br /&gt;
Le but des servomoteurs est d'effectuer un semblant de massage, nous allons donc modifier le code afin d'effectuer la tâche de manière périodique via l'utilisation d'un TIMER.&lt;br /&gt;
&lt;br /&gt;
====Gestion d'un ensemble de servomoteurs====&lt;br /&gt;
&lt;br /&gt;
Dans le vagin, nous utilisons 4 servomoteurs afin de masser l'utilisateur. Nous avons trouvé intéressant de diviser ces moteurs en deux couples afin d'intensifier ou non ce massage en fonction des seuils d'excitation détectés par les capteurs.&lt;br /&gt;
&lt;br /&gt;
Pour ce faire, nous aurons besoin de deux signaux PWM différents, donc de l'utilisation de deux timers configurés en PWM. &lt;br /&gt;
&lt;br /&gt;
Comme dit en introduction de cette section, nous nous imposons l'utilisation du TIMER1 pour cette deuxième PWM. Il existe une différence dans la configuration de cette dernière dans la mesure où le signal peut recevoir des consignes allant de 8 à 16bits en fonction de la configuration. Afin de simplifier les choses, nous avons configuré cette dernière sur 8bits pour lui envoyer les mêmes consignes que pour le TIMER0.&lt;br /&gt;
&lt;br /&gt;
====Tests====&lt;br /&gt;
&lt;br /&gt;
Avant tout, nous devions vérifier que la consigne avait une intensité suffisante pour être envoyée sur deux servomoteurs en même temps. Ce qui était le cas.&lt;br /&gt;
&lt;br /&gt;
Ensuite, nous avons testés des changements de consignes plus ou moins rapides afin de déterminer ce qui répondrait le mieux à nos attentes.&lt;br /&gt;
&lt;br /&gt;
Les tests concluants, nous pouvions passer à la suite.&lt;br /&gt;
&lt;br /&gt;
===Utilisation des buzzers===&lt;br /&gt;
&lt;br /&gt;
En fonction du niveau d'excitation, nous ferons vibrer un ou deux buzzers. Pour ce faire, nous avons fait le choix de souder leur broche GND au GND de nos cartes et ainsi souder leur potentiel VCC à une broche de l'arduino. Ainsi, si nous plaçons la broche à l'état bas, le tension dans le buzzer est nulle et si nous passons la broche à l'état haut, la tension aux bornes du buzzers devient 3.3V et il vibre.&lt;br /&gt;
&lt;br /&gt;
Pour ce faire, nous utilisons simplement deux broches, ici PXX et PXX, que nous avons initialisés en tant que sorties en mettant à un leur bit correspondant dans le registre DDRX. Ainsi, il ne reste plus qu'à commander la valeur haute ou basse de ces broches en mettant à 1 ou 0 leur bit dans le registre PORTX.&lt;br /&gt;
&lt;br /&gt;
====Tests====&lt;br /&gt;
&lt;br /&gt;
Ceci a été testé sur breadboard et était fonctionnel. Cependant, une chose à quoi nous n'avions pas pensé était que lorsque nous les avons soudés sur le PCB, nous aurions dû utiliser des câbles plus épais, car comme nous n'avions pas de prototype sur quoi coller les buzzers, l'un des buzzers s'est arraché de la carte en vibrant.&lt;br /&gt;
&lt;br /&gt;
===TIMER2===&lt;br /&gt;
&lt;br /&gt;
Maintenant que nous avons chaque partie pouvant fonctionner indépendamment, nous avons choisi d'utiliser le dernier TIMER à disposition afin de rendre l'intégralité du programme basé sur les interruptions et ainsi s'assurer que les priorités désirées soient respectées.&lt;br /&gt;
&lt;br /&gt;
Ce TIMER nous servira donc à :&lt;br /&gt;
&lt;br /&gt;
* Effectuer des mesures régulières des capteurs&lt;br /&gt;
* Changer les consignes PWM quand il le faut&lt;br /&gt;
&lt;br /&gt;
Nous avons fait en sorte que ce TIMER provoque une interruption le plus lentement possible (à savoir toutes les 32ms environ), afin de ne pas surcharger le contrôleur inutilement. En effet, la mesure des capteurs n'a pas besoin d'être faite de manière intensive.&lt;br /&gt;
&lt;br /&gt;
====Test====&lt;br /&gt;
&lt;br /&gt;
Au cours des tests, nous nous sommes rendu compte que la mesure d'excitation avec l'accéléromètre ne pouvait être fait que sur une seule mesure du capteur. Ainsi, nous avons décidé de moyenner les valeurs sur 20mesures et calculons ce qui se rapproche de la dérivée des valeurs de l'accéléromètre sur une période donnée.&lt;br /&gt;
&lt;br /&gt;
Ainsi, nous mesurons réellement l'entrain de l'utilisateur sur une période de temps significative et non pas à un instant donné.&lt;br /&gt;
&lt;br /&gt;
===Résumé===&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Resume sextoy.png|center|recap]]&lt;br /&gt;
&lt;br /&gt;
===Conclusion===&lt;br /&gt;
&lt;br /&gt;
Cette partie du projet a été finalisée. Nous avons réussi à utiliser toutes les fonctionnalités &amp;quot;embarquées&amp;quot; de notre projet.&lt;br /&gt;
&lt;br /&gt;
==Gestion de la communication bluetooth==&lt;br /&gt;
===Introduction===&lt;br /&gt;
Dans le cadre de notre projet, la communication entre le sextoy et le téléphone se fera à faible portée. C'est pourquoi nous avons considéré comme intéressante l'utilisation de la technologie bluetooth.&lt;br /&gt;
&lt;br /&gt;
La première partie consiste à coder une librairie au niveau de l'arduino. Cette librairie, codée en C, consiste simplement en une lecture / écriture via les broches RX/TX de l'arduino et du module bluetooth. &lt;br /&gt;
&lt;br /&gt;
La seconde partie conssite à coder la partie application mobile qui communiquera avec la arduino.&lt;br /&gt;
&lt;br /&gt;
Une fois que cette transmission sera mise en place, il ne reste plus qu'à expliciter le protocole des paquets transmis.&lt;br /&gt;
&lt;br /&gt;
===Arduino===&lt;br /&gt;
&lt;br /&gt;
Afin de communiquer à travers le module bluetooth, il faut relier la broche RX de l'arduino à celle TX du module bluetooth et inversement. Pour tester nos codes, nous avons utilisé un module bluetooth HC-05 et l'application [https://play.google.com/store/apps/details?id=Qwerty.BluetoothTerminal&amp;amp;hl=fr| Bluetooth Terminal]. &lt;br /&gt;
&lt;br /&gt;
Dans la mesure où l'arduino devra traiter l'arrivée asynchrone de messages tout en effectuant le traitement des capteurs, il est intéressant d'effectuer des lectures à l'aide d'interruptions. Pour cela, nous utilisons le vecteur d'interruption USART_RXC_vect qui déclenchera la fonction de lecture à chaque fois qu'un message est reçu.&lt;br /&gt;
&lt;br /&gt;
Une fois le niveau d'excitation lu, nous pouvons utiliser la fonction &amp;quot;lovometre()&amp;quot; qui activera ou désactivera tel ou tel dispositif en fonction du niveau reçu. En réponse à cette lecture, pour confirmer notre réception, nous envoyons le niveau d'excitation actuel de l'utilisateur.&lt;br /&gt;
&lt;br /&gt;
====Test====&lt;br /&gt;
&lt;br /&gt;
A l'aide de [https://play.google.com/store/apps/details?id=Qwerty.BluetoothTerminal&amp;amp;hl=fr| Bluetooth Terminal], nous avons pu effectuer un test sans l'application mobile de notre projet. Ayant fait ces tests avant la partie &amp;quot;gestion des composants&amp;quot;, nous nous sommes juste assurés du bon fonctionnement de la communication en effectuant un echo à chaque réception.&lt;br /&gt;
&lt;br /&gt;
===Module bluetooth utilisé===&lt;br /&gt;
&lt;br /&gt;
Le module bluetooth embarqué sur le PCB est un module reprogrammable. Ainsi il était nécessaire de connaître la configuration par défaut du composant, dans le but de savoir s'il fallait ou non prévoir un pcb de reconfiguration.&lt;br /&gt;
&lt;br /&gt;
Le CYBLE-012012 est configuré par défaut avec le firmware &amp;quot;EZ-Serial BLE Firmware&amp;quot;. La configuration par défaut de ce firmware est la suivante : &lt;br /&gt;
&lt;br /&gt;
* 115200 baud, 8bits de donnée, pas de bit de parité, 1bit de stop&lt;br /&gt;
* &amp;quot;UART flow control&amp;quot; désactivé&lt;br /&gt;
* firmware activé en mode &amp;quot;auto-start&amp;quot;, qui correspond à une recherche automatique de connection bluetooth et de redirection RX-TX en cas de connection&lt;br /&gt;
&lt;br /&gt;
Ces [http://www.cypress.com/file/285326/download| informations] sont importantes car, si elles sont vraiment respectées, nous n'auront pas à créer notre propre kit de développement, ce qui est un gain de temps considérable.&lt;br /&gt;
&lt;br /&gt;
Qui plus est, l'utilisation d'une fonction &amp;quot;auto-start&amp;quot; est en adéquation avec le module bluetooth HC-05 utilisé pour les tests. Nous pouvons donc commencer la programmation mobile du bluetooth en parallèle de l'impression des pcb. Et, dans le cas où les pcb seraient disfonctionnels, nous pourront quand meme envisager un prototype sur breadboard.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Test====&lt;br /&gt;
&lt;br /&gt;
Après avoir alimenté la carte, nous n'avons pas pu nous connecter au module bluetooth, ce dernier n'étant même pas visible dans les appareils alentours. &lt;br /&gt;
&lt;br /&gt;
Nous avons alors vérifié si la carte était correctement alimentée. Pour ce faire, nous avons mesuré différents points de tensions sensé être mis par défaut en PULL-DOWN ou PULL-UP à des niveaux de tensions d'1.7V. Ces niveaux étaient respectés. Le problème n'est donc pas d'ordre électronique. &lt;br /&gt;
&lt;br /&gt;
Par la suite, nous avons voulu vérifier la communication du module. Ce dernier, en déclenchant l'auto start est sensé émettre (en suivant le protocole UART rappelé précédemment) un message START. Nous avons donc inspecté ceci en utilisant minicom. En effet, minicom reçoit un message, mais ne sait pas le déchiffré. Qui plus est, impossible d'envoyer un message au module afin de le reprogrammer (de manière similaire à un XBee).&lt;br /&gt;
&lt;br /&gt;
Devant ces soucis, nous décidons donc d'abandonner ce module bluetooth et de poursuivre avec celui utilisé pour les essais de programmation, le HC-05.&lt;br /&gt;
&lt;br /&gt;
Pour gérer la communication entre le téléphone et un sextoys, il faut utiliser une communication Bluetooth.&lt;br /&gt;
&lt;br /&gt;
Dans un premier temps il faut se connecter avec l'appareil:&lt;br /&gt;
 &lt;br /&gt;
 new ConnectBT().execute();&lt;br /&gt;
&lt;br /&gt;
Avec ConnectBT une classe trouvée sur internet.&lt;br /&gt;
&lt;br /&gt;
Ensuite il faut communiquer :&lt;br /&gt;
&lt;br /&gt;
Pour envoyer un message on utilise: &lt;br /&gt;
&lt;br /&gt;
 btSocket.getOutputStream().write(message);&lt;br /&gt;
&lt;br /&gt;
Avec btSocket un socket Bluetooth ayant été connecté avec le sextoy dans la classe ConnectBT.&lt;br /&gt;
&lt;br /&gt;
Ensuite il faut recevoir :&lt;br /&gt;
&lt;br /&gt;
 btSocket.getInputStream().read(mmBuffer);&lt;br /&gt;
&lt;br /&gt;
Avec mmBuffer qui contient le message reçu.&lt;br /&gt;
&lt;br /&gt;
Mais contrairement à la réception UDP, la réception Bluetooth n'est pas bloquante, ainsi on peut recevoir des messages nuls.&lt;br /&gt;
&lt;br /&gt;
===Protocole de transmission===&lt;br /&gt;
Pour éviter que l'application ne reçoit de message vide, nous avons choisi que le sextoy réponde juste après avoir reçu un paquet.&lt;br /&gt;
&lt;br /&gt;
Ainsi l'application à juste a envoyer un paquet Bluetooth et juste après à chercher à lire le message reçu, pour que tout fonctionne comme prévue&lt;br /&gt;
&lt;br /&gt;
===Protocole de transmission===&lt;br /&gt;
&lt;br /&gt;
==Conception de l'application Android==&lt;br /&gt;
===Envoie et réception de SMS===&lt;br /&gt;
Afin de ne pas utiliser de serveur, les deux appareils Android doivent synchroniser l'envoi de paquet UDP, pour cela nous avons voulu utiliser des SMS.&lt;br /&gt;
Les SMS permettent d'envoyer des informations, comme les adresses IP, les ports utilisés, l'heure à laquelle les deux téléphones vont envoyer leur premier paquet UDP.&lt;br /&gt;
&lt;br /&gt;
Dans un premier temps nous avons créer une application pour envoyer les SMS:&lt;br /&gt;
&lt;br /&gt;
L'application était très simple, l'envoi de SMS se faisait en deux lignes&lt;br /&gt;
  // initialisation d'une variable sms gérant les sms&lt;br /&gt;
  SmsManager sms = SmsManager.getDefault() ;&lt;br /&gt;
  // envoie un sms comportant le texte de la variable message de type String au numéro contenu dans la variable num de type String&lt;br /&gt;
  sms.sendTextMessage(num, null, message, null, null);&lt;br /&gt;
&lt;br /&gt;
Dans un deuxième temps il fallait recevoir un SMS, ou plutôt savoir qu'un nouvel SMS avait été reçu :&lt;br /&gt;
&lt;br /&gt;
Pour cela il fallait utiliser un thread qui était appelé par interruption avec la réception d'un SMS comme vecteur d’interruption.&lt;br /&gt;
Ce thread effectuait ce qui était demandé dans sa fonction onReceive(), comme par exemple lire les informations contenues dans le SMS:&lt;br /&gt;
  public class IncomingSms extends BroadcastReceiver {&lt;br /&gt;
     final SmsManager sms = SmsManager.getDefault();&lt;br /&gt;
     public void onReceive(Context context, Intent intent) {&lt;br /&gt;
       //Ce qui doit etre fait lors de la reception de SMS&lt;br /&gt;
     }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Malheureusement ce programme ne marchait pas pendant des semaines, malgré de nombreuses modifications et de nombreux essais. Et le problème semblait être ma carte SIM, car en changeant de SIM, tous les programmes contenant ce code fonctionnaient parfaitement.&lt;br /&gt;
&lt;br /&gt;
===Protocole UDP===&lt;br /&gt;
Afin d'effectuer un échange de données entre les deux utilisateurs, et essayer de faire une vidéo-conférence, nous avons choisi d'utiliser le protocole UDP.&lt;br /&gt;
&lt;br /&gt;
Une première application permettait de tester l'envoi de paquet UDP, pour cela un serveur UDP a été utilisé sur un PC.&lt;br /&gt;
Le serveur attendait un message et l'affichait quand il le recevait.&lt;br /&gt;
&lt;br /&gt;
Pour envoyer un paquet nous utilisons :&lt;br /&gt;
&lt;br /&gt;
 DatagramSocket ds = null;&lt;br /&gt;
 ds = new DatagramSocket(PortA);&lt;br /&gt;
 DatagramPacket dp;&lt;br /&gt;
 InetAddress local = InetAddress.getByName(AdrIp);&lt;br /&gt;
 dp = new DatagramPacket(message.getBytes(),message.length(),local,PortA );&lt;br /&gt;
 ds.setBroadcast(true);&lt;br /&gt;
 ds.send(dp);&lt;br /&gt;
&lt;br /&gt;
Ce code crée un paquet qui comporte l’adresse et le port du destinataire, mais surtout les données à envoyer.&lt;br /&gt;
Ce paquet est ensuite envoyer grâce à un socket.&lt;br /&gt;
&lt;br /&gt;
Une fois que tout fonctionnait comme il le fallait, nous avons pu créer une application qui comportait l'envoi et la réception de paquet.&lt;br /&gt;
En mettant l'application sur deux téléphones on pouvait tester si tout fonctionnait.&lt;br /&gt;
Les tests ont seulement été effectué sur un réseau local, on ne sait pas pour le moment si des box internet pourraient empêcher la transmission.&lt;br /&gt;
Pour la réception nous utilisons :&lt;br /&gt;
 dsocket.receive(packet);&lt;br /&gt;
 buff = packet.getData();&lt;br /&gt;
&lt;br /&gt;
Pour récupérer les données du paquet dans la variable buff, il suffit ensuite de créer une boucle pour recevoir plusieurs messages.&lt;br /&gt;
La fonction de réception étant bloquante, il a été préférable de l'effectuer dans un thread.&lt;br /&gt;
&lt;br /&gt;
L'application est donc composé de un thread d'écoute, un thread d'envoi et d'un thread principal gérant l'affichage et appelant le thread d'envoi lorsque que le bouton de l'application est appuyé.&lt;br /&gt;
Voici une image de l'application, les champs d’adresseIp et de port du destinataire sont à remplir avant d'envoyer un paquet UDP.&lt;br /&gt;
Et le port d'écoute est défini dans le code de cette application, ce qui n'est pas très pratique, mais suffisant pour les tests.&lt;br /&gt;
&lt;br /&gt;
Le TextView est mis à jour à chaque que le bouton envoyer est appuyé, en prenant comme valeur celle d'un registre comprenant la valeurs du dernier paquet UDP reçu.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:ClientUdp.png]]&lt;br /&gt;
&lt;br /&gt;
===Application principale===&lt;br /&gt;
Afin d'être ergonomique,l'application doit pouvoir enregistrer des contacts, pour plus facilement communiquer avec eux.&lt;br /&gt;
Nous avons choisi de ne pas utiliser les contacts du téléphone, pour pouvoir avoir des contacts &amp;quot;confidentiels&amp;quot; qui ne seront que dans la base de donnée de l'application.&lt;br /&gt;
&lt;br /&gt;
Il fallait donc créer une base de donnée, nous avons donc utilisé SQLite car cette bibliothèque est utilisée par Android comme base de données embarquée.&lt;br /&gt;
La base ne comporte qu'une seule table, avec seulement les pseudos et les numéros de téléphone.&lt;br /&gt;
&lt;br /&gt;
Une fois la base crée, pour interagir avec, nous avons coder des activités:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
- Ajout de contact:&lt;br /&gt;
&lt;br /&gt;
Il faut entrer dans les champs de textes les informations pour la base de données,puis appuyer sur le bouton &amp;quot;Ajouter&amp;quot; pour créer un nouveau contact dans la base de donnée.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:AjoutContact.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-Fiche de Contact: &lt;br /&gt;
&lt;br /&gt;
Affiche le pseudo et le numéro de téléphone dans les &amp;quot;TextView&amp;quot;, et permet de : supprimer le contact en cliquant sur la croix, envoyer un SMS en cliquant sur l'icone &amp;quot;Message&amp;quot;, mais aussi commencer une communication UDP en cliquant sur le téléphone.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:FicheContact.png]]  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-Liste de contact :&lt;br /&gt;
&lt;br /&gt;
Affiche la liste de contacts, en cliquant sur un des contacts on arrive sur la page Fiche de Contact, et en cliquant sur le plus on arrive sur la page Ajout de Contact.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:ListView.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ensuite il faut ajouter la gestion de communication:&lt;br /&gt;
&lt;br /&gt;
-Les SMS :&lt;br /&gt;
&lt;br /&gt;
Il faut remplir les champs de texte et appuyer sur SMS pour envoyer un message du type&lt;br /&gt;
&lt;br /&gt;
Message&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Address Ip :&amp;quot; Addresse Ip&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Port :&amp;quot; Port&lt;br /&gt;
&lt;br /&gt;
Avec Message,Addresse Ip, et Port les champs à remplir, &amp;quot;Addresse Ip :&amp;quot; et &amp;quot;Port :&amp;quot; deux chaines de caractères.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:SMS.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-Protocole UDP : &lt;br /&gt;
&lt;br /&gt;
Quatre champs sont à remplir, cliquer sur Envoyer pour passez à l'activité de gestion Bluetooth.&lt;br /&gt;
&lt;br /&gt;
Les champs sont:&lt;br /&gt;
&lt;br /&gt;
-L'addresse Ip&lt;br /&gt;
&lt;br /&gt;
-Le port destination&lt;br /&gt;
&lt;br /&gt;
-Le port source&lt;br /&gt;
&lt;br /&gt;
-L'heure qui n'est pas utilisée, qui devait servir pour la synchronisation.&lt;br /&gt;
&lt;br /&gt;
Les valeurs des champs sont conservés pour la communication UDP à venir.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:UDP.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-Gestion Bluetooth :&lt;br /&gt;
&lt;br /&gt;
En cliquant sur &amp;quot;Paired Devices&amp;quot;, l'application affichera la liste des appareils appairés.&lt;br /&gt;
&lt;br /&gt;
Puis en cliquant un des appareils, l'application essayera de connecter avec, tout en lançant l'activité UDP avec Bluetooth.&lt;br /&gt;
&lt;br /&gt;
Si l'on souhaite ne pas utiliser de périphérique Bluetooth, il suffit de cliquer sur le bouton moins en haut à droite.&lt;br /&gt;
&lt;br /&gt;
L'activité UDP sans Bluetooth se lancera.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Bluetooth.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-Communication UDP avec Bluetooth:&lt;br /&gt;
&lt;br /&gt;
Pour lancer la communication UDP, appuyer sur le bouton Off ,il passera en mode On.&lt;br /&gt;
&lt;br /&gt;
Si vous cliquez sur le bouton On il passera en mode Off, et coupera la communication UDP.&lt;br /&gt;
&lt;br /&gt;
Le bouton envoyer, permet de forcer l'envoi d'un paquet UDP.&lt;br /&gt;
&lt;br /&gt;
Et le bouton croix coupe toutes les communications(UDP et Bluetooth), et retourne à la page précédente.&lt;br /&gt;
&lt;br /&gt;
Lorsque l'application reçoit un paquet UDP, un message est envoyé via Bluetooth au sextoys.&lt;br /&gt;
&lt;br /&gt;
Celui-ci répond automatiquement en envoyant une valeur moyennée des ses capteurs, cette valeur est récupérée et mise dans un registre.&lt;br /&gt;
&lt;br /&gt;
En parallèle, toutes les secondes un paquet UDP est envoyé et les données envoyés sont celle du registre.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Com.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-Communication UDP sans Bluetooth.&lt;br /&gt;
&lt;br /&gt;
Le bouton On/Off est utilisé comme dans l'activité &amp;quot;Communication UDP avec Bluetooth&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Les boutons de niveaux, mettent une valeur dans un même registre.&lt;br /&gt;
&lt;br /&gt;
Chaque boutons correspond à une valeur, qui correspondent avec un niveau d'excitation du sextoys.&lt;br /&gt;
&lt;br /&gt;
Ainsi toutes les secondes, un paquet UDP est envoyé avec comme donnée la valeur du registre.&lt;br /&gt;
&lt;br /&gt;
Lorsqu'un paquet UDP est reçu, la donnée reçue est mise dans un registre qui détermine l’affichage du &amp;quot;TextView&amp;quot; en bas à droite.&lt;br /&gt;
&lt;br /&gt;
Ce TextView est mis à jours en même temps qu'un paquet UDP est envoyé.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Co2.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Streaming vidéo===&lt;br /&gt;
&lt;br /&gt;
Nous nous sommes attardés sur le streaming vidéo avant d'avoir fait l'application principale et le gestion du Bluetooth. &lt;br /&gt;
Nous avions trouvé un code sur Github, qui permettait de streamer la vidéo du téléphone sur un pc.&lt;br /&gt;
Il aurait fallut adapter ce code pour streamer entre deux téléphones.&lt;br /&gt;
Mais la recherche du code avait pris trop de temps, et il restait encore trop de chose importante à faire avant de pouvoir continuer cette partie.&lt;br /&gt;
C'est pourquoi il n'y a pas de Streaming vidéo dans l'application finale.&lt;br /&gt;
&lt;br /&gt;
== Rapport et codes ==&lt;br /&gt;
&lt;br /&gt;
Rapport : [[Fichier:CR_sextoy_connecte.pdf]]&lt;br /&gt;
&lt;br /&gt;
[https://archives.plil.fr/croussel/Projet_sextoy_connecte.git Codes]&lt;/div&gt;</summary>
		<author><name>Tstieven</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=IMA4_2016/2017_P14&amp;diff=42885</id>
		<title>IMA4 2016/2017 P14</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=IMA4_2016/2017_P14&amp;diff=42885"/>
				<updated>2017-05-20T16:38:47Z</updated>
		
		<summary type="html">&lt;p&gt;Tstieven : /* Communication Bluetooth */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Projet IMA4 : Sex-toy connecté =&lt;br /&gt;
&lt;br /&gt;
== Présentation du projet ==&lt;br /&gt;
&lt;br /&gt;
L'objectif de ce projet est de développer un système d'échange entre deux partenaires distants afin de rendre plus facile la vie de couple à distance.&lt;br /&gt;
&lt;br /&gt;
Pour ce faire, le dispositif sera constitué de deux sextoys connectés (un par appareil génital désiré) à leur téléphone portable respectif. Une application mobile permettra aux utilisateurs de s'échanger des données de manière sécurisé, ceci au travers d'un serveur embarqué dans le téléphone portable.&lt;br /&gt;
&lt;br /&gt;
Les données échangées pourront être l'accélération ou la température. Elles seront traitées et transmises au sextoy qui adaptera sa vitesse, son retour vibratoire ou sa position en conséquence.&lt;br /&gt;
&lt;br /&gt;
Les sextoys pourraient être composés de :&lt;br /&gt;
* Pour l'appareil masculin (dédié à la femme) :&lt;br /&gt;
:* un servomoteur ;&lt;br /&gt;
:* un vibreur ;&lt;br /&gt;
:* une sonde de température ;&lt;br /&gt;
:* un accéléromètre.&lt;br /&gt;
* Pour l'appareil féminin (dédié à l'homme) :&lt;br /&gt;
:* 4 servomoteurs (dans le but de &amp;quot;masser&amp;quot; en déplaçant le silicone);&lt;br /&gt;
:* des vibreurs ;&lt;br /&gt;
:* un accéléromètre.&lt;br /&gt;
* Pour les deux appareils :&lt;br /&gt;
:* un micro-contrôleur (Arduino mini) ;&lt;br /&gt;
:* un module de transmission / réception bluetooth afin de se connecter au téléphone ;&lt;br /&gt;
:* du silicone.&lt;br /&gt;
	&lt;br /&gt;
* L'application mobile devra :&lt;br /&gt;
:* mettre en place une communication cryptée à travers un serveur (embarqué ou bien intermédiaire ?) ;&lt;br /&gt;
:* effectuer un échange de données en bluetooth avec le sextoy connecté.&lt;br /&gt;
&lt;br /&gt;
* L'application mobile pourra :&lt;br /&gt;
:* utiliser la vidéo-conférence ;&lt;br /&gt;
:* enregistrer les meilleurs moments et enventuellement pouvoir les partager ;&lt;br /&gt;
:* effectuer une recherche de partenaire aléatoire.&lt;br /&gt;
&lt;br /&gt;
* S'il nous reste du temps, il peut être envisageable de :&lt;br /&gt;
:* mettre en place un réseau social interne à Polytech.&lt;br /&gt;
&lt;br /&gt;
== Liste des tâches ==&lt;br /&gt;
* Conception de l'appareil masculin (Cédric)&lt;br /&gt;
:* mettre en place le bus I2C avec les différents capteurs ;&lt;br /&gt;
:* création d'un PCB au format gerber ;&lt;br /&gt;
:* création d'un prototype.&lt;br /&gt;
&lt;br /&gt;
* Conception de l'appareil féminin (Cédric)&lt;br /&gt;
:* mettre en place le bus I2C ;&lt;br /&gt;
:* traitement des données afin d'en déduire la position et l'entrain de l'utilisateur ;&lt;br /&gt;
:* création d'un PCB ;&lt;br /&gt;
:* création d'un prototype.&lt;br /&gt;
&lt;br /&gt;
* Communication bluetooth (Cédric et Thomas)&lt;br /&gt;
:* étudier l'émission/réception vue de l'arduino ;&lt;br /&gt;
:* étudier l'émission/réception vue du téléphone ;&lt;br /&gt;
:* mise en place du protocole ;&lt;br /&gt;
:* test de portée.&lt;br /&gt;
&lt;br /&gt;
* Développement mobile (Thomas)&lt;br /&gt;
:* déterminer la meilleure approche : utilisation d'un serveur intermédiaire ou bien mise en place d'un &amp;quot;client-serveur&amp;quot; dans l'application mobile ;&lt;br /&gt;
:* mettre en place le choix retenu ;&lt;br /&gt;
:* tester dans un premier temps une transmission de texte ;&lt;br /&gt;
:* programmer le traitement de données reçues par bluetooth ;&lt;br /&gt;
:* rajouter un côté esthétique à l'application.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Recapitulatif sextoy.png|center|recap]]&lt;br /&gt;
&lt;br /&gt;
==Feuille d'heures==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Tâche !! Prélude !! Heures S1 !! Heures S2 !! Heures S3 !! Heures S4 !! Heures vacances !! Heures S5 !! Heures S6 !! Heures S7 !! Heures S8 !! Heures S9 !! Heures S10 !! Heures vacances et après!! Total&lt;br /&gt;
|-&lt;br /&gt;
| Définition cahier des charges &lt;br /&gt;
| 2H&lt;br /&gt;
| 2H&lt;br /&gt;
| 1H&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 5H&lt;br /&gt;
|-&lt;br /&gt;
| Dimensionnement et établissement de la liste de matériel&lt;br /&gt;
| &lt;br /&gt;
| 3H&lt;br /&gt;
| 4H&lt;br /&gt;
|&lt;br /&gt;
| 4H&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 11H&lt;br /&gt;
|-&lt;br /&gt;
| Établissement de la liste et de la répartition des tâches&lt;br /&gt;
| 1H&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 1H&lt;br /&gt;
|-&lt;br /&gt;
| Appareil masculin : programmation&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 1H&lt;br /&gt;
| 2H&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| 14H&lt;br /&gt;
| 17H &lt;br /&gt;
|-&lt;br /&gt;
| Appareil masculin &amp;amp; féminin : étude des datasheets&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 1H&lt;br /&gt;
| 1H&lt;br /&gt;
|&lt;br /&gt;
| 4H&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| 1H&lt;br /&gt;
|&lt;br /&gt;
| 7H&lt;br /&gt;
|-&lt;br /&gt;
| Appareil masculin : PCB&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 4H&lt;br /&gt;
| 4H&lt;br /&gt;
| 6H&lt;br /&gt;
| 30H&lt;br /&gt;
| 44H&lt;br /&gt;
|-&lt;br /&gt;
| Appareil masculin : 3D&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| 6H&lt;br /&gt;
| 6H&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
| Appareil féminin : programmation&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 24H&lt;br /&gt;
| 24H&lt;br /&gt;
|-&lt;br /&gt;
| Appareil féminin : PCB&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| 2H&lt;br /&gt;
| 1H&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 4H&lt;br /&gt;
| 7H&lt;br /&gt;
|-&lt;br /&gt;
| Appareil féminin : 3D&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 0H&lt;br /&gt;
|-&lt;br /&gt;
| Liaison bluetooth (embarqué)&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 3H&lt;br /&gt;
| 1H&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 8H&lt;br /&gt;
| 12H&lt;br /&gt;
|-&lt;br /&gt;
| Liaison bluetooth (téléphone)&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 15H&lt;br /&gt;
| 15H&lt;br /&gt;
|-&lt;br /&gt;
| Recherche et discussion autour de la meilleure approche de communication&lt;br /&gt;
| 2H&lt;br /&gt;
| 2H&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 4H&lt;br /&gt;
|-&lt;br /&gt;
| Synchronisation temporelle des téléphones (par sms)&lt;br /&gt;
| &lt;br /&gt;
| 2H&lt;br /&gt;
| 4H&lt;br /&gt;
| 6H&lt;br /&gt;
| 8H&lt;br /&gt;
| 6H&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 26H&lt;br /&gt;
|-&lt;br /&gt;
| Transmission de paquets UDP&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 4H&lt;br /&gt;
| 4H&lt;br /&gt;
| 4H&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 6H&lt;br /&gt;
| 18H&lt;br /&gt;
|-&lt;br /&gt;
| Streaming video(UDP)&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 4H&lt;br /&gt;
| 4H&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 8H&lt;br /&gt;
|-&lt;br /&gt;
| Application et bases de données&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 6H&lt;br /&gt;
| 20H&lt;br /&gt;
| 26H&lt;br /&gt;
|-&lt;br /&gt;
| Total&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 231H&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Conception des sextoys==&lt;br /&gt;
===Introduction===&lt;br /&gt;
&lt;br /&gt;
La conception de sextoys doit respecter différents règles, notamment sanitaires. C'est pourquoi nous nous sommes intéressés à l'utilisation de silicone pour ce projet. Nous avons notamment rencontré un ingénieur compétant dans ce domaine afin de nous aiguiller sur cette éventuelle conception.&lt;br /&gt;
&lt;br /&gt;
La conception passera également par une conception 3D que nous effectuerons à l'aide d'imprimantes 3D au fabricarium de Polytech Lille.&lt;br /&gt;
&lt;br /&gt;
Enfin, les prototypes seront embarqués de cartes électroniques (aussi appelés PCB) que nous constituerons.&lt;br /&gt;
&lt;br /&gt;
===Choix du silicone, rencontre avec Mario Sanz===&lt;br /&gt;
&lt;br /&gt;
Le projet nécessite l'utilisation d'une matière souple et non irritante, c'est pourquoi nous avons choisi de nous tourner vers l'utilisation du silicone. Afin de choisir au mieux le produit correspondant à nos besoins, nous avons rencontré Mario Sanz, ingénieur à l'INRIA, qui travail régulièrement avec du silicone.&lt;br /&gt;
&lt;br /&gt;
Ce dernier nous a expliqué les différents points importants sur lesquels nous baser afin de choisir au mieux un produit en accord avec le projet. Ne serait-ce que pour le choix de la dureté, il existe une échelle propre au silicone (&amp;quot;Shore hardness scale&amp;quot;), nous pensions au départ rechercher un silicone le plus mou possible, cependant, il faut savoir que le plus le silicone est mou, plus il a tendance à être &amp;quot;collant&amp;quot;. Finalement, après discutions, un shore de 40A (correspondant à la dureté d'une gomme) suffisamment mince fera l'affaire pour la conception des prototypes.&lt;br /&gt;
&lt;br /&gt;
Il nous a également expliqué que le silicone peut être travaillé à l'aide d'additifs et sous cloche à vide afin d'améliorer le moulage, l'absence de &amp;quot;bulles&amp;quot; sur la surface de la pièce et la souplesse. Nous pouvons cependant travailler sans tout cela car il n'est pas spécialement important, pour notre projet, de rechercher des propriétés physiques homogènes dans tout le sextoy.&lt;br /&gt;
&lt;br /&gt;
Pour ce qui est de la création de moules, nous pourrons les effectuer via imprimante 3D. Il existe un bon nombre de tutoriels sur internet pour s'y référer en cas de soucis.&lt;br /&gt;
&lt;br /&gt;
===Impression 3D===&lt;br /&gt;
&lt;br /&gt;
Pour la création d'objets en 3D, de nombreux outils sont disponibles. Nous avons décidé d'utiliser Tinkercad, un outil qui s'intègre directement au navigateur internet utilisé. &lt;br /&gt;
&lt;br /&gt;
L'avantage d'un tel outil est sa grande communauté qui permet un accès simple et rapide à une multitudes de projets dont on pourrait s'inspirer pour générer nos pièces.&lt;br /&gt;
&lt;br /&gt;
====Création des moules====&lt;br /&gt;
&lt;br /&gt;
A l'aide d'une imprimante 3D, nous pouvons concevoir des moules afin de créer des pièces en silicone. Il s'agit de la manière la plus rapide et accessible pour notre projet.&lt;br /&gt;
&lt;br /&gt;
Cette méthode comporte des désavantages, dont le principal est la présence d'imperfection et de non homogénéité dans les pièces réalisées. Ceci n'a pas de grande importance dans la mesure où nous souhaitons du qualitatif.&lt;br /&gt;
&lt;br /&gt;
====Création d'un prototype====&lt;br /&gt;
&lt;br /&gt;
=====Pénis=====&lt;br /&gt;
&lt;br /&gt;
Afin de visualiser qualitativement la forme et le passage des câbles, un prototype imprimé au Fabricarium de Polytech Lille a été réalisé. &lt;br /&gt;
&lt;br /&gt;
Ce prototype se divise en 3 pièces : un boîtier (pour y loger le PCB), un cylindre (afin de reproduire la forme désirée) et un &amp;quot;tête&amp;quot; qui devait à l'origine être un moule en silicone (pour y loger le PCB du capteur de température).&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Sextoy_penis.png|400px|thumb|center|Prototype 3D pénis]]&lt;br /&gt;
&lt;br /&gt;
===Conception des PCB===&lt;br /&gt;
&lt;br /&gt;
Afin de diminuer un maximum la taille des cartes electroniques, nous utilisons principalement des composants CMS. &lt;br /&gt;
&lt;br /&gt;
La conception des cartes peut-être effectué à l'aide de logicels de CAO tels qu'Altium ou Eagle. Dans notre cas, nous avons utilisé Eagle. &lt;br /&gt;
&lt;br /&gt;
Ce travail consiste à créer une librairie regroupant l'intégralité des composants nécessaires et, ensuite, de  créer un schéma du circuit. Une fois le schéma terminé, il ne restera plus qu'à faire le routage et exporter les fichiers au format &amp;quot;Gerber&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Pour ce projet, nous aurons besoin de deux cartes, une par prototype. Chaque carte embarquera des composants similaires, c'est pourquoi nous nous contenterons d'abord d'un seul PCB pour effectuer des tests. Si ces derniers sont concluants, nous pourrons graver le second.&lt;br /&gt;
&lt;br /&gt;
====PCB du pénis====&lt;br /&gt;
&lt;br /&gt;
Le premier PCB imprimé et soudé est celui du pénis. Une première carte avait été imprimé regroupant sur cette dernière : un support pour l'arduino, un accéléromètre, un module bluetooth. &lt;br /&gt;
&lt;br /&gt;
[[Fichier:PCB_penis_VB.png|400px|thumb|center|PCB v1.0]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous avons expérimentés des problèmes dûs aux dimensions de l'accéléromètre, l'utilisation d'un boîtier CMS de type TDFN10 2x2 était optimiste pour la réalisation du projet, compte tenu du matériel à disposition.&lt;br /&gt;
&lt;br /&gt;
C'est pourquoi une seconde carte a été gravée, cette fois sans l'accéléromètre.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:PCB_penis_VF.png|400px|thumb|center|PCB v2.0]]&lt;br /&gt;
&lt;br /&gt;
[[Fichier:PCB_VF.png|400px|thumb|center|PCB v2.0 schema]]&lt;br /&gt;
&lt;br /&gt;
Ce prototype est sensé embarquer un capteur de température que nous avons décidé de mettre sur un PCB à part. Cette carte avait pour but d'être coulé dans le silicone, afin de mesurer la température au plus près de la zone intéressée.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:TEMPERATURE_PCB_VF.png|400px|thumb|center|PCB temperature]]&lt;br /&gt;
&lt;br /&gt;
[[Fichier:TEMPERATURE_VF.png|400px|thumb|center|PCB temperature schema]]&lt;br /&gt;
&lt;br /&gt;
====PCB du vagin====&lt;br /&gt;
&lt;br /&gt;
Compte tenu des soucis rencontrés avec l'accéléromètre, la carte sera gravée afin de pouvoir y plugger un accéléromètre analogique en traversant. Le but étant d'avoir un prototype fonctionnel d'ici la fin du projet.&lt;br /&gt;
&lt;br /&gt;
Nous avons également eu des problèmes avec le module bluetooth utilisé, ce dernier ne pouvant être reconfiguré manuellement par minicom, nous utiliserons le bluetooth HC-05 utilisé pour les essais de code. De même que pour l'accéléromètre, nous prévoirons un endroit pour le plugger sur la carte.&lt;br /&gt;
&lt;br /&gt;
''image PCB vagin''&lt;br /&gt;
&lt;br /&gt;
''Reste à graver le PCB du vagin''&lt;br /&gt;
&lt;br /&gt;
==Gestion des composants==&lt;br /&gt;
===Introduction===&lt;br /&gt;
&lt;br /&gt;
Notre projet implique l'utilisation de capteurs, de servomoteurs et de buzzers, constituant chacun une partie de la programmation embarquée.&lt;br /&gt;
&lt;br /&gt;
Pour cette programmation, nous avons décidé d'utiliser AVR-gcc et ainsi coder les arduinos en C.&lt;br /&gt;
&lt;br /&gt;
Les capteurs utilisés utilisent un protocole de communication IIC (ou I²C, I2C), ce protocole de multiples avantages que nous expliciterons par la suite. Cependant, comme un des capteurs (l'accéléromètre) prévus initialement nous a causé beaucoup de soucis, nous expliciterons également la mesure à l'aide de capteurs analogiques. Ces différents capteurs nous permettront de mesurer l'excitation d'un utilisateur.&lt;br /&gt;
&lt;br /&gt;
Une fois l'excitation mesurée, il faut induire une réponse &amp;quot;physique&amp;quot;. Pour ce faire, nous utilisons d'une part des servomoteurs dans le but de produire une sensation de massage.&lt;br /&gt;
&lt;br /&gt;
D'autre part, nous utilisons également des buzzers.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'' Veuillez noter que le code ne sera pas détaillé dans le wiki, vous pouvez vous référer au dépôt git contenant les différents codes. ''&lt;br /&gt;
&lt;br /&gt;
===Utilisation des capteurs===&lt;br /&gt;
&lt;br /&gt;
====Capteurs par IIC====&lt;br /&gt;
&lt;br /&gt;
Le choix de l'IIC n'était pas anodin. L'IIC permet, pour un bus de seulement deux fils (SDA et SCL), d'utiliser un nombre important de capteurs. Ainsi, si nous décidions au cours du projet de rajouter tel ou tel capteurs, nous n'avions qu'à les greffer à ce bus IIC.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Iic.jpg|400px|center|Schema iic]]&lt;br /&gt;
&lt;br /&gt;
Tout d’abord, nous devons initialiser le bus IIC de l’arduino. Pour ce faire, il suffit de préciser la fréquence désirée, ici 400KHz, dans les registres TWSR (prescaler) et TWBR. (fréquence désirée suivant la fonction TWBR = (Fcpu - 16 Fscl ) / (2 Fscl Prescaler) ) avant de lancer l'utilisation IIC via le bit TWIE.&lt;br /&gt;
&lt;br /&gt;
Comme il peut y avoir potentiellement plusieurs capteurs sur ce bus, il faut respecter un certain protocole afin de récupérer la valeur du capteur de température. Attardons nous sur la lecture d’une valeur sur le capteur de température. Il faut : &lt;br /&gt;
&lt;br /&gt;
* Lancer un message de start&lt;br /&gt;
* Envoyer l’adresse du capteur de température (0x98 dans notre cas)&lt;br /&gt;
* Envoyer l’adresse du registre qui nous intéresse (0x00 pour celui contenant la température), ceci placera le pointeur de registre du capteur sur cette adresse&lt;br /&gt;
* Restart la communication pour laisser la main au capteur&lt;br /&gt;
* Envoyer l’adresse du capteur en ajoutant 1 (Ceci permet de stipuler que nous désirons lire la valeur pointée)&lt;br /&gt;
* Lire la partie haute de la température&lt;br /&gt;
* Lire la partie basse de la température&lt;br /&gt;
* Envoyer un message de stop&lt;br /&gt;
&lt;br /&gt;
Chaque action correspond à l'utilisation d'une fonction de la librairie IIC codée. (cf déport git) Et après chaque action, nous devons vérifier le status du bus dans le registre TWSR. Ce &amp;quot;status&amp;quot; nous donnera des indications sur le bon déroulement de la communication, à savoir la réception d'ACK (équivalent d'accusé de réception) ou confirmation d'envoie de start, restart, etc.&lt;br /&gt;
&lt;br /&gt;
=====Test=====&lt;br /&gt;
&lt;br /&gt;
Le test de la librairie iic s'est fait directement lorsque la carte du capteur de température a été soudée. Pour ce faire, nous utilisons une compilation en mode &amp;quot;DEBUG&amp;quot; (make debug upload) qui nous permettait de lire la valeur des &amp;quot;status&amp;quot; avec minicom. &lt;br /&gt;
Après différents tests, nous avons finalement réussi à faire fonctionner le capteur de température en IIC, ce dernier nous renvoyait bel et bien une valeur de température précise à 0.5degrés près, vérifié à l'aidé d'un autre capteur de température.&lt;br /&gt;
&lt;br /&gt;
Il est néanmoins regrettable que ce capteur ne sera pas utilisable dans les prototypes finaux dans la mesure où il est greffé à une carte dont le module bluetooth n'est pas utilisable.&lt;br /&gt;
&lt;br /&gt;
====Capteurs analogique====&lt;br /&gt;
&lt;br /&gt;
Comme dit précédemment, nous avons abandonné l'utilisation de l’accéléromètre IIC prévu initialement dans le vagin car nous n'avons pas réussi à le souder sur les cartes du pénis. Nous avons donc utilisé ce qui était à notre disposition à savoir un capteur analogique.&lt;br /&gt;
&lt;br /&gt;
La mesure analogique sous AVR se fait simplement via l'utilisation de la fonction ad_sample(numéro de la broche analogique lue). Elle renvoie directement une valeur entre 0 et 255 correspondant à une conversion analogique-numérique de la tension sur la broche lue du capteur.&lt;br /&gt;
&lt;br /&gt;
=====Test=====&lt;br /&gt;
&lt;br /&gt;
Nous avions déjà utilisé ce genre de fonctionnalité dans le projet de système et réseau, donc comme attendu, les tests étaient réussis.&lt;br /&gt;
&lt;br /&gt;
===Contrôle des servomoteurs===&lt;br /&gt;
&lt;br /&gt;
Un servomoteur se contrôle à l'aide d'un signal PWM (Pulse Width Modulation). Ce signal consiste à modifier la largeur de l'impulsion en fonction de la consigne désirée. &lt;br /&gt;
&lt;br /&gt;
La génération de PWM via microcontrôleur se fait à l'aide de TIMERS. Il faut savoir qu'il existe une priorité dans les interruptions, pour un TIMER_X donné, plus le X est proche de 0, plus l'interruption sera prioritaire. Nos signaux PWM se doivent d'être le plus en accord avec nos consignes, c'est pourquoi nous avons choisi d'utiliser les TIMER les plus prioritaires pour les générer. (TIMER0 et TIMER1)&lt;br /&gt;
&lt;br /&gt;
====PWM sur un seul servomoteur====&lt;br /&gt;
&lt;br /&gt;
Notre première manière de procéder consistait à générer la PWM nous même à l'aide du vecteur d'interruption d'un TIMER. La méthode consistait à compter de 0 à 255 en permanence. Lorsque le compteur était inférieur à la consigne, on passait une sortie à l'état haut, sinon elle restait à l'état bas. &lt;br /&gt;
&lt;br /&gt;
Cette méthode simulait plutôt bien le signal PWM et avait pour avantage d'être utilisable pour n'importe quelle de l'arduino. Cependant, cette méthode a le gros désavantage d'être sensible à l'utilisation d'autres interruptions, rendant le TIMER imprécis.&lt;br /&gt;
&lt;br /&gt;
Or, notre projet utilisera d'autres procédures d'interruption. Nous avons donc décidé d'utiliser une méthode plus simple mais nous restreignant sur le choix de nos sorties.&lt;br /&gt;
&lt;br /&gt;
En effet, un atmega possède des registres que l'on peut configurer pour générer des signaux PWM sur des broches spécifiques.&lt;br /&gt;
&lt;br /&gt;
Ainsi, en configurant le registre TCCR0A à 0x81 et TCCR0B à 0x05, on se place en mode PWM non inversée à fréquence élevée. En résumé, cette configuration nous permet de faire varier les signaux PWM en introduisant une consigne dans le registre OCR0A.&lt;br /&gt;
&lt;br /&gt;
Ainsi, nous pouvons donc contrôler le moteur simplement en changeant la consigne dans OCR0A.&lt;br /&gt;
&lt;br /&gt;
====Tests====&lt;br /&gt;
&lt;br /&gt;
Dans un premier lieu, les moteurs servomoteurs ne recevaient pas les consignes. Nous pensions que le fait que la PWM soit en 3V3 était l'origine du problème. Nous avons donc fait le montage à l'aide d'un transistor NPN monté en saturé. Le problème n'a pas été résolu. &lt;br /&gt;
&lt;br /&gt;
Finalement, le soucis viendrait du fait que les tests étaient effectués avec des valeurs du registre OCR0A à 0 (pwm nulle). Nous n'aurons donc pas besoin d'un montage à transistor pour le PCB.&lt;br /&gt;
&lt;br /&gt;
Le but des servomoteurs est d'effectuer un semblant de massage, nous allons donc modifier le code afin d'effectuer la tâche de manière périodique via l'utilisation d'un TIMER.&lt;br /&gt;
&lt;br /&gt;
====Gestion d'un ensemble de servomoteurs====&lt;br /&gt;
&lt;br /&gt;
Dans le vagin, nous utilisons 4 servomoteurs afin de masser l'utilisateur. Nous avons trouvé intéressant de diviser ces moteurs en deux couples afin d'intensifier ou non ce massage en fonction des seuils d'excitation détectés par les capteurs.&lt;br /&gt;
&lt;br /&gt;
Pour ce faire, nous aurons besoin de deux signaux PWM différents, donc de l'utilisation de deux timers configurés en PWM. &lt;br /&gt;
&lt;br /&gt;
Comme dit en introduction de cette section, nous nous imposons l'utilisation du TIMER1 pour cette deuxième PWM. Il existe une différence dans la configuration de cette dernière dans la mesure où le signal peut recevoir des consignes allant de 8 à 16bits en fonction de la configuration. Afin de simplifier les choses, nous avons configuré cette dernière sur 8bits pour lui envoyer les mêmes consignes que pour le TIMER0.&lt;br /&gt;
&lt;br /&gt;
====Tests====&lt;br /&gt;
&lt;br /&gt;
Avant tout, nous devions vérifier que la consigne avait une intensité suffisante pour être envoyée sur deux servomoteurs en même temps. Ce qui était le cas.&lt;br /&gt;
&lt;br /&gt;
Ensuite, nous avons testés des changements de consignes plus ou moins rapides afin de déterminer ce qui répondrait le mieux à nos attentes.&lt;br /&gt;
&lt;br /&gt;
Les tests concluants, nous pouvions passer à la suite.&lt;br /&gt;
&lt;br /&gt;
===Utilisation des buzzers===&lt;br /&gt;
&lt;br /&gt;
En fonction du niveau d'excitation, nous ferons vibrer un ou deux buzzers. Pour ce faire, nous avons fait le choix de souder leur broche GND au GND de nos cartes et ainsi souder leur potentiel VCC à une broche de l'arduino. Ainsi, si nous plaçons la broche à l'état bas, le tension dans le buzzer est nulle et si nous passons la broche à l'état haut, la tension aux bornes du buzzers devient 3.3V et il vibre.&lt;br /&gt;
&lt;br /&gt;
Pour ce faire, nous utilisons simplement deux broches, ici PXX et PXX, que nous avons initialisés en tant que sorties en mettant à un leur bit correspondant dans le registre DDRX. Ainsi, il ne reste plus qu'à commander la valeur haute ou basse de ces broches en mettant à 1 ou 0 leur bit dans le registre PORTX.&lt;br /&gt;
&lt;br /&gt;
====Tests====&lt;br /&gt;
&lt;br /&gt;
Ceci a été testé sur breadboard et était fonctionnel. Cependant, une chose à quoi nous n'avions pas pensé était que lorsque nous les avons soudés sur le PCB, nous aurions dû utiliser des câbles plus épais, car comme nous n'avions pas de prototype sur quoi coller les buzzers, l'un des buzzers s'est arraché de la carte en vibrant.&lt;br /&gt;
&lt;br /&gt;
===TIMER2===&lt;br /&gt;
&lt;br /&gt;
Maintenant que nous avons chaque partie pouvant fonctionner indépendamment, nous avons choisi d'utiliser le dernier TIMER à disposition afin de rendre l'intégralité du programme basé sur les interruptions et ainsi s'assurer que les priorités désirées soient respectées.&lt;br /&gt;
&lt;br /&gt;
Ce TIMER nous servira donc à :&lt;br /&gt;
&lt;br /&gt;
* Effectuer des mesures régulières des capteurs&lt;br /&gt;
* Changer les consignes PWM quand il le faut&lt;br /&gt;
&lt;br /&gt;
Nous avons fait en sorte que ce TIMER provoque une interruption le plus lentement possible (à savoir toutes les 32ms environ), afin de ne pas surcharger le contrôleur inutilement. En effet, la mesure des capteurs n'a pas besoin d'être faite de manière intensive.&lt;br /&gt;
&lt;br /&gt;
====Test====&lt;br /&gt;
&lt;br /&gt;
Au cours des tests, nous nous sommes rendu compte que la mesure d'excitation avec l'accéléromètre ne pouvait être fait que sur une seule mesure du capteur. Ainsi, nous avons décidé de moyenner les valeurs sur 20mesures et calculons ce qui se rapproche de la dérivée des valeurs de l'accéléromètre sur une période donnée.&lt;br /&gt;
&lt;br /&gt;
Ainsi, nous mesurons réellement l'entrain de l'utilisateur sur une période de temps significative et non pas à un instant donné.&lt;br /&gt;
&lt;br /&gt;
===Résumé===&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Resume sextoy.png|center|recap]]&lt;br /&gt;
&lt;br /&gt;
===Conclusion===&lt;br /&gt;
&lt;br /&gt;
Cette partie du projet a été finalisée. Nous avons réussi à utiliser toutes les fonctionnalités &amp;quot;embarquées&amp;quot; de notre projet.&lt;br /&gt;
&lt;br /&gt;
==Gestion de la communication bluetooth==&lt;br /&gt;
===Introduction===&lt;br /&gt;
Dans le cadre de notre projet, la communication entre le sextoy et le téléphone se fera à faible portée. C'est pourquoi nous avons considéré comme intéressante l'utilisation de la technologie bluetooth.&lt;br /&gt;
&lt;br /&gt;
La première partie consiste à coder une librairie au niveau de l'arduino. Cette librairie, codée en C, consiste simplement en une lecture / écriture via les broches RX/TX de l'arduino et du module bluetooth. &lt;br /&gt;
&lt;br /&gt;
La seconde partie conssite à coder la partie application mobile qui communiquera avec la arduino.&lt;br /&gt;
&lt;br /&gt;
Une fois que cette transmission sera mise en place, il ne reste plus qu'à expliciter le protocole des paquets transmis.&lt;br /&gt;
&lt;br /&gt;
===Arduino===&lt;br /&gt;
&lt;br /&gt;
Afin de communiquer à travers le module bluetooth, il faut relier la broche RX de l'arduino à celle TX du module bluetooth et inversement. Pour tester nos codes, nous avons utilisé un module bluetooth HC-05 et l'application [https://play.google.com/store/apps/details?id=Qwerty.BluetoothTerminal&amp;amp;hl=fr| Bluetooth Terminal]. &lt;br /&gt;
&lt;br /&gt;
Dans la mesure où l'arduino devra traiter l'arrivée asynchrone de messages tout en effectuant le traitement des capteurs, il est intéressant d'effectuer des lectures à l'aide d'interruptions. Pour cela, nous utilisons le vecteur d'interruption USART_RXC_vect qui déclenchera la fonction de lecture à chaque fois qu'un message est reçu.&lt;br /&gt;
&lt;br /&gt;
Une fois le niveau d'excitation lu, nous pouvons utiliser la fonction &amp;quot;lovometre()&amp;quot; qui activera ou désactivera tel ou tel dispositif en fonction du niveau reçu. En réponse à cette lecture, pour confirmer notre réception, nous envoyons le niveau d'excitation actuel de l'utilisateur.&lt;br /&gt;
&lt;br /&gt;
====Test====&lt;br /&gt;
&lt;br /&gt;
A l'aide de [https://play.google.com/store/apps/details?id=Qwerty.BluetoothTerminal&amp;amp;hl=fr| Bluetooth Terminal], nous avons pu effectuer un test sans l'application mobile de notre projet. Ayant fait ces tests avant la partie &amp;quot;gestion des composants&amp;quot;, nous nous sommes juste assurés du bon fonctionnement de la communication en effectuant un echo à chaque réception.&lt;br /&gt;
&lt;br /&gt;
===Module bluetooth utilisé===&lt;br /&gt;
&lt;br /&gt;
Le module bluetooth embarqué sur le PCB est un module reprogrammable. Ainsi il était nécessaire de connaître la configuration par défaut du composant, dans le but de savoir s'il fallait ou non prévoir un pcb de reconfiguration.&lt;br /&gt;
&lt;br /&gt;
Le CYBLE-012012 est configuré par défaut avec le firmware &amp;quot;EZ-Serial BLE Firmware&amp;quot;. La configuration par défaut de ce firmware est la suivante : &lt;br /&gt;
&lt;br /&gt;
* 115200 baud, 8bits de donnée, pas de bit de parité, 1bit de stop&lt;br /&gt;
* &amp;quot;UART flow control&amp;quot; désactivé&lt;br /&gt;
* firmware activé en mode &amp;quot;auto-start&amp;quot;, qui correspond à une recherche automatique de connection bluetooth et de redirection RX-TX en cas de connection&lt;br /&gt;
&lt;br /&gt;
Ces [http://www.cypress.com/file/285326/download| informations] sont importantes car, si elles sont vraiment respectées, nous n'auront pas à créer notre propre kit de développement, ce qui est un gain de temps considérable.&lt;br /&gt;
&lt;br /&gt;
Qui plus est, l'utilisation d'une fonction &amp;quot;auto-start&amp;quot; est en adéquation avec le module bluetooth HC-05 utilisé pour les tests. Nous pouvons donc commencer la programmation mobile du bluetooth en parallèle de l'impression des pcb. Et, dans le cas où les pcb seraient disfonctionnels, nous pourront quand meme envisager un prototype sur breadboard.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Test====&lt;br /&gt;
&lt;br /&gt;
Après avoir alimenté la carte, nous n'avons pas pu nous connecter au module bluetooth, ce dernier n'étant même pas visible dans les appareils alentours. &lt;br /&gt;
&lt;br /&gt;
Nous avons alors vérifié si la carte était correctement alimentée. Pour ce faire, nous avons mesuré différents points de tensions sensé être mis par défaut en PULL-DOWN ou PULL-UP à des niveaux de tensions d'1.7V. Ces niveaux étaient respectés. Le problème n'est donc pas d'ordre électronique. &lt;br /&gt;
&lt;br /&gt;
Par la suite, nous avons voulu vérifier la communication du module. Ce dernier, en déclenchant l'auto start est sensé émettre (en suivant le protocole UART rappelé précédemment) un message START. Nous avons donc inspecté ceci en utilisant minicom. En effet, minicom reçoit un message, mais ne sait pas le déchiffré. Qui plus est, impossible d'envoyer un message au module afin de le reprogrammer (de manière similaire à un XBee).&lt;br /&gt;
&lt;br /&gt;
Devant ces soucis, nous décidons donc d'abandonner ce module bluetooth et de poursuivre avec celui utilisé pour les essais de programmation, le HC-05.&lt;br /&gt;
&lt;br /&gt;
===Application mobile===&lt;br /&gt;
===Protocole de transmission===&lt;br /&gt;
&lt;br /&gt;
==Conception de l'application Android==&lt;br /&gt;
===Envoie et réception de SMS===&lt;br /&gt;
Afin de ne pas utiliser de serveur, les deux appareils Android doivent synchroniser l'envoi de paquet UDP, pour cela nous avons voulu utiliser des SMS.&lt;br /&gt;
Les SMS permettent d'envoyer des informations, comme les adresses IP, les ports utilisés, l'heure à laquelle les deux téléphones vont envoyer leur premier paquet UDP.&lt;br /&gt;
&lt;br /&gt;
Dans un premier temps nous avons créer une application pour envoyer les SMS:&lt;br /&gt;
&lt;br /&gt;
L'application était très simple, l'envoi de SMS se faisait en deux lignes&lt;br /&gt;
  // initialisation d'une variable sms gérant les sms&lt;br /&gt;
  SmsManager sms = SmsManager.getDefault() ;&lt;br /&gt;
  // envoie un sms comportant le texte de la variable message de type String au numéro contenu dans la variable num de type String&lt;br /&gt;
  sms.sendTextMessage(num, null, message, null, null);&lt;br /&gt;
&lt;br /&gt;
Dans un deuxième temps il fallait recevoir un SMS, ou plutôt savoir qu'un nouvel SMS avait été reçu :&lt;br /&gt;
&lt;br /&gt;
Pour cela il fallait utiliser un thread qui était appelé par interruption avec la réception d'un SMS comme vecteur d’interruption.&lt;br /&gt;
Ce thread effectuait ce qui était demandé dans sa fonction onReceive(), comme par exemple lire les informations contenues dans le SMS:&lt;br /&gt;
  public class IncomingSms extends BroadcastReceiver {&lt;br /&gt;
     final SmsManager sms = SmsManager.getDefault();&lt;br /&gt;
     public void onReceive(Context context, Intent intent) {&lt;br /&gt;
       //Ce qui doit etre fait lors de la reception de SMS&lt;br /&gt;
     }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Malheureusement ce programme ne marchait pas pendant des semaines, malgré de nombreuses modifications et de nombreux essais. Et le problème semblait être ma carte SIM, car en changeant de SIM, tous les programmes contenant ce code fonctionnaient parfaitement.&lt;br /&gt;
&lt;br /&gt;
===Protocole UDP===&lt;br /&gt;
Afin d'effectuer un échange de données entre les deux utilisateurs, et essayer de faire une vidéo-conférence, nous avons choisi d'utiliser le protocole UDP.&lt;br /&gt;
&lt;br /&gt;
Une première application permettait de tester l'envoi de paquet UDP, pour cela un serveur UDP a été utilisé sur un PC.&lt;br /&gt;
Le serveur attendait un message et l'affichait quand il le recevait.&lt;br /&gt;
&lt;br /&gt;
Pour envoyer un paquet nous utilisons :&lt;br /&gt;
&lt;br /&gt;
 DatagramSocket ds = null;&lt;br /&gt;
 ds = new DatagramSocket(PortA);&lt;br /&gt;
 DatagramPacket dp;&lt;br /&gt;
 InetAddress local = InetAddress.getByName(AdrIp);&lt;br /&gt;
 dp = new DatagramPacket(message.getBytes(),message.length(),local,PortA );&lt;br /&gt;
 ds.setBroadcast(true);&lt;br /&gt;
 ds.send(dp);&lt;br /&gt;
&lt;br /&gt;
Ce code crée un paquet qui comporte l’adresse et le port du destinataire, mais surtout les données à envoyer.&lt;br /&gt;
Ce paquet est ensuite envoyer grâce à un socket.&lt;br /&gt;
&lt;br /&gt;
Une fois que tout fonctionnait comme il le fallait, nous avons pu créer une application qui comportait l'envoi et la réception de paquet.&lt;br /&gt;
En mettant l'application sur deux téléphones on pouvait tester si tout fonctionnait.&lt;br /&gt;
Les tests ont seulement été effectué sur un réseau local, on ne sait pas pour le moment si des box internet pourraient empêcher la transmission.&lt;br /&gt;
Pour la réception nous utilisons :&lt;br /&gt;
 dsocket.receive(packet);&lt;br /&gt;
 buff = packet.getData();&lt;br /&gt;
&lt;br /&gt;
Pour récupérer les données du paquet dans la variable buff, il suffit ensuite de créer une boucle pour recevoir plusieurs messages.&lt;br /&gt;
La fonction de réception étant bloquante, il a été préférable de l'effectuer dans un thread.&lt;br /&gt;
&lt;br /&gt;
L'application est donc composé de un thread d'écoute, un thread d'envoi et d'un thread principal gérant l'affichage et appelant le thread d'envoi lorsque que le bouton de l'application est appuyé.&lt;br /&gt;
Voici une image de l'application, les champs d’adresseIp et de port du destinataire sont à remplir avant d'envoyer un paquet UDP.&lt;br /&gt;
Et le port d'écoute est défini dans le code de cette application, ce qui n'est pas très pratique, mais suffisant pour les tests.&lt;br /&gt;
&lt;br /&gt;
Le TextView est mis à jour à chaque que le bouton envoyer est appuyé, en prenant comme valeur celle d'un registre comprenant la valeurs du dernier paquet UDP reçu.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:ClientUdp.png]]&lt;br /&gt;
&lt;br /&gt;
===Application principale===&lt;br /&gt;
Afin d'être ergonomique,l'application doit pouvoir enregistrer des contacts, pour plus facilement communiquer avec eux.&lt;br /&gt;
Nous avons choisi de ne pas utiliser les contacts du téléphone, pour pouvoir avoir des contacts &amp;quot;confidentiels&amp;quot; qui ne seront que dans la base de donnée de l'application.&lt;br /&gt;
&lt;br /&gt;
Il fallait donc créer une base de donnée, nous avons donc utilisé SQLite car cette bibliothèque est utilisée par Android comme base de données embarquée.&lt;br /&gt;
La base ne comporte qu'une seule table, avec seulement les pseudos et les numéros de téléphone.&lt;br /&gt;
&lt;br /&gt;
Une fois la base crée, pour interagir avec, nous avons coder des activités:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
- Ajout de contact:&lt;br /&gt;
&lt;br /&gt;
Il faut entrer dans les champs de textes les informations pour la base de données,puis appuyer sur le bouton &amp;quot;Ajouter&amp;quot; pour créer un nouveau contact dans la base de donnée.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:AjoutContact.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-Fiche de Contact: &lt;br /&gt;
&lt;br /&gt;
Affiche le pseudo et le numéro de téléphone dans les &amp;quot;TextView&amp;quot;, et permet de : supprimer le contact en cliquant sur la croix, envoyer un SMS en cliquant sur l'icone &amp;quot;Message&amp;quot;, mais aussi commencer une communication UDP en cliquant sur le téléphone.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:FicheContact.png]]  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-Liste de contact :&lt;br /&gt;
&lt;br /&gt;
Affiche la liste de contacts, en cliquant sur un des contacts on arrive sur la page Fiche de Contact, et en cliquant sur le plus on arrive sur la page Ajout de Contact.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:ListView.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ensuite il faut ajouter la gestion de communication:&lt;br /&gt;
&lt;br /&gt;
-Les SMS :&lt;br /&gt;
&lt;br /&gt;
Il faut remplir les champs de texte et appuyer sur SMS pour envoyer un message du type&lt;br /&gt;
&lt;br /&gt;
Message&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Address Ip :&amp;quot; Addresse Ip&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Port :&amp;quot; Port&lt;br /&gt;
&lt;br /&gt;
Avec Message,Addresse Ip, et Port les champs à remplir, &amp;quot;Addresse Ip :&amp;quot; et &amp;quot;Port :&amp;quot; deux chaines de caractères.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:SMS.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-Protocole UDP : &lt;br /&gt;
&lt;br /&gt;
Quatre champs sont à remplir, cliquer sur Envoyer pour passez à l'activité de gestion Bluetooth.&lt;br /&gt;
&lt;br /&gt;
Les champs sont:&lt;br /&gt;
&lt;br /&gt;
-L'addresse Ip&lt;br /&gt;
&lt;br /&gt;
-Le port destination&lt;br /&gt;
&lt;br /&gt;
-Le port source&lt;br /&gt;
&lt;br /&gt;
-L'heure qui n'est pas utilisée, qui devait servir pour la synchronisation.&lt;br /&gt;
&lt;br /&gt;
Les valeurs des champs sont conservés pour la communication UDP à venir.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:UDP.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-Gestion Bluetooth :&lt;br /&gt;
&lt;br /&gt;
En cliquant sur &amp;quot;Paired Devices&amp;quot;, l'application affichera la liste des appareils appairés.&lt;br /&gt;
&lt;br /&gt;
Puis en cliquant un des appareils, l'application essayera de connecter avec, tout en lançant l'activité UDP avec Bluetooth.&lt;br /&gt;
&lt;br /&gt;
Si l'on souhaite ne pas utiliser de périphérique Bluetooth, il suffit de cliquer sur le bouton moins en haut à droite.&lt;br /&gt;
&lt;br /&gt;
L'activité UDP sans Bluetooth se lancera.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Bluetooth.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-Communication UDP avec Bluetooth:&lt;br /&gt;
&lt;br /&gt;
Pour lancer la communication UDP, appuyer sur le bouton Off ,il passera en mode On.&lt;br /&gt;
&lt;br /&gt;
Si vous cliquez sur le bouton On il passera en mode Off, et coupera la communication UDP.&lt;br /&gt;
&lt;br /&gt;
Le bouton envoyer, permet de forcer l'envoi d'un paquet UDP.&lt;br /&gt;
&lt;br /&gt;
Et le bouton croix coupe toutes les communications(UDP et Bluetooth), et retourne à la page précédente.&lt;br /&gt;
&lt;br /&gt;
Lorsque l'application reçoit un paquet UDP, un message est envoyé via Bluetooth au sextoys.&lt;br /&gt;
&lt;br /&gt;
Celui-ci répond automatiquement en envoyant une valeur moyennée des ses capteurs, cette valeur est récupérée et mise dans un registre.&lt;br /&gt;
&lt;br /&gt;
En parallèle, toutes les secondes un paquet UDP est envoyé et les données envoyés sont celle du registre.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Com.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-Communication UDP sans Bluetooth.&lt;br /&gt;
&lt;br /&gt;
Le bouton On/Off est utilisé comme dans l'activité &amp;quot;Communication UDP avec Bluetooth&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Les boutons de niveaux, mettent une valeur dans un même registre.&lt;br /&gt;
&lt;br /&gt;
Chaque boutons correspond à une valeur, qui correspondent avec un niveau d'excitation du sextoys.&lt;br /&gt;
&lt;br /&gt;
Ainsi toutes les secondes, un paquet UDP est envoyé avec comme donnée la valeur du registre.&lt;br /&gt;
&lt;br /&gt;
Lorsqu'un paquet UDP est reçu, la donnée reçue est mise dans un registre qui détermine l’affichage du &amp;quot;TextView&amp;quot; en bas à droite.&lt;br /&gt;
&lt;br /&gt;
Ce TextView est mis à jours en même temps qu'un paquet UDP est envoyé.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Co2.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Streaming vidéo===&lt;br /&gt;
&lt;br /&gt;
Nous nous sommes attardés sur le streaming vidéo avant d'avoir fait l'application principale et le gestion du Bluetooth. &lt;br /&gt;
Nous avions trouvé un code sur Github, qui permettait de streamer la vidéo du téléphone sur un pc.&lt;br /&gt;
Il aurait fallut adapter ce code pour streamer entre deux téléphones.&lt;br /&gt;
Mais la recherche du code avait pris trop de temps, et il restait encore trop de chose importante à faire avant de pouvoir continuer cette partie.&lt;br /&gt;
C'est pourquoi il n'y a pas de Streaming vidéo dans l'application finale.&lt;br /&gt;
&lt;br /&gt;
== Rapport et codes ==&lt;br /&gt;
&lt;br /&gt;
Rapport : [[Fichier:CR_sextoy_connecte.pdf]]&lt;br /&gt;
&lt;br /&gt;
[https://archives.plil.fr/croussel/Projet_sextoy_connecte.git Codes]&lt;/div&gt;</summary>
		<author><name>Tstieven</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=IMA4_2016/2017_P14&amp;diff=42868</id>
		<title>IMA4 2016/2017 P14</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=IMA4_2016/2017_P14&amp;diff=42868"/>
				<updated>2017-05-20T16:02:46Z</updated>
		
		<summary type="html">&lt;p&gt;Tstieven : /* Conception de l'application Android */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Projet IMA4 : Sex-toy connecté =&lt;br /&gt;
&lt;br /&gt;
== Présentation du projet ==&lt;br /&gt;
&lt;br /&gt;
L'objectif de ce projet est de développer un système d'échange entre deux partenaires distants afin de rendre plus facile la vie de couple à distance.&lt;br /&gt;
&lt;br /&gt;
Pour ce faire, le dispositif sera constitué de deux sextoys connectés (un par appareil génital désiré) à leur téléphone portable respectif. Une application mobile permettra aux utilisateurs de s'échanger des données de manière sécurisé, ceci au travers d'un serveur embarqué dans le téléphone portable.&lt;br /&gt;
&lt;br /&gt;
Les données échangées pourront être l'accélération ou la température. Elles seront traitées et transmises au sextoy qui adaptera sa vitesse, son retour vibratoire ou sa position en conséquence.&lt;br /&gt;
&lt;br /&gt;
Les sextoys pourraient être composés de :&lt;br /&gt;
* Pour l'appareil masculin (dédié à la femme) :&lt;br /&gt;
:* un servomoteur ;&lt;br /&gt;
:* un vibreur ;&lt;br /&gt;
:* une sonde de température ;&lt;br /&gt;
:* un accéléromètre.&lt;br /&gt;
* Pour l'appareil féminin (dédié à l'homme) :&lt;br /&gt;
:* 4 servomoteurs (dans le but de &amp;quot;masser&amp;quot; en déplaçant le silicone);&lt;br /&gt;
:* des vibreurs ;&lt;br /&gt;
:* un accéléromètre.&lt;br /&gt;
* Pour les deux appareils :&lt;br /&gt;
:* un micro-contrôleur (Arduino mini) ;&lt;br /&gt;
:* un module de transmission / réception bluetooth afin de se connecter au téléphone ;&lt;br /&gt;
:* du silicone.&lt;br /&gt;
	&lt;br /&gt;
* L'application mobile devra :&lt;br /&gt;
:* mettre en place une communication cryptée à travers un serveur (embarqué ou bien intermédiaire ?) ;&lt;br /&gt;
:* effectuer un échange de données en bluetooth avec le sextoy connecté.&lt;br /&gt;
&lt;br /&gt;
* L'application mobile pourra :&lt;br /&gt;
:* utiliser la vidéo-conférence ;&lt;br /&gt;
:* enregistrer les meilleurs moments et enventuellement pouvoir les partager ;&lt;br /&gt;
:* effectuer une recherche de partenaire aléatoire.&lt;br /&gt;
&lt;br /&gt;
* S'il nous reste du temps, il peut être envisageable de :&lt;br /&gt;
:* mettre en place un réseau social interne à Polytech.&lt;br /&gt;
&lt;br /&gt;
== Liste des tâches ==&lt;br /&gt;
* Conception de l'appareil masculin (Cédric)&lt;br /&gt;
:* mettre en place le bus I2C avec les différents capteurs ;&lt;br /&gt;
:* création d'un PCB au format gerber ;&lt;br /&gt;
:* création d'un prototype.&lt;br /&gt;
&lt;br /&gt;
* Conception de l'appareil féminin (Cédric)&lt;br /&gt;
:* mettre en place le bus I2C ;&lt;br /&gt;
:* traitement des données afin d'en déduire la position et l'entrain de l'utilisateur ;&lt;br /&gt;
:* création d'un PCB ;&lt;br /&gt;
:* création d'un prototype.&lt;br /&gt;
&lt;br /&gt;
* Communication bluetooth (Cédric et Thomas)&lt;br /&gt;
:* étudier l'émission/réception vue de l'arduino ;&lt;br /&gt;
:* étudier l'émission/réception vue du téléphone ;&lt;br /&gt;
:* mise en place du protocole ;&lt;br /&gt;
:* test de portée.&lt;br /&gt;
&lt;br /&gt;
* Développement mobile (Thomas)&lt;br /&gt;
:* déterminer la meilleure approche : utilisation d'un serveur intermédiaire ou bien mise en place d'un &amp;quot;client-serveur&amp;quot; dans l'application mobile ;&lt;br /&gt;
:* mettre en place le choix retenu ;&lt;br /&gt;
:* tester dans un premier temps une transmission de texte ;&lt;br /&gt;
:* programmer le traitement de données reçues par bluetooth ;&lt;br /&gt;
:* rajouter un côté esthétique à l'application.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Recapitulatif sextoy.png|center|recap]]&lt;br /&gt;
&lt;br /&gt;
==Feuille d'heures==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Tâche !! Prélude !! Heures S1 !! Heures S2 !! Heures S3 !! Heures S4 !! Heures vacances !! Heures S5 !! Heures S6 !! Heures S7 !! Heures S8 !! Heures S9 !! Heures S10 !! Heures vacances et après!! Total&lt;br /&gt;
|-&lt;br /&gt;
| Définition cahier des charges &lt;br /&gt;
| 2H&lt;br /&gt;
| 2H&lt;br /&gt;
| 1H&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 5H&lt;br /&gt;
|-&lt;br /&gt;
| Dimensionnement et établissement de la liste de matériel&lt;br /&gt;
| &lt;br /&gt;
| 3H&lt;br /&gt;
| 4H&lt;br /&gt;
|&lt;br /&gt;
| 4H&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 11H&lt;br /&gt;
|-&lt;br /&gt;
| Établissement de la liste et de la répartition des tâches&lt;br /&gt;
| 1H&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 1H&lt;br /&gt;
|-&lt;br /&gt;
| Appareil masculin : programmation&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 1H&lt;br /&gt;
| 2H&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 6H&lt;br /&gt;
| 9H &lt;br /&gt;
|-&lt;br /&gt;
| Appareil masculin : étude des datasheets&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 1H&lt;br /&gt;
| 1H&lt;br /&gt;
|&lt;br /&gt;
| 4H&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| 1H&lt;br /&gt;
|&lt;br /&gt;
| 7H&lt;br /&gt;
|-&lt;br /&gt;
| Appareil masculin : PCB&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 4H&lt;br /&gt;
| 4H&lt;br /&gt;
| 6H&lt;br /&gt;
| 30H&lt;br /&gt;
| 44H&lt;br /&gt;
|-&lt;br /&gt;
| Appareil masculin : 3D&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| 6H&lt;br /&gt;
| 6H&lt;br /&gt;
|-&lt;br /&gt;
| Conception de l'appareil féminin&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 2H&lt;br /&gt;
| 1H&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 3H&lt;br /&gt;
|-&lt;br /&gt;
| Liaison bluetooth (embarqué)&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 3H&lt;br /&gt;
| 1H&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 8H&lt;br /&gt;
| 12H&lt;br /&gt;
|-&lt;br /&gt;
| Liaison bluetooth (téléphone)&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 15H&lt;br /&gt;
| 15H&lt;br /&gt;
|-&lt;br /&gt;
| Recherche et discussion autour de la meilleure approche de communication&lt;br /&gt;
| 2H&lt;br /&gt;
| 2H&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 4H&lt;br /&gt;
|-&lt;br /&gt;
| Synchronisation temporelle des téléphones (par sms)&lt;br /&gt;
| &lt;br /&gt;
| 2H&lt;br /&gt;
| 4H&lt;br /&gt;
| 6H&lt;br /&gt;
| 8H&lt;br /&gt;
| 6H&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 26H&lt;br /&gt;
|-&lt;br /&gt;
| Transmission de paquets UDP&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 4H&lt;br /&gt;
| 4H&lt;br /&gt;
| 4H&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 6H&lt;br /&gt;
| 18H&lt;br /&gt;
|-&lt;br /&gt;
| Streaming video(UDP)&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 4H&lt;br /&gt;
| 4H&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 8H&lt;br /&gt;
|-&lt;br /&gt;
| Application et bases de données&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 6H&lt;br /&gt;
| 20H&lt;br /&gt;
| 26H&lt;br /&gt;
|-&lt;br /&gt;
| Total&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 195H&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Conception des sextoys==&lt;br /&gt;
===Introduction===&lt;br /&gt;
&lt;br /&gt;
La conception de sextoys doit respecter différents règles, notamment sanitaires. C'est pourquoi nous nous sommes intéressés à l'utilisation de silicone pour ce projet. Nous avons notamment rencontré un ingénieur compétant dans ce domaine afin de nous aiguiller sur cette éventuelle conception.&lt;br /&gt;
&lt;br /&gt;
La conception passera également par une conception 3D que nous effectuerons à l'aide d'imprimantes 3D au fabricarium de Polytech Lille.&lt;br /&gt;
&lt;br /&gt;
Enfin, les prototypes seront embarqués de cartes électroniques (aussi appelés PCB) que nous constituerons.&lt;br /&gt;
&lt;br /&gt;
===Choix du silicone, rencontre avec Mario Sanz===&lt;br /&gt;
&lt;br /&gt;
Le projet nécessite l'utilisation d'une matière souple et non irritante, c'est pourquoi nous avons choisi de nous tourner vers l'utilisation du silicone. Afin de choisir au mieux le produit correspondant à nos besoins, nous avons rencontré Mario Sanz, ingénieur à l'INRIA, qui travail régulièrement avec du silicone.&lt;br /&gt;
&lt;br /&gt;
Ce dernier nous a expliqué les différents points importants sur lesquels nous baser afin de choisir au mieux un produit en accord avec le projet. Ne serait-ce que pour le choix de la dureté, il existe une échelle propre au silicone (&amp;quot;Shore hardness scale&amp;quot;), nous pensions au départ rechercher un silicone le plus mou possible, cependant, il faut savoir que le plus le silicone est mou, plus il a tendance à être &amp;quot;collant&amp;quot;. Finalement, après discutions, un shore de 40A (correspondant à la dureté d'une gomme) suffisamment mince fera l'affaire pour la conception des prototypes.&lt;br /&gt;
&lt;br /&gt;
Il nous a également expliqué que le silicone peut être travaillé à l'aide d'additifs et sous cloche à vide afin d'améliorer le moulage, l'absence de &amp;quot;bulles&amp;quot; sur la surface de la pièce et la souplesse. Nous pouvons cependant travailler sans tout cela car il n'est pas spécialement important, pour notre projet, de rechercher des propriétés physiques homogènes dans tout le sextoy.&lt;br /&gt;
&lt;br /&gt;
Pour ce qui est de la création de moules, nous pourrons les effectuer via imprimante 3D. Il existe un bon nombre de tutoriels sur internet pour s'y référer en cas de soucis.&lt;br /&gt;
&lt;br /&gt;
===Impression 3D===&lt;br /&gt;
&lt;br /&gt;
Pour la création d'objets en 3D, de nombreux outils sont disponibles. Nous avons décidé d'utiliser Tinkercad, un outil qui s'intègre directement au navigateur internet utilisé. &lt;br /&gt;
&lt;br /&gt;
L'avantage d'un tel outil est sa grande communauté qui permet un accès simple et rapide à une multitudes de projets dont on pourrait s'inspirer pour générer nos pièces.&lt;br /&gt;
&lt;br /&gt;
====Création des moules====&lt;br /&gt;
&lt;br /&gt;
A l'aide d'une imprimante 3D, nous pouvons concevoir des moules afin de créer des pièces en silicone. Il s'agit de la manière la plus rapide et accessible pour notre projet.&lt;br /&gt;
&lt;br /&gt;
Cette méthode comporte des désavantages, dont le principal est la présence d'imperfection et de non homogénéité dans les pièces réalisées. Ceci n'a pas de grande importance dans la mesure où nous souhaitons du qualitatif.&lt;br /&gt;
&lt;br /&gt;
====Création d'un prototype====&lt;br /&gt;
&lt;br /&gt;
=====Pénis=====&lt;br /&gt;
&lt;br /&gt;
Afin de visualiser qualitativement la forme et le passage des câbles, un prototype imprimé au Fabricarium de Polytech Lille a été réalisé. &lt;br /&gt;
&lt;br /&gt;
Ce prototype se divise en 3 pièces : un boîtier (pour y loger le PCB), un cylindre (afin de reproduire la forme désirée) et un &amp;quot;tête&amp;quot; qui devait à l'origine être un moule en silicone (pour y loger le PCB du capteur de température).&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Sextoy_penis.png|400px|thumb|center|Prototype 3D pénis]]&lt;br /&gt;
&lt;br /&gt;
===Conception des PCB===&lt;br /&gt;
&lt;br /&gt;
Afin de diminuer un maximum la taille des cartes electroniques, nous utilisons principalement des composants CMS. &lt;br /&gt;
&lt;br /&gt;
La conception des cartes peut-être effectué à l'aide de logicels de CAO tels qu'Altium ou Eagle. Dans notre cas, nous avons utilisé Eagle. &lt;br /&gt;
&lt;br /&gt;
Ce travail consiste à créer une librairie regroupant l'intégralité des composants nécessaires et, ensuite, de  créer un schéma du circuit. Une fois le schéma terminé, il ne restera plus qu'à faire le routage et exporter les fichiers au format &amp;quot;Gerber&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Pour ce projet, nous aurons besoin de deux cartes, une par prototype. Chaque carte embarquera des composants similaires, c'est pourquoi nous nous contenterons d'abord d'un seul PCB pour effectuer des tests. Si ces derniers sont concluants, nous pourrons graver le second.&lt;br /&gt;
&lt;br /&gt;
====PCB du pénis====&lt;br /&gt;
&lt;br /&gt;
Le premier PCB imprimé et soudé est celui du pénis. Une première carte avait été imprimé regroupant sur cette dernière : un support pour l'arduino, un accéléromètre, un module bluetooth. &lt;br /&gt;
&lt;br /&gt;
[[Fichier:PCB_penis_VB.png|400px|thumb|center|PCB v1.0]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous avons expérimentés des problèmes dûs aux dimensions de l'accéléromètre, l'utilisation d'un boîtier CMS de type TDFN10 2x2 était optimiste pour la réalisation du projet, compte tenu du matériel à disposition.&lt;br /&gt;
&lt;br /&gt;
C'est pourquoi une seconde carte a été gravée, cette fois sans l'accéléromètre.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:PCB_penis_VF.png|400px|thumb|center|PCB v2.0]]&lt;br /&gt;
&lt;br /&gt;
[[Fichier:PCB_VF.png|400px|thumb|center|PCB v2.0 schema]]&lt;br /&gt;
&lt;br /&gt;
Ce prototype est sensé embarquer un capteur de température que nous avons décidé de mettre sur un PCB à part. Cette carte avait pour but d'être coulé dans le silicone, afin de mesurer la température au plus près de la zone intéressée.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:TEMPERATURE_PCB_VF.png|400px|thumb|center|PCB temperature]]&lt;br /&gt;
&lt;br /&gt;
[[Fichier:TEMPERATURE_VF.png|400px|thumb|center|PCB temperature schema]]&lt;br /&gt;
&lt;br /&gt;
====PCB du vagin====&lt;br /&gt;
&lt;br /&gt;
Compte tenu des soucis rencontrés avec l'accéléromètre, la carte sera gravée afin de pouvoir y plugger un accéléromètre analogique en traversant. Le but étant d'avoir un prototype fonctionnel d'ici la fin du projet.&lt;br /&gt;
&lt;br /&gt;
Nous avons également eu des problèmes avec le module bluetooth utilisé, ce dernier ne pouvant être reconfiguré manuellement par minicom, nous utiliserons le bluetooth HC-05 utilisé pour les essais de code. De même que pour l'accéléromètre, nous prévoirons un endroit pour le plugger sur la carte.&lt;br /&gt;
&lt;br /&gt;
''image PCB vagin''&lt;br /&gt;
&lt;br /&gt;
''Reste à graver le PCB du vagin''&lt;br /&gt;
&lt;br /&gt;
==Gestion des composants==&lt;br /&gt;
===Introduction===&lt;br /&gt;
&lt;br /&gt;
Notre projet implique l'utilisation de capteurs, de servomoteurs et de buzzers, constituant chacun une partie de la programmation embarquée.&lt;br /&gt;
&lt;br /&gt;
Pour cette programmation, nous avons décidé d'utiliser AVR-gcc et ainsi coder les arduinos en C.&lt;br /&gt;
&lt;br /&gt;
Les capteurs utilisés utilisent un protocole de communication IIC (ou I²C, I2C), ce protocole de multiples avantages que nous expliciterons par la suite. Cependant, comme un des capteurs (l'accéléromètre) prévus initialement nous a causé beaucoup de soucis, nous expliciterons également la mesure à l'aide de capteurs analogiques. Ces différents capteurs nous permettront de mesurer l'excitation d'un utilisateur.&lt;br /&gt;
&lt;br /&gt;
Une fois l'excitation mesurée, il faut induire une réponse &amp;quot;physique&amp;quot;. Pour ce faire, nous utilisons d'une part des servomoteurs dans le but de produire une sensation de massage.&lt;br /&gt;
&lt;br /&gt;
D'autre part, nous utilisons également des buzzers.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'' Veuillez noter que le code ne sera pas détaillé dans le wiki, vous pouvez vous référer au dépôt git contenant les différents codes. ''&lt;br /&gt;
&lt;br /&gt;
===Utilisation des capteurs===&lt;br /&gt;
&lt;br /&gt;
====Capteurs par IIC====&lt;br /&gt;
&lt;br /&gt;
Le choix de l'IIC n'était pas anodin. L'IIC permet, pour un bus de seulement deux fils (SDA et SCL), d'utiliser un nombre important de capteurs. Ainsi, si nous décidions au cours du projet de rajouter tel ou tel capteurs, nous n'avions qu'à les greffer à ce bus IIC.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Iic.jpg|400px|center|Schema iic]]&lt;br /&gt;
&lt;br /&gt;
Tout d’abord, nous devons initialiser le bus IIC de l’arduino. Pour ce faire, il suffit de préciser la fréquence désirée, ici 400KHz, dans les registres TWSR (prescaler) et TWBR. (fréquence désirée suivant la fonction TWBR = (Fcpu - 16 Fscl ) / (2 Fscl Prescaler) ) avant de lancer l'utilisation IIC via le bit TWIE.&lt;br /&gt;
&lt;br /&gt;
Comme il peut y avoir potentiellement plusieurs capteurs sur ce bus, il faut respecter un certain protocole afin de récupérer la valeur du capteur de température. Attardons nous sur la lecture d’une valeur sur le capteur de température. Il faut : &lt;br /&gt;
&lt;br /&gt;
* Lancer un message de start&lt;br /&gt;
* Envoyer l’adresse du capteur de température (0x98 dans notre cas)&lt;br /&gt;
* Envoyer l’adresse du registre qui nous intéresse (0x00 pour celui contenant la température), ceci placera le pointeur de registre du capteur sur cette adresse&lt;br /&gt;
* Restart la communication pour laisser la main au capteur&lt;br /&gt;
* Envoyer l’adresse du capteur en ajoutant 1 (Ceci permet de stipuler que nous désirons lire la valeur pointée)&lt;br /&gt;
* Lire la partie haute de la température&lt;br /&gt;
* Lire la partie basse de la température&lt;br /&gt;
* Envoyer un message de stop&lt;br /&gt;
&lt;br /&gt;
Chaque action correspond à l'utilisation d'une fonction de la librairie IIC codée. (cf déport git) Et après chaque action, nous devons vérifier le status du bus dans le registre TWSR. Ce &amp;quot;status&amp;quot; nous donnera des indications sur le bon déroulement de la communication, à savoir la réception d'ACK (équivalent d'accusé de réception) ou confirmation d'envoie de start, restart, etc.&lt;br /&gt;
&lt;br /&gt;
=====Test=====&lt;br /&gt;
&lt;br /&gt;
Le test de la librairie iic s'est fait directement lorsque la carte du capteur de température a été soudée. Pour ce faire, nous utilisons une compilation en mode &amp;quot;DEBUG&amp;quot; (make debug upload) qui nous permettait de lire la valeur des &amp;quot;status&amp;quot; avec minicom. &lt;br /&gt;
Après différents tests, nous avons finalement réussi à faire fonctionner le capteur de température en IIC, ce dernier nous renvoyait bel et bien une valeur de température précise à 0.5degrés près, vérifié à l'aidé d'un autre capteur de température.&lt;br /&gt;
&lt;br /&gt;
Il est néanmoins regrettable que ce capteur ne sera pas utilisable dans les prototypes finaux dans la mesure où il est greffé à une carte dont le module bluetooth n'est pas utilisable.&lt;br /&gt;
&lt;br /&gt;
====Capteurs analogique====&lt;br /&gt;
&lt;br /&gt;
Comme dit précédemment, nous avons abandonné l'utilisation de l’accéléromètre IIC prévu initialement dans le vagin car nous n'avons pas réussi à le souder sur les cartes du pénis. Nous avons donc utilisé ce qui était à notre disposition à savoir un capteur analogique.&lt;br /&gt;
&lt;br /&gt;
La mesure analogique sous AVR se fait simplement via l'utilisation de la fonction ad_sample(numéro de la broche analogique lue). Elle renvoie directement une valeur entre 0 et 255 correspondant à une conversion analogique-numérique de la tension sur la broche lue du capteur.&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
===Contrôle des servomoteurs===&lt;br /&gt;
&lt;br /&gt;
Un servomoteur se contrôle à l'aide d'un signal PWM (Pulse Width Modulation). Ce signal consiste à modifier la largeur de l'impulsion en fonction de la consigne désirée. &lt;br /&gt;
&lt;br /&gt;
La génération de PWM via microcontrôleur se fait à l'aide de TIMERS. Il faut savoir qu'il existe une priorité dans les interruptions, pour un TIMER_X donné, plus le X est proche de 0, plus l'interruption sera prioritaire. Nos signaux PWM se doivent d'être le plus en accord avec nos consignes, c'est pourquoi nous avons choisi d'utiliser les TIMER les plus prioritaires pour les générer. (TIMER0 et TIMER1)&lt;br /&gt;
&lt;br /&gt;
====PWM sur un seul servomoteur====&lt;br /&gt;
&lt;br /&gt;
Notre première manière de procéder consistait à générer la PWM nous même à l'aide du vecteur d'interruption d'un TIMER. La méthode consistait à compter de 0 à 255 en permanence. Lorsque le compteur était inférieur à la consigne, on passait une sortie à l'état haut, sinon elle restait à l'état bas. &lt;br /&gt;
&lt;br /&gt;
Cette méthode simulait plutôt bien le signal PWM et avait pour avantage d'être utilisable pour n'importe quelle de l'arduino. Cependant, cette méthode a le gros désavantage d'être sensible à l'utilisation d'autres interruptions, rendant le TIMER imprécis.&lt;br /&gt;
&lt;br /&gt;
Or, notre projet utilisera d'autres procédures d'interruption. Nous avons donc décidé d'utiliser une méthode plus simple mais nous restreignant sur le choix de nos sorties.&lt;br /&gt;
&lt;br /&gt;
En effet, un atmega possède des registres que l'on peut configurer pour générer des signaux PWM sur des broches spécifiques.&lt;br /&gt;
&lt;br /&gt;
Ainsi, en configurant le registre TCCR0A à 0x81 et TCCR0B à 0x05, on se place en mode PWM non inversée à fréquence élevée. En résumé, cette configuration nous permet de faire varier les signaux PWM en introduisant une consigne dans le registre OCR0A.&lt;br /&gt;
&lt;br /&gt;
Ainsi, nous pouvons donc contrôler le moteur simplement en changeant la consigne dans OCR0A.&lt;br /&gt;
&lt;br /&gt;
====Tests====&lt;br /&gt;
&lt;br /&gt;
Dans un premier lieu, les moteurs servomoteurs ne recevaient pas les consignes. Nous pensions que le fait que la PWM soit en 3V3 était l'origine du problème. Nous avons donc fait le montage à l'aide d'un transistor NPN monté en saturé. Le problème n'a pas été résolu. &lt;br /&gt;
&lt;br /&gt;
Finalement, le soucis viendrait du fait que les tests étaient effectués avec des valeurs du registre OCR0A à 0 (pwm nulle). Nous n'aurons donc pas besoin d'un montage à transistor pour le PCB.&lt;br /&gt;
&lt;br /&gt;
Le but des servomoteurs est d'effectuer un semblant de massage, nous allons donc modifier le code afin d'effectuer la tâche de manière périodique via l'utilisation d'un TIMER.&lt;br /&gt;
&lt;br /&gt;
====Gestion d'un ensemble de servomoteurs====&lt;br /&gt;
&lt;br /&gt;
Dans le vagin, nous utilisons 4 servomoteurs afin de masser l'utilisateur. Nous avons trouvé intéressant de diviser ces moteurs en deux couples afin d'intensifier ou non ce massage en fonction des seuils d'excitation détectés par les capteurs.&lt;br /&gt;
&lt;br /&gt;
Pour ce faire, nous aurons besoin de deux signaux PWM différents, donc de l'utilisation de deux timers configurés en PWM. &lt;br /&gt;
&lt;br /&gt;
Comme dit en introduction de cette section, nous nous imposons l'utilisation du TIMER1 pour cette deuxième PWM. Il existe une différence dans la configuration de cette dernière dans la mesure où le signal peut recevoir des consignes allant de 8 à 16bits en fonction de la configuration. Afin de simplifier les choses, nous avons configuré cette dernière sur 8bits pour lui envoyer les mêmes consignes que pour le TIMER0.&lt;br /&gt;
&lt;br /&gt;
====Tests====&lt;br /&gt;
&lt;br /&gt;
Avant tout, nous devions vérifier que la consigne avait une intensité suffisante pour être envoyée sur deux servomoteurs en même temps. Ce qui était le cas.&lt;br /&gt;
&lt;br /&gt;
Ensuite, nous avons testés des changements de consignes plus ou moins rapides afin de déterminer ce qui répondrait le mieux à nos attentes.&lt;br /&gt;
&lt;br /&gt;
Les tests concluants, nous pouvions passer à la suite.&lt;br /&gt;
&lt;br /&gt;
===Utilisation des buzzers===&lt;br /&gt;
&lt;br /&gt;
En fonction du niveau d'excitation, nous ferons vibrer un ou deux buzzers. Pour ce faire, nous avons fait le choix de souder leur broche GND au GND de nos cartes et ainsi souder leur potentiel VCC à une broche de l'arduino. Ainsi, si nous plaçons la broche à l'état bas, le tension dans le buzzer est nulle et si nous passons la broche à l'état haut, la tension aux bornes du buzzers devient 3.3V et il vibre.&lt;br /&gt;
&lt;br /&gt;
Pour ce faire, nous utilisons simplement deux broches, ici PXX et PXX, que nous avons initialisés en tant que sorties en mettant à un leur bit correspondant dans le registre DDRX. Ainsi, il ne reste plus qu'à commander la valeur haute ou basse de ces broches en mettant à 1 ou 0 leur bit dans le registre PORTX.&lt;br /&gt;
&lt;br /&gt;
====Tests====&lt;br /&gt;
&lt;br /&gt;
Ceci a été testé sur breadboard et était fonctionnel. Cependant, une chose à quoi nous n'avions pas pensé était que lorsque nous les avons soudés sur le PCB, nous aurions dû utiliser des câbles plus épais, car comme nous n'avions pas de prototype sur quoi coller les buzzers, l'un des buzzers s'est arraché de la carte en vibrant.&lt;br /&gt;
&lt;br /&gt;
===Résumé===&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Resume sextoy.png|center|recap]]&lt;br /&gt;
&lt;br /&gt;
==Gestion de la communication bluetooth==&lt;br /&gt;
===Introduction===&lt;br /&gt;
Dans le cadre de notre projet, la communication entre le sextoy et le téléphone se fera à faible portée. C'est pourquoi nous avons considéré comme intéressante l'utilisation de la technologie bluetooth.&lt;br /&gt;
&lt;br /&gt;
La première partie consiste à coder une librairie au niveau de l'arduino. Cette librairie, codée en C, consiste simplement en une lecture / écriture via les broches RX/TX de l'arduino et du module bluetooth. &lt;br /&gt;
&lt;br /&gt;
La seconde partie conssite à coder la partie application mobile qui communiquera avec la arduino.&lt;br /&gt;
&lt;br /&gt;
Une fois que cette transmission sera mise en place, il ne reste plus qu'à expliciter le protocole des paquets transmis.&lt;br /&gt;
&lt;br /&gt;
===Arduino===&lt;br /&gt;
&lt;br /&gt;
Afin de communiquer à travers le module bluetooth, il faut relier la broche RX de l'arduino à celle TX du module bluetooth et inversement. Pour tester nos codes, nous avons utilisé un module bluetooth HC-06 et l'application [https://play.google.com/store/apps/details?id=Qwerty.BluetoothTerminal&amp;amp;hl=fr| Bluetooth Terminal]. &lt;br /&gt;
&lt;br /&gt;
Dans la mesure où l'arduino devra traiter l'arrivée asynchrone de messages tout en effectuant le traitement des capteurs, il est intéressant d'effectuer des lectures à l'aide d'interruptions. Pour cela, nous utilisons le vecteur d'interruption USART_RXC_vect qui déclenchera la fonction de lecture d'un paquet à chaque fois qu'un message est reçu.&lt;br /&gt;
&lt;br /&gt;
''Actuellement, la librarie est fonctionnelle, il ne reste plus qu'à faire l'utilisation par interruption.''&lt;br /&gt;
&lt;br /&gt;
===Application mobile===&lt;br /&gt;
===Protocole de transmission===&lt;br /&gt;
===Module bluetooth utilisé===&lt;br /&gt;
&lt;br /&gt;
Le module bluetooth embarqué sur le PCB est un module reprogrammable. Ainsi il était nécessaire de connaître la configuration par défaut du composant, dans le but de savoir s'il fallait ou non prévoir un pcb de reconfiguration.&lt;br /&gt;
&lt;br /&gt;
Le CYBLE-012012 est configuré par défaut avec le firmware &amp;quot;EZ-Serial BLE Firmware&amp;quot;. La configuration par défaut de ce firmware est la suivante : &lt;br /&gt;
&lt;br /&gt;
* 115200 baud, 8bits de donnée, pas de bit de parité, 1bit de stop&lt;br /&gt;
* &amp;quot;UART flow control&amp;quot; désactivé&lt;br /&gt;
* firmware activé en mode &amp;quot;auto-start&amp;quot;, qui correspond à une recherche automatique de connection bluetooth et de redirection RX-TX en cas de connection&lt;br /&gt;
&lt;br /&gt;
Ces [http://www.cypress.com/file/285326/download| informations] sont importantes car, si elles sont vraiment respectées, nous n'auront pas à créer notre propre kit de développement, ce qui est un gain de temps considérable.&lt;br /&gt;
&lt;br /&gt;
Qui plus est, l'utilisation d'une fonction &amp;quot;auto-start&amp;quot; est en adéquation avec le module bluetooth HC-05 utilisé pour les tests. Nous pouvons donc commencer la programmation mobile du bluetooth en parallèle de l'impression des pcb. Et, dans le cas où les pcb seraient disfonctionnels, nous pourront quand meme envisager un prototype sur breadboard.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Test====&lt;br /&gt;
&lt;br /&gt;
Après avoir alimenté la carte, nous n'avons pas pu nous connecter au module bluetooth, ce dernier n'étant même pas visible dans les appareils alentours. &lt;br /&gt;
&lt;br /&gt;
Nous avons alors vérifié si la carte était correctement alimentée. Pour ce faire, nous avons mesuré différents points de tensions sensé être mis par défaut en PULL-DOWN ou PULL-UP à des niveaux de tensions d'1.7V. Ces niveaux étaient respectés. Le problème n'est donc pas d'ordre électronique. &lt;br /&gt;
&lt;br /&gt;
Par la suite, nous avons voulu vérifier la communication du module. Ce dernier, en déclenchant l'auto start est sensé émettre (en suivant le protocole UART rappelé précédemment) un message START. Nous avons donc inspecté ceci en utilisant minicom. En effet, minicom reçoit un message, mais ne sait pas le déchiffré. Qui plus est, impossible d'envoyer un message au module afin de le reprogrammer (de manière similaire à un XBee).&lt;br /&gt;
&lt;br /&gt;
Devant ces soucis, nous décidons donc d'abandonner ce module bluetooth et de poursuivre avec celui utilisé pour les essais de programmation, le HC-05.&lt;br /&gt;
&lt;br /&gt;
==Conception de l'application Android==&lt;br /&gt;
===Envoie et réception de SMS===&lt;br /&gt;
Afin de ne pas utiliser de serveur, les deux appareils Android doivent synchroniser l'envoi de paquet UDP, pour cela nous avons voulu utiliser des SMS.&lt;br /&gt;
Les SMS permettent d'envoyer des informations, comme les adresses IP, les ports utilisés, l'heure à laquelle les deux téléphones vont envoyer leur premier paquet UDP.&lt;br /&gt;
&lt;br /&gt;
Dans un premier temps nous avons créer une application pour envoyer les SMS:&lt;br /&gt;
&lt;br /&gt;
L'application était très simple, l'envoi de SMS se faisait en deux lignes&lt;br /&gt;
  // initialisation d'une variable sms gérant les sms&lt;br /&gt;
  SmsManager sms = SmsManager.getDefault() ;&lt;br /&gt;
  // envoie un sms comportant le texte de la variable message de type String au numéro contenu dans la variable num de type String&lt;br /&gt;
  sms.sendTextMessage(num, null, message, null, null);&lt;br /&gt;
&lt;br /&gt;
Dans un deuxième temps il fallait recevoir un SMS, ou plutôt savoir qu'un nouvel SMS avait été reçu :&lt;br /&gt;
&lt;br /&gt;
Pour cela il fallait utiliser un thread qui était appelé par interruption avec la réception d'un SMS comme vecteur d’interruption.&lt;br /&gt;
Ce thread effectuait ce qui était demandé dans sa fonction onReceive(), comme par exemple lire les informations contenues dans le SMS:&lt;br /&gt;
  public class IncomingSms extends BroadcastReceiver {&lt;br /&gt;
     final SmsManager sms = SmsManager.getDefault();&lt;br /&gt;
     public void onReceive(Context context, Intent intent) {&lt;br /&gt;
       //Ce qui doit etre fait lors de la reception de SMS&lt;br /&gt;
     }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Malheureusement ce programme ne marchait pas pendant des semaines, malgré de nombreuses modifications et de nombreux essais. Et le problème semblait être ma carte SIM, car en changeant de SIM, tous les programmes contenant ce code fonctionnaient parfaitement.&lt;br /&gt;
&lt;br /&gt;
===Protocole UDP===&lt;br /&gt;
Afin d'effectuer un échange de données entre les deux utilisateurs, et essayer de faire une vidéo-conférence, nous avons choisi d'utiliser le protocole UDP.&lt;br /&gt;
&lt;br /&gt;
Une première application permettait de tester l'envoi de paquet UDP, pour cela un serveur UDP a été utilisé sur un PC.&lt;br /&gt;
Le serveur attendait un message et l'affichait quand il le recevait.&lt;br /&gt;
&lt;br /&gt;
Pour envoyer un paquet nous utilisons :&lt;br /&gt;
&lt;br /&gt;
 DatagramSocket ds = null;&lt;br /&gt;
 ds = new DatagramSocket(PortA);&lt;br /&gt;
 DatagramPacket dp;&lt;br /&gt;
 InetAddress local = InetAddress.getByName(AdrIp);&lt;br /&gt;
 dp = new DatagramPacket(message.getBytes(),message.length(),local,PortA );&lt;br /&gt;
 ds.setBroadcast(true);&lt;br /&gt;
 ds.send(dp);&lt;br /&gt;
&lt;br /&gt;
Ce code crée un paquet qui comporte l’adresse et le port du destinataire, mais surtout les données à envoyer.&lt;br /&gt;
Ce paquet est ensuite envoyer grâce à un socket.&lt;br /&gt;
&lt;br /&gt;
Une fois que tout fonctionnait comme il le fallait, nous avons pu créer une application qui comportait l'envoi et la réception de paquet.&lt;br /&gt;
En mettant l'application sur deux téléphones on pouvait tester si tout fonctionnait.&lt;br /&gt;
Les tests ont seulement été effectué sur un réseau local, on ne sait pas pour le moment si des box internet pourraient empêcher la transmission.&lt;br /&gt;
Pour la réception nous utilisons :&lt;br /&gt;
 dsocket.receive(packet);&lt;br /&gt;
 buff = packet.getData();&lt;br /&gt;
&lt;br /&gt;
Pour récupérer les données du paquet dans la variable buff, il suffit ensuite de créer une boucle pour recevoir plusieurs messages.&lt;br /&gt;
La fonction de réception étant bloquante, il a été préférable de l'effectuer dans un thread.&lt;br /&gt;
&lt;br /&gt;
L'application est donc composé de un thread d'écoute, un thread d'envoi et d'un thread principal gérant l'affichage et appelant le thread d'envoi lorsque que le bouton de l'application est appuyé.&lt;br /&gt;
Voici une image de l'application, les champs d’adresseIp et de port du destinataire sont à remplir avant d'envoyer un paquet UDP.&lt;br /&gt;
Et le port d'écoute est défini dans le code de cette application, ce qui n'est pas très pratique, mais suffisant pour les tests.&lt;br /&gt;
&lt;br /&gt;
Le TextView est mis à jour à chaque que le bouton envoyer est appuyé, en prenant comme valeur celle d'un registre comprenant la valeurs du dernier paquet UDP reçu.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:ClientUdp.png]]&lt;br /&gt;
&lt;br /&gt;
===Communication Bluetooth===&lt;br /&gt;
Pour gérer la communication entre le téléphone et un sextoys, il faut utiliser une communication Bluetooth.&lt;br /&gt;
&lt;br /&gt;
Dans un premier temps il faut se connecter avec l'appareil:&lt;br /&gt;
 &lt;br /&gt;
 new ConnectBT().execute();&lt;br /&gt;
&lt;br /&gt;
Avec ConnectBT une classe trouvée sur internet.&lt;br /&gt;
&lt;br /&gt;
Ensuite il faut communiquer :&lt;br /&gt;
&lt;br /&gt;
Pour envoyer un message on utilise: &lt;br /&gt;
&lt;br /&gt;
 btSocket.getOutputStream().write(message);&lt;br /&gt;
&lt;br /&gt;
Avec btSocket un socket Bluetooth ayant été connecté avec le sextoy dans la classe ConnectBT.&lt;br /&gt;
&lt;br /&gt;
Ensuite il faut recevoir :&lt;br /&gt;
&lt;br /&gt;
 btSocket.getInputStream().read(mmBuffer);&lt;br /&gt;
&lt;br /&gt;
Avec mmBuffer qui contient le message reçu.&lt;br /&gt;
&lt;br /&gt;
Mais contrairement à la réception UDP, la réception Bluetooth n'est pas bloquante, ainsi on peut recevoir des messages nuls.&lt;br /&gt;
&lt;br /&gt;
Pour éviter ce problème l'application envoie un paquet Bluetooth, et reçoit juste après, et le sextoy est configuré pour envoyer un paquet UDP, juste après en avoir reçu un.&lt;br /&gt;
&lt;br /&gt;
===Application principale===&lt;br /&gt;
Afin d'être ergonomique,l'application doit pouvoir enregistrer des contacts, pour plus facilement communiquer avec eux.&lt;br /&gt;
Nous avons choisi de ne pas utiliser les contacts du téléphone, pour pouvoir avoir des contacts &amp;quot;confidentiels&amp;quot; qui ne seront que dans la base de donnée de l'application.&lt;br /&gt;
&lt;br /&gt;
Il fallait donc créer une base de donnée, nous avons donc utilisé SQLite car cette bibliothèque est utilisée par Android comme base de données embarquée.&lt;br /&gt;
La base ne comporte qu'une seule table, avec seulement les pseudos et les numéros de téléphone.&lt;br /&gt;
&lt;br /&gt;
Une fois la base crée, pour interagir avec, nous avons coder des activités:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
- Ajout de contact:&lt;br /&gt;
&lt;br /&gt;
Il faut entrer dans les champs de textes les informations pour la base de données,puis appuyer sur le bouton &amp;quot;Ajouter&amp;quot; pour créer un nouveau contact dans la base de donnée.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:AjoutContact.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-Fiche de Contact: &lt;br /&gt;
&lt;br /&gt;
Affiche le pseudo et le numéro de téléphone dans les &amp;quot;TextView&amp;quot;, et permet de : supprimer le contact en cliquant sur la croix, envoyer un SMS en cliquant sur l'icone &amp;quot;Message&amp;quot;, mais aussi commencer une communication UDP en cliquant sur le téléphone.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:FicheContact.png]]  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-Liste de contact :&lt;br /&gt;
&lt;br /&gt;
Affiche la liste de contacts, en cliquant sur un des contacts on arrive sur la page Fiche de Contact, et en cliquant sur le plus on arrive sur la page Ajout de Contact.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:ListView.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ensuite il faut ajouter la gestion de communication:&lt;br /&gt;
&lt;br /&gt;
-Les SMS :&lt;br /&gt;
&lt;br /&gt;
Il faut remplir les champs de texte et appuyer sur SMS pour envoyer un message du type&lt;br /&gt;
&lt;br /&gt;
Message&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Address Ip :&amp;quot; Addresse Ip&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Port :&amp;quot; Port&lt;br /&gt;
&lt;br /&gt;
Avec Message,Addresse Ip, et Port les champs à remplir, &amp;quot;Addresse Ip :&amp;quot; et &amp;quot;Port :&amp;quot; deux chaines de caractères.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:SMS.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-Protocole UDP : &lt;br /&gt;
&lt;br /&gt;
Quatre champs sont à remplir, cliquer sur Envoyer pour passez à l'activité de gestion Bluetooth.&lt;br /&gt;
&lt;br /&gt;
Les champs sont:&lt;br /&gt;
&lt;br /&gt;
-L'addresse Ip&lt;br /&gt;
&lt;br /&gt;
-Le port destination&lt;br /&gt;
&lt;br /&gt;
-Le port source&lt;br /&gt;
&lt;br /&gt;
-L'heure qui n'est pas utilisée, qui devait servir pour la synchronisation.&lt;br /&gt;
&lt;br /&gt;
Les valeurs des champs sont conservés pour la communication UDP à venir.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:UDP.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-Gestion Bluetooth :&lt;br /&gt;
&lt;br /&gt;
En cliquant sur &amp;quot;Paired Devices&amp;quot;, l'application affichera la liste des appareils appairés.&lt;br /&gt;
&lt;br /&gt;
Puis en cliquant un des appareils, l'application essayera de connecter avec, tout en lançant l'activité UDP avec Bluetooth.&lt;br /&gt;
&lt;br /&gt;
Si l'on souhaite ne pas utiliser de périphérique Bluetooth, il suffit de cliquer sur le bouton moins en haut à droite.&lt;br /&gt;
&lt;br /&gt;
L'activité UDP sans Bluetooth se lancera.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Bluetooth.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-Communication UDP avec Bluetooth:&lt;br /&gt;
&lt;br /&gt;
Pour lancer la communication UDP, appuyer sur le bouton Off ,il passera en mode On.&lt;br /&gt;
&lt;br /&gt;
Si vous cliquez sur le bouton On il passera en mode Off, et coupera la communication UDP.&lt;br /&gt;
&lt;br /&gt;
Le bouton envoyer, permet de forcer l'envoi d'un paquet UDP.&lt;br /&gt;
&lt;br /&gt;
Et le bouton croix coupe toutes les communications(UDP et Bluetooth), et retourne à la page précédente.&lt;br /&gt;
&lt;br /&gt;
Lorsque l'application reçoit un paquet UDP, un message est envoyé via Bluetooth au sextoys.&lt;br /&gt;
&lt;br /&gt;
Celui-ci répond automatiquement en envoyant une valeur moyennée des ses capteurs, cette valeur est récupérée et mise dans un registre.&lt;br /&gt;
&lt;br /&gt;
En parallèle, toutes les secondes un paquet UDP est envoyé et les données envoyés sont celle du registre.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Com.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-Communication UDP sans Bluetooth.&lt;br /&gt;
&lt;br /&gt;
Le bouton On/Off est utilisé comme dans l'activité &amp;quot;Communication UDP avec Bluetooth&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Les boutons de niveaux, mettent une valeur dans un même registre.&lt;br /&gt;
&lt;br /&gt;
Chaque boutons correspond à une valeur, qui correspondent avec un niveau d'excitation du sextoys.&lt;br /&gt;
&lt;br /&gt;
Ainsi toutes les secondes, un paquet UDP est envoyé avec comme donnée la valeur du registre.&lt;br /&gt;
&lt;br /&gt;
Lorsqu'un paquet UDP est reçu, la donnée reçue est mise dans un registre qui détermine l’affichage du &amp;quot;TextView&amp;quot; en bas à droite.&lt;br /&gt;
&lt;br /&gt;
Ce TextView est mis à jours en même temps qu'un paquet UDP est envoyé.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Co2.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Streaming vidéo===&lt;br /&gt;
&lt;br /&gt;
Nous nous sommes attardés sur le streaming vidéo avant d'avoir fait l'application principale et le gestion du Bluetooth. &lt;br /&gt;
Nous avions trouvé un code sur Github, qui permettait de streamer la vidéo du téléphone sur un pc.&lt;br /&gt;
Il aurait fallut adapter ce code pour streamer entre deux téléphones.&lt;br /&gt;
Mais la recherche du code avait pris trop de temps, et il restait encore trop de chose importante à faire avant de pouvoir continuer cette partie.&lt;br /&gt;
C'est pourquoi il n'y a pas de Streaming vidéo dans l'application finale.&lt;br /&gt;
&lt;br /&gt;
== Rapport et codes ==&lt;br /&gt;
&lt;br /&gt;
Rapport : [[Fichier:CR_sextoy_connecte.pdf]]&lt;br /&gt;
&lt;br /&gt;
[https://archives.plil.fr/croussel/Projet_sextoy_connecte.git Codes]&lt;/div&gt;</summary>
		<author><name>Tstieven</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=IMA4_2016/2017_P14&amp;diff=42866</id>
		<title>IMA4 2016/2017 P14</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=IMA4_2016/2017_P14&amp;diff=42866"/>
				<updated>2017-05-20T15:57:58Z</updated>
		
		<summary type="html">&lt;p&gt;Tstieven : /* Application principale */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Projet IMA4 : Sex-toy connecté =&lt;br /&gt;
&lt;br /&gt;
== Présentation du projet ==&lt;br /&gt;
&lt;br /&gt;
L'objectif de ce projet est de développer un système d'échange entre deux partenaires distants afin de rendre plus facile la vie de couple à distance.&lt;br /&gt;
&lt;br /&gt;
Pour ce faire, le dispositif sera constitué de deux sextoys connectés (un par appareil génital désiré) à leur téléphone portable respectif. Une application mobile permettra aux utilisateurs de s'échanger des données de manière sécurisé, ceci au travers d'un serveur embarqué dans le téléphone portable.&lt;br /&gt;
&lt;br /&gt;
Les données échangées pourront être l'accélération ou la température. Elles seront traitées et transmises au sextoy qui adaptera sa vitesse, son retour vibratoire ou sa position en conséquence.&lt;br /&gt;
&lt;br /&gt;
Les sextoys pourraient être composés de :&lt;br /&gt;
* Pour l'appareil masculin (dédié à la femme) :&lt;br /&gt;
:* un servomoteur ;&lt;br /&gt;
:* un vibreur ;&lt;br /&gt;
:* une sonde de température ;&lt;br /&gt;
:* un accéléromètre.&lt;br /&gt;
* Pour l'appareil féminin (dédié à l'homme) :&lt;br /&gt;
:* 4 servomoteurs (dans le but de &amp;quot;masser&amp;quot; en déplaçant le silicone);&lt;br /&gt;
:* des vibreurs ;&lt;br /&gt;
:* un accéléromètre.&lt;br /&gt;
* Pour les deux appareils :&lt;br /&gt;
:* un micro-contrôleur (Arduino mini) ;&lt;br /&gt;
:* un module de transmission / réception bluetooth afin de se connecter au téléphone ;&lt;br /&gt;
:* du silicone.&lt;br /&gt;
	&lt;br /&gt;
* L'application mobile devra :&lt;br /&gt;
:* mettre en place une communication cryptée à travers un serveur (embarqué ou bien intermédiaire ?) ;&lt;br /&gt;
:* effectuer un échange de données en bluetooth avec le sextoy connecté.&lt;br /&gt;
&lt;br /&gt;
* L'application mobile pourra :&lt;br /&gt;
:* utiliser la vidéo-conférence ;&lt;br /&gt;
:* enregistrer les meilleurs moments et enventuellement pouvoir les partager ;&lt;br /&gt;
:* effectuer une recherche de partenaire aléatoire.&lt;br /&gt;
&lt;br /&gt;
* S'il nous reste du temps, il peut être envisageable de :&lt;br /&gt;
:* mettre en place un réseau social interne à Polytech.&lt;br /&gt;
&lt;br /&gt;
== Liste des tâches ==&lt;br /&gt;
* Conception de l'appareil masculin (Cédric)&lt;br /&gt;
:* mettre en place le bus I2C avec les différents capteurs ;&lt;br /&gt;
:* création d'un PCB au format gerber ;&lt;br /&gt;
:* création d'un prototype.&lt;br /&gt;
&lt;br /&gt;
* Conception de l'appareil féminin (Cédric)&lt;br /&gt;
:* mettre en place le bus I2C ;&lt;br /&gt;
:* traitement des données afin d'en déduire la position et l'entrain de l'utilisateur ;&lt;br /&gt;
:* création d'un PCB ;&lt;br /&gt;
:* création d'un prototype.&lt;br /&gt;
&lt;br /&gt;
* Communication bluetooth (Cédric et Thomas)&lt;br /&gt;
:* étudier l'émission/réception vue de l'arduino ;&lt;br /&gt;
:* étudier l'émission/réception vue du téléphone ;&lt;br /&gt;
:* mise en place du protocole ;&lt;br /&gt;
:* test de portée.&lt;br /&gt;
&lt;br /&gt;
* Développement mobile (Thomas)&lt;br /&gt;
:* déterminer la meilleure approche : utilisation d'un serveur intermédiaire ou bien mise en place d'un &amp;quot;client-serveur&amp;quot; dans l'application mobile ;&lt;br /&gt;
:* mettre en place le choix retenu ;&lt;br /&gt;
:* tester dans un premier temps une transmission de texte ;&lt;br /&gt;
:* programmer le traitement de données reçues par bluetooth ;&lt;br /&gt;
:* rajouter un côté esthétique à l'application.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Recapitulatif sextoy.png|center|recap]]&lt;br /&gt;
&lt;br /&gt;
==Feuille d'heures==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Tâche !! Prélude !! Heures S1 !! Heures S2 !! Heures S3 !! Heures S4 !! Heures vacances !! Heures S5 !! Heures S6 !! Heures S7 !! Heures S8 !! Heures S9 !! Heures S10 !! Heures vacances et après!! Total&lt;br /&gt;
|-&lt;br /&gt;
| Définition cahier des charges &lt;br /&gt;
| 2H&lt;br /&gt;
| 2H&lt;br /&gt;
| 1H&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 5H&lt;br /&gt;
|-&lt;br /&gt;
| Dimensionnement et établissement de la liste de matériel&lt;br /&gt;
| &lt;br /&gt;
| 3H&lt;br /&gt;
| 4H&lt;br /&gt;
|&lt;br /&gt;
| 4H&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 11H&lt;br /&gt;
|-&lt;br /&gt;
| Établissement de la liste et de la répartition des tâches&lt;br /&gt;
| 1H&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 1H&lt;br /&gt;
|-&lt;br /&gt;
| Appareil masculin : programmation&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 1H&lt;br /&gt;
| 2H&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 6H&lt;br /&gt;
| 9H &lt;br /&gt;
|-&lt;br /&gt;
| Appareil masculin : étude des datasheets&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 1H&lt;br /&gt;
| 1H&lt;br /&gt;
|&lt;br /&gt;
| 4H&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| 1H&lt;br /&gt;
|&lt;br /&gt;
| 7H&lt;br /&gt;
|-&lt;br /&gt;
| Appareil masculin : PCB&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 4H&lt;br /&gt;
| 4H&lt;br /&gt;
| 6H&lt;br /&gt;
| 30H&lt;br /&gt;
| 44H&lt;br /&gt;
|-&lt;br /&gt;
| Appareil masculin : 3D&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| 6H&lt;br /&gt;
| 6H&lt;br /&gt;
|-&lt;br /&gt;
| Conception de l'appareil féminin&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 2H&lt;br /&gt;
| 1H&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 3H&lt;br /&gt;
|-&lt;br /&gt;
| Liaison bluetooth (embarqué)&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 3H&lt;br /&gt;
| 1H&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 8H&lt;br /&gt;
| 12H&lt;br /&gt;
|-&lt;br /&gt;
| Liaison bluetooth (téléphone)&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 15H&lt;br /&gt;
| 15H&lt;br /&gt;
|-&lt;br /&gt;
| Recherche et discussion autour de la meilleure approche de communication&lt;br /&gt;
| 2H&lt;br /&gt;
| 2H&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 4H&lt;br /&gt;
|-&lt;br /&gt;
| Synchronisation temporelle des téléphones (par sms)&lt;br /&gt;
| &lt;br /&gt;
| 2H&lt;br /&gt;
| 4H&lt;br /&gt;
| 6H&lt;br /&gt;
| 8H&lt;br /&gt;
| 6H&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 26H&lt;br /&gt;
|-&lt;br /&gt;
| Transmission de paquets UDP&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 4H&lt;br /&gt;
| 4H&lt;br /&gt;
| 4H&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 6H&lt;br /&gt;
| 18H&lt;br /&gt;
|-&lt;br /&gt;
| Streaming video(UDP)&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 4H&lt;br /&gt;
| 4H&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 8H&lt;br /&gt;
|-&lt;br /&gt;
| Application et bases de données&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 6H&lt;br /&gt;
| 20H&lt;br /&gt;
| 26H&lt;br /&gt;
|-&lt;br /&gt;
| Total&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 195H&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Conception des sextoys==&lt;br /&gt;
===Introduction===&lt;br /&gt;
&lt;br /&gt;
La conception de sextoys doit respecter différents règles, notamment sanitaires. C'est pourquoi nous nous sommes intéressés à l'utilisation de silicone pour ce projet. Nous avons notamment rencontré un ingénieur compétant dans ce domaine afin de nous aiguiller sur cette éventuelle conception.&lt;br /&gt;
&lt;br /&gt;
La conception passera également par une conception 3D que nous effectuerons à l'aide d'imprimantes 3D au fabricarium de Polytech Lille.&lt;br /&gt;
&lt;br /&gt;
Enfin, les prototypes seront embarqués de cartes électroniques (aussi appelés PCB) que nous constituerons.&lt;br /&gt;
&lt;br /&gt;
===Choix du silicone, rencontre avec Mario Sanz===&lt;br /&gt;
&lt;br /&gt;
Le projet nécessite l'utilisation d'une matière souple et non irritante, c'est pourquoi nous avons choisi de nous tourner vers l'utilisation du silicone. Afin de choisir au mieux le produit correspondant à nos besoins, nous avons rencontré Mario Sanz, ingénieur à l'INRIA, qui travail régulièrement avec du silicone.&lt;br /&gt;
&lt;br /&gt;
Ce dernier nous a expliqué les différents points importants sur lesquels nous baser afin de choisir au mieux un produit en accord avec le projet. Ne serait-ce que pour le choix de la dureté, il existe une échelle propre au silicone (&amp;quot;Shore hardness scale&amp;quot;), nous pensions au départ rechercher un silicone le plus mou possible, cependant, il faut savoir que le plus le silicone est mou, plus il a tendance à être &amp;quot;collant&amp;quot;. Finalement, après discutions, un shore de 40A (correspondant à la dureté d'une gomme) suffisamment mince fera l'affaire pour la conception des prototypes.&lt;br /&gt;
&lt;br /&gt;
Il nous a également expliqué que le silicone peut être travaillé à l'aide d'additifs et sous cloche à vide afin d'améliorer le moulage, l'absence de &amp;quot;bulles&amp;quot; sur la surface de la pièce et la souplesse. Nous pouvons cependant travailler sans tout cela car il n'est pas spécialement important, pour notre projet, de rechercher des propriétés physiques homogènes dans tout le sextoy.&lt;br /&gt;
&lt;br /&gt;
Pour ce qui est de la création de moules, nous pourrons les effectuer via imprimante 3D. Il existe un bon nombre de tutoriels sur internet pour s'y référer en cas de soucis.&lt;br /&gt;
&lt;br /&gt;
===Impression 3D===&lt;br /&gt;
&lt;br /&gt;
Pour la création d'objets en 3D, de nombreux outils sont disponibles. Nous avons décidé d'utiliser Tinkercad, un outil qui s'intègre directement au navigateur internet utilisé. &lt;br /&gt;
&lt;br /&gt;
L'avantage d'un tel outil est sa grande communauté qui permet un accès simple et rapide à une multitudes de projets dont on pourrait s'inspirer pour générer nos pièces.&lt;br /&gt;
&lt;br /&gt;
====Création des moules====&lt;br /&gt;
&lt;br /&gt;
A l'aide d'une imprimante 3D, nous pouvons concevoir des moules afin de créer des pièces en silicone. Il s'agit de la manière la plus rapide et accessible pour notre projet.&lt;br /&gt;
&lt;br /&gt;
Cette méthode comporte des désavantages, dont le principal est la présence d'imperfection et de non homogénéité dans les pièces réalisées. Ceci n'a pas de grande importance dans la mesure où nous souhaitons du qualitatif.&lt;br /&gt;
&lt;br /&gt;
====Création d'un prototype====&lt;br /&gt;
&lt;br /&gt;
=====Pénis=====&lt;br /&gt;
&lt;br /&gt;
Afin de visualiser qualitativement la forme et le passage des câbles, un prototype imprimé au Fabricarium de Polytech Lille a été réalisé. &lt;br /&gt;
&lt;br /&gt;
Ce prototype se divise en 3 pièces : un boîtier (pour y loger le PCB), un cylindre (afin de reproduire la forme désirée) et un &amp;quot;tête&amp;quot; qui devait à l'origine être un moule en silicone (pour y loger le PCB du capteur de température).&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Sextoy_penis.png|400px|thumb|center|Prototype 3D pénis]]&lt;br /&gt;
&lt;br /&gt;
===Conception des PCB===&lt;br /&gt;
&lt;br /&gt;
Afin de diminuer un maximum la taille des cartes electroniques, nous utilisons principalement des composants CMS. &lt;br /&gt;
&lt;br /&gt;
La conception des cartes peut-être effectué à l'aide de logicels de CAO tels qu'Altium ou Eagle. Dans notre cas, nous avons utilisé Eagle. &lt;br /&gt;
&lt;br /&gt;
Ce travail consiste à créer une librairie regroupant l'intégralité des composants nécessaires et, ensuite, de  créer un schéma du circuit. Une fois le schéma terminé, il ne restera plus qu'à faire le routage et exporter les fichiers au format &amp;quot;Gerber&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Pour ce projet, nous aurons besoin de deux cartes, une par prototype. Chaque carte embarquera des composants similaires, c'est pourquoi nous nous contenterons d'abord d'un seul PCB pour effectuer des tests. Si ces derniers sont concluants, nous pourrons graver le second.&lt;br /&gt;
&lt;br /&gt;
====PCB du pénis====&lt;br /&gt;
&lt;br /&gt;
Le premier PCB imprimé et soudé est celui du pénis. Une première carte avait été imprimé regroupant sur cette dernière : un support pour l'arduino, un accéléromètre, un module bluetooth. &lt;br /&gt;
&lt;br /&gt;
[[Fichier:PCB_penis_VB.png|400px|thumb|center|PCB v1.0]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous avons expérimentés des problèmes dûs aux dimensions de l'accéléromètre, l'utilisation d'un boîtier CMS de type TDFN10 2x2 était optimiste pour la réalisation du projet, compte tenu du matériel à disposition.&lt;br /&gt;
&lt;br /&gt;
C'est pourquoi une seconde carte a été gravée, cette fois sans l'accéléromètre.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:PCB_penis_VF.png|400px|thumb|center|PCB v2.0]]&lt;br /&gt;
&lt;br /&gt;
[[Fichier:PCB_VF.png|400px|thumb|center|PCB v2.0 schema]]&lt;br /&gt;
&lt;br /&gt;
Ce prototype est sensé embarquer un capteur de température que nous avons décidé de mettre sur un PCB à part. Cette carte avait pour but d'être coulé dans le silicone, afin de mesurer la température au plus près de la zone intéressée.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:TEMPERATURE_PCB_VF.png|400px|thumb|center|PCB temperature]]&lt;br /&gt;
&lt;br /&gt;
[[Fichier:TEMPERATURE_VF.png|400px|thumb|center|PCB temperature schema]]&lt;br /&gt;
&lt;br /&gt;
====PCB du vagin====&lt;br /&gt;
&lt;br /&gt;
Compte tenu des soucis rencontrés avec l'accéléromètre, la carte sera gravée afin de pouvoir y plugger un accéléromètre analogique en traversant. Le but étant d'avoir un prototype fonctionnel d'ici la fin du projet.&lt;br /&gt;
&lt;br /&gt;
Nous avons également eu des problèmes avec le module bluetooth utilisé, ce dernier ne pouvant être reconfiguré manuellement par minicom, nous utiliserons le bluetooth HC-05 utilisé pour les essais de code. De même que pour l'accéléromètre, nous prévoirons un endroit pour le plugger sur la carte.&lt;br /&gt;
&lt;br /&gt;
''image PCB vagin''&lt;br /&gt;
&lt;br /&gt;
''Reste à graver le PCB du vagin''&lt;br /&gt;
&lt;br /&gt;
==Gestion des composants==&lt;br /&gt;
===Introduction===&lt;br /&gt;
&lt;br /&gt;
Notre projet implique l'utilisation de capteurs, de servomoteurs et de buzzers, constituant chacun une partie de la programmation embarquée.&lt;br /&gt;
&lt;br /&gt;
Pour cette programmation, nous avons décidé d'utiliser AVR-gcc et ainsi coder les arduinos en C.&lt;br /&gt;
&lt;br /&gt;
Les capteurs utilisés utilisent un protocole de communication IIC (ou I²C, I2C), ce protocole de multiples avantages que nous expliciterons par la suite. Cependant, comme un des capteurs (l'accéléromètre) prévus initialement nous a causé beaucoup de soucis, nous expliciterons également la mesure à l'aide de capteurs analogiques. Ces différents capteurs nous permettront de mesurer l'excitation d'un utilisateur.&lt;br /&gt;
&lt;br /&gt;
Une fois l'excitation mesurée, il faut induire une réponse &amp;quot;physique&amp;quot;. Pour ce faire, nous utilisons d'une part des servomoteurs dans le but de produire une sensation de massage.&lt;br /&gt;
&lt;br /&gt;
D'autre part, nous utilisons également des buzzers.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'' Veuillez noter que le code ne sera pas détaillé dans le wiki, vous pouvez vous référer au dépôt git contenant les différents codes. ''&lt;br /&gt;
&lt;br /&gt;
===Utilisation des capteurs===&lt;br /&gt;
&lt;br /&gt;
====Capteurs par IIC====&lt;br /&gt;
&lt;br /&gt;
Le choix de l'IIC n'était pas anodin. L'IIC permet, pour un bus de seulement deux fils (SDA et SCL), d'utiliser un nombre important de capteurs. Ainsi, si nous décidions au cours du projet de rajouter tel ou tel capteurs, nous n'avions qu'à les greffer à ce bus IIC.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Iic.jpg|400px|center|Schema iic]]&lt;br /&gt;
&lt;br /&gt;
Tout d’abord, nous devons initialiser le bus IIC de l’arduino. Pour ce faire, il suffit de préciser la fréquence désirée, ici 400KHz, dans les registres TWSR (prescaler) et TWBR. (fréquence désirée suivant la fonction TWBR = (Fcpu - 16 Fscl ) / (2 Fscl Prescaler) ) avant de lancer l'utilisation IIC via le bit TWIE.&lt;br /&gt;
&lt;br /&gt;
Comme il peut y avoir potentiellement plusieurs capteurs sur ce bus, il faut respecter un certain protocole afin de récupérer la valeur du capteur de température. Attardons nous sur la lecture d’une valeur sur le capteur de température. Il faut : &lt;br /&gt;
&lt;br /&gt;
* Lancer un message de start&lt;br /&gt;
* Envoyer l’adresse du capteur de température (0x98 dans notre cas)&lt;br /&gt;
* Envoyer l’adresse du registre qui nous intéresse (0x00 pour celui contenant la température), ceci placera le pointeur de registre du capteur sur cette adresse&lt;br /&gt;
* Restart la communication pour laisser la main au capteur&lt;br /&gt;
* Envoyer l’adresse du capteur en ajoutant 1 (Ceci permet de stipuler que nous désirons lire la valeur pointée)&lt;br /&gt;
* Lire la partie haute de la température&lt;br /&gt;
* Lire la partie basse de la température&lt;br /&gt;
* Envoyer un message de stop&lt;br /&gt;
&lt;br /&gt;
Chaque action correspond à l'utilisation d'une fonction de la librairie IIC codée. (cf déport git) Et après chaque action, nous devons vérifier le status du bus dans le registre TWSR. Ce &amp;quot;status&amp;quot; nous donnera des indications sur le bon déroulement de la communication, à savoir la réception d'ACK (équivalent d'accusé de réception) ou confirmation d'envoie de start, restart, etc.&lt;br /&gt;
&lt;br /&gt;
=====Test=====&lt;br /&gt;
&lt;br /&gt;
Le test de la librairie iic s'est fait directement lorsque la carte du capteur de température a été soudée. Pour ce faire, nous utilisons une compilation en mode &amp;quot;DEBUG&amp;quot; (make debug upload) qui nous permettait de lire la valeur des &amp;quot;status&amp;quot; avec minicom. &lt;br /&gt;
Après différents tests, nous avons finalement réussi à faire fonctionner le capteur de température en IIC, ce dernier nous renvoyait bel et bien une valeur de température précise à 0.5degrés près, vérifié à l'aidé d'un autre capteur de température.&lt;br /&gt;
&lt;br /&gt;
Il est néanmoins regrettable que ce capteur ne sera pas utilisable dans les prototypes finaux dans la mesure où il est greffé à une carte dont le module bluetooth n'est pas utilisable.&lt;br /&gt;
&lt;br /&gt;
====Capteurs analogique====&lt;br /&gt;
&lt;br /&gt;
Comme dit précédemment, nous avons abandonné l'utilisation de l’accéléromètre IIC prévu initialement dans le vagin car nous n'avons pas réussi à le souder sur les cartes du pénis. Nous avons donc utilisé ce qui était à notre disposition à savoir un capteur analogique.&lt;br /&gt;
&lt;br /&gt;
La mesure analogique sous AVR se fait simplement via l'utilisation de la fonction ad_sample(numéro de la broche analogique lue). Elle renvoie directement une valeur entre 0 et 255 correspondant à une conversion analogique-numérique de la tension sur la broche lue du capteur.&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
===Contrôle des servomoteurs===&lt;br /&gt;
&lt;br /&gt;
Un servomoteur se contrôle à l'aide d'un signal PWM (Pulse Width Modulation). Ce signal consiste à modifier la largeur de l'impulsion en fonction de la consigne désirée. &lt;br /&gt;
&lt;br /&gt;
La génération de PWM via microcontrôleur se fait à l'aide de TIMERS. Il faut savoir qu'il existe une priorité dans les interruptions, pour un TIMER_X donné, plus le X est proche de 0, plus l'interruption sera prioritaire. Nos signaux PWM se doivent d'être le plus en accord avec nos consignes, c'est pourquoi nous avons choisi d'utiliser les TIMER les plus prioritaires pour les générer. (TIMER0 et TIMER1)&lt;br /&gt;
&lt;br /&gt;
====PWM sur un seul servomoteur====&lt;br /&gt;
&lt;br /&gt;
Notre première manière de procéder consistait à générer la PWM nous même à l'aide du vecteur d'interruption d'un TIMER. La méthode consistait à compter de 0 à 255 en permanence. Lorsque le compteur était inférieur à la consigne, on passait une sortie à l'état haut, sinon elle restait à l'état bas. &lt;br /&gt;
&lt;br /&gt;
Cette méthode simulait plutôt bien le signal PWM et avait pour avantage d'être utilisable pour n'importe quelle de l'arduino. Cependant, cette méthode a le gros désavantage d'être sensible à l'utilisation d'autres interruptions, rendant le TIMER imprécis.&lt;br /&gt;
&lt;br /&gt;
Or, notre projet utilisera d'autres procédures d'interruption. Nous avons donc décidé d'utiliser une méthode plus simple mais nous restreignant sur le choix de nos sorties.&lt;br /&gt;
&lt;br /&gt;
En effet, un atmega possède des registres que l'on peut configurer pour générer des signaux PWM sur des broches spécifiques.&lt;br /&gt;
&lt;br /&gt;
Ainsi, en configurant le registre TCCR0A à 0x81 et TCCR0B à 0x05, on se place en mode PWM non inversée à fréquence élevée. En résumé, cette configuration nous permet de faire varier les signaux PWM en introduisant une consigne dans le registre OCR0A.&lt;br /&gt;
&lt;br /&gt;
Ainsi, nous pouvons donc contrôler le moteur simplement en changeant la consigne dans OCR0A.&lt;br /&gt;
&lt;br /&gt;
====Tests====&lt;br /&gt;
&lt;br /&gt;
Dans un premier lieu, les moteurs servomoteurs ne recevaient pas les consignes. Nous pensions que le fait que la PWM soit en 3V3 était l'origine du problème. Nous avons donc fait le montage à l'aide d'un transistor NPN monté en saturé. Le problème n'a pas été résolu. &lt;br /&gt;
&lt;br /&gt;
Finalement, le soucis viendrait du fait que les tests étaient effectués avec des valeurs du registre OCR0A à 0 (pwm nulle). Nous n'aurons donc pas besoin d'un montage à transistor pour le PCB.&lt;br /&gt;
&lt;br /&gt;
Le but des servomoteurs est d'effectuer un semblant de massage, nous allons donc modifier le code afin d'effectuer la tâche de manière périodique via l'utilisation d'un TIMER.&lt;br /&gt;
&lt;br /&gt;
====Gestion d'un ensemble de servomoteurs====&lt;br /&gt;
&lt;br /&gt;
Dans le vagin, nous utilisons 4 servomoteurs afin de masser l'utilisateur. Nous avons trouvé intéressant de diviser ces moteurs en deux couples afin d'intensifier ou non ce massage en fonction des seuils d'excitation détectés par les capteurs.&lt;br /&gt;
&lt;br /&gt;
Pour ce faire, nous aurons besoin de deux signaux PWM différents, donc de l'utilisation de deux timers configurés en PWM. &lt;br /&gt;
&lt;br /&gt;
Comme dit en introduction de cette section, nous nous imposons l'utilisation du TIMER1 pour cette deuxième PWM. Il existe une différence dans la configuration de cette dernière dans la mesure où le signal peut recevoir des consignes allant de 8 à 16bits en fonction de la configuration. Afin de simplifier les choses, nous avons configuré cette dernière sur 8bits pour lui envoyer les mêmes consignes que pour le TIMER0.&lt;br /&gt;
&lt;br /&gt;
====Tests====&lt;br /&gt;
&lt;br /&gt;
Avant tout, nous devions vérifier que la consigne avait une intensité suffisante pour être envoyée sur deux servomoteurs en même temps. Ce qui était le cas.&lt;br /&gt;
&lt;br /&gt;
Ensuite, nous avons testés des changements de consignes plus ou moins rapides afin de déterminer ce qui répondrait le mieux à nos attentes.&lt;br /&gt;
&lt;br /&gt;
Les tests concluants, nous pouvions passer à la suite.&lt;br /&gt;
&lt;br /&gt;
===Utilisation des buzzers===&lt;br /&gt;
&lt;br /&gt;
En fonction du niveau d'excitation, nous ferons vibrer un ou deux buzzers. Pour ce faire, nous avons fait le choix de souder leur broche GND au GND de nos cartes et ainsi souder leur potentiel VCC à une broche de l'arduino. Ainsi, si nous plaçons la broche à l'état bas, le tension dans le buzzer est nulle et si nous passons la broche à l'état haut, la tension aux bornes du buzzers devient 3.3V et il vibre.&lt;br /&gt;
&lt;br /&gt;
Pour ce faire, nous utilisons simplement deux broches, ici PXX et PXX, que nous avons initialisés en tant que sorties en mettant à un leur bit correspondant dans le registre DDRX. Ainsi, il ne reste plus qu'à commander la valeur haute ou basse de ces broches en mettant à 1 ou 0 leur bit dans le registre PORTX.&lt;br /&gt;
&lt;br /&gt;
====Tests====&lt;br /&gt;
&lt;br /&gt;
Ceci a été testé sur breadboard et était fonctionnel. Cependant, une chose à quoi nous n'avions pas pensé était que lorsque nous les avons soudés sur le PCB, nous aurions dû utiliser des câbles plus épais, car comme nous n'avions pas de prototype sur quoi coller les buzzers, l'un des buzzers s'est arraché de la carte en vibrant.&lt;br /&gt;
&lt;br /&gt;
===Résumé===&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Resume sextoy.png|center|recap]]&lt;br /&gt;
&lt;br /&gt;
==Gestion de la communication bluetooth==&lt;br /&gt;
===Introduction===&lt;br /&gt;
Dans le cadre de notre projet, la communication entre le sextoy et le téléphone se fera à faible portée. C'est pourquoi nous avons considéré comme intéressante l'utilisation de la technologie bluetooth.&lt;br /&gt;
&lt;br /&gt;
La première partie consiste à coder une librairie au niveau de l'arduino. Cette librairie, codée en C, consiste simplement en une lecture / écriture via les broches RX/TX de l'arduino et du module bluetooth. &lt;br /&gt;
&lt;br /&gt;
La seconde partie conssite à coder la partie application mobile qui communiquera avec la arduino.&lt;br /&gt;
&lt;br /&gt;
Une fois que cette transmission sera mise en place, il ne reste plus qu'à expliciter le protocole des paquets transmis.&lt;br /&gt;
&lt;br /&gt;
===Arduino===&lt;br /&gt;
&lt;br /&gt;
Afin de communiquer à travers le module bluetooth, il faut relier la broche RX de l'arduino à celle TX du module bluetooth et inversement. Pour tester nos codes, nous avons utilisé un module bluetooth HC-06 et l'application [https://play.google.com/store/apps/details?id=Qwerty.BluetoothTerminal&amp;amp;hl=fr| Bluetooth Terminal]. &lt;br /&gt;
&lt;br /&gt;
Dans la mesure où l'arduino devra traiter l'arrivée asynchrone de messages tout en effectuant le traitement des capteurs, il est intéressant d'effectuer des lectures à l'aide d'interruptions. Pour cela, nous utilisons le vecteur d'interruption USART_RXC_vect qui déclenchera la fonction de lecture d'un paquet à chaque fois qu'un message est reçu.&lt;br /&gt;
&lt;br /&gt;
''Actuellement, la librarie est fonctionnelle, il ne reste plus qu'à faire l'utilisation par interruption.''&lt;br /&gt;
&lt;br /&gt;
===Application mobile===&lt;br /&gt;
===Protocole de transmission===&lt;br /&gt;
===Module bluetooth utilisé===&lt;br /&gt;
&lt;br /&gt;
Le module bluetooth embarqué sur le PCB est un module reprogrammable. Ainsi il était nécessaire de connaître la configuration par défaut du composant, dans le but de savoir s'il fallait ou non prévoir un pcb de reconfiguration.&lt;br /&gt;
&lt;br /&gt;
Le CYBLE-012012 est configuré par défaut avec le firmware &amp;quot;EZ-Serial BLE Firmware&amp;quot;. La configuration par défaut de ce firmware est la suivante : &lt;br /&gt;
&lt;br /&gt;
* 115200 baud, 8bits de donnée, pas de bit de parité, 1bit de stop&lt;br /&gt;
* &amp;quot;UART flow control&amp;quot; désactivé&lt;br /&gt;
* firmware activé en mode &amp;quot;auto-start&amp;quot;, qui correspond à une recherche automatique de connection bluetooth et de redirection RX-TX en cas de connection&lt;br /&gt;
&lt;br /&gt;
Ces [http://www.cypress.com/file/285326/download| informations] sont importantes car, si elles sont vraiment respectées, nous n'auront pas à créer notre propre kit de développement, ce qui est un gain de temps considérable.&lt;br /&gt;
&lt;br /&gt;
Qui plus est, l'utilisation d'une fonction &amp;quot;auto-start&amp;quot; est en adéquation avec le module bluetooth HC-05 utilisé pour les tests. Nous pouvons donc commencer la programmation mobile du bluetooth en parallèle de l'impression des pcb. Et, dans le cas où les pcb seraient disfonctionnels, nous pourront quand meme envisager un prototype sur breadboard.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Test====&lt;br /&gt;
&lt;br /&gt;
Après avoir alimenté la carte, nous n'avons pas pu nous connecter au module bluetooth, ce dernier n'étant même pas visible dans les appareils alentours. &lt;br /&gt;
&lt;br /&gt;
Nous avons alors vérifié si la carte était correctement alimentée. Pour ce faire, nous avons mesuré différents points de tensions sensé être mis par défaut en PULL-DOWN ou PULL-UP à des niveaux de tensions d'1.7V. Ces niveaux étaient respectés. Le problème n'est donc pas d'ordre électronique. &lt;br /&gt;
&lt;br /&gt;
Par la suite, nous avons voulu vérifier la communication du module. Ce dernier, en déclenchant l'auto start est sensé émettre (en suivant le protocole UART rappelé précédemment) un message START. Nous avons donc inspecté ceci en utilisant minicom. En effet, minicom reçoit un message, mais ne sait pas le déchiffré. Qui plus est, impossible d'envoyer un message au module afin de le reprogrammer (de manière similaire à un XBee).&lt;br /&gt;
&lt;br /&gt;
Devant ces soucis, nous décidons donc d'abandonner ce module bluetooth et de poursuivre avec celui utilisé pour les essais de programmation, le HC-05.&lt;br /&gt;
&lt;br /&gt;
==Conception de l'application Android==&lt;br /&gt;
===Envoie et réception de SMS===&lt;br /&gt;
Afin de ne pas utiliser de serveur, les deux appareils Android doivent synchroniser l'envoi de paquet UDP, pour cela nous avons voulu utiliser des SMS.&lt;br /&gt;
Les SMS permettent d'envoyer des informations, comme les adresses IP, les ports utilisés, l'heure à laquelle les deux téléphones vont envoyer leur premier paquet UDP.&lt;br /&gt;
&lt;br /&gt;
Dans un premier temps nous avons créer une application pour envoyer les SMS:&lt;br /&gt;
&lt;br /&gt;
L'application était très simple, l'envoi de SMS se faisait en deux lignes&lt;br /&gt;
  // initialisation d'une variable sms gérant les sms&lt;br /&gt;
  SmsManager sms = SmsManager.getDefault() ;&lt;br /&gt;
  // envoie un sms comportant le texte de la variable message de type String au numéro contenu dans la variable num de type String&lt;br /&gt;
  sms.sendTextMessage(num, null, message, null, null);&lt;br /&gt;
&lt;br /&gt;
Dans un deuxième temps il fallait recevoir un SMS, ou plutôt savoir qu'un nouvel SMS avait été reçu :&lt;br /&gt;
&lt;br /&gt;
Pour cela il fallait utiliser un thread qui était appelé par interruption avec la réception d'un SMS comme vecteur d’interruption.&lt;br /&gt;
Ce thread effectuait ce qui était demandé dans sa fonction onReceive(), comme par exemple lire les informations contenues dans le SMS:&lt;br /&gt;
  public class IncomingSms extends BroadcastReceiver {&lt;br /&gt;
     final SmsManager sms = SmsManager.getDefault();&lt;br /&gt;
     public void onReceive(Context context, Intent intent) {&lt;br /&gt;
       //Ce qui doit etre fait lors de la reception de SMS&lt;br /&gt;
     }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Malheureusement ce programme ne marchait pas pendant des semaines, malgré de nombreuses modifications et de nombreux essais. Et le problème semblait être ma carte SIM, car en changeant de SIM, tous les programmes contenant ce code fonctionnaient parfaitement.&lt;br /&gt;
&lt;br /&gt;
===Protocole UDP===&lt;br /&gt;
Afin d'effectuer un échange de données entre les deux utilisateurs, et essayer de faire une vidéo-conférence, nous avons choisi d'utiliser le protocole UDP.&lt;br /&gt;
&lt;br /&gt;
Une première application permettait de tester l'envoi de paquet UDP, pour cela un serveur UDP a été utilisé sur un PC.&lt;br /&gt;
Le serveur attendait un message et l'affichait quand il le recevait.&lt;br /&gt;
&lt;br /&gt;
Pour envoyer un paquet nous utilisons :&lt;br /&gt;
&lt;br /&gt;
 DatagramSocket ds = null;&lt;br /&gt;
 ds = new DatagramSocket(PortA);&lt;br /&gt;
 DatagramPacket dp;&lt;br /&gt;
 InetAddress local = InetAddress.getByName(AdrIp);&lt;br /&gt;
 dp = new DatagramPacket(message.getBytes(),message.length(),local,PortA );&lt;br /&gt;
 ds.setBroadcast(true);&lt;br /&gt;
 ds.send(dp);&lt;br /&gt;
&lt;br /&gt;
Ce code crée un paquet qui comporte l’adresse et le port du destinataire, mais surtout les données à envoyer.&lt;br /&gt;
Ce paquet est ensuite envoyer grâce à un socket.&lt;br /&gt;
&lt;br /&gt;
Une fois que tout fonctionnait comme il le fallait, nous avons pu créer une application qui comportait l'envoi et la réception de paquet.&lt;br /&gt;
En mettant l'application sur deux téléphones on pouvait tester si tout fonctionnait.&lt;br /&gt;
Les tests ont seulement été effectué sur un réseau local, on ne sait pas pour le moment si des box internet pourraient empêcher la transmission.&lt;br /&gt;
Pour la réception nous utilisons :&lt;br /&gt;
 dsocket.receive(packet);&lt;br /&gt;
 buff = packet.getData();&lt;br /&gt;
&lt;br /&gt;
Pour récupérer les données du paquet dans la variable buff, il suffit ensuite de créer une boucle pour recevoir plusieurs messages.&lt;br /&gt;
La fonction de réception étant bloquante, il a été préférable de l'effectuer dans un thread.&lt;br /&gt;
&lt;br /&gt;
L'application est donc composé de un thread d'écoute, un thread d'envoi et d'un thread principal gérant l'affichage et appelant le thread d'envoi lorsque que le bouton de l'application est appuyé.&lt;br /&gt;
Voici une image de l'application, les champs d’adresseIp et de port du destinataire sont à remplir avant d'envoyer un paquet UDP.&lt;br /&gt;
Et le port d'écoute est défini dans le code de cette application, ce qui n'est pas très pratique, mais suffisant pour les tests.&lt;br /&gt;
&lt;br /&gt;
Le TextView est mis à jour à chaque que le bouton envoyer est appuyé, en prenant comme valeur celle d'un registre comprenant la valeurs du dernier paquet UDP reçu.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:ClientUdp.png]]&lt;br /&gt;
&lt;br /&gt;
===Communication Bluetooth===&lt;br /&gt;
Pour gérer la communication entre le téléphone et un sextoys, il faut utiliser une communication Bluetooth.&lt;br /&gt;
&lt;br /&gt;
Dans un premier temps il faut se connecter avec l'appareil:&lt;br /&gt;
 &lt;br /&gt;
 new ConnectBT().execute();&lt;br /&gt;
&lt;br /&gt;
Avec ConnectBT une classe trouvée sur internet.&lt;br /&gt;
&lt;br /&gt;
Ensuite il faut communiquer :&lt;br /&gt;
&lt;br /&gt;
Pour envoyer un message on utilise: &lt;br /&gt;
&lt;br /&gt;
 btSocket.getOutputStream().write(message);&lt;br /&gt;
&lt;br /&gt;
Avec btSocket un socket Bluetooth ayant été connecté avec le sextoy dans la classe ConnectBT.&lt;br /&gt;
&lt;br /&gt;
Ensuite il faut recevoir :&lt;br /&gt;
&lt;br /&gt;
 btSocket.getInputStream().read(mmBuffer);&lt;br /&gt;
&lt;br /&gt;
Avec mmBuffer qui contient le message reçu.&lt;br /&gt;
&lt;br /&gt;
Mais contrairement à la réception UDP, la réception Bluetooth n'est pas bloquante, ainsi on peut recevoir des messages nuls.&lt;br /&gt;
&lt;br /&gt;
Pour éviter ce problème l'application envoie un paquet Bluetooth, et reçoit juste après, et le sextoy est configuré pour envoyer un paquet UDP, juste après en avoir reçu un.&lt;br /&gt;
&lt;br /&gt;
===Application principale===&lt;br /&gt;
Afin d'être ergonomique,l'application doit pouvoir enregistrer des contacts, pour plus facilement communiquer avec eux.&lt;br /&gt;
Nous avons choisi de ne pas utiliser les contacts du téléphone, pour pouvoir avoir des contacts &amp;quot;confidentiels&amp;quot; qui ne seront que dans la base de donnée de l'application.&lt;br /&gt;
&lt;br /&gt;
Il fallait donc créer une base de donnée, nous avons donc utilisé SQLite car cette bibliothèque est utilisée par Android comme base de données embarquée.&lt;br /&gt;
La base ne comporte qu'une seule table, avec seulement les pseudos et les numéros de téléphone.&lt;br /&gt;
&lt;br /&gt;
Une fois la base crée, pour interagir avec, nous avons coder des activités:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
- Ajout de contact:&lt;br /&gt;
&lt;br /&gt;
Il faut entrer dans les champs de textes les informations pour la base de données,puis appuyer sur le bouton &amp;quot;Ajouter&amp;quot; pour créer un nouveau contact dans la base de donnée.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:AjoutContact.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-Fiche de Contact: &lt;br /&gt;
&lt;br /&gt;
Affiche le pseudo et le numéro de téléphone dans les &amp;quot;TextView&amp;quot;, et permet de : supprimer le contact en cliquant sur la croix, envoyer un SMS en cliquant sur l'icone &amp;quot;Message&amp;quot;, mais aussi commencer une communication UDP en cliquant sur le téléphone.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:FicheContact.png]]  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-Liste de contact :&lt;br /&gt;
&lt;br /&gt;
Affiche la liste de contacts, en cliquant sur un des contacts on arrive sur la page Fiche de Contact, et en cliquant sur le plus on arrive sur la page Ajout de Contact.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:ListView.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ensuite il faut ajouter la gestion de communication:&lt;br /&gt;
&lt;br /&gt;
-Les SMS :&lt;br /&gt;
&lt;br /&gt;
Il faut remplir les champs de texte et appuyer sur SMS pour envoyer un message du type&lt;br /&gt;
&lt;br /&gt;
Message&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Address Ip :&amp;quot; Addresse Ip&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Port :&amp;quot; Port&lt;br /&gt;
&lt;br /&gt;
Avec Message,Addresse Ip, et Port les champs à remplir, &amp;quot;Addresse Ip :&amp;quot; et &amp;quot;Port :&amp;quot; deux chaines de caractères.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:SMS.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-Protocole UDP : &lt;br /&gt;
&lt;br /&gt;
Quatre champs sont à remplir, cliquer sur Envoyer pour passez à l'activité de gestion Bluetooth.&lt;br /&gt;
&lt;br /&gt;
Les champs sont:&lt;br /&gt;
&lt;br /&gt;
-L'addresse Ip&lt;br /&gt;
&lt;br /&gt;
-Le port destination&lt;br /&gt;
&lt;br /&gt;
-Le port source&lt;br /&gt;
&lt;br /&gt;
-L'heure qui n'est pas utilisée, qui devait servir pour la synchronisation.&lt;br /&gt;
&lt;br /&gt;
Les valeurs des champs sont conservés pour la communication UDP à venir.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:UDP.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-Gestion Bluetooth :&lt;br /&gt;
&lt;br /&gt;
En cliquant sur &amp;quot;Paired Devices&amp;quot;, l'application affichera la liste des appareils appairés.&lt;br /&gt;
&lt;br /&gt;
Puis en cliquant un des appareils, l'application essayera de connecter avec, tout en lançant l'activité UDP avec Bluetooth.&lt;br /&gt;
&lt;br /&gt;
Si l'on souhaite ne pas utiliser de périphérique Bluetooth, il suffit de cliquer sur le bouton moins en haut à droite.&lt;br /&gt;
&lt;br /&gt;
L'activité UDP sans Bluetooth se lancera.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Bluetooth.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-Communication UDP avec Bluetooth:&lt;br /&gt;
&lt;br /&gt;
Pour lancer la communication UDP, appuyer sur le bouton Off ,il passera en mode On.&lt;br /&gt;
&lt;br /&gt;
Si vous cliquez sur le bouton On il passera en mode Off, et coupera la communication UDP.&lt;br /&gt;
&lt;br /&gt;
Le bouton envoyer, permet de forcer l'envoi d'un paquet UDP.&lt;br /&gt;
&lt;br /&gt;
Et le bouton croix coupe toutes les communications(UDP et Bluetooth), et retourne à la page précédente.&lt;br /&gt;
&lt;br /&gt;
Lorsque l'application reçoit un paquet UDP, un message est envoyé via Bluetooth au sextoys.&lt;br /&gt;
&lt;br /&gt;
Celui-ci répond automatiquement en envoyant une valeur moyennée des ses capteurs, cette valeur est récupérée et mise dans un registre.&lt;br /&gt;
&lt;br /&gt;
En parallèle, toutes les secondes un paquet UDP est envoyé et les données envoyés sont celle du registre.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Com.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-Communication UDP sans Bluetooth.&lt;br /&gt;
&lt;br /&gt;
Le bouton On/Off est utilisé comme dans l'activité &amp;quot;Communication UDP avec Bluetooth&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Les boutons de niveaux, mettent une valeur dans un même registre.&lt;br /&gt;
&lt;br /&gt;
Chaque boutons correspond à une valeur, qui correspondent avec un niveau d'excitation du sextoys.&lt;br /&gt;
&lt;br /&gt;
Ainsi toutes les secondes, un paquet UDP est envoyé avec comme donnée la valeur du registre.&lt;br /&gt;
&lt;br /&gt;
Lorsqu'un paquet UDP est reçu, la donnée reçue est mise dans un registre qui détermine l’affichage du &amp;quot;TextView&amp;quot; en bas à droite.&lt;br /&gt;
&lt;br /&gt;
Ce TextView est mis à jours en même temps qu'un paquet UDP est envoyé.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Co2.png]]&lt;br /&gt;
&lt;br /&gt;
== Rapport et codes ==&lt;br /&gt;
&lt;br /&gt;
Rapport : [[Fichier:CR_sextoy_connecte.pdf]]&lt;br /&gt;
&lt;br /&gt;
[https://archives.plil.fr/croussel/Projet_sextoy_connecte.git Codes]&lt;/div&gt;</summary>
		<author><name>Tstieven</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=IMA4_2016/2017_P14&amp;diff=42865</id>
		<title>IMA4 2016/2017 P14</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=IMA4_2016/2017_P14&amp;diff=42865"/>
				<updated>2017-05-20T15:56:39Z</updated>
		
		<summary type="html">&lt;p&gt;Tstieven : /* Application principale */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Projet IMA4 : Sex-toy connecté =&lt;br /&gt;
&lt;br /&gt;
== Présentation du projet ==&lt;br /&gt;
&lt;br /&gt;
L'objectif de ce projet est de développer un système d'échange entre deux partenaires distants afin de rendre plus facile la vie de couple à distance.&lt;br /&gt;
&lt;br /&gt;
Pour ce faire, le dispositif sera constitué de deux sextoys connectés (un par appareil génital désiré) à leur téléphone portable respectif. Une application mobile permettra aux utilisateurs de s'échanger des données de manière sécurisé, ceci au travers d'un serveur embarqué dans le téléphone portable.&lt;br /&gt;
&lt;br /&gt;
Les données échangées pourront être l'accélération ou la température. Elles seront traitées et transmises au sextoy qui adaptera sa vitesse, son retour vibratoire ou sa position en conséquence.&lt;br /&gt;
&lt;br /&gt;
Les sextoys pourraient être composés de :&lt;br /&gt;
* Pour l'appareil masculin (dédié à la femme) :&lt;br /&gt;
:* un servomoteur ;&lt;br /&gt;
:* un vibreur ;&lt;br /&gt;
:* une sonde de température ;&lt;br /&gt;
:* un accéléromètre.&lt;br /&gt;
* Pour l'appareil féminin (dédié à l'homme) :&lt;br /&gt;
:* 4 servomoteurs (dans le but de &amp;quot;masser&amp;quot; en déplaçant le silicone);&lt;br /&gt;
:* des vibreurs ;&lt;br /&gt;
:* un accéléromètre.&lt;br /&gt;
* Pour les deux appareils :&lt;br /&gt;
:* un micro-contrôleur (Arduino mini) ;&lt;br /&gt;
:* un module de transmission / réception bluetooth afin de se connecter au téléphone ;&lt;br /&gt;
:* du silicone.&lt;br /&gt;
	&lt;br /&gt;
* L'application mobile devra :&lt;br /&gt;
:* mettre en place une communication cryptée à travers un serveur (embarqué ou bien intermédiaire ?) ;&lt;br /&gt;
:* effectuer un échange de données en bluetooth avec le sextoy connecté.&lt;br /&gt;
&lt;br /&gt;
* L'application mobile pourra :&lt;br /&gt;
:* utiliser la vidéo-conférence ;&lt;br /&gt;
:* enregistrer les meilleurs moments et enventuellement pouvoir les partager ;&lt;br /&gt;
:* effectuer une recherche de partenaire aléatoire.&lt;br /&gt;
&lt;br /&gt;
* S'il nous reste du temps, il peut être envisageable de :&lt;br /&gt;
:* mettre en place un réseau social interne à Polytech.&lt;br /&gt;
&lt;br /&gt;
== Liste des tâches ==&lt;br /&gt;
* Conception de l'appareil masculin (Cédric)&lt;br /&gt;
:* mettre en place le bus I2C avec les différents capteurs ;&lt;br /&gt;
:* création d'un PCB au format gerber ;&lt;br /&gt;
:* création d'un prototype.&lt;br /&gt;
&lt;br /&gt;
* Conception de l'appareil féminin (Cédric)&lt;br /&gt;
:* mettre en place le bus I2C ;&lt;br /&gt;
:* traitement des données afin d'en déduire la position et l'entrain de l'utilisateur ;&lt;br /&gt;
:* création d'un PCB ;&lt;br /&gt;
:* création d'un prototype.&lt;br /&gt;
&lt;br /&gt;
* Communication bluetooth (Cédric et Thomas)&lt;br /&gt;
:* étudier l'émission/réception vue de l'arduino ;&lt;br /&gt;
:* étudier l'émission/réception vue du téléphone ;&lt;br /&gt;
:* mise en place du protocole ;&lt;br /&gt;
:* test de portée.&lt;br /&gt;
&lt;br /&gt;
* Développement mobile (Thomas)&lt;br /&gt;
:* déterminer la meilleure approche : utilisation d'un serveur intermédiaire ou bien mise en place d'un &amp;quot;client-serveur&amp;quot; dans l'application mobile ;&lt;br /&gt;
:* mettre en place le choix retenu ;&lt;br /&gt;
:* tester dans un premier temps une transmission de texte ;&lt;br /&gt;
:* programmer le traitement de données reçues par bluetooth ;&lt;br /&gt;
:* rajouter un côté esthétique à l'application.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Recapitulatif sextoy.png|center|recap]]&lt;br /&gt;
&lt;br /&gt;
==Feuille d'heures==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Tâche !! Prélude !! Heures S1 !! Heures S2 !! Heures S3 !! Heures S4 !! Heures vacances !! Heures S5 !! Heures S6 !! Heures S7 !! Heures S8 !! Heures S9 !! Heures S10 !! Heures vacances et après!! Total&lt;br /&gt;
|-&lt;br /&gt;
| Définition cahier des charges &lt;br /&gt;
| 2H&lt;br /&gt;
| 2H&lt;br /&gt;
| 1H&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 5H&lt;br /&gt;
|-&lt;br /&gt;
| Dimensionnement et établissement de la liste de matériel&lt;br /&gt;
| &lt;br /&gt;
| 3H&lt;br /&gt;
| 4H&lt;br /&gt;
|&lt;br /&gt;
| 4H&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 11H&lt;br /&gt;
|-&lt;br /&gt;
| Établissement de la liste et de la répartition des tâches&lt;br /&gt;
| 1H&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 1H&lt;br /&gt;
|-&lt;br /&gt;
| Appareil masculin : programmation&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 1H&lt;br /&gt;
| 2H&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 6H&lt;br /&gt;
| 9H &lt;br /&gt;
|-&lt;br /&gt;
| Appareil masculin : étude des datasheets&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 1H&lt;br /&gt;
| 1H&lt;br /&gt;
|&lt;br /&gt;
| 4H&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| 1H&lt;br /&gt;
|&lt;br /&gt;
| 7H&lt;br /&gt;
|-&lt;br /&gt;
| Appareil masculin : PCB&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 4H&lt;br /&gt;
| 4H&lt;br /&gt;
| 6H&lt;br /&gt;
| 30H&lt;br /&gt;
| 44H&lt;br /&gt;
|-&lt;br /&gt;
| Appareil masculin : 3D&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| 6H&lt;br /&gt;
| 6H&lt;br /&gt;
|-&lt;br /&gt;
| Conception de l'appareil féminin&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 2H&lt;br /&gt;
| 1H&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 3H&lt;br /&gt;
|-&lt;br /&gt;
| Liaison bluetooth (embarqué)&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 3H&lt;br /&gt;
| 1H&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 8H&lt;br /&gt;
| 12H&lt;br /&gt;
|-&lt;br /&gt;
| Liaison bluetooth (téléphone)&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 15H&lt;br /&gt;
| 15H&lt;br /&gt;
|-&lt;br /&gt;
| Recherche et discussion autour de la meilleure approche de communication&lt;br /&gt;
| 2H&lt;br /&gt;
| 2H&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 4H&lt;br /&gt;
|-&lt;br /&gt;
| Synchronisation temporelle des téléphones (par sms)&lt;br /&gt;
| &lt;br /&gt;
| 2H&lt;br /&gt;
| 4H&lt;br /&gt;
| 6H&lt;br /&gt;
| 8H&lt;br /&gt;
| 6H&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 26H&lt;br /&gt;
|-&lt;br /&gt;
| Transmission de paquets UDP&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 4H&lt;br /&gt;
| 4H&lt;br /&gt;
| 4H&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 6H&lt;br /&gt;
| 18H&lt;br /&gt;
|-&lt;br /&gt;
| Streaming video(UDP)&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 4H&lt;br /&gt;
| 4H&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 8H&lt;br /&gt;
|-&lt;br /&gt;
| Application et bases de données&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 6H&lt;br /&gt;
| 20H&lt;br /&gt;
| 26H&lt;br /&gt;
|-&lt;br /&gt;
| Total&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 195H&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Conception des sextoys==&lt;br /&gt;
===Introduction===&lt;br /&gt;
&lt;br /&gt;
La conception de sextoys doit respecter différents règles, notamment sanitaires. C'est pourquoi nous nous sommes intéressés à l'utilisation de silicone pour ce projet. Nous avons notamment rencontré un ingénieur compétant dans ce domaine afin de nous aiguiller sur cette éventuelle conception.&lt;br /&gt;
&lt;br /&gt;
La conception passera également par une conception 3D que nous effectuerons à l'aide d'imprimantes 3D au fabricarium de Polytech Lille.&lt;br /&gt;
&lt;br /&gt;
Enfin, les prototypes seront embarqués de cartes électroniques (aussi appelés PCB) que nous constituerons.&lt;br /&gt;
&lt;br /&gt;
===Choix du silicone, rencontre avec Mario Sanz===&lt;br /&gt;
&lt;br /&gt;
Le projet nécessite l'utilisation d'une matière souple et non irritante, c'est pourquoi nous avons choisi de nous tourner vers l'utilisation du silicone. Afin de choisir au mieux le produit correspondant à nos besoins, nous avons rencontré Mario Sanz, ingénieur à l'INRIA, qui travail régulièrement avec du silicone.&lt;br /&gt;
&lt;br /&gt;
Ce dernier nous a expliqué les différents points importants sur lesquels nous baser afin de choisir au mieux un produit en accord avec le projet. Ne serait-ce que pour le choix de la dureté, il existe une échelle propre au silicone (&amp;quot;Shore hardness scale&amp;quot;), nous pensions au départ rechercher un silicone le plus mou possible, cependant, il faut savoir que le plus le silicone est mou, plus il a tendance à être &amp;quot;collant&amp;quot;. Finalement, après discutions, un shore de 40A (correspondant à la dureté d'une gomme) suffisamment mince fera l'affaire pour la conception des prototypes.&lt;br /&gt;
&lt;br /&gt;
Il nous a également expliqué que le silicone peut être travaillé à l'aide d'additifs et sous cloche à vide afin d'améliorer le moulage, l'absence de &amp;quot;bulles&amp;quot; sur la surface de la pièce et la souplesse. Nous pouvons cependant travailler sans tout cela car il n'est pas spécialement important, pour notre projet, de rechercher des propriétés physiques homogènes dans tout le sextoy.&lt;br /&gt;
&lt;br /&gt;
Pour ce qui est de la création de moules, nous pourrons les effectuer via imprimante 3D. Il existe un bon nombre de tutoriels sur internet pour s'y référer en cas de soucis.&lt;br /&gt;
&lt;br /&gt;
===Impression 3D===&lt;br /&gt;
&lt;br /&gt;
Pour la création d'objets en 3D, de nombreux outils sont disponibles. Nous avons décidé d'utiliser Tinkercad, un outil qui s'intègre directement au navigateur internet utilisé. &lt;br /&gt;
&lt;br /&gt;
L'avantage d'un tel outil est sa grande communauté qui permet un accès simple et rapide à une multitudes de projets dont on pourrait s'inspirer pour générer nos pièces.&lt;br /&gt;
&lt;br /&gt;
====Création des moules====&lt;br /&gt;
&lt;br /&gt;
A l'aide d'une imprimante 3D, nous pouvons concevoir des moules afin de créer des pièces en silicone. Il s'agit de la manière la plus rapide et accessible pour notre projet.&lt;br /&gt;
&lt;br /&gt;
Cette méthode comporte des désavantages, dont le principal est la présence d'imperfection et de non homogénéité dans les pièces réalisées. Ceci n'a pas de grande importance dans la mesure où nous souhaitons du qualitatif.&lt;br /&gt;
&lt;br /&gt;
====Création d'un prototype====&lt;br /&gt;
&lt;br /&gt;
=====Pénis=====&lt;br /&gt;
&lt;br /&gt;
Afin de visualiser qualitativement la forme et le passage des câbles, un prototype imprimé au Fabricarium de Polytech Lille a été réalisé. &lt;br /&gt;
&lt;br /&gt;
Ce prototype se divise en 3 pièces : un boîtier (pour y loger le PCB), un cylindre (afin de reproduire la forme désirée) et un &amp;quot;tête&amp;quot; qui devait à l'origine être un moule en silicone (pour y loger le PCB du capteur de température).&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Sextoy_penis.png|400px|thumb|center|Prototype 3D pénis]]&lt;br /&gt;
&lt;br /&gt;
===Conception des PCB===&lt;br /&gt;
&lt;br /&gt;
Afin de diminuer un maximum la taille des cartes electroniques, nous utilisons principalement des composants CMS. &lt;br /&gt;
&lt;br /&gt;
La conception des cartes peut-être effectué à l'aide de logicels de CAO tels qu'Altium ou Eagle. Dans notre cas, nous avons utilisé Eagle. &lt;br /&gt;
&lt;br /&gt;
Ce travail consiste à créer une librairie regroupant l'intégralité des composants nécessaires et, ensuite, de  créer un schéma du circuit. Une fois le schéma terminé, il ne restera plus qu'à faire le routage et exporter les fichiers au format &amp;quot;Gerber&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Pour ce projet, nous aurons besoin de deux cartes, une par prototype. Chaque carte embarquera des composants similaires, c'est pourquoi nous nous contenterons d'abord d'un seul PCB pour effectuer des tests. Si ces derniers sont concluants, nous pourrons graver le second.&lt;br /&gt;
&lt;br /&gt;
====PCB du pénis====&lt;br /&gt;
&lt;br /&gt;
Le premier PCB imprimé et soudé est celui du pénis. Une première carte avait été imprimé regroupant sur cette dernière : un support pour l'arduino, un accéléromètre, un module bluetooth. &lt;br /&gt;
&lt;br /&gt;
[[Fichier:PCB_penis_VB.png|400px|thumb|center|PCB v1.0]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous avons expérimentés des problèmes dûs aux dimensions de l'accéléromètre, l'utilisation d'un boîtier CMS de type TDFN10 2x2 était optimiste pour la réalisation du projet, compte tenu du matériel à disposition.&lt;br /&gt;
&lt;br /&gt;
C'est pourquoi une seconde carte a été gravée, cette fois sans l'accéléromètre.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:PCB_penis_VF.png|400px|thumb|center|PCB v2.0]]&lt;br /&gt;
&lt;br /&gt;
[[Fichier:PCB_VF.png|400px|thumb|center|PCB v2.0 schema]]&lt;br /&gt;
&lt;br /&gt;
Ce prototype est sensé embarquer un capteur de température que nous avons décidé de mettre sur un PCB à part. Cette carte avait pour but d'être coulé dans le silicone, afin de mesurer la température au plus près de la zone intéressée.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:TEMPERATURE_PCB_VF.png|400px|thumb|center|PCB temperature]]&lt;br /&gt;
&lt;br /&gt;
[[Fichier:TEMPERATURE_VF.png|400px|thumb|center|PCB temperature schema]]&lt;br /&gt;
&lt;br /&gt;
====PCB du vagin====&lt;br /&gt;
&lt;br /&gt;
Compte tenu des soucis rencontrés avec l'accéléromètre, la carte sera gravée afin de pouvoir y plugger un accéléromètre analogique en traversant. Le but étant d'avoir un prototype fonctionnel d'ici la fin du projet.&lt;br /&gt;
&lt;br /&gt;
Nous avons également eu des problèmes avec le module bluetooth utilisé, ce dernier ne pouvant être reconfiguré manuellement par minicom, nous utiliserons le bluetooth HC-05 utilisé pour les essais de code. De même que pour l'accéléromètre, nous prévoirons un endroit pour le plugger sur la carte.&lt;br /&gt;
&lt;br /&gt;
''image PCB vagin''&lt;br /&gt;
&lt;br /&gt;
''Reste à graver le PCB du vagin''&lt;br /&gt;
&lt;br /&gt;
==Gestion des composants==&lt;br /&gt;
===Introduction===&lt;br /&gt;
&lt;br /&gt;
Notre projet implique l'utilisation de capteurs, de servomoteurs et de buzzers, constituant chacun une partie de la programmation embarquée.&lt;br /&gt;
&lt;br /&gt;
Pour cette programmation, nous avons décidé d'utiliser AVR-gcc et ainsi coder les arduinos en C.&lt;br /&gt;
&lt;br /&gt;
Les capteurs utilisés utilisent un protocole de communication IIC (ou I²C, I2C), ce protocole de multiples avantages que nous expliciterons par la suite. Cependant, comme un des capteurs (l'accéléromètre) prévus initialement nous a causé beaucoup de soucis, nous expliciterons également la mesure à l'aide de capteurs analogiques. Ces différents capteurs nous permettront de mesurer l'excitation d'un utilisateur.&lt;br /&gt;
&lt;br /&gt;
Une fois l'excitation mesurée, il faut induire une réponse &amp;quot;physique&amp;quot;. Pour ce faire, nous utilisons d'une part des servomoteurs dans le but de produire une sensation de massage.&lt;br /&gt;
&lt;br /&gt;
D'autre part, nous utilisons également des buzzers.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'' Veuillez noter que le code ne sera pas détaillé dans le wiki, vous pouvez vous référer au dépôt git contenant les différents codes. ''&lt;br /&gt;
&lt;br /&gt;
===Utilisation des capteurs===&lt;br /&gt;
&lt;br /&gt;
====Capteurs par IIC====&lt;br /&gt;
&lt;br /&gt;
Le choix de l'IIC n'était pas anodin. L'IIC permet, pour un bus de seulement deux fils (SDA et SCL), d'utiliser un nombre important de capteurs. Ainsi, si nous décidions au cours du projet de rajouter tel ou tel capteurs, nous n'avions qu'à les greffer à ce bus IIC.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Iic.jpg|400px|center|Schema iic]]&lt;br /&gt;
&lt;br /&gt;
Tout d’abord, nous devons initialiser le bus IIC de l’arduino. Pour ce faire, il suffit de préciser la fréquence désirée, ici 400KHz, dans les registres TWSR (prescaler) et TWBR. (fréquence désirée suivant la fonction TWBR = (Fcpu - 16 Fscl ) / (2 Fscl Prescaler) ) avant de lancer l'utilisation IIC via le bit TWIE.&lt;br /&gt;
&lt;br /&gt;
Comme il peut y avoir potentiellement plusieurs capteurs sur ce bus, il faut respecter un certain protocole afin de récupérer la valeur du capteur de température. Attardons nous sur la lecture d’une valeur sur le capteur de température. Il faut : &lt;br /&gt;
&lt;br /&gt;
* Lancer un message de start&lt;br /&gt;
* Envoyer l’adresse du capteur de température (0x98 dans notre cas)&lt;br /&gt;
* Envoyer l’adresse du registre qui nous intéresse (0x00 pour celui contenant la température), ceci placera le pointeur de registre du capteur sur cette adresse&lt;br /&gt;
* Restart la communication pour laisser la main au capteur&lt;br /&gt;
* Envoyer l’adresse du capteur en ajoutant 1 (Ceci permet de stipuler que nous désirons lire la valeur pointée)&lt;br /&gt;
* Lire la partie haute de la température&lt;br /&gt;
* Lire la partie basse de la température&lt;br /&gt;
* Envoyer un message de stop&lt;br /&gt;
&lt;br /&gt;
Chaque action correspond à l'utilisation d'une fonction de la librairie IIC codée. (cf déport git) Et après chaque action, nous devons vérifier le status du bus dans le registre TWSR. Ce &amp;quot;status&amp;quot; nous donnera des indications sur le bon déroulement de la communication, à savoir la réception d'ACK (équivalent d'accusé de réception) ou confirmation d'envoie de start, restart, etc.&lt;br /&gt;
&lt;br /&gt;
=====Test=====&lt;br /&gt;
&lt;br /&gt;
Le test de la librairie iic s'est fait directement lorsque la carte du capteur de température a été soudée. Pour ce faire, nous utilisons une compilation en mode &amp;quot;DEBUG&amp;quot; (make debug upload) qui nous permettait de lire la valeur des &amp;quot;status&amp;quot; avec minicom. &lt;br /&gt;
Après différents tests, nous avons finalement réussi à faire fonctionner le capteur de température en IIC, ce dernier nous renvoyait bel et bien une valeur de température précise à 0.5degrés près, vérifié à l'aidé d'un autre capteur de température.&lt;br /&gt;
&lt;br /&gt;
Il est néanmoins regrettable que ce capteur ne sera pas utilisable dans les prototypes finaux dans la mesure où il est greffé à une carte dont le module bluetooth n'est pas utilisable.&lt;br /&gt;
&lt;br /&gt;
====Capteurs analogique====&lt;br /&gt;
&lt;br /&gt;
Comme dit précédemment, nous avons abandonné l'utilisation de l’accéléromètre IIC prévu initialement dans le vagin car nous n'avons pas réussi à le souder sur les cartes du pénis. Nous avons donc utilisé ce qui était à notre disposition à savoir un capteur analogique.&lt;br /&gt;
&lt;br /&gt;
La mesure analogique sous AVR se fait simplement via l'utilisation de la fonction ad_sample(numéro de la broche analogique lue). Elle renvoie directement une valeur entre 0 et 255 correspondant à une conversion analogique-numérique de la tension sur la broche lue du capteur.&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
===Contrôle des servomoteurs===&lt;br /&gt;
&lt;br /&gt;
Un servomoteur se contrôle à l'aide d'un signal PWM (Pulse Width Modulation). Ce signal consiste à modifier la largeur de l'impulsion en fonction de la consigne désirée. &lt;br /&gt;
&lt;br /&gt;
La génération de PWM via microcontrôleur se fait à l'aide de TIMERS. Il faut savoir qu'il existe une priorité dans les interruptions, pour un TIMER_X donné, plus le X est proche de 0, plus l'interruption sera prioritaire. Nos signaux PWM se doivent d'être le plus en accord avec nos consignes, c'est pourquoi nous avons choisi d'utiliser les TIMER les plus prioritaires pour les générer. (TIMER0 et TIMER1)&lt;br /&gt;
&lt;br /&gt;
====PWM sur un seul servomoteur====&lt;br /&gt;
&lt;br /&gt;
Notre première manière de procéder consistait à générer la PWM nous même à l'aide du vecteur d'interruption d'un TIMER. La méthode consistait à compter de 0 à 255 en permanence. Lorsque le compteur était inférieur à la consigne, on passait une sortie à l'état haut, sinon elle restait à l'état bas. &lt;br /&gt;
&lt;br /&gt;
Cette méthode simulait plutôt bien le signal PWM et avait pour avantage d'être utilisable pour n'importe quelle de l'arduino. Cependant, cette méthode a le gros désavantage d'être sensible à l'utilisation d'autres interruptions, rendant le TIMER imprécis.&lt;br /&gt;
&lt;br /&gt;
Or, notre projet utilisera d'autres procédures d'interruption. Nous avons donc décidé d'utiliser une méthode plus simple mais nous restreignant sur le choix de nos sorties.&lt;br /&gt;
&lt;br /&gt;
En effet, un atmega possède des registres que l'on peut configurer pour générer des signaux PWM sur des broches spécifiques.&lt;br /&gt;
&lt;br /&gt;
Ainsi, en configurant le registre TCCR0A à 0x81 et TCCR0B à 0x05, on se place en mode PWM non inversée à fréquence élevée. En résumé, cette configuration nous permet de faire varier les signaux PWM en introduisant une consigne dans le registre OCR0A.&lt;br /&gt;
&lt;br /&gt;
Ainsi, nous pouvons donc contrôler le moteur simplement en changeant la consigne dans OCR0A.&lt;br /&gt;
&lt;br /&gt;
====Tests====&lt;br /&gt;
&lt;br /&gt;
Dans un premier lieu, les moteurs servomoteurs ne recevaient pas les consignes. Nous pensions que le fait que la PWM soit en 3V3 était l'origine du problème. Nous avons donc fait le montage à l'aide d'un transistor NPN monté en saturé. Le problème n'a pas été résolu. &lt;br /&gt;
&lt;br /&gt;
Finalement, le soucis viendrait du fait que les tests étaient effectués avec des valeurs du registre OCR0A à 0 (pwm nulle). Nous n'aurons donc pas besoin d'un montage à transistor pour le PCB.&lt;br /&gt;
&lt;br /&gt;
Le but des servomoteurs est d'effectuer un semblant de massage, nous allons donc modifier le code afin d'effectuer la tâche de manière périodique via l'utilisation d'un TIMER.&lt;br /&gt;
&lt;br /&gt;
====Gestion d'un ensemble de servomoteurs====&lt;br /&gt;
&lt;br /&gt;
Dans le vagin, nous utilisons 4 servomoteurs afin de masser l'utilisateur. Nous avons trouvé intéressant de diviser ces moteurs en deux couples afin d'intensifier ou non ce massage en fonction des seuils d'excitation détectés par les capteurs.&lt;br /&gt;
&lt;br /&gt;
Pour ce faire, nous aurons besoin de deux signaux PWM différents, donc de l'utilisation de deux timers configurés en PWM. &lt;br /&gt;
&lt;br /&gt;
Comme dit en introduction de cette section, nous nous imposons l'utilisation du TIMER1 pour cette deuxième PWM. Il existe une différence dans la configuration de cette dernière dans la mesure où le signal peut recevoir des consignes allant de 8 à 16bits en fonction de la configuration. Afin de simplifier les choses, nous avons configuré cette dernière sur 8bits pour lui envoyer les mêmes consignes que pour le TIMER0.&lt;br /&gt;
&lt;br /&gt;
====Tests====&lt;br /&gt;
&lt;br /&gt;
Avant tout, nous devions vérifier que la consigne avait une intensité suffisante pour être envoyée sur deux servomoteurs en même temps. Ce qui était le cas.&lt;br /&gt;
&lt;br /&gt;
Ensuite, nous avons testés des changements de consignes plus ou moins rapides afin de déterminer ce qui répondrait le mieux à nos attentes.&lt;br /&gt;
&lt;br /&gt;
Les tests concluants, nous pouvions passer à la suite.&lt;br /&gt;
&lt;br /&gt;
===Utilisation des buzzers===&lt;br /&gt;
&lt;br /&gt;
En fonction du niveau d'excitation, nous ferons vibrer un ou deux buzzers. Pour ce faire, nous avons fait le choix de souder leur broche GND au GND de nos cartes et ainsi souder leur potentiel VCC à une broche de l'arduino. Ainsi, si nous plaçons la broche à l'état bas, le tension dans le buzzer est nulle et si nous passons la broche à l'état haut, la tension aux bornes du buzzers devient 3.3V et il vibre.&lt;br /&gt;
&lt;br /&gt;
Pour ce faire, nous utilisons simplement deux broches, ici PXX et PXX, que nous avons initialisés en tant que sorties en mettant à un leur bit correspondant dans le registre DDRX. Ainsi, il ne reste plus qu'à commander la valeur haute ou basse de ces broches en mettant à 1 ou 0 leur bit dans le registre PORTX.&lt;br /&gt;
&lt;br /&gt;
====Tests====&lt;br /&gt;
&lt;br /&gt;
Ceci a été testé sur breadboard et était fonctionnel. Cependant, une chose à quoi nous n'avions pas pensé était que lorsque nous les avons soudés sur le PCB, nous aurions dû utiliser des câbles plus épais, car comme nous n'avions pas de prototype sur quoi coller les buzzers, l'un des buzzers s'est arraché de la carte en vibrant.&lt;br /&gt;
&lt;br /&gt;
===Résumé===&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Resume sextoy.png|center|recap]]&lt;br /&gt;
&lt;br /&gt;
==Gestion de la communication bluetooth==&lt;br /&gt;
===Introduction===&lt;br /&gt;
Dans le cadre de notre projet, la communication entre le sextoy et le téléphone se fera à faible portée. C'est pourquoi nous avons considéré comme intéressante l'utilisation de la technologie bluetooth.&lt;br /&gt;
&lt;br /&gt;
La première partie consiste à coder une librairie au niveau de l'arduino. Cette librairie, codée en C, consiste simplement en une lecture / écriture via les broches RX/TX de l'arduino et du module bluetooth. &lt;br /&gt;
&lt;br /&gt;
La seconde partie conssite à coder la partie application mobile qui communiquera avec la arduino.&lt;br /&gt;
&lt;br /&gt;
Une fois que cette transmission sera mise en place, il ne reste plus qu'à expliciter le protocole des paquets transmis.&lt;br /&gt;
&lt;br /&gt;
===Arduino===&lt;br /&gt;
&lt;br /&gt;
Afin de communiquer à travers le module bluetooth, il faut relier la broche RX de l'arduino à celle TX du module bluetooth et inversement. Pour tester nos codes, nous avons utilisé un module bluetooth HC-06 et l'application [https://play.google.com/store/apps/details?id=Qwerty.BluetoothTerminal&amp;amp;hl=fr| Bluetooth Terminal]. &lt;br /&gt;
&lt;br /&gt;
Dans la mesure où l'arduino devra traiter l'arrivée asynchrone de messages tout en effectuant le traitement des capteurs, il est intéressant d'effectuer des lectures à l'aide d'interruptions. Pour cela, nous utilisons le vecteur d'interruption USART_RXC_vect qui déclenchera la fonction de lecture d'un paquet à chaque fois qu'un message est reçu.&lt;br /&gt;
&lt;br /&gt;
''Actuellement, la librarie est fonctionnelle, il ne reste plus qu'à faire l'utilisation par interruption.''&lt;br /&gt;
&lt;br /&gt;
===Application mobile===&lt;br /&gt;
===Protocole de transmission===&lt;br /&gt;
===Module bluetooth utilisé===&lt;br /&gt;
&lt;br /&gt;
Le module bluetooth embarqué sur le PCB est un module reprogrammable. Ainsi il était nécessaire de connaître la configuration par défaut du composant, dans le but de savoir s'il fallait ou non prévoir un pcb de reconfiguration.&lt;br /&gt;
&lt;br /&gt;
Le CYBLE-012012 est configuré par défaut avec le firmware &amp;quot;EZ-Serial BLE Firmware&amp;quot;. La configuration par défaut de ce firmware est la suivante : &lt;br /&gt;
&lt;br /&gt;
* 115200 baud, 8bits de donnée, pas de bit de parité, 1bit de stop&lt;br /&gt;
* &amp;quot;UART flow control&amp;quot; désactivé&lt;br /&gt;
* firmware activé en mode &amp;quot;auto-start&amp;quot;, qui correspond à une recherche automatique de connection bluetooth et de redirection RX-TX en cas de connection&lt;br /&gt;
&lt;br /&gt;
Ces [http://www.cypress.com/file/285326/download| informations] sont importantes car, si elles sont vraiment respectées, nous n'auront pas à créer notre propre kit de développement, ce qui est un gain de temps considérable.&lt;br /&gt;
&lt;br /&gt;
Qui plus est, l'utilisation d'une fonction &amp;quot;auto-start&amp;quot; est en adéquation avec le module bluetooth HC-05 utilisé pour les tests. Nous pouvons donc commencer la programmation mobile du bluetooth en parallèle de l'impression des pcb. Et, dans le cas où les pcb seraient disfonctionnels, nous pourront quand meme envisager un prototype sur breadboard.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Test====&lt;br /&gt;
&lt;br /&gt;
Après avoir alimenté la carte, nous n'avons pas pu nous connecter au module bluetooth, ce dernier n'étant même pas visible dans les appareils alentours. &lt;br /&gt;
&lt;br /&gt;
Nous avons alors vérifié si la carte était correctement alimentée. Pour ce faire, nous avons mesuré différents points de tensions sensé être mis par défaut en PULL-DOWN ou PULL-UP à des niveaux de tensions d'1.7V. Ces niveaux étaient respectés. Le problème n'est donc pas d'ordre électronique. &lt;br /&gt;
&lt;br /&gt;
Par la suite, nous avons voulu vérifier la communication du module. Ce dernier, en déclenchant l'auto start est sensé émettre (en suivant le protocole UART rappelé précédemment) un message START. Nous avons donc inspecté ceci en utilisant minicom. En effet, minicom reçoit un message, mais ne sait pas le déchiffré. Qui plus est, impossible d'envoyer un message au module afin de le reprogrammer (de manière similaire à un XBee).&lt;br /&gt;
&lt;br /&gt;
Devant ces soucis, nous décidons donc d'abandonner ce module bluetooth et de poursuivre avec celui utilisé pour les essais de programmation, le HC-05.&lt;br /&gt;
&lt;br /&gt;
==Conception de l'application Android==&lt;br /&gt;
===Envoie et réception de SMS===&lt;br /&gt;
Afin de ne pas utiliser de serveur, les deux appareils Android doivent synchroniser l'envoi de paquet UDP, pour cela nous avons voulu utiliser des SMS.&lt;br /&gt;
Les SMS permettent d'envoyer des informations, comme les adresses IP, les ports utilisés, l'heure à laquelle les deux téléphones vont envoyer leur premier paquet UDP.&lt;br /&gt;
&lt;br /&gt;
Dans un premier temps nous avons créer une application pour envoyer les SMS:&lt;br /&gt;
&lt;br /&gt;
L'application était très simple, l'envoi de SMS se faisait en deux lignes&lt;br /&gt;
  // initialisation d'une variable sms gérant les sms&lt;br /&gt;
  SmsManager sms = SmsManager.getDefault() ;&lt;br /&gt;
  // envoie un sms comportant le texte de la variable message de type String au numéro contenu dans la variable num de type String&lt;br /&gt;
  sms.sendTextMessage(num, null, message, null, null);&lt;br /&gt;
&lt;br /&gt;
Dans un deuxième temps il fallait recevoir un SMS, ou plutôt savoir qu'un nouvel SMS avait été reçu :&lt;br /&gt;
&lt;br /&gt;
Pour cela il fallait utiliser un thread qui était appelé par interruption avec la réception d'un SMS comme vecteur d’interruption.&lt;br /&gt;
Ce thread effectuait ce qui était demandé dans sa fonction onReceive(), comme par exemple lire les informations contenues dans le SMS:&lt;br /&gt;
  public class IncomingSms extends BroadcastReceiver {&lt;br /&gt;
     final SmsManager sms = SmsManager.getDefault();&lt;br /&gt;
     public void onReceive(Context context, Intent intent) {&lt;br /&gt;
       //Ce qui doit etre fait lors de la reception de SMS&lt;br /&gt;
     }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Malheureusement ce programme ne marchait pas pendant des semaines, malgré de nombreuses modifications et de nombreux essais. Et le problème semblait être ma carte SIM, car en changeant de SIM, tous les programmes contenant ce code fonctionnaient parfaitement.&lt;br /&gt;
&lt;br /&gt;
===Protocole UDP===&lt;br /&gt;
Afin d'effectuer un échange de données entre les deux utilisateurs, et essayer de faire une vidéo-conférence, nous avons choisi d'utiliser le protocole UDP.&lt;br /&gt;
&lt;br /&gt;
Une première application permettait de tester l'envoi de paquet UDP, pour cela un serveur UDP a été utilisé sur un PC.&lt;br /&gt;
Le serveur attendait un message et l'affichait quand il le recevait.&lt;br /&gt;
&lt;br /&gt;
Pour envoyer un paquet nous utilisons :&lt;br /&gt;
&lt;br /&gt;
 DatagramSocket ds = null;&lt;br /&gt;
 ds = new DatagramSocket(PortA);&lt;br /&gt;
 DatagramPacket dp;&lt;br /&gt;
 InetAddress local = InetAddress.getByName(AdrIp);&lt;br /&gt;
 dp = new DatagramPacket(message.getBytes(),message.length(),local,PortA );&lt;br /&gt;
 ds.setBroadcast(true);&lt;br /&gt;
 ds.send(dp);&lt;br /&gt;
&lt;br /&gt;
Ce code crée un paquet qui comporte l’adresse et le port du destinataire, mais surtout les données à envoyer.&lt;br /&gt;
Ce paquet est ensuite envoyer grâce à un socket.&lt;br /&gt;
&lt;br /&gt;
Une fois que tout fonctionnait comme il le fallait, nous avons pu créer une application qui comportait l'envoi et la réception de paquet.&lt;br /&gt;
En mettant l'application sur deux téléphones on pouvait tester si tout fonctionnait.&lt;br /&gt;
Les tests ont seulement été effectué sur un réseau local, on ne sait pas pour le moment si des box internet pourraient empêcher la transmission.&lt;br /&gt;
Pour la réception nous utilisons :&lt;br /&gt;
 dsocket.receive(packet);&lt;br /&gt;
 buff = packet.getData();&lt;br /&gt;
&lt;br /&gt;
Pour récupérer les données du paquet dans la variable buff, il suffit ensuite de créer une boucle pour recevoir plusieurs messages.&lt;br /&gt;
La fonction de réception étant bloquante, il a été préférable de l'effectuer dans un thread.&lt;br /&gt;
&lt;br /&gt;
L'application est donc composé de un thread d'écoute, un thread d'envoi et d'un thread principal gérant l'affichage et appelant le thread d'envoi lorsque que le bouton de l'application est appuyé.&lt;br /&gt;
Voici une image de l'application, les champs d’adresseIp et de port du destinataire sont à remplir avant d'envoyer un paquet UDP.&lt;br /&gt;
Et le port d'écoute est défini dans le code de cette application, ce qui n'est pas très pratique, mais suffisant pour les tests.&lt;br /&gt;
&lt;br /&gt;
Le TextView est mis à jour à chaque que le bouton envoyer est appuyé, en prenant comme valeur celle d'un registre comprenant la valeurs du dernier paquet UDP reçu.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:ClientUdp.png]]&lt;br /&gt;
&lt;br /&gt;
===Communication Bluetooth===&lt;br /&gt;
Pour gérer la communication entre le téléphone et un sextoys, il faut utiliser une communication Bluetooth.&lt;br /&gt;
&lt;br /&gt;
Dans un premier temps il faut se connecter avec l'appareil:&lt;br /&gt;
 &lt;br /&gt;
 new ConnectBT().execute();&lt;br /&gt;
&lt;br /&gt;
Avec ConnectBT une classe trouvée sur internet.&lt;br /&gt;
&lt;br /&gt;
Ensuite il faut communiquer :&lt;br /&gt;
&lt;br /&gt;
Pour envoyer un message on utilise: &lt;br /&gt;
&lt;br /&gt;
 btSocket.getOutputStream().write(message);&lt;br /&gt;
&lt;br /&gt;
Avec btSocket un socket Bluetooth ayant été connecté avec le sextoy dans la classe ConnectBT.&lt;br /&gt;
&lt;br /&gt;
Ensuite il faut recevoir :&lt;br /&gt;
&lt;br /&gt;
 btSocket.getInputStream().read(mmBuffer);&lt;br /&gt;
&lt;br /&gt;
Avec mmBuffer qui contient le message reçu.&lt;br /&gt;
&lt;br /&gt;
Mais contrairement à la réception UDP, la réception Bluetooth n'est pas bloquante, ainsi on peut recevoir des messages nuls.&lt;br /&gt;
&lt;br /&gt;
Pour éviter ce problème l'application envoie un paquet Bluetooth, et reçoit juste après, et le sextoy est configuré pour envoyer un paquet UDP, juste après en avoir reçu un.&lt;br /&gt;
&lt;br /&gt;
===Application principale===&lt;br /&gt;
Afin d'être ergonomique,l'application doit pouvoir enregistrer des contacts, pour plus facilement communiquer avec eux.&lt;br /&gt;
Nous avons choisi de ne pas utiliser les contacts du téléphone, pour pouvoir avoir des contacts &amp;quot;confidentiels&amp;quot; qui ne seront que dans la base de donnée de l'application.&lt;br /&gt;
&lt;br /&gt;
Il fallait donc créer une base de donnée, nous avons donc utilisé SQLite car cette bibliothèque est utilisée par Android comme base de données embarquée.&lt;br /&gt;
La base ne comporte qu'une seule table, avec seulement les pseudos et les numéros de téléphone.&lt;br /&gt;
&lt;br /&gt;
Une fois la base crée, pour interagir avec, nous avons coder des activités:&lt;br /&gt;
&lt;br /&gt;
- Ajout de contact:&lt;br /&gt;
&lt;br /&gt;
Il faut entrer dans les champs de textes les informations pour la base de données,puis appuyer sur le bouton &amp;quot;Ajouter&amp;quot; pour créer un nouveau contact dans la base de donnée.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:AjoutContact.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-Fiche de Contact: &lt;br /&gt;
&lt;br /&gt;
Affiche le pseudo et le numéro de téléphone dans les &amp;quot;TextView&amp;quot;, et permet de : supprimer le contact en cliquant sur la croix, envoyer un SMS en cliquant sur l'icone &amp;quot;Message&amp;quot;, mais aussi commencer une communication UDP en cliquant sur le téléphone.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:FicheContact.png]]  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-Liste de contact :&lt;br /&gt;
&lt;br /&gt;
Affiche la liste de contacts, en cliquant sur un des contacts on arrive sur la page Fiche de Contact, et en cliquant sur le plus on arrive sur la page Ajout de Contact.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:ListView.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ensuite il faut ajouter la gestion de communication:&lt;br /&gt;
&lt;br /&gt;
-Les SMS :&lt;br /&gt;
&lt;br /&gt;
Il faut remplir les champs de texte et appuyer sur SMS pour envoyer un message du type&lt;br /&gt;
&lt;br /&gt;
Message&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Address Ip :&amp;quot; Addresse Ip&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Port :&amp;quot; Port&lt;br /&gt;
&lt;br /&gt;
Avec Message,Addresse Ip, et Port les champs à remplir, &amp;quot;Addresse Ip :&amp;quot; et &amp;quot;Port :&amp;quot; deux chaines de caractères.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:SMS.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-Protocole UDP : &lt;br /&gt;
&lt;br /&gt;
Quatre champs sont à remplir, cliquer sur Envoyer pour passez à l'activité de gestion Bluetooth.&lt;br /&gt;
&lt;br /&gt;
Les champs sont:&lt;br /&gt;
&lt;br /&gt;
-L'addresse Ip&lt;br /&gt;
&lt;br /&gt;
-Le port destination&lt;br /&gt;
&lt;br /&gt;
-Le port source&lt;br /&gt;
&lt;br /&gt;
-L'heure qui n'est pas utilisée, qui devait servir pour la synchronisation.&lt;br /&gt;
&lt;br /&gt;
Les valeurs des champs sont conservés pour la communication UDP à venir.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:UDP.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-Gestion Bluetooth :&lt;br /&gt;
&lt;br /&gt;
En cliquant sur &amp;quot;Paired Devices&amp;quot;, l'application affichera la liste des appareils appairés.&lt;br /&gt;
&lt;br /&gt;
Puis en cliquant un des appareils, l'application essayera de connecter avec, tout en lançant l'activité UDP avec Bluetooth.&lt;br /&gt;
&lt;br /&gt;
Si l'on souhaite ne pas utiliser de périphérique Bluetooth, il suffit de cliquer sur le bouton moins en haut à droite.&lt;br /&gt;
&lt;br /&gt;
L'activité UDP sans Bluetooth se lancera.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Bluetooth.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-Communication UDP avec Bluetooth:&lt;br /&gt;
&lt;br /&gt;
Pour lancer la communication UDP, appuyer sur le bouton Off ,il passera en mode On.&lt;br /&gt;
&lt;br /&gt;
Si vous cliquez sur le bouton On il passera en mode Off, et coupera la communication UDP.&lt;br /&gt;
&lt;br /&gt;
Le bouton envoyer, permet de forcer l'envoi d'un paquet UDP.&lt;br /&gt;
&lt;br /&gt;
Et le bouton croix coupe toutes les communications(UDP et Bluetooth), et retourne à la page précédente.&lt;br /&gt;
&lt;br /&gt;
Lorsque l'application reçoit un paquet UDP, un message est envoyé via Bluetooth au sextoys.&lt;br /&gt;
&lt;br /&gt;
Celui-ci répond automatiquement en envoyant une valeur moyennée des ses capteurs, cette valeur est récupérée et mise dans un registre.&lt;br /&gt;
&lt;br /&gt;
En parallèle, toutes les secondes un paquet UDP est envoyé et les données envoyés sont celle du registre.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Com.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-Communication UDP sans Bluetooth.&lt;br /&gt;
&lt;br /&gt;
Le bouton On/Off est utilisé comme dans l'activité &amp;quot;Communication UDP avec Bluetooth&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Les boutons de niveaux, mettent une valeur dans un même registre.&lt;br /&gt;
&lt;br /&gt;
Chaque boutons correspond à une valeur, qui correspondent avec un niveau d'excitation du sextoys.&lt;br /&gt;
&lt;br /&gt;
Ainsi toutes les secondes, un paquet UDP est envoyé avec comme donnée la valeur du registre.&lt;br /&gt;
&lt;br /&gt;
Lorsqu'un paquet UDP est reçu, la donnée reçue est mise dans un registre qui détermine l’affichage du &amp;quot;TextView&amp;quot; en bas à droite.&lt;br /&gt;
&lt;br /&gt;
Ce TextView est mis à jours en même temps qu'un paquet UDP est envoyé.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Co2.png]]&lt;br /&gt;
&lt;br /&gt;
== Rapport et codes ==&lt;br /&gt;
&lt;br /&gt;
Rapport : [[Fichier:CR_sextoy_connecte.pdf]]&lt;br /&gt;
&lt;br /&gt;
[https://archives.plil.fr/croussel/Projet_sextoy_connecte.git Codes]&lt;/div&gt;</summary>
		<author><name>Tstieven</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=IMA4_2016/2017_P14&amp;diff=42864</id>
		<title>IMA4 2016/2017 P14</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=IMA4_2016/2017_P14&amp;diff=42864"/>
				<updated>2017-05-20T15:56:01Z</updated>
		
		<summary type="html">&lt;p&gt;Tstieven : /* Application principale */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Projet IMA4 : Sex-toy connecté =&lt;br /&gt;
&lt;br /&gt;
== Présentation du projet ==&lt;br /&gt;
&lt;br /&gt;
L'objectif de ce projet est de développer un système d'échange entre deux partenaires distants afin de rendre plus facile la vie de couple à distance.&lt;br /&gt;
&lt;br /&gt;
Pour ce faire, le dispositif sera constitué de deux sextoys connectés (un par appareil génital désiré) à leur téléphone portable respectif. Une application mobile permettra aux utilisateurs de s'échanger des données de manière sécurisé, ceci au travers d'un serveur embarqué dans le téléphone portable.&lt;br /&gt;
&lt;br /&gt;
Les données échangées pourront être l'accélération ou la température. Elles seront traitées et transmises au sextoy qui adaptera sa vitesse, son retour vibratoire ou sa position en conséquence.&lt;br /&gt;
&lt;br /&gt;
Les sextoys pourraient être composés de :&lt;br /&gt;
* Pour l'appareil masculin (dédié à la femme) :&lt;br /&gt;
:* un servomoteur ;&lt;br /&gt;
:* un vibreur ;&lt;br /&gt;
:* une sonde de température ;&lt;br /&gt;
:* un accéléromètre.&lt;br /&gt;
* Pour l'appareil féminin (dédié à l'homme) :&lt;br /&gt;
:* 4 servomoteurs (dans le but de &amp;quot;masser&amp;quot; en déplaçant le silicone);&lt;br /&gt;
:* des vibreurs ;&lt;br /&gt;
:* un accéléromètre.&lt;br /&gt;
* Pour les deux appareils :&lt;br /&gt;
:* un micro-contrôleur (Arduino mini) ;&lt;br /&gt;
:* un module de transmission / réception bluetooth afin de se connecter au téléphone ;&lt;br /&gt;
:* du silicone.&lt;br /&gt;
	&lt;br /&gt;
* L'application mobile devra :&lt;br /&gt;
:* mettre en place une communication cryptée à travers un serveur (embarqué ou bien intermédiaire ?) ;&lt;br /&gt;
:* effectuer un échange de données en bluetooth avec le sextoy connecté.&lt;br /&gt;
&lt;br /&gt;
* L'application mobile pourra :&lt;br /&gt;
:* utiliser la vidéo-conférence ;&lt;br /&gt;
:* enregistrer les meilleurs moments et enventuellement pouvoir les partager ;&lt;br /&gt;
:* effectuer une recherche de partenaire aléatoire.&lt;br /&gt;
&lt;br /&gt;
* S'il nous reste du temps, il peut être envisageable de :&lt;br /&gt;
:* mettre en place un réseau social interne à Polytech.&lt;br /&gt;
&lt;br /&gt;
== Liste des tâches ==&lt;br /&gt;
* Conception de l'appareil masculin (Cédric)&lt;br /&gt;
:* mettre en place le bus I2C avec les différents capteurs ;&lt;br /&gt;
:* création d'un PCB au format gerber ;&lt;br /&gt;
:* création d'un prototype.&lt;br /&gt;
&lt;br /&gt;
* Conception de l'appareil féminin (Cédric)&lt;br /&gt;
:* mettre en place le bus I2C ;&lt;br /&gt;
:* traitement des données afin d'en déduire la position et l'entrain de l'utilisateur ;&lt;br /&gt;
:* création d'un PCB ;&lt;br /&gt;
:* création d'un prototype.&lt;br /&gt;
&lt;br /&gt;
* Communication bluetooth (Cédric et Thomas)&lt;br /&gt;
:* étudier l'émission/réception vue de l'arduino ;&lt;br /&gt;
:* étudier l'émission/réception vue du téléphone ;&lt;br /&gt;
:* mise en place du protocole ;&lt;br /&gt;
:* test de portée.&lt;br /&gt;
&lt;br /&gt;
* Développement mobile (Thomas)&lt;br /&gt;
:* déterminer la meilleure approche : utilisation d'un serveur intermédiaire ou bien mise en place d'un &amp;quot;client-serveur&amp;quot; dans l'application mobile ;&lt;br /&gt;
:* mettre en place le choix retenu ;&lt;br /&gt;
:* tester dans un premier temps une transmission de texte ;&lt;br /&gt;
:* programmer le traitement de données reçues par bluetooth ;&lt;br /&gt;
:* rajouter un côté esthétique à l'application.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Recapitulatif sextoy.png|center|recap]]&lt;br /&gt;
&lt;br /&gt;
==Feuille d'heures==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Tâche !! Prélude !! Heures S1 !! Heures S2 !! Heures S3 !! Heures S4 !! Heures vacances !! Heures S5 !! Heures S6 !! Heures S7 !! Heures S8 !! Heures S9 !! Heures S10 !! Heures vacances et après!! Total&lt;br /&gt;
|-&lt;br /&gt;
| Définition cahier des charges &lt;br /&gt;
| 2H&lt;br /&gt;
| 2H&lt;br /&gt;
| 1H&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 5H&lt;br /&gt;
|-&lt;br /&gt;
| Dimensionnement et établissement de la liste de matériel&lt;br /&gt;
| &lt;br /&gt;
| 3H&lt;br /&gt;
| 4H&lt;br /&gt;
|&lt;br /&gt;
| 4H&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 11H&lt;br /&gt;
|-&lt;br /&gt;
| Établissement de la liste et de la répartition des tâches&lt;br /&gt;
| 1H&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 1H&lt;br /&gt;
|-&lt;br /&gt;
| Appareil masculin : programmation&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 1H&lt;br /&gt;
| 2H&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 6H&lt;br /&gt;
| 9H &lt;br /&gt;
|-&lt;br /&gt;
| Appareil masculin : étude des datasheets&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 1H&lt;br /&gt;
| 1H&lt;br /&gt;
|&lt;br /&gt;
| 4H&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| 1H&lt;br /&gt;
|&lt;br /&gt;
| 7H&lt;br /&gt;
|-&lt;br /&gt;
| Appareil masculin : PCB&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 4H&lt;br /&gt;
| 4H&lt;br /&gt;
| 6H&lt;br /&gt;
| 30H&lt;br /&gt;
| 44H&lt;br /&gt;
|-&lt;br /&gt;
| Appareil masculin : 3D&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| 6H&lt;br /&gt;
| 6H&lt;br /&gt;
|-&lt;br /&gt;
| Conception de l'appareil féminin&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 2H&lt;br /&gt;
| 1H&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 3H&lt;br /&gt;
|-&lt;br /&gt;
| Liaison bluetooth (embarqué)&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 3H&lt;br /&gt;
| 1H&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 8H&lt;br /&gt;
| 12H&lt;br /&gt;
|-&lt;br /&gt;
| Liaison bluetooth (téléphone)&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 15H&lt;br /&gt;
| 15H&lt;br /&gt;
|-&lt;br /&gt;
| Recherche et discussion autour de la meilleure approche de communication&lt;br /&gt;
| 2H&lt;br /&gt;
| 2H&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 4H&lt;br /&gt;
|-&lt;br /&gt;
| Synchronisation temporelle des téléphones (par sms)&lt;br /&gt;
| &lt;br /&gt;
| 2H&lt;br /&gt;
| 4H&lt;br /&gt;
| 6H&lt;br /&gt;
| 8H&lt;br /&gt;
| 6H&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 26H&lt;br /&gt;
|-&lt;br /&gt;
| Transmission de paquets UDP&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 4H&lt;br /&gt;
| 4H&lt;br /&gt;
| 4H&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 6H&lt;br /&gt;
| 18H&lt;br /&gt;
|-&lt;br /&gt;
| Streaming video(UDP)&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 4H&lt;br /&gt;
| 4H&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 8H&lt;br /&gt;
|-&lt;br /&gt;
| Application et bases de données&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 6H&lt;br /&gt;
| 20H&lt;br /&gt;
| 26H&lt;br /&gt;
|-&lt;br /&gt;
| Total&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 195H&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Conception des sextoys==&lt;br /&gt;
===Introduction===&lt;br /&gt;
&lt;br /&gt;
La conception de sextoys doit respecter différents règles, notamment sanitaires. C'est pourquoi nous nous sommes intéressés à l'utilisation de silicone pour ce projet. Nous avons notamment rencontré un ingénieur compétant dans ce domaine afin de nous aiguiller sur cette éventuelle conception.&lt;br /&gt;
&lt;br /&gt;
La conception passera également par une conception 3D que nous effectuerons à l'aide d'imprimantes 3D au fabricarium de Polytech Lille.&lt;br /&gt;
&lt;br /&gt;
Enfin, les prototypes seront embarqués de cartes électroniques (aussi appelés PCB) que nous constituerons.&lt;br /&gt;
&lt;br /&gt;
===Choix du silicone, rencontre avec Mario Sanz===&lt;br /&gt;
&lt;br /&gt;
Le projet nécessite l'utilisation d'une matière souple et non irritante, c'est pourquoi nous avons choisi de nous tourner vers l'utilisation du silicone. Afin de choisir au mieux le produit correspondant à nos besoins, nous avons rencontré Mario Sanz, ingénieur à l'INRIA, qui travail régulièrement avec du silicone.&lt;br /&gt;
&lt;br /&gt;
Ce dernier nous a expliqué les différents points importants sur lesquels nous baser afin de choisir au mieux un produit en accord avec le projet. Ne serait-ce que pour le choix de la dureté, il existe une échelle propre au silicone (&amp;quot;Shore hardness scale&amp;quot;), nous pensions au départ rechercher un silicone le plus mou possible, cependant, il faut savoir que le plus le silicone est mou, plus il a tendance à être &amp;quot;collant&amp;quot;. Finalement, après discutions, un shore de 40A (correspondant à la dureté d'une gomme) suffisamment mince fera l'affaire pour la conception des prototypes.&lt;br /&gt;
&lt;br /&gt;
Il nous a également expliqué que le silicone peut être travaillé à l'aide d'additifs et sous cloche à vide afin d'améliorer le moulage, l'absence de &amp;quot;bulles&amp;quot; sur la surface de la pièce et la souplesse. Nous pouvons cependant travailler sans tout cela car il n'est pas spécialement important, pour notre projet, de rechercher des propriétés physiques homogènes dans tout le sextoy.&lt;br /&gt;
&lt;br /&gt;
Pour ce qui est de la création de moules, nous pourrons les effectuer via imprimante 3D. Il existe un bon nombre de tutoriels sur internet pour s'y référer en cas de soucis.&lt;br /&gt;
&lt;br /&gt;
===Impression 3D===&lt;br /&gt;
&lt;br /&gt;
Pour la création d'objets en 3D, de nombreux outils sont disponibles. Nous avons décidé d'utiliser Tinkercad, un outil qui s'intègre directement au navigateur internet utilisé. &lt;br /&gt;
&lt;br /&gt;
L'avantage d'un tel outil est sa grande communauté qui permet un accès simple et rapide à une multitudes de projets dont on pourrait s'inspirer pour générer nos pièces.&lt;br /&gt;
&lt;br /&gt;
====Création des moules====&lt;br /&gt;
&lt;br /&gt;
A l'aide d'une imprimante 3D, nous pouvons concevoir des moules afin de créer des pièces en silicone. Il s'agit de la manière la plus rapide et accessible pour notre projet.&lt;br /&gt;
&lt;br /&gt;
Cette méthode comporte des désavantages, dont le principal est la présence d'imperfection et de non homogénéité dans les pièces réalisées. Ceci n'a pas de grande importance dans la mesure où nous souhaitons du qualitatif.&lt;br /&gt;
&lt;br /&gt;
====Création d'un prototype====&lt;br /&gt;
&lt;br /&gt;
=====Pénis=====&lt;br /&gt;
&lt;br /&gt;
Afin de visualiser qualitativement la forme et le passage des câbles, un prototype imprimé au Fabricarium de Polytech Lille a été réalisé. &lt;br /&gt;
&lt;br /&gt;
Ce prototype se divise en 3 pièces : un boîtier (pour y loger le PCB), un cylindre (afin de reproduire la forme désirée) et un &amp;quot;tête&amp;quot; qui devait à l'origine être un moule en silicone (pour y loger le PCB du capteur de température).&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Sextoy_penis.png|400px|thumb|center|Prototype 3D pénis]]&lt;br /&gt;
&lt;br /&gt;
===Conception des PCB===&lt;br /&gt;
&lt;br /&gt;
Afin de diminuer un maximum la taille des cartes electroniques, nous utilisons principalement des composants CMS. &lt;br /&gt;
&lt;br /&gt;
La conception des cartes peut-être effectué à l'aide de logicels de CAO tels qu'Altium ou Eagle. Dans notre cas, nous avons utilisé Eagle. &lt;br /&gt;
&lt;br /&gt;
Ce travail consiste à créer une librairie regroupant l'intégralité des composants nécessaires et, ensuite, de  créer un schéma du circuit. Une fois le schéma terminé, il ne restera plus qu'à faire le routage et exporter les fichiers au format &amp;quot;Gerber&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Pour ce projet, nous aurons besoin de deux cartes, une par prototype. Chaque carte embarquera des composants similaires, c'est pourquoi nous nous contenterons d'abord d'un seul PCB pour effectuer des tests. Si ces derniers sont concluants, nous pourrons graver le second.&lt;br /&gt;
&lt;br /&gt;
====PCB du pénis====&lt;br /&gt;
&lt;br /&gt;
Le premier PCB imprimé et soudé est celui du pénis. Une première carte avait été imprimé regroupant sur cette dernière : un support pour l'arduino, un accéléromètre, un module bluetooth. &lt;br /&gt;
&lt;br /&gt;
[[Fichier:PCB_penis_VB.png|400px|thumb|center|PCB v1.0]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous avons expérimentés des problèmes dûs aux dimensions de l'accéléromètre, l'utilisation d'un boîtier CMS de type TDFN10 2x2 était optimiste pour la réalisation du projet, compte tenu du matériel à disposition.&lt;br /&gt;
&lt;br /&gt;
C'est pourquoi une seconde carte a été gravée, cette fois sans l'accéléromètre.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:PCB_penis_VF.png|400px|thumb|center|PCB v2.0]]&lt;br /&gt;
&lt;br /&gt;
[[Fichier:PCB_VF.png|400px|thumb|center|PCB v2.0 schema]]&lt;br /&gt;
&lt;br /&gt;
Ce prototype est sensé embarquer un capteur de température que nous avons décidé de mettre sur un PCB à part. Cette carte avait pour but d'être coulé dans le silicone, afin de mesurer la température au plus près de la zone intéressée.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:TEMPERATURE_PCB_VF.png|400px|thumb|center|PCB temperature]]&lt;br /&gt;
&lt;br /&gt;
[[Fichier:TEMPERATURE_VF.png|400px|thumb|center|PCB temperature schema]]&lt;br /&gt;
&lt;br /&gt;
====PCB du vagin====&lt;br /&gt;
&lt;br /&gt;
Compte tenu des soucis rencontrés avec l'accéléromètre, la carte sera gravée afin de pouvoir y plugger un accéléromètre analogique en traversant. Le but étant d'avoir un prototype fonctionnel d'ici la fin du projet.&lt;br /&gt;
&lt;br /&gt;
Nous avons également eu des problèmes avec le module bluetooth utilisé, ce dernier ne pouvant être reconfiguré manuellement par minicom, nous utiliserons le bluetooth HC-05 utilisé pour les essais de code. De même que pour l'accéléromètre, nous prévoirons un endroit pour le plugger sur la carte.&lt;br /&gt;
&lt;br /&gt;
''image PCB vagin''&lt;br /&gt;
&lt;br /&gt;
''Reste à graver le PCB du vagin''&lt;br /&gt;
&lt;br /&gt;
==Gestion des composants==&lt;br /&gt;
===Introduction===&lt;br /&gt;
&lt;br /&gt;
Notre projet implique l'utilisation de capteurs, de servomoteurs et de buzzers, constituant chacun une partie de la programmation embarquée.&lt;br /&gt;
&lt;br /&gt;
Pour cette programmation, nous avons décidé d'utiliser AVR-gcc et ainsi coder les arduinos en C.&lt;br /&gt;
&lt;br /&gt;
Les capteurs utilisés utilisent un protocole de communication IIC (ou I²C, I2C), ce protocole de multiples avantages que nous expliciterons par la suite. Cependant, comme un des capteurs (l'accéléromètre) prévus initialement nous a causé beaucoup de soucis, nous expliciterons également la mesure à l'aide de capteurs analogiques. Ces différents capteurs nous permettront de mesurer l'excitation d'un utilisateur.&lt;br /&gt;
&lt;br /&gt;
Une fois l'excitation mesurée, il faut induire une réponse &amp;quot;physique&amp;quot;. Pour ce faire, nous utilisons d'une part des servomoteurs dans le but de produire une sensation de massage.&lt;br /&gt;
&lt;br /&gt;
D'autre part, nous utilisons également des buzzers.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'' Veuillez noter que le code ne sera pas détaillé dans le wiki, vous pouvez vous référer au dépôt git contenant les différents codes. ''&lt;br /&gt;
&lt;br /&gt;
===Utilisation des capteurs===&lt;br /&gt;
&lt;br /&gt;
====Capteurs par IIC====&lt;br /&gt;
&lt;br /&gt;
Le choix de l'IIC n'était pas anodin. L'IIC permet, pour un bus de seulement deux fils (SDA et SCL), d'utiliser un nombre important de capteurs. Ainsi, si nous décidions au cours du projet de rajouter tel ou tel capteurs, nous n'avions qu'à les greffer à ce bus IIC.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Iic.jpg|400px|center|Schema iic]]&lt;br /&gt;
&lt;br /&gt;
Tout d’abord, nous devons initialiser le bus IIC de l’arduino. Pour ce faire, il suffit de préciser la fréquence désirée, ici 400KHz, dans les registres TWSR (prescaler) et TWBR. (fréquence désirée suivant la fonction TWBR = (Fcpu - 16 Fscl ) / (2 Fscl Prescaler) ) avant de lancer l'utilisation IIC via le bit TWIE.&lt;br /&gt;
&lt;br /&gt;
Comme il peut y avoir potentiellement plusieurs capteurs sur ce bus, il faut respecter un certain protocole afin de récupérer la valeur du capteur de température. Attardons nous sur la lecture d’une valeur sur le capteur de température. Il faut : &lt;br /&gt;
&lt;br /&gt;
* Lancer un message de start&lt;br /&gt;
* Envoyer l’adresse du capteur de température (0x98 dans notre cas)&lt;br /&gt;
* Envoyer l’adresse du registre qui nous intéresse (0x00 pour celui contenant la température), ceci placera le pointeur de registre du capteur sur cette adresse&lt;br /&gt;
* Restart la communication pour laisser la main au capteur&lt;br /&gt;
* Envoyer l’adresse du capteur en ajoutant 1 (Ceci permet de stipuler que nous désirons lire la valeur pointée)&lt;br /&gt;
* Lire la partie haute de la température&lt;br /&gt;
* Lire la partie basse de la température&lt;br /&gt;
* Envoyer un message de stop&lt;br /&gt;
&lt;br /&gt;
Chaque action correspond à l'utilisation d'une fonction de la librairie IIC codée. (cf déport git) Et après chaque action, nous devons vérifier le status du bus dans le registre TWSR. Ce &amp;quot;status&amp;quot; nous donnera des indications sur le bon déroulement de la communication, à savoir la réception d'ACK (équivalent d'accusé de réception) ou confirmation d'envoie de start, restart, etc.&lt;br /&gt;
&lt;br /&gt;
=====Test=====&lt;br /&gt;
&lt;br /&gt;
Le test de la librairie iic s'est fait directement lorsque la carte du capteur de température a été soudée. Pour ce faire, nous utilisons une compilation en mode &amp;quot;DEBUG&amp;quot; (make debug upload) qui nous permettait de lire la valeur des &amp;quot;status&amp;quot; avec minicom. &lt;br /&gt;
Après différents tests, nous avons finalement réussi à faire fonctionner le capteur de température en IIC, ce dernier nous renvoyait bel et bien une valeur de température précise à 0.5degrés près, vérifié à l'aidé d'un autre capteur de température.&lt;br /&gt;
&lt;br /&gt;
Il est néanmoins regrettable que ce capteur ne sera pas utilisable dans les prototypes finaux dans la mesure où il est greffé à une carte dont le module bluetooth n'est pas utilisable.&lt;br /&gt;
&lt;br /&gt;
====Capteurs analogique====&lt;br /&gt;
&lt;br /&gt;
Comme dit précédemment, nous avons abandonné l'utilisation de l’accéléromètre IIC prévu initialement dans le vagin car nous n'avons pas réussi à le souder sur les cartes du pénis. Nous avons donc utilisé ce qui était à notre disposition à savoir un capteur analogique.&lt;br /&gt;
&lt;br /&gt;
La mesure analogique sous AVR se fait simplement via l'utilisation de la fonction ad_sample(numéro de la broche analogique lue). Elle renvoie directement une valeur entre 0 et 255 correspondant à une conversion analogique-numérique de la tension sur la broche lue du capteur.&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
===Contrôle des servomoteurs===&lt;br /&gt;
&lt;br /&gt;
Un servomoteur se contrôle à l'aide d'un signal PWM (Pulse Width Modulation). Ce signal consiste à modifier la largeur de l'impulsion en fonction de la consigne désirée. &lt;br /&gt;
&lt;br /&gt;
La génération de PWM via microcontrôleur se fait à l'aide de TIMERS. Il faut savoir qu'il existe une priorité dans les interruptions, pour un TIMER_X donné, plus le X est proche de 0, plus l'interruption sera prioritaire. Nos signaux PWM se doivent d'être le plus en accord avec nos consignes, c'est pourquoi nous avons choisi d'utiliser les TIMER les plus prioritaires pour les générer. (TIMER0 et TIMER1)&lt;br /&gt;
&lt;br /&gt;
====PWM sur un seul servomoteur====&lt;br /&gt;
&lt;br /&gt;
Notre première manière de procéder consistait à générer la PWM nous même à l'aide du vecteur d'interruption d'un TIMER. La méthode consistait à compter de 0 à 255 en permanence. Lorsque le compteur était inférieur à la consigne, on passait une sortie à l'état haut, sinon elle restait à l'état bas. &lt;br /&gt;
&lt;br /&gt;
Cette méthode simulait plutôt bien le signal PWM et avait pour avantage d'être utilisable pour n'importe quelle de l'arduino. Cependant, cette méthode a le gros désavantage d'être sensible à l'utilisation d'autres interruptions, rendant le TIMER imprécis.&lt;br /&gt;
&lt;br /&gt;
Or, notre projet utilisera d'autres procédures d'interruption. Nous avons donc décidé d'utiliser une méthode plus simple mais nous restreignant sur le choix de nos sorties.&lt;br /&gt;
&lt;br /&gt;
En effet, un atmega possède des registres que l'on peut configurer pour générer des signaux PWM sur des broches spécifiques.&lt;br /&gt;
&lt;br /&gt;
Ainsi, en configurant le registre TCCR0A à 0x81 et TCCR0B à 0x05, on se place en mode PWM non inversée à fréquence élevée. En résumé, cette configuration nous permet de faire varier les signaux PWM en introduisant une consigne dans le registre OCR0A.&lt;br /&gt;
&lt;br /&gt;
Ainsi, nous pouvons donc contrôler le moteur simplement en changeant la consigne dans OCR0A.&lt;br /&gt;
&lt;br /&gt;
====Tests====&lt;br /&gt;
&lt;br /&gt;
Dans un premier lieu, les moteurs servomoteurs ne recevaient pas les consignes. Nous pensions que le fait que la PWM soit en 3V3 était l'origine du problème. Nous avons donc fait le montage à l'aide d'un transistor NPN monté en saturé. Le problème n'a pas été résolu. &lt;br /&gt;
&lt;br /&gt;
Finalement, le soucis viendrait du fait que les tests étaient effectués avec des valeurs du registre OCR0A à 0 (pwm nulle). Nous n'aurons donc pas besoin d'un montage à transistor pour le PCB.&lt;br /&gt;
&lt;br /&gt;
Le but des servomoteurs est d'effectuer un semblant de massage, nous allons donc modifier le code afin d'effectuer la tâche de manière périodique via l'utilisation d'un TIMER.&lt;br /&gt;
&lt;br /&gt;
====Gestion d'un ensemble de servomoteurs====&lt;br /&gt;
&lt;br /&gt;
Dans le vagin, nous utilisons 4 servomoteurs afin de masser l'utilisateur. Nous avons trouvé intéressant de diviser ces moteurs en deux couples afin d'intensifier ou non ce massage en fonction des seuils d'excitation détectés par les capteurs.&lt;br /&gt;
&lt;br /&gt;
Pour ce faire, nous aurons besoin de deux signaux PWM différents, donc de l'utilisation de deux timers configurés en PWM. &lt;br /&gt;
&lt;br /&gt;
Comme dit en introduction de cette section, nous nous imposons l'utilisation du TIMER1 pour cette deuxième PWM. Il existe une différence dans la configuration de cette dernière dans la mesure où le signal peut recevoir des consignes allant de 8 à 16bits en fonction de la configuration. Afin de simplifier les choses, nous avons configuré cette dernière sur 8bits pour lui envoyer les mêmes consignes que pour le TIMER0.&lt;br /&gt;
&lt;br /&gt;
====Tests====&lt;br /&gt;
&lt;br /&gt;
Avant tout, nous devions vérifier que la consigne avait une intensité suffisante pour être envoyée sur deux servomoteurs en même temps. Ce qui était le cas.&lt;br /&gt;
&lt;br /&gt;
Ensuite, nous avons testés des changements de consignes plus ou moins rapides afin de déterminer ce qui répondrait le mieux à nos attentes.&lt;br /&gt;
&lt;br /&gt;
Les tests concluants, nous pouvions passer à la suite.&lt;br /&gt;
&lt;br /&gt;
===Utilisation des buzzers===&lt;br /&gt;
&lt;br /&gt;
En fonction du niveau d'excitation, nous ferons vibrer un ou deux buzzers. Pour ce faire, nous avons fait le choix de souder leur broche GND au GND de nos cartes et ainsi souder leur potentiel VCC à une broche de l'arduino. Ainsi, si nous plaçons la broche à l'état bas, le tension dans le buzzer est nulle et si nous passons la broche à l'état haut, la tension aux bornes du buzzers devient 3.3V et il vibre.&lt;br /&gt;
&lt;br /&gt;
Pour ce faire, nous utilisons simplement deux broches, ici PXX et PXX, que nous avons initialisés en tant que sorties en mettant à un leur bit correspondant dans le registre DDRX. Ainsi, il ne reste plus qu'à commander la valeur haute ou basse de ces broches en mettant à 1 ou 0 leur bit dans le registre PORTX.&lt;br /&gt;
&lt;br /&gt;
====Tests====&lt;br /&gt;
&lt;br /&gt;
Ceci a été testé sur breadboard et était fonctionnel. Cependant, une chose à quoi nous n'avions pas pensé était que lorsque nous les avons soudés sur le PCB, nous aurions dû utiliser des câbles plus épais, car comme nous n'avions pas de prototype sur quoi coller les buzzers, l'un des buzzers s'est arraché de la carte en vibrant.&lt;br /&gt;
&lt;br /&gt;
===Résumé===&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Resume sextoy.png|center|recap]]&lt;br /&gt;
&lt;br /&gt;
==Gestion de la communication bluetooth==&lt;br /&gt;
===Introduction===&lt;br /&gt;
Dans le cadre de notre projet, la communication entre le sextoy et le téléphone se fera à faible portée. C'est pourquoi nous avons considéré comme intéressante l'utilisation de la technologie bluetooth.&lt;br /&gt;
&lt;br /&gt;
La première partie consiste à coder une librairie au niveau de l'arduino. Cette librairie, codée en C, consiste simplement en une lecture / écriture via les broches RX/TX de l'arduino et du module bluetooth. &lt;br /&gt;
&lt;br /&gt;
La seconde partie conssite à coder la partie application mobile qui communiquera avec la arduino.&lt;br /&gt;
&lt;br /&gt;
Une fois que cette transmission sera mise en place, il ne reste plus qu'à expliciter le protocole des paquets transmis.&lt;br /&gt;
&lt;br /&gt;
===Arduino===&lt;br /&gt;
&lt;br /&gt;
Afin de communiquer à travers le module bluetooth, il faut relier la broche RX de l'arduino à celle TX du module bluetooth et inversement. Pour tester nos codes, nous avons utilisé un module bluetooth HC-06 et l'application [https://play.google.com/store/apps/details?id=Qwerty.BluetoothTerminal&amp;amp;hl=fr| Bluetooth Terminal]. &lt;br /&gt;
&lt;br /&gt;
Dans la mesure où l'arduino devra traiter l'arrivée asynchrone de messages tout en effectuant le traitement des capteurs, il est intéressant d'effectuer des lectures à l'aide d'interruptions. Pour cela, nous utilisons le vecteur d'interruption USART_RXC_vect qui déclenchera la fonction de lecture d'un paquet à chaque fois qu'un message est reçu.&lt;br /&gt;
&lt;br /&gt;
''Actuellement, la librarie est fonctionnelle, il ne reste plus qu'à faire l'utilisation par interruption.''&lt;br /&gt;
&lt;br /&gt;
===Application mobile===&lt;br /&gt;
===Protocole de transmission===&lt;br /&gt;
===Module bluetooth utilisé===&lt;br /&gt;
&lt;br /&gt;
Le module bluetooth embarqué sur le PCB est un module reprogrammable. Ainsi il était nécessaire de connaître la configuration par défaut du composant, dans le but de savoir s'il fallait ou non prévoir un pcb de reconfiguration.&lt;br /&gt;
&lt;br /&gt;
Le CYBLE-012012 est configuré par défaut avec le firmware &amp;quot;EZ-Serial BLE Firmware&amp;quot;. La configuration par défaut de ce firmware est la suivante : &lt;br /&gt;
&lt;br /&gt;
* 115200 baud, 8bits de donnée, pas de bit de parité, 1bit de stop&lt;br /&gt;
* &amp;quot;UART flow control&amp;quot; désactivé&lt;br /&gt;
* firmware activé en mode &amp;quot;auto-start&amp;quot;, qui correspond à une recherche automatique de connection bluetooth et de redirection RX-TX en cas de connection&lt;br /&gt;
&lt;br /&gt;
Ces [http://www.cypress.com/file/285326/download| informations] sont importantes car, si elles sont vraiment respectées, nous n'auront pas à créer notre propre kit de développement, ce qui est un gain de temps considérable.&lt;br /&gt;
&lt;br /&gt;
Qui plus est, l'utilisation d'une fonction &amp;quot;auto-start&amp;quot; est en adéquation avec le module bluetooth HC-05 utilisé pour les tests. Nous pouvons donc commencer la programmation mobile du bluetooth en parallèle de l'impression des pcb. Et, dans le cas où les pcb seraient disfonctionnels, nous pourront quand meme envisager un prototype sur breadboard.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Test====&lt;br /&gt;
&lt;br /&gt;
Après avoir alimenté la carte, nous n'avons pas pu nous connecter au module bluetooth, ce dernier n'étant même pas visible dans les appareils alentours. &lt;br /&gt;
&lt;br /&gt;
Nous avons alors vérifié si la carte était correctement alimentée. Pour ce faire, nous avons mesuré différents points de tensions sensé être mis par défaut en PULL-DOWN ou PULL-UP à des niveaux de tensions d'1.7V. Ces niveaux étaient respectés. Le problème n'est donc pas d'ordre électronique. &lt;br /&gt;
&lt;br /&gt;
Par la suite, nous avons voulu vérifier la communication du module. Ce dernier, en déclenchant l'auto start est sensé émettre (en suivant le protocole UART rappelé précédemment) un message START. Nous avons donc inspecté ceci en utilisant minicom. En effet, minicom reçoit un message, mais ne sait pas le déchiffré. Qui plus est, impossible d'envoyer un message au module afin de le reprogrammer (de manière similaire à un XBee).&lt;br /&gt;
&lt;br /&gt;
Devant ces soucis, nous décidons donc d'abandonner ce module bluetooth et de poursuivre avec celui utilisé pour les essais de programmation, le HC-05.&lt;br /&gt;
&lt;br /&gt;
==Conception de l'application Android==&lt;br /&gt;
===Envoie et réception de SMS===&lt;br /&gt;
Afin de ne pas utiliser de serveur, les deux appareils Android doivent synchroniser l'envoi de paquet UDP, pour cela nous avons voulu utiliser des SMS.&lt;br /&gt;
Les SMS permettent d'envoyer des informations, comme les adresses IP, les ports utilisés, l'heure à laquelle les deux téléphones vont envoyer leur premier paquet UDP.&lt;br /&gt;
&lt;br /&gt;
Dans un premier temps nous avons créer une application pour envoyer les SMS:&lt;br /&gt;
&lt;br /&gt;
L'application était très simple, l'envoi de SMS se faisait en deux lignes&lt;br /&gt;
  // initialisation d'une variable sms gérant les sms&lt;br /&gt;
  SmsManager sms = SmsManager.getDefault() ;&lt;br /&gt;
  // envoie un sms comportant le texte de la variable message de type String au numéro contenu dans la variable num de type String&lt;br /&gt;
  sms.sendTextMessage(num, null, message, null, null);&lt;br /&gt;
&lt;br /&gt;
Dans un deuxième temps il fallait recevoir un SMS, ou plutôt savoir qu'un nouvel SMS avait été reçu :&lt;br /&gt;
&lt;br /&gt;
Pour cela il fallait utiliser un thread qui était appelé par interruption avec la réception d'un SMS comme vecteur d’interruption.&lt;br /&gt;
Ce thread effectuait ce qui était demandé dans sa fonction onReceive(), comme par exemple lire les informations contenues dans le SMS:&lt;br /&gt;
  public class IncomingSms extends BroadcastReceiver {&lt;br /&gt;
     final SmsManager sms = SmsManager.getDefault();&lt;br /&gt;
     public void onReceive(Context context, Intent intent) {&lt;br /&gt;
       //Ce qui doit etre fait lors de la reception de SMS&lt;br /&gt;
     }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Malheureusement ce programme ne marchait pas pendant des semaines, malgré de nombreuses modifications et de nombreux essais. Et le problème semblait être ma carte SIM, car en changeant de SIM, tous les programmes contenant ce code fonctionnaient parfaitement.&lt;br /&gt;
&lt;br /&gt;
===Protocole UDP===&lt;br /&gt;
Afin d'effectuer un échange de données entre les deux utilisateurs, et essayer de faire une vidéo-conférence, nous avons choisi d'utiliser le protocole UDP.&lt;br /&gt;
&lt;br /&gt;
Une première application permettait de tester l'envoi de paquet UDP, pour cela un serveur UDP a été utilisé sur un PC.&lt;br /&gt;
Le serveur attendait un message et l'affichait quand il le recevait.&lt;br /&gt;
&lt;br /&gt;
Pour envoyer un paquet nous utilisons :&lt;br /&gt;
&lt;br /&gt;
 DatagramSocket ds = null;&lt;br /&gt;
 ds = new DatagramSocket(PortA);&lt;br /&gt;
 DatagramPacket dp;&lt;br /&gt;
 InetAddress local = InetAddress.getByName(AdrIp);&lt;br /&gt;
 dp = new DatagramPacket(message.getBytes(),message.length(),local,PortA );&lt;br /&gt;
 ds.setBroadcast(true);&lt;br /&gt;
 ds.send(dp);&lt;br /&gt;
&lt;br /&gt;
Ce code crée un paquet qui comporte l’adresse et le port du destinataire, mais surtout les données à envoyer.&lt;br /&gt;
Ce paquet est ensuite envoyer grâce à un socket.&lt;br /&gt;
&lt;br /&gt;
Une fois que tout fonctionnait comme il le fallait, nous avons pu créer une application qui comportait l'envoi et la réception de paquet.&lt;br /&gt;
En mettant l'application sur deux téléphones on pouvait tester si tout fonctionnait.&lt;br /&gt;
Les tests ont seulement été effectué sur un réseau local, on ne sait pas pour le moment si des box internet pourraient empêcher la transmission.&lt;br /&gt;
Pour la réception nous utilisons :&lt;br /&gt;
 dsocket.receive(packet);&lt;br /&gt;
 buff = packet.getData();&lt;br /&gt;
&lt;br /&gt;
Pour récupérer les données du paquet dans la variable buff, il suffit ensuite de créer une boucle pour recevoir plusieurs messages.&lt;br /&gt;
La fonction de réception étant bloquante, il a été préférable de l'effectuer dans un thread.&lt;br /&gt;
&lt;br /&gt;
L'application est donc composé de un thread d'écoute, un thread d'envoi et d'un thread principal gérant l'affichage et appelant le thread d'envoi lorsque que le bouton de l'application est appuyé.&lt;br /&gt;
Voici une image de l'application, les champs d’adresseIp et de port du destinataire sont à remplir avant d'envoyer un paquet UDP.&lt;br /&gt;
Et le port d'écoute est défini dans le code de cette application, ce qui n'est pas très pratique, mais suffisant pour les tests.&lt;br /&gt;
&lt;br /&gt;
Le TextView est mis à jour à chaque que le bouton envoyer est appuyé, en prenant comme valeur celle d'un registre comprenant la valeurs du dernier paquet UDP reçu.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:ClientUdp.png]]&lt;br /&gt;
&lt;br /&gt;
===Communication Bluetooth===&lt;br /&gt;
Pour gérer la communication entre le téléphone et un sextoys, il faut utiliser une communication Bluetooth.&lt;br /&gt;
&lt;br /&gt;
Dans un premier temps il faut se connecter avec l'appareil:&lt;br /&gt;
 &lt;br /&gt;
 new ConnectBT().execute();&lt;br /&gt;
&lt;br /&gt;
Avec ConnectBT une classe trouvée sur internet.&lt;br /&gt;
&lt;br /&gt;
Ensuite il faut communiquer :&lt;br /&gt;
&lt;br /&gt;
Pour envoyer un message on utilise: &lt;br /&gt;
&lt;br /&gt;
 btSocket.getOutputStream().write(message);&lt;br /&gt;
&lt;br /&gt;
Avec btSocket un socket Bluetooth ayant été connecté avec le sextoy dans la classe ConnectBT.&lt;br /&gt;
&lt;br /&gt;
Ensuite il faut recevoir :&lt;br /&gt;
&lt;br /&gt;
 btSocket.getInputStream().read(mmBuffer);&lt;br /&gt;
&lt;br /&gt;
Avec mmBuffer qui contient le message reçu.&lt;br /&gt;
&lt;br /&gt;
Mais contrairement à la réception UDP, la réception Bluetooth n'est pas bloquante, ainsi on peut recevoir des messages nuls.&lt;br /&gt;
&lt;br /&gt;
Pour éviter ce problème l'application envoie un paquet Bluetooth, et reçoit juste après, et le sextoy est configuré pour envoyer un paquet UDP, juste après en avoir reçu un.&lt;br /&gt;
&lt;br /&gt;
===Application principale===&lt;br /&gt;
Afin d'être ergonomique,l'application doit pouvoir enregistrer des contacts, pour plus facilement communiquer avec eux.&lt;br /&gt;
Nous avons choisi de ne pas utiliser les contacts du téléphone, pour pouvoir avoir des contacts &amp;quot;confidentiels&amp;quot; qui ne seront que dans la base de donnée de l'application.&lt;br /&gt;
&lt;br /&gt;
Il fallait donc créer une base de donnée, nous avons donc utilisé SQLite car cette bibliothèque est utilisée par Android comme base de données embarquée.&lt;br /&gt;
La base ne comporte qu'une seule table, avec seulement les pseudos et les numéros de téléphone.&lt;br /&gt;
&lt;br /&gt;
Une fois la base crée, pour interagir avec, nous avons coder des activités:&lt;br /&gt;
&lt;br /&gt;
- Ajout de contact:&lt;br /&gt;
&lt;br /&gt;
Il faut entrer dans les champs de textes les informations pour la base de données,puis appuyer sur le bouton &amp;quot;Ajouter&amp;quot; pour créer un nouveau contact dans la base de donnée.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:AjoutContact.png]]&lt;br /&gt;
&lt;br /&gt;
-Fiche de Contact: &lt;br /&gt;
&lt;br /&gt;
Affiche le pseudo et le numéro de téléphone dans les &amp;quot;TextView&amp;quot;, et permet de : supprimer le contact en cliquant sur la croix, envoyer un SMS en cliquant sur l'icone &amp;quot;Message&amp;quot;, mais aussi commencer une communication UDP en cliquant sur le téléphone.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:FicheContact.png]]  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-Liste de contact :&lt;br /&gt;
&lt;br /&gt;
Affiche la liste de contacts, en cliquant sur un des contacts on arrive sur la page Fiche de Contact, et en cliquant sur le plus on arrive sur la page Ajout de Contact.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:ListView.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ensuite il faut ajouter la gestion de communication:&lt;br /&gt;
&lt;br /&gt;
-Les SMS :&lt;br /&gt;
&lt;br /&gt;
Il faut remplir les champs de texte et appuyer sur SMS pour envoyer un message du type&lt;br /&gt;
&lt;br /&gt;
Message&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Address Ip :&amp;quot; Addresse Ip&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Port :&amp;quot; Port&lt;br /&gt;
&lt;br /&gt;
Avec Message,Addresse Ip, et Port les champs à remplir, &amp;quot;Addresse Ip :&amp;quot; et &amp;quot;Port :&amp;quot; deux chaines de caractères.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:SMS.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-Protocole UDP : &lt;br /&gt;
&lt;br /&gt;
Quatre champs sont à remplir, cliquer sur Envoyer pour passez à l'activité de gestion Bluetooth.&lt;br /&gt;
&lt;br /&gt;
Les champs sont:&lt;br /&gt;
&lt;br /&gt;
-L'addresse Ip&lt;br /&gt;
&lt;br /&gt;
-Le port destination&lt;br /&gt;
&lt;br /&gt;
-Le port source&lt;br /&gt;
&lt;br /&gt;
-L'heure qui n'est pas utilisée, qui devait servir pour la synchronisation.&lt;br /&gt;
&lt;br /&gt;
Les valeurs des champs sont conservés pour la communication UDP à venir.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:UDP.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-Gestion Bluetooth :&lt;br /&gt;
&lt;br /&gt;
En cliquant sur &amp;quot;Paired Devices&amp;quot;, l'application affichera la liste des appareils appairés.&lt;br /&gt;
&lt;br /&gt;
Puis en cliquant un des appareils, l'application essayera de connecter avec, tout en lançant l'activité UDP avec Bluetooth.&lt;br /&gt;
&lt;br /&gt;
Si l'on souhaite ne pas utiliser de périphérique Bluetooth, il suffit de cliquer sur le bouton moins en haut à droite.&lt;br /&gt;
&lt;br /&gt;
L'activité UDP sans Bluetooth se lancera.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Bluetooth.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-Communication UDP avec Bluetooth:&lt;br /&gt;
&lt;br /&gt;
Pour lancer la communication UDP, appuyer sur le bouton Off ,il passera en mode On.&lt;br /&gt;
&lt;br /&gt;
Si vous cliquez sur le bouton On il passera en mode Off, et coupera la communication UDP.&lt;br /&gt;
&lt;br /&gt;
Le bouton envoyer, permet de forcer l'envoi d'un paquet UDP.&lt;br /&gt;
&lt;br /&gt;
Et le bouton croix coupe toutes les communications(UDP et Bluetooth), et retourne à la page précédente.&lt;br /&gt;
&lt;br /&gt;
Lorsque l'application reçoit un paquet UDP, un message est envoyé via Bluetooth au sextoys.&lt;br /&gt;
&lt;br /&gt;
Celui-ci répond automatiquement en envoyant une valeur moyennée des ses capteurs, cette valeur est récupérée et mise dans un registre.&lt;br /&gt;
&lt;br /&gt;
En parallèle, toutes les secondes un paquet UDP est envoyé et les données envoyés sont celle du registre.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Com.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-Communication UDP sans Bluetooth.&lt;br /&gt;
&lt;br /&gt;
Le bouton On/Off est utilisé comme dans l'activité &amp;quot;Communication UDP avec Bluetooth&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Les boutons de niveaux, mettent une valeur dans un même registre.&lt;br /&gt;
&lt;br /&gt;
Chaque boutons correspond à une valeur, qui correspondent avec un niveau d'excitation du sextoys.&lt;br /&gt;
&lt;br /&gt;
Ainsi toutes les secondes, un paquet UDP est envoyé avec comme donnée la valeur du registre.&lt;br /&gt;
&lt;br /&gt;
Lorsqu'un paquet UDP est reçu, la donnée reçue est mise dans un registre qui détermine l’affichage du &amp;quot;TextView&amp;quot; en bas à droite.&lt;br /&gt;
&lt;br /&gt;
Ce TextView est mis à jours en même temps qu'un paquet UDP est envoyé.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Co2.png]]&lt;br /&gt;
&lt;br /&gt;
== Rapport et codes ==&lt;br /&gt;
&lt;br /&gt;
Rapport : [[Fichier:CR_sextoy_connecte.pdf]]&lt;br /&gt;
&lt;br /&gt;
[https://archives.plil.fr/croussel/Projet_sextoy_connecte.git Codes]&lt;/div&gt;</summary>
		<author><name>Tstieven</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=IMA4_2016/2017_P14&amp;diff=42863</id>
		<title>IMA4 2016/2017 P14</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=IMA4_2016/2017_P14&amp;diff=42863"/>
				<updated>2017-05-20T15:53:59Z</updated>
		
		<summary type="html">&lt;p&gt;Tstieven : /* Protocole UDP */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Projet IMA4 : Sex-toy connecté =&lt;br /&gt;
&lt;br /&gt;
== Présentation du projet ==&lt;br /&gt;
&lt;br /&gt;
L'objectif de ce projet est de développer un système d'échange entre deux partenaires distants afin de rendre plus facile la vie de couple à distance.&lt;br /&gt;
&lt;br /&gt;
Pour ce faire, le dispositif sera constitué de deux sextoys connectés (un par appareil génital désiré) à leur téléphone portable respectif. Une application mobile permettra aux utilisateurs de s'échanger des données de manière sécurisé, ceci au travers d'un serveur embarqué dans le téléphone portable.&lt;br /&gt;
&lt;br /&gt;
Les données échangées pourront être l'accélération ou la température. Elles seront traitées et transmises au sextoy qui adaptera sa vitesse, son retour vibratoire ou sa position en conséquence.&lt;br /&gt;
&lt;br /&gt;
Les sextoys pourraient être composés de :&lt;br /&gt;
* Pour l'appareil masculin (dédié à la femme) :&lt;br /&gt;
:* un servomoteur ;&lt;br /&gt;
:* un vibreur ;&lt;br /&gt;
:* une sonde de température ;&lt;br /&gt;
:* un accéléromètre.&lt;br /&gt;
* Pour l'appareil féminin (dédié à l'homme) :&lt;br /&gt;
:* 4 servomoteurs (dans le but de &amp;quot;masser&amp;quot; en déplaçant le silicone);&lt;br /&gt;
:* des vibreurs ;&lt;br /&gt;
:* un accéléromètre.&lt;br /&gt;
* Pour les deux appareils :&lt;br /&gt;
:* un micro-contrôleur (Arduino mini) ;&lt;br /&gt;
:* un module de transmission / réception bluetooth afin de se connecter au téléphone ;&lt;br /&gt;
:* du silicone.&lt;br /&gt;
	&lt;br /&gt;
* L'application mobile devra :&lt;br /&gt;
:* mettre en place une communication cryptée à travers un serveur (embarqué ou bien intermédiaire ?) ;&lt;br /&gt;
:* effectuer un échange de données en bluetooth avec le sextoy connecté.&lt;br /&gt;
&lt;br /&gt;
* L'application mobile pourra :&lt;br /&gt;
:* utiliser la vidéo-conférence ;&lt;br /&gt;
:* enregistrer les meilleurs moments et enventuellement pouvoir les partager ;&lt;br /&gt;
:* effectuer une recherche de partenaire aléatoire.&lt;br /&gt;
&lt;br /&gt;
* S'il nous reste du temps, il peut être envisageable de :&lt;br /&gt;
:* mettre en place un réseau social interne à Polytech.&lt;br /&gt;
&lt;br /&gt;
== Liste des tâches ==&lt;br /&gt;
* Conception de l'appareil masculin (Cédric)&lt;br /&gt;
:* mettre en place le bus I2C avec les différents capteurs ;&lt;br /&gt;
:* création d'un PCB au format gerber ;&lt;br /&gt;
:* création d'un prototype.&lt;br /&gt;
&lt;br /&gt;
* Conception de l'appareil féminin (Cédric)&lt;br /&gt;
:* mettre en place le bus I2C ;&lt;br /&gt;
:* traitement des données afin d'en déduire la position et l'entrain de l'utilisateur ;&lt;br /&gt;
:* création d'un PCB ;&lt;br /&gt;
:* création d'un prototype.&lt;br /&gt;
&lt;br /&gt;
* Communication bluetooth (Cédric et Thomas)&lt;br /&gt;
:* étudier l'émission/réception vue de l'arduino ;&lt;br /&gt;
:* étudier l'émission/réception vue du téléphone ;&lt;br /&gt;
:* mise en place du protocole ;&lt;br /&gt;
:* test de portée.&lt;br /&gt;
&lt;br /&gt;
* Développement mobile (Thomas)&lt;br /&gt;
:* déterminer la meilleure approche : utilisation d'un serveur intermédiaire ou bien mise en place d'un &amp;quot;client-serveur&amp;quot; dans l'application mobile ;&lt;br /&gt;
:* mettre en place le choix retenu ;&lt;br /&gt;
:* tester dans un premier temps une transmission de texte ;&lt;br /&gt;
:* programmer le traitement de données reçues par bluetooth ;&lt;br /&gt;
:* rajouter un côté esthétique à l'application.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Recapitulatif sextoy.png|center|recap]]&lt;br /&gt;
&lt;br /&gt;
==Feuille d'heures==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Tâche !! Prélude !! Heures S1 !! Heures S2 !! Heures S3 !! Heures S4 !! Heures vacances !! Heures S5 !! Heures S6 !! Heures S7 !! Heures S8 !! Heures S9 !! Heures S10 !! Heures vacances et après!! Total&lt;br /&gt;
|-&lt;br /&gt;
| Définition cahier des charges &lt;br /&gt;
| 2H&lt;br /&gt;
| 2H&lt;br /&gt;
| 1H&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 5H&lt;br /&gt;
|-&lt;br /&gt;
| Dimensionnement et établissement de la liste de matériel&lt;br /&gt;
| &lt;br /&gt;
| 3H&lt;br /&gt;
| 4H&lt;br /&gt;
|&lt;br /&gt;
| 4H&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 11H&lt;br /&gt;
|-&lt;br /&gt;
| Établissement de la liste et de la répartition des tâches&lt;br /&gt;
| 1H&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 1H&lt;br /&gt;
|-&lt;br /&gt;
| Appareil masculin : programmation&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 1H&lt;br /&gt;
| 2H&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 6H&lt;br /&gt;
| 9H &lt;br /&gt;
|-&lt;br /&gt;
| Appareil masculin : étude des datasheets&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 1H&lt;br /&gt;
| 1H&lt;br /&gt;
|&lt;br /&gt;
| 4H&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| 1H&lt;br /&gt;
|&lt;br /&gt;
| 7H&lt;br /&gt;
|-&lt;br /&gt;
| Appareil masculin : PCB&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 4H&lt;br /&gt;
| 4H&lt;br /&gt;
| 6H&lt;br /&gt;
| 30H&lt;br /&gt;
| 44H&lt;br /&gt;
|-&lt;br /&gt;
| Appareil masculin : 3D&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| 6H&lt;br /&gt;
| 6H&lt;br /&gt;
|-&lt;br /&gt;
| Conception de l'appareil féminin&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 2H&lt;br /&gt;
| 1H&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 3H&lt;br /&gt;
|-&lt;br /&gt;
| Liaison bluetooth (embarqué)&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 3H&lt;br /&gt;
| 1H&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 8H&lt;br /&gt;
| 12H&lt;br /&gt;
|-&lt;br /&gt;
| Liaison bluetooth (téléphone)&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 15H&lt;br /&gt;
| 15H&lt;br /&gt;
|-&lt;br /&gt;
| Recherche et discussion autour de la meilleure approche de communication&lt;br /&gt;
| 2H&lt;br /&gt;
| 2H&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 4H&lt;br /&gt;
|-&lt;br /&gt;
| Synchronisation temporelle des téléphones (par sms)&lt;br /&gt;
| &lt;br /&gt;
| 2H&lt;br /&gt;
| 4H&lt;br /&gt;
| 6H&lt;br /&gt;
| 8H&lt;br /&gt;
| 6H&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 26H&lt;br /&gt;
|-&lt;br /&gt;
| Transmission de paquets UDP&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 4H&lt;br /&gt;
| 4H&lt;br /&gt;
| 4H&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 6H&lt;br /&gt;
| 18H&lt;br /&gt;
|-&lt;br /&gt;
| Streaming video(UDP)&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 4H&lt;br /&gt;
| 4H&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 8H&lt;br /&gt;
|-&lt;br /&gt;
| Application et bases de données&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 6H&lt;br /&gt;
| 20H&lt;br /&gt;
| 26H&lt;br /&gt;
|-&lt;br /&gt;
| Total&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 195H&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Conception des sextoys==&lt;br /&gt;
===Introduction===&lt;br /&gt;
&lt;br /&gt;
La conception de sextoys doit respecter différents règles, notamment sanitaires. C'est pourquoi nous nous sommes intéressés à l'utilisation de silicone pour ce projet. Nous avons notamment rencontré un ingénieur compétant dans ce domaine afin de nous aiguiller sur cette éventuelle conception.&lt;br /&gt;
&lt;br /&gt;
La conception passera également par une conception 3D que nous effectuerons à l'aide d'imprimantes 3D au fabricarium de Polytech Lille.&lt;br /&gt;
&lt;br /&gt;
Enfin, les prototypes seront embarqués de cartes électroniques (aussi appelés PCB) que nous constituerons.&lt;br /&gt;
&lt;br /&gt;
===Choix du silicone, rencontre avec Mario Sanz===&lt;br /&gt;
&lt;br /&gt;
Le projet nécessite l'utilisation d'une matière souple et non irritante, c'est pourquoi nous avons choisi de nous tourner vers l'utilisation du silicone. Afin de choisir au mieux le produit correspondant à nos besoins, nous avons rencontré Mario Sanz, ingénieur à l'INRIA, qui travail régulièrement avec du silicone.&lt;br /&gt;
&lt;br /&gt;
Ce dernier nous a expliqué les différents points importants sur lesquels nous baser afin de choisir au mieux un produit en accord avec le projet. Ne serait-ce que pour le choix de la dureté, il existe une échelle propre au silicone (&amp;quot;Shore hardness scale&amp;quot;), nous pensions au départ rechercher un silicone le plus mou possible, cependant, il faut savoir que le plus le silicone est mou, plus il a tendance à être &amp;quot;collant&amp;quot;. Finalement, après discutions, un shore de 40A (correspondant à la dureté d'une gomme) suffisamment mince fera l'affaire pour la conception des prototypes.&lt;br /&gt;
&lt;br /&gt;
Il nous a également expliqué que le silicone peut être travaillé à l'aide d'additifs et sous cloche à vide afin d'améliorer le moulage, l'absence de &amp;quot;bulles&amp;quot; sur la surface de la pièce et la souplesse. Nous pouvons cependant travailler sans tout cela car il n'est pas spécialement important, pour notre projet, de rechercher des propriétés physiques homogènes dans tout le sextoy.&lt;br /&gt;
&lt;br /&gt;
Pour ce qui est de la création de moules, nous pourrons les effectuer via imprimante 3D. Il existe un bon nombre de tutoriels sur internet pour s'y référer en cas de soucis.&lt;br /&gt;
&lt;br /&gt;
===Impression 3D===&lt;br /&gt;
&lt;br /&gt;
Pour la création d'objets en 3D, de nombreux outils sont disponibles. Nous avons décidé d'utiliser Tinkercad, un outil qui s'intègre directement au navigateur internet utilisé. &lt;br /&gt;
&lt;br /&gt;
L'avantage d'un tel outil est sa grande communauté qui permet un accès simple et rapide à une multitudes de projets dont on pourrait s'inspirer pour générer nos pièces.&lt;br /&gt;
&lt;br /&gt;
====Création des moules====&lt;br /&gt;
&lt;br /&gt;
A l'aide d'une imprimante 3D, nous pouvons concevoir des moules afin de créer des pièces en silicone. Il s'agit de la manière la plus rapide et accessible pour notre projet.&lt;br /&gt;
&lt;br /&gt;
Cette méthode comporte des désavantages, dont le principal est la présence d'imperfection et de non homogénéité dans les pièces réalisées. Ceci n'a pas de grande importance dans la mesure où nous souhaitons du qualitatif.&lt;br /&gt;
&lt;br /&gt;
====Création d'un prototype====&lt;br /&gt;
&lt;br /&gt;
=====Pénis=====&lt;br /&gt;
&lt;br /&gt;
Afin de visualiser qualitativement la forme et le passage des câbles, un prototype imprimé au Fabricarium de Polytech Lille a été réalisé. &lt;br /&gt;
&lt;br /&gt;
Ce prototype se divise en 3 pièces : un boîtier (pour y loger le PCB), un cylindre (afin de reproduire la forme désirée) et un &amp;quot;tête&amp;quot; qui devait à l'origine être un moule en silicone (pour y loger le PCB du capteur de température).&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Sextoy_penis.png|400px|thumb|center|Prototype 3D pénis]]&lt;br /&gt;
&lt;br /&gt;
===Conception des PCB===&lt;br /&gt;
&lt;br /&gt;
Afin de diminuer un maximum la taille des cartes electroniques, nous utilisons principalement des composants CMS. &lt;br /&gt;
&lt;br /&gt;
La conception des cartes peut-être effectué à l'aide de logicels de CAO tels qu'Altium ou Eagle. Dans notre cas, nous avons utilisé Eagle. &lt;br /&gt;
&lt;br /&gt;
Ce travail consiste à créer une librairie regroupant l'intégralité des composants nécessaires et, ensuite, de  créer un schéma du circuit. Une fois le schéma terminé, il ne restera plus qu'à faire le routage et exporter les fichiers au format &amp;quot;Gerber&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Pour ce projet, nous aurons besoin de deux cartes, une par prototype. Chaque carte embarquera des composants similaires, c'est pourquoi nous nous contenterons d'abord d'un seul PCB pour effectuer des tests. Si ces derniers sont concluants, nous pourrons graver le second.&lt;br /&gt;
&lt;br /&gt;
====PCB du pénis====&lt;br /&gt;
&lt;br /&gt;
Le premier PCB imprimé et soudé est celui du pénis. Une première carte avait été imprimé regroupant sur cette dernière : un support pour l'arduino, un accéléromètre, un module bluetooth. &lt;br /&gt;
&lt;br /&gt;
[[Fichier:PCB_penis_VB.png|400px|thumb|center|PCB v1.0]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous avons expérimentés des problèmes dûs aux dimensions de l'accéléromètre, l'utilisation d'un boîtier CMS de type TDFN10 2x2 était optimiste pour la réalisation du projet, compte tenu du matériel à disposition.&lt;br /&gt;
&lt;br /&gt;
C'est pourquoi une seconde carte a été gravée, cette fois sans l'accéléromètre.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:PCB_penis_VF.png|400px|thumb|center|PCB v2.0]]&lt;br /&gt;
&lt;br /&gt;
[[Fichier:PCB_VF.png|400px|thumb|center|PCB v2.0 schema]]&lt;br /&gt;
&lt;br /&gt;
Ce prototype est sensé embarquer un capteur de température que nous avons décidé de mettre sur un PCB à part. Cette carte avait pour but d'être coulé dans le silicone, afin de mesurer la température au plus près de la zone intéressée.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:TEMPERATURE_PCB_VF.png|400px|thumb|center|PCB temperature]]&lt;br /&gt;
&lt;br /&gt;
[[Fichier:TEMPERATURE_VF.png|400px|thumb|center|PCB temperature schema]]&lt;br /&gt;
&lt;br /&gt;
====PCB du vagin====&lt;br /&gt;
&lt;br /&gt;
Compte tenu des soucis rencontrés avec l'accéléromètre, la carte sera gravée afin de pouvoir y plugger un accéléromètre analogique en traversant. Le but étant d'avoir un prototype fonctionnel d'ici la fin du projet.&lt;br /&gt;
&lt;br /&gt;
Nous avons également eu des problèmes avec le module bluetooth utilisé, ce dernier ne pouvant être reconfiguré manuellement par minicom, nous utiliserons le bluetooth HC-05 utilisé pour les essais de code. De même que pour l'accéléromètre, nous prévoirons un endroit pour le plugger sur la carte.&lt;br /&gt;
&lt;br /&gt;
''image PCB vagin''&lt;br /&gt;
&lt;br /&gt;
''Reste à graver le PCB du vagin''&lt;br /&gt;
&lt;br /&gt;
==Gestion des composants==&lt;br /&gt;
===Introduction===&lt;br /&gt;
&lt;br /&gt;
Notre projet implique l'utilisation de capteurs, de servomoteurs et de buzzers, constituant chacun une partie de la programmation embarquée.&lt;br /&gt;
&lt;br /&gt;
Pour cette programmation, nous avons décidé d'utiliser AVR-gcc et ainsi coder les arduinos en C.&lt;br /&gt;
&lt;br /&gt;
Les capteurs utilisés utilisent un protocole de communication IIC (ou I²C, I2C), ce protocole de multiples avantages que nous expliciterons par la suite. Cependant, comme un des capteurs (l'accéléromètre) prévus initialement nous a causé beaucoup de soucis, nous expliciterons également la mesure à l'aide de capteurs analogiques. Ces différents capteurs nous permettront de mesurer l'excitation d'un utilisateur.&lt;br /&gt;
&lt;br /&gt;
Une fois l'excitation mesurée, il faut induire une réponse &amp;quot;physique&amp;quot;. Pour ce faire, nous utilisons d'une part des servomoteurs dans le but de produire une sensation de massage.&lt;br /&gt;
&lt;br /&gt;
D'autre part, nous utilisons également des buzzers.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'' Veuillez noter que le code ne sera pas détaillé dans le wiki, vous pouvez vous référer au dépôt git contenant les différents codes. ''&lt;br /&gt;
&lt;br /&gt;
===Utilisation des capteurs===&lt;br /&gt;
&lt;br /&gt;
====Capteurs par IIC====&lt;br /&gt;
&lt;br /&gt;
Le choix de l'IIC n'était pas anodin. L'IIC permet, pour un bus de seulement deux fils (SDA et SCL), d'utiliser un nombre important de capteurs. Ainsi, si nous décidions au cours du projet de rajouter tel ou tel capteurs, nous n'avions qu'à les greffer à ce bus IIC.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Iic.jpg|400px|center|Schema iic]]&lt;br /&gt;
&lt;br /&gt;
Tout d’abord, nous devons initialiser le bus IIC de l’arduino. Pour ce faire, il suffit de préciser la fréquence désirée, ici 400KHz, dans les registres TWSR (prescaler) et TWBR. (fréquence désirée suivant la fonction TWBR = (Fcpu - 16 Fscl ) / (2 Fscl Prescaler) ) avant de lancer l'utilisation IIC via le bit TWIE.&lt;br /&gt;
&lt;br /&gt;
Comme il peut y avoir potentiellement plusieurs capteurs sur ce bus, il faut respecter un certain protocole afin de récupérer la valeur du capteur de température. Attardons nous sur la lecture d’une valeur sur le capteur de température. Il faut : &lt;br /&gt;
&lt;br /&gt;
* Lancer un message de start&lt;br /&gt;
* Envoyer l’adresse du capteur de température (0x98 dans notre cas)&lt;br /&gt;
* Envoyer l’adresse du registre qui nous intéresse (0x00 pour celui contenant la température), ceci placera le pointeur de registre du capteur sur cette adresse&lt;br /&gt;
* Restart la communication pour laisser la main au capteur&lt;br /&gt;
* Envoyer l’adresse du capteur en ajoutant 1 (Ceci permet de stipuler que nous désirons lire la valeur pointée)&lt;br /&gt;
* Lire la partie haute de la température&lt;br /&gt;
* Lire la partie basse de la température&lt;br /&gt;
* Envoyer un message de stop&lt;br /&gt;
&lt;br /&gt;
Chaque action correspond à l'utilisation d'une fonction de la librairie IIC codée. (cf déport git) Et après chaque action, nous devons vérifier le status du bus dans le registre TWSR. Ce &amp;quot;status&amp;quot; nous donnera des indications sur le bon déroulement de la communication, à savoir la réception d'ACK (équivalent d'accusé de réception) ou confirmation d'envoie de start, restart, etc.&lt;br /&gt;
&lt;br /&gt;
=====Test=====&lt;br /&gt;
&lt;br /&gt;
Le test de la librairie iic s'est fait directement lorsque la carte du capteur de température a été soudée. Pour ce faire, nous utilisons une compilation en mode &amp;quot;DEBUG&amp;quot; (make debug upload) qui nous permettait de lire la valeur des &amp;quot;status&amp;quot; avec minicom. &lt;br /&gt;
Après différents tests, nous avons finalement réussi à faire fonctionner le capteur de température en IIC, ce dernier nous renvoyait bel et bien une valeur de température précise à 0.5degrés près, vérifié à l'aidé d'un autre capteur de température.&lt;br /&gt;
&lt;br /&gt;
Il est néanmoins regrettable que ce capteur ne sera pas utilisable dans les prototypes finaux dans la mesure où il est greffé à une carte dont le module bluetooth n'est pas utilisable.&lt;br /&gt;
&lt;br /&gt;
====Capteurs analogique====&lt;br /&gt;
&lt;br /&gt;
Comme dit précédemment, nous avons abandonné l'utilisation de l’accéléromètre IIC prévu initialement dans le vagin car nous n'avons pas réussi à le souder sur les cartes du pénis. Nous avons donc utilisé ce qui était à notre disposition à savoir un capteur analogique.&lt;br /&gt;
&lt;br /&gt;
La mesure analogique sous AVR se fait simplement via l'utilisation de la fonction ad_sample(numéro de la broche analogique lue). Elle renvoie directement une valeur entre 0 et 255 correspondant à une conversion analogique-numérique de la tension sur la broche lue du capteur.&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
===Contrôle des servomoteurs===&lt;br /&gt;
&lt;br /&gt;
Un servomoteur se contrôle à l'aide d'un signal PWM (Pulse Width Modulation). Ce signal consiste à modifier la largeur de l'impulsion en fonction de la consigne désirée. &lt;br /&gt;
&lt;br /&gt;
La génération de PWM via microcontrôleur se fait à l'aide de TIMERS. Il faut savoir qu'il existe une priorité dans les interruptions, pour un TIMER_X donné, plus le X est proche de 0, plus l'interruption sera prioritaire. Nos signaux PWM se doivent d'être le plus en accord avec nos consignes, c'est pourquoi nous avons choisi d'utiliser les TIMER les plus prioritaires pour les générer. (TIMER0 et TIMER1)&lt;br /&gt;
&lt;br /&gt;
====PWM sur un seul servomoteur====&lt;br /&gt;
&lt;br /&gt;
Notre première manière de procéder consistait à générer la PWM nous même à l'aide du vecteur d'interruption d'un TIMER. La méthode consistait à compter de 0 à 255 en permanence. Lorsque le compteur était inférieur à la consigne, on passait une sortie à l'état haut, sinon elle restait à l'état bas. &lt;br /&gt;
&lt;br /&gt;
Cette méthode simulait plutôt bien le signal PWM et avait pour avantage d'être utilisable pour n'importe quelle de l'arduino. Cependant, cette méthode a le gros désavantage d'être sensible à l'utilisation d'autres interruptions, rendant le TIMER imprécis.&lt;br /&gt;
&lt;br /&gt;
Or, notre projet utilisera d'autres procédures d'interruption. Nous avons donc décidé d'utiliser une méthode plus simple mais nous restreignant sur le choix de nos sorties.&lt;br /&gt;
&lt;br /&gt;
En effet, un atmega possède des registres que l'on peut configurer pour générer des signaux PWM sur des broches spécifiques.&lt;br /&gt;
&lt;br /&gt;
Ainsi, en configurant le registre TCCR0A à 0x81 et TCCR0B à 0x05, on se place en mode PWM non inversée à fréquence élevée. En résumé, cette configuration nous permet de faire varier les signaux PWM en introduisant une consigne dans le registre OCR0A.&lt;br /&gt;
&lt;br /&gt;
Ainsi, nous pouvons donc contrôler le moteur simplement en changeant la consigne dans OCR0A.&lt;br /&gt;
&lt;br /&gt;
====Tests====&lt;br /&gt;
&lt;br /&gt;
Dans un premier lieu, les moteurs servomoteurs ne recevaient pas les consignes. Nous pensions que le fait que la PWM soit en 3V3 était l'origine du problème. Nous avons donc fait le montage à l'aide d'un transistor NPN monté en saturé. Le problème n'a pas été résolu. &lt;br /&gt;
&lt;br /&gt;
Finalement, le soucis viendrait du fait que les tests étaient effectués avec des valeurs du registre OCR0A à 0 (pwm nulle). Nous n'aurons donc pas besoin d'un montage à transistor pour le PCB.&lt;br /&gt;
&lt;br /&gt;
Le but des servomoteurs est d'effectuer un semblant de massage, nous allons donc modifier le code afin d'effectuer la tâche de manière périodique via l'utilisation d'un TIMER.&lt;br /&gt;
&lt;br /&gt;
====Gestion d'un ensemble de servomoteurs====&lt;br /&gt;
&lt;br /&gt;
Dans le vagin, nous utilisons 4 servomoteurs afin de masser l'utilisateur. Nous avons trouvé intéressant de diviser ces moteurs en deux couples afin d'intensifier ou non ce massage en fonction des seuils d'excitation détectés par les capteurs.&lt;br /&gt;
&lt;br /&gt;
Pour ce faire, nous aurons besoin de deux signaux PWM différents, donc de l'utilisation de deux timers configurés en PWM. &lt;br /&gt;
&lt;br /&gt;
Comme dit en introduction de cette section, nous nous imposons l'utilisation du TIMER1 pour cette deuxième PWM. Il existe une différence dans la configuration de cette dernière dans la mesure où le signal peut recevoir des consignes allant de 8 à 16bits en fonction de la configuration. Afin de simplifier les choses, nous avons configuré cette dernière sur 8bits pour lui envoyer les mêmes consignes que pour le TIMER0.&lt;br /&gt;
&lt;br /&gt;
====Tests====&lt;br /&gt;
&lt;br /&gt;
Avant tout, nous devions vérifier que la consigne avait une intensité suffisante pour être envoyée sur deux servomoteurs en même temps. Ce qui était le cas.&lt;br /&gt;
&lt;br /&gt;
Ensuite, nous avons testés des changements de consignes plus ou moins rapides afin de déterminer ce qui répondrait le mieux à nos attentes.&lt;br /&gt;
&lt;br /&gt;
Les tests concluants, nous pouvions passer à la suite.&lt;br /&gt;
&lt;br /&gt;
===Utilisation des buzzers===&lt;br /&gt;
&lt;br /&gt;
En fonction du niveau d'excitation, nous ferons vibrer un ou deux buzzers. Pour ce faire, nous avons fait le choix de souder leur broche GND au GND de nos cartes et ainsi souder leur potentiel VCC à une broche de l'arduino. Ainsi, si nous plaçons la broche à l'état bas, le tension dans le buzzer est nulle et si nous passons la broche à l'état haut, la tension aux bornes du buzzers devient 3.3V et il vibre.&lt;br /&gt;
&lt;br /&gt;
Pour ce faire, nous utilisons simplement deux broches, ici PXX et PXX, que nous avons initialisés en tant que sorties en mettant à un leur bit correspondant dans le registre DDRX. Ainsi, il ne reste plus qu'à commander la valeur haute ou basse de ces broches en mettant à 1 ou 0 leur bit dans le registre PORTX.&lt;br /&gt;
&lt;br /&gt;
====Tests====&lt;br /&gt;
&lt;br /&gt;
Ceci a été testé sur breadboard et était fonctionnel. Cependant, une chose à quoi nous n'avions pas pensé était que lorsque nous les avons soudés sur le PCB, nous aurions dû utiliser des câbles plus épais, car comme nous n'avions pas de prototype sur quoi coller les buzzers, l'un des buzzers s'est arraché de la carte en vibrant.&lt;br /&gt;
&lt;br /&gt;
===Résumé===&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Resume sextoy.png|center|recap]]&lt;br /&gt;
&lt;br /&gt;
==Gestion de la communication bluetooth==&lt;br /&gt;
===Introduction===&lt;br /&gt;
Dans le cadre de notre projet, la communication entre le sextoy et le téléphone se fera à faible portée. C'est pourquoi nous avons considéré comme intéressante l'utilisation de la technologie bluetooth.&lt;br /&gt;
&lt;br /&gt;
La première partie consiste à coder une librairie au niveau de l'arduino. Cette librairie, codée en C, consiste simplement en une lecture / écriture via les broches RX/TX de l'arduino et du module bluetooth. &lt;br /&gt;
&lt;br /&gt;
La seconde partie conssite à coder la partie application mobile qui communiquera avec la arduino.&lt;br /&gt;
&lt;br /&gt;
Une fois que cette transmission sera mise en place, il ne reste plus qu'à expliciter le protocole des paquets transmis.&lt;br /&gt;
&lt;br /&gt;
===Arduino===&lt;br /&gt;
&lt;br /&gt;
Afin de communiquer à travers le module bluetooth, il faut relier la broche RX de l'arduino à celle TX du module bluetooth et inversement. Pour tester nos codes, nous avons utilisé un module bluetooth HC-06 et l'application [https://play.google.com/store/apps/details?id=Qwerty.BluetoothTerminal&amp;amp;hl=fr| Bluetooth Terminal]. &lt;br /&gt;
&lt;br /&gt;
Dans la mesure où l'arduino devra traiter l'arrivée asynchrone de messages tout en effectuant le traitement des capteurs, il est intéressant d'effectuer des lectures à l'aide d'interruptions. Pour cela, nous utilisons le vecteur d'interruption USART_RXC_vect qui déclenchera la fonction de lecture d'un paquet à chaque fois qu'un message est reçu.&lt;br /&gt;
&lt;br /&gt;
''Actuellement, la librarie est fonctionnelle, il ne reste plus qu'à faire l'utilisation par interruption.''&lt;br /&gt;
&lt;br /&gt;
===Application mobile===&lt;br /&gt;
===Protocole de transmission===&lt;br /&gt;
===Module bluetooth utilisé===&lt;br /&gt;
&lt;br /&gt;
Le module bluetooth embarqué sur le PCB est un module reprogrammable. Ainsi il était nécessaire de connaître la configuration par défaut du composant, dans le but de savoir s'il fallait ou non prévoir un pcb de reconfiguration.&lt;br /&gt;
&lt;br /&gt;
Le CYBLE-012012 est configuré par défaut avec le firmware &amp;quot;EZ-Serial BLE Firmware&amp;quot;. La configuration par défaut de ce firmware est la suivante : &lt;br /&gt;
&lt;br /&gt;
* 115200 baud, 8bits de donnée, pas de bit de parité, 1bit de stop&lt;br /&gt;
* &amp;quot;UART flow control&amp;quot; désactivé&lt;br /&gt;
* firmware activé en mode &amp;quot;auto-start&amp;quot;, qui correspond à une recherche automatique de connection bluetooth et de redirection RX-TX en cas de connection&lt;br /&gt;
&lt;br /&gt;
Ces [http://www.cypress.com/file/285326/download| informations] sont importantes car, si elles sont vraiment respectées, nous n'auront pas à créer notre propre kit de développement, ce qui est un gain de temps considérable.&lt;br /&gt;
&lt;br /&gt;
Qui plus est, l'utilisation d'une fonction &amp;quot;auto-start&amp;quot; est en adéquation avec le module bluetooth HC-05 utilisé pour les tests. Nous pouvons donc commencer la programmation mobile du bluetooth en parallèle de l'impression des pcb. Et, dans le cas où les pcb seraient disfonctionnels, nous pourront quand meme envisager un prototype sur breadboard.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Test====&lt;br /&gt;
&lt;br /&gt;
Après avoir alimenté la carte, nous n'avons pas pu nous connecter au module bluetooth, ce dernier n'étant même pas visible dans les appareils alentours. &lt;br /&gt;
&lt;br /&gt;
Nous avons alors vérifié si la carte était correctement alimentée. Pour ce faire, nous avons mesuré différents points de tensions sensé être mis par défaut en PULL-DOWN ou PULL-UP à des niveaux de tensions d'1.7V. Ces niveaux étaient respectés. Le problème n'est donc pas d'ordre électronique. &lt;br /&gt;
&lt;br /&gt;
Par la suite, nous avons voulu vérifier la communication du module. Ce dernier, en déclenchant l'auto start est sensé émettre (en suivant le protocole UART rappelé précédemment) un message START. Nous avons donc inspecté ceci en utilisant minicom. En effet, minicom reçoit un message, mais ne sait pas le déchiffré. Qui plus est, impossible d'envoyer un message au module afin de le reprogrammer (de manière similaire à un XBee).&lt;br /&gt;
&lt;br /&gt;
Devant ces soucis, nous décidons donc d'abandonner ce module bluetooth et de poursuivre avec celui utilisé pour les essais de programmation, le HC-05.&lt;br /&gt;
&lt;br /&gt;
==Conception de l'application Android==&lt;br /&gt;
===Envoie et réception de SMS===&lt;br /&gt;
Afin de ne pas utiliser de serveur, les deux appareils Android doivent synchroniser l'envoi de paquet UDP, pour cela nous avons voulu utiliser des SMS.&lt;br /&gt;
Les SMS permettent d'envoyer des informations, comme les adresses IP, les ports utilisés, l'heure à laquelle les deux téléphones vont envoyer leur premier paquet UDP.&lt;br /&gt;
&lt;br /&gt;
Dans un premier temps nous avons créer une application pour envoyer les SMS:&lt;br /&gt;
&lt;br /&gt;
L'application était très simple, l'envoi de SMS se faisait en deux lignes&lt;br /&gt;
  // initialisation d'une variable sms gérant les sms&lt;br /&gt;
  SmsManager sms = SmsManager.getDefault() ;&lt;br /&gt;
  // envoie un sms comportant le texte de la variable message de type String au numéro contenu dans la variable num de type String&lt;br /&gt;
  sms.sendTextMessage(num, null, message, null, null);&lt;br /&gt;
&lt;br /&gt;
Dans un deuxième temps il fallait recevoir un SMS, ou plutôt savoir qu'un nouvel SMS avait été reçu :&lt;br /&gt;
&lt;br /&gt;
Pour cela il fallait utiliser un thread qui était appelé par interruption avec la réception d'un SMS comme vecteur d’interruption.&lt;br /&gt;
Ce thread effectuait ce qui était demandé dans sa fonction onReceive(), comme par exemple lire les informations contenues dans le SMS:&lt;br /&gt;
  public class IncomingSms extends BroadcastReceiver {&lt;br /&gt;
     final SmsManager sms = SmsManager.getDefault();&lt;br /&gt;
     public void onReceive(Context context, Intent intent) {&lt;br /&gt;
       //Ce qui doit etre fait lors de la reception de SMS&lt;br /&gt;
     }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Malheureusement ce programme ne marchait pas pendant des semaines, malgré de nombreuses modifications et de nombreux essais. Et le problème semblait être ma carte SIM, car en changeant de SIM, tous les programmes contenant ce code fonctionnaient parfaitement.&lt;br /&gt;
&lt;br /&gt;
===Protocole UDP===&lt;br /&gt;
Afin d'effectuer un échange de données entre les deux utilisateurs, et essayer de faire une vidéo-conférence, nous avons choisi d'utiliser le protocole UDP.&lt;br /&gt;
&lt;br /&gt;
Une première application permettait de tester l'envoi de paquet UDP, pour cela un serveur UDP a été utilisé sur un PC.&lt;br /&gt;
Le serveur attendait un message et l'affichait quand il le recevait.&lt;br /&gt;
&lt;br /&gt;
Pour envoyer un paquet nous utilisons :&lt;br /&gt;
&lt;br /&gt;
 DatagramSocket ds = null;&lt;br /&gt;
 ds = new DatagramSocket(PortA);&lt;br /&gt;
 DatagramPacket dp;&lt;br /&gt;
 InetAddress local = InetAddress.getByName(AdrIp);&lt;br /&gt;
 dp = new DatagramPacket(message.getBytes(),message.length(),local,PortA );&lt;br /&gt;
 ds.setBroadcast(true);&lt;br /&gt;
 ds.send(dp);&lt;br /&gt;
&lt;br /&gt;
Ce code crée un paquet qui comporte l’adresse et le port du destinataire, mais surtout les données à envoyer.&lt;br /&gt;
Ce paquet est ensuite envoyer grâce à un socket.&lt;br /&gt;
&lt;br /&gt;
Une fois que tout fonctionnait comme il le fallait, nous avons pu créer une application qui comportait l'envoi et la réception de paquet.&lt;br /&gt;
En mettant l'application sur deux téléphones on pouvait tester si tout fonctionnait.&lt;br /&gt;
Les tests ont seulement été effectué sur un réseau local, on ne sait pas pour le moment si des box internet pourraient empêcher la transmission.&lt;br /&gt;
Pour la réception nous utilisons :&lt;br /&gt;
 dsocket.receive(packet);&lt;br /&gt;
 buff = packet.getData();&lt;br /&gt;
&lt;br /&gt;
Pour récupérer les données du paquet dans la variable buff, il suffit ensuite de créer une boucle pour recevoir plusieurs messages.&lt;br /&gt;
La fonction de réception étant bloquante, il a été préférable de l'effectuer dans un thread.&lt;br /&gt;
&lt;br /&gt;
L'application est donc composé de un thread d'écoute, un thread d'envoi et d'un thread principal gérant l'affichage et appelant le thread d'envoi lorsque que le bouton de l'application est appuyé.&lt;br /&gt;
Voici une image de l'application, les champs d’adresseIp et de port du destinataire sont à remplir avant d'envoyer un paquet UDP.&lt;br /&gt;
Et le port d'écoute est défini dans le code de cette application, ce qui n'est pas très pratique, mais suffisant pour les tests.&lt;br /&gt;
&lt;br /&gt;
Le TextView est mis à jour à chaque que le bouton envoyer est appuyé, en prenant comme valeur celle d'un registre comprenant la valeurs du dernier paquet UDP reçu.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:ClientUdp.png]]&lt;br /&gt;
&lt;br /&gt;
===Communication Bluetooth===&lt;br /&gt;
Pour gérer la communication entre le téléphone et un sextoys, il faut utiliser une communication Bluetooth.&lt;br /&gt;
&lt;br /&gt;
Dans un premier temps il faut se connecter avec l'appareil:&lt;br /&gt;
 &lt;br /&gt;
 new ConnectBT().execute();&lt;br /&gt;
&lt;br /&gt;
Avec ConnectBT une classe trouvée sur internet.&lt;br /&gt;
&lt;br /&gt;
Ensuite il faut communiquer :&lt;br /&gt;
&lt;br /&gt;
Pour envoyer un message on utilise: &lt;br /&gt;
&lt;br /&gt;
 btSocket.getOutputStream().write(message);&lt;br /&gt;
&lt;br /&gt;
Avec btSocket un socket Bluetooth ayant été connecté avec le sextoy dans la classe ConnectBT.&lt;br /&gt;
&lt;br /&gt;
Ensuite il faut recevoir :&lt;br /&gt;
&lt;br /&gt;
 btSocket.getInputStream().read(mmBuffer);&lt;br /&gt;
&lt;br /&gt;
Avec mmBuffer qui contient le message reçu.&lt;br /&gt;
&lt;br /&gt;
Mais contrairement à la réception UDP, la réception Bluetooth n'est pas bloquante, ainsi on peut recevoir des messages nuls.&lt;br /&gt;
&lt;br /&gt;
Pour éviter ce problème l'application envoie un paquet Bluetooth, et reçoit juste après, et le sextoy est configuré pour envoyer un paquet UDP, juste après en avoir reçu un.&lt;br /&gt;
&lt;br /&gt;
===Application principale===&lt;br /&gt;
Afin d'être ergonomique,l'application doit pouvoir enregistrer des contacts, pour plus facilement communiquer avec eux.&lt;br /&gt;
Nous avons choisi de ne pas utiliser les contacts du téléphone, pour pouvoir avoir des contacts &amp;quot;confidentiels&amp;quot; qui ne seront que dans la base de donnée de l'application.&lt;br /&gt;
&lt;br /&gt;
Il fallait donc créer une base de donnée, nous avons donc utilisé SQLite car cette bibliothèque est utilisée par Android comme base de données embarquée.&lt;br /&gt;
La base ne comporte qu'une seule table, avec seulement les pseudos et les numéros de téléphone.&lt;br /&gt;
&lt;br /&gt;
Une fois la base crée, pour interagir avec, nous avons coder des activités:&lt;br /&gt;
&lt;br /&gt;
- Ajout de contact:&lt;br /&gt;
&lt;br /&gt;
Il faut entrer dans les champs de textes les informations pour la base de données,puis appuyer sur le bouton &amp;quot;Ajouter&amp;quot; pour créer un nouveau contact dans la base de donnée.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:AjoutContact.png]]&lt;br /&gt;
&lt;br /&gt;
-Fiche de Contact: &lt;br /&gt;
&lt;br /&gt;
Affiche le pseudo et le numéro de téléphone dans les &amp;quot;TextView&amp;quot;, et permet de : supprimer le contact en cliquant sur la croix, envoyer un SMS en cliquant sur l'icone &amp;quot;Message&amp;quot;, mais aussi commencer une communication UDP en cliquant sur le téléphone.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:FicheContact.png]]&lt;br /&gt;
&lt;br /&gt;
-Liste de contact :&lt;br /&gt;
&lt;br /&gt;
Affiche la liste de contacts, en cliquant sur un des contacts on arrive sur la page Fiche de Contact, et en cliquant sur le plus on arrive sur la page Ajout de Contact.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:ListView.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ensuite il faut ajouter la gestion de communication:&lt;br /&gt;
&lt;br /&gt;
-Les SMS :&lt;br /&gt;
&lt;br /&gt;
Il faut remplir les champs de texte et appuyer sur SMS pour envoyer un message du type&lt;br /&gt;
&lt;br /&gt;
Message&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Address Ip :&amp;quot; Addresse Ip&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Port :&amp;quot; Port&lt;br /&gt;
&lt;br /&gt;
Avec Message,Addresse Ip, et Port les champs à remplir, &amp;quot;Addresse Ip :&amp;quot; et &amp;quot;Port :&amp;quot; deux chaines de caractères.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:SMS.png]]&lt;br /&gt;
&lt;br /&gt;
-Protocole UDP : &lt;br /&gt;
&lt;br /&gt;
Quatre champs sont à remplir, cliquer sur Envoyer pour passez à l'activité de gestion Bluetooth.&lt;br /&gt;
&lt;br /&gt;
Les champs sont:&lt;br /&gt;
&lt;br /&gt;
-L'addresse Ip&lt;br /&gt;
&lt;br /&gt;
-Le port destination&lt;br /&gt;
&lt;br /&gt;
-Le port source&lt;br /&gt;
&lt;br /&gt;
-L'heure qui n'est pas utilisée, qui devait servir pour la synchronisation.&lt;br /&gt;
&lt;br /&gt;
Les valeurs des champs sont conservés pour la communication UDP à venir.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:UDP.png]]&lt;br /&gt;
&lt;br /&gt;
-Gestion Bluetooth :&lt;br /&gt;
&lt;br /&gt;
En cliquant sur &amp;quot;Paired Devices&amp;quot;, l'application affichera la liste des appareils appairés.&lt;br /&gt;
&lt;br /&gt;
Puis en cliquant un des appareils, l'application essayera de connecter avec, tout en lançant l'activité UDP avec Bluetooth.&lt;br /&gt;
&lt;br /&gt;
Si l'on souhaite ne pas utiliser de périphérique Bluetooth, il suffit de cliquer sur le bouton moins en haut à droite.&lt;br /&gt;
&lt;br /&gt;
L'activité UDP sans Bluetooth se lancera.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Bluetooth.png]]&lt;br /&gt;
&lt;br /&gt;
-Communication UDP avec Bluetooth:&lt;br /&gt;
&lt;br /&gt;
Pour lancer la communication UDP, appuyer sur le bouton Off ,il passera en mode On.&lt;br /&gt;
&lt;br /&gt;
Si vous cliquez sur le bouton On il passera en mode Off, et coupera la communication UDP.&lt;br /&gt;
&lt;br /&gt;
Le bouton envoyer, permet de forcer l'envoi d'un paquet UDP.&lt;br /&gt;
&lt;br /&gt;
Et le bouton croix coupe toutes les communications(UDP et Bluetooth), et retourne à la page précédente.&lt;br /&gt;
&lt;br /&gt;
Lorsque l'application reçoit un paquet UDP, un message est envoyé via Bluetooth au sextoys.&lt;br /&gt;
&lt;br /&gt;
Celui-ci répond automatiquement en envoyant une valeur moyennée des ses capteurs, cette valeur est récupérée et mise dans un registre.&lt;br /&gt;
&lt;br /&gt;
En parallèle, toutes les secondes un paquet UDP est envoyé et les données envoyés sont celle du registre.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Com.png]]&lt;br /&gt;
&lt;br /&gt;
-Communication UDP sans Bluetooth.&lt;br /&gt;
&lt;br /&gt;
Le bouton On/Off est utilisé comme dans l'activité &amp;quot;Communication UDP avec Bluetooth&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Les boutons de niveaux, mettent une valeur dans un même registre.&lt;br /&gt;
&lt;br /&gt;
Chaque boutons correspond à une valeur, qui correspondent avec un niveau d'excitation du sextoys.&lt;br /&gt;
&lt;br /&gt;
Ainsi toutes les secondes, un paquet UDP est envoyé avec comme donnée la valeur du registre.&lt;br /&gt;
&lt;br /&gt;
Lorsqu'un paquet UDP est reçu, la donnée reçue est mise dans un registre qui détermine l’affichage du &amp;quot;TextView&amp;quot; en bas à droite.&lt;br /&gt;
&lt;br /&gt;
Ce TextView est mis à jours en même temps qu'un paquet UDP est envoyé.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Co2.png]]&lt;br /&gt;
&lt;br /&gt;
== Rapport et codes ==&lt;br /&gt;
&lt;br /&gt;
Rapport : [[Fichier:CR_sextoy_connecte.pdf]]&lt;br /&gt;
&lt;br /&gt;
[https://archives.plil.fr/croussel/Projet_sextoy_connecte.git Codes]&lt;/div&gt;</summary>
		<author><name>Tstieven</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Fichier:ClientUdp.png&amp;diff=42860</id>
		<title>Fichier:ClientUdp.png</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Fichier:ClientUdp.png&amp;diff=42860"/>
				<updated>2017-05-20T15:47:02Z</updated>
		
		<summary type="html">&lt;p&gt;Tstieven : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Tstieven</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=IMA4_2016/2017_P14&amp;diff=42853</id>
		<title>IMA4 2016/2017 P14</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=IMA4_2016/2017_P14&amp;diff=42853"/>
				<updated>2017-05-20T15:35:41Z</updated>
		
		<summary type="html">&lt;p&gt;Tstieven : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Projet IMA4 : Sex-toy connecté =&lt;br /&gt;
&lt;br /&gt;
== Présentation du projet ==&lt;br /&gt;
&lt;br /&gt;
L'objectif de ce projet est de développer un système d'échange entre deux partenaires distants afin de rendre plus facile la vie de couple à distance.&lt;br /&gt;
&lt;br /&gt;
Pour ce faire, le dispositif sera constitué de deux sextoys connectés (un par appareil génital désiré) à leur téléphone portable respectif. Une application mobile permettra aux utilisateurs de s'échanger des données de manière sécurisé, ceci au travers d'un serveur embarqué dans le téléphone portable.&lt;br /&gt;
&lt;br /&gt;
Les données échangées pourront être l'accélération ou la température. Elles seront traitées et transmises au sextoy qui adaptera sa vitesse, son retour vibratoire ou sa position en conséquence.&lt;br /&gt;
&lt;br /&gt;
Les sextoys pourraient être composés de :&lt;br /&gt;
* Pour l'appareil masculin (dédié à la femme) :&lt;br /&gt;
:* un servomoteur ;&lt;br /&gt;
:* un vibreur ;&lt;br /&gt;
:* une sonde de température ;&lt;br /&gt;
:* un accéléromètre.&lt;br /&gt;
* Pour l'appareil féminin (dédié à l'homme) :&lt;br /&gt;
:* 4 servomoteurs (dans le but de &amp;quot;masser&amp;quot; en déplaçant le silicone);&lt;br /&gt;
:* des vibreurs ;&lt;br /&gt;
:* un accéléromètre.&lt;br /&gt;
* Pour les deux appareils :&lt;br /&gt;
:* un micro-contrôleur (Arduino mini) ;&lt;br /&gt;
:* un module de transmission / réception bluetooth afin de se connecter au téléphone ;&lt;br /&gt;
:* du silicone.&lt;br /&gt;
	&lt;br /&gt;
* L'application mobile devra :&lt;br /&gt;
:* mettre en place une communication cryptée à travers un serveur (embarqué ou bien intermédiaire ?) ;&lt;br /&gt;
:* effectuer un échange de données en bluetooth avec le sextoy connecté.&lt;br /&gt;
&lt;br /&gt;
* L'application mobile pourra :&lt;br /&gt;
:* utiliser la vidéo-conférence ;&lt;br /&gt;
:* enregistrer les meilleurs moments et enventuellement pouvoir les partager ;&lt;br /&gt;
:* effectuer une recherche de partenaire aléatoire.&lt;br /&gt;
&lt;br /&gt;
* S'il nous reste du temps, il peut être envisageable de :&lt;br /&gt;
:* mettre en place un réseau social interne à Polytech.&lt;br /&gt;
&lt;br /&gt;
== Liste des tâches ==&lt;br /&gt;
* Conception de l'appareil masculin (Cédric)&lt;br /&gt;
:* mettre en place le bus I2C avec les différents capteurs ;&lt;br /&gt;
:* création d'un PCB au format gerber ;&lt;br /&gt;
:* création d'un prototype.&lt;br /&gt;
&lt;br /&gt;
* Conception de l'appareil féminin (Cédric)&lt;br /&gt;
:* mettre en place le bus I2C ;&lt;br /&gt;
:* traitement des données afin d'en déduire la position et l'entrain de l'utilisateur ;&lt;br /&gt;
:* création d'un PCB ;&lt;br /&gt;
:* création d'un prototype.&lt;br /&gt;
&lt;br /&gt;
* Communication bluetooth (Cédric et Thomas)&lt;br /&gt;
:* étudier l'émission/réception vue de l'arduino ;&lt;br /&gt;
:* étudier l'émission/réception vue du téléphone ;&lt;br /&gt;
:* mise en place du protocole ;&lt;br /&gt;
:* test de portée.&lt;br /&gt;
&lt;br /&gt;
* Développement mobile (Thomas)&lt;br /&gt;
:* déterminer la meilleure approche : utilisation d'un serveur intermédiaire ou bien mise en place d'un &amp;quot;client-serveur&amp;quot; dans l'application mobile ;&lt;br /&gt;
:* mettre en place le choix retenu ;&lt;br /&gt;
:* tester dans un premier temps une transmission de texte ;&lt;br /&gt;
:* programmer le traitement de données reçues par bluetooth ;&lt;br /&gt;
:* rajouter un côté esthétique à l'application.&lt;br /&gt;
&lt;br /&gt;
==Feuille d'heures==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Tâche !! Prélude !! Heures S1 !! Heures S2 !! Heures S3 !! Heures S4 !! Heures vacances !! Heures S5 !! Heures S6 !! Heures S7 !! Heures S8 !! Heures S9 !! Heures S10 !! Heures vacances et après!! Total&lt;br /&gt;
|-&lt;br /&gt;
| Définition cahier des charges &lt;br /&gt;
| 2H&lt;br /&gt;
| 2H&lt;br /&gt;
| 1H&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 5H&lt;br /&gt;
|-&lt;br /&gt;
| Dimensionnement et établissement de la liste de matériel&lt;br /&gt;
| &lt;br /&gt;
| 3H&lt;br /&gt;
| 4H&lt;br /&gt;
|&lt;br /&gt;
| 4H&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 11H&lt;br /&gt;
|-&lt;br /&gt;
| Établissement de la liste et de la répartition des tâches&lt;br /&gt;
| 1H&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 1H&lt;br /&gt;
|-&lt;br /&gt;
| Appareil masculin : programmation&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 1H&lt;br /&gt;
| 2H&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 6H&lt;br /&gt;
| 9H &lt;br /&gt;
|-&lt;br /&gt;
| Appareil masculin : étude des datasheets&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 1H&lt;br /&gt;
| 1H&lt;br /&gt;
|&lt;br /&gt;
| 4H&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| 1H&lt;br /&gt;
|&lt;br /&gt;
| 7H&lt;br /&gt;
|-&lt;br /&gt;
| Appareil masculin : PCB&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 4H&lt;br /&gt;
| 4H&lt;br /&gt;
| 6H&lt;br /&gt;
| 30H&lt;br /&gt;
| 44H&lt;br /&gt;
|-&lt;br /&gt;
| Appareil masculin : 3D&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| 6H&lt;br /&gt;
| 6H&lt;br /&gt;
|-&lt;br /&gt;
| Conception de l'appareil féminin&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 2H&lt;br /&gt;
| 1H&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 3H&lt;br /&gt;
|-&lt;br /&gt;
| Liaison bluetooth (embarqué)&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 3H&lt;br /&gt;
| 1H&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 8H&lt;br /&gt;
| 12H&lt;br /&gt;
|-&lt;br /&gt;
| Liaison bluetooth (téléphone)&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 15H&lt;br /&gt;
| 15H&lt;br /&gt;
|-&lt;br /&gt;
| Recherche et discussion autour de la meilleure approche de communication&lt;br /&gt;
| 2H&lt;br /&gt;
| 2H&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 4H&lt;br /&gt;
|-&lt;br /&gt;
| Synchronisation temporelle des téléphones (par sms)&lt;br /&gt;
| &lt;br /&gt;
| 2H&lt;br /&gt;
| 4H&lt;br /&gt;
| 6H&lt;br /&gt;
| 8H&lt;br /&gt;
| 6H&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 26H&lt;br /&gt;
|-&lt;br /&gt;
| Transmission de paquets UDP&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 4H&lt;br /&gt;
| 4H&lt;br /&gt;
| 4H&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 6H&lt;br /&gt;
| 18H&lt;br /&gt;
|-&lt;br /&gt;
| Streaming video(UDP)&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 4H&lt;br /&gt;
| 4H&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 8H&lt;br /&gt;
|-&lt;br /&gt;
| Application et bases de données&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 6H&lt;br /&gt;
| 20H&lt;br /&gt;
| 26H&lt;br /&gt;
|-&lt;br /&gt;
| Total&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 195H&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Conception des sextoys==&lt;br /&gt;
===Introduction===&lt;br /&gt;
&lt;br /&gt;
La conception de sextoys doit respecter différents règles, notamment sanitaires. C'est pourquoi nous nous sommes intéressés à l'utilisation de silicone pour ce projet. Nous avons notamment rencontré un ingénieur compétant dans ce domaine afin de nous aiguiller sur cette éventuelle conception.&lt;br /&gt;
&lt;br /&gt;
La conception passera également par une conception 3D que nous effectuerons à l'aide d'imprimantes 3D au fabricarium de Polytech Lille.&lt;br /&gt;
&lt;br /&gt;
Enfin, les prototypes seront embarqués de cartes électroniques (aussi appelés PCB) que nous constituerons.&lt;br /&gt;
&lt;br /&gt;
===Choix du silicone, rencontre avec Mario Sanz===&lt;br /&gt;
&lt;br /&gt;
Le projet nécessite l'utilisation d'une matière souple et non irritante, c'est pourquoi nous avons choisi de nous tourner vers l'utilisation du silicone. Afin de choisir au mieux le produit correspondant à nos besoins, nous avons rencontré Mario Sanz, ingénieur à l'INRIA, qui travail régulièrement avec du silicone.&lt;br /&gt;
&lt;br /&gt;
Ce dernier nous a expliqué les différents points importants sur lesquels nous baser afin de choisir au mieux un produit en accord avec le projet. Ne serait-ce que pour le choix de la dureté, il existe une échelle propre au silicone (&amp;quot;Shore hardness scale&amp;quot;), nous pensions au départ rechercher un silicone le plus mou possible, cependant, il faut savoir que le plus le silicone est mou, plus il a tendance à être &amp;quot;collant&amp;quot;. Finalement, après discutions, un shore de 40A (correspondant à la dureté d'une gomme) suffisamment mince fera l'affaire pour la conception des prototypes.&lt;br /&gt;
&lt;br /&gt;
Il nous a également expliqué que le silicone peut être travaillé à l'aide d'additifs et sous cloche à vide afin d'améliorer le moulage, l'absence de &amp;quot;bulles&amp;quot; sur la surface de la pièce et la souplesse. Nous pouvons cependant travailler sans tout cela car il n'est pas spécialement important, pour notre projet, de rechercher des propriétés physiques homogènes dans tout le sextoy.&lt;br /&gt;
&lt;br /&gt;
Pour ce qui est de la création de moules, nous pourrons les effectuer via imprimante 3D. Il existe un bon nombre de tutoriels sur internet pour s'y référer en cas de soucis.&lt;br /&gt;
&lt;br /&gt;
===Impression 3D===&lt;br /&gt;
&lt;br /&gt;
Pour la création d'objets en 3D, de nombreux outils sont disponibles. Nous avons décidé d'utiliser Tinkercad, un outil qui s'intègre directement au navigateur internet utilisé. &lt;br /&gt;
&lt;br /&gt;
L'avantage d'un tel outil est sa grande communauté qui permet un accès simple et rapide à une multitudes de projets dont on pourrait s'inspirer pour générer nos pièces.&lt;br /&gt;
&lt;br /&gt;
====Création des moules====&lt;br /&gt;
&lt;br /&gt;
A l'aide d'une imprimante 3D, nous pouvons concevoir des moules afin de créer des pièces en silicone. Il s'agit de la manière la plus rapide et accessible pour notre projet.&lt;br /&gt;
&lt;br /&gt;
Cette méthode comporte des désavantages, dont le principal est la présence d'imperfection et de non homogénéité dans les pièces réalisées. Ceci n'a pas de grande importance dans la mesure où nous souhaitons du qualitatif.&lt;br /&gt;
&lt;br /&gt;
====Création d'un prototype====&lt;br /&gt;
&lt;br /&gt;
=====Pénis=====&lt;br /&gt;
&lt;br /&gt;
Afin de visualiser qualitativement la forme et le passage des câbles, un prototype imprimé au Fabricarium de Polytech Lille a été réalisé. &lt;br /&gt;
&lt;br /&gt;
Ce prototype se divise en 3 pièces : un boîtier (pour y loger le PCB), un cylindre (afin de reproduire la forme désirée) et un &amp;quot;tête&amp;quot; qui devait à l'origine être un moule en silicone (pour y loger le PCB du capteur de température).&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Sextoy_penis.png|400px|thumb|center|Prototype 3D pénis]]&lt;br /&gt;
&lt;br /&gt;
===Conception des PCB===&lt;br /&gt;
&lt;br /&gt;
Afin de diminuer un maximum la taille des cartes electroniques, nous utilisons principalement des composants CMS. &lt;br /&gt;
&lt;br /&gt;
La conception des cartes peut-être effectué à l'aide de logicels de CAO tels qu'Altium ou Eagle. Dans notre cas, nous avons utilisé Eagle. &lt;br /&gt;
&lt;br /&gt;
Ce travail consiste à créer une librairie regroupant l'intégralité des composants nécessaires et, ensuite, de  créer un schéma du circuit. Une fois le schéma terminé, il ne restera plus qu'à faire le routage et exporter les fichiers au format &amp;quot;Gerber&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Pour ce projet, nous aurons besoin de deux cartes, une par prototype. Chaque carte embarquera des composants similaires, c'est pourquoi nous nous contenterons d'abord d'un seul PCB pour effectuer des tests. Si ces derniers sont concluants, nous pourrons graver le second.&lt;br /&gt;
&lt;br /&gt;
====PCB du pénis====&lt;br /&gt;
&lt;br /&gt;
Le premier PCB imprimé et soudé est celui du pénis. Une première carte avait été imprimé regroupant sur cette dernière : un support pour l'arduino, un accéléromètre, un module bluetooth. &lt;br /&gt;
&lt;br /&gt;
[[Fichier:PCB_penis_VB.png|400px|thumb|center|PCB v1.0]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous avons expérimentés des problèmes dûs aux dimensions de l'accéléromètre, l'utilisation d'un boîtier CMS de type TDFN10 2x2 était optimiste pour la réalisation du projet, compte tenu du matériel à disposition.&lt;br /&gt;
&lt;br /&gt;
C'est pourquoi une seconde carte a été gravée, cette fois sans l'accéléromètre.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:PCB_penis_VF.png|400px|thumb|center|PCB v2.0]]&lt;br /&gt;
&lt;br /&gt;
[[Fichier:PCB_VF.png|400px|thumb|center|PCB v2.0 schema]]&lt;br /&gt;
&lt;br /&gt;
Ce prototype est sensé embarquer un capteur de température que nous avons décidé de mettre sur un PCB à part. Cette carte avait pour but d'être coulé dans le silicone, afin de mesurer la température au plus près de la zone intéressée.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:TEMPERATURE_PCB_VF.png|400px|thumb|center|PCB temperature]]&lt;br /&gt;
&lt;br /&gt;
[[Fichier:TEMPERATURE_VF.png|400px|thumb|center|PCB temperature schema]]&lt;br /&gt;
&lt;br /&gt;
====PCB du vagin====&lt;br /&gt;
&lt;br /&gt;
Compte tenu des soucis rencontrés avec l'accéléromètre, la carte sera gravée afin de pouvoir y plugger un accéléromètre analogique en traversant. Le but étant d'avoir un prototype fonctionnel d'ici la fin du projet.&lt;br /&gt;
&lt;br /&gt;
Nous avons également eu des problèmes avec le module bluetooth utilisé, ce dernier ne pouvant être reconfiguré manuellement par minicom, nous utiliserons le bluetooth HC-05 utilisé pour les essais de code. De même que pour l'accéléromètre, nous prévoirons un endroit pour le plugger sur la carte.&lt;br /&gt;
&lt;br /&gt;
''image PCB vagin''&lt;br /&gt;
&lt;br /&gt;
''Reste à graver le PCB du vagin''&lt;br /&gt;
&lt;br /&gt;
==Gestion des composants==&lt;br /&gt;
===Introduction===&lt;br /&gt;
&lt;br /&gt;
Notre projet implique l'utilisation de capteurs, de servomoteurs et de buzzers, constituant chacun une partie de la programmation embarquée.&lt;br /&gt;
&lt;br /&gt;
Pour cette programmation, nous avons décidé d'utiliser AVR-gcc et ainsi coder les arduinos en C.&lt;br /&gt;
&lt;br /&gt;
Les capteurs utilisés utilisent un protocole de communication IIC (ou I²C, I2C), ce protocole de multiples avantages que nous expliciterons par la suite. Cependant, comme un des capteurs (l'accéléromètre) prévus initialement nous a causé beaucoup de soucis, nous expliciterons également la mesure à l'aide de capteurs analogiques. Ces différents capteurs nous permettront de mesurer l'excitation d'un utilisateur.&lt;br /&gt;
&lt;br /&gt;
Une fois l'excitation mesurée, il faut induire une réponse &amp;quot;physique&amp;quot;. Pour ce faire, nous utilisons d'une part des servomoteurs dans le but de produire une sensation de massage.&lt;br /&gt;
&lt;br /&gt;
D'autre part, nous utilisons également des buzzers.&lt;br /&gt;
&lt;br /&gt;
===Utilisation des capteurs===&lt;br /&gt;
&lt;br /&gt;
====Capteurs par IIC====&lt;br /&gt;
&lt;br /&gt;
Le choix de l'IIC n'était pas anodins. L'IIC permet, pour un bus de seulement deux fils, d'utiliser un nombre important de capteurs. Ainsi, si nous décidions au cours du projet de rajouter tel ou tel capteurs, nous n'avions qu'à les greffer à ce bus IIC. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Capteurs analogique====&lt;br /&gt;
&lt;br /&gt;
Comme dit précédemment, nous avons abandonné l'utilisation de l’accéléromètre IIC prévu initialement dans le vagin car nous n'avons pas réussi à le souder sur les cartes du pénis. Nous avons donc utilisé ce qui était à notre disposition à savoir un capteur analogique.&lt;br /&gt;
&lt;br /&gt;
La mesure analogique sous AVR se fait simplement via l'utilisation de la fonction ad_sample(numéro de la broche analogique lue). Elle renvoie directement une valeur entre 0 et 255 correspondant à une conversion analogique-numérique de la tension sur la broche lue du capteur.&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
===Contrôle des servomoteurs===&lt;br /&gt;
&lt;br /&gt;
Un servomoteur se contrôle à l'aide d'un signal PWM (Pulse Width Modulation). Ce signal consiste à modifier la largeur de l'impulsion en fonction de la consigne désirée. &lt;br /&gt;
&lt;br /&gt;
La génération de PWM via microcontrôleur se fait à l'aide de TIMERS. Il faut savoir qu'il existe une priorité dans les interruptions, pour un TIMER_X donné, plus le X est proche de 0, plus l'interruption sera prioritaire. Nos signaux PWM se doivent d'être le plus en accord avec nos consignes, c'est pourquoi nous avons choisi d'utiliser les TIMER les plus prioritaires pour les générer. (TIMER0 et TIMER1)&lt;br /&gt;
&lt;br /&gt;
====PWM sur un seul servomoteur====&lt;br /&gt;
&lt;br /&gt;
Notre première manière de procéder consistait à générer la PWM nous même à l'aide du vecteur d'interruption d'un TIMER. La méthode consistait à compter de 0 à 255 en permanence. Lorsque le compteur était inférieur à la consigne, on passait une sortie à l'état haut, sinon elle restait à l'état bas. &lt;br /&gt;
&lt;br /&gt;
Cette méthode simulait plutôt bien le signal PWM et avait pour avantage d'être utilisable pour n'importe quelle de l'arduino. Cependant, cette méthode a le gros désavantage d'être sensible à l'utilisation d'autres interruptions, rendant le TIMER imprécis.&lt;br /&gt;
&lt;br /&gt;
Or, notre projet utilisera d'autres procédures d'interruption. Nous avons donc décidé d'utiliser une méthode plus simple mais nous restreignant sur le choix de nos sorties.&lt;br /&gt;
&lt;br /&gt;
En effet, un atmega possède des registres que l'on peut configurer pour générer des signaux PWM sur des broches spécifiques.&lt;br /&gt;
&lt;br /&gt;
Ainsi, en configurant le registre TCCR0A à 0x81 et TCCR0B à 0x05, on se place en mode PWM non inversée à fréquence élevée. En résumé, cette configuration nous permet de faire varier les signaux PWM en introduisant une consigne dans le registre OCR0A.&lt;br /&gt;
&lt;br /&gt;
Ainsi, nous pouvons donc contrôler le moteur simplement en changeant la consigne dans OCR0A.&lt;br /&gt;
&lt;br /&gt;
====Tests====&lt;br /&gt;
&lt;br /&gt;
Dans un premier lieu, les moteurs servomoteurs ne recevaient pas les consignes. Nous pensions que le fait que la PWM soit en 3V3 était l'origine du problème. Nous avons donc fait le montage à l'aide d'un transistor NPN monté en saturé. Le problème n'a pas été résolu. &lt;br /&gt;
&lt;br /&gt;
Finalement, le soucis viendrait du fait que les tests étaient effectués avec des valeurs du registre OCR0A à 0 (pwm nulle). Nous n'aurons donc pas besoin d'un montage à transistor pour le PCB.&lt;br /&gt;
&lt;br /&gt;
Le but des servomoteurs est d'effectuer un semblant de massage, nous allons donc modifier le code afin d'effectuer la tâche de manière périodique via l'utilisation d'un TIMER.&lt;br /&gt;
&lt;br /&gt;
====Gestion d'un ensemble de servomoteurs====&lt;br /&gt;
&lt;br /&gt;
Dans le vagin, nous utilisons 4 servomoteurs afin de masser l'utilisateur. Nous avons trouvé intéressant de diviser ces moteurs en deux couples afin d'intensifier ou non ce massage en fonction des seuils d'excitation détectés par les capteurs.&lt;br /&gt;
&lt;br /&gt;
Pour ce faire, nous aurons besoin de deux signaux PWM différents, donc de l'utilisation de deux timers configurés en PWM. &lt;br /&gt;
&lt;br /&gt;
Comme dit en introduction de cette section, nous nous imposons l'utilisation du TIMER1 pour cette deuxième PWM. Il existe une différence dans la configuration de cette dernière dans la mesure où le signal peut recevoir des consignes allant de 8 à 16bits en fonction de la configuration. Afin de simplifier les choses, nous avons configuré cette dernière sur 8bits pour lui envoyer les mêmes consignes que pour le TIMER0.&lt;br /&gt;
&lt;br /&gt;
====Tests====&lt;br /&gt;
&lt;br /&gt;
Avant tout, nous devions vérifier que la consigne avait une intensité suffisante pour être envoyée sur deux servomoteurs en même temps. Ce qui était le cas.&lt;br /&gt;
&lt;br /&gt;
Ensuite, nous avons testés des changements de consignes plus ou moins rapides afin de déterminer ce qui répondrait le mieux à nos attentes.&lt;br /&gt;
&lt;br /&gt;
Les tests concluants, nous pouvions passer à la suite.&lt;br /&gt;
&lt;br /&gt;
===Utilisation des buzzers===&lt;br /&gt;
&lt;br /&gt;
En fonction du niveau d'excitation, nous ferons vibrer un ou deux buzzers. Pour ce faire, nous avons fait le choix de souder leur broche GND au GND de nos cartes et ainsi souder leur potentiel VCC à une broche de l'arduino. Ainsi, si nous plaçons la broche à l'état bas, le tension dans le buzzer est nulle et si nous passons la broche à l'état haut, la tension aux bornes du buzzers devient 3.3V et il vibre.&lt;br /&gt;
&lt;br /&gt;
Pour ce faire, nous utilisons simplement deux broches, ici PXX et PXX, que nous avons initialisés en tant que sorties en mettant à un leur bit correspondant dans le registre DDRX. Ainsi, il ne reste plus qu'à commander la valeur haute ou basse de ces broches en mettant à 1 ou 0 leur bit dans le registre PORTX.&lt;br /&gt;
&lt;br /&gt;
====Tests====&lt;br /&gt;
&lt;br /&gt;
Ceci a été testé sur breadboard et était fonctionnel. Cependant, une chose à quoi nous n'avions pas pensé était que lorsque nous les avons soudés sur le PCB, nous aurions dû utiliser des câbles plus épais, car comme nous n'avions pas de prototype sur quoi coller les buzzers, l'un des buzzers s'est arraché de la carte en vibrant.&lt;br /&gt;
&lt;br /&gt;
===Résumé===&lt;br /&gt;
&lt;br /&gt;
==Gestion de la communication bluetooth==&lt;br /&gt;
===Introduction===&lt;br /&gt;
Dans le cadre de notre projet, la communication entre le sextoy et le téléphone se fera à faible portée. C'est pourquoi nous avons considéré comme intéressante l'utilisation de la technologie bluetooth.&lt;br /&gt;
&lt;br /&gt;
La première partie consiste à coder une librairie au niveau de l'arduino. Cette librairie, codée en C, consiste simplement en une lecture / écriture via les broches RX/TX de l'arduino et du module bluetooth. &lt;br /&gt;
&lt;br /&gt;
La seconde partie conssite à coder la partie application mobile qui communiquera avec la arduino.&lt;br /&gt;
&lt;br /&gt;
Une fois que cette transmission sera mise en place, il ne reste plus qu'à expliciter le protocole des paquets transmis.&lt;br /&gt;
&lt;br /&gt;
===Arduino===&lt;br /&gt;
&lt;br /&gt;
Afin de communiquer à travers le module bluetooth, il faut relier la broche RX de l'arduino à celle TX du module bluetooth et inversement. Pour tester nos codes, nous avons utilisé un module bluetooth HC-06 et l'application [https://play.google.com/store/apps/details?id=Qwerty.BluetoothTerminal&amp;amp;hl=fr| Bluetooth Terminal]. &lt;br /&gt;
&lt;br /&gt;
Dans la mesure où l'arduino devra traiter l'arrivée asynchrone de messages tout en effectuant le traitement des capteurs, il est intéressant d'effectuer des lectures à l'aide d'interruptions. Pour cela, nous utilisons le vecteur d'interruption USART_RXC_vect qui déclenchera la fonction de lecture d'un paquet à chaque fois qu'un message est reçu.&lt;br /&gt;
&lt;br /&gt;
''Actuellement, la librarie est fonctionnelle, il ne reste plus qu'à faire l'utilisation par interruption.''&lt;br /&gt;
&lt;br /&gt;
===Application mobile===&lt;br /&gt;
===Protocole de transmission===&lt;br /&gt;
===Module bluetooth utilisé===&lt;br /&gt;
&lt;br /&gt;
Le module bluetooth embarqué sur le PCB est un module reprogrammable. Ainsi il était nécessaire de connaître la configuration par défaut du composant, dans le but de savoir s'il fallait ou non prévoir un pcb de reconfiguration.&lt;br /&gt;
&lt;br /&gt;
Le CYBLE-012012 est configuré par défaut avec le firmware &amp;quot;EZ-Serial BLE Firmware&amp;quot;. La configuration par défaut de ce firmware est la suivante : &lt;br /&gt;
&lt;br /&gt;
* 115200 baud, 8bits de donnée, pas de bit de parité, 1bit de stop&lt;br /&gt;
* &amp;quot;UART flow control&amp;quot; désactivé&lt;br /&gt;
* firmware activé en mode &amp;quot;auto-start&amp;quot;, qui correspond à une recherche automatique de connection bluetooth et de redirection RX-TX en cas de connection&lt;br /&gt;
&lt;br /&gt;
Ces [http://www.cypress.com/file/285326/download| informations] sont importantes car, si elles sont vraiment respectées, nous n'auront pas à créer notre propre kit de développement, ce qui est un gain de temps considérable.&lt;br /&gt;
&lt;br /&gt;
Qui plus est, l'utilisation d'une fonction &amp;quot;auto-start&amp;quot; est en adéquation avec le module bluetooth HC-05 utilisé pour les tests. Nous pouvons donc commencer la programmation mobile du bluetooth en parallèle de l'impression des pcb. Et, dans le cas où les pcb seraient disfonctionnels, nous pourront quand meme envisager un prototype sur breadboard.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Test====&lt;br /&gt;
&lt;br /&gt;
Après avoir alimenté la carte, nous n'avons pas pu nous connecter au module bluetooth, ce dernier n'étant même pas visible dans les appareils alentours. &lt;br /&gt;
&lt;br /&gt;
Nous avons alors vérifié si la carte était correctement alimentée. Pour ce faire, nous avons mesuré différents points de tensions sensé être mis par défaut en PULL-DOWN ou PULL-UP à des niveaux de tensions d'1.7V. Ces niveaux étaient respectés. Le problème n'est donc pas d'ordre électronique. &lt;br /&gt;
&lt;br /&gt;
Par la suite, nous avons voulu vérifier la communication du module. Ce dernier, en déclenchant l'auto start est sensé émettre (en suivant le protocole UART rappelé précédemment) un message START. Nous avons donc inspecté ceci en utilisant minicom. En effet, minicom reçoit un message, mais ne sait pas le déchiffré. Qui plus est, impossible d'envoyer un message au module afin de le reprogrammer (de manière similaire à un XBee).&lt;br /&gt;
&lt;br /&gt;
Devant ces soucis, nous décidons donc d'abandonner ce module bluetooth et de poursuivre avec celui utilisé pour les essais de programmation, le HC-05.&lt;br /&gt;
&lt;br /&gt;
==Conception de l'application Android==&lt;br /&gt;
===Envoie et réception de SMS===&lt;br /&gt;
Afin de ne pas utiliser de serveur, les deux appareils Android doivent synchroniser l'envoi de paquet UDP, pour cela nous avons voulu utiliser des SMS.&lt;br /&gt;
Les SMS permettent d'envoyer des informations, comme les adresses IP, les ports utilisés, l'heure à laquelle les deux téléphones vont envoyer leur premier paquet UDP.&lt;br /&gt;
&lt;br /&gt;
Dans un premier temps nous avons créer une application pour envoyer les SMS:&lt;br /&gt;
&lt;br /&gt;
L'application était très simple, l'envoi de SMS se faisait en deux lignes&lt;br /&gt;
  // initialisation d'une variable sms gérant les sms&lt;br /&gt;
  SmsManager sms = SmsManager.getDefault() ;&lt;br /&gt;
  // envoie un sms comportant le texte de la variable message de type String au numéro contenu dans la variable num de type String&lt;br /&gt;
  sms.sendTextMessage(num, null, message, null, null);&lt;br /&gt;
&lt;br /&gt;
Dans un deuxième temps il fallait recevoir un SMS, ou plutôt savoir qu'un nouvel SMS avait été reçu :&lt;br /&gt;
&lt;br /&gt;
Pour cela il fallait utiliser un thread qui était appelé par interruption avec la réception d'un SMS comme vecteur d’interruption.&lt;br /&gt;
Ce thread effectuait ce qui était demandé dans sa fonction onReceive(), comme par exemple lire les informations contenues dans le SMS:&lt;br /&gt;
  public class IncomingSms extends BroadcastReceiver {&lt;br /&gt;
     final SmsManager sms = SmsManager.getDefault();&lt;br /&gt;
     public void onReceive(Context context, Intent intent) {&lt;br /&gt;
       //Ce qui doit etre fait lors de la reception de SMS&lt;br /&gt;
     }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Malheureusement ce programme ne marchait pas pendant des semaines, malgré de nombreuses modifications et de nombreux essais. Et le problème semblait être ma carte SIM, car en changeant de SIM, tous les programmes contenant ce code fonctionnaient parfaitement.&lt;br /&gt;
&lt;br /&gt;
===Protocole UDP===&lt;br /&gt;
Afin d'effectuer un échange de données entre les deux utilisateurs, et essayer de faire une vidéo-conférence, nous avons choisi d'utiliser le protocole UDP.&lt;br /&gt;
&lt;br /&gt;
Une première application permettait de tester l'envoi de paquet UDP, pour cela un serveur UDP a été utilisé sur un PC.&lt;br /&gt;
Le serveur attendait un message et l'affichait quand il le recevait.&lt;br /&gt;
&lt;br /&gt;
Une fois que tout fonctionnait comme il le fallait, nous avons pu créer une application qui comportait l'envoi et la réception de paquet.&lt;br /&gt;
En mettant l'application sur deux téléphones on pouvait tester si tout fonctionnait.&lt;br /&gt;
Les tests ont seulement été effectué sur un réseau local, on ne sait pas pour le moment si des box internet pourraient empêcher la transmission.&lt;br /&gt;
L'application est composé de un thread d'écoute, un thread d'envoi et d'un thread principal gérant l'affichage et appelant le thread d'envoi lorsque que le bouton de l'application est appuyé.&lt;br /&gt;
&lt;br /&gt;
===Communication Bluetooth===&lt;br /&gt;
Pour gérer la communication entre le téléphone et un sextoys, il faut utiliser une communication Bluetooth.&lt;br /&gt;
&lt;br /&gt;
Dans un premier temps il faut se connecter avec l'appareil:&lt;br /&gt;
 &lt;br /&gt;
 new ConnectBT().execute();&lt;br /&gt;
&lt;br /&gt;
Avec ConnectBT une classe trouvée sur internet.&lt;br /&gt;
&lt;br /&gt;
Ensuite il faut communiquer :&lt;br /&gt;
&lt;br /&gt;
Pour envoyer un message on utilise: &lt;br /&gt;
&lt;br /&gt;
 btSocket.getOutputStream().write(message);&lt;br /&gt;
&lt;br /&gt;
Avec btSocket un socket Bluetooth ayant été connecté avec le sextoy dans la classe ConnectBT.&lt;br /&gt;
&lt;br /&gt;
Ensuite il faut recevoir :&lt;br /&gt;
&lt;br /&gt;
 btSocket.getInputStream().read(mmBuffer);&lt;br /&gt;
&lt;br /&gt;
Avec mmBuffer qui contient le message reçu.&lt;br /&gt;
&lt;br /&gt;
Mais contrairement à la réception UDP, la réception Bluetooth n'est pas bloquante, ainsi on peut recevoir des messages nuls.&lt;br /&gt;
&lt;br /&gt;
Pour éviter ce problème l'application envoie un paquet Bluetooth, et reçoit juste après, et le sextoy est configuré pour envoyer un paquet UDP, juste après en avoir reçu un.&lt;br /&gt;
&lt;br /&gt;
===Application principale===&lt;br /&gt;
Afin d'être ergonomique,l'application doit pouvoir enregistrer des contacts, pour plus facilement communiquer avec eux.&lt;br /&gt;
Nous avons choisi de ne pas utiliser les contacts du téléphone, pour pouvoir avoir des contacts &amp;quot;confidentiels&amp;quot; qui ne seront que dans la base de donnée de l'application.&lt;br /&gt;
&lt;br /&gt;
Il fallait donc créer une base de donnée, nous avons donc utilisé SQLite car cette bibliothèque est utilisée par Android comme base de données embarquée.&lt;br /&gt;
La base ne comporte qu'une seule table, avec seulement les pseudos et les numéros de téléphone.&lt;br /&gt;
&lt;br /&gt;
Une fois la base crée, pour interagir avec, nous avons coder des activités:&lt;br /&gt;
&lt;br /&gt;
- Ajout de contact:&lt;br /&gt;
&lt;br /&gt;
Il faut entrer dans les champs de textes les informations pour la base de données,puis appuyer sur le bouton &amp;quot;Ajouter&amp;quot; pour créer un nouveau contact dans la base de donnée.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:AjoutContact.png]]&lt;br /&gt;
&lt;br /&gt;
-Fiche de Contact: &lt;br /&gt;
&lt;br /&gt;
Affiche le pseudo et le numéro de téléphone dans les &amp;quot;TextView&amp;quot;, et permet de : supprimer le contact en cliquant sur la croix, envoyer un SMS en cliquant sur l'icone &amp;quot;Message&amp;quot;, mais aussi commencer une communication UDP en cliquant sur le téléphone.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:FicheContact.png]]&lt;br /&gt;
&lt;br /&gt;
-Liste de contact :&lt;br /&gt;
&lt;br /&gt;
Affiche la liste de contacts, en cliquant sur un des contacts on arrive sur la page Fiche de Contact, et en cliquant sur le plus on arrive sur la page Ajout de Contact.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:ListView.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ensuite il faut ajouter la gestion de communication:&lt;br /&gt;
&lt;br /&gt;
-Les SMS :&lt;br /&gt;
&lt;br /&gt;
Il faut remplir les champs de texte et appuyer sur SMS pour envoyer un message du type&lt;br /&gt;
&lt;br /&gt;
Message&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Address Ip :&amp;quot; Addresse Ip&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Port :&amp;quot; Port&lt;br /&gt;
&lt;br /&gt;
Avec Message,Addresse Ip, et Port les champs à remplir, &amp;quot;Addresse Ip :&amp;quot; et &amp;quot;Port :&amp;quot; deux chaines de caractères.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:SMS.png]]&lt;br /&gt;
&lt;br /&gt;
-Protocole UDP : &lt;br /&gt;
&lt;br /&gt;
Quatre champs sont à remplir, cliquer sur Envoyer pour passez à l'activité de gestion Bluetooth.&lt;br /&gt;
&lt;br /&gt;
Les champs sont:&lt;br /&gt;
&lt;br /&gt;
-L'addresse Ip&lt;br /&gt;
&lt;br /&gt;
-Le port destination&lt;br /&gt;
&lt;br /&gt;
-Le port source&lt;br /&gt;
&lt;br /&gt;
-L'heure qui n'est pas utilisée, qui devait servir pour la synchronisation.&lt;br /&gt;
&lt;br /&gt;
Les valeurs des champs sont conservés pour la communication UDP à venir.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:UDP.png]]&lt;br /&gt;
&lt;br /&gt;
-Gestion Bluetooth :&lt;br /&gt;
&lt;br /&gt;
En cliquant sur &amp;quot;Paired Devices&amp;quot;, l'application affichera la liste des appareils appairés.&lt;br /&gt;
&lt;br /&gt;
Puis en cliquant un des appareils, l'application essayera de connecter avec, tout en lançant l'activité UDP avec Bluetooth.&lt;br /&gt;
&lt;br /&gt;
Si l'on souhaite ne pas utiliser de périphérique Bluetooth, il suffit de cliquer sur le bouton moins en haut à droite.&lt;br /&gt;
&lt;br /&gt;
L'activité UDP sans Bluetooth se lancera.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Bluetooth.png]]&lt;br /&gt;
&lt;br /&gt;
-Communication UDP avec Bluetooth:&lt;br /&gt;
&lt;br /&gt;
Pour lancer la communication UDP, appuyer sur le bouton Off ,il passera en mode On.&lt;br /&gt;
&lt;br /&gt;
Si vous cliquez sur le bouton On il passera en mode Off, et coupera la communication UDP.&lt;br /&gt;
&lt;br /&gt;
Le bouton envoyer, permet de forcer l'envoi d'un paquet UDP.&lt;br /&gt;
&lt;br /&gt;
Et le bouton croix coupe toutes les communications(UDP et Bluetooth), et retourne à la page précédente.&lt;br /&gt;
&lt;br /&gt;
Lorsque l'application reçoit un paquet UDP, un message est envoyé via Bluetooth au sextoys.&lt;br /&gt;
&lt;br /&gt;
Celui-ci répond automatiquement en envoyant une valeur moyennée des ses capteurs, cette valeur est récupérée et mise dans un registre.&lt;br /&gt;
&lt;br /&gt;
En parallèle, toutes les secondes un paquet UDP est envoyé et les données envoyés sont celle du registre.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Com.png]]&lt;br /&gt;
&lt;br /&gt;
-Communication UDP sans Bluetooth.&lt;br /&gt;
&lt;br /&gt;
Le bouton On/Off est utilisé comme dans l'activité &amp;quot;Communication UDP avec Bluetooth&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Les boutons de niveaux, mettent une valeur dans un même registre.&lt;br /&gt;
&lt;br /&gt;
Chaque boutons correspond à une valeur, qui correspondent avec un niveau d'excitation du sextoys.&lt;br /&gt;
&lt;br /&gt;
Ainsi toutes les secondes, un paquet UDP est envoyé avec comme donnée la valeur du registre.&lt;br /&gt;
&lt;br /&gt;
Lorsqu'un paquet UDP est reçu, la donnée reçue est mise dans un registre qui détermine l’affichage du &amp;quot;TextView&amp;quot; en bas à droite.&lt;br /&gt;
&lt;br /&gt;
Ce TextView est mis à jours en même temps qu'un paquet UDP est envoyé.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Co2.png]]&lt;br /&gt;
&lt;br /&gt;
== Rapport et codes ==&lt;br /&gt;
&lt;br /&gt;
Rapport : [[Fichier:CR_sextoy_connecte.pdf]]&lt;br /&gt;
&lt;br /&gt;
[https://archives.plil.fr/croussel/Projet_sextoy_connecte.git Codes]&lt;/div&gt;</summary>
		<author><name>Tstieven</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=IMA4_2016/2017_P14&amp;diff=42842</id>
		<title>IMA4 2016/2017 P14</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=IMA4_2016/2017_P14&amp;diff=42842"/>
				<updated>2017-05-20T15:24:00Z</updated>
		
		<summary type="html">&lt;p&gt;Tstieven : /* Conception de l'application Android */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Projet IMA4 : Sex-toy connecté =&lt;br /&gt;
&lt;br /&gt;
== Présentation du projet ==&lt;br /&gt;
&lt;br /&gt;
L'objectif de ce projet est de développer un système d'échange entre deux partenaires distants afin de rendre plus facile la vie de couple à distance.&lt;br /&gt;
&lt;br /&gt;
Pour ce faire, le dispositif sera constitué de deux sextoys connectés (un par appareil génital désiré) à leur téléphone portable respectif. Une application mobile permettra aux utilisateurs de s'échanger des données de manière sécurisé, ceci au travers d'un serveur embarqué dans le téléphone portable.&lt;br /&gt;
&lt;br /&gt;
Les données échangées pourront être l'accélération ou la température. Elles seront traitées et transmises au sextoy qui adaptera sa vitesse, son retour vibratoire ou sa position en conséquence.&lt;br /&gt;
&lt;br /&gt;
Les sextoys pourraient être composés de :&lt;br /&gt;
* Pour l'appareil masculin (dédié à la femme) :&lt;br /&gt;
:* un servomoteur ;&lt;br /&gt;
:* un vibreur ;&lt;br /&gt;
:* une sonde de température ;&lt;br /&gt;
:* un accéléromètre.&lt;br /&gt;
* Pour l'appareil féminin (dédié à l'homme) :&lt;br /&gt;
:* 4 servomoteurs (dans le but de &amp;quot;masser&amp;quot; en déplaçant le silicone);&lt;br /&gt;
:* des vibreurs ;&lt;br /&gt;
:* un accéléromètre.&lt;br /&gt;
* Pour les deux appareils :&lt;br /&gt;
:* un micro-contrôleur (Arduino mini) ;&lt;br /&gt;
:* un module de transmission / réception bluetooth afin de se connecter au téléphone ;&lt;br /&gt;
:* du silicone.&lt;br /&gt;
	&lt;br /&gt;
* L'application mobile devra :&lt;br /&gt;
:* mettre en place une communication cryptée à travers un serveur (embarqué ou bien intermédiaire ?) ;&lt;br /&gt;
:* effectuer un échange de données en bluetooth avec le sextoy connecté.&lt;br /&gt;
&lt;br /&gt;
* L'application mobile pourra :&lt;br /&gt;
:* utiliser la vidéo-conférence ;&lt;br /&gt;
:* enregistrer les meilleurs moments et enventuellement pouvoir les partager ;&lt;br /&gt;
:* effectuer une recherche de partenaire aléatoire.&lt;br /&gt;
&lt;br /&gt;
* S'il nous reste du temps, il peut être envisageable de :&lt;br /&gt;
:* mettre en place un réseau social interne à Polytech.&lt;br /&gt;
&lt;br /&gt;
== Liste des tâches ==&lt;br /&gt;
* Conception de l'appareil masculin (Cédric)&lt;br /&gt;
:* mettre en place le bus I2C avec les différents capteurs ;&lt;br /&gt;
:* création d'un PCB au format gerber ;&lt;br /&gt;
:* création d'un prototype.&lt;br /&gt;
&lt;br /&gt;
* Conception de l'appareil féminin (Cédric)&lt;br /&gt;
:* mettre en place le bus I2C ;&lt;br /&gt;
:* traitement des données afin d'en déduire la position et l'entrain de l'utilisateur ;&lt;br /&gt;
:* création d'un PCB ;&lt;br /&gt;
:* création d'un prototype.&lt;br /&gt;
&lt;br /&gt;
* Communication bluetooth (Cédric et Thomas)&lt;br /&gt;
:* étudier l'émission/réception vue de l'arduino ;&lt;br /&gt;
:* étudier l'émission/réception vue du téléphone ;&lt;br /&gt;
:* mise en place du protocole ;&lt;br /&gt;
:* test de portée.&lt;br /&gt;
&lt;br /&gt;
* Développement mobile (Thomas)&lt;br /&gt;
:* déterminer la meilleure approche : utilisation d'un serveur intermédiaire ou bien mise en place d'un &amp;quot;client-serveur&amp;quot; dans l'application mobile ;&lt;br /&gt;
:* mettre en place le choix retenu ;&lt;br /&gt;
:* tester dans un premier temps une transmission de texte ;&lt;br /&gt;
:* programmer le traitement de données reçues par bluetooth ;&lt;br /&gt;
:* rajouter un côté esthétique à l'application.&lt;br /&gt;
&lt;br /&gt;
==Feuille d'heures==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Tâche !! Prélude !! Heures S1 !! Heures S2 !! Heures S3 !! Heures S4 !! Heures vacances !! Heures S5 !! Heures S6 !! Heures S7 !! Heures S8 !! Heures S9 !! Heures S10 !! Heures vacances et après!! Total&lt;br /&gt;
|-&lt;br /&gt;
| Définition cahier des charges &lt;br /&gt;
| 2H&lt;br /&gt;
| 2H&lt;br /&gt;
| 1H&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 5H&lt;br /&gt;
|-&lt;br /&gt;
| Dimensionnement et établissement de la liste de matériel&lt;br /&gt;
| &lt;br /&gt;
| 3H&lt;br /&gt;
| 4H&lt;br /&gt;
|&lt;br /&gt;
| 4H&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 11H&lt;br /&gt;
|-&lt;br /&gt;
| Établissement de la liste et de la répartition des tâches&lt;br /&gt;
| 1H&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 1H&lt;br /&gt;
|-&lt;br /&gt;
| Appareil masculin : programmation&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 1H&lt;br /&gt;
| 2H&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 6H&lt;br /&gt;
| 9H &lt;br /&gt;
|-&lt;br /&gt;
| Appareil masculin : étude des datasheets&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 1H&lt;br /&gt;
| 1H&lt;br /&gt;
|&lt;br /&gt;
| 4H&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| 1H&lt;br /&gt;
|&lt;br /&gt;
| 7H&lt;br /&gt;
|-&lt;br /&gt;
| Appareil masculin : PCB&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 4H&lt;br /&gt;
| 4H&lt;br /&gt;
| 6H&lt;br /&gt;
| 30H&lt;br /&gt;
| 44H&lt;br /&gt;
|-&lt;br /&gt;
| Appareil masculin : 3D&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| 6H&lt;br /&gt;
| 6H&lt;br /&gt;
|-&lt;br /&gt;
| Conception de l'appareil féminin&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 2H&lt;br /&gt;
| 1H&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 3H&lt;br /&gt;
|-&lt;br /&gt;
| Liaison bluetooth (embarqué)&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 3H&lt;br /&gt;
| 1H&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 8H&lt;br /&gt;
| 12H&lt;br /&gt;
|-&lt;br /&gt;
| Liaison bluetooth (téléphone)&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 15H&lt;br /&gt;
| 15H&lt;br /&gt;
|-&lt;br /&gt;
| Recherche et discussion autour de la meilleure approche de communication&lt;br /&gt;
| 2H&lt;br /&gt;
| 2H&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 4H&lt;br /&gt;
|-&lt;br /&gt;
| Synchronisation temporelle des téléphones (par sms)&lt;br /&gt;
| &lt;br /&gt;
| 2H&lt;br /&gt;
| 4H&lt;br /&gt;
| 6H&lt;br /&gt;
| 8H&lt;br /&gt;
| 6H&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 26H&lt;br /&gt;
|-&lt;br /&gt;
| Transmission de paquets UDP&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 4H&lt;br /&gt;
| 4H&lt;br /&gt;
| 4H&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 6H&lt;br /&gt;
| 18H&lt;br /&gt;
|-&lt;br /&gt;
| Streaming video(UDP)&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 4H&lt;br /&gt;
| 4H&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 8H&lt;br /&gt;
|-&lt;br /&gt;
| Application et bases de données&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 6H&lt;br /&gt;
| 20H&lt;br /&gt;
| 26H&lt;br /&gt;
|-&lt;br /&gt;
| Total&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 195H&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Conception des sextoys==&lt;br /&gt;
===Introduction===&lt;br /&gt;
&lt;br /&gt;
La conception de sextoys doit respecter différents règles, notamment sanitaires. C'est pourquoi nous nous sommes intéressés à l'utilisation de silicone pour ce projet. Nous avons notamment rencontré un ingénieur compétant dans ce domaine afin de nous aiguiller sur cette éventuelle conception.&lt;br /&gt;
&lt;br /&gt;
La conception passera également par une conception 3D que nous effectuerons à l'aide d'imprimantes 3D au fabricarium de Polytech Lille.&lt;br /&gt;
&lt;br /&gt;
Enfin, les prototypes seront embarqués de cartes électroniques (aussi appelés PCB) que nous constituerons.&lt;br /&gt;
&lt;br /&gt;
===Choix du silicone, rencontre avec Mario Sanz===&lt;br /&gt;
&lt;br /&gt;
Le projet nécessite l'utilisation d'une matière souple et non irritante, c'est pourquoi nous avons choisi de nous tourner vers l'utilisation du silicone. Afin de choisir au mieux le produit correspondant à nos besoins, nous avons rencontré Mario Sanz, ingénieur à l'INRIA, qui travail régulièrement avec du silicone.&lt;br /&gt;
&lt;br /&gt;
Ce dernier nous a expliqué les différents points importants sur lesquels nous baser afin de choisir au mieux un produit en accord avec le projet. Ne serait-ce que pour le choix de la dureté, il existe une échelle propre au silicone (&amp;quot;Shore hardness scale&amp;quot;), nous pensions au départ rechercher un silicone le plus mou possible, cependant, il faut savoir que le plus le silicone est mou, plus il a tendance à être &amp;quot;collant&amp;quot;. Finalement, après discutions, un shore de 40A (correspondant à la dureté d'une gomme) suffisamment mince fera l'affaire pour la conception des prototypes.&lt;br /&gt;
&lt;br /&gt;
Il nous a également expliqué que le silicone peut être travaillé à l'aide d'additifs et sous cloche à vide afin d'améliorer le moulage, l'absence de &amp;quot;bulles&amp;quot; sur la surface de la pièce et la souplesse. Nous pouvons cependant travailler sans tout cela car il n'est pas spécialement important, pour notre projet, de rechercher des propriétés physiques homogènes dans tout le sextoy.&lt;br /&gt;
&lt;br /&gt;
Pour ce qui est de la création de moules, nous pourrons les effectuer via imprimante 3D. Il existe un bon nombre de tutoriels sur internet pour s'y référer en cas de soucis.&lt;br /&gt;
&lt;br /&gt;
===Impression 3D===&lt;br /&gt;
&lt;br /&gt;
Pour la création d'objets en 3D, de nombreux outils sont disponibles. Nous avons décidé d'utiliser Tinkercad, un outil qui s'intègre directement au navigateur internet utilisé. &lt;br /&gt;
&lt;br /&gt;
L'avantage d'un tel outil est sa grande communauté qui permet un accès simple et rapide à une multitudes de projets dont on pourrait s'inspirer pour générer nos pièces.&lt;br /&gt;
&lt;br /&gt;
====Création des moules====&lt;br /&gt;
&lt;br /&gt;
A l'aide d'une imprimante 3D, nous pouvons concevoir des moules afin de créer des pièces en silicone. Il s'agit de la manière la plus rapide et accessible pour notre projet.&lt;br /&gt;
&lt;br /&gt;
Cette méthode comporte des désavantages, dont le principal est la présence d'imperfection et de non homogénéité dans les pièces réalisées. Ceci n'a pas de grande importance dans la mesure où nous souhaitons du qualitatif.&lt;br /&gt;
&lt;br /&gt;
====Création d'un prototype====&lt;br /&gt;
&lt;br /&gt;
=====Pénis=====&lt;br /&gt;
&lt;br /&gt;
Afin de visualiser qualitativement la forme et le passage des câbles, un prototype imprimé au Fabricarium de Polytech Lille a été réalisé. &lt;br /&gt;
&lt;br /&gt;
Ce prototype se divise en 3 pièces : un boîtier (pour y loger le PCB), un cylindre (afin de reproduire la forme désirée) et un &amp;quot;tête&amp;quot; qui devait à l'origine être un moule en silicone (pour y loger le PCB du capteur de température).&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Sextoy_penis.png|400px|thumb|center|Prototype 3D pénis]]&lt;br /&gt;
&lt;br /&gt;
===Conception des PCB===&lt;br /&gt;
&lt;br /&gt;
Afin de diminuer un maximum la taille des cartes electroniques, nous utilisons principalement des composants CMS. &lt;br /&gt;
&lt;br /&gt;
La conception des cartes peut-être effectué à l'aide de logicels de CAO tels qu'Altium ou Eagle. Dans notre cas, nous avons utilisé Eagle. &lt;br /&gt;
&lt;br /&gt;
Ce travail consiste à créer une librairie regroupant l'intégralité des composants nécessaires et, ensuite, de  créer un schéma du circuit. Une fois le schéma terminé, il ne restera plus qu'à faire le routage et exporter les fichiers au format &amp;quot;Gerber&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Pour ce projet, nous aurons besoin de deux cartes, une par prototype. Chaque carte embarquera des composants similaires, c'est pourquoi nous nous contenterons d'abord d'un seul PCB pour effectuer des tests. Si ces derniers sont concluants, nous pourrons graver le second.&lt;br /&gt;
&lt;br /&gt;
====PCB du pénis====&lt;br /&gt;
&lt;br /&gt;
Le premier PCB imprimé et soudé est celui du pénis. Une première carte avait été imprimé regroupant sur cette dernière : un support pour l'arduino, un accéléromètre, un module bluetooth. &lt;br /&gt;
&lt;br /&gt;
[[Fichier:PCB_penis_VB.png|400px|thumb|center|PCB v1.0]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous avons expérimentés des problèmes dûs aux dimensions de l'accéléromètre, l'utilisation d'un boîtier CMS de type TDFN10 2x2 était optimiste pour la réalisation du projet, compte tenu du matériel à disposition.&lt;br /&gt;
&lt;br /&gt;
C'est pourquoi une seconde carte a été gravée, cette fois sans l'accéléromètre.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:PCB_penis_VF.png|400px|thumb|center|PCB v2.0]]&lt;br /&gt;
&lt;br /&gt;
[[Fichier:PCB_VF.png|400px|thumb|center|PCB v2.0 schema]]&lt;br /&gt;
&lt;br /&gt;
Ce prototype est sensé embarquer un capteur de température que nous avons décidé de mettre sur un PCB à part. Cette carte avait pour but d'être coulé dans le silicone, afin de mesurer la température au plus près de la zone intéressée.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:TEMPERATURE_PCB_VF.png|400px|thumb|center|PCB temperature]]&lt;br /&gt;
&lt;br /&gt;
[[Fichier:TEMPERATURE_VF.png|400px|thumb|center|PCB temperature schema]]&lt;br /&gt;
&lt;br /&gt;
====PCB du vagin====&lt;br /&gt;
&lt;br /&gt;
Compte tenu des soucis rencontrés avec l'accéléromètre, la carte sera gravée afin de pouvoir y plugger un accéléromètre analogique en traversant. Le but étant d'avoir un prototype fonctionnel d'ici la fin du projet.&lt;br /&gt;
&lt;br /&gt;
Nous avons également eu des problèmes avec le module bluetooth utilisé, ce dernier ne pouvant être reconfiguré manuellement par minicom, nous utiliserons le bluetooth HC-05 utilisé pour les essais de code. De même que pour l'accéléromètre, nous prévoirons un endroit pour le plugger sur la carte.&lt;br /&gt;
&lt;br /&gt;
''image PCB vagin''&lt;br /&gt;
&lt;br /&gt;
''Reste à graver le PCB du vagin''&lt;br /&gt;
&lt;br /&gt;
==Gestion des composants==&lt;br /&gt;
===Introduction===&lt;br /&gt;
&lt;br /&gt;
Notre projet implique l'utilisation de capteurs, de servomoteurs et de buzzers, constituant chacun une partie de la programmation embarquée.&lt;br /&gt;
&lt;br /&gt;
Pour cette programmation, nous avons décidé d'utiliser AVR-gcc et ainsi coder les arduinos en C.&lt;br /&gt;
&lt;br /&gt;
Les capteurs utilisés utilisent un protocole de communication IIC (ou I²C, I2C), ce protocole de multiples avantages que nous expliciterons par la suite. Cependant, comme un des capteurs (l'accéléromètre) prévus initialement nous a causé beaucoup de soucis, nous expliciterons également la mesure à l'aide de capteurs analogiques. Ces différents capteurs nous permettront de mesurer l'excitation d'un utilisateur.&lt;br /&gt;
&lt;br /&gt;
Une fois l'excitation mesurée, il faut induire une réponse &amp;quot;physique&amp;quot;. Pour ce faire, nous utilisons d'une part des servomoteurs dans le but de produire une sensation de massage.&lt;br /&gt;
&lt;br /&gt;
D'autre part, nous utilisons également des buzzers.&lt;br /&gt;
&lt;br /&gt;
===Utilisation des capteurs===&lt;br /&gt;
&lt;br /&gt;
====Capteurs par IIC====&lt;br /&gt;
&lt;br /&gt;
Le choix de l'IIC n'était pas anodins. L'IIC permet, pour un bus de seulement deux fils, d'utiliser un nombre important de capteurs. Ainsi, si nous décidions au cours du projet de rajouter tel ou tel capteurs, nous n'avions qu'à les greffer à ce bus IIC. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Capteurs analogique====&lt;br /&gt;
&lt;br /&gt;
Comme dit précédemment, nous avons abandonné l'utilisation de l’accéléromètre IIC prévu initialement dans le vagin car nous n'avons pas réussi à le souder sur les cartes du pénis. Nous avons donc utilisé ce qui était à notre disposition à savoir un capteur analogique.&lt;br /&gt;
&lt;br /&gt;
La mesure analogique sous AVR se fait simplement via l'utilisation de la fonction ad_sample(numéro de la broche analogique lue). Elle renvoie directement une valeur entre 0 et 255 correspondant à une conversion analogique-numérique de la tension sur la broche lue du capteur.&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
===Contrôle des servomoteurs===&lt;br /&gt;
&lt;br /&gt;
Un servomoteur se contrôle à l'aide d'un signal PWM (Pulse Width Modulation). Ce signal consiste à modifier la largeur de l'impulsion en fonction de la consigne désirée. &lt;br /&gt;
&lt;br /&gt;
La génération de PWM via microcontrôleur se fait à l'aide de TIMERS. Il faut savoir qu'il existe une priorité dans les interruptions, pour un TIMER_X donné, plus le X est proche de 0, plus l'interruption sera prioritaire. Nos signaux PWM se doivent d'être le plus en accord avec nos consignes, c'est pourquoi nous avons choisi d'utiliser les TIMER les plus prioritaires pour les générer. (TIMER0 et TIMER1)&lt;br /&gt;
&lt;br /&gt;
====PWM sur un seul servomoteur====&lt;br /&gt;
&lt;br /&gt;
Notre première manière de procéder consistait à générer la PWM nous même à l'aide du vecteur d'interruption d'un TIMER. La méthode consistait à compter de 0 à 255 en permanence. Lorsque le compteur était inférieur à la consigne, on passait une sortie à l'état haut, sinon elle restait à l'état bas. &lt;br /&gt;
&lt;br /&gt;
Cette méthode simulait plutôt bien le signal PWM et avait pour avantage d'être utilisable pour n'importe quelle de l'arduino. Cependant, cette méthode a le gros désavantage d'être sensible à l'utilisation d'autres interruptions, rendant le TIMER imprécis.&lt;br /&gt;
&lt;br /&gt;
Or, notre projet utilisera d'autres procédures d'interruption. Nous avons donc décidé d'utiliser une méthode plus simple mais nous restreignant sur le choix de nos sorties.&lt;br /&gt;
&lt;br /&gt;
En effet, un atmega possède des registres que l'on peut configurer pour générer des signaux PWM sur des broches spécifiques.&lt;br /&gt;
&lt;br /&gt;
Ainsi, en configurant le registre TCCR0A à 0x81 et TCCR0B à 0x05, on se place en mode PWM non inversée à fréquence élevée. En résumé, cette configuration nous permet de faire varier les signaux PWM en introduisant une consigne dans le registre OCR0A.&lt;br /&gt;
&lt;br /&gt;
Ainsi, nous pouvons donc contrôler le moteur simplement en changeant la consigne dans OCR0A.&lt;br /&gt;
&lt;br /&gt;
====Tests====&lt;br /&gt;
&lt;br /&gt;
Dans un premier lieu, les moteurs servomoteurs ne recevaient pas les consignes. Nous pensions que le fait que la PWM soit en 3V3 était l'origine du problème. Nous avons donc fait le montage à l'aide d'un transistor NPN monté en saturé. Le problème n'a pas été résolu. &lt;br /&gt;
&lt;br /&gt;
Finalement, le soucis viendrait du fait que les tests étaient effectués avec des valeurs du registre OCR0A à 0 (pwm nulle). Nous n'aurons donc pas besoin d'un montage à transistor pour le PCB.&lt;br /&gt;
&lt;br /&gt;
Le but des servomoteurs est d'effectuer un semblant de massage, nous allons donc modifier le code afin d'effectuer la tâche de manière périodique via l'utilisation d'un TIMER.&lt;br /&gt;
&lt;br /&gt;
====Gestion d'un ensemble de servomoteurs====&lt;br /&gt;
&lt;br /&gt;
Dans le vagin, nous utilisons 4 servomoteurs afin de masser l'utilisateur. Nous avons trouvé intéressant de diviser ces moteurs en deux couples afin d'intensifier ou non ce massage en fonction des seuils d'excitation détectés par les capteurs.&lt;br /&gt;
&lt;br /&gt;
Pour ce faire, nous aurons besoin de deux signaux PWM différents, donc de l'utilisation de deux timers configurés en PWM. &lt;br /&gt;
&lt;br /&gt;
Comme dit en introduction de cette section, nous nous imposons l'utilisation du TIMER1 pour cette deuxième PWM. Il existe une différence dans la configuration de cette dernière dans la mesure où le signal peut recevoir des consignes allant de 8 à 16bits en fonction de la configuration. Afin de simplifier les choses, nous avons configuré cette dernière sur 8bits pour lui envoyer les mêmes consignes que pour le TIMER0.&lt;br /&gt;
&lt;br /&gt;
====Tests====&lt;br /&gt;
&lt;br /&gt;
Avant tout, nous devions vérifier que la consigne avait une intensité suffisante pour être envoyée sur deux servomoteurs en même temps. Ce qui était le cas.&lt;br /&gt;
&lt;br /&gt;
Ensuite, nous avons testés des changements de consignes plus ou moins rapides afin de déterminer ce qui répondrait le mieux à nos attentes.&lt;br /&gt;
&lt;br /&gt;
Les tests concluants, nous pouvions passer à la suite.&lt;br /&gt;
&lt;br /&gt;
===Utilisation des buzzers===&lt;br /&gt;
&lt;br /&gt;
En fonction du niveau d'excitation, nous ferons vibrer un ou deux buzzers. Pour ce faire, nous avons fait le choix de souder leur broche GND au GND de nos cartes et ainsi souder leur potentiel VCC à une broche de l'arduino. Ainsi, si nous plaçons la broche à l'état bas, le tension dans le buzzer est nulle et si nous passons la broche à l'état haut, la tension aux bornes du buzzers devient 3.3V et il vibre.&lt;br /&gt;
&lt;br /&gt;
Pour ce faire, nous utilisons simplement deux broches, ici PXX et PXX, que nous avons initialisés en tant que sorties en mettant à un leur bit correspondant dans le registre DDRX. Ainsi, il ne reste plus qu'à commander la valeur haute ou basse de ces broches en mettant à 1 ou 0 leur bit dans le registre PORTX.&lt;br /&gt;
&lt;br /&gt;
====Tests====&lt;br /&gt;
&lt;br /&gt;
Ceci a été testé sur breadboard et était fonctionnel. Cependant, une chose à quoi nous n'avions pas pensé était que lorsque nous les avons soudés sur le PCB, nous aurions dû utiliser des câbles plus épais, car comme nous n'avions pas de prototype sur quoi coller les buzzers, l'un des buzzers s'est arraché de la carte en vibrant.&lt;br /&gt;
&lt;br /&gt;
===Résumé===&lt;br /&gt;
&lt;br /&gt;
==Gestion de la communication bluetooth==&lt;br /&gt;
===Introduction===&lt;br /&gt;
Dans le cadre de notre projet, la communication entre le sextoy et le téléphone se fera à faible portée. C'est pourquoi nous avons considéré comme intéressante l'utilisation de la technologie bluetooth.&lt;br /&gt;
&lt;br /&gt;
La première partie consiste à coder une librairie au niveau de l'arduino. Cette librairie, codée en C, consiste simplement en une lecture / écriture via les broches RX/TX de l'arduino et du module bluetooth. &lt;br /&gt;
&lt;br /&gt;
La seconde partie conssite à coder la partie application mobile qui communiquera avec la arduino.&lt;br /&gt;
&lt;br /&gt;
Une fois que cette transmission sera mise en place, il ne reste plus qu'à expliciter le protocole des paquets transmis.&lt;br /&gt;
&lt;br /&gt;
===Arduino===&lt;br /&gt;
&lt;br /&gt;
Afin de communiquer à travers le module bluetooth, il faut relier la broche RX de l'arduino à celle TX du module bluetooth et inversement. Pour tester nos codes, nous avons utilisé un module bluetooth HC-06 et l'application [https://play.google.com/store/apps/details?id=Qwerty.BluetoothTerminal&amp;amp;hl=fr| Bluetooth Terminal]. &lt;br /&gt;
&lt;br /&gt;
Dans la mesure où l'arduino devra traiter l'arrivée asynchrone de messages tout en effectuant le traitement des capteurs, il est intéressant d'effectuer des lectures à l'aide d'interruptions. Pour cela, nous utilisons le vecteur d'interruption USART_RXC_vect qui déclenchera la fonction de lecture d'un paquet à chaque fois qu'un message est reçu.&lt;br /&gt;
&lt;br /&gt;
''Actuellement, la librarie est fonctionnelle, il ne reste plus qu'à faire l'utilisation par interruption.''&lt;br /&gt;
&lt;br /&gt;
===Application mobile===&lt;br /&gt;
===Protocole de transmission===&lt;br /&gt;
===Module bluetooth utilisé===&lt;br /&gt;
&lt;br /&gt;
Le module bluetooth embarqué sur le PCB est un module reprogrammable. Ainsi il était nécessaire de connaître la configuration par défaut du composant, dans le but de savoir s'il fallait ou non prévoir un pcb de reconfiguration.&lt;br /&gt;
&lt;br /&gt;
Le CYBLE-012012 est configuré par défaut avec le firmware &amp;quot;EZ-Serial BLE Firmware&amp;quot;. La configuration par défaut de ce firmware est la suivante : &lt;br /&gt;
&lt;br /&gt;
* 115200 baud, 8bits de donnée, pas de bit de parité, 1bit de stop&lt;br /&gt;
* &amp;quot;UART flow control&amp;quot; désactivé&lt;br /&gt;
* firmware activé en mode &amp;quot;auto-start&amp;quot;, qui correspond à une recherche automatique de connection bluetooth et de redirection RX-TX en cas de connection&lt;br /&gt;
&lt;br /&gt;
Ces [http://www.cypress.com/file/285326/download| informations] sont importantes car, si elles sont vraiment respectées, nous n'auront pas à créer notre propre kit de développement, ce qui est un gain de temps considérable.&lt;br /&gt;
&lt;br /&gt;
Qui plus est, l'utilisation d'une fonction &amp;quot;auto-start&amp;quot; est en adéquation avec le module bluetooth HC-05 utilisé pour les tests. Nous pouvons donc commencer la programmation mobile du bluetooth en parallèle de l'impression des pcb. Et, dans le cas où les pcb seraient disfonctionnels, nous pourront quand meme envisager un prototype sur breadboard.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Test====&lt;br /&gt;
&lt;br /&gt;
Après avoir alimenté la carte, nous n'avons pas pu nous connecter au module bluetooth, ce dernier n'étant même pas visible dans les appareils alentours. &lt;br /&gt;
&lt;br /&gt;
Nous avons alors vérifié si la carte était correctement alimentée. Pour ce faire, nous avons mesuré différents points de tensions sensé être mis par défaut en PULL-DOWN ou PULL-UP à des niveaux de tensions d'1.7V. Ces niveaux étaient respectés. Le problème n'est donc pas d'ordre électronique. &lt;br /&gt;
&lt;br /&gt;
Par la suite, nous avons voulu vérifier la communication du module. Ce dernier, en déclenchant l'auto start est sensé émettre (en suivant le protocole UART rappelé précédemment) un message START. Nous avons donc inspecté ceci en utilisant minicom. En effet, minicom reçoit un message, mais ne sait pas le déchiffré. Qui plus est, impossible d'envoyer un message au module afin de le reprogrammer (de manière similaire à un XBee).&lt;br /&gt;
&lt;br /&gt;
Devant ces soucis, nous décidons donc d'abandonner ce module bluetooth et de poursuivre avec celui utilisé pour les essais de programmation, le HC-05.&lt;br /&gt;
&lt;br /&gt;
==Conception de l'application Android==&lt;br /&gt;
===Envoie et réception de SMS===&lt;br /&gt;
Afin de ne pas utiliser de serveur, les deux appareils Android doivent synchroniser l'envoi de paquet UDP, pour cela nous avons voulu utiliser des SMS.&lt;br /&gt;
Les SMS permettent d'envoyer des informations, comme les adresses IP, les ports utilisés, l'heure à laquelle les deux téléphones vont envoyer leur premier paquet UDP.&lt;br /&gt;
&lt;br /&gt;
Dans un premier temps nous avons créer une application pour envoyer les SMS:&lt;br /&gt;
&lt;br /&gt;
L'application était très simple, l'envoi de SMS se faisait en deux lignes&lt;br /&gt;
  // initialisation d'une variable sms gérant les sms&lt;br /&gt;
  SmsManager sms = SmsManager.getDefault() ;&lt;br /&gt;
  // envoie un sms comportant le texte de la variable message de type String au numéro contenu dans la variable num de type String&lt;br /&gt;
  sms.sendTextMessage(num, null, message, null, null);&lt;br /&gt;
&lt;br /&gt;
Dans un deuxième temps il fallait recevoir un SMS, ou plutôt savoir qu'un nouvel SMS avait été reçu :&lt;br /&gt;
&lt;br /&gt;
Pour cela il fallait utiliser un thread qui était appelé par interruption avec la réception d'un SMS comme vecteur d’interruption.&lt;br /&gt;
Ce thread effectuait ce qui était demandé dans sa fonction onReceive(), comme par exemple lire les informations contenues dans le SMS:&lt;br /&gt;
  public class IncomingSms extends BroadcastReceiver {&lt;br /&gt;
     final SmsManager sms = SmsManager.getDefault();&lt;br /&gt;
     public void onReceive(Context context, Intent intent) {&lt;br /&gt;
       //Ce qui doit etre fait lors de la reception de SMS&lt;br /&gt;
     }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Malheureusement ce programme ne marchait pas pendant des semaines, malgré de nombreuses modifications et de nombreux essais. Et le problème semblait être ma carte SIM, car en changeant de SIM, tous les programmes contenant ce code fonctionnaient parfaitement.&lt;br /&gt;
&lt;br /&gt;
===Protocole UDP===&lt;br /&gt;
Afin d'effectuer un échange de données entre les deux utilisateurs, et essayer de faire une vidéo-conférence, nous avons choisi d'utiliser le protocole UDP.&lt;br /&gt;
&lt;br /&gt;
Une première application permettait de tester l'envoi de paquet UDP, pour cela un serveur UDP a été utilisé sur un PC.&lt;br /&gt;
Le serveur attendait un message et l'affichait quand il le recevait.&lt;br /&gt;
&lt;br /&gt;
Une fois que tout fonctionnait comme il le fallait, nous avons pu créer une application qui comportait l'envoi et la réception de paquet.&lt;br /&gt;
En mettant l'application sur deux téléphones on pouvait tester si tout fonctionnait.&lt;br /&gt;
Les tests ont seulement été effectué sur un réseau local, on ne sait pas pour le moment si des box internet pourraient empêcher la transmission.&lt;br /&gt;
L'application est composé de un thread d'écoute, un thread d'envoi et d'un thread principal gérant l'affichage et appelant le thread d'envoi lorsque que le bouton de l'application est appuyé.&lt;br /&gt;
&lt;br /&gt;
===Communication Bluetooth===&lt;br /&gt;
Pour gérer la communication entre le téléphone et un sextoys&lt;br /&gt;
===Application principale===&lt;br /&gt;
Afin d'être ergonomique,l'application doit pouvoir enregistrer des contacts, pour plus facilement communiquer avec eux.&lt;br /&gt;
Nous avons choisi de ne pas utiliser les contacts du téléphone, pour pouvoir avoir des contacts &amp;quot;confidentiels&amp;quot; qui ne seront que dans la base de donnée de l'application.&lt;br /&gt;
&lt;br /&gt;
Il fallait donc créer une base de donnée, nous avons donc utilisé SQLite car cette bibliothèque est utilisée par Android comme base de données embarquée.&lt;br /&gt;
La base ne comporte qu'une seule table, avec seulement les pseudos et les numéros de téléphone.&lt;br /&gt;
&lt;br /&gt;
Une fois la base crée, pour interagir avec, nous avons coder des activités:&lt;br /&gt;
&lt;br /&gt;
- Ajout de contact:&lt;br /&gt;
&lt;br /&gt;
Il faut entrer dans les champs de textes les informations pour la base de données,puis appuyer sur le bouton &amp;quot;Ajouter&amp;quot; pour créer un nouveau contact dans la base de donnée.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:AjoutContact.png]]&lt;br /&gt;
&lt;br /&gt;
-Fiche de Contact: &lt;br /&gt;
&lt;br /&gt;
Affiche le pseudo et le numéro de téléphone dans les &amp;quot;TextView&amp;quot;, et permet de : supprimer le contact en cliquant sur la croix, envoyer un SMS en cliquant sur l'icone &amp;quot;Message&amp;quot;, mais aussi commencer une communication UDP en cliquant sur le téléphone.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:FicheContact.png]]&lt;br /&gt;
&lt;br /&gt;
-Liste de contact :&lt;br /&gt;
&lt;br /&gt;
Affiche la liste de contacts, en cliquant sur un des contacts on arrive sur la page Fiche de Contact, et en cliquant sur le plus on arrive sur la page Ajout de Contact.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:ListView.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ensuite il faut ajouter la gestion de communication:&lt;br /&gt;
&lt;br /&gt;
-Les SMS :&lt;br /&gt;
&lt;br /&gt;
Il faut remplir les champs de texte et appuyer sur SMS pour envoyer un message du type&lt;br /&gt;
&lt;br /&gt;
Message&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Address Ip :&amp;quot; Addresse Ip&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Port :&amp;quot; Port&lt;br /&gt;
&lt;br /&gt;
Avec Message,Addresse Ip, et Port les champs à remplir, &amp;quot;Addresse Ip :&amp;quot; et &amp;quot;Port :&amp;quot; deux chaines de caractères.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:SMS.png]]&lt;br /&gt;
&lt;br /&gt;
-Protocole UDP : &lt;br /&gt;
&lt;br /&gt;
Quatre champs sont à remplir, cliquer sur Envoyer pour passez à l'activité de gestion Bluetooth.&lt;br /&gt;
&lt;br /&gt;
Les champs sont:&lt;br /&gt;
&lt;br /&gt;
-L'addresse Ip&lt;br /&gt;
&lt;br /&gt;
-Le port destination&lt;br /&gt;
&lt;br /&gt;
-Le port source&lt;br /&gt;
&lt;br /&gt;
-L'heure qui n'est pas utilisée, qui devait servir pour la synchronisation.&lt;br /&gt;
&lt;br /&gt;
Les valeurs des champs sont conservés pour la communication UDP à venir.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:UDP.png]]&lt;br /&gt;
&lt;br /&gt;
-Gestion Bluetooth :&lt;br /&gt;
&lt;br /&gt;
En cliquant sur &amp;quot;Paired Devices&amp;quot;, l'application affichera la liste des appareils appairés.&lt;br /&gt;
&lt;br /&gt;
Puis en cliquant un des appareils, l'application essayera de connecter avec, tout en lançant l'activité UDP avec Bluetooth.&lt;br /&gt;
&lt;br /&gt;
Si l'on souhaite ne pas utiliser de périphérique Bluetooth, il suffit de cliquer sur le bouton moins en haut à droite.&lt;br /&gt;
&lt;br /&gt;
L'activité UDP sans Bluetooth se lancera.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Bluetooth.png]]&lt;br /&gt;
&lt;br /&gt;
-Communication UDP avec Bluetooth:&lt;br /&gt;
&lt;br /&gt;
Pour lancer la communication UDP, appuyer sur le bouton Off ,il passera en mode On.&lt;br /&gt;
&lt;br /&gt;
Si vous cliquez sur le bouton On il passera en mode Off, et coupera la communication UDP.&lt;br /&gt;
&lt;br /&gt;
Le bouton envoyer, permet de forcer l'envoi d'un paquet UDP.&lt;br /&gt;
&lt;br /&gt;
Et le bouton croix coupe toutes les communications(UDP et Bluetooth), et retourne à la page précédente.&lt;br /&gt;
&lt;br /&gt;
Lorsque l'application reçoit un paquet UDP, un message est envoyé via Bluetooth au sextoys.&lt;br /&gt;
&lt;br /&gt;
Celui-ci répond automatiquement en envoyant une valeur moyennée des ses capteurs, cette valeur est récupérée et mise dans un registre.&lt;br /&gt;
&lt;br /&gt;
En parallèle, toutes les secondes un paquet UDP est envoyé et les données envoyés sont celle du registre.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Com.png]]&lt;br /&gt;
&lt;br /&gt;
-Communication UDP sans Bluetooth.&lt;br /&gt;
&lt;br /&gt;
Le bouton On/Off est utilisé comme dans l'activité &amp;quot;Communication UDP avec Bluetooth&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Les boutons de niveaux, mettent une valeur dans un même registre.&lt;br /&gt;
&lt;br /&gt;
Chaque boutons correspond à une valeur, qui correspondent avec un niveau d'excitation du sextoys.&lt;br /&gt;
&lt;br /&gt;
Ainsi toutes les secondes, un paquet UDP est envoyé avec comme donnée la valeur du registre.&lt;br /&gt;
&lt;br /&gt;
Lorsqu'un paquet UDP est reçu, la donnée reçue est mise dans un registre qui détermine l’affichage du &amp;quot;TextView&amp;quot; en bas à droite.&lt;br /&gt;
&lt;br /&gt;
Ce TextView est mis à jours en même temps qu'un paquet UDP est envoyé.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Co2.png]]&lt;br /&gt;
&lt;br /&gt;
== Rapport et codes ==&lt;br /&gt;
&lt;br /&gt;
Rapport : [[Fichier:CR_sextoy_connecte.pdf]]&lt;br /&gt;
&lt;br /&gt;
[https://archives.plil.fr/croussel/Projet_sextoy_connecte.git Codes]&lt;/div&gt;</summary>
		<author><name>Tstieven</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Fichier:Co2.png&amp;diff=42832</id>
		<title>Fichier:Co2.png</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Fichier:Co2.png&amp;diff=42832"/>
				<updated>2017-05-20T15:15:49Z</updated>
		
		<summary type="html">&lt;p&gt;Tstieven : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Tstieven</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Fichier:Com.png&amp;diff=42825</id>
		<title>Fichier:Com.png</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Fichier:Com.png&amp;diff=42825"/>
				<updated>2017-05-20T15:06:12Z</updated>
		
		<summary type="html">&lt;p&gt;Tstieven : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Tstieven</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Fichier:Bluetooth.png&amp;diff=42817</id>
		<title>Fichier:Bluetooth.png</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Fichier:Bluetooth.png&amp;diff=42817"/>
				<updated>2017-05-20T15:01:34Z</updated>
		
		<summary type="html">&lt;p&gt;Tstieven : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Tstieven</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Fichier:UDP.png&amp;diff=42814</id>
		<title>Fichier:UDP.png</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Fichier:UDP.png&amp;diff=42814"/>
				<updated>2017-05-20T14:56:22Z</updated>
		
		<summary type="html">&lt;p&gt;Tstieven : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Tstieven</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Fichier:SMS.png&amp;diff=42813</id>
		<title>Fichier:SMS.png</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Fichier:SMS.png&amp;diff=42813"/>
				<updated>2017-05-20T14:51:25Z</updated>
		
		<summary type="html">&lt;p&gt;Tstieven : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Tstieven</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=IMA4_2016/2017_P14&amp;diff=42811</id>
		<title>IMA4 2016/2017 P14</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=IMA4_2016/2017_P14&amp;diff=42811"/>
				<updated>2017-05-20T14:40:06Z</updated>
		
		<summary type="html">&lt;p&gt;Tstieven : /* Conception de l'application Android */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Projet IMA4 : Sex-toy connecté =&lt;br /&gt;
&lt;br /&gt;
== Présentation du projet ==&lt;br /&gt;
&lt;br /&gt;
L'objectif de ce projet est de développer un système d'échange entre deux partenaires distants afin de rendre plus facile la vie de couple à distance.&lt;br /&gt;
&lt;br /&gt;
Pour ce faire, le dispositif sera constitué de deux sextoys connectés (un par appareil génital désiré) à leur téléphone portable respectif. Une application mobile permettra aux utilisateurs de s'échanger des données de manière sécurisé, ceci au travers d'un serveur embarqué dans le téléphone portable.&lt;br /&gt;
&lt;br /&gt;
Les données échangées pourront être l'accélération ou la température. Elles seront traitées et transmises au sextoy qui adaptera sa vitesse, son retour vibratoire ou sa position en conséquence.&lt;br /&gt;
&lt;br /&gt;
Les sextoys pourraient être composés de :&lt;br /&gt;
* Pour l'appareil masculin (dédié à la femme) :&lt;br /&gt;
:* un servomoteur ;&lt;br /&gt;
:* un vibreur ;&lt;br /&gt;
:* une sonde de température ;&lt;br /&gt;
:* un accéléromètre.&lt;br /&gt;
* Pour l'appareil féminin (dédié à l'homme) :&lt;br /&gt;
:* 4 servomoteurs (dans le but de &amp;quot;masser&amp;quot; en déplaçant le silicone);&lt;br /&gt;
:* des vibreurs ;&lt;br /&gt;
:* un accéléromètre.&lt;br /&gt;
* Pour les deux appareils :&lt;br /&gt;
:* un micro-contrôleur (Arduino mini) ;&lt;br /&gt;
:* un module de transmission / réception bluetooth afin de se connecter au téléphone ;&lt;br /&gt;
:* du silicone.&lt;br /&gt;
	&lt;br /&gt;
* L'application mobile devra :&lt;br /&gt;
:* mettre en place une communication cryptée à travers un serveur (embarqué ou bien intermédiaire ?) ;&lt;br /&gt;
:* effectuer un échange de données en bluetooth avec le sextoy connecté.&lt;br /&gt;
&lt;br /&gt;
* L'application mobile pourra :&lt;br /&gt;
:* utiliser la vidéo-conférence ;&lt;br /&gt;
:* enregistrer les meilleurs moments et enventuellement pouvoir les partager ;&lt;br /&gt;
:* effectuer une recherche de partenaire aléatoire.&lt;br /&gt;
&lt;br /&gt;
* S'il nous reste du temps, il peut être envisageable de :&lt;br /&gt;
:* mettre en place un réseau social interne à Polytech.&lt;br /&gt;
&lt;br /&gt;
== Liste des tâches ==&lt;br /&gt;
* Conception de l'appareil masculin (Cédric)&lt;br /&gt;
:* mettre en place le bus I2C avec les différents capteurs ;&lt;br /&gt;
:* création d'un PCB au format gerber ;&lt;br /&gt;
:* création d'un prototype.&lt;br /&gt;
&lt;br /&gt;
* Conception de l'appareil féminin (Cédric)&lt;br /&gt;
:* mettre en place le bus I2C ;&lt;br /&gt;
:* traitement des données afin d'en déduire la position et l'entrain de l'utilisateur ;&lt;br /&gt;
:* création d'un PCB ;&lt;br /&gt;
:* création d'un prototype.&lt;br /&gt;
&lt;br /&gt;
* Communication bluetooth (Cédric et Thomas)&lt;br /&gt;
:* étudier l'émission/réception vue de l'arduino ;&lt;br /&gt;
:* étudier l'émission/réception vue du téléphone ;&lt;br /&gt;
:* mise en place du protocole ;&lt;br /&gt;
:* test de portée.&lt;br /&gt;
&lt;br /&gt;
* Développement mobile (Thomas)&lt;br /&gt;
:* déterminer la meilleure approche : utilisation d'un serveur intermédiaire ou bien mise en place d'un &amp;quot;client-serveur&amp;quot; dans l'application mobile ;&lt;br /&gt;
:* mettre en place le choix retenu ;&lt;br /&gt;
:* tester dans un premier temps une transmission de texte ;&lt;br /&gt;
:* programmer le traitement de données reçues par bluetooth ;&lt;br /&gt;
:* rajouter un côté esthétique à l'application.&lt;br /&gt;
&lt;br /&gt;
==Feuille d'heures==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Tâche !! Prélude !! Heures S1 !! Heures S2 !! Heures S3 !! Heures S4 !! Heures vacances !! Heures S5 !! Heures S6 !! Heures S7 !! Heures S8 !! Heures S9 !! Heures S10 !! Heures vacances et après!! Total&lt;br /&gt;
|-&lt;br /&gt;
| Définition cahier des charges &lt;br /&gt;
| 2H&lt;br /&gt;
| 2H&lt;br /&gt;
| 1H&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 5H&lt;br /&gt;
|-&lt;br /&gt;
| Dimensionnement et établissement de la liste de matériel&lt;br /&gt;
| &lt;br /&gt;
| 3H&lt;br /&gt;
| 4H&lt;br /&gt;
|&lt;br /&gt;
| 4H&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 11H&lt;br /&gt;
|-&lt;br /&gt;
| Établissement de la liste et de la répartition des tâches&lt;br /&gt;
| 1H&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 1H&lt;br /&gt;
|-&lt;br /&gt;
| Appareil masculin : programmation&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 1H&lt;br /&gt;
| 2H&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 6H&lt;br /&gt;
| 9H &lt;br /&gt;
|-&lt;br /&gt;
| Appareil masculin : étude des datasheets&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 1H&lt;br /&gt;
| 1H&lt;br /&gt;
|&lt;br /&gt;
| 4H&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| 1H&lt;br /&gt;
|&lt;br /&gt;
| 7H&lt;br /&gt;
|-&lt;br /&gt;
| Appareil masculin : PCB&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 4H&lt;br /&gt;
| 4H&lt;br /&gt;
| 6H&lt;br /&gt;
| 30H&lt;br /&gt;
| 44H&lt;br /&gt;
|-&lt;br /&gt;
| Appareil masculin : 3D&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| 6H&lt;br /&gt;
| 6H&lt;br /&gt;
|-&lt;br /&gt;
| Conception de l'appareil féminin&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 2H&lt;br /&gt;
| 1H&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 3H&lt;br /&gt;
|-&lt;br /&gt;
| Liaison bluetooth (embarqué)&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 3H&lt;br /&gt;
| 1H&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 8H&lt;br /&gt;
| 12H&lt;br /&gt;
|-&lt;br /&gt;
| Liaison bluetooth (téléphone)&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 15H&lt;br /&gt;
| 15H&lt;br /&gt;
|-&lt;br /&gt;
| Recherche et discussion autour de la meilleure approche de communication&lt;br /&gt;
| 2H&lt;br /&gt;
| 2H&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 4H&lt;br /&gt;
|-&lt;br /&gt;
| Synchronisation temporelle des téléphones (par sms)&lt;br /&gt;
| &lt;br /&gt;
| 2H&lt;br /&gt;
| 4H&lt;br /&gt;
| 6H&lt;br /&gt;
| 8H&lt;br /&gt;
| 6H&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 26H&lt;br /&gt;
|-&lt;br /&gt;
| Transmission de paquets UDP&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 4H&lt;br /&gt;
| 4H&lt;br /&gt;
| 4H&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 6H&lt;br /&gt;
| 18H&lt;br /&gt;
|-&lt;br /&gt;
| Streaming video(UDP)&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 4H&lt;br /&gt;
| 4H&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 8H&lt;br /&gt;
|-&lt;br /&gt;
| Application et bases de données&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 6H&lt;br /&gt;
| 20H&lt;br /&gt;
| 26H&lt;br /&gt;
|-&lt;br /&gt;
| Total&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 195H&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Conception des sextoys==&lt;br /&gt;
===Introduction===&lt;br /&gt;
&lt;br /&gt;
La conception de sextoys doit respecter différents règles, notamment sanitaires. C'est pourquoi nous nous sommes intéressés à l'utilisation de silicone pour ce projet. Nous avons notamment rencontré un ingénieur compétant dans ce domaine afin de nous aiguiller sur cette éventuelle conception.&lt;br /&gt;
&lt;br /&gt;
La conception passera également par une conception 3D que nous effectuerons à l'aide d'imprimantes 3D au fabricarium de Polytech Lille.&lt;br /&gt;
&lt;br /&gt;
Enfin, les prototypes seront embarqués de cartes électroniques (aussi appelés PCB) que nous constituerons.&lt;br /&gt;
&lt;br /&gt;
===Choix du silicone, rencontre avec Mario Sanz===&lt;br /&gt;
&lt;br /&gt;
Le projet nécessite l'utilisation d'une matière souple et non irritante, c'est pourquoi nous avons choisi de nous tourner vers l'utilisation du silicone. Afin de choisir au mieux le produit correspondant à nos besoins, nous avons rencontré Mario Sanz, ingénieur à l'INRIA, qui travail régulièrement avec du silicone.&lt;br /&gt;
&lt;br /&gt;
Ce dernier nous a expliqué les différents points importants sur lesquels nous baser afin de choisir au mieux un produit en accord avec le projet. Ne serait-ce que pour le choix de la dureté, il existe une échelle propre au silicone (&amp;quot;Shore hardness scale&amp;quot;), nous pensions au départ rechercher un silicone le plus mou possible, cependant, il faut savoir que le plus le silicone est mou, plus il a tendance à être &amp;quot;collant&amp;quot;. Finalement, après discutions, un shore de 40A (correspondant à la dureté d'une gomme) suffisamment mince fera l'affaire pour la conception des prototypes.&lt;br /&gt;
&lt;br /&gt;
Il nous a également expliqué que le silicone peut être travaillé à l'aide d'additifs et sous cloche à vide afin d'améliorer le moulage, l'absence de &amp;quot;bulles&amp;quot; sur la surface de la pièce et la souplesse. Nous pouvons cependant travailler sans tout cela car il n'est pas spécialement important, pour notre projet, de rechercher des propriétés physiques homogènes dans tout le sextoy.&lt;br /&gt;
&lt;br /&gt;
Pour ce qui est de la création de moules, nous pourrons les effectuer via imprimante 3D. Il existe un bon nombre de tutoriels sur internet pour s'y référer en cas de soucis.&lt;br /&gt;
&lt;br /&gt;
===Impression 3D===&lt;br /&gt;
&lt;br /&gt;
Pour la création d'objets en 3D, de nombreux outils sont disponibles. Nous avons décidé d'utiliser Tinkercad, un outil qui s'intègre directement au navigateur internet utilisé. &lt;br /&gt;
&lt;br /&gt;
L'avantage d'un tel outil est sa grande communauté qui permet un accès simple et rapide à une multitudes de projets dont on pourrait s'inspirer pour générer nos pièces.&lt;br /&gt;
&lt;br /&gt;
====Création des moules====&lt;br /&gt;
&lt;br /&gt;
A l'aide d'une imprimante 3D, nous pouvons concevoir des moules afin de créer des pièces en silicone. Il s'agit de la manière la plus rapide et accessible pour notre projet.&lt;br /&gt;
&lt;br /&gt;
Cette méthode comporte des désavantages, dont le principal est la présence d'imperfection et de non homogénéité dans les pièces réalisées. Ceci n'a pas de grande importance dans la mesure où nous souhaitons du qualitatif.&lt;br /&gt;
&lt;br /&gt;
====Création d'un prototype====&lt;br /&gt;
&lt;br /&gt;
=====Pénis=====&lt;br /&gt;
&lt;br /&gt;
Afin de visualiser qualitativement la forme et le passage des câbles, un prototype imprimé au Fabricarium de Polytech Lille a été réalisé. &lt;br /&gt;
&lt;br /&gt;
Ce prototype se divise en 3 pièces : un boîtier (pour y loger le PCB), un cylindre (afin de reproduire la forme désirée) et un &amp;quot;tête&amp;quot; qui devait à l'origine être un moule en silicone (pour y loger le PCB du capteur de température).&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Sextoy_penis.png|400px|thumb|center|Prototype 3D pénis]]&lt;br /&gt;
&lt;br /&gt;
===Conception des PCB===&lt;br /&gt;
&lt;br /&gt;
Afin de diminuer un maximum la taille des cartes electroniques, nous utilisons principalement des composants CMS. &lt;br /&gt;
&lt;br /&gt;
La conception des cartes peut-être effectué à l'aide de logicels de CAO tels qu'Altium ou Eagle. Dans notre cas, nous avons utilisé Eagle. &lt;br /&gt;
&lt;br /&gt;
Ce travail consiste à créer une librairie regroupant l'intégralité des composants nécessaires et, ensuite, de  créer un schéma du circuit. Une fois le schéma terminé, il ne restera plus qu'à faire le routage et exporter les fichiers au format &amp;quot;Gerber&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Pour ce projet, nous aurons besoin de deux cartes, une par prototype. Chaque carte embarquera des composants similaires, c'est pourquoi nous nous contenterons d'abord d'un seul PCB pour effectuer des tests. Si ces derniers sont concluants, nous pourrons graver le second.&lt;br /&gt;
&lt;br /&gt;
====PCB du pénis====&lt;br /&gt;
&lt;br /&gt;
Le premier PCB imprimé et soudé est celui du pénis. Une première carte avait été imprimé regroupant sur cette dernière : un support pour l'arduino, un accéléromètre, un module bluetooth. &lt;br /&gt;
&lt;br /&gt;
[[Fichier:PCB_penis_VB.png|400px|thumb|center|PCB v1.0]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous avons expérimentés des problèmes dûs aux dimensions de l'accéléromètre, l'utilisation d'un boîtier CMS de type TDFN10 2x2 était optimiste pour la réalisation du projet, compte tenu du matériel à disposition.&lt;br /&gt;
&lt;br /&gt;
C'est pourquoi une seconde carte a été gravée, cette fois sans l'accéléromètre.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:PCB_penis_VF.png|400px|thumb|center|PCB v2.0]]&lt;br /&gt;
&lt;br /&gt;
[[Fichier:PCB_VF.png|400px|thumb|center|PCB v2.0 schema]]&lt;br /&gt;
&lt;br /&gt;
Ce prototype est sensé embarquer un capteur de température que nous avons décidé de mettre sur un PCB à part. Cette carte avait pour but d'être coulé dans le silicone, afin de mesurer la température au plus près de la zone intéressée.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:TEMPERATURE_PCB_VF.png|400px|thumb|center|PCB temperature]]&lt;br /&gt;
&lt;br /&gt;
[[Fichier:TEMPERATURE_VF.png|400px|thumb|center|PCB temperature schema]]&lt;br /&gt;
&lt;br /&gt;
====PCB du vagin====&lt;br /&gt;
&lt;br /&gt;
Compte tenu des soucis rencontrés avec l'accéléromètre, la carte sera gravée afin de pouvoir y plugger un accéléromètre analogique en traversant. Le but étant d'avoir un prototype fonctionnel d'ici la fin du projet.&lt;br /&gt;
&lt;br /&gt;
Nous avons également eu des problèmes avec le module bluetooth utilisé, ce dernier ne pouvant être reconfiguré manuellement par minicom, nous utiliserons le bluetooth HC-05 utilisé pour les essais de code. De même que pour l'accéléromètre, nous prévoirons un endroit pour le plugger sur la carte.&lt;br /&gt;
&lt;br /&gt;
''image PCB vagin''&lt;br /&gt;
&lt;br /&gt;
''Reste à graver le PCB du vagin''&lt;br /&gt;
&lt;br /&gt;
==Gestion des composants==&lt;br /&gt;
===Introduction===&lt;br /&gt;
&lt;br /&gt;
Notre projet implique l'utilisation de capteurs, de servomoteurs et de buzzers, constituant chacun une partie de la programmation embarquée.&lt;br /&gt;
&lt;br /&gt;
Pour cette programmation, nous avons décidé d'utiliser AVR-gcc et ainsi coder les arduinos en C.&lt;br /&gt;
&lt;br /&gt;
Les capteurs utilisés utilisent un protocole de communication IIC (ou I²C, I2C), ce protocole de multiples avantages que nous expliciterons par la suite. Cependant, comme un des capteurs (l'accéléromètre) prévus initialement nous a causé beaucoup de soucis, nous expliciterons également la mesure à l'aide de capteurs analogiques. Ces différents capteurs nous permettront de mesurer l'excitation d'un utilisateur.&lt;br /&gt;
&lt;br /&gt;
Une fois l'excitation mesurée, il faut induire une réponse &amp;quot;physique&amp;quot;. Pour ce faire, nous utilisons d'une part des servomoteurs dans le but de produire une sensation de massage.&lt;br /&gt;
&lt;br /&gt;
D'autre part, nous utilisons également des buzzers.&lt;br /&gt;
&lt;br /&gt;
===Utilisation des capteurs===&lt;br /&gt;
&lt;br /&gt;
====Capteurs par IIC====&lt;br /&gt;
&lt;br /&gt;
Le choix de l'IIC n'était pas anodins. L'IIC permet, pour un bus de seulement deux fils, d'utiliser un nombre important de capteurs. Ainsi, si nous décidions au cours du projet de rajouter tel ou tel capteurs, nous n'avions qu'à les greffer à ce bus IIC. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Capteurs analogique====&lt;br /&gt;
&lt;br /&gt;
Comme dit précédemment, nous avons abandonné l'utilisation de l’accéléromètre IIC prévu initialement dans le vagin car nous n'avons pas réussi à le souder sur les cartes du pénis. Nous avons donc utilisé ce qui était à notre disposition à savoir un capteur analogique.&lt;br /&gt;
&lt;br /&gt;
La mesure analogique sous AVR se fait simplement via l'utilisation de la fonction ad_sample(numéro de la broche analogique lue). Elle renvoie directement une valeur entre 0 et 255 correspondant à une conversion analogique-numérique de la tension sur la broche lue du capteur.&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
===Contrôle des servomoteurs===&lt;br /&gt;
&lt;br /&gt;
Un servomoteur se contrôle à l'aide d'un signal PWM (Pulse Width Modulation). Ce signal consiste à modifier la largeur de l'impulsion en fonction de la consigne désirée. &lt;br /&gt;
&lt;br /&gt;
La génération de PWM via microcontrôleur se fait à l'aide de TIMERS. Il faut savoir qu'il existe une priorité dans les interruptions, pour un TIMER_X donné, plus le X est proche de 0, plus l'interruption sera prioritaire. Nos signaux PWM se doivent d'être le plus en accord avec nos consignes, c'est pourquoi nous avons choisi d'utiliser les TIMER les plus prioritaires pour les générer. (TIMER0 et TIMER1)&lt;br /&gt;
&lt;br /&gt;
====PWM sur un seul servomoteur====&lt;br /&gt;
&lt;br /&gt;
Notre première manière de procéder consistait à générer la PWM nous même à l'aide du vecteur d'interruption d'un TIMER. La méthode consistait à compter de 0 à 255 en permanence. Lorsque le compteur était inférieur à la consigne, on passait une sortie à l'état haut, sinon elle restait à l'état bas. &lt;br /&gt;
&lt;br /&gt;
Cette méthode simulait plutôt bien le signal PWM et avait pour avantage d'être utilisable pour n'importe quelle de l'arduino. Cependant, cette méthode a le gros désavantage d'être sensible à l'utilisation d'autres interruptions, rendant le TIMER imprécis.&lt;br /&gt;
&lt;br /&gt;
Or, notre projet utilisera d'autres procédures d'interruption. Nous avons donc décidé d'utiliser une méthode plus simple mais nous restreignant sur le choix de nos sorties.&lt;br /&gt;
&lt;br /&gt;
En effet, un atmega possède des registres que l'on peut configurer pour générer des signaux PWM sur des broches spécifiques.&lt;br /&gt;
&lt;br /&gt;
Ainsi, en configurant le registre TCCR0A à 0x81 et TCCR0B à 0x05, on se place en mode PWM non inversée à fréquence élevée. En résumé, cette configuration nous permet de faire varier les signaux PWM en introduisant une consigne dans le registre OCR0A.&lt;br /&gt;
&lt;br /&gt;
Ainsi, nous pouvons donc contrôler le moteur simplement en changeant la consigne dans OCR0A.&lt;br /&gt;
&lt;br /&gt;
====Tests====&lt;br /&gt;
&lt;br /&gt;
Dans un premier lieu, les moteurs servomoteurs ne recevaient pas les consignes. Nous pensions que le fait que la PWM soit en 3V3 était l'origine du problème. Nous avons donc fait le montage à l'aide d'un transistor NPN monté en saturé. Le problème n'a pas été résolu. &lt;br /&gt;
&lt;br /&gt;
Finalement, le soucis viendrait du fait que les tests étaient effectués avec des valeurs du registre OCR0A à 0 (pwm nulle). Nous n'aurons donc pas besoin d'un montage à transistor pour le PCB.&lt;br /&gt;
&lt;br /&gt;
Le but des servomoteurs est d'effectuer un semblant de massage, nous allons donc modifier le code afin d'effectuer la tâche de manière périodique via l'utilisation d'un TIMER.&lt;br /&gt;
&lt;br /&gt;
====Gestion d'un ensemble de servomoteurs====&lt;br /&gt;
&lt;br /&gt;
Dans le vagin, nous utilisons 4 servomoteurs afin de masser l'utilisateur. Nous avons trouvé intéressant de diviser ces moteurs en deux couples afin d'intensifier ou non ce massage en fonction des seuils d'excitation détectés par les capteurs.&lt;br /&gt;
&lt;br /&gt;
Pour ce faire, nous aurons besoin de deux signaux PWM différents, donc de l'utilisation de deux timers configurés en PWM. &lt;br /&gt;
&lt;br /&gt;
Comme dit en introduction de cette section, nous nous imposons l'utilisation du TIMER1 pour cette deuxième PWM. Il existe une différence dans la configuration de cette dernière dans la mesure où le signal peut recevoir des consignes allant de 8 à 16bits en fonction de la configuration. Afin de simplifier les choses, nous avons configuré cette dernière sur 8bits pour lui envoyer les mêmes consignes que pour le TIMER0.&lt;br /&gt;
&lt;br /&gt;
====Tests====&lt;br /&gt;
&lt;br /&gt;
Avant tout, nous devions vérifier que la consigne avait une intensité suffisante pour être envoyée sur deux servomoteurs en même temps. Ce qui était le cas.&lt;br /&gt;
&lt;br /&gt;
Ensuite, nous avons testés des changements de consignes plus ou moins rapides afin de déterminer ce qui répondrait le mieux à nos attentes.&lt;br /&gt;
&lt;br /&gt;
Les tests concluants, nous pouvions passer à la suite.&lt;br /&gt;
&lt;br /&gt;
===Utilisation des buzzers===&lt;br /&gt;
&lt;br /&gt;
En fonction du niveau d'excitation, nous ferons vibrer un ou deux buzzers. Pour ce faire, nous avons fait le choix de souder leur broche GND au GND de nos cartes et ainsi souder leur potentiel VCC à une broche de l'arduino. Ainsi, si nous plaçons la broche à l'état bas, le tension dans le buzzer est nulle et si nous passons la broche à l'état haut, la tension aux bornes du buzzers devient 3.3V et il vibre.&lt;br /&gt;
&lt;br /&gt;
Pour ce faire, nous utilisons simplement deux broches, ici PXX et PXX, que nous avons initialisés en tant que sorties en mettant à un leur bit correspondant dans le registre DDRX. Ainsi, il ne reste plus qu'à commander la valeur haute ou basse de ces broches en mettant à 1 ou 0 leur bit dans le registre PORTX.&lt;br /&gt;
&lt;br /&gt;
====Tests====&lt;br /&gt;
&lt;br /&gt;
Ceci a été testé sur breadboard et était fonctionnel. Cependant, une chose à quoi nous n'avions pas pensé était que lorsque nous les avons soudés sur le PCB, nous aurions dû utiliser des câbles plus épais, car comme nous n'avions pas de prototype sur quoi coller les buzzers, l'un des buzzers s'est arraché de la carte en vibrant.&lt;br /&gt;
&lt;br /&gt;
===Résumé===&lt;br /&gt;
&lt;br /&gt;
==Gestion de la communication bluetooth==&lt;br /&gt;
===Introduction===&lt;br /&gt;
Dans le cadre de notre projet, la communication entre le sextoy et le téléphone se fera à faible portée. C'est pourquoi nous avons considéré comme intéressante l'utilisation de la technologie bluetooth.&lt;br /&gt;
&lt;br /&gt;
La première partie consiste à coder une librairie au niveau de l'arduino. Cette librairie, codée en C, consiste simplement en une lecture / écriture via les broches RX/TX de l'arduino et du module bluetooth. &lt;br /&gt;
&lt;br /&gt;
La seconde partie conssite à coder la partie application mobile qui communiquera avec la arduino.&lt;br /&gt;
&lt;br /&gt;
Une fois que cette transmission sera mise en place, il ne reste plus qu'à expliciter le protocole des paquets transmis.&lt;br /&gt;
&lt;br /&gt;
===Arduino===&lt;br /&gt;
&lt;br /&gt;
Afin de communiquer à travers le module bluetooth, il faut relier la broche RX de l'arduino à celle TX du module bluetooth et inversement. Pour tester nos codes, nous avons utilisé un module bluetooth HC-06 et l'application [https://play.google.com/store/apps/details?id=Qwerty.BluetoothTerminal&amp;amp;hl=fr| Bluetooth Terminal]. &lt;br /&gt;
&lt;br /&gt;
Dans la mesure où l'arduino devra traiter l'arrivée asynchrone de messages tout en effectuant le traitement des capteurs, il est intéressant d'effectuer des lectures à l'aide d'interruptions. Pour cela, nous utilisons le vecteur d'interruption USART_RXC_vect qui déclenchera la fonction de lecture d'un paquet à chaque fois qu'un message est reçu.&lt;br /&gt;
&lt;br /&gt;
''Actuellement, la librarie est fonctionnelle, il ne reste plus qu'à faire l'utilisation par interruption.''&lt;br /&gt;
&lt;br /&gt;
===Application mobile===&lt;br /&gt;
===Protocole de transmission===&lt;br /&gt;
===Module bluetooth utilisé===&lt;br /&gt;
&lt;br /&gt;
Le module bluetooth embarqué sur le PCB est un module reprogrammable. Ainsi il était nécessaire de connaître la configuration par défaut du composant, dans le but de savoir s'il fallait ou non prévoir un pcb de reconfiguration.&lt;br /&gt;
&lt;br /&gt;
Le CYBLE-012012 est configuré par défaut avec le firmware &amp;quot;EZ-Serial BLE Firmware&amp;quot;. La configuration par défaut de ce firmware est la suivante : &lt;br /&gt;
&lt;br /&gt;
* 115200 baud, 8bits de donnée, pas de bit de parité, 1bit de stop&lt;br /&gt;
* &amp;quot;UART flow control&amp;quot; désactivé&lt;br /&gt;
* firmware activé en mode &amp;quot;auto-start&amp;quot;, qui correspond à une recherche automatique de connection bluetooth et de redirection RX-TX en cas de connection&lt;br /&gt;
&lt;br /&gt;
Ces [http://www.cypress.com/file/285326/download| informations] sont importantes car, si elles sont vraiment respectées, nous n'auront pas à créer notre propre kit de développement, ce qui est un gain de temps considérable.&lt;br /&gt;
&lt;br /&gt;
Qui plus est, l'utilisation d'une fonction &amp;quot;auto-start&amp;quot; est en adéquation avec le module bluetooth HC-05 utilisé pour les tests. Nous pouvons donc commencer la programmation mobile du bluetooth en parallèle de l'impression des pcb. Et, dans le cas où les pcb seraient disfonctionnels, nous pourront quand meme envisager un prototype sur breadboard.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Test====&lt;br /&gt;
&lt;br /&gt;
Après avoir alimenté la carte, nous n'avons pas pu nous connecter au module bluetooth, ce dernier n'étant même pas visible dans les appareils alentours. &lt;br /&gt;
&lt;br /&gt;
Nous avons alors vérifié si la carte était correctement alimentée. Pour ce faire, nous avons mesuré différents points de tensions sensé être mis par défaut en PULL-DOWN ou PULL-UP à des niveaux de tensions d'1.7V. Ces niveaux étaient respectés. Le problème n'est donc pas d'ordre électronique. &lt;br /&gt;
&lt;br /&gt;
Par la suite, nous avons voulu vérifier la communication du module. Ce dernier, en déclenchant l'auto start est sensé émettre (en suivant le protocole UART rappelé précédemment) un message START. Nous avons donc inspecté ceci en utilisant minicom. En effet, minicom reçoit un message, mais ne sait pas le déchiffré. Qui plus est, impossible d'envoyer un message au module afin de le reprogrammer (de manière similaire à un XBee).&lt;br /&gt;
&lt;br /&gt;
Devant ces soucis, nous décidons donc d'abandonner ce module bluetooth et de poursuivre avec celui utilisé pour les essais de programmation, le HC-05.&lt;br /&gt;
&lt;br /&gt;
==Conception de l'application Android==&lt;br /&gt;
===Envoie et réception de SMS===&lt;br /&gt;
Afin de ne pas utiliser de serveur, les deux appareils Android doivent synchroniser l'envoi de paquet UDP, pour cela nous avons voulu utiliser des SMS.&lt;br /&gt;
Les SMS permettent d'envoyer des informations, comme les adresses IP, les ports utilisés, l'heure à laquelle les deux téléphones vont envoyer leur premier paquet UDP.&lt;br /&gt;
&lt;br /&gt;
Dans un premier temps nous avons créer une application pour envoyer les SMS:&lt;br /&gt;
&lt;br /&gt;
L'application était très simple, l'envoi de SMS se faisait en deux lignes&lt;br /&gt;
  // initialisation d'une variable sms gérant les sms&lt;br /&gt;
  SmsManager sms = SmsManager.getDefault() ;&lt;br /&gt;
  // envoie un sms comportant le texte de la variable message de type String au numéro contenu dans la variable num de type String&lt;br /&gt;
  sms.sendTextMessage(num, null, message, null, null);&lt;br /&gt;
&lt;br /&gt;
Dans un deuxième temps il fallait recevoir un SMS, ou plutôt savoir qu'un nouvel SMS avait été reçu :&lt;br /&gt;
&lt;br /&gt;
Pour cela il fallait utiliser un thread qui était appelé par interruption avec la réception d'un SMS comme vecteur d’interruption.&lt;br /&gt;
Ce thread effectuait ce qui était demandé dans sa fonction onReceive(), comme par exemple lire les informations contenues dans le SMS:&lt;br /&gt;
  public class IncomingSms extends BroadcastReceiver {&lt;br /&gt;
     final SmsManager sms = SmsManager.getDefault();&lt;br /&gt;
     public void onReceive(Context context, Intent intent) {&lt;br /&gt;
       //Ce qui doit etre fait lors de la reception de SMS&lt;br /&gt;
     }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Malheureusement ce programme ne marchait pas pendant des semaines, malgré de nombreuses modifications et de nombreux essais. Et le problème semblait être ma carte SIM, car en changeant de SIM, tous les programmes contenant ce code fonctionnaient parfaitement.&lt;br /&gt;
&lt;br /&gt;
===Protocole UDP===&lt;br /&gt;
Afin d'effectuer un échange de données entre les deux sextoys, mais aussi pour effectuer une vidéo-conférence, nous avons choisi d'utiliser le protocole UDP.&lt;br /&gt;
&lt;br /&gt;
Une première application permettait de tester l'envoi de paquet UDP, pour cela un serveur UDP a été utilisé sur un PC.&lt;br /&gt;
Le serveur attendait un message et l'affichait quand il le recevait.&lt;br /&gt;
&lt;br /&gt;
Une fois que tout fonctionnait comme il le fallait, nous avons pu créer une application qui comportait l'envoi et la réception de paquet.&lt;br /&gt;
En mettant l'application sur deux téléphones on pouvait tester si tout fonctionnait.&lt;br /&gt;
Les tests ont seulement été effectué sur un réseau local, on ne sait pas pour le moment si des box internet pourraient empêcher la transmission.&lt;br /&gt;
L'application est composé de un thread d'écoute, un thread d'envoi et d'un thread principal gérant l'affichage et appelant le thread d'envoi lorsque que le bouton de l'application est appuyé.&lt;br /&gt;
&lt;br /&gt;
===Application principale===&lt;br /&gt;
Afin d'être ergonomique,l'application doit pouvoir enregistrer des contacts, pour plus facilement communiquer avec eux.&lt;br /&gt;
Nous avons choisi de ne pas utiliser les contacts du téléphone, pour pouvoir avoir des contacts &amp;quot;confidentiels&amp;quot; qui ne seront que dans la base de donnée de l'application.&lt;br /&gt;
&lt;br /&gt;
Il fallait donc créer une base de donnée, nous avons donc utilisé SQLite car cette bibliothèque est utilisée par Android comme base de données embarquée.&lt;br /&gt;
La base ne comporte qu'une seule table, avec seulement les pseudos et les numéros de téléphone.&lt;br /&gt;
&lt;br /&gt;
Une fois la base crée, pour interagir avec, nous avons coder des activités:&lt;br /&gt;
&lt;br /&gt;
- Ajout de contact:&lt;br /&gt;
&lt;br /&gt;
Il faut entrer dans les champs de textes les informations pour la base de données,puis appuyer sur le bouton &amp;quot;Ajouter&amp;quot; pour créer un nouveau contact dans la base de donnée.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:AjoutContact.png]]&lt;br /&gt;
&lt;br /&gt;
-Fiche de Contact: &lt;br /&gt;
&lt;br /&gt;
Affiche le pseudo et le numéro de téléphone dans les &amp;quot;TextView&amp;quot;, et permet de : supprimer le contact en cliquant sur la croix, envoyer un SMS en cliquant sur l'icone &amp;quot;Message&amp;quot;, mais aussi commencer une communication UDP en cliquant sur le téléphone.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:FicheContact.png]]&lt;br /&gt;
&lt;br /&gt;
-Liste de contact :&lt;br /&gt;
&lt;br /&gt;
Affiche la liste de contacts, en cliquant sur un des contacts on arrive sur la page Fiche de Contact, et en cliquant sur le plus on arrive sur la page Ajout de Contact.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:ListView.png]]&lt;br /&gt;
&lt;br /&gt;
== Rapport et codes ==&lt;br /&gt;
&lt;br /&gt;
Rapport : [[Fichier:CR_sextoy_connecte.pdf]]&lt;br /&gt;
&lt;br /&gt;
[https://archives.plil.fr/croussel/Projet_sextoy_connecte.git Codes]&lt;/div&gt;</summary>
		<author><name>Tstieven</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Fichier:ListView.png&amp;diff=42806</id>
		<title>Fichier:ListView.png</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Fichier:ListView.png&amp;diff=42806"/>
				<updated>2017-05-20T14:33:03Z</updated>
		
		<summary type="html">&lt;p&gt;Tstieven : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Tstieven</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Fichier:FicheContact.png&amp;diff=42805</id>
		<title>Fichier:FicheContact.png</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Fichier:FicheContact.png&amp;diff=42805"/>
				<updated>2017-05-20T14:32:48Z</updated>
		
		<summary type="html">&lt;p&gt;Tstieven : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Tstieven</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Fichier:AjoutContact.png&amp;diff=42803</id>
		<title>Fichier:AjoutContact.png</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Fichier:AjoutContact.png&amp;diff=42803"/>
				<updated>2017-05-20T14:31:11Z</updated>
		
		<summary type="html">&lt;p&gt;Tstieven : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Tstieven</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=IMA4_2016/2017_P14&amp;diff=42796</id>
		<title>IMA4 2016/2017 P14</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=IMA4_2016/2017_P14&amp;diff=42796"/>
				<updated>2017-05-20T14:16:13Z</updated>
		
		<summary type="html">&lt;p&gt;Tstieven : /* Feuille d'heures */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Projet IMA4 : Sex-toy connecté =&lt;br /&gt;
&lt;br /&gt;
== Présentation du projet ==&lt;br /&gt;
&lt;br /&gt;
L'objectif de ce projet est de développer un système d'échange entre deux partenaires distants afin de rendre plus facile la vie de couple à distance.&lt;br /&gt;
&lt;br /&gt;
Pour ce faire, le dispositif sera constitué de deux sextoys connectés (un par appareil génital désiré) à leur téléphone portable respectif. Une application mobile permettra aux utilisateurs de s'échanger des données de manière sécurisé, ceci au travers d'un serveur embarqué dans le téléphone portable.&lt;br /&gt;
&lt;br /&gt;
Les données échangées pourront être l'accélération ou la température. Elles seront traitées et transmises au sextoy qui adaptera sa vitesse, son retour vibratoire ou sa position en conséquence.&lt;br /&gt;
&lt;br /&gt;
Les sextoys pourraient être composés de :&lt;br /&gt;
* Pour l'appareil masculin (dédié à la femme) :&lt;br /&gt;
:* un servomoteur ;&lt;br /&gt;
:* un vibreur ;&lt;br /&gt;
:* une sonde de température ;&lt;br /&gt;
:* un accéléromètre.&lt;br /&gt;
* Pour l'appareil féminin (dédié à l'homme) :&lt;br /&gt;
:* 4 servomoteurs (dans le but de &amp;quot;masser&amp;quot; en déplaçant le silicone);&lt;br /&gt;
:* des vibreurs ;&lt;br /&gt;
:* un accéléromètre.&lt;br /&gt;
* Pour les deux appareils :&lt;br /&gt;
:* un micro-contrôleur (Arduino mini) ;&lt;br /&gt;
:* un module de transmission / réception bluetooth afin de se connecter au téléphone ;&lt;br /&gt;
:* du silicone.&lt;br /&gt;
	&lt;br /&gt;
* L'application mobile devra :&lt;br /&gt;
:* mettre en place une communication cryptée à travers un serveur (embarqué ou bien intermédiaire ?) ;&lt;br /&gt;
:* effectuer un échange de données en bluetooth avec le sextoy connecté.&lt;br /&gt;
&lt;br /&gt;
* L'application mobile pourra :&lt;br /&gt;
:* utiliser la vidéo-conférence ;&lt;br /&gt;
:* enregistrer les meilleurs moments et enventuellement pouvoir les partager ;&lt;br /&gt;
:* effectuer une recherche de partenaire aléatoire.&lt;br /&gt;
&lt;br /&gt;
* S'il nous reste du temps, il peut être envisageable de :&lt;br /&gt;
:* mettre en place un réseau social interne à Polytech.&lt;br /&gt;
&lt;br /&gt;
== Liste des tâches ==&lt;br /&gt;
* Conception de l'appareil masculin (Cédric)&lt;br /&gt;
:* mettre en place le bus I2C avec les différents capteurs ;&lt;br /&gt;
:* création d'un PCB au format gerber ;&lt;br /&gt;
:* création d'un prototype.&lt;br /&gt;
&lt;br /&gt;
* Conception de l'appareil féminin (Cédric)&lt;br /&gt;
:* mettre en place le bus I2C ;&lt;br /&gt;
:* traitement des données afin d'en déduire la position et l'entrain de l'utilisateur ;&lt;br /&gt;
:* création d'un PCB ;&lt;br /&gt;
:* création d'un prototype.&lt;br /&gt;
&lt;br /&gt;
* Communication bluetooth (Cédric et Thomas)&lt;br /&gt;
:* étudier l'émission/réception vue de l'arduino ;&lt;br /&gt;
:* étudier l'émission/réception vue du téléphone ;&lt;br /&gt;
:* mise en place du protocole ;&lt;br /&gt;
:* test de portée.&lt;br /&gt;
&lt;br /&gt;
* Développement mobile (Thomas)&lt;br /&gt;
:* déterminer la meilleure approche : utilisation d'un serveur intermédiaire ou bien mise en place d'un &amp;quot;client-serveur&amp;quot; dans l'application mobile ;&lt;br /&gt;
:* mettre en place le choix retenu ;&lt;br /&gt;
:* tester dans un premier temps une transmission de texte ;&lt;br /&gt;
:* programmer le traitement de données reçues par bluetooth ;&lt;br /&gt;
:* rajouter un côté esthétique à l'application.&lt;br /&gt;
&lt;br /&gt;
==Feuille d'heures==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Tâche !! Prélude !! Heures S1 !! Heures S2 !! Heures S3 !! Heures S4 !! Heures vacances !! Heures S5 !! Heures S6 !! Heures S7 !! Heures S8 !! Heures S9 !! Heures S10 !! Heures vacances et après!! Total&lt;br /&gt;
|-&lt;br /&gt;
| Définition cahier des charges &lt;br /&gt;
| 2H&lt;br /&gt;
| 2H&lt;br /&gt;
| 1H&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 5H&lt;br /&gt;
|-&lt;br /&gt;
| Dimensionnement et établissement de la liste de matériel&lt;br /&gt;
| &lt;br /&gt;
| 3H&lt;br /&gt;
| 4H&lt;br /&gt;
|&lt;br /&gt;
| 4H&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 11H&lt;br /&gt;
|-&lt;br /&gt;
| Établissement de la liste et de la répartition des tâches&lt;br /&gt;
| 1H&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 1H&lt;br /&gt;
|-&lt;br /&gt;
| Appareil masculin : programmation&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 1H&lt;br /&gt;
| 2H&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 6H&lt;br /&gt;
| 9H &lt;br /&gt;
|-&lt;br /&gt;
| Appareil masculin : étude des datasheets&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 1H&lt;br /&gt;
| 1H&lt;br /&gt;
|&lt;br /&gt;
| 4H&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| 1H&lt;br /&gt;
|&lt;br /&gt;
| 7H&lt;br /&gt;
|-&lt;br /&gt;
| Appareil masculin : PCB&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 4H&lt;br /&gt;
| 4H&lt;br /&gt;
| 6H&lt;br /&gt;
| 30H&lt;br /&gt;
| 44H&lt;br /&gt;
|-&lt;br /&gt;
| Appareil masculin : 3D&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| 6H&lt;br /&gt;
| 6H&lt;br /&gt;
|-&lt;br /&gt;
| Conception de l'appareil féminin&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 2H&lt;br /&gt;
| 1H&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 3H&lt;br /&gt;
|-&lt;br /&gt;
| Liaison bluetooth (embarqué)&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 3H&lt;br /&gt;
| 1H&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 8H&lt;br /&gt;
| 12H&lt;br /&gt;
|-&lt;br /&gt;
| Liaison bluetooth (téléphone)&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 15H&lt;br /&gt;
| 15H&lt;br /&gt;
|-&lt;br /&gt;
| Recherche et discussion autour de la meilleure approche de communication&lt;br /&gt;
| 2H&lt;br /&gt;
| 2H&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 4H&lt;br /&gt;
|-&lt;br /&gt;
| Synchronisation temporelle des téléphones (par sms)&lt;br /&gt;
| &lt;br /&gt;
| 2H&lt;br /&gt;
| 4H&lt;br /&gt;
| 6H&lt;br /&gt;
| 8H&lt;br /&gt;
| 6H&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 26H&lt;br /&gt;
|-&lt;br /&gt;
| Transmission de paquets UDP&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 4H&lt;br /&gt;
| 4H&lt;br /&gt;
| 4H&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 6H&lt;br /&gt;
| 18H&lt;br /&gt;
|-&lt;br /&gt;
| Streaming video(UDP)&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 4H&lt;br /&gt;
| 4H&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 8H&lt;br /&gt;
|-&lt;br /&gt;
| Application et bases de données&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 6H&lt;br /&gt;
| 20H&lt;br /&gt;
| 26H&lt;br /&gt;
|-&lt;br /&gt;
| Total&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 195H&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Conception des sextoys==&lt;br /&gt;
===Introduction===&lt;br /&gt;
&lt;br /&gt;
La conception de sextoys doit respecter différents règles, notamment sanitaires. C'est pourquoi nous nous sommes intéressés à l'utilisation de silicone pour ce projet. Nous avons notamment rencontré un ingénieur compétant dans ce domaine afin de nous aiguiller sur cette éventuelle conception.&lt;br /&gt;
&lt;br /&gt;
La conception passera également par une conception 3D que nous effectuerons à l'aide d'imprimantes 3D au fabricarium de Polytech Lille.&lt;br /&gt;
&lt;br /&gt;
Enfin, les prototypes seront embarqués de cartes électroniques (aussi appelés PCB) que nous constituerons.&lt;br /&gt;
&lt;br /&gt;
===Choix du silicone, rencontre avec Mario Sanz===&lt;br /&gt;
&lt;br /&gt;
Le projet nécessite l'utilisation d'une matière souple et non irritante, c'est pourquoi nous avons choisi de nous tourner vers l'utilisation du silicone. Afin de choisir au mieux le produit correspondant à nos besoins, nous avons rencontré Mario Sanz, ingénieur à l'INRIA, qui travail régulièrement avec du silicone.&lt;br /&gt;
&lt;br /&gt;
Ce dernier nous a expliqué les différents points importants sur lesquels nous baser afin de choisir au mieux un produit en accord avec le projet. Ne serait-ce que pour le choix de la dureté, il existe une échelle propre au silicone (&amp;quot;Shore hardness scale&amp;quot;), nous pensions au départ rechercher un silicone le plus mou possible, cependant, il faut savoir que le plus le silicone est mou, plus il a tendance à être &amp;quot;collant&amp;quot;. Finalement, après discutions, un shore de 40A (correspondant à la dureté d'une gomme) suffisamment mince fera l'affaire pour la conception des prototypes.&lt;br /&gt;
&lt;br /&gt;
Il nous a également expliqué que le silicone peut être travaillé à l'aide d'additifs et sous cloche à vide afin d'améliorer le moulage, l'absence de &amp;quot;bulles&amp;quot; sur la surface de la pièce et la souplesse. Nous pouvons cependant travailler sans tout cela car il n'est pas spécialement important, pour notre projet, de rechercher des propriétés physiques homogènes dans tout le sextoy.&lt;br /&gt;
&lt;br /&gt;
Pour ce qui est de la création de moules, nous pourrons les effectuer via imprimante 3D. Il existe un bon nombre de tutoriels sur internet pour s'y référer en cas de soucis.&lt;br /&gt;
&lt;br /&gt;
===Impression 3D===&lt;br /&gt;
&lt;br /&gt;
Pour la création d'objets en 3D, de nombreux outils sont disponibles. Nous avons décidé d'utiliser Tinkercad, un outil qui s'intègre directement au navigateur internet utilisé. &lt;br /&gt;
&lt;br /&gt;
L'avantage d'un tel outil est sa grande communauté qui permet un accès simple et rapide à une multitudes de projets dont on pourrait s'inspirer pour générer nos pièces.&lt;br /&gt;
&lt;br /&gt;
====Création des moules====&lt;br /&gt;
&lt;br /&gt;
A l'aide d'une imprimante 3D, nous pouvons concevoir des moules afin de créer des pièces en silicone. Il s'agit de la manière la plus rapide et accessible pour notre projet.&lt;br /&gt;
&lt;br /&gt;
Cette méthode comporte des désavantages, dont le principal est la présence d'imperfection et de non homogénéité dans les pièces réalisées. Ceci n'a pas de grande importance dans la mesure où nous souhaitons du qualitatif.&lt;br /&gt;
&lt;br /&gt;
====Création d'un prototype====&lt;br /&gt;
&lt;br /&gt;
=====Pénis=====&lt;br /&gt;
&lt;br /&gt;
Afin de visualiser qualitativement la forme et le passage des câbles, un prototype imprimé au Fabricarium de Polytech Lille a été réalisé. &lt;br /&gt;
&lt;br /&gt;
Ce prototype se divise en 3 pièces : un boîtier (pour y loger le PCB), un cylindre (afin de reproduire la forme désirée) et un &amp;quot;tête&amp;quot; qui devait à l'origine être un moule en silicone (pour y loger le PCB du capteur de température).&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Sextoy_penis.png|400px|thumb|center|Prototype 3D pénis]]&lt;br /&gt;
&lt;br /&gt;
===Conception des PCB===&lt;br /&gt;
&lt;br /&gt;
Afin de diminuer un maximum la taille des cartes electroniques, nous utilisons principalement des composants CMS. &lt;br /&gt;
&lt;br /&gt;
La conception des cartes peut-être effectué à l'aide de logicels de CAO tels qu'Altium ou Eagle. Dans notre cas, nous avons utilisé Eagle. &lt;br /&gt;
&lt;br /&gt;
Ce travail consiste à créer une librairie regroupant l'intégralité des composants nécessaires et, ensuite, de  créer un schéma du circuit. Une fois le schéma terminé, il ne restera plus qu'à faire le routage et exporter les fichiers au format &amp;quot;Gerber&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Pour ce projet, nous aurons besoin de deux cartes, une par prototype. Chaque carte embarquera des composants similaires, c'est pourquoi nous nous contenterons d'abord d'un seul PCB pour effectuer des tests. Si ces derniers sont concluants, nous pourrons graver le second.&lt;br /&gt;
&lt;br /&gt;
====PCB du pénis====&lt;br /&gt;
&lt;br /&gt;
Le premier PCB imprimé et soudé est celui du pénis. Une première carte avait été imprimé regroupant sur cette dernière : un support pour l'arduino, un accéléromètre, un module bluetooth. &lt;br /&gt;
&lt;br /&gt;
[[Fichier:PCB_penis_VB.png|400px|thumb|center|PCB v1.0]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous avons expérimentés des problèmes dûs aux dimensions de l'accéléromètre, l'utilisation d'un boîtier CMS de type TDFN10 2x2 était optimiste pour la réalisation du projet, compte tenu du matériel à disposition.&lt;br /&gt;
&lt;br /&gt;
C'est pourquoi une seconde carte a été gravée, cette fois sans l'accéléromètre.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:PCB_penis_VF.png|400px|thumb|center|PCB v2.0]]&lt;br /&gt;
&lt;br /&gt;
[[Fichier:PCB_VF.png|400px|thumb|center|PCB v2.0 schema]]&lt;br /&gt;
&lt;br /&gt;
Ce prototype est sensé embarquer un capteur de température que nous avons décidé de mettre sur un PCB à part. Cette carte avait pour but d'être coulé dans le silicone, afin de mesurer la température au plus près de la zone intéressée.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:TEMPERATURE_PCB_VF.png|400px|thumb|center|PCB temperature]]&lt;br /&gt;
&lt;br /&gt;
[[Fichier:TEMPERATURE_VF.png|400px|thumb|center|PCB temperature schema]]&lt;br /&gt;
&lt;br /&gt;
====PCB du vagin====&lt;br /&gt;
&lt;br /&gt;
Compte tenu des soucis rencontrés avec l'accéléromètre, la carte sera gravée afin de pouvoir y plugger un accéléromètre analogique en traversant. Le but étant d'avoir un prototype fonctionnel d'ici la fin du projet.&lt;br /&gt;
&lt;br /&gt;
Nous avons également eu des problèmes avec le module bluetooth utilisé, ce dernier ne pouvant être reconfiguré manuellement par minicom, nous utiliserons le bluetooth HC-05 utilisé pour les essais de code. De même que pour l'accéléromètre, nous prévoirons un endroit pour le plugger sur la carte.&lt;br /&gt;
&lt;br /&gt;
''image PCB vagin''&lt;br /&gt;
&lt;br /&gt;
''Reste à graver le PCB du vagin''&lt;br /&gt;
&lt;br /&gt;
==Gestion des composants==&lt;br /&gt;
===Introduction===&lt;br /&gt;
&lt;br /&gt;
Notre projet implique l'utilisation de capteurs, de servomoteurs et de buzzers, constituant chacun une partie de la programmation embarquée.&lt;br /&gt;
&lt;br /&gt;
Pour cette programmation, nous avons décidé d'utiliser AVR-gcc et ainsi coder les arduinos en C.&lt;br /&gt;
&lt;br /&gt;
Les capteurs utilisés utilisent un protocole de communication IIC (ou I²C, I2C), ce protocole de multiples avantages que nous expliciterons par la suite. Cependant, comme un des capteurs (l'accéléromètre) prévus initialement nous a causé beaucoup de soucis, nous expliciterons également la mesure à l'aide de capteurs analogiques. Ces différents capteurs nous permettront de mesurer l'excitation d'un utilisateur.&lt;br /&gt;
&lt;br /&gt;
Une fois l'excitation mesurée, il faut induire une réponse &amp;quot;physique&amp;quot;. Pour ce faire, nous utilisons d'une part des servomoteurs dans le but de produire une sensation de massage.&lt;br /&gt;
&lt;br /&gt;
D'autre part, nous utilisons également des buzzers.&lt;br /&gt;
&lt;br /&gt;
===Utilisation des capteurs===&lt;br /&gt;
&lt;br /&gt;
====Capteurs par IIC====&lt;br /&gt;
&lt;br /&gt;
Le choix de l'IIC n'était pas anodins. L'IIC permet, pour un bus de seulement deux fils, d'utiliser un nombre important de capteurs. Ainsi, si nous décidions au cours du projet de rajouter tel ou tel capteurs, nous n'avions qu'à les greffer à ce bus IIC. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Capteurs analogique====&lt;br /&gt;
&lt;br /&gt;
Comme dit précédemment, nous avons abandonné l'utilisation de l’accéléromètre IIC prévu initialement dans le vagin car nous n'avons pas réussi à le souder sur les cartes du pénis. Nous avons donc utilisé ce qui était à notre disposition à savoir un capteur analogique.&lt;br /&gt;
&lt;br /&gt;
La mesure analogique sous AVR se fait simplement via l'utilisation de la fonction ad_sample(numéro de la broche analogique lue). Elle renvoie directement une valeur entre 0 et 255 correspondant à une conversion analogique-numérique de la tension sur la broche lue du capteur.&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
===Contrôle des servomoteurs===&lt;br /&gt;
&lt;br /&gt;
Un servomoteur se contrôle à l'aide d'un signal PWM (Pulse Width Modulation). Ce signal consiste à modifier la largeur de l'impulsion en fonction de la consigne désirée. &lt;br /&gt;
&lt;br /&gt;
La génération de PWM via microcontrôleur se fait à l'aide de TIMERS. Il faut savoir qu'il existe une priorité dans les interruptions, pour un TIMER_X donné, plus le X est proche de 0, plus l'interruption sera prioritaire. Nos signaux PWM se doivent d'être le plus en accord avec nos consignes, c'est pourquoi nous avons choisi d'utiliser les TIMER les plus prioritaires pour les générer. (TIMER0 et TIMER1)&lt;br /&gt;
&lt;br /&gt;
====PWM sur un seul servomoteur====&lt;br /&gt;
&lt;br /&gt;
Notre première manière de procéder consistait à générer la PWM nous même à l'aide du vecteur d'interruption d'un TIMER. La méthode consistait à compter de 0 à 255 en permanence. Lorsque le compteur était inférieur à la consigne, on passait une sortie à l'état haut, sinon elle restait à l'état bas. &lt;br /&gt;
&lt;br /&gt;
Cette méthode simulait plutôt bien le signal PWM et avait pour avantage d'être utilisable pour n'importe quelle de l'arduino. Cependant, cette méthode a le gros désavantage d'être sensible à l'utilisation d'autres interruptions, rendant le TIMER imprécis.&lt;br /&gt;
&lt;br /&gt;
Or, notre projet utilisera d'autres procédures d'interruption. Nous avons donc décidé d'utiliser une méthode plus simple mais nous restreignant sur le choix de nos sorties.&lt;br /&gt;
&lt;br /&gt;
En effet, un atmega possède des registres que l'on peut configurer pour générer des signaux PWM sur des broches spécifiques.&lt;br /&gt;
&lt;br /&gt;
Ainsi, en configurant le registre TCCR0A à 0x81 et TCCR0B à 0x05, on se place en mode PWM non inversée à fréquence élevée. En résumé, cette configuration nous permet de faire varier les signaux PWM en introduisant une consigne dans le registre OCR0A.&lt;br /&gt;
&lt;br /&gt;
Ainsi, nous pouvons donc contrôler le moteur simplement en changeant la consigne dans OCR0A.&lt;br /&gt;
&lt;br /&gt;
====Tests====&lt;br /&gt;
&lt;br /&gt;
Dans un premier lieu, les moteurs servomoteurs ne recevaient pas les consignes. Nous pensions que le fait que la PWM soit en 3V3 était l'origine du problème. Nous avons donc fait le montage à l'aide d'un transistor NPN monté en saturé. Le problème n'a pas été résolu. &lt;br /&gt;
&lt;br /&gt;
Finalement, le soucis viendrait du fait que les tests étaient effectués avec des valeurs du registre OCR0A à 0 (pwm nulle). Nous n'aurons donc pas besoin d'un montage à transistor pour le PCB.&lt;br /&gt;
&lt;br /&gt;
Le but des servomoteurs est d'effectuer un semblant de massage, nous allons donc modifier le code afin d'effectuer la tâche de manière périodique via l'utilisation d'un TIMER.&lt;br /&gt;
&lt;br /&gt;
====Gestion d'un ensemble de servomoteurs====&lt;br /&gt;
&lt;br /&gt;
Dans le vagin, nous utilisons 4 servomoteurs afin de masser l'utilisateur. Nous avons trouvé intéressant de diviser ces moteurs en deux couples afin d'intensifier ou non ce massage en fonction des seuils d'excitation détectés par les capteurs.&lt;br /&gt;
&lt;br /&gt;
Pour ce faire, nous aurons besoin de deux signaux PWM différents, donc de l'utilisation de deux timers configurés en PWM. &lt;br /&gt;
&lt;br /&gt;
Comme dit en introduction de cette section, nous nous imposons l'utilisation du TIMER1 pour cette deuxième PWM. Il existe une différence dans la configuration de cette dernière dans la mesure où le signal peut recevoir des consignes allant de 8 à 16bits en fonction de la configuration. Afin de simplifier les choses, nous avons configuré cette dernière sur 8bits pour lui envoyer les mêmes consignes que pour le TIMER0.&lt;br /&gt;
&lt;br /&gt;
====Tests====&lt;br /&gt;
&lt;br /&gt;
Avant tout, nous devions vérifier que la consigne avait une intensité suffisante pour être envoyée sur deux servomoteurs en même temps. Ce qui était le cas.&lt;br /&gt;
&lt;br /&gt;
Ensuite, nous avons testés des changements de consignes plus ou moins rapides afin de déterminer ce qui répondrait le mieux à nos attentes.&lt;br /&gt;
&lt;br /&gt;
Les tests concluants, nous pouvions passer à la suite.&lt;br /&gt;
&lt;br /&gt;
===Utilisation des buzzers===&lt;br /&gt;
&lt;br /&gt;
En fonction du niveau d'excitation, nous ferons vibrer un ou deux buzzers. Pour ce faire, nous avons fait le choix de souder leur broche GND au GND de nos cartes et ainsi souder leur potentiel VCC à une broche de l'arduino. Ainsi, si nous plaçons la broche à l'état bas, le tension dans le buzzer est nulle et si nous passons la broche à l'état haut, la tension aux bornes du buzzers devient 3.3V et il vibre.&lt;br /&gt;
&lt;br /&gt;
Pour ce faire, nous utilisons simplement deux broches, ici PXX et PXX, que nous avons initialisés en tant que sorties en mettant à un leur bit correspondant dans le registre DDRX. Ainsi, il ne reste plus qu'à commander la valeur haute ou basse de ces broches en mettant à 1 ou 0 leur bit dans le registre PORTX.&lt;br /&gt;
&lt;br /&gt;
====Tests====&lt;br /&gt;
&lt;br /&gt;
Ceci a été testé sur breadboard et était fonctionnel. Cependant, une chose à quoi nous n'avions pas pensé était que lorsque nous les avons soudés sur le PCB, nous aurions dû utiliser des câbles plus épais, car comme nous n'avions pas de prototype sur quoi coller les buzzers, l'un des buzzers s'est arraché de la carte en vibrant.&lt;br /&gt;
&lt;br /&gt;
===Résumé===&lt;br /&gt;
&lt;br /&gt;
==Gestion de la communication bluetooth==&lt;br /&gt;
===Introduction===&lt;br /&gt;
Dans le cadre de notre projet, la communication entre le sextoy et le téléphone se fera à faible portée. C'est pourquoi nous avons considéré comme intéressante l'utilisation de la technologie bluetooth.&lt;br /&gt;
&lt;br /&gt;
La première partie consiste à coder une librairie au niveau de l'arduino. Cette librairie, codée en C, consiste simplement en une lecture / écriture via les broches RX/TX de l'arduino et du module bluetooth. &lt;br /&gt;
&lt;br /&gt;
La seconde partie conssite à coder la partie application mobile qui communiquera avec la arduino.&lt;br /&gt;
&lt;br /&gt;
Une fois que cette transmission sera mise en place, il ne reste plus qu'à expliciter le protocole des paquets transmis.&lt;br /&gt;
&lt;br /&gt;
===Arduino===&lt;br /&gt;
&lt;br /&gt;
Afin de communiquer à travers le module bluetooth, il faut relier la broche RX de l'arduino à celle TX du module bluetooth et inversement. Pour tester nos codes, nous avons utilisé un module bluetooth HC-06 et l'application [https://play.google.com/store/apps/details?id=Qwerty.BluetoothTerminal&amp;amp;hl=fr| Bluetooth Terminal]. &lt;br /&gt;
&lt;br /&gt;
Dans la mesure où l'arduino devra traiter l'arrivée asynchrone de messages tout en effectuant le traitement des capteurs, il est intéressant d'effectuer des lectures à l'aide d'interruptions. Pour cela, nous utilisons le vecteur d'interruption USART_RXC_vect qui déclenchera la fonction de lecture d'un paquet à chaque fois qu'un message est reçu.&lt;br /&gt;
&lt;br /&gt;
''Actuellement, la librarie est fonctionnelle, il ne reste plus qu'à faire l'utilisation par interruption.''&lt;br /&gt;
&lt;br /&gt;
===Application mobile===&lt;br /&gt;
===Protocole de transmission===&lt;br /&gt;
===Module bluetooth utilisé===&lt;br /&gt;
&lt;br /&gt;
Le module bluetooth embarqué sur le PCB est un module reprogrammable. Ainsi il était nécessaire de connaître la configuration par défaut du composant, dans le but de savoir s'il fallait ou non prévoir un pcb de reconfiguration.&lt;br /&gt;
&lt;br /&gt;
Le CYBLE-012012 est configuré par défaut avec le firmware &amp;quot;EZ-Serial BLE Firmware&amp;quot;. La configuration par défaut de ce firmware est la suivante : &lt;br /&gt;
&lt;br /&gt;
* 115200 baud, 8bits de donnée, pas de bit de parité, 1bit de stop&lt;br /&gt;
* &amp;quot;UART flow control&amp;quot; désactivé&lt;br /&gt;
* firmware activé en mode &amp;quot;auto-start&amp;quot;, qui correspond à une recherche automatique de connection bluetooth et de redirection RX-TX en cas de connection&lt;br /&gt;
&lt;br /&gt;
Ces [http://www.cypress.com/file/285326/download| informations] sont importantes car, si elles sont vraiment respectées, nous n'auront pas à créer notre propre kit de développement, ce qui est un gain de temps considérable.&lt;br /&gt;
&lt;br /&gt;
Qui plus est, l'utilisation d'une fonction &amp;quot;auto-start&amp;quot; est en adéquation avec le module bluetooth HC-05 utilisé pour les tests. Nous pouvons donc commencer la programmation mobile du bluetooth en parallèle de l'impression des pcb. Et, dans le cas où les pcb seraient disfonctionnels, nous pourront quand meme envisager un prototype sur breadboard.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Test====&lt;br /&gt;
&lt;br /&gt;
Après avoir alimenté la carte, nous n'avons pas pu nous connecter au module bluetooth, ce dernier n'étant même pas visible dans les appareils alentours. &lt;br /&gt;
&lt;br /&gt;
Nous avons alors vérifié si la carte était correctement alimentée. Pour ce faire, nous avons mesuré différents points de tensions sensé être mis par défaut en PULL-DOWN ou PULL-UP à des niveaux de tensions d'1.7V. Ces niveaux étaient respectés. Le problème n'est donc pas d'ordre électronique. &lt;br /&gt;
&lt;br /&gt;
Par la suite, nous avons voulu vérifier la communication du module. Ce dernier, en déclenchant l'auto start est sensé émettre (en suivant le protocole UART rappelé précédemment) un message START. Nous avons donc inspecté ceci en utilisant minicom. En effet, minicom reçoit un message, mais ne sait pas le déchiffré. Qui plus est, impossible d'envoyer un message au module afin de le reprogrammer (de manière similaire à un XBee).&lt;br /&gt;
&lt;br /&gt;
Devant ces soucis, nous décidons donc d'abandonner ce module bluetooth et de poursuivre avec celui utilisé pour les essais de programmation, le HC-05.&lt;br /&gt;
&lt;br /&gt;
==Conception de l'application Android==&lt;br /&gt;
===Envoie et réception de SMS===&lt;br /&gt;
Afin de ne pas utiliser de serveur, les deux appareils Android doivent synchroniser l'envoi de paquet UDP, pour cela nous avons voulu utiliser des SMS.&lt;br /&gt;
Les SMS permettent d'envoyer des informations, comme les adresses IP, les ports utilisés, l'heure à laquelle les deux téléphones vont envoyer leur premier paquet UDP.&lt;br /&gt;
&lt;br /&gt;
Dans un premier temps nous avons créer une application pour envoyer les SMS:&lt;br /&gt;
&lt;br /&gt;
L'application était très simple, l'envoi de SMS se faisait en deux lignes&lt;br /&gt;
  // initialisation d'une variable sms gérant les sms&lt;br /&gt;
  SmsManager sms = SmsManager.getDefault() ;&lt;br /&gt;
  // envoie un sms comportant le texte de la variable message de type String au numéro contenu dans la variable num de type String&lt;br /&gt;
  sms.sendTextMessage(num, null, message, null, null);&lt;br /&gt;
&lt;br /&gt;
Dans un deuxième temps il fallait recevoir un SMS, ou plutôt savoir qu'un nouvel SMS avait été reçu :&lt;br /&gt;
&lt;br /&gt;
Pour cela il fallait utiliser un thread qui était appelé par interruption avec la réception d'un SMS comme vecteur d’interruption.&lt;br /&gt;
Ce thread effectuait ce qui était demandé dans sa fonction onReceive(), comme par exemple lire les informations contenues dans le SMS:&lt;br /&gt;
  public class IncomingSms extends BroadcastReceiver {&lt;br /&gt;
     final SmsManager sms = SmsManager.getDefault();&lt;br /&gt;
     public void onReceive(Context context, Intent intent) {&lt;br /&gt;
       //Ce qui doit etre fait lors de la reception de SMS&lt;br /&gt;
     }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Malheureusement ce programme ne marchait pas pendant des semaines, malgré de nombreuses modifications et de nombreux essais. Et le problème semblait être ma carte SIM, car en changeant de SIM, tous les programmes contenant ce code fonctionnaient parfaitement.&lt;br /&gt;
&lt;br /&gt;
===Protocole UDP===&lt;br /&gt;
Afin d'effectuer un échange de données entre les deux sextoys, mais aussi pour effectuer une vidéo-conférence, nous avons choisi d'utiliser le protocole UDP.&lt;br /&gt;
&lt;br /&gt;
Une première application permettait de tester l'envoi de paquet UDP, pour cela un serveur UDP a été utiliser sur un PC.&lt;br /&gt;
Le serveur attendait un message et l'affichait quand il le recevait.&lt;br /&gt;
&lt;br /&gt;
Une fois que tout fonctionnait comme il le fallait, nous avons pu créer une application qui comportait l'envoi et la réception de paquet.&lt;br /&gt;
En mettant l'application sur deux téléphones on pouvait tester si tout fonctionnait.&lt;br /&gt;
Les tests ont seulement été effectué sur un réseau local, on ne sait pas pour le moment si des box internet pourraient empêcher la transmission.&lt;br /&gt;
L'application est composé de un thread d'écoute, un thread d'envoi et d'un thread principal gérant l'affichage et appelant le thread d'envoi lorsque que le bouton de l'application est appuyé.&lt;br /&gt;
&lt;br /&gt;
===Application principale===&lt;br /&gt;
Afin d'être ergonomique,l'application doit pouvoir enregistrer des contacts, des réglages et avoir un menu principal intuitif.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Rapport et codes ==&lt;br /&gt;
&lt;br /&gt;
Rapport : [[Fichier:CR_sextoy_connecte.pdf]]&lt;br /&gt;
&lt;br /&gt;
[https://archives.plil.fr/croussel/Projet_sextoy_connecte.git Codes]&lt;/div&gt;</summary>
		<author><name>Tstieven</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=IMA4_2016/2017_P14&amp;diff=41792</id>
		<title>IMA4 2016/2017 P14</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=IMA4_2016/2017_P14&amp;diff=41792"/>
				<updated>2017-05-09T09:09:55Z</updated>
		
		<summary type="html">&lt;p&gt;Tstieven : /* Protocole UDP */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Projet IMA4 : Sex-toy connecté =&lt;br /&gt;
&lt;br /&gt;
== Présentation du projet ==&lt;br /&gt;
&lt;br /&gt;
L'objectif de ce projet est de développer un système d'échange entre deux partenaires distants afin de rendre plus facile la vie de couple à distance.&lt;br /&gt;
&lt;br /&gt;
Pour ce faire, le dispositif sera constitué de deux sextoys connectés (un par appareil génital désiré) à leur téléphone portable respectif. Une application mobile permettra aux utilisateurs de s'échanger des données de manière sécurisé, ceci au travers d'un serveur embarqué dans le téléphone portable.&lt;br /&gt;
&lt;br /&gt;
Les données échangées pourront être l'accélération ou la température. Elles seront traitées et transmises au sextoy qui adaptera sa vitesse, son retour vibratoire ou sa position en conséquence.&lt;br /&gt;
&lt;br /&gt;
Les sextoys pourraient être composés de :&lt;br /&gt;
* Pour l'appareil masculin (dédié à la femme) :&lt;br /&gt;
:* un servomoteur ;&lt;br /&gt;
:* un vibreur ;&lt;br /&gt;
:* une sonde de température ;&lt;br /&gt;
:* un accéléromètre.&lt;br /&gt;
* Pour l'appareil féminin (dédié à l'homme) :&lt;br /&gt;
:* 4 servomoteurs (dans le but de &amp;quot;masser&amp;quot; en déplaçant le silicone);&lt;br /&gt;
:* des vibreurs ;&lt;br /&gt;
:* un accéléromètre.&lt;br /&gt;
* Pour les deux appareils :&lt;br /&gt;
:* un micro-contrôleur (Arduino mini) ;&lt;br /&gt;
:* un module de transmission / réception bluetooth afin de se connecter au téléphone ;&lt;br /&gt;
:* du silicone.&lt;br /&gt;
	&lt;br /&gt;
* L'application mobile devra :&lt;br /&gt;
:* mettre en place une communication cryptée à travers un serveur (embarqué ou bien intermédiaire ?) ;&lt;br /&gt;
:* effectuer un échange de données en bluetooth avec le sextoy connecté.&lt;br /&gt;
&lt;br /&gt;
* L'application mobile pourra :&lt;br /&gt;
:* utiliser la vidéo-conférence ;&lt;br /&gt;
:* enregistrer les meilleurs moments et enventuellement pouvoir les partager ;&lt;br /&gt;
:* effectuer une recherche de partenaire aléatoire.&lt;br /&gt;
&lt;br /&gt;
* S'il nous reste du temps, il peut être envisageable de :&lt;br /&gt;
:* mettre en place un réseau social interne à Polytech.&lt;br /&gt;
&lt;br /&gt;
== Liste des tâches ==&lt;br /&gt;
* Conception de l'appareil masculin (Cédric)&lt;br /&gt;
:* mettre en place le bus I2C avec les différents capteurs ;&lt;br /&gt;
:* création d'un PCB au format gerber ;&lt;br /&gt;
:* création d'un prototype.&lt;br /&gt;
&lt;br /&gt;
* Conception de l'appareil féminin (Cédric)&lt;br /&gt;
:* mettre en place le bus I2C ;&lt;br /&gt;
:* traitement des données afin d'en déduire la position et l'entrain de l'utilisateur ;&lt;br /&gt;
:* création d'un PCB ;&lt;br /&gt;
:* création d'un prototype.&lt;br /&gt;
&lt;br /&gt;
* Communication bluetooth (Cédric)&lt;br /&gt;
:* étudier l'émission/réception vue de l'arduino ;&lt;br /&gt;
:* étudier l'émission/réception vue du téléphone ;&lt;br /&gt;
:* mise en place du protocole ;&lt;br /&gt;
:* test de portée.&lt;br /&gt;
&lt;br /&gt;
* Développement mobile (Thomas)&lt;br /&gt;
:* déterminer la meilleure approche : utilisation d'un serveur intermédiaire ou bien mise en place d'un &amp;quot;client-serveur&amp;quot; dans l'application mobile ;&lt;br /&gt;
:* mettre en place le choix retenu ;&lt;br /&gt;
:* tester dans un premier temps une transmission de texte ;&lt;br /&gt;
:* programmer le traitement de données reçues par bluetooth ;&lt;br /&gt;
:* rajouter un côté esthétique à l'application.&lt;br /&gt;
==Feuille d'heures==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Tâche !! Prélude !! Heures S1 !! Heures S2 !! Heures S3 !! Heures S4 !! Heures vacances !! Heures S5 !! Heures S6 !! Heures S7 !! Heures S8 !! Heures S9 !! Heures S10 !! Heures vacances !! Total&lt;br /&gt;
|-&lt;br /&gt;
| Définition cahier des charges &lt;br /&gt;
| 2H&lt;br /&gt;
| 2H&lt;br /&gt;
| 1H&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Dimensionnement et établissement de la liste de matériel&lt;br /&gt;
| &lt;br /&gt;
| 3H&lt;br /&gt;
| 4H&lt;br /&gt;
|&lt;br /&gt;
| 4H&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Établissement de la liste et de la répartition des tâches&lt;br /&gt;
| 1H&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Appareil masculin : programmation&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 1H&lt;br /&gt;
| 2H&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Appareil masculin : étude des datasheets&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 1H&lt;br /&gt;
| 1H&lt;br /&gt;
|&lt;br /&gt;
| 4H&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| 1H&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Appareil masculin : PCB&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 4H&lt;br /&gt;
| 4H&lt;br /&gt;
| 6H&lt;br /&gt;
| 10H&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Appareil masculin : 3D&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Conception de l'appareil féminin&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 2H&lt;br /&gt;
| 1H&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Liaison bluetooth (embarqué)&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 3H&lt;br /&gt;
| 1H&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Liaison bluetooth (téléphone)&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Recherche et discussion autour de la meilleure approche de communication&lt;br /&gt;
| 2H&lt;br /&gt;
| 2H&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Synchronisation temporelle des téléphones (par sms)&lt;br /&gt;
| &lt;br /&gt;
| 2H&lt;br /&gt;
| 4H&lt;br /&gt;
| 4H&lt;br /&gt;
| 4H&lt;br /&gt;
| 4H&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Transmission de paquets UDP&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 4H&lt;br /&gt;
| 4H&lt;br /&gt;
| 4H&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Streaming video(UDP)&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 4H&lt;br /&gt;
| 4H&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Application et bases de données&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 4H&lt;br /&gt;
| 4H&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Conception des sextoys==&lt;br /&gt;
===Introduction===&lt;br /&gt;
===Choix du silicone, rencontre avec Mario Sanz===&lt;br /&gt;
&lt;br /&gt;
Le projet nécessite l'utilisation d'une matière souple et non irritante, c'est pourquoi nous avons choisi de nous tourner vers l'utilisation du silicone. Afin de choisir au mieux le produit correspondant à nos besoins, nous avons rencontré Mario Sanz, ingénieur à l'INRIA, qui travail régulièrement avec du silicone.&lt;br /&gt;
&lt;br /&gt;
Ce dernier nous a expliqué les différents points importants sur lesquels nous baser afin de choisir au mieux un produit en accord avec le projet. Ne serait-ce que pour le choix de la dureté, il existe une échelle propre au silicone (&amp;quot;Shore hardness scale&amp;quot;), nous pensions au départ rechercher un silicone le plus mou possible, cependant, il faut savoir que le plus le silicone est mou, plus il a tendance à être &amp;quot;collant&amp;quot;. Finalement, après discutions, un shore de 40A (correspondant à la dureté d'une gomme) suffisamment mince fera l'affaire pour la conception des prototypes.&lt;br /&gt;
&lt;br /&gt;
Il nous a également expliqué que le silicone peut être travaillé à l'aide d'additifs et sous cloche à vide afin d'améliorer le moulage, l'absence de &amp;quot;bulles&amp;quot; sur la surface de la pièce et la souplesse. Nous pouvons cependant travailler sans tout cela car il n'est pas spécialement important, pour notre projet, de rechercher des propriétés physiques homogènes dans tout le sextoy.&lt;br /&gt;
&lt;br /&gt;
Pour ce qui est de la création de moules, nous pourrons les effectuer via imprimante 3D. Il existe un bon nombre de tutoriels sur internet pour s'y référer en cas de soucis.&lt;br /&gt;
&lt;br /&gt;
===Impression 3D===&lt;br /&gt;
&lt;br /&gt;
Pour la création d'objets en 3D, de nombreux outils sont disponibles. Nous avons décidé d'utiliser Tinkercad, un outil qui s'intègre directement au navigateur internet utilisé. &lt;br /&gt;
&lt;br /&gt;
L'avantage d'un tel outil est sa grande communauté qui permet un accès simple et rapide à une multitudes de projets dont on pourrait s'inspirer pour générer nos pièces.&lt;br /&gt;
&lt;br /&gt;
====Création des moules====&lt;br /&gt;
&lt;br /&gt;
A l'aide d'une imprimante 3D, nous pouvons concevoir des moules afin de créer des pièces en silicone. Il s'agit de la manière la plus rapide et accessible pour notre projet.&lt;br /&gt;
&lt;br /&gt;
Cette méthode comporte des désavantages, dont le principal est la présence d'imperfection et de non homogénéité dans les pièces réalisées. Ceci n'a pas de grande importance dans la mesure où nous souhaitons du qualitatif.&lt;br /&gt;
&lt;br /&gt;
====Création d'un prototype====&lt;br /&gt;
&lt;br /&gt;
=====Pénis=====&lt;br /&gt;
&lt;br /&gt;
Afin de visualiser qualitativement la forme et le passage des câbles, un prototype imprimé au Fabricarium de Polytech Lille a été réalisé. &lt;br /&gt;
&lt;br /&gt;
Ce prototype se divise en 3 pièces : un boîtier (pour y loger le PCB), un cylindre (afin de reproduire la forme désirée) et un &amp;quot;tête&amp;quot; qui devait à l'origine être un moule en silicone (pour y loger le PCB du capteur de température).&lt;br /&gt;
&lt;br /&gt;
''Image 3D''&lt;br /&gt;
&lt;br /&gt;
===Conception des PCB===&lt;br /&gt;
&lt;br /&gt;
Afin de diminuer un maximum la taille des cartes electroniques, nous utilisons principalement des composants CMS. &lt;br /&gt;
&lt;br /&gt;
La conception des cartes peut-être effectué à l'aide de logicels de CAO tels qu'Altium ou Eagle. Dans notre cas, nous avons utilisé Eagle. &lt;br /&gt;
&lt;br /&gt;
Ce travail consiste à créer une librairie regroupant l'intégralité des composants nécessaires et, ensuite, de  créer un schéma du circuit. Une fois le schéma terminé, il ne restera plus qu'à faire le routage et exporter les fichiers au format &amp;quot;Gerber&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Pour ce projet, nous aurons besoin de deux cartes, une par prototype. Chaque carte embarquera des composants similaires, c'est pourquoi nous nous contenterons d'abord d'un seul PCB pour effectuer des tests. Si ces derniers sont concluants, nous pourrons graver le second.&lt;br /&gt;
&lt;br /&gt;
====PCB du pénis====&lt;br /&gt;
&lt;br /&gt;
Le premier PCB imprimé et soudé est celui du pénis. Une première carte avait été imprimé regroupant sur cette dernière : un support pour l'arduino, un accéléromètre, un module bluetooth. &lt;br /&gt;
&lt;br /&gt;
''image PCB v1.0''&lt;br /&gt;
&lt;br /&gt;
Nous avons expérimentés des problèmes dûs aux dimensions de l'accéléromètre, l'utilisation d'un boîtier CMS de type TDFN10 2x2 était optimiste pour la réalisation du projet, compte tenu du matériel à disposition.&lt;br /&gt;
&lt;br /&gt;
C'est pourquoi une seconde carte a été gravée, cette fois sans l'accéléromètre.&lt;br /&gt;
&lt;br /&gt;
''image PCB v2.0''&lt;br /&gt;
&lt;br /&gt;
Ce prototype est sensé embarquer un capteur de température que nous avons décidé de mettre sur un PCB à part. Cette carte avait pour but d'être coulé dans le silicone, afin de mesurer la température au plus près de la zone intéressée.&lt;br /&gt;
&lt;br /&gt;
''image PCB temperature''&lt;br /&gt;
&lt;br /&gt;
====PCB du vagin====&lt;br /&gt;
&lt;br /&gt;
Compte tenu des soucis rencontrés avec l'accéléromètre, la carte sera gravée afin de pouvoir y plugger un accéléromètre analogique en traversant. Le but étant d'avoir un prototype fonctionnel d'ici la fin du projet.&lt;br /&gt;
&lt;br /&gt;
Nous avons également eu des problèmes avec le module bluetooth utilisé, ce dernier ne pouvant être reconfiguré manuellement par minicom, nous utiliserons le bluetooth HC-05 utilisé pour les essais de code. De même que pour l'accéléromètre, nous prévoirons un endroit pour le plugger sur la carte.&lt;br /&gt;
&lt;br /&gt;
''image PCB vagin''&lt;br /&gt;
&lt;br /&gt;
''Reste à graver le PCB du vagin''&lt;br /&gt;
&lt;br /&gt;
==Gestion des capteurs et servomoteurs==&lt;br /&gt;
===Introduction===&lt;br /&gt;
===Utilisation des capteurs par IIC===&lt;br /&gt;
===Controle des servomoteurs===&lt;br /&gt;
Un servomoteur se contrôle à l'aide d'un signal PWM (Pulse Width Modulation). Ce signal consiste à modifier la largeur de l'impulsion en fonction de la consigne désirée. &lt;br /&gt;
&lt;br /&gt;
Notre première manière de procéder consister à générer la PWM nous même à l'aide du vecteur d'interruption d'un TIMER. La méthode consistait à compter de 0 à 255 en permanence. Lorsque le compteur était inférieur à la consigne, on passait une sortie à l'état haut, sinon elle restait à l'état bas. &lt;br /&gt;
&lt;br /&gt;
Cette méthode simulait plutôt bien le signal PWM et avait pour avantage d'être utilisable pour n'importe quelle de l'arduino. Cependant, cette méthode a le gros désavantage d'être sensible à l'utilisation d'autres interruptions, rendant le TIMER imprécis.&lt;br /&gt;
&lt;br /&gt;
Or, notre projet utilisera d'autres procédures d'interruption. Nous avons donc décidé d'utiliser une méthode plus simple mais nous restreignant sur le choix de nos sorties.&lt;br /&gt;
&lt;br /&gt;
En effet, un atmega possède des registres que l'on peut configurer pour générer des signaux PWM sur des broches spécifiques.&lt;br /&gt;
&lt;br /&gt;
Ainsi, en configurant le registre TCCR0A à 0x81 et TCCR0B à 0x05, on se place en mode PWM non inversée à fréquence élevée. Ceci veut dire que pour une valeur d'OCR0A donné, la largeur d'impulsion haute sera proportionnelle à OCR0A.&lt;br /&gt;
&lt;br /&gt;
Ainsi, nous pouvons donc contrôler le moteur simplement en changeant la consigne d'OCR0A.&lt;br /&gt;
&lt;br /&gt;
====Tests====&lt;br /&gt;
&lt;br /&gt;
Dans un premier lieu, les moteurs servomoteurs ne recevaient pas les consignes. Nous pensions que le fait que la PWM soit en 3V3 était l'origine du problème. Nous avons donc fait le montage à l'aide d'un transistor NPN monté en saturé. Le problème n'a pas été résolu. &lt;br /&gt;
&lt;br /&gt;
Finalement, le soucis viendrait du fait que les tests étaient effectués avec des valeurs du registre OCR0A à 0 (pwm nulle). Nous n'aurons donc pas besoin d'un montage à transistor pour le PCB.&lt;br /&gt;
&lt;br /&gt;
Le but des servomoteurs est d'effectuer un semblant de massage, nous allons donc modifier le code afin d'effectuer la tâche de manière périodique via l'utilisation d'un TIMER.&lt;br /&gt;
&lt;br /&gt;
==Gestion de la communication bluetooth==&lt;br /&gt;
===Introduction===&lt;br /&gt;
Dans le cadre de notre projet, la communication entre le sextoy et le téléphone se fera à faible portée. C'est pourquoi nous avons considéré comme intéressante l'utilisation de la technologie bluetooth.&lt;br /&gt;
&lt;br /&gt;
La première partie consiste à coder une librairie au niveau de l'arduino. Cette librairie, codée en C, consiste simplement en une lecture / écriture via les broches RX/TX de l'arduino et du module bluetooth. &lt;br /&gt;
&lt;br /&gt;
La seconde partie conssite à coder la partie application mobile qui communiquera avec la arduino.&lt;br /&gt;
&lt;br /&gt;
Une fois que cette transmission sera mise en place, il ne reste plus qu'à expliciter le protocole des paquets transmis.&lt;br /&gt;
&lt;br /&gt;
===Arduino===&lt;br /&gt;
&lt;br /&gt;
Afin de communiquer à travers le module bluetooth, il faut relier la broche RX de l'arduino à celle TX du module bluetooth et inversement. Pour tester nos codes, nous avons utilisé un module bluetooth HC-06 et l'application [https://play.google.com/store/apps/details?id=Qwerty.BluetoothTerminal&amp;amp;hl=fr| Bluetooth Terminal]. &lt;br /&gt;
&lt;br /&gt;
Dans la mesure où l'arduino devra traiter l'arrivée asynchrone de messages tout en effectuant le traitement des capteurs, il est intéressant d'effectuer des lectures à l'aide d'interruptions. Pour cela, nous utilisons le vecteur d'interruption USART_RXC_vect qui déclenchera la fonction de lecture d'un paquet à chaque fois qu'un message est reçu.&lt;br /&gt;
&lt;br /&gt;
''Actuellement, la librarie est fonctionnelle, il ne reste plus qu'à faire l'utilisation par interruption.''&lt;br /&gt;
&lt;br /&gt;
===Application mobile===&lt;br /&gt;
===Protocole de transmission===&lt;br /&gt;
===Module bluetooth utilisé===&lt;br /&gt;
&lt;br /&gt;
Le module bluetooth embarqué sur le PCB est un module reprogrammable. Ainsi il était nécessaire de connaître la configuration par défaut du composant, dans le but de savoir s'il fallait ou non prévoir un pcb de reconfiguration.&lt;br /&gt;
&lt;br /&gt;
Le CYBLE-012012 est configuré par défaut avec le firmware &amp;quot;EZ-Serial BLE Firmware&amp;quot;. La configuration par défaut de ce firmware est la suivante : &lt;br /&gt;
&lt;br /&gt;
* 115200 baud, 8bits de donnée, pas de bit de parité, 1bit de stop&lt;br /&gt;
* &amp;quot;UART flow control&amp;quot; désactivé&lt;br /&gt;
* firmware activé en mode &amp;quot;auto-start&amp;quot;, qui correspond à une recherche automatique de connection bluetooth et de redirection RX-TX en cas de connection&lt;br /&gt;
&lt;br /&gt;
Ces [http://www.cypress.com/file/285326/download| informations] sont importantes car, si elles sont vraiment respectées, nous n'auront pas à créer notre propre kit de développement, ce qui est un gain de temps considérable.&lt;br /&gt;
&lt;br /&gt;
Qui plus est, l'utilisation d'une fonction &amp;quot;auto-start&amp;quot; est en adéquation avec le module bluetooth HC-05 utilisé pour les tests. Nous pouvons donc commencer la programmation mobile du bluetooth en parallèle de l'impression des pcb. Et, dans le cas où les pcb seraient disfonctionnels, nous pourront quand meme envisager un prototype sur breadboard.&lt;br /&gt;
&lt;br /&gt;
==Conception de l'application Android==&lt;br /&gt;
===Envoie et réception de SMS===&lt;br /&gt;
Afin de ne pas utiliser de serveur, les deux appareils Android doivent synchroniser l'envoi de paquet UDP, pour cela nous avons voulu utiliser des SMS.&lt;br /&gt;
Les SMS permettent d'envoyer des informations, comme les adresses IP, les ports utilisés, l'heure à laquelle les deux téléphones vont envoyer leur premier paquet UDP.&lt;br /&gt;
&lt;br /&gt;
Dans un premier temps nous avons créer une application pour envoyer les SMS:&lt;br /&gt;
&lt;br /&gt;
L'application était très simple, l'envoi de SMS se faisait en deux lignes&lt;br /&gt;
  // initialisation d'une variable sms gérant les sms&lt;br /&gt;
  SmsManager sms = SmsManager.getDefault() ;&lt;br /&gt;
  // envoie un sms comportant le texte de la variable message de type String au numéro contenu dans la variable num de type String&lt;br /&gt;
  sms.sendTextMessage(num, null, message, null, null);&lt;br /&gt;
&lt;br /&gt;
Dans un deuxième temps il fallait recevoir un SMS, ou plutôt savoir qu'un nouvel SMS avait été reçu :&lt;br /&gt;
&lt;br /&gt;
Pour cela il fallait utiliser un thread qui était appelé par interruption avec la réception d'un SMS comme vecteur d’interruption.&lt;br /&gt;
Ce thread effectuait ce qui était demandé dans sa fonction onReceive(), comme par exemple lire les informations contenues dans le SMS:&lt;br /&gt;
  public class IncomingSms extends BroadcastReceiver {&lt;br /&gt;
     final SmsManager sms = SmsManager.getDefault();&lt;br /&gt;
     public void onReceive(Context context, Intent intent) {&lt;br /&gt;
       //Ce qui doit etre fait lors de la reception de SMS&lt;br /&gt;
     }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Malheureusement ce programme ne marchait pas pendant des semaines, malgré de nombreuses modifications et de nombreux essais. Et le problème semblait être ma carte SIM, car en changeant de SIM, tous les programmes contenant ce code fonctionnaient parfaitement.&lt;br /&gt;
&lt;br /&gt;
===Protocole UDP===&lt;br /&gt;
Afin d'effectuer un échange de données entre les deux sextoys, mais aussi pour effectuer une vidéo-conférence, nous avons choisi d'utiliser le protocole UDP.&lt;br /&gt;
&lt;br /&gt;
Une première application permettait de tester l'envoi de paquet UDP, pour cela un serveur UDP a été utiliser sur un PC.&lt;br /&gt;
Le serveur attendait un message et l'affichait quand il le recevait.&lt;br /&gt;
&lt;br /&gt;
Une fois que tout fonctionnait comme il le fallait, nous avons pu créer une application qui comportait l'envoi et la réception de paquet.&lt;br /&gt;
En mettant l'application sur deux téléphones on pouvait tester si tout fonctionnait.&lt;br /&gt;
Les tests ont seulement été effectué sur un réseau local, on ne sait pas pour le moment si des box internet pourraient empêcher la transmission.&lt;br /&gt;
L'application est composé de un thread d'écoute, un thread d'envoi et d'un thread principal gérant l'affichage et appelant le thread d'envoi lorsque que le bouton de l'application est appuyé.&lt;br /&gt;
&lt;br /&gt;
===Application principale===&lt;br /&gt;
Afin d'être ergonomique,l'application doit pouvoir enregistrer des contacts, des réglages et avoir un menu principal intuitif.&lt;/div&gt;</summary>
		<author><name>Tstieven</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=IMA4_2016/2017_P14&amp;diff=41791</id>
		<title>IMA4 2016/2017 P14</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=IMA4_2016/2017_P14&amp;diff=41791"/>
				<updated>2017-05-09T09:08:11Z</updated>
		
		<summary type="html">&lt;p&gt;Tstieven : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Projet IMA4 : Sex-toy connecté =&lt;br /&gt;
&lt;br /&gt;
== Présentation du projet ==&lt;br /&gt;
&lt;br /&gt;
L'objectif de ce projet est de développer un système d'échange entre deux partenaires distants afin de rendre plus facile la vie de couple à distance.&lt;br /&gt;
&lt;br /&gt;
Pour ce faire, le dispositif sera constitué de deux sextoys connectés (un par appareil génital désiré) à leur téléphone portable respectif. Une application mobile permettra aux utilisateurs de s'échanger des données de manière sécurisé, ceci au travers d'un serveur embarqué dans le téléphone portable.&lt;br /&gt;
&lt;br /&gt;
Les données échangées pourront être l'accélération ou la température. Elles seront traitées et transmises au sextoy qui adaptera sa vitesse, son retour vibratoire ou sa position en conséquence.&lt;br /&gt;
&lt;br /&gt;
Les sextoys pourraient être composés de :&lt;br /&gt;
* Pour l'appareil masculin (dédié à la femme) :&lt;br /&gt;
:* un servomoteur ;&lt;br /&gt;
:* un vibreur ;&lt;br /&gt;
:* une sonde de température ;&lt;br /&gt;
:* un accéléromètre.&lt;br /&gt;
* Pour l'appareil féminin (dédié à l'homme) :&lt;br /&gt;
:* 4 servomoteurs (dans le but de &amp;quot;masser&amp;quot; en déplaçant le silicone);&lt;br /&gt;
:* des vibreurs ;&lt;br /&gt;
:* un accéléromètre.&lt;br /&gt;
* Pour les deux appareils :&lt;br /&gt;
:* un micro-contrôleur (Arduino mini) ;&lt;br /&gt;
:* un module de transmission / réception bluetooth afin de se connecter au téléphone ;&lt;br /&gt;
:* du silicone.&lt;br /&gt;
	&lt;br /&gt;
* L'application mobile devra :&lt;br /&gt;
:* mettre en place une communication cryptée à travers un serveur (embarqué ou bien intermédiaire ?) ;&lt;br /&gt;
:* effectuer un échange de données en bluetooth avec le sextoy connecté.&lt;br /&gt;
&lt;br /&gt;
* L'application mobile pourra :&lt;br /&gt;
:* utiliser la vidéo-conférence ;&lt;br /&gt;
:* enregistrer les meilleurs moments et enventuellement pouvoir les partager ;&lt;br /&gt;
:* effectuer une recherche de partenaire aléatoire.&lt;br /&gt;
&lt;br /&gt;
* S'il nous reste du temps, il peut être envisageable de :&lt;br /&gt;
:* mettre en place un réseau social interne à Polytech.&lt;br /&gt;
&lt;br /&gt;
== Liste des tâches ==&lt;br /&gt;
* Conception de l'appareil masculin (Cédric)&lt;br /&gt;
:* mettre en place le bus I2C avec les différents capteurs ;&lt;br /&gt;
:* création d'un PCB au format gerber ;&lt;br /&gt;
:* création d'un prototype.&lt;br /&gt;
&lt;br /&gt;
* Conception de l'appareil féminin (Cédric)&lt;br /&gt;
:* mettre en place le bus I2C ;&lt;br /&gt;
:* traitement des données afin d'en déduire la position et l'entrain de l'utilisateur ;&lt;br /&gt;
:* création d'un PCB ;&lt;br /&gt;
:* création d'un prototype.&lt;br /&gt;
&lt;br /&gt;
* Communication bluetooth (Cédric)&lt;br /&gt;
:* étudier l'émission/réception vue de l'arduino ;&lt;br /&gt;
:* étudier l'émission/réception vue du téléphone ;&lt;br /&gt;
:* mise en place du protocole ;&lt;br /&gt;
:* test de portée.&lt;br /&gt;
&lt;br /&gt;
* Développement mobile (Thomas)&lt;br /&gt;
:* déterminer la meilleure approche : utilisation d'un serveur intermédiaire ou bien mise en place d'un &amp;quot;client-serveur&amp;quot; dans l'application mobile ;&lt;br /&gt;
:* mettre en place le choix retenu ;&lt;br /&gt;
:* tester dans un premier temps une transmission de texte ;&lt;br /&gt;
:* programmer le traitement de données reçues par bluetooth ;&lt;br /&gt;
:* rajouter un côté esthétique à l'application.&lt;br /&gt;
==Feuille d'heures==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Tâche !! Prélude !! Heures S1 !! Heures S2 !! Heures S3 !! Heures S4 !! Heures vacances !! Heures S5 !! Heures S6 !! Heures S7 !! Heures S8 !! Heures S9 !! Heures S10 !! Heures vacances !! Total&lt;br /&gt;
|-&lt;br /&gt;
| Définition cahier des charges &lt;br /&gt;
| 2H&lt;br /&gt;
| 2H&lt;br /&gt;
| 1H&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Dimensionnement et établissement de la liste de matériel&lt;br /&gt;
| &lt;br /&gt;
| 3H&lt;br /&gt;
| 4H&lt;br /&gt;
|&lt;br /&gt;
| 4H&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Établissement de la liste et de la répartition des tâches&lt;br /&gt;
| 1H&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Appareil masculin : programmation&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 1H&lt;br /&gt;
| 2H&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Appareil masculin : étude des datasheets&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 1H&lt;br /&gt;
| 1H&lt;br /&gt;
|&lt;br /&gt;
| 4H&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| 1H&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Appareil masculin : PCB&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 4H&lt;br /&gt;
| 4H&lt;br /&gt;
| 6H&lt;br /&gt;
| 10H&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Appareil masculin : 3D&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Conception de l'appareil féminin&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 2H&lt;br /&gt;
| 1H&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Liaison bluetooth (embarqué)&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 3H&lt;br /&gt;
| 1H&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Liaison bluetooth (téléphone)&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Recherche et discussion autour de la meilleure approche de communication&lt;br /&gt;
| 2H&lt;br /&gt;
| 2H&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Synchronisation temporelle des téléphones (par sms)&lt;br /&gt;
| &lt;br /&gt;
| 2H&lt;br /&gt;
| 4H&lt;br /&gt;
| 4H&lt;br /&gt;
| 4H&lt;br /&gt;
| 4H&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Transmission de paquets UDP&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 4H&lt;br /&gt;
| 4H&lt;br /&gt;
| 4H&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Streaming video(UDP)&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 4H&lt;br /&gt;
| 4H&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Application et bases de données&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 4H&lt;br /&gt;
| 4H&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Conception des sextoys==&lt;br /&gt;
===Introduction===&lt;br /&gt;
===Choix du silicone, rencontre avec Mario Sanz===&lt;br /&gt;
&lt;br /&gt;
Le projet nécessite l'utilisation d'une matière souple et non irritante, c'est pourquoi nous avons choisi de nous tourner vers l'utilisation du silicone. Afin de choisir au mieux le produit correspondant à nos besoins, nous avons rencontré Mario Sanz, ingénieur à l'INRIA, qui travail régulièrement avec du silicone.&lt;br /&gt;
&lt;br /&gt;
Ce dernier nous a expliqué les différents points importants sur lesquels nous baser afin de choisir au mieux un produit en accord avec le projet. Ne serait-ce que pour le choix de la dureté, il existe une échelle propre au silicone (&amp;quot;Shore hardness scale&amp;quot;), nous pensions au départ rechercher un silicone le plus mou possible, cependant, il faut savoir que le plus le silicone est mou, plus il a tendance à être &amp;quot;collant&amp;quot;. Finalement, après discutions, un shore de 40A (correspondant à la dureté d'une gomme) suffisamment mince fera l'affaire pour la conception des prototypes.&lt;br /&gt;
&lt;br /&gt;
Il nous a également expliqué que le silicone peut être travaillé à l'aide d'additifs et sous cloche à vide afin d'améliorer le moulage, l'absence de &amp;quot;bulles&amp;quot; sur la surface de la pièce et la souplesse. Nous pouvons cependant travailler sans tout cela car il n'est pas spécialement important, pour notre projet, de rechercher des propriétés physiques homogènes dans tout le sextoy.&lt;br /&gt;
&lt;br /&gt;
Pour ce qui est de la création de moules, nous pourrons les effectuer via imprimante 3D. Il existe un bon nombre de tutoriels sur internet pour s'y référer en cas de soucis.&lt;br /&gt;
&lt;br /&gt;
===Impression 3D===&lt;br /&gt;
&lt;br /&gt;
Pour la création d'objets en 3D, de nombreux outils sont disponibles. Nous avons décidé d'utiliser Tinkercad, un outil qui s'intègre directement au navigateur internet utilisé. &lt;br /&gt;
&lt;br /&gt;
L'avantage d'un tel outil est sa grande communauté qui permet un accès simple et rapide à une multitudes de projets dont on pourrait s'inspirer pour générer nos pièces.&lt;br /&gt;
&lt;br /&gt;
====Création des moules====&lt;br /&gt;
&lt;br /&gt;
A l'aide d'une imprimante 3D, nous pouvons concevoir des moules afin de créer des pièces en silicone. Il s'agit de la manière la plus rapide et accessible pour notre projet.&lt;br /&gt;
&lt;br /&gt;
Cette méthode comporte des désavantages, dont le principal est la présence d'imperfection et de non homogénéité dans les pièces réalisées. Ceci n'a pas de grande importance dans la mesure où nous souhaitons du qualitatif.&lt;br /&gt;
&lt;br /&gt;
====Création d'un prototype====&lt;br /&gt;
&lt;br /&gt;
=====Pénis=====&lt;br /&gt;
&lt;br /&gt;
Afin de visualiser qualitativement la forme et le passage des câbles, un prototype imprimé au Fabricarium de Polytech Lille a été réalisé. &lt;br /&gt;
&lt;br /&gt;
Ce prototype se divise en 3 pièces : un boîtier (pour y loger le PCB), un cylindre (afin de reproduire la forme désirée) et un &amp;quot;tête&amp;quot; qui devait à l'origine être un moule en silicone (pour y loger le PCB du capteur de température).&lt;br /&gt;
&lt;br /&gt;
''Image 3D''&lt;br /&gt;
&lt;br /&gt;
===Conception des PCB===&lt;br /&gt;
&lt;br /&gt;
Afin de diminuer un maximum la taille des cartes electroniques, nous utilisons principalement des composants CMS. &lt;br /&gt;
&lt;br /&gt;
La conception des cartes peut-être effectué à l'aide de logicels de CAO tels qu'Altium ou Eagle. Dans notre cas, nous avons utilisé Eagle. &lt;br /&gt;
&lt;br /&gt;
Ce travail consiste à créer une librairie regroupant l'intégralité des composants nécessaires et, ensuite, de  créer un schéma du circuit. Une fois le schéma terminé, il ne restera plus qu'à faire le routage et exporter les fichiers au format &amp;quot;Gerber&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Pour ce projet, nous aurons besoin de deux cartes, une par prototype. Chaque carte embarquera des composants similaires, c'est pourquoi nous nous contenterons d'abord d'un seul PCB pour effectuer des tests. Si ces derniers sont concluants, nous pourrons graver le second.&lt;br /&gt;
&lt;br /&gt;
====PCB du pénis====&lt;br /&gt;
&lt;br /&gt;
Le premier PCB imprimé et soudé est celui du pénis. Une première carte avait été imprimé regroupant sur cette dernière : un support pour l'arduino, un accéléromètre, un module bluetooth. &lt;br /&gt;
&lt;br /&gt;
''image PCB v1.0''&lt;br /&gt;
&lt;br /&gt;
Nous avons expérimentés des problèmes dûs aux dimensions de l'accéléromètre, l'utilisation d'un boîtier CMS de type TDFN10 2x2 était optimiste pour la réalisation du projet, compte tenu du matériel à disposition.&lt;br /&gt;
&lt;br /&gt;
C'est pourquoi une seconde carte a été gravée, cette fois sans l'accéléromètre.&lt;br /&gt;
&lt;br /&gt;
''image PCB v2.0''&lt;br /&gt;
&lt;br /&gt;
Ce prototype est sensé embarquer un capteur de température que nous avons décidé de mettre sur un PCB à part. Cette carte avait pour but d'être coulé dans le silicone, afin de mesurer la température au plus près de la zone intéressée.&lt;br /&gt;
&lt;br /&gt;
''image PCB temperature''&lt;br /&gt;
&lt;br /&gt;
====PCB du vagin====&lt;br /&gt;
&lt;br /&gt;
Compte tenu des soucis rencontrés avec l'accéléromètre, la carte sera gravée afin de pouvoir y plugger un accéléromètre analogique en traversant. Le but étant d'avoir un prototype fonctionnel d'ici la fin du projet.&lt;br /&gt;
&lt;br /&gt;
Nous avons également eu des problèmes avec le module bluetooth utilisé, ce dernier ne pouvant être reconfiguré manuellement par minicom, nous utiliserons le bluetooth HC-05 utilisé pour les essais de code. De même que pour l'accéléromètre, nous prévoirons un endroit pour le plugger sur la carte.&lt;br /&gt;
&lt;br /&gt;
''image PCB vagin''&lt;br /&gt;
&lt;br /&gt;
''Reste à graver le PCB du vagin''&lt;br /&gt;
&lt;br /&gt;
==Gestion des capteurs et servomoteurs==&lt;br /&gt;
===Introduction===&lt;br /&gt;
===Utilisation des capteurs par IIC===&lt;br /&gt;
===Controle des servomoteurs===&lt;br /&gt;
Un servomoteur se contrôle à l'aide d'un signal PWM (Pulse Width Modulation). Ce signal consiste à modifier la largeur de l'impulsion en fonction de la consigne désirée. &lt;br /&gt;
&lt;br /&gt;
Notre première manière de procéder consister à générer la PWM nous même à l'aide du vecteur d'interruption d'un TIMER. La méthode consistait à compter de 0 à 255 en permanence. Lorsque le compteur était inférieur à la consigne, on passait une sortie à l'état haut, sinon elle restait à l'état bas. &lt;br /&gt;
&lt;br /&gt;
Cette méthode simulait plutôt bien le signal PWM et avait pour avantage d'être utilisable pour n'importe quelle de l'arduino. Cependant, cette méthode a le gros désavantage d'être sensible à l'utilisation d'autres interruptions, rendant le TIMER imprécis.&lt;br /&gt;
&lt;br /&gt;
Or, notre projet utilisera d'autres procédures d'interruption. Nous avons donc décidé d'utiliser une méthode plus simple mais nous restreignant sur le choix de nos sorties.&lt;br /&gt;
&lt;br /&gt;
En effet, un atmega possède des registres que l'on peut configurer pour générer des signaux PWM sur des broches spécifiques.&lt;br /&gt;
&lt;br /&gt;
Ainsi, en configurant le registre TCCR0A à 0x81 et TCCR0B à 0x05, on se place en mode PWM non inversée à fréquence élevée. Ceci veut dire que pour une valeur d'OCR0A donné, la largeur d'impulsion haute sera proportionnelle à OCR0A.&lt;br /&gt;
&lt;br /&gt;
Ainsi, nous pouvons donc contrôler le moteur simplement en changeant la consigne d'OCR0A.&lt;br /&gt;
&lt;br /&gt;
====Tests====&lt;br /&gt;
&lt;br /&gt;
Dans un premier lieu, les moteurs servomoteurs ne recevaient pas les consignes. Nous pensions que le fait que la PWM soit en 3V3 était l'origine du problème. Nous avons donc fait le montage à l'aide d'un transistor NPN monté en saturé. Le problème n'a pas été résolu. &lt;br /&gt;
&lt;br /&gt;
Finalement, le soucis viendrait du fait que les tests étaient effectués avec des valeurs du registre OCR0A à 0 (pwm nulle). Nous n'aurons donc pas besoin d'un montage à transistor pour le PCB.&lt;br /&gt;
&lt;br /&gt;
Le but des servomoteurs est d'effectuer un semblant de massage, nous allons donc modifier le code afin d'effectuer la tâche de manière périodique via l'utilisation d'un TIMER.&lt;br /&gt;
&lt;br /&gt;
==Gestion de la communication bluetooth==&lt;br /&gt;
===Introduction===&lt;br /&gt;
Dans le cadre de notre projet, la communication entre le sextoy et le téléphone se fera à faible portée. C'est pourquoi nous avons considéré comme intéressante l'utilisation de la technologie bluetooth.&lt;br /&gt;
&lt;br /&gt;
La première partie consiste à coder une librairie au niveau de l'arduino. Cette librairie, codée en C, consiste simplement en une lecture / écriture via les broches RX/TX de l'arduino et du module bluetooth. &lt;br /&gt;
&lt;br /&gt;
La seconde partie conssite à coder la partie application mobile qui communiquera avec la arduino.&lt;br /&gt;
&lt;br /&gt;
Une fois que cette transmission sera mise en place, il ne reste plus qu'à expliciter le protocole des paquets transmis.&lt;br /&gt;
&lt;br /&gt;
===Arduino===&lt;br /&gt;
&lt;br /&gt;
Afin de communiquer à travers le module bluetooth, il faut relier la broche RX de l'arduino à celle TX du module bluetooth et inversement. Pour tester nos codes, nous avons utilisé un module bluetooth HC-06 et l'application [https://play.google.com/store/apps/details?id=Qwerty.BluetoothTerminal&amp;amp;hl=fr| Bluetooth Terminal]. &lt;br /&gt;
&lt;br /&gt;
Dans la mesure où l'arduino devra traiter l'arrivée asynchrone de messages tout en effectuant le traitement des capteurs, il est intéressant d'effectuer des lectures à l'aide d'interruptions. Pour cela, nous utilisons le vecteur d'interruption USART_RXC_vect qui déclenchera la fonction de lecture d'un paquet à chaque fois qu'un message est reçu.&lt;br /&gt;
&lt;br /&gt;
''Actuellement, la librarie est fonctionnelle, il ne reste plus qu'à faire l'utilisation par interruption.''&lt;br /&gt;
&lt;br /&gt;
===Application mobile===&lt;br /&gt;
===Protocole de transmission===&lt;br /&gt;
===Module bluetooth utilisé===&lt;br /&gt;
&lt;br /&gt;
Le module bluetooth embarqué sur le PCB est un module reprogrammable. Ainsi il était nécessaire de connaître la configuration par défaut du composant, dans le but de savoir s'il fallait ou non prévoir un pcb de reconfiguration.&lt;br /&gt;
&lt;br /&gt;
Le CYBLE-012012 est configuré par défaut avec le firmware &amp;quot;EZ-Serial BLE Firmware&amp;quot;. La configuration par défaut de ce firmware est la suivante : &lt;br /&gt;
&lt;br /&gt;
* 115200 baud, 8bits de donnée, pas de bit de parité, 1bit de stop&lt;br /&gt;
* &amp;quot;UART flow control&amp;quot; désactivé&lt;br /&gt;
* firmware activé en mode &amp;quot;auto-start&amp;quot;, qui correspond à une recherche automatique de connection bluetooth et de redirection RX-TX en cas de connection&lt;br /&gt;
&lt;br /&gt;
Ces [http://www.cypress.com/file/285326/download| informations] sont importantes car, si elles sont vraiment respectées, nous n'auront pas à créer notre propre kit de développement, ce qui est un gain de temps considérable.&lt;br /&gt;
&lt;br /&gt;
Qui plus est, l'utilisation d'une fonction &amp;quot;auto-start&amp;quot; est en adéquation avec le module bluetooth HC-05 utilisé pour les tests. Nous pouvons donc commencer la programmation mobile du bluetooth en parallèle de l'impression des pcb. Et, dans le cas où les pcb seraient disfonctionnels, nous pourront quand meme envisager un prototype sur breadboard.&lt;br /&gt;
&lt;br /&gt;
==Conception de l'application Android==&lt;br /&gt;
===Envoie et réception de SMS===&lt;br /&gt;
Afin de ne pas utiliser de serveur, les deux appareils Android doivent synchroniser l'envoi de paquet UDP, pour cela nous avons voulu utiliser des SMS.&lt;br /&gt;
Les SMS permettent d'envoyer des informations, comme les adresses IP, les ports utilisés, l'heure à laquelle les deux téléphones vont envoyer leur premier paquet UDP.&lt;br /&gt;
&lt;br /&gt;
Dans un premier temps nous avons créer une application pour envoyer les SMS:&lt;br /&gt;
&lt;br /&gt;
L'application était très simple, l'envoi de SMS se faisait en deux lignes&lt;br /&gt;
  // initialisation d'une variable sms gérant les sms&lt;br /&gt;
  SmsManager sms = SmsManager.getDefault() ;&lt;br /&gt;
  // envoie un sms comportant le texte de la variable message de type String au numéro contenu dans la variable num de type String&lt;br /&gt;
  sms.sendTextMessage(num, null, message, null, null);&lt;br /&gt;
&lt;br /&gt;
Dans un deuxième temps il fallait recevoir un SMS, ou plutôt savoir qu'un nouvel SMS avait été reçu :&lt;br /&gt;
&lt;br /&gt;
Pour cela il fallait utiliser un thread qui était appelé par interruption avec la réception d'un SMS comme vecteur d’interruption.&lt;br /&gt;
Ce thread effectuait ce qui était demandé dans sa fonction onReceive(), comme par exemple lire les informations contenues dans le SMS:&lt;br /&gt;
  public class IncomingSms extends BroadcastReceiver {&lt;br /&gt;
     final SmsManager sms = SmsManager.getDefault();&lt;br /&gt;
     public void onReceive(Context context, Intent intent) {&lt;br /&gt;
       //Ce qui doit etre fait lors de la reception de SMS&lt;br /&gt;
     }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Malheureusement ce programme ne marchait pas pendant des semaines, malgré de nombreuses modifications et de nombreux essais. Et le problème semblait être ma carte SIM, car en changeant de SIM, tous les programmes contenant ce code fonctionnaient parfaitement.&lt;br /&gt;
&lt;br /&gt;
===Protocole UDP===&lt;br /&gt;
Afin d'effectuer un échange de données entre les deux sextoys, mais aussi pour effectuer une vidéo-conférence, nous avons choisi d'utiliser le protocole UDP.&lt;br /&gt;
&lt;br /&gt;
Une première application permettait de tester l'envoi de paquet UDP, pour cela un serveur UDP a été utiliser sur un PC.&lt;br /&gt;
Le serveur attendait un message et l'affichait quand il le recevait.&lt;br /&gt;
&lt;br /&gt;
Une fois que tous fonctionnait comme il le fallait, nous avons pu créer une application qui comprenait l'envoi et la réception de paquet.&lt;br /&gt;
En mettant l'application sur deux téléphones on pouvait tester si tout fonctionnait.&lt;br /&gt;
Les tests ont seulement été effectué sur un réseau local, on ne sait pas pour le moment si des box internet pourraient empêcher la transmission.&lt;br /&gt;
L'application est composé de un thread d'écoute, un thread d'envoi et d'un thread principal gérant l'affichage et appelant le thread d'envoi lorsque que le bouton de l'application est appuyé.&lt;br /&gt;
&lt;br /&gt;
===Application principale===&lt;br /&gt;
Afin d'être ergonomique,l'application doit pouvoir enregistrer des contacts, des réglages et avoir un menu principal intuitif.&lt;/div&gt;</summary>
		<author><name>Tstieven</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=IMA4_2016/2017_P14&amp;diff=41606</id>
		<title>IMA4 2016/2017 P14</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=IMA4_2016/2017_P14&amp;diff=41606"/>
				<updated>2017-04-30T15:45:24Z</updated>
		
		<summary type="html">&lt;p&gt;Tstieven : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Projet IMA4 : Sex-toy connecté =&lt;br /&gt;
&lt;br /&gt;
== Présentation du projet ==&lt;br /&gt;
&lt;br /&gt;
L'objectif de ce projet est de développer un système d'échange entre deux partenaires distants afin de rendre plus facile la vie de couple à distance.&lt;br /&gt;
&lt;br /&gt;
Pour ce faire, le dispositif sera constitué de deux sextoys connectés (un par appareil génital désiré) à leur téléphone portable respectif. Une application mobile permettra aux utilisateurs de s'échanger des données de manière sécurisé, ceci au travers d'un serveur embarqué dans le téléphone portable.&lt;br /&gt;
&lt;br /&gt;
Les données échangées pourront être l'accélération ou la température. Elles seront traitées et transmises au sextoy qui adaptera sa vitesse, son retour vibratoire ou sa position en conséquence.&lt;br /&gt;
&lt;br /&gt;
Les sextoys pourraient être composés de :&lt;br /&gt;
* Pour l'appareil masculin (dédié à la femme) :&lt;br /&gt;
:* un servomoteur ;&lt;br /&gt;
:* un vibreur ;&lt;br /&gt;
:* une sonde de température ;&lt;br /&gt;
:* un accéléromètre.&lt;br /&gt;
* Pour l'appareil féminin (dédié à l'homme) :&lt;br /&gt;
:* 4 servomoteurs (dans le but de &amp;quot;masser&amp;quot; en déplaçant le silicone);&lt;br /&gt;
:* des vibreurs ;&lt;br /&gt;
:* un accéléromètre.&lt;br /&gt;
* Pour les deux appareils :&lt;br /&gt;
:* un micro-contrôleur (Arduino mini) ;&lt;br /&gt;
:* un module de transmission / réception bluetooth afin de se connecter au téléphone ;&lt;br /&gt;
:* du silicone.&lt;br /&gt;
	&lt;br /&gt;
* L'application mobile devra :&lt;br /&gt;
:* mettre en place une communication cryptée à travers un serveur (embarqué ou bien intermédiaire ?) ;&lt;br /&gt;
:* effectuer un échange de données en bluetooth avec le sextoy connecté.&lt;br /&gt;
&lt;br /&gt;
* L'application mobile pourra :&lt;br /&gt;
:* utiliser la vidéo-conférence ;&lt;br /&gt;
:* enregistrer les meilleurs moments et enventuellement pouvoir les partager ;&lt;br /&gt;
:* effectuer une recherche de partenaire aléatoire.&lt;br /&gt;
&lt;br /&gt;
* S'il nous reste du temps, il peut être envisageable de :&lt;br /&gt;
:* mettre en place un réseau social interne à Polytech.&lt;br /&gt;
&lt;br /&gt;
== Liste des tâches ==&lt;br /&gt;
* Conception de l'appareil masculin (Cédric)&lt;br /&gt;
:* mettre en place le bus I2C avec les différents capteurs ;&lt;br /&gt;
:* création d'un PCB au format gerber ;&lt;br /&gt;
:* création d'un prototype.&lt;br /&gt;
&lt;br /&gt;
* Conception de l'appareil féminin (Cédric)&lt;br /&gt;
:* mettre en place le bus I2C ;&lt;br /&gt;
:* traitement des données afin d'en déduire la position et l'entrain de l'utilisateur ;&lt;br /&gt;
:* création d'un PCB ;&lt;br /&gt;
:* création d'un prototype.&lt;br /&gt;
&lt;br /&gt;
* Communication bluetooth (Cédric)&lt;br /&gt;
:* étudier l'émission/réception vue de l'arduino ;&lt;br /&gt;
:* étudier l'émission/réception vue du téléphone ;&lt;br /&gt;
:* mise en place du protocole ;&lt;br /&gt;
:* test de portée.&lt;br /&gt;
&lt;br /&gt;
* Développement mobile (Thomas)&lt;br /&gt;
:* déterminer la meilleure approche : utilisation d'un serveur intermédiaire ou bien mise en place d'un &amp;quot;client-serveur&amp;quot; dans l'application mobile ;&lt;br /&gt;
:* mettre en place le choix retenu ;&lt;br /&gt;
:* tester dans un premier temps une transmission de texte ;&lt;br /&gt;
:* programmer le traitement de données reçues par bluetooth ;&lt;br /&gt;
:* rajouter un côté esthétique à l'application.&lt;br /&gt;
&lt;br /&gt;
==Feuille d'heures==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Tâche !! Prélude !! Heures S1 !! Heures S2 !! Heures S3 !! Heures S4 !! Heures vacances !! Heures S5 !! Heures S6 !! Heures S7 !! Heures S8 !! Heures S9 !! Heures S10 !! Heures vacances !! Total&lt;br /&gt;
|-&lt;br /&gt;
| Définition cahier des charges &lt;br /&gt;
| 2H&lt;br /&gt;
| 2H&lt;br /&gt;
| 1H&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Dimensionnement et établissement de la liste de matériel&lt;br /&gt;
| &lt;br /&gt;
| 3H&lt;br /&gt;
| 4H&lt;br /&gt;
|&lt;br /&gt;
| 4H&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Établissement de la liste et de la répartition des tâches&lt;br /&gt;
| 1H&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Appareil masculin : programmation&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 1H&lt;br /&gt;
| 2H&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Appareil masculin : étude des datasheets&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 1H&lt;br /&gt;
| 1H&lt;br /&gt;
|&lt;br /&gt;
| 4H&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| 1H&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Appareil masculin : PCB&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 4H&lt;br /&gt;
| 4H&lt;br /&gt;
| 6H&lt;br /&gt;
| 10H&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Appareil masculin : 3D&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Conception de l'appareil féminin&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 2H&lt;br /&gt;
| 1H&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Liaison bluetooth (embarqué)&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 3H&lt;br /&gt;
| 1H&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Liaison bluetooth (téléphone)&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Recherche et discussion autour de la meilleure approche de communication&lt;br /&gt;
| 2H&lt;br /&gt;
| 2H&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Synchronisation temporelle des téléphones (par sms)&lt;br /&gt;
| &lt;br /&gt;
| 2H&lt;br /&gt;
| 4H&lt;br /&gt;
| 4H&lt;br /&gt;
| 4H&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Transmission de paquets UDP&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Conception des sextoys==&lt;br /&gt;
===Introduction===&lt;br /&gt;
===Choix du silicone, rencontre avec Mario Sanz===&lt;br /&gt;
&lt;br /&gt;
Le projet nécessite l'utilisation d'une matière souple et non irritante, c'est pourquoi nous avons choisi de nous tourner vers l'utilisation du silicone. Afin de choisir au mieux le produit correspondant à nos besoins, nous avons rencontré Mario Sanz, ingénieur à l'INRIA, qui travail régulièrement avec du silicone.&lt;br /&gt;
&lt;br /&gt;
Ce dernier nous a expliqué les différents points importants sur lesquels nous baser afin de choisir au mieux un produit en accord avec le projet. Ne serait-ce que pour le choix de la dureté, il existe une échelle propre au silicone (&amp;quot;Shore hardness scale&amp;quot;), nous pensions au départ rechercher un silicone le plus mou possible, cependant, il faut savoir que le plus le silicone est mou, plus il a tendance à être &amp;quot;collant&amp;quot;. Finalement, après discutions, un shore de 40A (correspondant à la dureté d'une gomme) suffisamment mince fera l'affaire pour la conception des prototypes.&lt;br /&gt;
&lt;br /&gt;
Il nous a également expliqué que le silicone peut être travaillé à l'aide d'additifs et sous cloche à vide afin d'améliorer le moulage, l'absence de &amp;quot;bulles&amp;quot; sur la surface de la pièce et la souplesse. Nous pouvons cependant travailler sans tout cela car il n'est pas spécialement important, pour notre projet, de rechercher des propriétés physiques homogènes dans tout le sextoy.&lt;br /&gt;
&lt;br /&gt;
Pour ce qui est de la création de moules, nous pourrons les effectuer via imprimante 3D. Il existe un bon nombre de tutoriels sur internet pour s'y référer en cas de soucis.&lt;br /&gt;
&lt;br /&gt;
===Création des moules===&lt;br /&gt;
===Conception des PCB===&lt;br /&gt;
&lt;br /&gt;
Afin de diminuer un maximum la taille des cartes electroniques, nous utilisons principalement des composants CMS. &lt;br /&gt;
&lt;br /&gt;
La conception des cartes peut-être effectué à l'aide de logicels de CAO tels qu'Altium ou Eagle. Dans notre cas, nous avons utilisé Eagle. &lt;br /&gt;
&lt;br /&gt;
Ce travail consiste à créer une librairie regroupant l'intégralité des composants nécessaires et, ensuite, de  créer un schéma du circuit. Une fois le schéma terminé, il ne restera plus qu'à faire le routage et exporter les fichiers au format &amp;quot;Gerber&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
''Librairie terminée, création du montage.''&lt;br /&gt;
&lt;br /&gt;
==Gestion des capteurs et servomoteurs==&lt;br /&gt;
===Introduction===&lt;br /&gt;
===Utilisation des capteurs par IIC===&lt;br /&gt;
===Controle des servomoteurs===&lt;br /&gt;
Un servomoteur se contrôle à l'aide d'un signal PWM (Pulse Width Modulation). Ce signal consiste à modifier la largeur de l'impulsion en fonction de la consigne désirée. &lt;br /&gt;
&lt;br /&gt;
Notre première manière de procéder consister à générer la PWM nous même à l'aide du vecteur d'interruption d'un TIMER. La méthode consistait à compter de 0 à 255 en permanence. Lorsque le compteur était inférieur à la consigne, on passait une sortie à l'état haut, sinon elle restait à l'état bas. &lt;br /&gt;
&lt;br /&gt;
Cette méthode simulait plutôt bien le signal PWM et avait pour avantage d'être utilisable pour n'importe quelle de l'arduino. Cependant, cette méthode a le gros désavantage d'être sensible à l'utilisation d'autres interruptions, rendant le TIMER imprécis.&lt;br /&gt;
&lt;br /&gt;
Or, notre projet utilisera d'autres procédures d'interruption. Nous avons donc décidé d'utiliser une méthode plus simple mais nous restreignant sur le choix de nos sorties.&lt;br /&gt;
&lt;br /&gt;
En effet, un atmega possède des registres que l'on peut configurer pour générer des signaux PWM sur des broches spécifiques.&lt;br /&gt;
&lt;br /&gt;
Ainsi, en configurant le registre TCCR0A à 0x81 et TCCR0B à 0x05, on se place en mode PWM non inversée à fréquence élevée. Ceci veut dire que pour une valeur d'OCR0A donné, la largeur d'impulsion haute sera proportionnelle à OCR0A.&lt;br /&gt;
&lt;br /&gt;
Ainsi, nous pouvons donc contrôler le moteur simplement en changeant la consigne d'OCR0A.&lt;br /&gt;
&lt;br /&gt;
====Tests====&lt;br /&gt;
&lt;br /&gt;
Dans un premier lieu, les moteurs servomoteurs ne recevaient pas les consignes. Nous pensions que le fait que la PWM soit en 3V3 était l'origine du problème. Nous avons donc fait le montage à l'aide d'un transistor NPN monté en saturé. Le problème n'a pas été résolu. &lt;br /&gt;
&lt;br /&gt;
Finalement, le soucis viendrait du fait que les tests étaient effectués avec des valeurs du registre OCR0A à 0 (pwm nulle). Nous n'aurons donc pas besoin d'un montage à transistor pour le PCB.&lt;br /&gt;
&lt;br /&gt;
Le but des servomoteurs est d'effectuer un semblant de massage, nous allons donc modifier le code afin d'effectuer la tâche de manière périodique via l'utilisation d'un TIMER.&lt;br /&gt;
&lt;br /&gt;
==Gestion de la communication bluetooth==&lt;br /&gt;
===Introduction===&lt;br /&gt;
Dans le cadre de notre projet, la communication entre le sextoy et le téléphone se fera à faible portée. C'est pourquoi nous avons considéré comme intéressante l'utilisation de la technologie bluetooth.&lt;br /&gt;
&lt;br /&gt;
La première partie consiste à coder une librairie au niveau de l'arduino. Cette librairie, codée en C, consiste simplement en une lecture / écriture via les broches RX/TX de l'arduino et du module bluetooth. &lt;br /&gt;
&lt;br /&gt;
La seconde partie conssite à coder la partie application mobile qui communiquera avec la arduino.&lt;br /&gt;
&lt;br /&gt;
Une fois que cette transmission sera mise en place, il ne reste plus qu'à expliciter le protocole des paquets transmis.&lt;br /&gt;
&lt;br /&gt;
===Arduino===&lt;br /&gt;
&lt;br /&gt;
Afin de communiquer à travers le module bluetooth, il faut relier la broche RX de l'arduino à celle TX du module bluetooth et inversement. Pour tester nos codes, nous avons utilisé un module bluetooth HC-06 et l'application [https://play.google.com/store/apps/details?id=Qwerty.BluetoothTerminal&amp;amp;hl=fr| Bluetooth Terminal]. &lt;br /&gt;
&lt;br /&gt;
Dans la mesure où l'arduino devra traiter l'arrivée asynchrone de messages tout en effectuant le traitement des capteurs, il est intéressant d'effectuer des lectures à l'aide d'interruptions. Pour cela, nous utilisons le vecteur d'interruption USART_RXC_vect qui déclenchera la fonction de lecture d'un paquet à chaque fois qu'un message est reçu.&lt;br /&gt;
&lt;br /&gt;
''Actuellement, la librarie est fonctionnelle, il ne reste plus qu'à faire l'utilisation par interruption.''&lt;br /&gt;
&lt;br /&gt;
===Application mobile===&lt;br /&gt;
===Protocole de transmission===&lt;br /&gt;
===Module bluetooth utilisé===&lt;br /&gt;
&lt;br /&gt;
Le module bluetooth embarqué sur le PCB est un module reprogrammable. Ainsi il était nécessaire de connaître la configuration par défaut du composant, dans le but de savoir s'il fallait ou non prévoir un pcb de reconfiguration.&lt;br /&gt;
&lt;br /&gt;
Le CYBLE-012012 est configuré par défaut avec le firmware &amp;quot;EZ-Serial BLE Firmware&amp;quot;. La configuration par défaut de ce firmware est la suivante : &lt;br /&gt;
&lt;br /&gt;
* 115200 baud, 8bits de donnée, pas de bit de parité, 1bit de stop&lt;br /&gt;
* &amp;quot;UART flow control&amp;quot; désactivé&lt;br /&gt;
* firmware activé en mode &amp;quot;auto-start&amp;quot;, qui correspond à une recherche automatique de connection bluetooth et de redirection RX-TX en cas de connection&lt;br /&gt;
&lt;br /&gt;
Ces [http://www.cypress.com/file/285326/download| informations] sont importantes car, si elles sont vraiment respectées, nous n'auront pas à créer notre propre kit de développement, ce qui est un gain de temps considérable.&lt;br /&gt;
&lt;br /&gt;
Qui plus est, l'utilisation d'une fonction &amp;quot;auto-start&amp;quot; est en adéquation avec le module bluetooth HC-05 utilisé pour les tests. Nous pouvons donc commencer la programmation mobile du bluetooth en parallèle de l'impression des pcb. Et, dans le cas où les pcb seraient disfonctionnels, nous pourront quand meme envisager un prototype sur breadboard.&lt;br /&gt;
&lt;br /&gt;
==Conception de l'application Android==&lt;br /&gt;
===Envoie et réception de SMS===&lt;br /&gt;
Afin de ne pas utiliser de serveur, les deux appareils Android doivent synchroniser l'envoi de paquet UDP, pour cela nous avons voulu utiliser des SMS.&lt;br /&gt;
Les SMS permettent d'envoyer des informations, comme les adresses IP, les ports utilisés, l'heure à laquelle les deux téléphones vont envoyer leur premier paquet UDP.&lt;br /&gt;
&lt;br /&gt;
Dans un premier temps nous avons créer une application pour envoyer les SMS:&lt;br /&gt;
&lt;br /&gt;
L'application était très simple, l'envoi de SMS se faisait en deux lignes&lt;br /&gt;
  // initialisation d'une variable sms gérant les sms&lt;br /&gt;
  SmsManager sms = SmsManager.getDefault() ;&lt;br /&gt;
  // envoie un sms comportant le texte de la variable message de type String au numéro contenu dans la variable num de type String&lt;br /&gt;
  sms.sendTextMessage(num, null, message, null, null);&lt;br /&gt;
&lt;br /&gt;
Dans un deuxième temps il fallait recevoir un SMS, ou plutôt savoir qu'un nouvel SMS avait été reçu :&lt;br /&gt;
&lt;br /&gt;
Pour cela il fallait utiliser un thread qui était appelé par interruption avec la réception d'un SMS comme vecteur d’interruption.&lt;br /&gt;
Ce thread effectuait ce qui était demandé dans sa fonction onReceive(), comme par exemple lire les informations contenues dans le SMS:&lt;br /&gt;
  public class IncomingSms extends BroadcastReceiver {&lt;br /&gt;
     final SmsManager sms = SmsManager.getDefault();&lt;br /&gt;
     public void onReceive(Context context, Intent intent) {&lt;br /&gt;
       //Ce qui doit etre fait lors de la reception de SMS&lt;br /&gt;
     }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Malheureusement ce programme ne marchait pas pendant des semaines, malgré de nombreuses modifications et de nombreux essais. Et le problème semblait être ma carte SIM, car en changeant de SIM, tous les programmes contenant ce code fonctionnaient parfaitement.&lt;br /&gt;
&lt;br /&gt;
===Protocole UDP===&lt;br /&gt;
Afin d'effectuer un échange de données entre les deux sextoys, mais aussi pour effectuer une vidéo-conférence, nous avons choisi d'utiliser le protocole UDP.&lt;br /&gt;
&lt;br /&gt;
Une première application permettait de tester l'envoi de paquet UDP, pour cela un serveur UDP a été utiliser sur un PC.&lt;br /&gt;
Le serveur attendait un message et l'affichait quand il le recevait.&lt;br /&gt;
&lt;br /&gt;
Une fois que tous fonctionnait comme il le fallait, nous avons pu créer une application qui comprenait l'envoi et la réception de paquet.&lt;br /&gt;
En mettant l'application sur deux téléphones on pouvait tester si tout fonctionnait.&lt;br /&gt;
Les tests ont seulement été effectué sur un réseau local, on ne sait pas pour le moment si des box internet pourraient empêcher la transmission.&lt;br /&gt;
L'application est composé de un thread d'écoute, un thread d'envoi et d'un thread principal gérant l'affichage et appelant le thread d'envoi lorsque que le bouton de l'application est appuyé.&lt;br /&gt;
&lt;br /&gt;
===Application principale===&lt;br /&gt;
Afin d'être ergonomique,l'application doit pouvoir enregistrer des contacts, des réglages et avoir un menu principal intuitif.&lt;/div&gt;</summary>
		<author><name>Tstieven</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Discussion:Projets_IMA4_SC_%26_SA_2016/2017&amp;diff=41139</id>
		<title>Discussion:Projets IMA4 SC &amp; SA 2016/2017</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Discussion:Projets_IMA4_SC_%26_SA_2016/2017&amp;diff=41139"/>
				<updated>2017-04-05T12:14:07Z</updated>
		
		<summary type="html">&lt;p&gt;Tstieven : /* Fiche de présence */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==  Notes sur les projets ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| Projet || Mini-cahier des charges || Mi-parcours || Fin de parcours || Wiki terminé || Rapport || Vidéo&lt;br /&gt;
|-&lt;br /&gt;
| P1 [[IMA4 2016/2017 P1|Climatisation du pauvre]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen;&amp;quot;&amp;gt;Cahier des charges conforme à la discussion avec l'encadrant. Présentation propre avec un effort d'illustration. Pas de liste des tâches ou de calendrier prévisionnel. Quelques coquilles corrigées.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Abandon constaté&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Pas de vidéo&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P2 [[IMA4 2016/2017 P2|Réseau de capteurs sur smartphone]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen;&amp;quot;&amp;gt;Cahier des charges succinct. Attention à la rédaction en français. Un effort d'illustration avec un schéma global. Une liste des tâches, sans chiffrage pour l'instant.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Mauvaise utilisation de la feuille d'heures.&amp;lt;/font&amp;gt;&amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt;De gros problèmes de rédaction en français bien compréhensibles.&amp;lt;/font&amp;gt;&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Un Wiki très bien tenu et très bien illustré, une avancée du travail parfaitement expliquée, continuez ainsi !&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen;&amp;quot;&amp;gt;Vidéo plutôt conseillée&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P10 [[IMA4 2016/2017 P10|Application de suivi de prise de médicaments]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Cahier des charges assez précis. Pas trop de coquilles. Une liste des tâches un peu succincte. Réfléchissez bien à la structure du programme pour la mise à jour simplifiée des fiches sur l'application.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Feuille d'heures non utilisée, Wiki non mis à jour.&amp;lt;/font&amp;gt;&amp;lt;font style=&amp;quot;color: lightgreen;&amp;quot;&amp;gt;Pour les 4 premières semaine, des paragraphes correctement rédigés et bien illustré, il était possible de se faire une idée de l'avancée du projet.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Vidéo conseillée&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P11 [[IMA4 2016/2017 P11|Amélioration de l'accueil d'enfants hospitalisés]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Cahier des charges précis. Forme très correcte. Une liste des tâches réfléchie. Il y a même un calendrier prévisionnel.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Aucune utilisation de la feuille d'heures.&amp;lt;/font&amp;gt;&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Un excellent Wiki, très complet, très bien illustré, le travail est parfaitement décrit !&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Vidéo conseillée&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P14 [[IMA4 2016/2017 P14|Sex toy connecté]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Cahier des charges très précis. De même pour la liste des tâches. L'utilisation de bioloïds ne semble pas justifiée. Pourquoi ne parlez-vous de capteurs que dans le cadre d'un seul des deux appareils ?&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Feuille d'heures très bien exploitée.&amp;lt;/font&amp;gt;&amp;lt;font style=&amp;quot;color: lightgreen;&amp;quot;&amp;gt;Wiki très bien rédigé mais absolument pas illustré, un peu court peut être.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Vidéo conseillée&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P18 [[IMA4 2016/2017 P18|Education de la position de tête]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen;&amp;quot;&amp;gt;Pas mal de coquilles corrigées. Une certaine imprécision (confusion Arduino Mega et ATMEGA, flou dans la liste des tâches). Cela dit un cahier des charges et une liste des tâches sont présentés. Pensez aux problèmes de calibration du système et à la transmission des données vers un smartphone par exemple.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Mauvaise utilisation de la feuille d'heures.&amp;lt;/font&amp;gt;&amp;lt;font style=&amp;quot;color: yellow;&amp;quot;&amp;gt;Quelques coquilles, le Wiki est un peu vide, pas totalement à jour, dommage que le cahier des charges joint ne soit pas intégré directement au Wiki.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen;&amp;quot;&amp;gt;Vidéo plutôt conseillée&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P19 [[IMA4 2016/2017 P19|Orchestre électronique]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen;&amp;quot;&amp;gt;Synthèse correcte de l'entretien avec l'encadrant. Le cahier des charges est correct mais moins précis que le sujet. Le découpage en tâche est un peu rapide : l'analyse des fichiers MIDI devrait être sous-découpée. Presque pas de coquilles.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Très bonne utilisation de la feuille d'heures.&amp;lt;/font&amp;gt;&amp;lt;font style=&amp;quot;color: lightgreen;&amp;quot;&amp;gt;Wiki très synthétique dans un français très correct, à jour, travail sur l'imprimante bien décrit, pas beaucoup d'information sur l'analyse du fichier MIDI.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Vidéo conseillée&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P20 [[IMA4 2016/2017 P20|Création d’un environnement virtuel de test]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Très bonne prise en main du sujet. Cahier des charges très précis. Liste des tâches bien détaillée. Orthographe irréprochable.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Feuille d'heures bien exploitée, Wiki très bien rédigé, illustré, l'avancé du travail est bien présenté.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Vidéo conseillée&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P21 [[IMA4 2016/2017 P21|Conception d’une MPS Polyvalente]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen;&amp;quot;&amp;gt;Une grande partie du cahier des charges est une copie du sujet. Définissez ce qu'est une Referee Box. D'un autre coté, le cahier des charges est précis. La liste des tâches est correcte. Cependant elle semble omettre la partie mécanique de la MPS ? Pas de coquilles.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Pas d'utilisation de la feuille d'heures.&amp;lt;/font&amp;gt;&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Wiki bien rédigé et très bien illustré, le travail effectué est présenté. Il serait bien d'avoir une carte rapidement.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt;Vidéo plutôt déconseillée&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P25 [[IMA4 2016/2017 P25|Robot mobile Polytech'Lille]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow;&amp;quot;&amp;gt;Des imprécisions dans la transcription de la réunion avec l'encadrant. Voire des contre-sens. Le cahier des charges est assez complet. Pas de liste des tâches. Vous avez vraiment passé 3h sur la rédaction du cahier des charges ? (edit d'Alex : certainement pas)&amp;lt;/font&amp;gt;&amp;lt;font style=&amp;quot;color: lightgreen;&amp;quot;&amp;gt;Une liste des tâches ajoutée.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Pas d'utilisation de la feuille d'heures.&amp;lt;/font&amp;gt;&amp;lt;font style=&amp;quot;color: yellow;&amp;quot;&amp;gt;Le Wiki est principalement constitué des schématiques et des PCB des différentes cartes. Après tout c'est un point important de votre travail mais le soin apporté à ces productions, s'il s'améliore était initialement assez faible. La rédaction est presque absente ou d'un niveau faible. Vous devriez déjà avoir des cartes en production.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Vidéo déconseillée&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P26 [[IMA4 2016/2017 P26|Train de véhicules]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Le texte a été modifié pour être compréhensible mais le problème n'est pas là. Vous n'avez pas du tout transcrit les demandes de l'encadrant mais donné le sujet du projet de l'an passé. Cette année vous devez améliorer l'aspect esthétique des robots, construire le quatrième robot et améliorer la détection infra-rouge en utilisant le protocole utilisé par les télécommandes infra-rouges classiques. Vous n'avez pas, non plus, donné une liste précise des tâches à réaliser.&amp;lt;/font&amp;gt;&amp;lt;font style=&amp;quot;color: lightgreen;&amp;quot;&amp;gt;Cahier des charges révisé avec l'encadrant. La listes des tâches à réaliser est à préciser.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Pas d'utilisation de la feuille d'heures.&amp;lt;/font&amp;gt;&amp;lt;font style=&amp;quot;color: yellow;&amp;quot;&amp;gt;Wiki assez vide, le seul élément probant est la présentation de la nouvelle version de la carte des robots suiveurs. Des coquilles, ce que l'on peut difficilement vous reprocher. Il faudrait maintenant avoir un code pour le protocole RC5, utilisez deux Arduinos pour avoir un prototype de démonstration.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Vidéo déconseillée&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P27 [[IMA4 2016/2017 P27|Sonde atmosphérique]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen;&amp;quot;&amp;gt;La restitution de la discussion avec l'encadrant est très correcte et le cahier des charge est précisément décrit. Par contre la liste des tâches à effectuer n'est pas dressée en commençant par l'étude des conditions à respecter pour lancer un tel ballon.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Pratiquement pas d'utilisation de la feuille d'heures.&amp;lt;/font&amp;gt;&amp;lt;font style=&amp;quot;color: yellow;&amp;quot;&amp;gt;Wiki un peu rapide, illustré, quelques coquilles. Peu de résultats à ce jour, vous devriez avoir votre carte et avoir conduit un test de communication avec les capteurs et les modules LoRa.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Vidéo déconseillée&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P28 [[IMA4 2016/2017 P28|Adaptation d'un émulateur de calculatrices TI]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen;&amp;quot;&amp;gt;Assimilation très correcte des demandes faites par les encadrants. Un cahier des charges précis. De même pour la liste des tâches. Un effort de présentation sans trop de coquilles. Cependant quelques erreurs relevées par M. Dhaussy, merci de corriger le CdC au vu des remarques transmises.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Pas d'utilisation de la feuille d'heures.&amp;lt;/font&amp;gt;&amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Wiki à l'abandon, impossible de savoir où vous en êtes dans le travail. Réagissez immédiatement !&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Vidéo déconseillée&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P29 [[IMA4 2016/2017 P29|Conteneurs pour site Web]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow;&amp;quot;&amp;gt;Le cahier des charges est une recopie du sujet, avec des passages soulignés, certes. Une liste des tâches très précise mais uniquement orientée développement Web. Il manque toute la partie étude et utilisation des éco-systèmes d'isolation.&amp;lt;/font&amp;gt;&amp;lt;font style=&amp;quot;color: lightgreen;&amp;quot;&amp;gt;Cahier des charges plus précis, vous pouvez vous lancer.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Pas d'utilisation de la feuille d'heures.&amp;lt;/font&amp;gt;&amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt;Partie travail du Wiki presque vide, pas d'illustration, il est à craindre que le travail ne soit pas plus avancé que le Wiki.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Vidéo déconseillée&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P30 [[IMA4 2016/2017 P30|Voiture radiocommandée controlée par gant]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Cahier des charges très précis avec déjà des idées pour la réalisation. Liste des tâches à effectuer très détaillée.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Pas d'utilisation de la feuille d'heures.&amp;lt;/font&amp;gt;&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Très bon Wiki, bien illustré, travail bien décrit.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Vidéo conseillée&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P31 [[IMA4 2016/2017 P31|Accueil personnalisé par drone]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Très peu d'apport par rapport au sujet qui est lui même assez bref. Il ne semble pas y avoir eu de rencontre avec l'encadrant dans les temps impartis ? Pas de liste des tâches.&amp;lt;/font&amp;gt; &amp;lt;font style=&amp;quot;color: lightgreen;&amp;quot;&amp;gt;Cahier des charges révisés sous la direction de deux encadrants.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Mauvaise utilisation de la feuille d'heures.&amp;lt;/font&amp;gt;&amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Wiki vide, rien de concret semble avoir été réalisé, aucune illustration. Il va falloir mettre les bouchées quadruples ...&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt;Vidéo plutôt déconseillée&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P32 [[IMA4 2016/2017 P32|Sécurité: brouilleur d'ondes]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow;&amp;quot;&amp;gt;Le cahier des charges est une paraphrase du sujet. Dans la liste des tâches il semble curieux de ne pas commencer par l'étude des brouilleurs. Avez-vous échangé avec vos encadrants ?&amp;lt;/font&amp;gt;&amp;lt;font style=&amp;quot;color: lightgreen&amp;quot;&amp;gt;Cahier des charges plus précis.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen;&amp;quot;&amp;gt;Tentative d'utilisation de la feuille d'heures, definissez au préalable les lignes dans ce tableau.&amp;lt;/font&amp;gt;&amp;lt;font style=&amp;quot;color: yellow;&amp;quot;&amp;gt;Un Wiki trop rapidement rédigé en style télégraphique avec des coquilles, à la lecture du Wiki il est difficile de croire que vous avez passé le nombre d'heures annoncées pour si peu de résultats.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen;&amp;quot;&amp;gt;Vidéo plutôt conseillée&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P33 [[IMA4 2016/2017 P33|Sécurité: ingénierie inverse de protocole réseau]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Une simple paraphrase du sujet. Pas de liste des tâches à réaliser. Il semble que vous n'avez pas réussi à échanger avec vos encadrants dans les temps impartis. Des coquilles (corrigées).&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Mauvaise utilisation de la feuille d'heures.&amp;lt;/font&amp;gt;&amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt;Wiki pratiquement vide, l'image n'apporte rien, le Wiki ne reflète que peu de travail.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Vidéo déconseillée&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P34 [[IMA4 2016/2017 P34|Interface Haptique, simulateur de formes et de textures]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Une rencontre avec les encadrants. Un cahier des charges assez précis. Pas de section &amp;quot;tâches à réaliser&amp;quot; mais une section &amp;quot;notre travail&amp;quot; qui pourrait en tenir lieu avec un effort de structuration.&amp;lt;/font&amp;gt;&lt;br /&gt;
|  &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Utilisation de la feuille d'heure.&amp;lt;/font&amp;gt;&amp;lt;font style=&amp;quot;color: lightgreen;&amp;quot;&amp;gt;Un Wiki trop synthétique, des illustrations à venir ?&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt;Vidéo plutôt déconseillée&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P37 [[IMA4 2016/2017 P37|Gamelle connectée]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen;&amp;quot;&amp;gt;Présentez les objectifs généraux pour commencer. Un cahier des charges très précis mais il manque la liste des tâches à effectuer. Débutez la par l'état de l'art sur les produits déjà commercialisés.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Bonne utilisation de la fichier d'heures.&amp;lt;/font&amp;gt;&amp;lt;font style=&amp;quot;color: lightgreen;&amp;quot;&amp;gt;Excellent Wiki mais non mis à jour ; il s'arrête à la semaine 4.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Vidéo conseillée&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P38 [[IMA4 2016/2017 P38|Veilleuse enfant connectée]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow;&amp;quot;&amp;gt;Le sujet du projet à été recopié. Les deux sections personnelles sont assez mal rédigées. Un contre-sens sur le mode de connexion du prototype actuel : la veilleuse est configurée en point d'accès. Parlez plutôt de &amp;quot;Précisions sur le cahier des charges&amp;quot; plutôt que de &amp;quot;Problèmes rencontrés sur l'étude du projet&amp;quot;. Renommez aussi &amp;quot;Nouveau cahier des charges&amp;quot; en &amp;quot;Tâches à réaliser&amp;quot; et ajouter les autres tâches demandées dans le sujet.&amp;lt;/font&amp;gt;&amp;lt;font style=&amp;quot;color: lightgreen;&amp;quot;&amp;gt;Cahier des charges et listes des tâches finalement validés par deux encadrants.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Bonne utilisation de la feuille d'heures.&amp;lt;/font&amp;gt;&amp;lt;font style=&amp;quot;color: lightgreen;&amp;quot;&amp;gt;Bon Wiki, correctement illustré. Par contre faudrait arriver à présenter une réalisation, vous prenez du retard.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt;Vidéo plutôt déconseillée&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P39 [[IMA4 2016/2017 P39|Projecteur laser]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: firebrick;&amp;quot;&amp;gt;Uniquement une recopie du sujet.&amp;lt;/font&amp;gt;&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Un cahier des charges et une liste de tâches corrects après discussion avec deux encadrants.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Mauvaise utilisation de la feuille d'heures.&amp;lt;/font&amp;gt;&amp;lt;font style=&amp;quot;color: lightgreen;&amp;quot;&amp;gt;Le Wiki n'est pas à jour, il s'arrête à la semaine 4. Bien illustré. Le travail se concentre sur la partie logicielle, en particulier avec un traitement d'image non demandé mais intéressant. Il faudrait se pencher très vite sur le contrôle des lasers.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Vidéo conseillée&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P44 [[IMA4 2016/2017 P44|3615 Facebook]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Un très bon cahier des charges. Le sujet semble être bien assimilé. Une liste des tâches correcte (il faudrait peut-être détailler la programmation du proxy).&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Un Wiki tout simplement parfait.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Vidéo conseillée&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P46 [[IMA4 2016/2017 P46|Aide anti-gaspillage alimentaire ]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Un excellent cahier des charges. Liste des tâches très détaillée. Parfait.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Pas d'utilisation de la feuille d'heures.&amp;lt;/font&amp;gt;&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Wiki très détaillé, correctement illustré, le travail effectué est présenté correctement.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen;&amp;quot;&amp;gt;Vidéo plutôt conseillée&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P47 [[IMA4 2016/2017 P47|Modélisation d’un robot mobile]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Vous n'avez pas su vous adapter à la syntaxe mediawiki. Correction pour obtenir un CdC lisible. Une recopie intégrale du sujet. Un cahier des charges qui ressemble plus à une liste des tâches à effectuer.&amp;lt;/font&amp;gt;&amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt;Vous utilisez bien la syntaxe mediawiki maintenant. Par contre il n'y a toujours pas de cahier des charges.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen;&amp;quot;&amp;gt;Feuille d'heures utilisée. Un Wiki mis à jour. Il est très difficile de se faire une idée de votre travail. Il semble que vous soyez actuellement plutôt en TP qu'en projet ?&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Vidéo déconseillée&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P48 [[IMA4 2016/2017 P48|Surveillance d'un robot mobile]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt;Un cahier des charges en 4 lignes, c'est trop court. En particulier rien sur le contexte du projet à savoir le matériel ou le simulateur sur lequel les tests seront effectués. Une liste des tâches, cette liste est-elle avalisé par l'encadrant ?&amp;lt;/font&amp;gt;&amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt;Toujours pas de cahier des charges.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow;&amp;quot;&amp;gt;Feuille d'heures correctement remplie. Wiki plutôt vide. Il est difficile de se faire une idée du travail réalisé, vous semblez bloqué à l'étape bibliographie.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen;&amp;quot;&amp;gt;Vidéo plutôt déconseillée&amp;lt;/font&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Fiche de présence ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Projet !! Elèves !! Séance 1 (25/01) !! Séance 2 (01/02) !! Séance 3 (08/02) !! Séance 4 (15/02) !! Séance 5 (01/03) !! Séance 6 (08/03) !! Séance 7 !! Séance 8 !! Séance 9 !! Séance 10&lt;br /&gt;
|-&lt;br /&gt;
| P1 [[IMA4 2016/2017 P1|Climatisation du pauvre]]&lt;br /&gt;
| Haroun Abdelali&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Absent&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Absent&amp;lt;/font&amp;gt;&lt;br /&gt;
| D317 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| D309 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| D309 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P2 [[IMA4 2016/2017 P2|Réseau de capteurs sur smartphone]]&lt;br /&gt;
| Wenyu sun / Xinyue xu&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Presentes&amp;lt;/font&amp;gt;&lt;br /&gt;
| C201 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présentes&amp;lt;/font&amp;gt;&lt;br /&gt;
| C201&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présentes&amp;lt;/font&amp;gt;&lt;br /&gt;
| C201&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présentes&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304&amp;amp;C201&lt;br /&gt;
| E304&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présentes&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présentes&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P10 [[IMA4 2016/2017 P10|Application de suivi de prise de médicaments]]&lt;br /&gt;
| Martin Rohmer / Kévin Godesence&lt;br /&gt;
| E306 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E303 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E301 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E303&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305&amp;lt;br /&amp;gt;&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P11 [[IMA4 2016/2017 P11|Amélioration de l'accueil d'enfants hospitalisés]]&lt;br /&gt;
| Robin Cavalieri / Edmur Lopes&lt;br /&gt;
| E305 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305&amp;lt;br /&amp;gt;&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E303&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P14 [[IMA4 2016/2017 P14|Sex toy connecté]]&lt;br /&gt;
| Cedric Roussel / Thomas Stievenard&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E303 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E303&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E303/E305&amp;lt;br /&amp;gt;&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E303&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E303&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P18 [[IMA4 2016/2017 P18|Education de la position de tête]]&lt;br /&gt;
| Mame Arame Diop / Amina Fahem&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E303 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présentes&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E306&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304&amp;lt;br /&amp;gt;&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présentes&amp;lt;/font&amp;gt;&lt;br /&gt;
| E306&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P19 [[IMA4 2016/2017 P19|Orchestre électronique]]&lt;br /&gt;
| Antoine Arnaudet / Vivian Senaffe&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Arnaudet présent&amp;lt;/font&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Senaffe absent&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304&amp;lt;br /&amp;gt;&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P20 [[IMA4 2016/2017 P20|Création d’un environnement virtuel de test]]&lt;br /&gt;
| Butaye Marianne / François Duport&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E303 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E306&amp;lt;br /&amp;gt;&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E306&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P21 [[IMA4 2016/2017 P21|Conception d’une MPS Polyvalente]]&lt;br /&gt;
| Samy Belhouachi / François Xavier Cockenpot&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E301 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E303 et E305&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E303 et E305&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305&amp;lt;br /&amp;gt;&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| C002&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P25 [[IMA4 2016/2017 P25|Robot mobile Polytech'Lille]]&lt;br /&gt;
| Cheikh Said Ahmed / Khadija El Messnaoui&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Said-Ahmed présent&amp;lt;/font&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;font style=&amp;quot;color: red&amp;quot;&amp;gt;El Messnaoui absente&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E303 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305&amp;lt;br /&amp;gt;&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Said-Ahmed présent&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P26 [[IMA4 2016/2017 P26|Train de véhicules]]&lt;br /&gt;
| Manlu Luo / Xinyi Wang&lt;br /&gt;
| E305 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présentes&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présentes&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304 &amp;lt;br /&amp;gt;&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présentes&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P27 [[IMA4 2016/2017 P27|Sonde atmosphérique]]&lt;br /&gt;
| Olivier Mahieux / Grillère Baptiste&lt;br /&gt;
| E306 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P28 [[IMA4 2016/2017 P28|Adaptation d'un émulateur de calculatrices TI]]&lt;br /&gt;
| Rodolphe Toin&lt;br /&gt;
| E305 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présent&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305/301 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305 &amp;lt;br /&amp;gt;&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présent&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P29 [[IMA4 2016/2017 P29|Conteneurs pour site Web]]&lt;br /&gt;
| | E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt;Rattrapage DS&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;absente&amp;lt;/font&amp;gt;&lt;br /&gt;
| Malade&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| Malade&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| Malade&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E303&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E303&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E303&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| Malade&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P30 [[IMA4 2016/2017 P30|Voiture radiocommandée controlée par gant]]&lt;br /&gt;
| Thomas Gosse / Bacem Hagui&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Gosse présent&amp;lt;/font&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Hagui absent&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P31 [[IMA4 2016/2017 P31|Accueil personnalisé par drone]]&lt;br /&gt;
| Tristan Hart / Etienne Profit&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304 &amp;lt;br /&amp;gt;&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P32 [[IMA4 2016/2017 P32|Sécurité: brouilleur d'ondes]]&lt;br /&gt;
| Nicky Ung / Alexis Macherez&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304/301 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304/C205&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305&amp;lt;br /&amp;gt;&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P33 [[IMA4 2016/2017 P33|Sécurité: ingénierie inverse de protocole réseau]]&lt;br /&gt;
| Oumaima Naanaa&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Absente&amp;lt;/font&amp;gt;&lt;br /&gt;
| E301&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présente&amp;lt;/font&amp;gt;&lt;br /&gt;
| E301&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E301&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E306&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E306 C205&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E306 C205&amp;lt;br /&amp;gt;&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présente&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P34 [[IMA4 2016/2017 P34|Interface Haptique, simulateur de formes et de textures]]&lt;br /&gt;
| Alice Coffin / Diana Marrucho&lt;br /&gt;
| IRCICA labo&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| IRCICA labo&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| IRCICA labo&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| IRCICA labo&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| IRCICA labo&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| IRCICA labo&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| IRCICA labo&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| IRCICA labo&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| IRCICA labo&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| IRCICA labo&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P37 [[IMA4 2016/2017 P37|Gamelle connectée]]&lt;br /&gt;
| Lutecia Damiens / Alexis Dorian&lt;br /&gt;
| E306 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E303 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E303 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| Fabricarium&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E303&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E306&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E306&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E306&amp;lt;br /&amp;gt;&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| Alexis : fabricarium - Lutecia : E306&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P38 [[IMA4 2016/2017 P38|Veilleuse enfant connectée]]&lt;br /&gt;
| Hugo Delatte&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présent&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présent&amp;lt;/font&amp;gt;&lt;br /&gt;
| C201&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| C201&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| C201&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| C201/E304&amp;lt;br /&amp;gt;&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présent&amp;lt;/font&amp;gt;&lt;br /&gt;
| C201/E304&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| C201&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P39 [[IMA4 2016/2017 P39|Projecteur laser]]&lt;br /&gt;
| Loïc Tombazzi / Marius Trimbur&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E303 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E303 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E303 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E303 &amp;lt;br /&amp;gt;&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E303 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P44 [[IMA4 2016/2017 P44|3615 Facebook]]&lt;br /&gt;
| Marouan Mcharfi / Tristan lopez&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304&amp;lt;br /&amp;gt;&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présent&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P46 [[IMA4 2016/2017 P46|Aide anti-gaspillage alimentaire ]]&lt;br /&gt;
| Alexandre Huet / François Lefevre&lt;br /&gt;
| E306&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E306 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304&amp;lt;br /&amp;gt;&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P47 [[IMA4 2016/2017 P47|Modélisation d’un robot mobile]]&lt;br /&gt;
| Djamil Mohamed / Hamza Kerroum&lt;br /&gt;
| C305/D306A &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| C305/D306A &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| C305/D306A &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| C305/D306A &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| C305/D306A &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| C305/D306A &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| C305/D306A &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| C305/D306A &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| C305/D306A&amp;lt;br /&amp;gt;&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| C305/D306A&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P48 [[IMA4 2016/2017 P48|Surveillance d'un robot mobile]]&lt;br /&gt;
| Jean-Baptiste Saison&lt;br /&gt;
| C305/D306A &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| C305/D306A &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présent&amp;lt;/font&amp;gt;&lt;br /&gt;
| D306A &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présent&amp;lt;/font&amp;gt;&lt;br /&gt;
| D306A/C305 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| D306A/D322 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| D306A/D322 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| D306A &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| D306A &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| D306A&amp;lt;br /&amp;gt; &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présent&amp;lt;/font&amp;gt;&lt;br /&gt;
| D306A/C305&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Tstieven</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Discussion:Projets_IMA4_SC_%26_SA_2016/2017&amp;diff=40965</id>
		<title>Discussion:Projets IMA4 SC &amp; SA 2016/2017</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Discussion:Projets_IMA4_SC_%26_SA_2016/2017&amp;diff=40965"/>
				<updated>2017-03-29T15:00:56Z</updated>
		
		<summary type="html">&lt;p&gt;Tstieven : /* Fiche de présence */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==  Notes sur les projets ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| Projet || Mini-cahier des charges || Mi-parcours || Fin de parcours || Wiki terminé || Rapport || Vidéo&lt;br /&gt;
|-&lt;br /&gt;
| P1 [[IMA4 2016/2017 P1|Climatisation du pauvre]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen;&amp;quot;&amp;gt;Cahier des charges conforme à la discussion avec l'encadrant. Présentation propre avec un effort d'illustration. Pas de liste des tâches ou de calendrier prévisionnel. Quelques coquilles corrigées.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Abandon constaté&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P2 [[IMA4 2016/2017 P2|Réseau de capteurs sur smartphone]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen;&amp;quot;&amp;gt;Cahier des charges succinct. Attention à la rédaction en français. Un effort d'illustration avec un schéma global. Une liste des tâches, sans chiffrage pour l'instant.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Mauvaise utilisation de la feuille d'heures.&amp;lt;/font&amp;gt;&amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt;De gros problèmes de rédaction en français bien compréhensibles.&amp;lt;/font&amp;gt;&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Un Wiki très bien tenu et très bien illustré, une avancée du travail parfaitement expliquée, continuez ainsi !&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P10 [[IMA4 2016/2017 P10|Application de suivi de prise de médicaments]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Cahier des charges assez précis. Pas trop de coquilles. Une liste des tâches un peu succincte. Réfléchissez bien à la structure du programme pour la mise à jour simplifiée des fiches sur l'application.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Feuille d'heures non utilisée, Wiki non mis à jour.&amp;lt;/font&amp;gt;&amp;lt;font style=&amp;quot;color: lightgreen;&amp;quot;&amp;gt;Pour les 4 premières semaine, des paragraphes correctement rédigés et bien illustré, il était possible de se faire une idée de l'avancée du projet.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P11 [[IMA4 2016/2017 P11|Amélioration de l'accueil d'enfants hospitalisés]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Cahier des charges précis. Forme très correcte. Une liste des tâches réfléchie. Il y a même un calendrier prévisionnel.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Aucune utilisation de la feuille d'heures.&amp;lt;/font&amp;gt;&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Un excellent Wiki, très complet, très bien illustré, le travail est parfaitement décrit !&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P14 [[IMA4 2016/2017 P14|Sex toy connecté]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Cahier des charges très précis. De même pour la liste des tâches. L'utilisation de bioloïds ne semble pas justifiée. Pourquoi ne parlez-vous de capteurs que dans le cadre d'un seul des deux appareils ?&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Feuille d'heures très bien exploitée.&amp;lt;/font&amp;gt;&amp;lt;font style=&amp;quot;color: lightgreen;&amp;quot;&amp;gt;Wiki très bien rédigé mais absolument pas illustré, un peu court peut être.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P18 [[IMA4 2016/2017 P18|Education de la position de tête]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen;&amp;quot;&amp;gt;Pas mal de coquilles corrigées. Une certaine imprécision (confusion Arduino Mega et ATMEGA, flou dans la liste des tâches). Cela dit un cahier des charges et une liste des tâches sont présentés. Pensez aux problèmes de calibration du système et à la transmission des données vers un smartphone par exemple.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Mauvaise utilisation de la feuille d'heures.&amp;lt;/font&amp;gt;&amp;lt;font style=&amp;quot;color: yellow;&amp;quot;&amp;gt;Quelques coquilles, le Wiki est un peu vide, pas totalement à jour, dommage que le cahier des charges joint ne soit pas intégré directement au Wiki.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P19 [[IMA4 2016/2017 P19|Orchestre électronique]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen;&amp;quot;&amp;gt;Synthèse correcte de l'entretien avec l'encadrant. Le cahier des charges est correct mais moins précis que le sujet. Le découpage en tâche est un peu rapide : l'analyse des fichiers MIDI devrait être sous-découpée. Presque pas de coquilles.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Très bonne utilisation de la feuille d'heures.&amp;lt;/font&amp;gt;&amp;lt;font style=&amp;quot;color: lightgreen;&amp;quot;&amp;gt;Wiki très synthétique dans un français très correct, à jour, travail sur l'imprimante bien décrit, pas beaucoup d'information sur l'analyse du fichier MIDI.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P20 [[IMA4 2016/2017 P20|Création d’un environnement virtuel de test]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Très bonne prise en main du sujet. Cahier des charges très précis. Liste des tâches bien détaillée. Orthographe irréprochable.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Feuille d'heures bien exploitée, Wiki très bien rédigé, illustré, l'avancé du travail est bien présenté.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P21 [[IMA4 2016/2017 P21|Conception d’une MPS Polyvalente]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen;&amp;quot;&amp;gt;Une grande partie du cahier des charges est une copie du sujet. Définissez ce qu'est une Referee Box. D'un autre coté, le cahier des charges est précis. La liste des tâches est correcte. Cependant elle semble omettre la partie mécanique de la MPS ? Pas de coquilles.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Pas d'utilisation de la feuille d'heures.&amp;lt;/font&amp;gt;&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Wiki bien rédigé et très bien illustré, le travail effectué est présenté. Il serait bien d'avoir une carte rapidement.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P25 [[IMA4 2016/2017 P25|Robot mobile Polytech'Lille]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow;&amp;quot;&amp;gt;Des imprécisions dans la transcription de la réunion avec l'encadrant. Voire des contre-sens. Le cahier des charges est assez complet. Pas de liste des tâches. Vous avez vraiment passé 3h sur la rédaction du cahier des charges ? (edit d'Alex : certainement pas)&amp;lt;/font&amp;gt;&amp;lt;font style=&amp;quot;color: lightgreen;&amp;quot;&amp;gt;Une liste des tâches ajoutée.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Pas d'utilisation de la feuille d'heures.&amp;lt;/font&amp;gt;&amp;lt;font style=&amp;quot;color: yellow;&amp;quot;&amp;gt;Le Wiki est principalement constitué des schématiques et des PCB des différentes cartes. Après tout c'est un point important de votre travail mais le soin apporté à ces productions, s'il s'améliore était initialement assez faible. La rédaction est presque absente ou d'un niveau faible. Vous devriez déjà avoir des cartes en production.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P26 [[IMA4 2016/2017 P26|Train de véhicules]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Le texte a été modifié pour être compréhensible mais le problème n'est pas là. Vous n'avez pas du tout transcrit les demandes de l'encadrant mais donné le sujet du projet de l'an passé. Cette année vous devez améliorer l'aspect esthétique des robots, construire le quatrième robot et améliorer la détection infra-rouge en utilisant le protocole utilisé par les télécommandes infra-rouges classiques. Vous n'avez pas, non plus, donné une liste précise des tâches à réaliser.&amp;lt;/font&amp;gt;&amp;lt;font style=&amp;quot;color: lightgreen;&amp;quot;&amp;gt;Cahier des charges révisé avec l'encadrant. La listes des tâches à réaliser est à préciser.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Pas d'utilisation de la feuille d'heures.&amp;lt;/font&amp;gt;&amp;lt;font style=&amp;quot;color: yellow;&amp;quot;&amp;gt;Wiki assez vide, le seul élément probant est la présentation de la nouvelle version de la carte des robots suiveurs. Des coquilles, ce que l'on peut difficilement vous reprocher. Il faudrait maintenant avoir un code pour le protocole RC5, utilisez deux Arduinos pour avoir un prototype de démonstration.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P27 [[IMA4 2016/2017 P27|Sonde atmosphérique]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen;&amp;quot;&amp;gt;La restitution de la discussion avec l'encadrant est très correcte et le cahier des charge est précisément décrit. Par contre la liste des tâches à effectuer n'est pas dressée en commençant par l'étude des conditions à respecter pour lancer un tel ballon.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Pratiquement pas d'utilisation de la feuille d'heures.&amp;lt;/font&amp;gt;&amp;lt;font style=&amp;quot;color: yellow;&amp;quot;&amp;gt;Wiki un peu rapide, illustré, quelques coquilles. Peu de résultats à ce jour, vous devriez avoir votre carte et avoir conduit un test de communication avec les capteurs et les modules LoRa.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P28 [[IMA4 2016/2017 P28|Adaptation d'un émulateur de calculatrices TI]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen;&amp;quot;&amp;gt;Assimilation très correcte des demandes faites par les encadrants. Un cahier des charges précis. De même pour la liste des tâches. Un effort de présentation sans trop de coquilles. Cependant quelques erreurs relevées par M. Dhaussy, merci de corriger le CdC au vu des remarques transmises.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Pas d'utilisation de la feuille d'heures.&amp;lt;/font&amp;gt;&amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Wiki à l'abandon, impossible de savoir où vous en êtes dans le travail. Réagissez immédiatement !&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P29 [[IMA4 2016/2017 P29|Conteneurs pour site Web]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow;&amp;quot;&amp;gt;Le cahier des charges est une recopie du sujet, avec des passages soulignés, certes. Une liste des tâches très précise mais uniquement orientée développement Web. Il manque toute la partie étude et utilisation des éco-systèmes d'isolation.&amp;lt;/font&amp;gt;&amp;lt;font style=&amp;quot;color: lightgreen;&amp;quot;&amp;gt;Cahier des charges plus précis, vous pouvez vous lancer.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Pas d'utilisation de la feuille d'heures.&amp;lt;/font&amp;gt;&amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt;Partie travail du Wiki presque vide, pas d'illustration, il est à craindre que le travail ne soit pas plus avancé que le Wiki.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P30 [[IMA4 2016/2017 P30|Voiture radiocommandée controlée par gant]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Cahier des charges très précis avec déjà des idées pour la réalisation. Liste des tâches à effectuer très détaillée.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Pas d'utilisation de la feuille d'heures.&amp;lt;/font&amp;gt;&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Très bon Wiki, bien illustré, travail bien décrit.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P31 [[IMA4 2016/2017 P31|Accueil personnalisé par drone]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Très peu d'apport par rapport au sujet qui est lui même assez bref. Il ne semble pas y avoir eu de rencontre avec l'encadrant dans les temps impartis ? Pas de liste des tâches.&amp;lt;/font&amp;gt; &amp;lt;font style=&amp;quot;color: lightgreen;&amp;quot;&amp;gt;Cahier des charges révisés sous la direction de deux encadrants.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Mauvaise utilisation de la feuille d'heures.&amp;lt;/font&amp;gt;&amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Wiki vide, rien de concret semble avoir été réalisé, aucune illustration. Il va falloir mettre les bouchées quadruples ...&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P32 [[IMA4 2016/2017 P32|Sécurité: brouilleur d'ondes]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow;&amp;quot;&amp;gt;Le cahier des charges est une paraphrase du sujet. Dans la liste des tâches il semble curieux de ne pas commencer par l'étude des brouilleurs. Avez-vous échangé avec vos encadrants ?&amp;lt;/font&amp;gt;&amp;lt;font style=&amp;quot;color: lightgreen&amp;quot;&amp;gt;Cahier des charges plus précis.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen;&amp;quot;&amp;gt;Tentative d'utilisation de la feuille d'heures, definissez au préalable les lignes dans ce tableau.&amp;lt;/font&amp;gt;&amp;lt;font style=&amp;quot;color: yellow;&amp;quot;&amp;gt;Un Wiki trop rapidement rédigé en style télégraphique avec des coquilles, à la lecture du Wiki il est difficile de croire que vous avez passé le nombre d'heures annoncées pour si peu de résultats.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P33 [[IMA4 2016/2017 P33|Sécurité: ingénierie inverse de protocole réseau]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Une simple paraphrase du sujet. Pas de liste des tâches à réaliser. Il semble que vous n'avez pas réussi à échanger avec vos encadrants dans les temps impartis. Des coquilles (corrigées).&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Mauvaise utilisation de la feuille d'heures.&amp;lt;/font&amp;gt;&amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt;Wiki pratiquement vide, l'image n'apporte rien, le Wiki ne reflète que peu de travail.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P34 [[IMA4 2016/2017 P34|Interface Haptique, simulateur de formes et de textures]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Une rencontre avec les encadrants. Un cahier des charges assez précis. Pas de section &amp;quot;tâches à réaliser&amp;quot; mais une section &amp;quot;notre travail&amp;quot; qui pourrait en tenir lieu avec un effort de structuration.&amp;lt;/font&amp;gt;&lt;br /&gt;
|  &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Utilisation de la feuille d'heure.&amp;lt;/font&amp;gt;&amp;lt;font style=&amp;quot;color: lightgreen;&amp;quot;&amp;gt;Un Wiki trop synthétique, des illustrations à venir ?&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P37 [[IMA4 2016/2017 P37|Gamelle connectée]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen;&amp;quot;&amp;gt;Présentez les objectifs généraux pour commencer. Un cahier des charges très précis mais il manque la liste des tâches à effectuer. Débutez la par l'état de l'art sur les produits déjà commercialisés.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Bonne utilisation de la fichier d'heures.&amp;lt;/font&amp;gt;&amp;lt;font style=&amp;quot;color: lightgreen;&amp;quot;&amp;gt;Excellent Wiki mais non mis à jour ; il s'arrête à la semaine 4.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P38 [[IMA4 2016/2017 P38|Veilleuse enfant connectée]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow;&amp;quot;&amp;gt;Le sujet du projet à été recopié. Les deux sections personnelles sont assez mal rédigées. Un contre-sens sur le mode de connexion du prototype actuel : la veilleuse est configurée en point d'accès. Parlez plutôt de &amp;quot;Précisions sur le cahier des charges&amp;quot; plutôt que de &amp;quot;Problèmes rencontrés sur l'étude du projet&amp;quot;. Renommez aussi &amp;quot;Nouveau cahier des charges&amp;quot; en &amp;quot;Tâches à réaliser&amp;quot; et ajouter les autres tâches demandées dans le sujet.&amp;lt;/font&amp;gt;&amp;lt;font style=&amp;quot;color: lightgreen;&amp;quot;&amp;gt;Cahier des charges et listes des tâches finalement validés par deux encadrants.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Bonne utilisation de la feuille d'heures.&amp;lt;/font&amp;gt;&amp;lt;font style=&amp;quot;color: lightgreen;&amp;quot;&amp;gt;Bon Wiki, correctement illustré. Par contre faudrait arriver à présenter une réalisation, vous prenez du retard.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P39 [[IMA4 2016/2017 P39|Projecteur laser]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: firebrick;&amp;quot;&amp;gt;Uniquement une recopie du sujet.&amp;lt;/font&amp;gt;&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Un cahier des charges et une liste de tâches corrects après discussion avec deux encadrants.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Mauvaise utilisation de la feuille d'heures.&amp;lt;/font&amp;gt;&amp;lt;font style=&amp;quot;color: lightgreen;&amp;quot;&amp;gt;Le Wiki n'est pas à jour, il s'arrête à la semaine 4. Bien illustré. Le travail se concentre sur la partie logicielle, en particulier avec un traitement d'image non demandé mais intéressant. Il faudrait se pencher très vite sur le contrôle des lasers.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P44 [[IMA4 2016/2017 P44|3615 Facebook]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Un très bon cahier des charges. Le sujet semble être bien assimilé. Une liste des tâches correcte (il faudrait peut-être détailler la programmation du proxy).&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Un Wiki tout simplement parfait.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P46 [[IMA4 2016/2017 P46|Aide anti-gaspillage alimentaire ]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Un excellent cahier des charges. Liste des tâches très détaillée. Parfait.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Pas d'utilisation de la feuille d'heures.&amp;lt;/font&amp;gt;&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Wiki très détaillé, correctement illustré, le travail effectué est présenté correctement.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P47 [[IMA4 2016/2017 P47|Modélisation d’un robot mobile]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Vous n'avez pas su vous adapter à la syntaxe mediawiki. Correction pour obtenir un CdC lisible. Une recopie intégrale du sujet. Un cahier des charges qui ressemble plus à une liste des tâches à effectuer.&amp;lt;/font&amp;gt;&amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt;Vous utilisez bien la syntaxe mediawiki maintenant. Par contre il n'y a toujours pas de cahier des charges.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen;&amp;quot;&amp;gt;Feuille d'heures utilisée. Un Wiki mis à jour. Il est très difficile de se faire une idée de votre travail. Il semble que vous soyez actuellement plutôt en TP qu'en projet ?&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P48 [[IMA4 2016/2017 P48|Surveillance d'un robot mobile]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt;Un cahier des charges en 4 lignes, c'est trop court. En particulier rien sur le contexte du projet à savoir le matériel ou le simulateur sur lequel les tests seront effectués. Une liste des tâches, cette liste est-elle avalisé par l'encadrant ?&amp;lt;/font&amp;gt;&amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt;Toujours pas de cahier des charges.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow;&amp;quot;&amp;gt;Feuille d'heures correctement remplie. Wiki plutôt vide. Il est difficile de se faire une idée du travail réalisé, vous semblez bloqué à l'étape bibliographie.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Fiche de présence ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Projet !! Elèves !! Séance 1 (25/01) !! Séance 2 (01/02) !! Séance 3 (08/02) !! Séance 4 (15/02) !! Séance 5 (01/03) !! Séance 6 (08/03) !! Séance 7 !! Séance 8 !! Séance 9 !! Séance 10&lt;br /&gt;
|-&lt;br /&gt;
| P1 [[IMA4 2016/2017 P1|Climatisation du pauvre]]&lt;br /&gt;
| Haroun Abdelali&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Absent&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Absent&amp;lt;/font&amp;gt;&lt;br /&gt;
| D317 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| D309 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| D309 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P2 [[IMA4 2016/2017 P2|Réseau de capteurs sur smartphone]]&lt;br /&gt;
| Wenyu sun / Xinyue xu&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Presentes&amp;lt;/font&amp;gt;&lt;br /&gt;
| C201 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présentes&amp;lt;/font&amp;gt;&lt;br /&gt;
| C201&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présentes&amp;lt;/font&amp;gt;&lt;br /&gt;
| C201&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présentes&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304&amp;amp;C201&lt;br /&gt;
| E304&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présentes&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présentes&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P10 [[IMA4 2016/2017 P10|Application de suivi de prise de médicaments]]&lt;br /&gt;
| Martin Rohmer / Kévin Godesence&lt;br /&gt;
| E306 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E303 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E301 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E303&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305&amp;lt;br /&amp;gt;&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P11 [[IMA4 2016/2017 P11|Amélioration de l'accueil d'enfants hospitalisés]]&lt;br /&gt;
| Robin Cavalieri / Edmur Lopes&lt;br /&gt;
| E305 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305&amp;lt;br /&amp;gt;&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P14 [[IMA4 2016/2017 P14|Sex toy connecté]]&lt;br /&gt;
| Cedric Roussel / Thomas Stievenard&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E303 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E303&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E303/E305&amp;lt;br /&amp;gt;&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E303&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P18 [[IMA4 2016/2017 P18|Education de la position de tête]]&lt;br /&gt;
| Mame Arame Diop / Amina Fahem&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E303 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présentes&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E306&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304&amp;lt;br /&amp;gt;&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présentes&amp;lt;/font&amp;gt;&lt;br /&gt;
| E306&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P19 [[IMA4 2016/2017 P19|Orchestre électronique]]&lt;br /&gt;
| Antoine Arnaudet / Vivian Senaffe&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Arnaudet présent&amp;lt;/font&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Senaffe absent&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304&amp;lt;br /&amp;gt;&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P20 [[IMA4 2016/2017 P20|Création d’un environnement virtuel de test]]&lt;br /&gt;
| Butaye Marianne / François Duport&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E303 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E306&amp;lt;br /&amp;gt;&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E306&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P21 [[IMA4 2016/2017 P21|Conception d’une MPS Polyvalente]]&lt;br /&gt;
| Samy Belhouachi / François Xavier Cockenpot&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E301 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E303 et E305&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E303 et E305&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305&amp;lt;br /&amp;gt;&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| C002&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P25 [[IMA4 2016/2017 P25|Robot mobile Polytech'Lille]]&lt;br /&gt;
| Cheikh Said Ahmed / Khadija El Messnaoui&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Said-Ahmed présent&amp;lt;/font&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;font style=&amp;quot;color: red&amp;quot;&amp;gt;El Messnaoui absente&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E303 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305&amp;lt;br /&amp;gt;&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Said-Ahmed présent&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P26 [[IMA4 2016/2017 P26|Train de véhicules]]&lt;br /&gt;
| Manlu Luo / Xinyi Wang&lt;br /&gt;
| E305 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présentes&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présentes&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304 &amp;lt;br /&amp;gt;&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présentes&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P27 [[IMA4 2016/2017 P27|Sonde atmosphérique]]&lt;br /&gt;
| Olivier Mahieux / Grillère Baptiste&lt;br /&gt;
| E306 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P28 [[IMA4 2016/2017 P28|Adaptation d'un émulateur de calculatrices TI]]&lt;br /&gt;
| Rodolphe Toin&lt;br /&gt;
| E305 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présent&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305/301 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305 &amp;lt;br /&amp;gt;&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présent&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P29 [[IMA4 2016/2017 P29|Conteneurs pour site Web]]&lt;br /&gt;
| | E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt;Rattrapage DS&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;absente&amp;lt;/font&amp;gt;&lt;br /&gt;
| Malade&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| Malade&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| Malade&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E303&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E303&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E303&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| Malade&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P30 [[IMA4 2016/2017 P30|Voiture radiocommandée controlée par gant]]&lt;br /&gt;
| Thomas Gosse / Bacem Hagui&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Gosse présent&amp;lt;/font&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Hagui absent&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P31 [[IMA4 2016/2017 P31|Accueil personnalisé par drone]]&lt;br /&gt;
| Tristan Hart / Etienne Profit&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304 &amp;lt;br /&amp;gt;&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P32 [[IMA4 2016/2017 P32|Sécurité: brouilleur d'ondes]]&lt;br /&gt;
| Nicky Ung / Alexis Macherez&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304/301 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304/C205&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305&amp;lt;br /&amp;gt;&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P33 [[IMA4 2016/2017 P33|Sécurité: ingénierie inverse de protocole réseau]]&lt;br /&gt;
| Oumaima Naanaa&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Absente&amp;lt;/font&amp;gt;&lt;br /&gt;
| E301&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présente&amp;lt;/font&amp;gt;&lt;br /&gt;
| E301&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E301&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E306&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E306 C205&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E306 C205&amp;lt;br /&amp;gt;&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présente&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P34 [[IMA4 2016/2017 P34|Interface Haptique, simulateur de formes et de textures]]&lt;br /&gt;
| Alice Coffin / Diana Marrucho&lt;br /&gt;
| IRCICA labo&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| IRCICA labo&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| IRCICA labo&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| IRCICA labo&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| IRCICA labo&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| IRCICA labo&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| IRCICA labo&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| IRCICA labo&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| IRCICA labo&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| IRCICA labo&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P37 [[IMA4 2016/2017 P37|Gamelle connectée]]&lt;br /&gt;
| Lutecia Damiens / Alexis Dorian&lt;br /&gt;
| E306 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E303 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E303 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| Fabricarium&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E303&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E306&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E306&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E306&amp;lt;br /&amp;gt;&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| Alexis : fabricarium - Lutecia : E306&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P38 [[IMA4 2016/2017 P38|Veilleuse enfant connectée]]&lt;br /&gt;
| Hugo Delatte&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présent&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présent&amp;lt;/font&amp;gt;&lt;br /&gt;
| C201&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| C201&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| C201&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| C201/E304&amp;lt;br /&amp;gt;&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présent&amp;lt;/font&amp;gt;&lt;br /&gt;
| C201/E304&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| C201&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P39 [[IMA4 2016/2017 P39|Projecteur laser]]&lt;br /&gt;
| Loïc Tombazzi / Marius Trimbur&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E303 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E303 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E303 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E303 &amp;lt;br /&amp;gt;&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E303 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P44 [[IMA4 2016/2017 P44|3615 Facebook]]&lt;br /&gt;
| Marouan Mcharfi / Tristan lopez&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304&amp;lt;br /&amp;gt;&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présent&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P46 [[IMA4 2016/2017 P46|Aide anti-gaspillage alimentaire ]]&lt;br /&gt;
| Alexandre Huet / François Lefevre&lt;br /&gt;
| E306&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E306 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304&amp;lt;br /&amp;gt;&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P47 [[IMA4 2016/2017 P47|Modélisation d’un robot mobile]]&lt;br /&gt;
| Djamil Mohamed / Hamza Kerroum&lt;br /&gt;
| C305/D306A &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| C305/D306A &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| C305/D306A &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| C305/D306A &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| C305/D306A &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| C305/D306A &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| C305/D306A &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| C305/D306A &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| C305/D306A&amp;lt;br /&amp;gt;&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| C305/D306A&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P48 [[IMA4 2016/2017 P48|Surveillance d'un robot mobile]]&lt;br /&gt;
| Jean-Baptiste Saison&lt;br /&gt;
| C305/D306A &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| C305/D306A &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présent&amp;lt;/font&amp;gt;&lt;br /&gt;
| D306A &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présent&amp;lt;/font&amp;gt;&lt;br /&gt;
| D306A/C305 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| D306A/D322 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| D306A/D322 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| D306A &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| D306A &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| D306A&amp;lt;br /&amp;gt; &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présent&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Tstieven</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Discussion:Projets_IMA4_SC_%26_SA_2016/2017&amp;diff=40677</id>
		<title>Discussion:Projets IMA4 SC &amp; SA 2016/2017</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Discussion:Projets_IMA4_SC_%26_SA_2016/2017&amp;diff=40677"/>
				<updated>2017-03-22T15:26:16Z</updated>
		
		<summary type="html">&lt;p&gt;Tstieven : /* Fiche de présence */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==  Notes sur les projets ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| Projet || Mini-cahier des charges || Mi-parcours || Fin de parcours || Wiki terminé || Rapport || Vidéo&lt;br /&gt;
|-&lt;br /&gt;
| P1 [[IMA4 2016/2017 P1|Climatisation du pauvre]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen;&amp;quot;&amp;gt;Cahier des charges conforme à la discussion avec l'encadrant. Présentation propre avec un effort d'illustration. Pas de liste des tâches ou de calendrier prévisionnel. Quelques coquilles corrigées.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Abandon constaté&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P2 [[IMA4 2016/2017 P2|Réseau de capteurs sur smartphone]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen;&amp;quot;&amp;gt;Cahier des charges succinct. Attention à la rédaction en français. Un effort d'illustration avec un schéma global. Une liste des tâches, sans chiffrage pour l'instant.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Mauvaise utilisation de la feuille d'heures.&amp;lt;/font&amp;gt;&amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt;De gros problèmes de rédaction en français bien compréhensibles.&amp;lt;/font&amp;gt;&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Un Wiki très bien tenu et très bien illustré, une avancée du travail parfaitement expliquée, continuez ainsi !&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P10 [[IMA4 2016/2017 P10|Application de suivi de prise de médicaments]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Cahier des charges assez précis. Pas trop de coquilles. Une liste des tâches un peu succincte. Réfléchissez bien à la structure du programme pour la mise à jour simplifiée des fiches sur l'application.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Feuille d'heures non utilisée, Wiki non mis à jour.&amp;lt;/font&amp;gt;&amp;lt;font style=&amp;quot;color: lightgreen;&amp;quot;&amp;gt;Pour les 4 premières semaine, des paragraphes correctement rédigés et bien illustré, il était possible de se faire une idée de l'avancée du projet.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P11 [[IMA4 2016/2017 P11|Amélioration de l'accueil d'enfants hospitalisés]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Cahier des charges précis. Forme très correcte. Une liste des tâches réfléchie. Il y a même un calendrier prévisionnel.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Aucune utilisation de la feuille d'heures.&amp;lt;/font&amp;gt;&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Un excellent Wiki, très complet, très bien illustré, le travail est parfaitement décrit !&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P14 [[IMA4 2016/2017 P14|Sex toy connecté]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Cahier des charges très précis. De même pour la liste des tâches. L'utilisation de bioloïds ne semble pas justifiée. Pourquoi ne parlez-vous de capteurs que dans le cadre d'un seul des deux appareils ?&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Feuille d'heures très bien exploitée.&amp;lt;/font&amp;gt;&amp;lt;font style=&amp;quot;color: lightgreen;&amp;quot;&amp;gt;Wiki très bien rédigé mais absolument pas illustré, un peu court peut être.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P18 [[IMA4 2016/2017 P18|Education de la position de tête]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen;&amp;quot;&amp;gt;Pas mal de coquilles corrigées. Une certaine imprécision (confusion Arduino Mega et ATMEGA, flou dans la liste des tâches). Cela dit un cahier des charges et une liste des tâches sont présentés. Pensez aux problèmes de calibration du système et à la transmission des données vers un smartphone par exemple.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Mauvaise utilisation de la feuille d'heures.&amp;lt;/font&amp;gt;&amp;lt;font style=&amp;quot;color: yellow;&amp;quot;&amp;gt;Quelques coquilles, le Wiki est un peu vide, pas totalement à jour, dommage que le cahier des charges joint ne soit pas intégré directement au Wiki.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P19 [[IMA4 2016/2017 P19|Orchestre électronique]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen;&amp;quot;&amp;gt;Synthèse correcte de l'entretien avec l'encadrant. Le cahier des charges est correct mais moins précis que le sujet. Le découpage en tâche est un peu rapide : l'analyse des fichiers MIDI devrait être sous-découpée. Presque pas de coquilles.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Très bonne utilisation de la feuille d'heures.&amp;lt;/font&amp;gt;&amp;lt;font style=&amp;quot;color: lightgreen;&amp;quot;&amp;gt;Wiki très synthétique dans un français très correct, à jour, travail sur l'imprimante bien décrit, pas beaucoup d'information sur l'analyse du fichier MIDI.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P20 [[IMA4 2016/2017 P20|Création d’un environnement virtuel de test]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Très bonne prise en main du sujet. Cahier des charges très précis. Liste des tâches bien détaillée. Orthographe irréprochable.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Feuille d'heures bien exploitée, Wiki très bien rédigé, illustré, l'avancé du travail est bien présenté.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P21 [[IMA4 2016/2017 P21|Conception d’une MPS Polyvalente]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen;&amp;quot;&amp;gt;Une grande partie du cahier des charges est une copie du sujet. Définissez ce qu'est une Referee Box. D'un autre coté, le cahier des charges est précis. La liste des tâches est correcte. Cependant elle semble omettre la partie mécanique de la MPS ? Pas de coquilles.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Pas d'utilisation de la feuille d'heures.&amp;lt;/font&amp;gt;&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Wiki bien rédigé et très bien illustré, le travail effectué est présenté. Il serait bien d'avoir une carte rapidement.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P25 [[IMA4 2016/2017 P25|Robot mobile Polytech'Lille]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow;&amp;quot;&amp;gt;Des imprécisions dans la transcription de la réunion avec l'encadrant. Voire des contre-sens. Le cahier des charges est assez complet. Pas de liste des tâches. Vous avez vraiment passé 3h sur la rédaction du cahier des charges ? (edit d'Alex : certainement pas)&amp;lt;/font&amp;gt;&amp;lt;font style=&amp;quot;color: lightgreen;&amp;quot;&amp;gt;Une liste des tâches ajoutée.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Pas d'utilisation de la feuille d'heures.&amp;lt;/font&amp;gt;&amp;lt;font style=&amp;quot;color: yellow;&amp;quot;&amp;gt;Le Wiki est principalement constitué des schématiques et des PCB des différentes cartes. Après tout c'est un point important de votre travail mais le soin apporté à ces productions, s'il s'améliore était initialement assez faible. La rédaction est presque absente ou d'un niveau faible. Vous devriez déjà avoir des cartes en production.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P26 [[IMA4 2016/2017 P26|Train de véhicules]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Le texte a été modifié pour être compréhensible mais le problème n'est pas là. Vous n'avez pas du tout transcrit les demandes de l'encadrant mais donné le sujet du projet de l'an passé. Cette année vous devez améliorer l'aspect esthétique des robots, construire le quatrième robot et améliorer la détection infra-rouge en utilisant le protocole utilisé par les télécommandes infra-rouges classiques. Vous n'avez pas, non plus, donné une liste précise des tâches à réaliser.&amp;lt;/font&amp;gt;&amp;lt;font style=&amp;quot;color: lightgreen;&amp;quot;&amp;gt;Cahier des charges révisé avec l'encadrant. La listes des tâches à réaliser est à préciser.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Pas d'utilisation de la feuille d'heures.&amp;lt;/font&amp;gt;&amp;lt;font style=&amp;quot;color: yellow;&amp;quot;&amp;gt;Wiki assez vide, le seul élément probant est la présentation de la nouvelle version de la carte des robots suiveurs. Des coquilles, ce que l'on peut difficilement vous reprocher. Il faudrait maintenant avoir un code pour le protocole RC5, utilisez deux Arduinos pour avoir un prototype de démonstration.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P27 [[IMA4 2016/2017 P27|Sonde atmosphérique]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen;&amp;quot;&amp;gt;La restitution de la discussion avec l'encadrant est très correcte et le cahier des charge est précisément décrit. Par contre la liste des tâches à effectuer n'est pas dressée en commençant par l'étude des conditions à respecter pour lancer un tel ballon.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Pratiquement pas d'utilisation de la feuille d'heures.&amp;lt;/font&amp;gt;&amp;lt;font style=&amp;quot;color: yellow;&amp;quot;&amp;gt;Wiki un peu rapide, illustré, quelques coquilles. Peu de résultats à ce jour, vous devriez avoir votre carte et avoir conduit un test de communication avec les capteurs et les modules LoRa.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P28 [[IMA4 2016/2017 P28|Adaptation d'un émulateur de calculatrices TI]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen;&amp;quot;&amp;gt;Assimilation très correcte des demandes faites par les encadrants. Un cahier des charges précis. De même pour la liste des tâches. Un effort de présentation sans trop de coquilles. Cependant quelques erreurs relevées par M. Dhaussy, merci de corriger le CdC au vu des remarques transmises.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Pas d'utilisation de la feuille d'heures.&amp;lt;/font&amp;gt;&amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Wiki à l'abandon, impossible de savoir où vous en êtes dans le travail. Réagissez immédiatement !&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P29 [[IMA4 2016/2017 P29|Conteneurs pour site Web]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow;&amp;quot;&amp;gt;Le cahier des charges est une recopie du sujet, avec des passages soulignés, certes. Une liste des tâches très précise mais uniquement orientée développement Web. Il manque toute la partie étude et utilisation des éco-systèmes d'isolation.&amp;lt;/font&amp;gt;&amp;lt;font style=&amp;quot;color: lightgreen;&amp;quot;&amp;gt;Cahier des charges plus précis, vous pouvez vous lancer.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Pas d'utilisation de la feuille d'heures.&amp;lt;/font&amp;gt;&amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt;Partie travail du Wiki presque vide, pas d'illustration, il est à craindre que le travail ne soit pas plus avancé que le Wiki.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P30 [[IMA4 2016/2017 P30|Voiture radiocommandée controlée par gant]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Cahier des charges très précis avec déjà des idées pour la réalisation. Liste des tâches à effectuer très détaillée.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Pas d'utilisation de la feuille d'heures.&amp;lt;/font&amp;gt;&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Très bon Wiki, bien illustré, travail bien décrit.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P31 [[IMA4 2016/2017 P31|Accueil personnalisé par drone]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Très peu d'apport par rapport au sujet qui est lui même assez bref. Il ne semble pas y avoir eu de rencontre avec l'encadrant dans les temps impartis ? Pas de liste des tâches.&amp;lt;/font&amp;gt; &amp;lt;font style=&amp;quot;color: lightgreen;&amp;quot;&amp;gt;Cahier des charges révisés sous la direction de deux encadrants.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Mauvaise utilisation de la feuille d'heures.&amp;lt;/font&amp;gt;&amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Wiki vide, rien de concret semble avoir été réalisé, aucune illustration. Il va falloir mettre les bouchées quadruples ...&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P32 [[IMA4 2016/2017 P32|Sécurité: brouilleur d'ondes]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow;&amp;quot;&amp;gt;Le cahier des charges est une paraphrase du sujet. Dans la liste des tâches il semble curieux de ne pas commencer par l'étude des brouilleurs. Avez-vous échangé avec vos encadrants ?&amp;lt;/font&amp;gt;&amp;lt;font style=&amp;quot;color: lightgreen&amp;quot;&amp;gt;Cahier des charges plus précis.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen;&amp;quot;&amp;gt;Tentative d'utilisation de la feuille d'heures, definissez au préalable les lignes dans ce tableau.&amp;lt;/font&amp;gt;&amp;lt;font style=&amp;quot;color: yellow;&amp;quot;&amp;gt;Un Wiki trop rapidement rédigé en style télégraphique avec des coquilles, à la lecture du Wiki il est difficile de croire que vous avez passé le nombre d'heures annoncées pour si peu de résultats.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P33 [[IMA4 2016/2017 P33|Sécurité: ingénierie inverse de protocole réseau]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Une simple paraphrase du sujet. Pas de liste des tâches à réaliser. Il semble que vous n'avez pas réussi à échanger avec vos encadrants dans les temps impartis. Des coquilles (corrigées).&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Mauvaise utilisation de la feuille d'heures.&amp;lt;/font&amp;gt;&amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt;Wiki pratiquement vide, l'image n'apporte rien, le Wiki ne reflète que peu de travail.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P34 [[IMA4 2016/2017 P34|Interface Haptique, simulateur de formes et de textures]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Une rencontre avec les encadrants. Un cahier des charges assez précis. Pas de section &amp;quot;tâches à réaliser&amp;quot; mais une section &amp;quot;notre travail&amp;quot; qui pourrait en tenir lieu avec un effort de structuration.&amp;lt;/font&amp;gt;&lt;br /&gt;
|  &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Utilisation de la feuille d'heure.&amp;lt;/font&amp;gt;&amp;lt;font style=&amp;quot;color: lightgreen;&amp;quot;&amp;gt;Un Wiki trop synthétique, des illustrations à venir ?&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P37 [[IMA4 2016/2017 P37|Gamelle connectée]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen;&amp;quot;&amp;gt;Présentez les objectifs généraux pour commencer. Un cahier des charges très précis mais il manque la liste des tâches à effectuer. Débutez la par l'état de l'art sur les produits déjà commercialisés.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Bonne utilisation de la fichier d'heures.&amp;lt;/font&amp;gt;&amp;lt;font style=&amp;quot;color: lightgreen;&amp;quot;&amp;gt;Excellent Wiki mais non mis à jour ; il s'arrête à la semaine 4.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P38 [[IMA4 2016/2017 P38|Veilleuse enfant connectée]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow;&amp;quot;&amp;gt;Le sujet du projet à été recopié. Les deux sections personnelles sont assez mal rédigées. Un contre-sens sur le mode de connexion du prototype actuel : la veilleuse est configurée en point d'accès. Parlez plutôt de &amp;quot;Précisions sur le cahier des charges&amp;quot; plutôt que de &amp;quot;Problèmes rencontrés sur l'étude du projet&amp;quot;. Renommez aussi &amp;quot;Nouveau cahier des charges&amp;quot; en &amp;quot;Tâches à réaliser&amp;quot; et ajouter les autres tâches demandées dans le sujet.&amp;lt;/font&amp;gt;&amp;lt;font style=&amp;quot;color: lightgreen;&amp;quot;&amp;gt;Cahier des charges et listes des tâches finalement validés par deux encadrants.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Bonne utilisation de la feuille d'heures.&amp;lt;/font&amp;gt;&amp;lt;font style=&amp;quot;color: lightgreen;&amp;quot;&amp;gt;Bon Wiki, correctement illustré. Par contre faudrait arriver à présenter une réalisation, vous prenez du retard.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P39 [[IMA4 2016/2017 P39|Projecteur laser]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: firebrick;&amp;quot;&amp;gt;Uniquement une recopie du sujet.&amp;lt;/font&amp;gt;&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Un cahier des charges et une liste de tâches corrects après discussion avec deux encadrants.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Mauvaise utilisation de la feuille d'heures.&amp;lt;/font&amp;gt;&amp;lt;font style=&amp;quot;color: lightgreen;&amp;quot;&amp;gt;Le Wiki n'est pas à jour, il s'arrête à la semaine 4. Bien illustré. Le travail se concentre sur la partie logicielle, en particulier avec un traitement d'image non demandé mais intéressant. Il faudrait se pencher très vite sur le contrôle des lasers.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P44 [[IMA4 2016/2017 P44|3615 Facebook]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Un très bon cahier des charges. Le sujet semble être bien assimilé. Une liste des tâches correcte (il faudrait peut-être détailler la programmation du proxy).&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Un Wiki tout simplement parfait.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P46 [[IMA4 2016/2017 P46|Aide anti-gaspillage alimentaire ]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Un excellent cahier des charges. Liste des tâches très détaillée. Parfait.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Pas d'utilisation de la feuille d'heures.&amp;lt;/font&amp;gt;&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Wiki très détaillé, correctement illustré, le travail effectué est présenté correctement.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P47 [[IMA4 2016/2017 P47|Modélisation d’un robot mobile]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Vous n'avez pas su vous adapter à la syntaxe mediawiki. Correction pour obtenir un CdC lisible. Une recopie intégrale du sujet. Un cahier des charges qui ressemble plus à une liste des tâches à effectuer.&amp;lt;/font&amp;gt;&amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt;Vous utilisez bien la syntaxe mediawiki maintenant. Par contre il n'y a toujours pas de cahier des charges.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen;&amp;quot;&amp;gt;Feuille d'heures utilisée. Un Wiki mis à jour. Il est très difficile de se faire une idée de votre travail. Il semble que vous soyez actuellement plutôt en TP qu'en projet ?&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P48 [[IMA4 2016/2017 P48|Surveillance d'un robot mobile]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt;Un cahier des charges en 4 lignes, c'est trop court. En particulier rien sur le contexte du projet à savoir le matériel ou le simulateur sur lequel les tests seront effectués. Une liste des tâches, cette liste est-elle avalisé par l'encadrant ?&amp;lt;/font&amp;gt;&amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt;Toujours pas de cahier des charges.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow;&amp;quot;&amp;gt;Feuille d'heures correctement remplie. Wiki plutôt vide. Il est difficile de se faire une idée du travail réalisé, vous semblez bloqué à l'étape bibliographie.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Fiche de présence ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Projet !! Elèves !! Séance 1 (25/01) !! Séance 2 (01/02) !! Séance 3 (08/02) !! Séance 4 (15/02) !! Séance 5 (01/03) !! Séance 6 (08/03) !! Séance 7 !! Séance 8 !! Séance 9 !! Séance 10&lt;br /&gt;
|-&lt;br /&gt;
| P1 [[IMA4 2016/2017 P1|Climatisation du pauvre]]&lt;br /&gt;
| Haroun Abdelali&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Absent&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Absent&amp;lt;/font&amp;gt;&lt;br /&gt;
| D317 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| D309 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| D309 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P2 [[IMA4 2016/2017 P2|Réseau de capteurs sur smartphone]]&lt;br /&gt;
| Wenyu sun / Xinyue xu&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Presentes&amp;lt;/font&amp;gt;&lt;br /&gt;
| C201 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présentes&amp;lt;/font&amp;gt;&lt;br /&gt;
| C201&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présentes&amp;lt;/font&amp;gt;&lt;br /&gt;
| C201&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présentes&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304&amp;amp;C201&lt;br /&gt;
| E304&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P10 [[IMA4 2016/2017 P10|Application de suivi de prise de médicaments]]&lt;br /&gt;
| Martin Rohmer / Kévin Godesence&lt;br /&gt;
| E306 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E303 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E301 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E303&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P11 [[IMA4 2016/2017 P11|Amélioration de l'accueil d'enfants hospitalisés]]&lt;br /&gt;
| Robin Cavalieri / Edmur Lopes&lt;br /&gt;
| E305 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P14 [[IMA4 2016/2017 P14|Sex toy connecté]]&lt;br /&gt;
| Cedric Roussel / Thomas Stievenard&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E303 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E303&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E303/E305&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P18 [[IMA4 2016/2017 P18|Education de la position de tête]]&lt;br /&gt;
| Mame Arame Diop / Amina Fahem&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E303 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présentes&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E306&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P19 [[IMA4 2016/2017 P19|Orchestre électronique]]&lt;br /&gt;
| Antoine Arnaudet / Vivian Senaffe&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Arnaudet présent&amp;lt;/font&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Senaffe absent&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P20 [[IMA4 2016/2017 P20|Création d’un environnement virtuel de test]]&lt;br /&gt;
| Butaye Marianne / François Duport&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E303 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E306&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P21 [[IMA4 2016/2017 P21|Conception d’une MPS Polyvalente]]&lt;br /&gt;
| Samy Belhouachi / François Xavier Cockenpot&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E301 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E303 et E305&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E303 et E305&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P25 [[IMA4 2016/2017 P25|Robot mobile Polytech'Lille]]&lt;br /&gt;
| Cheikh Said Ahmed / Khadija El Messnaoui&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Said-Ahmed présent&amp;lt;/font&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;font style=&amp;quot;color: red&amp;quot;&amp;gt;El Messnaoui absente&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E303 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P26 [[IMA4 2016/2017 P26|Train de véhicules]]&lt;br /&gt;
| Manlu Luo / Xinyi Wang&lt;br /&gt;
| E305 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présentes&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présentes&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P27 [[IMA4 2016/2017 P27|Sonde atmosphérique]]&lt;br /&gt;
| Olivier Mahieux / Grillère Baptiste&lt;br /&gt;
| E306 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P28 [[IMA4 2016/2017 P28|Adaptation d'un émulateur de calculatrices TI]]&lt;br /&gt;
| Rodolphe Toin&lt;br /&gt;
| E305 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présent&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305/301 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P29 [[IMA4 2016/2017 P29|Conteneurs pour site Web]]&lt;br /&gt;
| | E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt;Rattrapage DS&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Abs&amp;lt;/font&amp;gt;&lt;br /&gt;
| Malade&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| Malade&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| Malade&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E303&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E303&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E303&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P30 [[IMA4 2016/2017 P30|Voiture radiocommandée controlée par gant]]&lt;br /&gt;
| Thomas Gosse / Bacem Hagui&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Gosse présent&amp;lt;/font&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Hagui absent&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P31 [[IMA4 2016/2017 P31|Accueil personnalisé par drone]]&lt;br /&gt;
| Tristan Hart / Etienne Profit&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P32 [[IMA4 2016/2017 P32|Sécurité: brouilleur d'ondes]]&lt;br /&gt;
| Nicky Ung / Alexis Macherez&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304/301 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304/C205&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P33 [[IMA4 2016/2017 P33|Sécurité: ingénierie inverse de protocole réseau]]&lt;br /&gt;
| Oumaima Naanaa&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Absente&amp;lt;/font&amp;gt;&lt;br /&gt;
| E301&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présente&amp;lt;/font&amp;gt;&lt;br /&gt;
| E301&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E301&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E306&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E306 C205&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E306 C205&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P34 [[IMA4 2016/2017 P34|Interface Haptique, simulateur de formes et de textures]]&lt;br /&gt;
| Alice Coffin / Diana Marrucho&lt;br /&gt;
| IRCICA labo&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| IRCICA labo&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| IRCICA labo&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| IRCICA labo&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| IRCICA labo&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| IRCICA labo&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| IRCICA labo&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| IRCICA labo&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| IRCICA labo&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| IRCICA labo&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P37 [[IMA4 2016/2017 P37|Gamelle connectée]]&lt;br /&gt;
| Lutecia Damiens / Alexis Dorian&lt;br /&gt;
| E306 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E303 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E303 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| Fabricarium&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E303&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E306&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E306&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E306&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P38 [[IMA4 2016/2017 P38|Veilleuse enfant connectée]]&lt;br /&gt;
| Hugo Delatte&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P39 [[IMA4 2016/2017 P39|Projecteur laser]]&lt;br /&gt;
| Loïc Tombazzi / Marius Trimbur&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E303 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E303 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E303 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E303 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P44 [[IMA4 2016/2017 P44|3615 Facebook]]&lt;br /&gt;
| Marouan Mcharfi / Tristan lopez&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P46 [[IMA4 2016/2017 P46|Aide anti-gaspillage alimentaire ]]&lt;br /&gt;
| Alexandre Huet / François Lefevre&lt;br /&gt;
| E306&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E306 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P47 [[IMA4 2016/2017 P47|Modélisation d’un robot mobile]]&lt;br /&gt;
| Djamil Mohamed / Hamza Kerroum&lt;br /&gt;
| C305/D306A &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| C305/D306A &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| C305/D306A &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| C305/D306A &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| C305/D306A &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| C305/D306A &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| C305/D306A &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| C305/D306A &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P48 [[IMA4 2016/2017 P48|Surveillance d'un robot mobile]]&lt;br /&gt;
| Jean-Baptiste Saison&lt;br /&gt;
| C305/D306A &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| C305/D306A &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présent&amp;lt;/font&amp;gt;&lt;br /&gt;
| D306A &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présent&amp;lt;/font&amp;gt;&lt;br /&gt;
| D306A/C305 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| D306A/D322 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| D306A/D322 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| D306A &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| D306A &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Tstieven</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Discussion:Projets_IMA4_SC_%26_SA_2016/2017&amp;diff=40366</id>
		<title>Discussion:Projets IMA4 SC &amp; SA 2016/2017</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Discussion:Projets_IMA4_SC_%26_SA_2016/2017&amp;diff=40366"/>
				<updated>2017-03-15T16:31:39Z</updated>
		
		<summary type="html">&lt;p&gt;Tstieven : /* Fiche de présence */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==  Notes sur les projets ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| Projet || Mini-cahier des charges || Mi-parcours || Fin de parcours || Wiki terminé || Rapport || Vidéo&lt;br /&gt;
|-&lt;br /&gt;
| P1 [[IMA4 2016/2017 P1|Climatisation du pauvre]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen;&amp;quot;&amp;gt;Cahier des charges conforme à la discussion avec l'encadrant. Présentation propre avec un effort d'illustration. Pas de liste des tâches ou de calendrier prévisionnel. Quelques coquilles corrigées.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Abandon constaté&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P2 [[IMA4 2016/2017 P2|Réseau de capteurs sur smartphone]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen;&amp;quot;&amp;gt;Cahier des charges succinct. Attention à la rédaction en français. Un effort d'illustration avec un schéma global. Une liste des tâches, sans chiffrage pour l'instant.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Mauvaise utilisation de la feuille d'heures.&amp;lt;/font&amp;gt;&amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt;De gros problèmes de rédaction en français bien compréhensibles.&amp;lt;/font&amp;gt;&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Un Wiki très bien tenu et très bien illustré, une avancée du travail parfaitement expliquée, continuez ainsi !&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P10 [[IMA4 2016/2017 P10|Application de suivi de prise de médicaments]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Cahier des charges assez précis. Pas trop de coquilles. Une liste des tâches un peu succincte. Réfléchissez bien à la structure du programme pour la mise à jour simplifiée des fiches sur l'application.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Feuille d'heures non utilisée, Wiki non mis à jour.&amp;lt;/font&amp;gt;&amp;lt;font style=&amp;quot;color: lightgreen;&amp;quot;&amp;gt;Pour les 4 premières semaine, des paragraphes correctement rédigés et bien illustré, il était possible de se faire une idée de l'avancée du projet.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P11 [[IMA4 2016/2017 P11|Amélioration de l'accueil d'enfants hospitalisés]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Cahier des charges précis. Forme très correcte. Une liste des tâches réfléchie. Il y a même un calendrier prévisionnel.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Aucune utilisation de la feuille d'heures.&amp;lt;/font&amp;gt;&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Un excellent Wiki, très complet, très bien illustré, le travail est parfaitement décrit !&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P14 [[IMA4 2016/2017 P14|Sex toy connecté]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Cahier des charges très précis. De même pour la liste des tâches. L'utilisation de bioloïds ne semble pas justifiée. Pourquoi ne parlez-vous de capteurs que dans le cadre d'un seul des deux appareils ?&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Feuille d'heures très bien exploitée.&amp;lt;/font&amp;gt;&amp;lt;font style=&amp;quot;color: lightgreen;&amp;quot;&amp;gt;Wiki très bien rédigé mais absolument pas illustré, un peu court peut être.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P18 [[IMA4 2016/2017 P18|Education de la position de tête]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen;&amp;quot;&amp;gt;Pas mal de coquilles corrigées. Une certaine imprécision (confusion Arduino Mega et ATMEGA, flou dans la liste des tâches). Cela dit un cahier des charges et une liste des tâches sont présentés. Pensez aux problèmes de calibration du système et à la transmission des données vers un smartphone par exemple.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Mauvaise utilisation de la feuille d'heures.&amp;lt;/font&amp;gt;&amp;lt;font style=&amp;quot;color: yellow;&amp;quot;&amp;gt;Quelques coquilles, le Wiki est un peu vide, pas totalement à jour, dommage que le cahier des charges joint ne soit pas intégré directement au Wiki.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P19 [[IMA4 2016/2017 P19|Orchestre électronique]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen;&amp;quot;&amp;gt;Synthèse correcte de l'entretien avec l'encadrant. Le cahier des charges est correct mais moins précis que le sujet. Le découpage en tâche est un peu rapide : l'analyse des fichiers MIDI devrait être sous-découpée. Presque pas de coquilles.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Très bonne utilisation de la feuille d'heures.&amp;lt;/font&amp;gt;&amp;lt;font style=&amp;quot;color: lightgreen;&amp;quot;&amp;gt;Wiki très synthétique dans un français très correct, à jour, travail sur l'imprimante bien décrit, pas beaucoup d'information sur l'analyse du fichier MIDI.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P20 [[IMA4 2016/2017 P20|Création d’un environnement virtuel de test]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Très bonne prise en main du sujet. Cahier des charges très précis. Liste des tâches bien détaillée. Orthographe irréprochable.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Feuille d'heures bien exploitée, Wiki très bien rédigé, illustré, l'avancé du travail est bien présenté.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P21 [[IMA4 2016/2017 P21|Conception d’une MPS Polyvalente]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen;&amp;quot;&amp;gt;Une grande partie du cahier des charges est une copie du sujet. Définissez ce qu'est une Referee Box. D'un autre coté, le cahier des charges est précis. La liste des tâches est correcte. Cependant elle semble omettre la partie mécanique de la MPS ? Pas de coquilles.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Pas d'utilisation de la feuille d'heures.&amp;lt;/font&amp;gt;&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Wiki bien rédigé et très bien illustré, le travail effectué est présenté. Il serait bien d'avoir une carte rapidement.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P25 [[IMA4 2016/2017 P25|Robot mobile Polytech'Lille]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow;&amp;quot;&amp;gt;Des imprécisions dans la transcription de la réunion avec l'encadrant. Voire des contre-sens. Le cahier des charges est assez complet. Pas de liste des tâches. Vous avez vraiment passé 3h sur la rédaction du cahier des charges ? (edit d'Alex : certainement pas)&amp;lt;/font&amp;gt;&amp;lt;font style=&amp;quot;color: lightgreen;&amp;quot;&amp;gt;Une liste des tâches ajoutée.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Pas d'utilisation de la feuille d'heures.&amp;lt;/font&amp;gt;&amp;lt;font style=&amp;quot;color: yellow;&amp;quot;&amp;gt;Le Wiki est principalement constitué des schématiques et des PCB des différentes cartes. Après tout c'est un point important de votre travail mais le soin apporté à ces productions, s'il s'améliore était initialement assez faible. La rédaction est presque absente ou d'un niveau faible. Vous devriez déjà avoir des cartes en production.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P26 [[IMA4 2016/2017 P26|Train de véhicules]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Le texte a été modifié pour être compréhensible mais le problème n'est pas là. Vous n'avez pas du tout transcrit les demandes de l'encadrant mais donné le sujet du projet de l'an passé. Cette année vous devez améliorer l'aspect esthétique des robots, construire le quatrième robot et améliorer la détection infra-rouge en utilisant le protocole utilisé par les télécommandes infra-rouges classiques. Vous n'avez pas, non plus, donné une liste précise des tâches à réaliser.&amp;lt;/font&amp;gt;&amp;lt;font style=&amp;quot;color: lightgreen;&amp;quot;&amp;gt;Cahier des charges révisé avec l'encadrant. La listes des tâches à réaliser est à préciser.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Pas d'utilisation de la feuille d'heures.&amp;lt;/font&amp;gt;&amp;lt;font style=&amp;quot;color: yellow;&amp;quot;&amp;gt;Wiki assez vide, le seul élément probant est la présentation de la nouvelle version de la carte des robots suiveurs. Des coquilles, ce que l'on peut difficilement vous reprocher. Il faudrait maintenant avoir un code pour le protocole RC5, utilisez deux Arduinos pour avoir un prototype de démonstration.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P27 [[IMA4 2016/2017 P27|Sonde atmosphérique]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen;&amp;quot;&amp;gt;La restitution de la discussion avec l'encadrant est très correcte et le cahier des charge est précisément décrit. Par contre la liste des tâches à effectuer n'est pas dressée en commençant par l'étude des conditions à respecter pour lancer un tel ballon.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Pratiquement pas d'utilisation de la feuille d'heures.&amp;lt;/font&amp;gt;&amp;lt;font style=&amp;quot;color: yellow;&amp;quot;&amp;gt;Wiki un peu rapide, illustré, quelques coquilles. Peu de résultats à ce jour, vous devriez avoir votre carte et avoir conduit un test de communication avec les capteurs et les modules LoRa.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P28 [[IMA4 2016/2017 P28|Adaptation d'un émulateur de calculatrices TI]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen;&amp;quot;&amp;gt;Assimilation très correcte des demandes faites par les encadrants. Un cahier des charges précis. De même pour la liste des tâches. Un effort de présentation sans trop de coquilles. Cependant quelques erreurs relevées par M. Dhaussy, merci de corriger le CdC au vu des remarques transmises.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Pas d'utilisation de la feuille d'heures.&amp;lt;/font&amp;gt;&amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Wiki à l'abandon, impossible de savoir où vous en êtes dans le travail. Réagissez immédiatement !&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P29 [[IMA4 2016/2017 P29|Conteneurs pour site Web]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow;&amp;quot;&amp;gt;Le cahier des charges est une recopie du sujet, avec des passages soulignés, certes. Une liste des tâches très précise mais uniquement orientée développement Web. Il manque toute la partie étude et utilisation des éco-systèmes d'isolation.&amp;lt;/font&amp;gt;&amp;lt;font style=&amp;quot;color: lightgreen;&amp;quot;&amp;gt;Cahier des charges plus précis, vous pouvez vous lancer.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Pas d'utilisation de la feuille d'heures.&amp;lt;/font&amp;gt;&amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt;Partie travail du Wiki presque vide, pas d'illustration, il est à craindre que le travail ne soit pas plus avancé que le Wiki.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P30 [[IMA4 2016/2017 P30|Voiture radiocommandée controlée par gant]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Cahier des charges très précis avec déjà des idées pour la réalisation. Liste des tâches à effectuer très détaillée.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Pas d'utilisation de la feuille d'heures.&amp;lt;/font&amp;gt;&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Très bon Wiki, bien illustré, travail bien décrit.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P31 [[IMA4 2016/2017 P31|Accueil personnalisé par drone]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Très peu d'apport par rapport au sujet qui est lui même assez bref. Il ne semble pas y avoir eu de rencontre avec l'encadrant dans les temps impartis ? Pas de liste des tâches.&amp;lt;/font&amp;gt; &amp;lt;font style=&amp;quot;color: lightgreen;&amp;quot;&amp;gt;Cahier des charges révisés sous la direction de deux encadrants.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Mauvaise utilisation de la feuille d'heures.&amp;lt;/font&amp;gt;&amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Wiki vide, rien de concret semble avoir été réalisé, aucune illustration. Il va falloir mettre les bouchées quadruples ...&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P32 [[IMA4 2016/2017 P32|Sécurité: brouilleur d'ondes]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow;&amp;quot;&amp;gt;Le cahier des charges est une paraphrase du sujet. Dans la liste des tâches il semble curieux de ne pas commencer par l'étude des brouilleurs. Avez-vous échangé avec vos encadrants ?&amp;lt;/font&amp;gt;&amp;lt;font style=&amp;quot;color: lightgreen&amp;quot;&amp;gt;Cahier des charges plus précis.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen;&amp;quot;&amp;gt;Tentative d'utilisation de la feuille d'heures, definissez au préalable les lignes dans ce tableau.&amp;lt;/font&amp;gt;&amp;lt;font style=&amp;quot;color: yellow;&amp;quot;&amp;gt;Un Wiki trop rapidement rédigé en style télégraphique avec des coquilles, à la lecture du Wiki il est difficile de croire que vous avez passé le nombre d'heures annoncées pour si peu de résultats.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P33 [[IMA4 2016/2017 P33|Sécurité: ingénierie inverse de protocole réseau]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Une simple paraphrase du sujet. Pas de liste des tâches à réaliser. Il semble que vous n'avez pas réussi à échanger avec vos encadrants dans les temps impartis. Des coquilles (corrigées).&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Mauvaise utilisation de la feuille d'heures.&amp;lt;/font&amp;gt;&amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt;Wiki pratiquement vide, l'image n'apporte rien, le Wiki ne reflète que peu de travail.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P34 [[IMA4 2016/2017 P34|Interface Haptique, simulateur de formes et de textures]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Une rencontre avec les encadrants. Un cahier des charges assez précis. Pas de section &amp;quot;tâches à réaliser&amp;quot; mais une section &amp;quot;notre travail&amp;quot; qui pourrait en tenir lieu avec un effort de structuration.&amp;lt;/font&amp;gt;&lt;br /&gt;
|  &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Utilisation de la feuille d'heure.&amp;lt;/font&amp;gt;&amp;lt;font style=&amp;quot;color: lightgreen;&amp;quot;&amp;gt;Un Wiki trop synthétique, des illustrations à venir ?&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P37 [[IMA4 2016/2017 P37|Gamelle connectée]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen;&amp;quot;&amp;gt;Présentez les objectifs généraux pour commencer. Un cahier des charges très précis mais il manque la liste des tâches à effectuer. Débutez la par l'état de l'art sur les produits déjà commercialisés.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Bonne utilisation de la fichier d'heures.&amp;lt;/font&amp;gt;&amp;lt;font style=&amp;quot;color: lightgreen;&amp;quot;&amp;gt;Excellent Wiki mais non mis à jour ; il s'arrête à la semaine 4.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P38 [[IMA4 2016/2017 P38|Veilleuse enfant connectée]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow;&amp;quot;&amp;gt;Le sujet du projet à été recopié. Les deux sections personnelles sont assez mal rédigées. Un contre-sens sur le mode de connexion du prototype actuel : la veilleuse est configurée en point d'accès. Parlez plutôt de &amp;quot;Précisions sur le cahier des charges&amp;quot; plutôt que de &amp;quot;Problèmes rencontrés sur l'étude du projet&amp;quot;. Renommez aussi &amp;quot;Nouveau cahier des charges&amp;quot; en &amp;quot;Tâches à réaliser&amp;quot; et ajouter les autres tâches demandées dans le sujet.&amp;lt;/font&amp;gt;&amp;lt;font style=&amp;quot;color: lightgreen;&amp;quot;&amp;gt;Cahier des charges et listes des tâches finalement validés par deux encadrants.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Bonne utilisation de la feuille d'heures.&amp;lt;/font&amp;gt;&amp;lt;font style=&amp;quot;color: lightgreen;&amp;quot;&amp;gt;Bon Wiki, correctement illustré. Par contre faudrait arriver à présenter une réalisation, vous prenez du retard.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P39 [[IMA4 2016/2017 P39|Projecteur laser]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: firebrick;&amp;quot;&amp;gt;Uniquement une recopie du sujet.&amp;lt;/font&amp;gt;&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Un cahier des charges et une liste de tâches corrects après discussion avec deux encadrants.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Mauvaise utilisation de la feuille d'heures.&amp;lt;/font&amp;gt;&amp;lt;font style=&amp;quot;color: lightgreen;&amp;quot;&amp;gt;Le Wiki n'est pas à jour, il s'arrête à la semaine 4. Bien illustré. Le travail se concentre sur la partie logicielle, en particulier avec un traitement d'image non demandé mais intéressant. Il faudrait se pencher très vite sur le contrôle des lasers.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P44 [[IMA4 2016/2017 P44|3615 Facebook]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Un très bon cahier des charges. Le sujet semble être bien assimilé. Une liste des tâches correcte (il faudrait peut-être détailler la programmation du proxy).&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Un Wiki tout simplement parfait.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P46 [[IMA4 2016/2017 P46|Aide anti-gaspillage alimentaire ]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Un excellent cahier des charges. Liste des tâches très détaillée. Parfait.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Pas d'utilisation de la feuille d'heures.&amp;lt;/font&amp;gt;&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Wiki très détaillé, correctement illustré, le travail effectué est présenté correctement.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P47 [[IMA4 2016/2017 P47|Modélisation d’un robot mobile]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Vous n'avez pas su vous adapter à la syntaxe mediawiki. Correction pour obtenir un CdC lisible. Une recopie intégrale du sujet. Un cahier des charges qui ressemble plus à une liste des tâches à effectuer.&amp;lt;/font&amp;gt;&amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt;Vous utilisez bien la syntaxe mediawiki maintenant. Par contre il n'y a toujours pas de cahier des charges.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen;&amp;quot;&amp;gt;Feuille d'heures utilisée. Un Wiki mis à jour. Il est très difficile de se faire une idée de votre travail. Il semble que vous soyez actuellement plutôt en TP qu'en projet ?&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P48 [[IMA4 2016/2017 P48|Surveillance d'un robot mobile]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt;Un cahier des charges en 4 lignes, c'est trop court. En particulier rien sur le contexte du projet à savoir le matériel ou le simulateur sur lequel les tests seront effectués. Une liste des tâches, cette liste est-elle avalisé par l'encadrant ?&amp;lt;/font&amp;gt;&amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt;Toujours pas de cahier des charges.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow;&amp;quot;&amp;gt;Feuille d'heures correctement remplie. Wiki plutôt vide. Il est difficile de se faire une idée du travail réalisé, vous semblez bloqué à l'étape bibliographie.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Fiche de présence ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Projet !! Elèves !! Séance 1 (25/01) !! Séance 2 (01/02) !! Séance 3 (08/02) !! Séance 4 (15/02) !! Séance 5 (01/03) !! Séance 6 (08/03) !! Séance 7 !! Séance 8 !! Séance 9 !! Séance 10&lt;br /&gt;
|-&lt;br /&gt;
| P1 [[IMA4 2016/2017 P1|Climatisation du pauvre]]&lt;br /&gt;
| Haroun Abdelali&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Absent&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Absent&amp;lt;/font&amp;gt;&lt;br /&gt;
| D317 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| D309 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| D309 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P2 [[IMA4 2016/2017 P2|Réseau de capteurs sur smartphone]]&lt;br /&gt;
| Wenyu sun / Xinyue xu&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Presentes&amp;lt;/font&amp;gt;&lt;br /&gt;
| C201 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présentes&amp;lt;/font&amp;gt;&lt;br /&gt;
| C201&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présentes&amp;lt;/font&amp;gt;&lt;br /&gt;
| C201&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présentes&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304&amp;amp;C201&lt;br /&gt;
| E304&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P10 [[IMA4 2016/2017 P10|Application de suivi de prise de médicaments]]&lt;br /&gt;
| Martin Rohmer / Kévin Godesence&lt;br /&gt;
| E306 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E303 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E301 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E303&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P11 [[IMA4 2016/2017 P11|Amélioration de l'accueil d'enfants hospitalisés]]&lt;br /&gt;
| Robin Cavalieri / Edmur Lopes&lt;br /&gt;
| E305 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P14 [[IMA4 2016/2017 P14|Sex toy connecté]]&lt;br /&gt;
| Cedric Roussel / Thomas Stievenard&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E303 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E303&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P18 [[IMA4 2016/2017 P18|Education de la position de tête]]&lt;br /&gt;
| Mame Arame Diop / Amina Fahem&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E303 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présentes&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E306&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P19 [[IMA4 2016/2017 P19|Orchestre électronique]]&lt;br /&gt;
| Antoine Arnaudet / Vivian Senaffe&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Arnaudet présent&amp;lt;/font&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Senaffe absent&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P20 [[IMA4 2016/2017 P20|Création d’un environnement virtuel de test]]&lt;br /&gt;
| Butaye Marianne / François Duport&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E303 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P21 [[IMA4 2016/2017 P21|Conception d’une MPS Polyvalente]]&lt;br /&gt;
| Samy Belhouachi / François Xavier Cockenpot&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E301 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E303 et E305&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E303 et E305&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P25 [[IMA4 2016/2017 P25|Robot mobile Polytech'Lille]]&lt;br /&gt;
| Cheikh Said Ahmed / Khadija El Messnaoui&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Said-Ahmed présent&amp;lt;/font&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;font style=&amp;quot;color: red&amp;quot;&amp;gt;El Messnaoui absente&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E303 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P26 [[IMA4 2016/2017 P26|Train de véhicules]]&lt;br /&gt;
| Manlu Luo / Xinyi Wang&lt;br /&gt;
| E305 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présentes&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présentes&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P27 [[IMA4 2016/2017 P27|Sonde atmosphérique]]&lt;br /&gt;
| Olivier Mahieux / Grillère Baptiste&lt;br /&gt;
| E306 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P28 [[IMA4 2016/2017 P28|Adaptation d'un émulateur de calculatrices TI]]&lt;br /&gt;
| Rodolphe Toin&lt;br /&gt;
| E305 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présent&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305/301 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P29 [[IMA4 2016/2017 P29|Conteneurs pour site Web]]&lt;br /&gt;
| | E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt;Rattrapage DS&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Abs&amp;lt;/font&amp;gt;&lt;br /&gt;
| Malade&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| Malade&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| Malade&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E303&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E303&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P30 [[IMA4 2016/2017 P30|Voiture radiocommandée controlée par gant]]&lt;br /&gt;
| Thomas Gosse / Bacem Hagui&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Gosse présent&amp;lt;/font&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Hagui absent&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P31 [[IMA4 2016/2017 P31|Accueil personnalisé par drone]]&lt;br /&gt;
| Tristan Hart / Etienne Profit&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P32 [[IMA4 2016/2017 P32|Sécurité: brouilleur d'ondes]]&lt;br /&gt;
| Nicky Ung / Alexis Macherez&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304/301 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304/C205&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P33 [[IMA4 2016/2017 P33|Sécurité: ingénierie inverse de protocole réseau]]&lt;br /&gt;
| Oumaima Naanaa&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Absente&amp;lt;/font&amp;gt;&lt;br /&gt;
| E301&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présente&amp;lt;/font&amp;gt;&lt;br /&gt;
| E301&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E301&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E306&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P34 [[IMA4 2016/2017 P34|Interface Haptique, simulateur de formes et de textures]]&lt;br /&gt;
| Alice Coffin / Diana Marrucho&lt;br /&gt;
| IRCICA labo&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| IRCICA labo&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| IRCICA labo&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| IRCICA labo&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| IRCICA labo&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| IRCICA labo&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| IRCICA labo&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| IRCICA labo&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| IRCICA labo&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| IRCICA labo&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P37 [[IMA4 2016/2017 P37|Gamelle connectée]]&lt;br /&gt;
| Lutecia Damiens / Alexis Dorian&lt;br /&gt;
| E306 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E303 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E303 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| Fabricarium&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E303&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E306&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E306&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P38 [[IMA4 2016/2017 P38|Veilleuse enfant connectée]]&lt;br /&gt;
| Hugo Delatte&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P39 [[IMA4 2016/2017 P39|Projecteur laser]]&lt;br /&gt;
| Loïc Tombazzi / Marius Trimbur&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E303 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E303 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E303 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P44 [[IMA4 2016/2017 P44|3615 Facebook]]&lt;br /&gt;
| Marouan Mcharfi / Tristan lopez&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P46 [[IMA4 2016/2017 P46|Aide anti-gaspillage alimentaire ]]&lt;br /&gt;
| Alexandre Huet / François Lefevre&lt;br /&gt;
| E306&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E306 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P47 [[IMA4 2016/2017 P47|Modélisation d’un robot mobile]]&lt;br /&gt;
| Djamil Mohamed / Hamza Kerroum&lt;br /&gt;
| C305/D306A &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| C305/D306A &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| C305/D306A &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| C305/D306A &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| C305/D306A &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| C305/D306A&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| C305/D306A&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P48 [[IMA4 2016/2017 P48|Surveillance d'un robot mobile]]&lt;br /&gt;
| Jean-Baptiste Saison&lt;br /&gt;
| C305/D306A &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| C305/D306A &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présent&amp;lt;/font&amp;gt;&lt;br /&gt;
| D306A &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présent&amp;lt;/font&amp;gt;&lt;br /&gt;
| D306A/C305 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| D306A/D322 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| D306A/D322 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| D306A &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Tstieven</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Discussion:Projets_IMA4_SC_%26_SA_2016/2017&amp;diff=40063</id>
		<title>Discussion:Projets IMA4 SC &amp; SA 2016/2017</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Discussion:Projets_IMA4_SC_%26_SA_2016/2017&amp;diff=40063"/>
				<updated>2017-03-08T14:15:06Z</updated>
		
		<summary type="html">&lt;p&gt;Tstieven : /* Fiche de présence */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==  Notes sur les projets ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| Projet || Mini-cahier des charges || Mi-parcours || Fin de parcours || Wiki terminé || Rapport || Vidéo&lt;br /&gt;
|-&lt;br /&gt;
| P1 [[IMA4 2016/2017 P1|Climatisation du pauvre]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen;&amp;quot;&amp;gt;Cahier des charges conforme à la discussion avec l'encadrant. Présentation propre avec un effort d'illustration. Pas de liste des tâches ou de calendrier prévisionnel. Quelques coquilles corrigées.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P2 [[IMA4 2016/2017 P2|Réseau de capteurs sur smartphone]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen;&amp;quot;&amp;gt;Cahier des charges succinct. Attention à la rédaction en français. Un effort d'illustration avec un schéma global. Une liste des tâches, sans chiffrage pour l'instant..&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P10 [[IMA4 2016/2017 P10|Application de suivi de prise de médicaments]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Cahier des charges assez précis. Pas trop de coquilles. Une liste des tâches un peu succincte. Réfléchissez bien à la structure du programme pour la mise à jour simplifiée des fiches sur l'application.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P11 [[IMA4 2016/2017 P11|Amélioration de l'accueil d'enfants hospitalisés]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Cahier des charges précis. Forme très correcte. Une liste des tâches réfléchie. Il y a même un calendrier prévisionnel.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P14 [[IMA4 2016/2017 P14|Sex toy connecté]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Cahier des charges très précis. De même pour la liste des tâches. L'utilisation de bioloïds ne semble pas justifiée. Pourquoi ne parlez-vous de capteurs que dans le cadre d'un seul des deux appareils ?&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P18 [[IMA4 2016/2017 P18|Education de la position de tête]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen;&amp;quot;&amp;gt;Pas mal de coquilles corrigées. Une certaine imprécision (confusion Arduino Mega et ATMEGA, flou dans la liste des tâches). Cela dit un cahier des charges et une liste des tâches sont présentés. Pensez aux problèmes de calibration du système et à la transmission des données vers un smartphone par exemple.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P19 [[IMA4 2016/2017 P19|Orchestre électronique]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen;&amp;quot;&amp;gt;Synthèse correcte de l'entretien avec l'encadrant. Le cahier des charges est correct mais moins précis que le sujet. Le découpage en tâche est un peu rapide : l'analyse des fichiers MIDI devrait être sous-découpée. Presque pas de coquilles.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P20 [[IMA4 2016/2017 P20|Création d’un environnement virtuel de test]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Très bonne prise en main du sujet. Cahier des charges très précis. Liste des tâches bien détaillée. Orthographe irréprochable.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P21 [[IMA4 2016/2017 P21|Conception d’une MPS Polyvalente]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen;&amp;quot;&amp;gt;Une grande partie du cahier des charges est une copie du sujet. Définissez ce qu'est une Referee Box. D'un autre coté, le cahier des charges est précis. La liste des tâches est correcte. Cependant elle semble omettre la partie mécanique de la MPS ? Pas de coquilles.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P25 [[IMA4 2016/2017 P25|Robot mobile Polytech'Lille]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow;&amp;quot;&amp;gt;Des imprécisions dans la transcription de la réunion avec l'encadrant. Voire des contre-sens. Le cahier des charges est assez complet. Pas de liste des tâches. Vous avez vraiment passé 3h sur la rédaction du cahier des charges ? (edit d'Alex : certainement pas)&amp;lt;/font&amp;gt;&amp;lt;font style=&amp;quot;color: lightgreen;&amp;quot;&amp;gt;Une liste des tâches ajoutée.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P26 [[IMA4 2016/2017 P26|Train de véhicules]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Le texte a été modifié pour être compréhensible mais le problème n'est pas là. Vous n'avez pas du tout transcrit les demandes de l'encadrant mais donné le sujet du projet de l'an passé. Cette année vous devez améliorer l'aspect esthétique des robots, construire le quatrième robot et améliorer la détection infra-rouge en utilisant le protocole utilisé par les télécommandes infra-rouges classiques. Vous n'avez pas, non plus, donné une liste précise des tâches à réaliser.&amp;lt;/font&amp;gt;&amp;lt;font style=&amp;quot;color: lightgreen;&amp;quot;&amp;gt;Cahier des charges révisé avec l'encadrant. La listes des tâches à réaliser est à préciser.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P27 [[IMA4 2016/2017 P27|Sonde atmosphérique]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen;&amp;quot;&amp;gt;La restitution de la discussion avec l'encadrant est très correcte et le cahier des charge est précisément décrit. Par contre la liste des tâches à effectuer n'est pas dressée en commençant par l'étude des conditions à respecter pour lancer un tel ballon.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P28 [[IMA4 2016/2017 P28|Adaptation d'un émulateur de calculatrices TI]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen;&amp;quot;&amp;gt;Assimilation très correcte des demandes faites par les encadrants. Un cahier des charges précis. De même pour la liste des tâches. Un effort de présentation sans trop de coquilles. Cependant quelques erreurs relevées par M. Dhaussy, merci de corriger le CdC au vu des remarques transmises.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P29 [[IMA4 2016/2017 P29|Conteneurs pour site Web]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow;&amp;quot;&amp;gt;Le cahier des charges est une recopie du sujet, avec des passages soulignés, certes. Une liste des tâches très précise mais uniquement orientée développement Web. Il manque toute la partie étude et utilisation des éco-systèmes d'isolation.&amp;lt;/font&amp;gt;&amp;lt;font style=&amp;quot;color: lightgreen;&amp;quot;&amp;gt;Cahier des charges plus précis, vous pouvez vous lancer.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P30 [[IMA4 2016/2017 P30|Voiture radiocommandée controlée par gant]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Cahier des charges très précis avec déjà des idées pour la réalisation. Liste des tâches à effectuer très détaillée.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P31 [[IMA4 2016/2017 P31|Accueil personnalisé par drone]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Très peu d'apport par rapport au sujet qui est lui même assez bref. Il ne semble pas y avoir eu de rencontre avec l'encadrant dans les temps impartis ? Pas de liste des tâches.&amp;lt;/font&amp;gt; &amp;lt;font style=&amp;quot;color: lightgreen;&amp;quot;&amp;gt;Cahier des charges révisés sous la direction de deux encadrants.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P32 [[IMA4 2016/2017 P32|Sécurité: brouilleur d'ondes]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow;&amp;quot;&amp;gt;Le cahier des charges est une paraphrase du sujet. Dans la liste des tâches il semble curieux de ne pas commencer par l'étude des brouilleurs. Avez-vous échangé avec vos encadrants ?&amp;lt;/font&amp;gt;&amp;lt;font style=&amp;quot;color: lightgreen&amp;quot;&amp;gt;Cahier des charges plus précis.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P33 [[IMA4 2016/2017 P33|Sécurité: ingénierie inverse de protocole réseau]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Une simple paraphrase du sujet. Pas de liste des tâches à réaliser. Il semble que vous n'avez pas réussi à échanger avec vos encadrants dans les temps impartis. Des coquilles (corrigées).&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P34 [[IMA4 2016/2017 P34|Interface Haptique, simulateur de formes et de textures]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Une rencontre avec les encadrants. Un cahier des charges assez précis. Pas de section &amp;quot;tâches à réaliser&amp;quot; mais une section &amp;quot;notre travail&amp;quot; qui pourrait en tenir lieu avec un effort de structuration.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P37 [[IMA4 2016/2017 P37|Gamelle connectée]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen;&amp;quot;&amp;gt;Présentez les objectifs généraux pour commencer. Un cahier des charges très précis mais il manque la liste des tâches à effectuer. Débutez la par l'état de l'art sur les produits déjà commercialisés.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P38 [[IMA4 2016/2017 P38|Veilleuse enfant connectée]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow;&amp;quot;&amp;gt;Le sujet du projet à été recopié. Les deux sections personnelles sont assez mal rédigées. Un contre-sens sur le mode de connexion du prototype actuel : la veilleuse est configurée en point d'accès. Parlez plutôt de &amp;quot;Précisions sur le cahier des charges&amp;quot; plutôt que de &amp;quot;Problèmes rencontrés sur l'étude du projet&amp;quot;. Renommez aussi &amp;quot;Nouveau cahier des charges&amp;quot; en &amp;quot;Tâches à réaliser&amp;quot; et ajouter les autres tâches demandées dans le sujet.&amp;lt;/font&amp;gt;&amp;lt;font style=&amp;quot;color: lightgreen;&amp;quot;&amp;gt;Cahier des charges et listes des tâches finalement validés par deux encadrants.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P39 [[IMA4 2016/2017 P39|Projecteur laser]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: firebrick;&amp;quot;&amp;gt;Uniquement une recopie du sujet.&amp;lt;/font&amp;gt;&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Un cahier des charges et une liste de tâches corrects après discussion avec deux encadrants.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P44 [[IMA4 2016/2017 P44|3615 Facebook]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Un très bon cahier des charges. Le sujet semble être bien assimilé. Une liste des tâches correcte (il faudrait peut-être détailler la programmation du proxy).&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P46 [[IMA4 2016/2017 P46|Aide anti-gaspillage alimentaire ]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Un excellent cahier des charges. Liste des tâches très détaillée. Parfait.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P47 [[IMA4 2016/2017 P47|Modélisation d’un robot mobile]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Vous n'avez pas su vous adapter à la syntaxe mediawiki. Correction pour obtenir un CdC lisible. Une recopie intégrale du sujet. Un cahier des charges qui ressemble plus à une liste des tâches à effectuer.&amp;lt;/font&amp;gt;&amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt;Vous utilisez bien la syntaxe mediawiki maintenant. Par contre il n'y a toujours pas de cahier des charges.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P48 [[IMA4 2016/2017 P48|Surveillance d'un robot mobile]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt;Un cahier des charges en 4 lignes, c'est trop court. En particulier rien sur le contexte du projet à savoir le matériel ou le simulateur sur lequel les tests seront effectués. Une liste des tâches, cette liste est-elle avalisé par l'encadrant ?&amp;lt;/font&amp;gt;&amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt;Toujours pas de cahier des charges.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Fiche de présence ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Projet !! Elèves !! Séance 1 (25/01) !! Séance 2 (01/02) !! Séance 3 !! Séance 4 !! Séance 5 !! Séance 6 !! Séance 7 !! Séance 8 !! Séance 9 !! Séance 10&lt;br /&gt;
|-&lt;br /&gt;
| P1 [[IMA4 2016/2017 P1|Climatisation du pauvre]]&lt;br /&gt;
| Haroun Abdelali&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Absent&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Absent&amp;lt;/font&amp;gt;&lt;br /&gt;
| D317 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| D309 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| D309 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P2 [[IMA4 2016/2017 P2|Réseau de capteurs sur smartphone]]&lt;br /&gt;
| Wenyu sun / Xinyue xu&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Presentes&amp;lt;/font&amp;gt;&lt;br /&gt;
| C201 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présentes&amp;lt;/font&amp;gt;&lt;br /&gt;
| C201&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présentes&amp;lt;/font&amp;gt;&lt;br /&gt;
| C201&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présentes&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304&amp;amp;C201&lt;br /&gt;
| E304&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P10 [[IMA4 2016/2017 P10|Application de suivi de prise de médicaments]]&lt;br /&gt;
| Martin Rohmer / Kévin Godesence&lt;br /&gt;
| E306 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E303 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E301 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E303&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P11 [[IMA4 2016/2017 P11|Amélioration de l'accueil d'enfants hospitalisés]]&lt;br /&gt;
| Robin Cavalieri / Edmur Lopes&lt;br /&gt;
| E305 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P14 [[IMA4 2016/2017 P14|Sex toy connecté]]&lt;br /&gt;
| Cedric Roussel / Thomas Stievenard&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E303 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E303&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P18 [[IMA4 2016/2017 P18|Education de la position de tête]]&lt;br /&gt;
| Mame Arame Diop / Amina Fahem&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E303 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présentes&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P19 [[IMA4 2016/2017 P19|Orchestre électronique]]&lt;br /&gt;
| Antoine Arnaudet / Vivian Senaffe&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Arnaudet présent&amp;lt;/font&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Senaffe absent&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P20 [[IMA4 2016/2017 P20|Création d’un environnement virtuel de test]]&lt;br /&gt;
| Butaye Marianne / François Duport&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E303 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P21 [[IMA4 2016/2017 P21|Conception d’une MPS Polyvalente]]&lt;br /&gt;
| Samy Belhouachi / François Xavier Cockenpot&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E301 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E303 et E305&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E303 et E305&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P25 [[IMA4 2016/2017 P25|Robot mobile Polytech'Lille]]&lt;br /&gt;
| Cheikh Said Ahmed / Khadija El Messnaoui&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Said-Ahmed présent&amp;lt;/font&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;font style=&amp;quot;color: red&amp;quot;&amp;gt;El Messnaoui absente&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E303 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P26 [[IMA4 2016/2017 P26|Train de véhicules]]&lt;br /&gt;
| Manlu Luo / Xinyi Wang&lt;br /&gt;
| E305 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présentes&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présentes&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P27 [[IMA4 2016/2017 P27|Sonde atmosphérique]]&lt;br /&gt;
| Olivier Mahieux / Grillère Baptiste&lt;br /&gt;
| E306 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P28 [[IMA4 2016/2017 P28|Adaptation d'un émulateur de calculatrices TI]]&lt;br /&gt;
| Rodolphe Toin&lt;br /&gt;
| E305 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présent&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305/301 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P29 [[IMA4 2016/2017 P29|Conteneurs pour site Web]]&lt;br /&gt;
| | E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt;Rattrapage DS&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Abs (malade, mail)&amp;lt;/font&amp;gt;&lt;br /&gt;
| Malade&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| Malade&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E301&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P30 [[IMA4 2016/2017 P30|Voiture radiocommandée controlée par gant]]&lt;br /&gt;
| Thomas Gosse / Bacem Hagui&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Gosse présent&amp;lt;/font&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Hagui absent&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P31 [[IMA4 2016/2017 P31|Accueil personnalisé par drone]]&lt;br /&gt;
| Tristan Hart / Etienne Profit&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P32 [[IMA4 2016/2017 P32|Sécurité: brouilleur d'ondes]]&lt;br /&gt;
| Nicky Ung / Alexis Macherez&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304/301 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P33 [[IMA4 2016/2017 P33|Sécurité: ingénierie inverse de protocole réseau]]&lt;br /&gt;
| Oumaima Naanaa&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Absente&amp;lt;/font&amp;gt;&lt;br /&gt;
| E301&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présente&amp;lt;/font&amp;gt;&lt;br /&gt;
| E301&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E301&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P34 [[IMA4 2016/2017 P34|Interface Haptique, simulateur de formes et de textures]]&lt;br /&gt;
| Alice Coffin / Diana Marrucho&lt;br /&gt;
| IRCICA labo&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| IRCICA labo&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| IRCICA labo&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| IRCICA labo&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| IRCICA labo&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| IRCICA labo&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| IRCICA labo&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| IRCICA labo&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| IRCICA labo&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| IRCICA labo&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P37 [[IMA4 2016/2017 P37|Gamelle connectée]]&lt;br /&gt;
| Lutecia Damiens / Alexis Dorian&lt;br /&gt;
| E306 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E303 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E303 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| Fabricarium&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E303&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E306&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P38 [[IMA4 2016/2017 P38|Veilleuse enfant connectée]]&lt;br /&gt;
| Hugo Delatte&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P39 [[IMA4 2016/2017 P39|Projecteur laser]]&lt;br /&gt;
| Loïc Tombazzi / Marius Trimbur&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E303 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E303 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E303&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P44 [[IMA4 2016/2017 P44|3615 Facebook]]&lt;br /&gt;
| Marouan Mcharfi / Tristan lopez&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P46 [[IMA4 2016/2017 P46|Aide anti-gaspillage alimentaire ]]&lt;br /&gt;
| Alexandre Huet / François Lefevre&lt;br /&gt;
| E306&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E306 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P47 [[IMA4 2016/2017 P47|Modélisation d’un robot mobile]]&lt;br /&gt;
| Djamil Mohamed / Hamza Kerroum&lt;br /&gt;
| C305/D306A &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| C305/D306A &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| C305/D306A &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| C305/D306A &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| C305/D306A &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| C305/D306A&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P48 [[IMA4 2016/2017 P48|Surveillance d'un robot mobile]]&lt;br /&gt;
| Jean-Baptiste Saison&lt;br /&gt;
| C305/D306A &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| C305/D306A &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présent&amp;lt;/font&amp;gt;&lt;br /&gt;
| D306A &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présent&amp;lt;/font&amp;gt;&lt;br /&gt;
| D306A/C305 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| D306A/D322 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| D306A/D322 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Tstieven</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Projets_IMA4_SC_%26_SA_2016/2017&amp;diff=39883</id>
		<title>Projets IMA4 SC &amp; SA 2016/2017</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Projets_IMA4_SC_%26_SA_2016/2017&amp;diff=39883"/>
				<updated>2017-03-01T15:56:39Z</updated>
		
		<summary type="html">&lt;p&gt;Tstieven : /* Matériel à acquérir */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Merci de référencer vos pages de projets ici. Merci aussi d'uniformiser vos formats que ce soit en regardant la présentation des projets déjà créés ou en demandant une modification du format des précédents si votre façon de faire vous semble la meilleure. Dans tous les cas un minimum de communication entre les binômes est conseillée.&lt;br /&gt;
&lt;br /&gt;
Toutes les sources doivent être déposées sur notre archive GIT. Le service est disponible à l'URL [https://archives.plil.fr archives.plil.fr]. Connectez-vous avec vos identifiants Polytech'Lille. Sauf indication contraire de vos encadrants, rendez le projet public et mettez le lien sur votre Wiki. Vous pouvez trouver de la documentation sur ce système d'archives sur ce [https://git-scm.com/book/fr/v1 site].&lt;br /&gt;
&lt;br /&gt;
== Répartition des binômes ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Projet !! Encadrants école !! Elèves&lt;br /&gt;
|-&lt;br /&gt;
| P1 [[IMA4 2016/2017 P1|Climatisation du pauvre]]&lt;br /&gt;
| Xavier Redon&lt;br /&gt;
| Haroun Abdelali&lt;br /&gt;
|-&lt;br /&gt;
| P2 [[IMA4 2016/2017 P2|Réseau de capteurs sur smartphone]]&lt;br /&gt;
| Alexandre Boé / Xavier Redon / Thomas Vantroys&lt;br /&gt;
| Wenyu sun / Xinyue xu&lt;br /&gt;
|-&lt;br /&gt;
| P10 [[IMA4 2016/2017 P10|Application de suivi de prise de médicaments]]&lt;br /&gt;
| Fanny Moreau / Alexandre Boé / Xavier Redon / Thomas Vantroys&lt;br /&gt;
| Martin Rohmer / Kévin Godesence&lt;br /&gt;
|-&lt;br /&gt;
| P11 [[IMA4 2016/2017 P11|Amélioration de l'accueil d'enfants hospitalisés]]&lt;br /&gt;
| Marion Binninger / Alexandre Boé / Xavier Redon / Thomas Vantroys&lt;br /&gt;
| Robin Cavalieri / Edmur Lopes&lt;br /&gt;
|-&lt;br /&gt;
| P14 [[IMA4 2016/2017 P14|Sex toy connecté]]&lt;br /&gt;
| Alexandre Boé / Xavier Redon&lt;br /&gt;
| Cedric Roussel / Thomas Stievenard&lt;br /&gt;
|-&lt;br /&gt;
| P18 [[IMA4 2016/2017 P18|Education de la position de tête]]&lt;br /&gt;
| Rodolphe Astori / Alexandre Boé / Xavier Redon / Thomas Vantroys&lt;br /&gt;
| Mame Arame Diop / Amina Fahem&lt;br /&gt;
|-&lt;br /&gt;
| P19 [[IMA4 2016/2017 P19|Orchestre électronique]]&lt;br /&gt;
| Lucas Prieux / Hidéo Vinot / Xavier Redon / Thomas Vantroys&lt;br /&gt;
| Antoine Arnaudet / Vivian Senaffe&lt;br /&gt;
|-&lt;br /&gt;
| P20 [[IMA4 2016/2017 P20|Création d’un environnement virtuel de test]]&lt;br /&gt;
| Rochdi Merzouki / Vincent Coelen / Valentin Vergez&lt;br /&gt;
| Butaye Marianne / François Duport&lt;br /&gt;
|-&lt;br /&gt;
| P21 [[IMA4 2016/2017 P21|Conception d’une MPS Polyvalente]]&lt;br /&gt;
| Rochdi Merzouki / Thomas Danel / Valentin Vergez&lt;br /&gt;
| Samy Belhouachi / François Xavier Cockenpot&lt;br /&gt;
|-&lt;br /&gt;
| P25 [[IMA4 2016/2017 P25|Robot mobile Polytech'Lille]]&lt;br /&gt;
| Xavier Redon / Alexandre Boé&lt;br /&gt;
| Cheikh Said Ahmed / Khadija El Messnaoui&lt;br /&gt;
|-&lt;br /&gt;
| P26 [[IMA4 2016/2017 P26|Train de véhicules]]&lt;br /&gt;
| Xavier Redon / Alexandre Boé&lt;br /&gt;
| Manlu Luo / Xinyi Wang&lt;br /&gt;
|-&lt;br /&gt;
| P27 [[IMA4 2016/2017 P27|Sonde atmosphérique]]&lt;br /&gt;
| Xavier Redon / Thomas Vantroys / Alexandre Boé&lt;br /&gt;
| Olivier Mahieux / Grillère Baptiste&lt;br /&gt;
|-&lt;br /&gt;
| P28 [[IMA4 2016/2017 P28|Adaptation d'un émulateur de calculatrices TI]]&lt;br /&gt;
| Xavier Redon / Gilles Dhaussy&lt;br /&gt;
| Rodolphe Toin&lt;br /&gt;
|-&lt;br /&gt;
| P29 [[IMA4 2016/2017 P29|Conteneurs pour site Web]]&lt;br /&gt;
| Xavier Redon / Thomas Vantroys&lt;br /&gt;
| Jade Dupont (valentin)&lt;br /&gt;
|-&lt;br /&gt;
| P30 [[IMA4 2016/2017 P30|Voiture radiocommandée controlée par gant]]&lt;br /&gt;
| Alexandre Boé / Xavier Redon / Thomas Vantroys&lt;br /&gt;
| Thomas Gosse / Bacem Hagui&lt;br /&gt;
|-&lt;br /&gt;
| P31 [[IMA4 2016/2017 P31|Accueil personnalisé par drone]]&lt;br /&gt;
| Alexandre Boé / Xavier Redon / Thomas Vantroys&lt;br /&gt;
| Tristan Hart / Etienne Profit&lt;br /&gt;
|-&lt;br /&gt;
| P32 [[IMA4 2016/2017 P32|Sécurité: brouilleur d'ondes]]&lt;br /&gt;
| Thomas Vantroys / Alexandre Boé / Xavier Redon&lt;br /&gt;
| Nicky Ung / Alexis Macherez&lt;br /&gt;
|-&lt;br /&gt;
| P33 [[IMA4 2016/2017 P33|Sécurité: ingénierie inverse de protocole réseau]]&lt;br /&gt;
| Thomas Vantroys / Alexandre Boé / Xavier Redon&lt;br /&gt;
| Oumaima Naanaa&lt;br /&gt;
|-&lt;br /&gt;
| P34 [[IMA4 2016/2017 P34|Interface Haptique, simulateur de formes et de textures]]&lt;br /&gt;
| Betty Semail / Laurent Grisoni / Frédéric Giraud&lt;br /&gt;
| Alice Coffin / Diana Marrucho&lt;br /&gt;
|-&lt;br /&gt;
| P37 [[IMA4 2016/2017 P37|Gamelle connectée]]&lt;br /&gt;
| Alexandre Boé / Thomas Vantroys / Xavier Redon&lt;br /&gt;
| Lutecia Damiens / Alexis Dorian&lt;br /&gt;
|-&lt;br /&gt;
| P38 [[IMA4 2016/2017 P38|Veilleuse enfant connectée]]&lt;br /&gt;
| Thomas Vantroys / Alexandre Boé&lt;br /&gt;
| Hugo Delatte&lt;br /&gt;
|-&lt;br /&gt;
| P39 [[IMA4 2016/2017 P39|Projecteur laser]]&lt;br /&gt;
| Xavier Redon / Alexandre Boé / Thomas Vantroys&lt;br /&gt;
| Loïc Tombazzi / Marius Trimbur&lt;br /&gt;
|-&lt;br /&gt;
| P44 [[IMA4 2016/2017 P44|3615 Facebook]]&lt;br /&gt;
| Thomas Vantroys&lt;br /&gt;
| Marouan Mcharfi / Tristan Lopez&lt;br /&gt;
|-&lt;br /&gt;
| P46 [[IMA4 2016/2017 P46|Aide anti-gaspillage alimentaire ]]&lt;br /&gt;
| Alexandre Boé / Xavier Redon / Thomas Vantroys&lt;br /&gt;
| Alexandre Huet / François Lefevre&lt;br /&gt;
|-&lt;br /&gt;
| P47 [[IMA4 2016/2017 P47|Modélisation d’un robot mobile]]&lt;br /&gt;
| Midzodzi Pekpe&lt;br /&gt;
| Djamil Mohammed / Hamza Kerroum&lt;br /&gt;
|-&lt;br /&gt;
| P48 [[IMA4 2016/2017 P48|Surveillance d'un robot mobile]]&lt;br /&gt;
| Midzodzi Pekpe&lt;br /&gt;
| Jean-Baptiste Saison&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Matériel à acquérir ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Projet !! Matériel&lt;br /&gt;
|-&lt;br /&gt;
| P1 [[IMA4 2016/2017 P1|Climatisation du pauvre]]&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt; Feuille de Plexiglass &amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt; une plaque de polystérene &amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt; 3 AOPs (comparateur) &amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt; 3 Diodes &amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:purple&amp;quot;&amp;gt; 2 Ventilateurs 100 m3/h 12V [http://www.sellande.com/sellande-webcom/home/393-ventilateur-12v-100m3-h-3752132012327.html?gclid=CjwKEAiAlZDFBRCKncm67qihiHwSJABtoNIgNjN3dRX7D5BOfBUbN9WdjSVzbfLBF_YsaI59D0MaCxoC_oDw_wcB] &amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:purple&amp;quot;&amp;gt; 1 Panneau solaire 10Wc 12V [https://www.apb-bluepower.com/panneau-solaire-photovoltaique-12v-10w-apb-energy,fr,4,QX-P-10.cfm] &amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt; 2 sondes de températures [http://fr.rs-online.com/web/p/sondes-de-temperature/1241079/] &amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:purple&amp;quot;&amp;gt; une Batterie 70Ah 12V [https://www.manomano.fr/batterie-2319?model_id=1988070&amp;amp;referer_id=537135&amp;amp;gclid=CjwKEAiAlZDFBRCKncm67qihiHwSJABtoNIgcniSnImZEGSLytrHpgv4fTHGFuj1r30kH340E0wmPxoC6ovw_wcB] &amp;lt;/span&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| P2 [[IMA4 2016/2017 P2|Réseau de capteurs sur smartphone]]&lt;br /&gt;
|   &lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;6* Capteur de température[http://www.mouser.fr/ProductDetail/Microchip-Technology/TC1047VNBTR/?qs=sGAEpiMZZMucenltShoSnjkfRJmEyKRQimeb4yJa%2fn8%3d]&amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;1* Smartphone sous Android 6.0+&amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:purple&amp;quot;&amp;gt;6* ATmega32u4-AU (package TQFP), [http://www.mouser.fr/ProductDetail/Microchip-Technology-Atmel/ATMEGA32U4RC-AU/?qs=sGAEpiMZZMvqv2n3s2xjsWfDNH99npBWOb9m5kVBeoM%3d]&amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;6* Connecteur USB Zx20-B-5S-UINT(30)[http://www.mouser.fr/ProductDetail/Hirose-Electric/ZX20-B-5S-UNIT30/?qs=%2fha2pyFaduiI1PHIQp025swiTaQgBs3xrF3lm%2fjmZrmtw6zfCgwPXHsVofi5faNN]&amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;5* quartz 16Mhz [http://fr.farnell.com/multicomp/mcrsd16000f183000rr/quartz-16mhz-18pf-hc49-us-smd/dp/2395958]&amp;lt;/span&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;6* Chip guard[http://eu.mouser.com/ProductDetail/Bourns/CG0603MLC-05E/?qs=%2fha2pyFaduj8GWc5RpRwWsoz%252bsBNDfM0b%2fMwO0m8cAS%252b28tb9AwLWQ%3d%3d]&amp;lt;/span&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;10* Fusibles réarmables[http://eu.mouser.com/ProductDetail/Bourns/MF-MSMF050-2/?qs=%2fha2pyFadujDIyYlSEAmAtmxzhQX2R56dU6AOyKWoF1gS%2fKyt5ZQcQ%3d%3d]&amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;5* header(36 contacts) [http://fr.farnell.com/3m/929974-01-36/connecteur-rcpt-36pos-1-rangee/dp/2396216?MER=sy-me-pd-mi-alte]&amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;20* résistances de 22 ohm[http://fr.farnell.com/multicomp/mc0063w0603522r/res-couche-epaisse-22r-5-0-063w/dp/9331891]&amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;10* résistances de 10k ohm[http://fr.farnell.com/susumu/rr0816p-103-b-t5/res-couche-mince-10k-0-1-0-063w/dp/1653253]&amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;10* résistances de 1M ohm[http://fr.farnell.com/multicomp/mc0063w060311m/res-couche-epaisse-1m-1-0-063w/dp/9330410?ost=9330410&amp;amp;selectedCategoryId=&amp;amp;categoryNameResp=Toutes%2Bles%2Bcat%25C3%25A9gories&amp;amp;searchView=table&amp;amp;iscrfnonsku=false]&amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;10* capacités(CMS) de 22 pF[http://fr.farnell.com/multicomp/mc0603n220j500ct/condensateur-mlcc-c0g-np0-22pf/dp/1759057]&amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;10* capacité(CMS) de 1 uF[http://fr.farnell.com/walsin/0603x105k100ct/condensateur-mlcc-x5r-1uf-10v/dp/2496916]&amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;10* capacité(CMS) de 100 nF[http://fr.farnell.com/walsin/0603b104k500ct/condensateur-mlcc-x7r-0-1uf-50v/dp/2496834]&amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:purple&amp;quot;&amp;gt;10* diode[http://www.mouser.fr/ProductDetail/Wolfspeed-Cree/C3D16065A/?qs=sGAEpiMZZMtbRapU8LlZD2p%2ftt67Z%252br4005PkgBuAD1SM4AyiGk4XA%3d%3d]&amp;lt;/span&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| P10 [[IMA4 2016/2017 P10|Application de suivi de prise de médicaments]]&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Smartphone sous Android&amp;lt;/span&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| P11 [[IMA4 2016/2017 P11|Amélioration de l'accueil d'enfants hospitalisés]]&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Raspberry Pi&amp;lt;/span&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| P14 [[IMA4 2016/2017 P14|Sex toy connecté]]&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt; 2*Adaptateur 5V [http://www.gotronic.fr/art-adaptateur-mv530n-8000.htm]&amp;lt;/span&amp;gt;,&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt; 2*Embase adaptateur [http://www.gotronic.fr/art-embase-alim-sa21a-14961.htm]&amp;lt;/span&amp;gt;,&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt; 2*Arduino mini [http://fr.rs-online.com/web/p/kits-de-developpement-pour-processeurs-et-microcontroleurs/7617327/]&amp;lt;/span&amp;gt;,&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt; 2*Modules bluetooth [http://fr.rs-online.com/web/p/modules-bluetooth/1244407/]&amp;lt;/span&amp;gt;,&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt; Capteur de température [http://www.mouser.fr/ProductDetail/Maxim-Integrated/MAX31725MTA+/?qs=sGAEpiMZZMucenltShoSnuJtr4xlG60lboc%252bnebe514%3d]&amp;lt;/span&amp;gt;,&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt; 2*Accéléromètre [http://www.mouser.fr/ProductDetail/NXP-Freescale/MMA8652FCR1/?qs=sGAEpiMZZMs0JOhy9PM0USp5vOY2ClxODTM36syD6sQ%3d]&amp;lt;/span&amp;gt;,&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt; 4*Vibreurs [http://www.gotronic.fr/art-vibreur-miniature-vm1201-20685.htm]&amp;lt;/span&amp;gt;,&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt; 5*Servomoteurs [http://www.gotronic.fr/art-servomoteur-s07nf-25182.htm]&amp;lt;/span&amp;gt;,&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt; 5* Capacité 0.1µF (*1 capteur température, *2 accéléromètre, 2* régulateur)[http://fr.farnell.com/walsin/0805b104k500ct/condensateur-mlcc-x7r-0-1uf-50v/dp/2496944]&amp;lt;/span&amp;gt;,&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt; 3*Résistance 4.7kohms ( capteur température) [http://fr.farnell.com/vishay/crcw08054k70fkta/res-couche-epaisse-4-7k-1-0-125w/dp/1653013RL]&amp;lt;/span&amp;gt;,&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;2*Capacité 0.33µF (régulateur) [http://www.mouser.fr/ProductDetail/Wurth-Electronics/885012105003/?qs=sGAEpiMZZMvzv9EAOJZmO9b76UYLhwTmM7EN2czdHKU%3d]&amp;lt;/span&amp;gt;,&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt; 2*Régulateur 3.3V [http://www.mouser.fr/ProductDetail/Texas-Instruments/UA78M33CDCYR/?qs=sGAEpiMZZMtUqDgmOWBjgHbKmseNGGTSe%2f5roer8H%2fU%3d]&amp;lt;/span&amp;gt;,&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt; Silicone alimentaire (internet conseillé par un chercheur de l'inria. Prendre sorta clear 40A) [http://www.creation-silicone.com/31.la-serie-sorta-clear] (la cigale et la fourmi à lille) [http://www.cigaleetfourmi.fr/silicones-alginates-et-latex/1262-silicone-alimentaire-peau-liquide-2-kg.html#more_info_tabs] (Rougier&amp;amp;Plé à lille) [http://www.rougier-ple.fr/silicone-alimentaire-4428-1-kg.r.html]  &amp;lt;/span&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt; ARduino uno pour essais&amp;lt;/span&amp;gt;,&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt; Servomoteur pour essais&amp;lt;/span&amp;gt;.&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt; Deux téléphones sur android (dont un LG G4C de l'école)&amp;lt;/span&amp;gt;.&amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P18 [[IMA4 2016/2017 P18|Education de la position de tête]]&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Accéléromètre 4 ADXL335[http://www.gotronic.fr/art-module-accelerometre-adxl335-3-axes-ef03049-23504.htm]&amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Module Adafruit 9-DOF [http://www.gotronic.fr/art-module-9-dof-ada2472-23896.htm]&amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Smartphone sous Android&amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Câble 12 conducteurs  [http://fr.farnell.com/pro-power/pp000342/cable-12-conducteurs-0-5mm2-25m/dp/2440126]&amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Arduino Mega&amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:purple&amp;quot;&amp;gt;Résistance &amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Module WIFI ESP 8266 [http://www.gotronic.fr/art-module-wifi-serie-esp8266-113990084-23666.htm]&amp;lt;/span&amp;gt;.&amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P19 [[IMA4 2016/2017 P19|Orchestre électronique]]&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Arduino UNO x5.&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P20 [[IMA4 2016/2017 P20|Création d’un environnement virtuel de test]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P21 [[IMA4 2016/2017 P21|Conception d’une MPS Polyvalente]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P25 [[IMA4 2016/2017 P25|Robot mobile Polytech'Lille]]&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Atmega 328p [http://fr.farnell.com/atmel/atmega328p-pu/micro-8-bits-avr-32k-flash-28pdip/dp/1715487]&amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Atmega 328p CMS [http://fr.farnell.com/atmel/atmega328p-au/micro-8-bits-avr-32k-flash-32tqfp/dp/1715486?selectedCategoryId=&amp;amp;exaMfpn=true&amp;amp;categoryId=&amp;amp;searchRef=SearchLookAhead&amp;amp;searchView=table&amp;amp;iscrfnonsku=false]&amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;FT232R (*2) [http://fr.farnell.com/ftdi/ft232rl-reel/usb-vers-uart-ssop28-232/dp/1146032]&amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;USB (*2) [http://fr.farnell.com/wurth-elektronik/65100516121/mini-usb-2-0-type-b-receptacle/dp/1642036]&amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Led (*4)[http://fr.farnell.com/kingbright/kph-1608sgc/led-12mcd-vert-568nm/dp/2426215]&amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;bouton(*2) [http://www.mouser.fr/ProductDetail/E-Switch/LL3301NF065QG/?qs=sGAEpiMZZMvxtGF7dlGNpqqmTFthXBmf0KM%252bqj1KR%252bA%3d]&amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Diode(*2)[http://eu.mouser.com/ProductDetail/Microsemi/1N4148UR-1/?qs=sGAEpiMZZMtoHjESLttvkmKnFwXErGnblScnaPsZQPwnq%2fwjQSnhEg%3d%3d]&amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;LM1117(*2) [http://www.mouser.fr/new/Texas-Instruments/nationalLM1117/]&amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;TB6612FNG (*2) [http://www.gotronic.fr/art-commande-de-2-moteurs-tb6612fng-2x1a-21716.htm]&amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Quartz 16 MHz (*2)[http://fr.farnell.com/raltron/as-16-000-18/quartz-16mhz-18pf-hc-49s/dp/1611761?MER=bn_para_1TP_LastViewed_3]&amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;RJ11(*6) [http://fr.farnell.com/molex/95522-2667/fiche-rj11-cat3-6-6/dp/2060715]&amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Resistor 1k &amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Resistor 470 &amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Resistor 100 &amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Resistor 1M &amp;lt;/span&amp;gt;,&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Capacité 10 nF &amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Capacité 10uF &amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Capacité 22pF &amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:purple&amp;quot;&amp;gt;'''MATERIELS CAPTEUR DE LIGNE'''[http://projets-imasc.plil.net/mediawiki/index.php?title=Finalisation_de_cartes_de_contr%C3%B4le_de_robot#Carte_capteur_de_ligne]&amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:purple&amp;quot;&amp;gt;'''MATERIELS CAPTEUR ULTRASON'''[http://projets-imasc.plil.net/mediawiki/index.php?title=Finalisation_de_cartes_de_contr%C3%B4le_de_robot#Carte_capteur_ultrason_.28en_cours.29]&amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:purple&amp;quot;&amp;gt;'''MATERIELS CODEUR INCREMENTAL'''[http://projets-imasc.plil.net/mediawiki/index.php?title=Finalisation_de_cartes_de_contr%C3%B4le_de_robot#Carte_Odom.C3.A8tre_.28en_cours.29]&amp;lt;/span&amp;gt;.&amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P26 [[IMA4 2016/2017 P26|Train de véhicules]]&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;LEDs IR (x20), RS [http://fr.rs-online.com/web/p/led-ir/6548334/]&amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Phototransistors IR (x20), RS [http://fr.rs-online.com/web/p/phototransistors/6548047/]&amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Drivers moteur Pololu (x1), GoTronic [http://www.gotronic.fr/art-commande-de-2-moteurs-tb6612fng-2x1a-21716.htm]&amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Drivers moteur TB6612FNG (x3), Mouser [http://www.mouser.fr/Search/ProductDetail.aspx?qs=rsevcuukUAy2UalRuv4E%2fQ%3d%3d] &amp;lt;/span&amp;gt;, &amp;lt;br\&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Borniers à vis (x20), Farnell [http://fr.farnell.com/camdenboss/ctb0502-2/bornier-carte-a-fil-2-voies-12awg/dp/2493622?MER=en-me-sr-b-all]&amp;lt;/span&amp;gt;, &amp;lt;br\&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Résistances 220 Ohms CMS (x20), Mouser [http://www.mouser.fr/ProductDetail/Vishay-Dale/CRCW0603220RFKEA/?qs=sGAEpiMZZMtlubZbdhIBIKySljYCMs0HAiopx1mcVY0%3d] &amp;lt;/span&amp;gt;, &amp;lt;br\&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Résistances 470 kOhms CMS (x30), Mouser [http://www.mouser.fr/ProductDetail/Panasonic/ERJ-3GEYJ474V/?qs=sGAEpiMZZMtlubZbdhIBIDkNbKahCB4%252bXwMzav7V8qQ%3d]&amp;lt;/span&amp;gt;, &amp;lt;br\&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;LEDs couleur (x10), RS [http://fr.rs-online.com/web/p/led/8134845/]&amp;lt;/span&amp;gt;, &amp;lt;br\&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Fils m-m (x1 lot de 65), Farnell [http://fr.farnell.com/multicomp/mcbbj65/assortiment-de-jumper-fil-65pcs/dp/2396146]&amp;lt;/span&amp;gt;, &amp;lt;br\&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Capas 10uF CMS (x20) Mouser [http://www.mouser.fr/ProductDetail/Murata-Electronics/ZRB18AR61C106ME01L/?qs=sGAEpiMZZMs0AnBnWHyRQPHsfd5klL7FP%2fi0oh%252bVTwkomqr6NYKsqQ%3d%3d]&amp;lt;/span&amp;gt;, &amp;lt;br\&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Capas 0.1uF CMS (x20) Mouser [http://www.mouser.fr/ProductDetail/Kemet/C0603C104K4RACTU/?qs=sGAEpiMZZMs0AnBnWHyRQFqPnX0OlvcoGdtRY%252bgH1%2fs%3d]&amp;lt;/span&amp;gt;, &amp;lt;br\&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Embases CI 40 contacts 1 rangée (x6) RS [http://fr.rs-online.com/web/p/embases-de-circuit-imprime/4232841/]&amp;lt;/span&amp;gt;, &amp;lt;br\&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Connecteur HE14 MH100 (x10) [http://www.gotronic.fr/art-connecteur-he14-mh100-4457.htm]&amp;lt;/span&amp;gt;, &amp;lt;br\&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Connecteur HE14 MH190 (x10) [http://www.gotronic.fr/art-connecteur-he14-mh190-4458.htm]&amp;lt;/span&amp;gt;, &amp;lt;br\&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:purple&amp;quot;&amp;gt;Capteurs Ultrasons SR04 (x3)&amp;lt;/span&amp;gt;, &amp;lt;br\&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:purple&amp;quot;&amp;gt;Piles ou accumulateurs (x16 à 1.5V)&amp;lt;/span&amp;gt;, &amp;lt;br\&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:purple&amp;quot;&amp;gt;Odomètres codeurs (x4) &amp;lt;/span&amp;gt;, &amp;lt;br\&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:purple&amp;quot;&amp;gt;Boutons poussoirs (x4) [http://www.gotronic.fr/art-bp-miniature-krs1273-16976.htm] &amp;lt;/span&amp;gt;, &amp;lt;br\&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:purple&amp;quot;&amp;gt;Interrupteurs (x4) &amp;lt;/span&amp;gt;, &amp;lt;br\&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:purple&amp;quot;&amp;gt;Colliers de serrage &amp;lt;/span&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| P27 [[IMA4 2016/2017 P27|Sonde atmosphérique]]&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Capteur de température DS75LV [http://www.mouser.fr/ProductDetail/Maxim-Integrated/DS75LVU+/?qs=sGAEpiMZZMucenltShoSnqz2Nq7rAtSUouPEUh693aE%3d]&amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Capteur de pression [http://www.mouser.fr/ProductDetail/Measurement-Specialties/5525DSO-SB005GS/?qs=sGAEpiMZZMvhQj7WZhFIAJ6e00q4%2fiLk8vQEbfsXmbvuJAmWYTr67w%3d%3d]&amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:purple&amp;quot;&amp;gt;Module LoRa [http://www.mouser.fr/ProductDetail/Adafruit/3179/?qs=sGAEpiMZZMuC4zZxLL0ZTXmUcMwoRc9uEac7jsWPYbgAg4D4CJduaQ==]&amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Module GPS [http://www.mouser.fr/ProductDetail/Adafruit/3179/?qs=sGAEpiMZZMuC4zZxLL0ZTXmUcMwoRc9uEac7jsWPYbgAg4D4CJduaQ==]&amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;1 RaspberryPi&amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Batterie 5000 mAh [http://fr.rs-online.com/web/p/batteries-externes/7757508/]&amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;1 carte microSD pour Raspberry 8GB.&amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P28 [[IMA4 2016/2017 P28|Adaptation d'un émulateur de calculatrices TI]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P29 [[IMA4 2016/2017 P29|Conteneurs pour site Web]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P30 [[IMA4 2016/2017 P30|Voiture radiocommandée controlée par gant]]&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt; Accéléromètre ADXL335 &amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt; Arduino Nano &amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt; 2x Module XBee + 1x Shield &amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt; Arduino UNO &amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt; Xbee Adapter Board&amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt; Raspberry Pi&amp;lt;/span&amp;gt;.&amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P31 [[IMA4 2016/2017 P31|Accueil personnalisé par drone]]&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Carte RaspberryPi (Au minimum modèle 2)&amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Alimentation MicroUSB pour RaspberryPi&amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Carte MicroSD 16Gb&amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Dongle Bluetooth BLED112-V1[http://fr.rs-online.com/web/p/adaptateurs-bluetooth/8077742/]&amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Capteur de mesure Sharp GP2Y0A02YK x3 [http://www.gotronic.fr/art-capteur-de-mesure-sharp-gp2y0a02yk-11536.htm]&amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Appareil mobile sous OS Android (portable ou tablette )&amp;lt;/span&amp;gt;.&amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P32 [[IMA4 2016/2017 P32|Sécurité: brouilleur d'ondes]]&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Récepteur LoRa 433/868Mhz&amp;lt;/span&amp;gt;,&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Logiciel Code compiler équipé d'un GCC pour MSP430&amp;lt;/span&amp;gt;,&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Carte cc430f5137 868MHz&amp;lt;/span&amp;gt;,&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;1 antenne 868MHz[http://www.mouser.fr/ProductDetail/Linx-Technologies/ANT-868-CW-HWR-RPS/?qs=sGAEpiMZZMuBTKBKvsBmlOBg0H7cD5uyLmjn8%2f6ScJQ%3d]&amp;lt;/span&amp;gt;,&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Breadboard&amp;lt;/span&amp;gt;,&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Quelques LEDs&amp;lt;/span&amp;gt;,&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:purple&amp;quot;&amp;gt;pour 433MHz&amp;lt;/span&amp;gt;,&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:purple&amp;quot;&amp;gt;(carte arduino + cc1101)&amp;lt;/span&amp;gt;,&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Quartz 26MHz [http://fr.farnell.com/txc/7a-26-000maaj-t/crystal-26mhz-18pf-5-x-3-2mm/dp/2061710]&amp;lt;/span&amp;gt;,&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;2 antennes 433MHz[http://www.mouser.fr/ProductDetail/LPRS/ANT-SR433/?qs=sGAEpiMZZMuBTKBKvsBmlL2JeKAJ5GlFgePIl66EJDQoPGtUlcrRBQ%3d%3d]&amp;lt;/span&amp;gt;.&amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P33 [[IMA4 2016/2017 P33|Sécurité: ingénierie inverse de protocole réseau]]&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;2 carte LoRa 3179 Adafruit [http://www.mouser.fr/ProductDetail/Adafruit/3179/?qs=sGAEpiMZZMuC4zZxLL0ZTXmUcMwoRc9uEac7jsWPYbgAg4D4CJduaQ==],&amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;2 cartes Arduino (connecteurs USB &amp;amp; alimentation),&amp;lt;/span&amp;gt;.&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| P34 [[IMA4 2016/2017 P34|Interface Haptique, simulateur de formes et de textures]]&lt;br /&gt;
|&lt;br /&gt;
Aucun matériel nécessaire.&amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P37 [[IMA4 2016/2017 P37|Gamelle connectée]]&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:purple&amp;quot;&amp;gt;Émetteur et récepteur infrarouge/photodiode (seulement 1 de chaque prêtées, il en faut 6 à 7 de chaque)&amp;lt;/span&amp;gt;,&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Adaptateur PS512S  [http://www.gotronic.fr/art-adaptateur-ps512s-19913.htm] &amp;lt;/span&amp;gt;,&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Shield carte SD (carte SD également)&amp;lt;span&amp;gt;,&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Module horloge temps réel (RTC) [http://www.gotronic.fr/art-module-horloge-temps-reel-ada3296-25536.htm]&amp;lt;/span&amp;gt;,&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Capteur de proximité IR [http://www.gotronic.fr/art-capteur-de-proximite-ir-38-khz-2460-21766.htm]&amp;lt;/span&amp;gt;,&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Capteur Ultrason &amp;lt;/span&amp;gt;,&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;LEDs &amp;lt;/span&amp;gt;,&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Résistances &amp;lt;/span&amp;gt;,&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Arduino méga &amp;lt;/span&amp;gt;,&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;ESP8266 &amp;lt;/span&amp;gt;,&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Servomoteur 360 &amp;lt;/span&amp;gt;,&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:black&amp;quot;&amp;gt;Solution de secours : Rapsberry &amp;lt;/span&amp;gt;,&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:black&amp;quot;&amp;gt;Solution de secours : Balance &amp;lt;/span&amp;gt;.&amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P38 [[IMA4 2016/2017 P38|Veilleuse enfant connectée]]&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Raspberry pi modèle B minimum&amp;lt;/span&amp;gt;,&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:purple&amp;quot;&amp;gt;batterie&amp;lt;/span&amp;gt;,&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;circuit shut down(une breadboard, une LED, une resistance 220 ohms, 3 fils M/M, 2 fils M/F)&amp;lt;/span&amp;gt;,&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:purple&amp;quot;&amp;gt;un interrupteur on/off Référence : 7547 Selectronic&amp;lt;/span&amp;gt;,&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:purple&amp;quot;&amp;gt;bois de palette&amp;lt;/span&amp;gt;,&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;dongle wi pi&amp;lt;/span&amp;gt;,&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Rétroprojecteur&amp;lt;/span&amp;gt;,&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:purple&amp;quot;&amp;gt;timer(circuit de retardement 5 secondes)&amp;lt;/span&amp;gt;.&amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P39 [[IMA4 2016/2017 P39|Projecteur laser]]&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Deux lasers de différentes couleurs&amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Une paire de galvanomètres à miroir&amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Arduino&amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Raspberry Pi3&amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Câble secteur&amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Drivers galvanomètres x2&amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Alimentation laser&amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:purple&amp;quot;&amp;gt;Lunette de sécurité x2 [https://www.amazon.fr/Uvex-S1933X-Eyewear-SCTOrange-Anti-Fog/dp/B000USRG90/ref=sr_1_1?ie=UTF8&amp;amp;qid=1485441383&amp;amp;sr=8-1&amp;amp;keywords=uvex+s1933x]&amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:purple&amp;quot;&amp;gt;Alimentation 230V/5V 1A [http://www.miniinthebox.com/fr/dual-usb-eu-prise-murale-5v-2a-voyage-adaptateur-chargeur-d-alimentation-pour-iphone7-6-xiaomi-samsung-et-autre-telephone-portable_p5410410.html?currency=EUR&amp;amp;litb_from=paid_adwords_shopping&amp;amp;sku=429_6917%7C752_20648&amp;amp;utm_source=google_shopping&amp;amp;utm_medium=cpc&amp;amp;adword_mt=&amp;amp;adword_ct=138705676724&amp;amp;adword_kw=&amp;amp;adword_pos=1o5&amp;amp;adword_pl=&amp;amp;adword_net=g&amp;amp;adword_tar=&amp;amp;adw_src_id=9653316068_661261352_33588296076_aud-79897721311:pla-256966386459&amp;amp;gclid=Cj0KEQiA_KvEBRCtzNil4-KR-LIBEiQAmgekFxxKjJJWBYCJlDZEa3Ke_2_WR0DzGVbz-jaCZHVIBoMaAvld8P8HAQ]&amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Boitier ABS [http://fr.farnell.com/multicomp/g3118/boitier-abs-240x120x60mm-ip65/dp/1526656]&amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;DAC 4 canaux, avec interface I²C [http://www.mouser.fr/ProductDetail/Adafruit/1083/?qs=sGAEpiMZZMsMyYRRhGMFNtB2KhoPg%2fPbP3CExTYfM4M%3d]&amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Connecteur C14 [http://fr.farnell.com/schurter/3-101-141/fiche-iec-c14-c18-avec-filtre/dp/2671668]&amp;lt;/span&amp;gt;. &amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P44 [[IMA4 2016/2017 P44|3615 Facebook]]&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt; Un Minitel 1 Bistandard Alcatel Telic&amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt; un connecteur DIN 5 broches[http://www.selectronic.fr/din-cordon-male-5-broches-45.html]&amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt; un Arduino Uno [http://www.selectronic.fr/carte-arduino-uno.html]&amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt; un module Ethernet [http://www.selectronic.fr/shield-ethernet-v2.html]&amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt; deux optocoupleurs 4N25&amp;lt;/span&amp;gt;. &amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P46 [[IMA4 2016/2017 P46|Aide anti-gaspillage alimentaire ]]&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Rfduino DIP board + USB shield, Mouser [http://eu.mouser.com/ProductDetail/RF-Digital-Wireless/RFD90101/?qs=sGAEpiMZZMsrChSOYEGTCSSoddgmKGJ7o1oPrqG%2fa%2fU%3d]&amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Rfduino Dual AAA shield, Mouser [http://eu.mouser.com/ProductDetail/RF-Digital-Wireless/RFD22126/?qs=sGAEpiMZZMsrChSOYEGTCTCnakKeCOV7XxQSzqVKQX4%3d]&amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Raspberry Pi&amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Clef wifi&amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;2 piles de 1,5V AAA &amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;1 buzzer, Mouser [http://www.mouser.fr/ProductDetail/TDK/PS1240P02BT/?qs=sGAEpiMZZMtWZVZ%2fjgUYS49cTVUJP3OaWyx1fxdmA7I%3d] &amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;1 accéléromètre, mouser [http://www.mouser.fr/ProductDetail/NXP-Freescale/MMA8653FCR1/?qs=sGAEpiMZZMs0JOhy9PM0USp5vOY2ClxOY1G2fK3tzYI%3d] &amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;3 LEDs de couleurs différentes, 2 Mouser Rouge[http://www.mouser.fr/ProductDetail/Lumex/SSL-LX5093LBI-SRD/?qs=sGAEpiMZZMvHYEB9WUp7ElLqM0HAvqw07NtkT0umwJ8%3d], Mouser Vert [http://www.mouser.fr/ProductDetail/Dialight/521-9465F/?qs=sGAEpiMZZMvHYEB9WUp7EvzO6BrrarQchHylkK4n3ZA%3d], &amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Smartphone sous Android&amp;lt;/span&amp;gt;,&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Aimants, Farnell [http://fr.farnell.com/duratool/d01767/aimant-12-x-3mm-pqt6/dp/1888096]&amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;3 Résistances CMS 330 Ohms, Mouser [http://www.mouser.fr/ProductDetail/Vishay/CRCW1206330RFKEA/?qs=sGAEpiMZZMvdGkrng054t%252b8cnVAnHPZkGMXtw0W%2fcW8%3d] &amp;lt;/span&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;1 Transistor Bipolaire, Mouser [http://www.mouser.fr/ProductDetail/Fairchild-Semiconductor/MMBTH10/?qs=sGAEpiMZZMvDjfggS9kWsbCZIMjqR5oUPy4t%252bWqVHyk%3d] &amp;lt;/span&amp;gt;.&amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P47 [[IMA4 2016/2017 P47|Modélisation d’un robot mobile]]&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Logiciel MatLab Simulink&amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Logiciel RobotinoView&amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Robotino&amp;lt;/span&amp;gt;. &amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P48 [[IMA4 2016/2017 P48|Surveillance d'un robot mobile]]&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Logiciel MatLab Simulink&amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Logiciel RobotinoView&amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Robotino&amp;lt;/span&amp;gt;. &amp;lt;br/&amp;gt;&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Tstieven</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Projets_IMA4_SC_%26_SA_2016/2017&amp;diff=39882</id>
		<title>Projets IMA4 SC &amp; SA 2016/2017</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Projets_IMA4_SC_%26_SA_2016/2017&amp;diff=39882"/>
				<updated>2017-03-01T15:55:56Z</updated>
		
		<summary type="html">&lt;p&gt;Tstieven : /* Matériel à acquérir */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Merci de référencer vos pages de projets ici. Merci aussi d'uniformiser vos formats que ce soit en regardant la présentation des projets déjà créés ou en demandant une modification du format des précédents si votre façon de faire vous semble la meilleure. Dans tous les cas un minimum de communication entre les binômes est conseillée.&lt;br /&gt;
&lt;br /&gt;
Toutes les sources doivent être déposées sur notre archive GIT. Le service est disponible à l'URL [https://archives.plil.fr archives.plil.fr]. Connectez-vous avec vos identifiants Polytech'Lille. Sauf indication contraire de vos encadrants, rendez le projet public et mettez le lien sur votre Wiki. Vous pouvez trouver de la documentation sur ce système d'archives sur ce [https://git-scm.com/book/fr/v1 site].&lt;br /&gt;
&lt;br /&gt;
== Répartition des binômes ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Projet !! Encadrants école !! Elèves&lt;br /&gt;
|-&lt;br /&gt;
| P1 [[IMA4 2016/2017 P1|Climatisation du pauvre]]&lt;br /&gt;
| Xavier Redon&lt;br /&gt;
| Haroun Abdelali&lt;br /&gt;
|-&lt;br /&gt;
| P2 [[IMA4 2016/2017 P2|Réseau de capteurs sur smartphone]]&lt;br /&gt;
| Alexandre Boé / Xavier Redon / Thomas Vantroys&lt;br /&gt;
| Wenyu sun / Xinyue xu&lt;br /&gt;
|-&lt;br /&gt;
| P10 [[IMA4 2016/2017 P10|Application de suivi de prise de médicaments]]&lt;br /&gt;
| Fanny Moreau / Alexandre Boé / Xavier Redon / Thomas Vantroys&lt;br /&gt;
| Martin Rohmer / Kévin Godesence&lt;br /&gt;
|-&lt;br /&gt;
| P11 [[IMA4 2016/2017 P11|Amélioration de l'accueil d'enfants hospitalisés]]&lt;br /&gt;
| Marion Binninger / Alexandre Boé / Xavier Redon / Thomas Vantroys&lt;br /&gt;
| Robin Cavalieri / Edmur Lopes&lt;br /&gt;
|-&lt;br /&gt;
| P14 [[IMA4 2016/2017 P14|Sex toy connecté]]&lt;br /&gt;
| Alexandre Boé / Xavier Redon&lt;br /&gt;
| Cedric Roussel / Thomas Stievenard&lt;br /&gt;
|-&lt;br /&gt;
| P18 [[IMA4 2016/2017 P18|Education de la position de tête]]&lt;br /&gt;
| Rodolphe Astori / Alexandre Boé / Xavier Redon / Thomas Vantroys&lt;br /&gt;
| Mame Arame Diop / Amina Fahem&lt;br /&gt;
|-&lt;br /&gt;
| P19 [[IMA4 2016/2017 P19|Orchestre électronique]]&lt;br /&gt;
| Lucas Prieux / Hidéo Vinot / Xavier Redon / Thomas Vantroys&lt;br /&gt;
| Antoine Arnaudet / Vivian Senaffe&lt;br /&gt;
|-&lt;br /&gt;
| P20 [[IMA4 2016/2017 P20|Création d’un environnement virtuel de test]]&lt;br /&gt;
| Rochdi Merzouki / Vincent Coelen / Valentin Vergez&lt;br /&gt;
| Butaye Marianne / François Duport&lt;br /&gt;
|-&lt;br /&gt;
| P21 [[IMA4 2016/2017 P21|Conception d’une MPS Polyvalente]]&lt;br /&gt;
| Rochdi Merzouki / Thomas Danel / Valentin Vergez&lt;br /&gt;
| Samy Belhouachi / François Xavier Cockenpot&lt;br /&gt;
|-&lt;br /&gt;
| P25 [[IMA4 2016/2017 P25|Robot mobile Polytech'Lille]]&lt;br /&gt;
| Xavier Redon / Alexandre Boé&lt;br /&gt;
| Cheikh Said Ahmed / Khadija El Messnaoui&lt;br /&gt;
|-&lt;br /&gt;
| P26 [[IMA4 2016/2017 P26|Train de véhicules]]&lt;br /&gt;
| Xavier Redon / Alexandre Boé&lt;br /&gt;
| Manlu Luo / Xinyi Wang&lt;br /&gt;
|-&lt;br /&gt;
| P27 [[IMA4 2016/2017 P27|Sonde atmosphérique]]&lt;br /&gt;
| Xavier Redon / Thomas Vantroys / Alexandre Boé&lt;br /&gt;
| Olivier Mahieux / Grillère Baptiste&lt;br /&gt;
|-&lt;br /&gt;
| P28 [[IMA4 2016/2017 P28|Adaptation d'un émulateur de calculatrices TI]]&lt;br /&gt;
| Xavier Redon / Gilles Dhaussy&lt;br /&gt;
| Rodolphe Toin&lt;br /&gt;
|-&lt;br /&gt;
| P29 [[IMA4 2016/2017 P29|Conteneurs pour site Web]]&lt;br /&gt;
| Xavier Redon / Thomas Vantroys&lt;br /&gt;
| Jade Dupont (valentin)&lt;br /&gt;
|-&lt;br /&gt;
| P30 [[IMA4 2016/2017 P30|Voiture radiocommandée controlée par gant]]&lt;br /&gt;
| Alexandre Boé / Xavier Redon / Thomas Vantroys&lt;br /&gt;
| Thomas Gosse / Bacem Hagui&lt;br /&gt;
|-&lt;br /&gt;
| P31 [[IMA4 2016/2017 P31|Accueil personnalisé par drone]]&lt;br /&gt;
| Alexandre Boé / Xavier Redon / Thomas Vantroys&lt;br /&gt;
| Tristan Hart / Etienne Profit&lt;br /&gt;
|-&lt;br /&gt;
| P32 [[IMA4 2016/2017 P32|Sécurité: brouilleur d'ondes]]&lt;br /&gt;
| Thomas Vantroys / Alexandre Boé / Xavier Redon&lt;br /&gt;
| Nicky Ung / Alexis Macherez&lt;br /&gt;
|-&lt;br /&gt;
| P33 [[IMA4 2016/2017 P33|Sécurité: ingénierie inverse de protocole réseau]]&lt;br /&gt;
| Thomas Vantroys / Alexandre Boé / Xavier Redon&lt;br /&gt;
| Oumaima Naanaa&lt;br /&gt;
|-&lt;br /&gt;
| P34 [[IMA4 2016/2017 P34|Interface Haptique, simulateur de formes et de textures]]&lt;br /&gt;
| Betty Semail / Laurent Grisoni / Frédéric Giraud&lt;br /&gt;
| Alice Coffin / Diana Marrucho&lt;br /&gt;
|-&lt;br /&gt;
| P37 [[IMA4 2016/2017 P37|Gamelle connectée]]&lt;br /&gt;
| Alexandre Boé / Thomas Vantroys / Xavier Redon&lt;br /&gt;
| Lutecia Damiens / Alexis Dorian&lt;br /&gt;
|-&lt;br /&gt;
| P38 [[IMA4 2016/2017 P38|Veilleuse enfant connectée]]&lt;br /&gt;
| Thomas Vantroys / Alexandre Boé&lt;br /&gt;
| Hugo Delatte&lt;br /&gt;
|-&lt;br /&gt;
| P39 [[IMA4 2016/2017 P39|Projecteur laser]]&lt;br /&gt;
| Xavier Redon / Alexandre Boé / Thomas Vantroys&lt;br /&gt;
| Loïc Tombazzi / Marius Trimbur&lt;br /&gt;
|-&lt;br /&gt;
| P44 [[IMA4 2016/2017 P44|3615 Facebook]]&lt;br /&gt;
| Thomas Vantroys&lt;br /&gt;
| Marouan Mcharfi / Tristan Lopez&lt;br /&gt;
|-&lt;br /&gt;
| P46 [[IMA4 2016/2017 P46|Aide anti-gaspillage alimentaire ]]&lt;br /&gt;
| Alexandre Boé / Xavier Redon / Thomas Vantroys&lt;br /&gt;
| Alexandre Huet / François Lefevre&lt;br /&gt;
|-&lt;br /&gt;
| P47 [[IMA4 2016/2017 P47|Modélisation d’un robot mobile]]&lt;br /&gt;
| Midzodzi Pekpe&lt;br /&gt;
| Djamil Mohammed / Hamza Kerroum&lt;br /&gt;
|-&lt;br /&gt;
| P48 [[IMA4 2016/2017 P48|Surveillance d'un robot mobile]]&lt;br /&gt;
| Midzodzi Pekpe&lt;br /&gt;
| Jean-Baptiste Saison&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Matériel à acquérir ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Projet !! Matériel&lt;br /&gt;
|-&lt;br /&gt;
| P1 [[IMA4 2016/2017 P1|Climatisation du pauvre]]&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt; Feuille de Plexiglass &amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt; une plaque de polystérene &amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt; 3 AOPs (comparateur) &amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt; 3 Diodes &amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:purple&amp;quot;&amp;gt; 2 Ventilateurs 100 m3/h 12V [http://www.sellande.com/sellande-webcom/home/393-ventilateur-12v-100m3-h-3752132012327.html?gclid=CjwKEAiAlZDFBRCKncm67qihiHwSJABtoNIgNjN3dRX7D5BOfBUbN9WdjSVzbfLBF_YsaI59D0MaCxoC_oDw_wcB] &amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:purple&amp;quot;&amp;gt; 1 Panneau solaire 10Wc 12V [https://www.apb-bluepower.com/panneau-solaire-photovoltaique-12v-10w-apb-energy,fr,4,QX-P-10.cfm] &amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt; 2 sondes de températures [http://fr.rs-online.com/web/p/sondes-de-temperature/1241079/] &amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:purple&amp;quot;&amp;gt; une Batterie 70Ah 12V [https://www.manomano.fr/batterie-2319?model_id=1988070&amp;amp;referer_id=537135&amp;amp;gclid=CjwKEAiAlZDFBRCKncm67qihiHwSJABtoNIgcniSnImZEGSLytrHpgv4fTHGFuj1r30kH340E0wmPxoC6ovw_wcB] &amp;lt;/span&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| P2 [[IMA4 2016/2017 P2|Réseau de capteurs sur smartphone]]&lt;br /&gt;
|   &lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;6* Capteur de température[http://www.mouser.fr/ProductDetail/Microchip-Technology/TC1047VNBTR/?qs=sGAEpiMZZMucenltShoSnjkfRJmEyKRQimeb4yJa%2fn8%3d]&amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;1* Smartphone sous Android 6.0+&amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:purple&amp;quot;&amp;gt;6* ATmega32u4-AU (package TQFP), [http://www.mouser.fr/ProductDetail/Microchip-Technology-Atmel/ATMEGA32U4RC-AU/?qs=sGAEpiMZZMvqv2n3s2xjsWfDNH99npBWOb9m5kVBeoM%3d]&amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;6* Connecteur USB Zx20-B-5S-UINT(30)[http://www.mouser.fr/ProductDetail/Hirose-Electric/ZX20-B-5S-UNIT30/?qs=%2fha2pyFaduiI1PHIQp025swiTaQgBs3xrF3lm%2fjmZrmtw6zfCgwPXHsVofi5faNN]&amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;5* quartz 16Mhz [http://fr.farnell.com/multicomp/mcrsd16000f183000rr/quartz-16mhz-18pf-hc49-us-smd/dp/2395958]&amp;lt;/span&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;6* Chip guard[http://eu.mouser.com/ProductDetail/Bourns/CG0603MLC-05E/?qs=%2fha2pyFaduj8GWc5RpRwWsoz%252bsBNDfM0b%2fMwO0m8cAS%252b28tb9AwLWQ%3d%3d]&amp;lt;/span&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;10* Fusibles réarmables[http://eu.mouser.com/ProductDetail/Bourns/MF-MSMF050-2/?qs=%2fha2pyFadujDIyYlSEAmAtmxzhQX2R56dU6AOyKWoF1gS%2fKyt5ZQcQ%3d%3d]&amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;5* header(36 contacts) [http://fr.farnell.com/3m/929974-01-36/connecteur-rcpt-36pos-1-rangee/dp/2396216?MER=sy-me-pd-mi-alte]&amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;20* résistances de 22 ohm[http://fr.farnell.com/multicomp/mc0063w0603522r/res-couche-epaisse-22r-5-0-063w/dp/9331891]&amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;10* résistances de 10k ohm[http://fr.farnell.com/susumu/rr0816p-103-b-t5/res-couche-mince-10k-0-1-0-063w/dp/1653253]&amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;10* résistances de 1M ohm[http://fr.farnell.com/multicomp/mc0063w060311m/res-couche-epaisse-1m-1-0-063w/dp/9330410?ost=9330410&amp;amp;selectedCategoryId=&amp;amp;categoryNameResp=Toutes%2Bles%2Bcat%25C3%25A9gories&amp;amp;searchView=table&amp;amp;iscrfnonsku=false]&amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;10* capacités(CMS) de 22 pF[http://fr.farnell.com/multicomp/mc0603n220j500ct/condensateur-mlcc-c0g-np0-22pf/dp/1759057]&amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;10* capacité(CMS) de 1 uF[http://fr.farnell.com/walsin/0603x105k100ct/condensateur-mlcc-x5r-1uf-10v/dp/2496916]&amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;10* capacité(CMS) de 100 nF[http://fr.farnell.com/walsin/0603b104k500ct/condensateur-mlcc-x7r-0-1uf-50v/dp/2496834]&amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:purple&amp;quot;&amp;gt;10* diode[http://www.mouser.fr/ProductDetail/Wolfspeed-Cree/C3D16065A/?qs=sGAEpiMZZMtbRapU8LlZD2p%2ftt67Z%252br4005PkgBuAD1SM4AyiGk4XA%3d%3d]&amp;lt;/span&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| P10 [[IMA4 2016/2017 P10|Application de suivi de prise de médicaments]]&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Smartphone sous Android&amp;lt;/span&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| P11 [[IMA4 2016/2017 P11|Amélioration de l'accueil d'enfants hospitalisés]]&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Raspberry Pi&amp;lt;/span&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| P14 [[IMA4 2016/2017 P14|Sex toy connecté]]&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt; 2*Adaptateur 5V [http://www.gotronic.fr/art-adaptateur-mv530n-8000.htm]&amp;lt;/span&amp;gt;,&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt; 2*Embase adaptateur [http://www.gotronic.fr/art-embase-alim-sa21a-14961.htm]&amp;lt;/span&amp;gt;,&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt; 2*Arduino mini [http://fr.rs-online.com/web/p/kits-de-developpement-pour-processeurs-et-microcontroleurs/7617327/]&amp;lt;/span&amp;gt;,&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt; 2*Modules bluetooth [http://fr.rs-online.com/web/p/modules-bluetooth/1244407/]&amp;lt;/span&amp;gt;,&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt; Capteur de température [http://www.mouser.fr/ProductDetail/Maxim-Integrated/MAX31725MTA+/?qs=sGAEpiMZZMucenltShoSnuJtr4xlG60lboc%252bnebe514%3d]&amp;lt;/span&amp;gt;,&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt; 2*Accéléromètre [http://www.mouser.fr/ProductDetail/NXP-Freescale/MMA8652FCR1/?qs=sGAEpiMZZMs0JOhy9PM0USp5vOY2ClxODTM36syD6sQ%3d]&amp;lt;/span&amp;gt;,&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt; 4*Vibreurs [http://www.gotronic.fr/art-vibreur-miniature-vm1201-20685.htm]&amp;lt;/span&amp;gt;,&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt; 5*Servomoteurs [http://www.gotronic.fr/art-servomoteur-s07nf-25182.htm]&amp;lt;/span&amp;gt;,&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt; 5* Capacité 0.1µF (*1 capteur température, *2 accéléromètre, 2* régulateur)[http://fr.farnell.com/walsin/0805b104k500ct/condensateur-mlcc-x7r-0-1uf-50v/dp/2496944]&amp;lt;/span&amp;gt;,&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt; 3*Résistance 4.7kohms ( capteur température) [http://fr.farnell.com/vishay/crcw08054k70fkta/res-couche-epaisse-4-7k-1-0-125w/dp/1653013RL]&amp;lt;/span&amp;gt;,&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;2*Capacité 0.33µF (régulateur) [http://www.mouser.fr/ProductDetail/Wurth-Electronics/885012105003/?qs=sGAEpiMZZMvzv9EAOJZmO9b76UYLhwTmM7EN2czdHKU%3d]&amp;lt;/span&amp;gt;,&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt; 2*Régulateur 3.3V [http://www.mouser.fr/ProductDetail/Texas-Instruments/UA78M33CDCYR/?qs=sGAEpiMZZMtUqDgmOWBjgHbKmseNGGTSe%2f5roer8H%2fU%3d]&amp;lt;/span&amp;gt;,&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt; Silicone alimentaire (internet conseillé par un chercheur de l'inria. Prendre sorta clear 40A) [http://www.creation-silicone.com/31.la-serie-sorta-clear] (la cigale et la fourmi à lille) [http://www.cigaleetfourmi.fr/silicones-alginates-et-latex/1262-silicone-alimentaire-peau-liquide-2-kg.html#more_info_tabs] (Rougier&amp;amp;Plé à lille) [http://www.rougier-ple.fr/silicone-alimentaire-4428-1-kg.r.html]  &amp;lt;/span&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt; ARduino uno pour essais&amp;lt;/span&amp;gt;,&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt; Servomoteur pour essais&amp;lt;/span&amp;gt;.&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt; Téléphones sur android(dont LG G4C de l'école)&amp;lt;/span&amp;gt;.&amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P18 [[IMA4 2016/2017 P18|Education de la position de tête]]&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Accéléromètre 4 ADXL335[http://www.gotronic.fr/art-module-accelerometre-adxl335-3-axes-ef03049-23504.htm]&amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Module Adafruit 9-DOF [http://www.gotronic.fr/art-module-9-dof-ada2472-23896.htm]&amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Smartphone sous Android&amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Câble 12 conducteurs  [http://fr.farnell.com/pro-power/pp000342/cable-12-conducteurs-0-5mm2-25m/dp/2440126]&amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Arduino Mega&amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:purple&amp;quot;&amp;gt;Résistance &amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Module WIFI ESP 8266 [http://www.gotronic.fr/art-module-wifi-serie-esp8266-113990084-23666.htm]&amp;lt;/span&amp;gt;.&amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P19 [[IMA4 2016/2017 P19|Orchestre électronique]]&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Arduino UNO x5.&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P20 [[IMA4 2016/2017 P20|Création d’un environnement virtuel de test]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P21 [[IMA4 2016/2017 P21|Conception d’une MPS Polyvalente]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P25 [[IMA4 2016/2017 P25|Robot mobile Polytech'Lille]]&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Atmega 328p [http://fr.farnell.com/atmel/atmega328p-pu/micro-8-bits-avr-32k-flash-28pdip/dp/1715487]&amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Atmega 328p CMS [http://fr.farnell.com/atmel/atmega328p-au/micro-8-bits-avr-32k-flash-32tqfp/dp/1715486?selectedCategoryId=&amp;amp;exaMfpn=true&amp;amp;categoryId=&amp;amp;searchRef=SearchLookAhead&amp;amp;searchView=table&amp;amp;iscrfnonsku=false]&amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;FT232R (*2) [http://fr.farnell.com/ftdi/ft232rl-reel/usb-vers-uart-ssop28-232/dp/1146032]&amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;USB (*2) [http://fr.farnell.com/wurth-elektronik/65100516121/mini-usb-2-0-type-b-receptacle/dp/1642036]&amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Led (*4)[http://fr.farnell.com/kingbright/kph-1608sgc/led-12mcd-vert-568nm/dp/2426215]&amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;bouton(*2) [http://www.mouser.fr/ProductDetail/E-Switch/LL3301NF065QG/?qs=sGAEpiMZZMvxtGF7dlGNpqqmTFthXBmf0KM%252bqj1KR%252bA%3d]&amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Diode(*2)[http://eu.mouser.com/ProductDetail/Microsemi/1N4148UR-1/?qs=sGAEpiMZZMtoHjESLttvkmKnFwXErGnblScnaPsZQPwnq%2fwjQSnhEg%3d%3d]&amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;LM1117(*2) [http://www.mouser.fr/new/Texas-Instruments/nationalLM1117/]&amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;TB6612FNG (*2) [http://www.gotronic.fr/art-commande-de-2-moteurs-tb6612fng-2x1a-21716.htm]&amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Quartz 16 MHz (*2)[http://fr.farnell.com/raltron/as-16-000-18/quartz-16mhz-18pf-hc-49s/dp/1611761?MER=bn_para_1TP_LastViewed_3]&amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;RJ11(*6) [http://fr.farnell.com/molex/95522-2667/fiche-rj11-cat3-6-6/dp/2060715]&amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Resistor 1k &amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Resistor 470 &amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Resistor 100 &amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Resistor 1M &amp;lt;/span&amp;gt;,&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Capacité 10 nF &amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Capacité 10uF &amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Capacité 22pF &amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:purple&amp;quot;&amp;gt;'''MATERIELS CAPTEUR DE LIGNE'''[http://projets-imasc.plil.net/mediawiki/index.php?title=Finalisation_de_cartes_de_contr%C3%B4le_de_robot#Carte_capteur_de_ligne]&amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:purple&amp;quot;&amp;gt;'''MATERIELS CAPTEUR ULTRASON'''[http://projets-imasc.plil.net/mediawiki/index.php?title=Finalisation_de_cartes_de_contr%C3%B4le_de_robot#Carte_capteur_ultrason_.28en_cours.29]&amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:purple&amp;quot;&amp;gt;'''MATERIELS CODEUR INCREMENTAL'''[http://projets-imasc.plil.net/mediawiki/index.php?title=Finalisation_de_cartes_de_contr%C3%B4le_de_robot#Carte_Odom.C3.A8tre_.28en_cours.29]&amp;lt;/span&amp;gt;.&amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P26 [[IMA4 2016/2017 P26|Train de véhicules]]&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;LEDs IR (x20), RS [http://fr.rs-online.com/web/p/led-ir/6548334/]&amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Phototransistors IR (x20), RS [http://fr.rs-online.com/web/p/phototransistors/6548047/]&amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Drivers moteur Pololu (x1), GoTronic [http://www.gotronic.fr/art-commande-de-2-moteurs-tb6612fng-2x1a-21716.htm]&amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Drivers moteur TB6612FNG (x3), Mouser [http://www.mouser.fr/Search/ProductDetail.aspx?qs=rsevcuukUAy2UalRuv4E%2fQ%3d%3d] &amp;lt;/span&amp;gt;, &amp;lt;br\&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Borniers à vis (x20), Farnell [http://fr.farnell.com/camdenboss/ctb0502-2/bornier-carte-a-fil-2-voies-12awg/dp/2493622?MER=en-me-sr-b-all]&amp;lt;/span&amp;gt;, &amp;lt;br\&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Résistances 220 Ohms CMS (x20), Mouser [http://www.mouser.fr/ProductDetail/Vishay-Dale/CRCW0603220RFKEA/?qs=sGAEpiMZZMtlubZbdhIBIKySljYCMs0HAiopx1mcVY0%3d] &amp;lt;/span&amp;gt;, &amp;lt;br\&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Résistances 470 kOhms CMS (x30), Mouser [http://www.mouser.fr/ProductDetail/Panasonic/ERJ-3GEYJ474V/?qs=sGAEpiMZZMtlubZbdhIBIDkNbKahCB4%252bXwMzav7V8qQ%3d]&amp;lt;/span&amp;gt;, &amp;lt;br\&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;LEDs couleur (x10), RS [http://fr.rs-online.com/web/p/led/8134845/]&amp;lt;/span&amp;gt;, &amp;lt;br\&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Fils m-m (x1 lot de 65), Farnell [http://fr.farnell.com/multicomp/mcbbj65/assortiment-de-jumper-fil-65pcs/dp/2396146]&amp;lt;/span&amp;gt;, &amp;lt;br\&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Capas 10uF CMS (x20) Mouser [http://www.mouser.fr/ProductDetail/Murata-Electronics/ZRB18AR61C106ME01L/?qs=sGAEpiMZZMs0AnBnWHyRQPHsfd5klL7FP%2fi0oh%252bVTwkomqr6NYKsqQ%3d%3d]&amp;lt;/span&amp;gt;, &amp;lt;br\&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Capas 0.1uF CMS (x20) Mouser [http://www.mouser.fr/ProductDetail/Kemet/C0603C104K4RACTU/?qs=sGAEpiMZZMs0AnBnWHyRQFqPnX0OlvcoGdtRY%252bgH1%2fs%3d]&amp;lt;/span&amp;gt;, &amp;lt;br\&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Embases CI 40 contacts 1 rangée (x6) RS [http://fr.rs-online.com/web/p/embases-de-circuit-imprime/4232841/]&amp;lt;/span&amp;gt;, &amp;lt;br\&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Connecteur HE14 MH100 (x10) [http://www.gotronic.fr/art-connecteur-he14-mh100-4457.htm]&amp;lt;/span&amp;gt;, &amp;lt;br\&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Connecteur HE14 MH190 (x10) [http://www.gotronic.fr/art-connecteur-he14-mh190-4458.htm]&amp;lt;/span&amp;gt;, &amp;lt;br\&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:purple&amp;quot;&amp;gt;Capteurs Ultrasons SR04 (x3)&amp;lt;/span&amp;gt;, &amp;lt;br\&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:purple&amp;quot;&amp;gt;Piles ou accumulateurs (x16 à 1.5V)&amp;lt;/span&amp;gt;, &amp;lt;br\&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:purple&amp;quot;&amp;gt;Odomètres codeurs (x4) &amp;lt;/span&amp;gt;, &amp;lt;br\&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:purple&amp;quot;&amp;gt;Boutons poussoirs (x4) [http://www.gotronic.fr/art-bp-miniature-krs1273-16976.htm] &amp;lt;/span&amp;gt;, &amp;lt;br\&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:purple&amp;quot;&amp;gt;Interrupteurs (x4) &amp;lt;/span&amp;gt;, &amp;lt;br\&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:purple&amp;quot;&amp;gt;Colliers de serrage &amp;lt;/span&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| P27 [[IMA4 2016/2017 P27|Sonde atmosphérique]]&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Capteur de température DS75LV [http://www.mouser.fr/ProductDetail/Maxim-Integrated/DS75LVU+/?qs=sGAEpiMZZMucenltShoSnqz2Nq7rAtSUouPEUh693aE%3d]&amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Capteur de pression [http://www.mouser.fr/ProductDetail/Measurement-Specialties/5525DSO-SB005GS/?qs=sGAEpiMZZMvhQj7WZhFIAJ6e00q4%2fiLk8vQEbfsXmbvuJAmWYTr67w%3d%3d]&amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:purple&amp;quot;&amp;gt;Module LoRa [http://www.mouser.fr/ProductDetail/Adafruit/3179/?qs=sGAEpiMZZMuC4zZxLL0ZTXmUcMwoRc9uEac7jsWPYbgAg4D4CJduaQ==]&amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Module GPS [http://www.mouser.fr/ProductDetail/Adafruit/3179/?qs=sGAEpiMZZMuC4zZxLL0ZTXmUcMwoRc9uEac7jsWPYbgAg4D4CJduaQ==]&amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;1 RaspberryPi&amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Batterie 5000 mAh [http://fr.rs-online.com/web/p/batteries-externes/7757508/]&amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;1 carte microSD pour Raspberry 8GB.&amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P28 [[IMA4 2016/2017 P28|Adaptation d'un émulateur de calculatrices TI]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P29 [[IMA4 2016/2017 P29|Conteneurs pour site Web]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P30 [[IMA4 2016/2017 P30|Voiture radiocommandée controlée par gant]]&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt; Accéléromètre ADXL335 &amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt; Arduino Nano &amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt; 2x Module XBee + 1x Shield &amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt; Arduino UNO &amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt; Xbee Adapter Board&amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt; Raspberry Pi&amp;lt;/span&amp;gt;.&amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P31 [[IMA4 2016/2017 P31|Accueil personnalisé par drone]]&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Carte RaspberryPi (Au minimum modèle 2)&amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Alimentation MicroUSB pour RaspberryPi&amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Carte MicroSD 16Gb&amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Dongle Bluetooth BLED112-V1[http://fr.rs-online.com/web/p/adaptateurs-bluetooth/8077742/]&amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Capteur de mesure Sharp GP2Y0A02YK x3 [http://www.gotronic.fr/art-capteur-de-mesure-sharp-gp2y0a02yk-11536.htm]&amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Appareil mobile sous OS Android (portable ou tablette )&amp;lt;/span&amp;gt;.&amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P32 [[IMA4 2016/2017 P32|Sécurité: brouilleur d'ondes]]&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Récepteur LoRa 433/868Mhz&amp;lt;/span&amp;gt;,&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Logiciel Code compiler équipé d'un GCC pour MSP430&amp;lt;/span&amp;gt;,&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Carte cc430f5137 868MHz&amp;lt;/span&amp;gt;,&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;1 antenne 868MHz[http://www.mouser.fr/ProductDetail/Linx-Technologies/ANT-868-CW-HWR-RPS/?qs=sGAEpiMZZMuBTKBKvsBmlOBg0H7cD5uyLmjn8%2f6ScJQ%3d]&amp;lt;/span&amp;gt;,&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Breadboard&amp;lt;/span&amp;gt;,&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Quelques LEDs&amp;lt;/span&amp;gt;,&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:purple&amp;quot;&amp;gt;pour 433MHz&amp;lt;/span&amp;gt;,&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:purple&amp;quot;&amp;gt;(carte arduino + cc1101)&amp;lt;/span&amp;gt;,&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Quartz 26MHz [http://fr.farnell.com/txc/7a-26-000maaj-t/crystal-26mhz-18pf-5-x-3-2mm/dp/2061710]&amp;lt;/span&amp;gt;,&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;2 antennes 433MHz[http://www.mouser.fr/ProductDetail/LPRS/ANT-SR433/?qs=sGAEpiMZZMuBTKBKvsBmlL2JeKAJ5GlFgePIl66EJDQoPGtUlcrRBQ%3d%3d]&amp;lt;/span&amp;gt;.&amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P33 [[IMA4 2016/2017 P33|Sécurité: ingénierie inverse de protocole réseau]]&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;2 carte LoRa 3179 Adafruit [http://www.mouser.fr/ProductDetail/Adafruit/3179/?qs=sGAEpiMZZMuC4zZxLL0ZTXmUcMwoRc9uEac7jsWPYbgAg4D4CJduaQ==],&amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;2 cartes Arduino (connecteurs USB &amp;amp; alimentation),&amp;lt;/span&amp;gt;.&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| P34 [[IMA4 2016/2017 P34|Interface Haptique, simulateur de formes et de textures]]&lt;br /&gt;
|&lt;br /&gt;
Aucun matériel nécessaire.&amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P37 [[IMA4 2016/2017 P37|Gamelle connectée]]&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:purple&amp;quot;&amp;gt;Émetteur et récepteur infrarouge/photodiode (seulement 1 de chaque prêtées, il en faut 6 à 7 de chaque)&amp;lt;/span&amp;gt;,&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Adaptateur PS512S  [http://www.gotronic.fr/art-adaptateur-ps512s-19913.htm] &amp;lt;/span&amp;gt;,&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Shield carte SD (carte SD également)&amp;lt;span&amp;gt;,&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Module horloge temps réel (RTC) [http://www.gotronic.fr/art-module-horloge-temps-reel-ada3296-25536.htm]&amp;lt;/span&amp;gt;,&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Capteur de proximité IR [http://www.gotronic.fr/art-capteur-de-proximite-ir-38-khz-2460-21766.htm]&amp;lt;/span&amp;gt;,&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Capteur Ultrason &amp;lt;/span&amp;gt;,&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;LEDs &amp;lt;/span&amp;gt;,&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Résistances &amp;lt;/span&amp;gt;,&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Arduino méga &amp;lt;/span&amp;gt;,&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;ESP8266 &amp;lt;/span&amp;gt;,&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Servomoteur 360 &amp;lt;/span&amp;gt;,&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:black&amp;quot;&amp;gt;Solution de secours : Rapsberry &amp;lt;/span&amp;gt;,&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:black&amp;quot;&amp;gt;Solution de secours : Balance &amp;lt;/span&amp;gt;.&amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P38 [[IMA4 2016/2017 P38|Veilleuse enfant connectée]]&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Raspberry pi modèle B minimum&amp;lt;/span&amp;gt;,&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:purple&amp;quot;&amp;gt;batterie&amp;lt;/span&amp;gt;,&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;circuit shut down(une breadboard, une LED, une resistance 220 ohms, 3 fils M/M, 2 fils M/F)&amp;lt;/span&amp;gt;,&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:purple&amp;quot;&amp;gt;un interrupteur on/off Référence : 7547 Selectronic&amp;lt;/span&amp;gt;,&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:purple&amp;quot;&amp;gt;bois de palette&amp;lt;/span&amp;gt;,&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;dongle wi pi&amp;lt;/span&amp;gt;,&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Rétroprojecteur&amp;lt;/span&amp;gt;,&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:purple&amp;quot;&amp;gt;timer(circuit de retardement 5 secondes)&amp;lt;/span&amp;gt;.&amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P39 [[IMA4 2016/2017 P39|Projecteur laser]]&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Deux lasers de différentes couleurs&amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Une paire de galvanomètres à miroir&amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Arduino&amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Raspberry Pi3&amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Câble secteur&amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Drivers galvanomètres x2&amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Alimentation laser&amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:purple&amp;quot;&amp;gt;Lunette de sécurité x2 [https://www.amazon.fr/Uvex-S1933X-Eyewear-SCTOrange-Anti-Fog/dp/B000USRG90/ref=sr_1_1?ie=UTF8&amp;amp;qid=1485441383&amp;amp;sr=8-1&amp;amp;keywords=uvex+s1933x]&amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:purple&amp;quot;&amp;gt;Alimentation 230V/5V 1A [http://www.miniinthebox.com/fr/dual-usb-eu-prise-murale-5v-2a-voyage-adaptateur-chargeur-d-alimentation-pour-iphone7-6-xiaomi-samsung-et-autre-telephone-portable_p5410410.html?currency=EUR&amp;amp;litb_from=paid_adwords_shopping&amp;amp;sku=429_6917%7C752_20648&amp;amp;utm_source=google_shopping&amp;amp;utm_medium=cpc&amp;amp;adword_mt=&amp;amp;adword_ct=138705676724&amp;amp;adword_kw=&amp;amp;adword_pos=1o5&amp;amp;adword_pl=&amp;amp;adword_net=g&amp;amp;adword_tar=&amp;amp;adw_src_id=9653316068_661261352_33588296076_aud-79897721311:pla-256966386459&amp;amp;gclid=Cj0KEQiA_KvEBRCtzNil4-KR-LIBEiQAmgekFxxKjJJWBYCJlDZEa3Ke_2_WR0DzGVbz-jaCZHVIBoMaAvld8P8HAQ]&amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Boitier ABS [http://fr.farnell.com/multicomp/g3118/boitier-abs-240x120x60mm-ip65/dp/1526656]&amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;DAC 4 canaux, avec interface I²C [http://www.mouser.fr/ProductDetail/Adafruit/1083/?qs=sGAEpiMZZMsMyYRRhGMFNtB2KhoPg%2fPbP3CExTYfM4M%3d]&amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Connecteur C14 [http://fr.farnell.com/schurter/3-101-141/fiche-iec-c14-c18-avec-filtre/dp/2671668]&amp;lt;/span&amp;gt;. &amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P44 [[IMA4 2016/2017 P44|3615 Facebook]]&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt; Un Minitel 1 Bistandard Alcatel Telic&amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt; un connecteur DIN 5 broches[http://www.selectronic.fr/din-cordon-male-5-broches-45.html]&amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt; un Arduino Uno [http://www.selectronic.fr/carte-arduino-uno.html]&amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt; un module Ethernet [http://www.selectronic.fr/shield-ethernet-v2.html]&amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt; deux optocoupleurs 4N25&amp;lt;/span&amp;gt;. &amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P46 [[IMA4 2016/2017 P46|Aide anti-gaspillage alimentaire ]]&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Rfduino DIP board + USB shield, Mouser [http://eu.mouser.com/ProductDetail/RF-Digital-Wireless/RFD90101/?qs=sGAEpiMZZMsrChSOYEGTCSSoddgmKGJ7o1oPrqG%2fa%2fU%3d]&amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Rfduino Dual AAA shield, Mouser [http://eu.mouser.com/ProductDetail/RF-Digital-Wireless/RFD22126/?qs=sGAEpiMZZMsrChSOYEGTCTCnakKeCOV7XxQSzqVKQX4%3d]&amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Raspberry Pi&amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Clef wifi&amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;2 piles de 1,5V AAA &amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;1 buzzer, Mouser [http://www.mouser.fr/ProductDetail/TDK/PS1240P02BT/?qs=sGAEpiMZZMtWZVZ%2fjgUYS49cTVUJP3OaWyx1fxdmA7I%3d] &amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;1 accéléromètre, mouser [http://www.mouser.fr/ProductDetail/NXP-Freescale/MMA8653FCR1/?qs=sGAEpiMZZMs0JOhy9PM0USp5vOY2ClxOY1G2fK3tzYI%3d] &amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;3 LEDs de couleurs différentes, 2 Mouser Rouge[http://www.mouser.fr/ProductDetail/Lumex/SSL-LX5093LBI-SRD/?qs=sGAEpiMZZMvHYEB9WUp7ElLqM0HAvqw07NtkT0umwJ8%3d], Mouser Vert [http://www.mouser.fr/ProductDetail/Dialight/521-9465F/?qs=sGAEpiMZZMvHYEB9WUp7EvzO6BrrarQchHylkK4n3ZA%3d], &amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Smartphone sous Android&amp;lt;/span&amp;gt;,&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Aimants, Farnell [http://fr.farnell.com/duratool/d01767/aimant-12-x-3mm-pqt6/dp/1888096]&amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;3 Résistances CMS 330 Ohms, Mouser [http://www.mouser.fr/ProductDetail/Vishay/CRCW1206330RFKEA/?qs=sGAEpiMZZMvdGkrng054t%252b8cnVAnHPZkGMXtw0W%2fcW8%3d] &amp;lt;/span&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;1 Transistor Bipolaire, Mouser [http://www.mouser.fr/ProductDetail/Fairchild-Semiconductor/MMBTH10/?qs=sGAEpiMZZMvDjfggS9kWsbCZIMjqR5oUPy4t%252bWqVHyk%3d] &amp;lt;/span&amp;gt;.&amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P47 [[IMA4 2016/2017 P47|Modélisation d’un robot mobile]]&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Logiciel MatLab Simulink&amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Logiciel RobotinoView&amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Robotino&amp;lt;/span&amp;gt;. &amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P48 [[IMA4 2016/2017 P48|Surveillance d'un robot mobile]]&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Logiciel MatLab Simulink&amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Logiciel RobotinoView&amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Robotino&amp;lt;/span&amp;gt;. &amp;lt;br/&amp;gt;&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Tstieven</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Projets_IMA4_SC_%26_SA_2016/2017&amp;diff=39881</id>
		<title>Projets IMA4 SC &amp; SA 2016/2017</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Projets_IMA4_SC_%26_SA_2016/2017&amp;diff=39881"/>
				<updated>2017-03-01T15:55:07Z</updated>
		
		<summary type="html">&lt;p&gt;Tstieven : /* Matériel à acquérir */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Merci de référencer vos pages de projets ici. Merci aussi d'uniformiser vos formats que ce soit en regardant la présentation des projets déjà créés ou en demandant une modification du format des précédents si votre façon de faire vous semble la meilleure. Dans tous les cas un minimum de communication entre les binômes est conseillée.&lt;br /&gt;
&lt;br /&gt;
Toutes les sources doivent être déposées sur notre archive GIT. Le service est disponible à l'URL [https://archives.plil.fr archives.plil.fr]. Connectez-vous avec vos identifiants Polytech'Lille. Sauf indication contraire de vos encadrants, rendez le projet public et mettez le lien sur votre Wiki. Vous pouvez trouver de la documentation sur ce système d'archives sur ce [https://git-scm.com/book/fr/v1 site].&lt;br /&gt;
&lt;br /&gt;
== Répartition des binômes ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Projet !! Encadrants école !! Elèves&lt;br /&gt;
|-&lt;br /&gt;
| P1 [[IMA4 2016/2017 P1|Climatisation du pauvre]]&lt;br /&gt;
| Xavier Redon&lt;br /&gt;
| Haroun Abdelali&lt;br /&gt;
|-&lt;br /&gt;
| P2 [[IMA4 2016/2017 P2|Réseau de capteurs sur smartphone]]&lt;br /&gt;
| Alexandre Boé / Xavier Redon / Thomas Vantroys&lt;br /&gt;
| Wenyu sun / Xinyue xu&lt;br /&gt;
|-&lt;br /&gt;
| P10 [[IMA4 2016/2017 P10|Application de suivi de prise de médicaments]]&lt;br /&gt;
| Fanny Moreau / Alexandre Boé / Xavier Redon / Thomas Vantroys&lt;br /&gt;
| Martin Rohmer / Kévin Godesence&lt;br /&gt;
|-&lt;br /&gt;
| P11 [[IMA4 2016/2017 P11|Amélioration de l'accueil d'enfants hospitalisés]]&lt;br /&gt;
| Marion Binninger / Alexandre Boé / Xavier Redon / Thomas Vantroys&lt;br /&gt;
| Robin Cavalieri / Edmur Lopes&lt;br /&gt;
|-&lt;br /&gt;
| P14 [[IMA4 2016/2017 P14|Sex toy connecté]]&lt;br /&gt;
| Alexandre Boé / Xavier Redon&lt;br /&gt;
| Cedric Roussel / Thomas Stievenard&lt;br /&gt;
|-&lt;br /&gt;
| P18 [[IMA4 2016/2017 P18|Education de la position de tête]]&lt;br /&gt;
| Rodolphe Astori / Alexandre Boé / Xavier Redon / Thomas Vantroys&lt;br /&gt;
| Mame Arame Diop / Amina Fahem&lt;br /&gt;
|-&lt;br /&gt;
| P19 [[IMA4 2016/2017 P19|Orchestre électronique]]&lt;br /&gt;
| Lucas Prieux / Hidéo Vinot / Xavier Redon / Thomas Vantroys&lt;br /&gt;
| Antoine Arnaudet / Vivian Senaffe&lt;br /&gt;
|-&lt;br /&gt;
| P20 [[IMA4 2016/2017 P20|Création d’un environnement virtuel de test]]&lt;br /&gt;
| Rochdi Merzouki / Vincent Coelen / Valentin Vergez&lt;br /&gt;
| Butaye Marianne / François Duport&lt;br /&gt;
|-&lt;br /&gt;
| P21 [[IMA4 2016/2017 P21|Conception d’une MPS Polyvalente]]&lt;br /&gt;
| Rochdi Merzouki / Thomas Danel / Valentin Vergez&lt;br /&gt;
| Samy Belhouachi / François Xavier Cockenpot&lt;br /&gt;
|-&lt;br /&gt;
| P25 [[IMA4 2016/2017 P25|Robot mobile Polytech'Lille]]&lt;br /&gt;
| Xavier Redon / Alexandre Boé&lt;br /&gt;
| Cheikh Said Ahmed / Khadija El Messnaoui&lt;br /&gt;
|-&lt;br /&gt;
| P26 [[IMA4 2016/2017 P26|Train de véhicules]]&lt;br /&gt;
| Xavier Redon / Alexandre Boé&lt;br /&gt;
| Manlu Luo / Xinyi Wang&lt;br /&gt;
|-&lt;br /&gt;
| P27 [[IMA4 2016/2017 P27|Sonde atmosphérique]]&lt;br /&gt;
| Xavier Redon / Thomas Vantroys / Alexandre Boé&lt;br /&gt;
| Olivier Mahieux / Grillère Baptiste&lt;br /&gt;
|-&lt;br /&gt;
| P28 [[IMA4 2016/2017 P28|Adaptation d'un émulateur de calculatrices TI]]&lt;br /&gt;
| Xavier Redon / Gilles Dhaussy&lt;br /&gt;
| Rodolphe Toin&lt;br /&gt;
|-&lt;br /&gt;
| P29 [[IMA4 2016/2017 P29|Conteneurs pour site Web]]&lt;br /&gt;
| Xavier Redon / Thomas Vantroys&lt;br /&gt;
| Jade Dupont (valentin)&lt;br /&gt;
|-&lt;br /&gt;
| P30 [[IMA4 2016/2017 P30|Voiture radiocommandée controlée par gant]]&lt;br /&gt;
| Alexandre Boé / Xavier Redon / Thomas Vantroys&lt;br /&gt;
| Thomas Gosse / Bacem Hagui&lt;br /&gt;
|-&lt;br /&gt;
| P31 [[IMA4 2016/2017 P31|Accueil personnalisé par drone]]&lt;br /&gt;
| Alexandre Boé / Xavier Redon / Thomas Vantroys&lt;br /&gt;
| Tristan Hart / Etienne Profit&lt;br /&gt;
|-&lt;br /&gt;
| P32 [[IMA4 2016/2017 P32|Sécurité: brouilleur d'ondes]]&lt;br /&gt;
| Thomas Vantroys / Alexandre Boé / Xavier Redon&lt;br /&gt;
| Nicky Ung / Alexis Macherez&lt;br /&gt;
|-&lt;br /&gt;
| P33 [[IMA4 2016/2017 P33|Sécurité: ingénierie inverse de protocole réseau]]&lt;br /&gt;
| Thomas Vantroys / Alexandre Boé / Xavier Redon&lt;br /&gt;
| Oumaima Naanaa&lt;br /&gt;
|-&lt;br /&gt;
| P34 [[IMA4 2016/2017 P34|Interface Haptique, simulateur de formes et de textures]]&lt;br /&gt;
| Betty Semail / Laurent Grisoni / Frédéric Giraud&lt;br /&gt;
| Alice Coffin / Diana Marrucho&lt;br /&gt;
|-&lt;br /&gt;
| P37 [[IMA4 2016/2017 P37|Gamelle connectée]]&lt;br /&gt;
| Alexandre Boé / Thomas Vantroys / Xavier Redon&lt;br /&gt;
| Lutecia Damiens / Alexis Dorian&lt;br /&gt;
|-&lt;br /&gt;
| P38 [[IMA4 2016/2017 P38|Veilleuse enfant connectée]]&lt;br /&gt;
| Thomas Vantroys / Alexandre Boé&lt;br /&gt;
| Hugo Delatte&lt;br /&gt;
|-&lt;br /&gt;
| P39 [[IMA4 2016/2017 P39|Projecteur laser]]&lt;br /&gt;
| Xavier Redon / Alexandre Boé / Thomas Vantroys&lt;br /&gt;
| Loïc Tombazzi / Marius Trimbur&lt;br /&gt;
|-&lt;br /&gt;
| P44 [[IMA4 2016/2017 P44|3615 Facebook]]&lt;br /&gt;
| Thomas Vantroys&lt;br /&gt;
| Marouan Mcharfi / Tristan Lopez&lt;br /&gt;
|-&lt;br /&gt;
| P46 [[IMA4 2016/2017 P46|Aide anti-gaspillage alimentaire ]]&lt;br /&gt;
| Alexandre Boé / Xavier Redon / Thomas Vantroys&lt;br /&gt;
| Alexandre Huet / François Lefevre&lt;br /&gt;
|-&lt;br /&gt;
| P47 [[IMA4 2016/2017 P47|Modélisation d’un robot mobile]]&lt;br /&gt;
| Midzodzi Pekpe&lt;br /&gt;
| Djamil Mohammed / Hamza Kerroum&lt;br /&gt;
|-&lt;br /&gt;
| P48 [[IMA4 2016/2017 P48|Surveillance d'un robot mobile]]&lt;br /&gt;
| Midzodzi Pekpe&lt;br /&gt;
| Jean-Baptiste Saison&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Matériel à acquérir ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Projet !! Matériel&lt;br /&gt;
|-&lt;br /&gt;
| P1 [[IMA4 2016/2017 P1|Climatisation du pauvre]]&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt; Feuille de Plexiglass &amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt; une plaque de polystérene &amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt; 3 AOPs (comparateur) &amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt; 3 Diodes &amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:purple&amp;quot;&amp;gt; 2 Ventilateurs 100 m3/h 12V [http://www.sellande.com/sellande-webcom/home/393-ventilateur-12v-100m3-h-3752132012327.html?gclid=CjwKEAiAlZDFBRCKncm67qihiHwSJABtoNIgNjN3dRX7D5BOfBUbN9WdjSVzbfLBF_YsaI59D0MaCxoC_oDw_wcB] &amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:purple&amp;quot;&amp;gt; 1 Panneau solaire 10Wc 12V [https://www.apb-bluepower.com/panneau-solaire-photovoltaique-12v-10w-apb-energy,fr,4,QX-P-10.cfm] &amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt; 2 sondes de températures [http://fr.rs-online.com/web/p/sondes-de-temperature/1241079/] &amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:purple&amp;quot;&amp;gt; une Batterie 70Ah 12V [https://www.manomano.fr/batterie-2319?model_id=1988070&amp;amp;referer_id=537135&amp;amp;gclid=CjwKEAiAlZDFBRCKncm67qihiHwSJABtoNIgcniSnImZEGSLytrHpgv4fTHGFuj1r30kH340E0wmPxoC6ovw_wcB] &amp;lt;/span&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| P2 [[IMA4 2016/2017 P2|Réseau de capteurs sur smartphone]]&lt;br /&gt;
|   &lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;6* Capteur de température[http://www.mouser.fr/ProductDetail/Microchip-Technology/TC1047VNBTR/?qs=sGAEpiMZZMucenltShoSnjkfRJmEyKRQimeb4yJa%2fn8%3d]&amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;1* Smartphone sous Android 6.0+&amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:purple&amp;quot;&amp;gt;6* ATmega32u4-AU (package TQFP), [http://www.mouser.fr/ProductDetail/Microchip-Technology-Atmel/ATMEGA32U4RC-AU/?qs=sGAEpiMZZMvqv2n3s2xjsWfDNH99npBWOb9m5kVBeoM%3d]&amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;6* Connecteur USB Zx20-B-5S-UINT(30)[http://www.mouser.fr/ProductDetail/Hirose-Electric/ZX20-B-5S-UNIT30/?qs=%2fha2pyFaduiI1PHIQp025swiTaQgBs3xrF3lm%2fjmZrmtw6zfCgwPXHsVofi5faNN]&amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;5* quartz 16Mhz [http://fr.farnell.com/multicomp/mcrsd16000f183000rr/quartz-16mhz-18pf-hc49-us-smd/dp/2395958]&amp;lt;/span&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;6* Chip guard[http://eu.mouser.com/ProductDetail/Bourns/CG0603MLC-05E/?qs=%2fha2pyFaduj8GWc5RpRwWsoz%252bsBNDfM0b%2fMwO0m8cAS%252b28tb9AwLWQ%3d%3d]&amp;lt;/span&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;10* Fusibles réarmables[http://eu.mouser.com/ProductDetail/Bourns/MF-MSMF050-2/?qs=%2fha2pyFadujDIyYlSEAmAtmxzhQX2R56dU6AOyKWoF1gS%2fKyt5ZQcQ%3d%3d]&amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;5* header(36 contacts) [http://fr.farnell.com/3m/929974-01-36/connecteur-rcpt-36pos-1-rangee/dp/2396216?MER=sy-me-pd-mi-alte]&amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;20* résistances de 22 ohm[http://fr.farnell.com/multicomp/mc0063w0603522r/res-couche-epaisse-22r-5-0-063w/dp/9331891]&amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;10* résistances de 10k ohm[http://fr.farnell.com/susumu/rr0816p-103-b-t5/res-couche-mince-10k-0-1-0-063w/dp/1653253]&amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;10* résistances de 1M ohm[http://fr.farnell.com/multicomp/mc0063w060311m/res-couche-epaisse-1m-1-0-063w/dp/9330410?ost=9330410&amp;amp;selectedCategoryId=&amp;amp;categoryNameResp=Toutes%2Bles%2Bcat%25C3%25A9gories&amp;amp;searchView=table&amp;amp;iscrfnonsku=false]&amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;10* capacités(CMS) de 22 pF[http://fr.farnell.com/multicomp/mc0603n220j500ct/condensateur-mlcc-c0g-np0-22pf/dp/1759057]&amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;10* capacité(CMS) de 1 uF[http://fr.farnell.com/walsin/0603x105k100ct/condensateur-mlcc-x5r-1uf-10v/dp/2496916]&amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;10* capacité(CMS) de 100 nF[http://fr.farnell.com/walsin/0603b104k500ct/condensateur-mlcc-x7r-0-1uf-50v/dp/2496834]&amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:purple&amp;quot;&amp;gt;10* diode[http://www.mouser.fr/ProductDetail/Wolfspeed-Cree/C3D16065A/?qs=sGAEpiMZZMtbRapU8LlZD2p%2ftt67Z%252br4005PkgBuAD1SM4AyiGk4XA%3d%3d]&amp;lt;/span&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| P10 [[IMA4 2016/2017 P10|Application de suivi de prise de médicaments]]&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Smartphone sous Android&amp;lt;/span&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| P11 [[IMA4 2016/2017 P11|Amélioration de l'accueil d'enfants hospitalisés]]&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Raspberry Pi&amp;lt;/span&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| P14 [[IMA4 2016/2017 P14|Sex toy connecté]]&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt; 2*Adaptateur 5V [http://www.gotronic.fr/art-adaptateur-mv530n-8000.htm]&amp;lt;/span&amp;gt;,&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt; 2*Embase adaptateur [http://www.gotronic.fr/art-embase-alim-sa21a-14961.htm]&amp;lt;/span&amp;gt;,&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt; 2*Arduino mini [http://fr.rs-online.com/web/p/kits-de-developpement-pour-processeurs-et-microcontroleurs/7617327/]&amp;lt;/span&amp;gt;,&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt; 2*Modules bluetooth [http://fr.rs-online.com/web/p/modules-bluetooth/1244407/]&amp;lt;/span&amp;gt;,&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt; Capteur de température [http://www.mouser.fr/ProductDetail/Maxim-Integrated/MAX31725MTA+/?qs=sGAEpiMZZMucenltShoSnuJtr4xlG60lboc%252bnebe514%3d]&amp;lt;/span&amp;gt;,&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt; 2*Accéléromètre [http://www.mouser.fr/ProductDetail/NXP-Freescale/MMA8652FCR1/?qs=sGAEpiMZZMs0JOhy9PM0USp5vOY2ClxODTM36syD6sQ%3d]&amp;lt;/span&amp;gt;,&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt; 4*Vibreurs [http://www.gotronic.fr/art-vibreur-miniature-vm1201-20685.htm]&amp;lt;/span&amp;gt;,&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt; 5*Servomoteurs [http://www.gotronic.fr/art-servomoteur-s07nf-25182.htm]&amp;lt;/span&amp;gt;,&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt; 5* Capacité 0.1µF (*1 capteur température, *2 accéléromètre, 2* régulateur)[http://fr.farnell.com/walsin/0805b104k500ct/condensateur-mlcc-x7r-0-1uf-50v/dp/2496944]&amp;lt;/span&amp;gt;,&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt; 3*Résistance 4.7kohms ( capteur température) [http://fr.farnell.com/vishay/crcw08054k70fkta/res-couche-epaisse-4-7k-1-0-125w/dp/1653013RL]&amp;lt;/span&amp;gt;,&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;2*Capacité 0.33µF (régulateur) [http://www.mouser.fr/ProductDetail/Wurth-Electronics/885012105003/?qs=sGAEpiMZZMvzv9EAOJZmO9b76UYLhwTmM7EN2czdHKU%3d]&amp;lt;/span&amp;gt;,&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt; 2*Régulateur 3.3V [http://www.mouser.fr/ProductDetail/Texas-Instruments/UA78M33CDCYR/?qs=sGAEpiMZZMtUqDgmOWBjgHbKmseNGGTSe%2f5roer8H%2fU%3d]&amp;lt;/span&amp;gt;,&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt; Silicone alimentaire (internet conseillé par un chercheur de l'inria. Prendre sorta clear 40A) [http://www.creation-silicone.com/31.la-serie-sorta-clear] (la cigale et la fourmi à lille) [http://www.cigaleetfourmi.fr/silicones-alginates-et-latex/1262-silicone-alimentaire-peau-liquide-2-kg.html#more_info_tabs] (Rougier&amp;amp;Plé à lille) [http://www.rougier-ple.fr/silicone-alimentaire-4428-1-kg.r.html]  &amp;lt;/span&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt; ARduino uno pour essais&amp;lt;/span&amp;gt;,&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt; Servomoteur pour essais&amp;lt;/span&amp;gt;.&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt; Téléphones sur android&amp;lt;/span&amp;gt;.&amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P18 [[IMA4 2016/2017 P18|Education de la position de tête]]&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Accéléromètre 4 ADXL335[http://www.gotronic.fr/art-module-accelerometre-adxl335-3-axes-ef03049-23504.htm]&amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Module Adafruit 9-DOF [http://www.gotronic.fr/art-module-9-dof-ada2472-23896.htm]&amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Smartphone sous Android&amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Câble 12 conducteurs  [http://fr.farnell.com/pro-power/pp000342/cable-12-conducteurs-0-5mm2-25m/dp/2440126]&amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Arduino Mega&amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:purple&amp;quot;&amp;gt;Résistance &amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Module WIFI ESP 8266 [http://www.gotronic.fr/art-module-wifi-serie-esp8266-113990084-23666.htm]&amp;lt;/span&amp;gt;.&amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P19 [[IMA4 2016/2017 P19|Orchestre électronique]]&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Arduino UNO x5.&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P20 [[IMA4 2016/2017 P20|Création d’un environnement virtuel de test]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P21 [[IMA4 2016/2017 P21|Conception d’une MPS Polyvalente]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P25 [[IMA4 2016/2017 P25|Robot mobile Polytech'Lille]]&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Atmega 328p [http://fr.farnell.com/atmel/atmega328p-pu/micro-8-bits-avr-32k-flash-28pdip/dp/1715487]&amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Atmega 328p CMS [http://fr.farnell.com/atmel/atmega328p-au/micro-8-bits-avr-32k-flash-32tqfp/dp/1715486?selectedCategoryId=&amp;amp;exaMfpn=true&amp;amp;categoryId=&amp;amp;searchRef=SearchLookAhead&amp;amp;searchView=table&amp;amp;iscrfnonsku=false]&amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;FT232R (*2) [http://fr.farnell.com/ftdi/ft232rl-reel/usb-vers-uart-ssop28-232/dp/1146032]&amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;USB (*2) [http://fr.farnell.com/wurth-elektronik/65100516121/mini-usb-2-0-type-b-receptacle/dp/1642036]&amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Led (*4)[http://fr.farnell.com/kingbright/kph-1608sgc/led-12mcd-vert-568nm/dp/2426215]&amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;bouton(*2) [http://www.mouser.fr/ProductDetail/E-Switch/LL3301NF065QG/?qs=sGAEpiMZZMvxtGF7dlGNpqqmTFthXBmf0KM%252bqj1KR%252bA%3d]&amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Diode(*2)[http://eu.mouser.com/ProductDetail/Microsemi/1N4148UR-1/?qs=sGAEpiMZZMtoHjESLttvkmKnFwXErGnblScnaPsZQPwnq%2fwjQSnhEg%3d%3d]&amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;LM1117(*2) [http://www.mouser.fr/new/Texas-Instruments/nationalLM1117/]&amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;TB6612FNG (*2) [http://www.gotronic.fr/art-commande-de-2-moteurs-tb6612fng-2x1a-21716.htm]&amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Quartz 16 MHz (*2)[http://fr.farnell.com/raltron/as-16-000-18/quartz-16mhz-18pf-hc-49s/dp/1611761?MER=bn_para_1TP_LastViewed_3]&amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;RJ11(*6) [http://fr.farnell.com/molex/95522-2667/fiche-rj11-cat3-6-6/dp/2060715]&amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Resistor 1k &amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Resistor 470 &amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Resistor 100 &amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Resistor 1M &amp;lt;/span&amp;gt;,&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Capacité 10 nF &amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Capacité 10uF &amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Capacité 22pF &amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:purple&amp;quot;&amp;gt;'''MATERIELS CAPTEUR DE LIGNE'''[http://projets-imasc.plil.net/mediawiki/index.php?title=Finalisation_de_cartes_de_contr%C3%B4le_de_robot#Carte_capteur_de_ligne]&amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:purple&amp;quot;&amp;gt;'''MATERIELS CAPTEUR ULTRASON'''[http://projets-imasc.plil.net/mediawiki/index.php?title=Finalisation_de_cartes_de_contr%C3%B4le_de_robot#Carte_capteur_ultrason_.28en_cours.29]&amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:purple&amp;quot;&amp;gt;'''MATERIELS CODEUR INCREMENTAL'''[http://projets-imasc.plil.net/mediawiki/index.php?title=Finalisation_de_cartes_de_contr%C3%B4le_de_robot#Carte_Odom.C3.A8tre_.28en_cours.29]&amp;lt;/span&amp;gt;.&amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P26 [[IMA4 2016/2017 P26|Train de véhicules]]&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;LEDs IR (x20), RS [http://fr.rs-online.com/web/p/led-ir/6548334/]&amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Phototransistors IR (x20), RS [http://fr.rs-online.com/web/p/phototransistors/6548047/]&amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Drivers moteur Pololu (x1), GoTronic [http://www.gotronic.fr/art-commande-de-2-moteurs-tb6612fng-2x1a-21716.htm]&amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Drivers moteur TB6612FNG (x3), Mouser [http://www.mouser.fr/Search/ProductDetail.aspx?qs=rsevcuukUAy2UalRuv4E%2fQ%3d%3d] &amp;lt;/span&amp;gt;, &amp;lt;br\&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Borniers à vis (x20), Farnell [http://fr.farnell.com/camdenboss/ctb0502-2/bornier-carte-a-fil-2-voies-12awg/dp/2493622?MER=en-me-sr-b-all]&amp;lt;/span&amp;gt;, &amp;lt;br\&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Résistances 220 Ohms CMS (x20), Mouser [http://www.mouser.fr/ProductDetail/Vishay-Dale/CRCW0603220RFKEA/?qs=sGAEpiMZZMtlubZbdhIBIKySljYCMs0HAiopx1mcVY0%3d] &amp;lt;/span&amp;gt;, &amp;lt;br\&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Résistances 470 kOhms CMS (x30), Mouser [http://www.mouser.fr/ProductDetail/Panasonic/ERJ-3GEYJ474V/?qs=sGAEpiMZZMtlubZbdhIBIDkNbKahCB4%252bXwMzav7V8qQ%3d]&amp;lt;/span&amp;gt;, &amp;lt;br\&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;LEDs couleur (x10), RS [http://fr.rs-online.com/web/p/led/8134845/]&amp;lt;/span&amp;gt;, &amp;lt;br\&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Fils m-m (x1 lot de 65), Farnell [http://fr.farnell.com/multicomp/mcbbj65/assortiment-de-jumper-fil-65pcs/dp/2396146]&amp;lt;/span&amp;gt;, &amp;lt;br\&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Capas 10uF CMS (x20) Mouser [http://www.mouser.fr/ProductDetail/Murata-Electronics/ZRB18AR61C106ME01L/?qs=sGAEpiMZZMs0AnBnWHyRQPHsfd5klL7FP%2fi0oh%252bVTwkomqr6NYKsqQ%3d%3d]&amp;lt;/span&amp;gt;, &amp;lt;br\&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Capas 0.1uF CMS (x20) Mouser [http://www.mouser.fr/ProductDetail/Kemet/C0603C104K4RACTU/?qs=sGAEpiMZZMs0AnBnWHyRQFqPnX0OlvcoGdtRY%252bgH1%2fs%3d]&amp;lt;/span&amp;gt;, &amp;lt;br\&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Embases CI 40 contacts 1 rangée (x6) RS [http://fr.rs-online.com/web/p/embases-de-circuit-imprime/4232841/]&amp;lt;/span&amp;gt;, &amp;lt;br\&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Connecteur HE14 MH100 (x10) [http://www.gotronic.fr/art-connecteur-he14-mh100-4457.htm]&amp;lt;/span&amp;gt;, &amp;lt;br\&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Connecteur HE14 MH190 (x10) [http://www.gotronic.fr/art-connecteur-he14-mh190-4458.htm]&amp;lt;/span&amp;gt;, &amp;lt;br\&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:purple&amp;quot;&amp;gt;Capteurs Ultrasons SR04 (x3)&amp;lt;/span&amp;gt;, &amp;lt;br\&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:purple&amp;quot;&amp;gt;Piles ou accumulateurs (x16 à 1.5V)&amp;lt;/span&amp;gt;, &amp;lt;br\&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:purple&amp;quot;&amp;gt;Odomètres codeurs (x4) &amp;lt;/span&amp;gt;, &amp;lt;br\&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:purple&amp;quot;&amp;gt;Boutons poussoirs (x4) [http://www.gotronic.fr/art-bp-miniature-krs1273-16976.htm] &amp;lt;/span&amp;gt;, &amp;lt;br\&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:purple&amp;quot;&amp;gt;Interrupteurs (x4) &amp;lt;/span&amp;gt;, &amp;lt;br\&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:purple&amp;quot;&amp;gt;Colliers de serrage &amp;lt;/span&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| P27 [[IMA4 2016/2017 P27|Sonde atmosphérique]]&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Capteur de température DS75LV [http://www.mouser.fr/ProductDetail/Maxim-Integrated/DS75LVU+/?qs=sGAEpiMZZMucenltShoSnqz2Nq7rAtSUouPEUh693aE%3d]&amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Capteur de pression [http://www.mouser.fr/ProductDetail/Measurement-Specialties/5525DSO-SB005GS/?qs=sGAEpiMZZMvhQj7WZhFIAJ6e00q4%2fiLk8vQEbfsXmbvuJAmWYTr67w%3d%3d]&amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:purple&amp;quot;&amp;gt;Module LoRa [http://www.mouser.fr/ProductDetail/Adafruit/3179/?qs=sGAEpiMZZMuC4zZxLL0ZTXmUcMwoRc9uEac7jsWPYbgAg4D4CJduaQ==]&amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Module GPS [http://www.mouser.fr/ProductDetail/Adafruit/3179/?qs=sGAEpiMZZMuC4zZxLL0ZTXmUcMwoRc9uEac7jsWPYbgAg4D4CJduaQ==]&amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;1 RaspberryPi&amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Batterie 5000 mAh [http://fr.rs-online.com/web/p/batteries-externes/7757508/]&amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;1 carte microSD pour Raspberry 8GB.&amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P28 [[IMA4 2016/2017 P28|Adaptation d'un émulateur de calculatrices TI]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P29 [[IMA4 2016/2017 P29|Conteneurs pour site Web]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P30 [[IMA4 2016/2017 P30|Voiture radiocommandée controlée par gant]]&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt; Accéléromètre ADXL335 &amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt; Arduino Nano &amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt; 2x Module XBee + 1x Shield &amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt; Arduino UNO &amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt; Xbee Adapter Board&amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt; Raspberry Pi&amp;lt;/span&amp;gt;.&amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P31 [[IMA4 2016/2017 P31|Accueil personnalisé par drone]]&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Carte RaspberryPi (Au minimum modèle 2)&amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Alimentation MicroUSB pour RaspberryPi&amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Carte MicroSD 16Gb&amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Dongle Bluetooth BLED112-V1[http://fr.rs-online.com/web/p/adaptateurs-bluetooth/8077742/]&amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Capteur de mesure Sharp GP2Y0A02YK x3 [http://www.gotronic.fr/art-capteur-de-mesure-sharp-gp2y0a02yk-11536.htm]&amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Appareil mobile sous OS Android (portable ou tablette )&amp;lt;/span&amp;gt;.&amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P32 [[IMA4 2016/2017 P32|Sécurité: brouilleur d'ondes]]&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Récepteur LoRa 433/868Mhz&amp;lt;/span&amp;gt;,&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Logiciel Code compiler équipé d'un GCC pour MSP430&amp;lt;/span&amp;gt;,&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Carte cc430f5137 868MHz&amp;lt;/span&amp;gt;,&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;1 antenne 868MHz[http://www.mouser.fr/ProductDetail/Linx-Technologies/ANT-868-CW-HWR-RPS/?qs=sGAEpiMZZMuBTKBKvsBmlOBg0H7cD5uyLmjn8%2f6ScJQ%3d]&amp;lt;/span&amp;gt;,&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Breadboard&amp;lt;/span&amp;gt;,&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Quelques LEDs&amp;lt;/span&amp;gt;,&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:purple&amp;quot;&amp;gt;pour 433MHz&amp;lt;/span&amp;gt;,&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:purple&amp;quot;&amp;gt;(carte arduino + cc1101)&amp;lt;/span&amp;gt;,&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Quartz 26MHz [http://fr.farnell.com/txc/7a-26-000maaj-t/crystal-26mhz-18pf-5-x-3-2mm/dp/2061710]&amp;lt;/span&amp;gt;,&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;2 antennes 433MHz[http://www.mouser.fr/ProductDetail/LPRS/ANT-SR433/?qs=sGAEpiMZZMuBTKBKvsBmlL2JeKAJ5GlFgePIl66EJDQoPGtUlcrRBQ%3d%3d]&amp;lt;/span&amp;gt;.&amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P33 [[IMA4 2016/2017 P33|Sécurité: ingénierie inverse de protocole réseau]]&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;2 carte LoRa 3179 Adafruit [http://www.mouser.fr/ProductDetail/Adafruit/3179/?qs=sGAEpiMZZMuC4zZxLL0ZTXmUcMwoRc9uEac7jsWPYbgAg4D4CJduaQ==],&amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;2 cartes Arduino (connecteurs USB &amp;amp; alimentation),&amp;lt;/span&amp;gt;.&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| P34 [[IMA4 2016/2017 P34|Interface Haptique, simulateur de formes et de textures]]&lt;br /&gt;
|&lt;br /&gt;
Aucun matériel nécessaire.&amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P37 [[IMA4 2016/2017 P37|Gamelle connectée]]&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:purple&amp;quot;&amp;gt;Émetteur et récepteur infrarouge/photodiode (seulement 1 de chaque prêtées, il en faut 6 à 7 de chaque)&amp;lt;/span&amp;gt;,&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Adaptateur PS512S  [http://www.gotronic.fr/art-adaptateur-ps512s-19913.htm] &amp;lt;/span&amp;gt;,&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Shield carte SD (carte SD également)&amp;lt;span&amp;gt;,&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Module horloge temps réel (RTC) [http://www.gotronic.fr/art-module-horloge-temps-reel-ada3296-25536.htm]&amp;lt;/span&amp;gt;,&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Capteur de proximité IR [http://www.gotronic.fr/art-capteur-de-proximite-ir-38-khz-2460-21766.htm]&amp;lt;/span&amp;gt;,&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Capteur Ultrason &amp;lt;/span&amp;gt;,&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;LEDs &amp;lt;/span&amp;gt;,&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Résistances &amp;lt;/span&amp;gt;,&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Arduino méga &amp;lt;/span&amp;gt;,&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;ESP8266 &amp;lt;/span&amp;gt;,&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Servomoteur 360 &amp;lt;/span&amp;gt;,&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:black&amp;quot;&amp;gt;Solution de secours : Rapsberry &amp;lt;/span&amp;gt;,&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:black&amp;quot;&amp;gt;Solution de secours : Balance &amp;lt;/span&amp;gt;.&amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P38 [[IMA4 2016/2017 P38|Veilleuse enfant connectée]]&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Raspberry pi modèle B minimum&amp;lt;/span&amp;gt;,&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:purple&amp;quot;&amp;gt;batterie&amp;lt;/span&amp;gt;,&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;circuit shut down(une breadboard, une LED, une resistance 220 ohms, 3 fils M/M, 2 fils M/F)&amp;lt;/span&amp;gt;,&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:purple&amp;quot;&amp;gt;un interrupteur on/off Référence : 7547 Selectronic&amp;lt;/span&amp;gt;,&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:purple&amp;quot;&amp;gt;bois de palette&amp;lt;/span&amp;gt;,&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;dongle wi pi&amp;lt;/span&amp;gt;,&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Rétroprojecteur&amp;lt;/span&amp;gt;,&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:purple&amp;quot;&amp;gt;timer(circuit de retardement 5 secondes)&amp;lt;/span&amp;gt;.&amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P39 [[IMA4 2016/2017 P39|Projecteur laser]]&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Deux lasers de différentes couleurs&amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Une paire de galvanomètres à miroir&amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Arduino&amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Raspberry Pi3&amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Câble secteur&amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Drivers galvanomètres x2&amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Alimentation laser&amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:purple&amp;quot;&amp;gt;Lunette de sécurité x2 [https://www.amazon.fr/Uvex-S1933X-Eyewear-SCTOrange-Anti-Fog/dp/B000USRG90/ref=sr_1_1?ie=UTF8&amp;amp;qid=1485441383&amp;amp;sr=8-1&amp;amp;keywords=uvex+s1933x]&amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:purple&amp;quot;&amp;gt;Alimentation 230V/5V 1A [http://www.miniinthebox.com/fr/dual-usb-eu-prise-murale-5v-2a-voyage-adaptateur-chargeur-d-alimentation-pour-iphone7-6-xiaomi-samsung-et-autre-telephone-portable_p5410410.html?currency=EUR&amp;amp;litb_from=paid_adwords_shopping&amp;amp;sku=429_6917%7C752_20648&amp;amp;utm_source=google_shopping&amp;amp;utm_medium=cpc&amp;amp;adword_mt=&amp;amp;adword_ct=138705676724&amp;amp;adword_kw=&amp;amp;adword_pos=1o5&amp;amp;adword_pl=&amp;amp;adword_net=g&amp;amp;adword_tar=&amp;amp;adw_src_id=9653316068_661261352_33588296076_aud-79897721311:pla-256966386459&amp;amp;gclid=Cj0KEQiA_KvEBRCtzNil4-KR-LIBEiQAmgekFxxKjJJWBYCJlDZEa3Ke_2_WR0DzGVbz-jaCZHVIBoMaAvld8P8HAQ]&amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Boitier ABS [http://fr.farnell.com/multicomp/g3118/boitier-abs-240x120x60mm-ip65/dp/1526656]&amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;DAC 4 canaux, avec interface I²C [http://www.mouser.fr/ProductDetail/Adafruit/1083/?qs=sGAEpiMZZMsMyYRRhGMFNtB2KhoPg%2fPbP3CExTYfM4M%3d]&amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Connecteur C14 [http://fr.farnell.com/schurter/3-101-141/fiche-iec-c14-c18-avec-filtre/dp/2671668]&amp;lt;/span&amp;gt;. &amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P44 [[IMA4 2016/2017 P44|3615 Facebook]]&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt; Un Minitel 1 Bistandard Alcatel Telic&amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt; un connecteur DIN 5 broches[http://www.selectronic.fr/din-cordon-male-5-broches-45.html]&amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt; un Arduino Uno [http://www.selectronic.fr/carte-arduino-uno.html]&amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt; un module Ethernet [http://www.selectronic.fr/shield-ethernet-v2.html]&amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt; deux optocoupleurs 4N25&amp;lt;/span&amp;gt;. &amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P46 [[IMA4 2016/2017 P46|Aide anti-gaspillage alimentaire ]]&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Rfduino DIP board + USB shield, Mouser [http://eu.mouser.com/ProductDetail/RF-Digital-Wireless/RFD90101/?qs=sGAEpiMZZMsrChSOYEGTCSSoddgmKGJ7o1oPrqG%2fa%2fU%3d]&amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Rfduino Dual AAA shield, Mouser [http://eu.mouser.com/ProductDetail/RF-Digital-Wireless/RFD22126/?qs=sGAEpiMZZMsrChSOYEGTCTCnakKeCOV7XxQSzqVKQX4%3d]&amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Raspberry Pi&amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Clef wifi&amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;2 piles de 1,5V AAA &amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;1 buzzer, Mouser [http://www.mouser.fr/ProductDetail/TDK/PS1240P02BT/?qs=sGAEpiMZZMtWZVZ%2fjgUYS49cTVUJP3OaWyx1fxdmA7I%3d] &amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;1 accéléromètre, mouser [http://www.mouser.fr/ProductDetail/NXP-Freescale/MMA8653FCR1/?qs=sGAEpiMZZMs0JOhy9PM0USp5vOY2ClxOY1G2fK3tzYI%3d] &amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;3 LEDs de couleurs différentes, 2 Mouser Rouge[http://www.mouser.fr/ProductDetail/Lumex/SSL-LX5093LBI-SRD/?qs=sGAEpiMZZMvHYEB9WUp7ElLqM0HAvqw07NtkT0umwJ8%3d], Mouser Vert [http://www.mouser.fr/ProductDetail/Dialight/521-9465F/?qs=sGAEpiMZZMvHYEB9WUp7EvzO6BrrarQchHylkK4n3ZA%3d], &amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Smartphone sous Android&amp;lt;/span&amp;gt;,&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Aimants, Farnell [http://fr.farnell.com/duratool/d01767/aimant-12-x-3mm-pqt6/dp/1888096]&amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;3 Résistances CMS 330 Ohms, Mouser [http://www.mouser.fr/ProductDetail/Vishay/CRCW1206330RFKEA/?qs=sGAEpiMZZMvdGkrng054t%252b8cnVAnHPZkGMXtw0W%2fcW8%3d] &amp;lt;/span&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;1 Transistor Bipolaire, Mouser [http://www.mouser.fr/ProductDetail/Fairchild-Semiconductor/MMBTH10/?qs=sGAEpiMZZMvDjfggS9kWsbCZIMjqR5oUPy4t%252bWqVHyk%3d] &amp;lt;/span&amp;gt;.&amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P47 [[IMA4 2016/2017 P47|Modélisation d’un robot mobile]]&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Logiciel MatLab Simulink&amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Logiciel RobotinoView&amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Robotino&amp;lt;/span&amp;gt;. &amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P48 [[IMA4 2016/2017 P48|Surveillance d'un robot mobile]]&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Logiciel MatLab Simulink&amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Logiciel RobotinoView&amp;lt;/span&amp;gt;, &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Robotino&amp;lt;/span&amp;gt;. &amp;lt;br/&amp;gt;&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Tstieven</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Projet_IMA3_P1,_2015/2016,_TD2&amp;diff=32422</id>
		<title>Projet IMA3 P1, 2015/2016, TD2</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Projet_IMA3_P1,_2015/2016,_TD2&amp;diff=32422"/>
				<updated>2016-06-17T21:50:22Z</updated>
		
		<summary type="html">&lt;p&gt;Tstieven : /* Test */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Projet IMA3-SC 2015/2016 : MORPION =&lt;br /&gt;
&lt;br /&gt;
== Cahier des charges ==&lt;br /&gt;
Notre projet &amp;quot;système communicant&amp;quot; aura pour but de créer une interface connectée du &amp;quot;morpion&amp;quot;. L'objectif est de permettre à un joueur interagissant sur un site internet de jouer contre une autre personne qui, elle, jouera à l'aide d'un affichage fait à partir de leds. &lt;br /&gt;
&lt;br /&gt;
Nous cherchons donc à exploiter la capacité asynchrone d'un websocket afin de permettre une partie en temps réel.&lt;br /&gt;
&lt;br /&gt;
=== Matériel ===&lt;br /&gt;
* Une nanoboard&lt;br /&gt;
* Une raspberry pi&lt;br /&gt;
* Une matrice de leds 9x9 ou plus&lt;br /&gt;
* Un clavier numérique ou 9 boutons-poussoirs&lt;br /&gt;
* Des ordinateurs avec les logiciels de développement nécessaires &lt;br /&gt;
&lt;br /&gt;
=== Optionnel ===&lt;br /&gt;
* Un buzzer afin d'avertir le joueur d'un choix incohérent&lt;br /&gt;
* Trois afficheurs sept segments afin d'ajouter un tableau des scores&lt;br /&gt;
&lt;br /&gt;
===Schéma de principe===&lt;br /&gt;
[[Fichier:Principe.png||center|600px|Schema de principe|Schéma de principe]] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Séance 1 ==&lt;br /&gt;
&lt;br /&gt;
=== Partie électronique ===&lt;br /&gt;
Le but de cette première séance était de se familiariser avec le logiciel de conception Altium Designer et de réfléchir à la façon d'aborder la conception électronique du morpion.&lt;br /&gt;
&lt;br /&gt;
Cette conception se fera en plusieurs étapes :&lt;br /&gt;
&lt;br /&gt;
* gérer le positionnement d'un curseur en fonction de l'état courant de la partie&lt;br /&gt;
* gérer l'affichage de la matrice en fonction des cases remplies / sélectionnées&lt;br /&gt;
* permettre la réception et l'envoie de données à l'aide de la liaison série&lt;br /&gt;
* traiter la remise à zéro du plateau en cas de fin de partie&lt;br /&gt;
&lt;br /&gt;
====Positionnement du curseur et état de la partie====&lt;br /&gt;
&lt;br /&gt;
Dans un premier lieu, il était nécessaire de traiter les actions entrantes. En effet, si ce n'est pas au tour du joueur &amp;quot;physique&amp;quot;, l'utilisation des boutons doit être bloquée.&amp;lt;br&amp;gt;&lt;br /&gt;
Ceci consiste simplement à effectuer un ET logique entre un bit symbolisant le joueur courant (si 1 alors joueur physique, si 0 alors joueur en ligne) et l'action demandée.&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fichier:Choisir.png|vignette|center|400px|alt=Schema de choix|Circuit logique de la permission d'action]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Une fois les choix accessibles, il faut désormais les traiter. Le traitement s'effectuera à l'aide de bascules, chaque case comportera deux bascules : une bascule de sélection (la case est-elle sélectionnée ?) et une bascule permettant de savoir si la case a déjà été jouée.&amp;lt;br&amp;gt;&lt;br /&gt;
Si la case a déjà été jouée, il ne faut empêcher l'utilisateur de la jouer.&amp;lt;br&amp;gt;&lt;br /&gt;
Nous considérerons que le joueur en ligne n'effectuera pas de choix erroné et nous testerons seulement les choix du joueur &amp;quot;physique&amp;quot;.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Traitement.png|vignette|center|600px|alt=Schema de traitement|Circuit logique du traitement d'une action]] &amp;lt;br&amp;gt;&lt;br /&gt;
Les ronds verts permettent la distinction des 9 cases. &amp;lt;br&amp;gt;&lt;br /&gt;
Le rond jaune correspond à la zone des sorties d'état. Plus précisément, il s'agit de deux bus regroupant les cases remplies et le lieu de la case sélectionnée.&amp;lt;br&amp;gt;&lt;br /&gt;
Le rond noir correspond au choix de l'adversaire.&amp;lt;br&amp;gt;&lt;br /&gt;
Le rond orange correspond à la sortie &amp;quot;selection_done&amp;quot; qui effectue un état haut lorsqu'un choix valide a été fait par l'utilisateur.&amp;lt;br&amp;gt;&lt;br /&gt;
Le rond rouge met en évidence la zone permettant de traiter les décalage du bit de sélection. Ce décalage consiste à garder seulement UNE bascule à l'état haut en effectuant le passage logique d'une bascule à une autre en fonction du choix tout en appliquant un reset sur l'ancienne sélection. Le schéma de ce déplacement se trouve ci-dessous et est appliqué aux 9 cases.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Andor.png|vignette|center|alt=Schema permettant le déplacement|Circuit logique utilisé afin de déplacer le curseur]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Complément à la séance 1===&lt;br /&gt;
====Affichage dynamique====&lt;br /&gt;
&lt;br /&gt;
L'un des grands problèmes à la réalisation du morpion sur nanoboard est l'affichage dynamique. En effet, il va falloir à la fois stocker les valeurs, et stocker quel joueur a joué telle ou telle case, afin de savoir quel case s'allumera de la couleur désirée. Ceci rajouté à l'affichage dynamique de la sélection, ceci s'avère compliqué.&amp;lt;br&amp;gt;&lt;br /&gt;
La tâche a alors été décomposée en deux étapes :&lt;br /&gt;
* Le traitement des couleurs (Quelle couleur affilier à quelle case ?)&lt;br /&gt;
* L'affichage de ces couleurs&lt;br /&gt;
=====Traitement des couleurs=====&lt;br /&gt;
&lt;br /&gt;
Le but était de se simplifier au maximum les choses. Le premier problème est de savoir quel joueur a joué une case, pour ceci, nous nous sommes servi de l'état du plateau fourni dans le bloc TRAITEMENT. Nous savons quelles cases sont à 1 et imposons donc une couleur rouge à toutes ces cases.&amp;lt;br&amp;gt;&lt;br /&gt;
De plus, nous savons qu'à chaque fois que le joueur &amp;quot;physique&amp;quot; effectue un choix valide, un front montant est appliqué sur la broche &amp;quot;selection_done&amp;quot; de TRAITEMENT. Nous avons alors re-créé 9 registres symbolisant les cases, mais cette fois ci, en fonction de l'endroit sélectionné par l'utilisateur, si ce dernier effectue un choix valide, le registre passera à 1. Le but de cette manipulation est de recenser tous les registres joués par le joueur physique. &amp;lt;br&amp;gt;&lt;br /&gt;
Maintenant, nous relions ces registres aux valeurs de couleur verte afin d'additionner le vert au rouge  des cases jouées et obtiendrons finalement des cases de couleur jaune pour symboliser les cases du joueur physique et des cases de couleur rouge pour le jouer en ligne. &amp;lt;br&amp;gt;&lt;br /&gt;
Il ne reste qu'à relier directement la case sélectionnée (recensée par le bus Etat_selection de TRAITEMENT) à la couleur bleue.&amp;lt;br&amp;gt;&lt;br /&gt;
Finalement nous avons : &lt;br /&gt;
* joueur en ligne : rouge&lt;br /&gt;
* joueur physique : jaune&lt;br /&gt;
* sélection : magenta, cyan ou bleu&lt;br /&gt;
&lt;br /&gt;
 [[Fichier:Traitement_affichage.png|vignette|center|800px|Schéma du traitement pré affichage|Circuit logique du traitement pré-affichage]] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Affichage=====&lt;br /&gt;
&lt;br /&gt;
La matrice led employée est une matrice led à anode commune. Elle a pour avantage de permettre la sélection d'une ligne et de la couleur de chaque colonne.&amp;lt;br&amp;gt;&lt;br /&gt;
Cependant, nous ne pouvons donc choisir la couleur que d'une colonne. C'est pourquoi nous allons faire varier cet affichage ligne par ligne à une fréquence élevée afin que l’œil humain ne le remarque pas. Nous pourrons donc choisir quelle couleur sera affichée sur chaque ligne. &amp;lt;br&amp;gt;&lt;br /&gt;
Cet affichage ligne par ligne sera effectué via un multiplexeur donc le bus de sélection sera relié à un compteur 3bits cadencé sur une clock suffisamment rapide pour opérer une persistance rétinienne. &amp;lt;br&amp;gt;&lt;br /&gt;
Dans chaque bus nous avons imposé certains bits afin que la grille soit dessinée en bleu.&amp;lt;br&amp;gt;&lt;br /&gt;
Le bus multiplexé sera ensuite redirigé vers les pins de la matrice leds.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Affichage.png|vignette|center|800px|Schéma d'affichage|Circuit logique de l'affichage]] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Tests====&lt;br /&gt;
&lt;br /&gt;
Le bloc d'affichage a été testé et deux problèmes ont été rencontrés : &lt;br /&gt;
* La sélection a été mal réfléchie&lt;br /&gt;
* Un phénomène de rebond a été remarqué sur l'oscilloscope numérique&lt;br /&gt;
&lt;br /&gt;
=====La sélection=====&lt;br /&gt;
&lt;br /&gt;
Dans la fonction d'affichage, on retourne la sélection de la ligne en logique inversée. Le problème est que dans la version 1.0 de l'affichage, un GND avait été placé en entrée du MUX de sélection. Nous n'avions pas pensé au fait que dans ce cas la, toutes les sorties seraient en permanence au GND... &amp;lt;br&amp;gt;La correction a donc été de placer un VCC en entrée et d'inverser les sorties, ainsi une seul anode de ligne sera placée sur le GND.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Selection.PNG|vignette|center||400px|Schéma de selection|Correction de la sortie de selection]] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le schéma semble fonctionnel cependant d'autres tests restent à faire.&lt;br /&gt;
&lt;br /&gt;
=====Le rebond=====&lt;br /&gt;
&lt;br /&gt;
Lors du test de l'affichage, la clock d'affichage a été simulée par un bouton de la nanoboard et l'affichage a été relié sur une seule ligne.&amp;lt;br&amp;gt;&lt;br /&gt;
Nous étions sensé remarquer que lorsque la ligne s'allume, si on appuie sur le bouton, elle s’éteint et enfin si nous appuyons sept fois sur le bouton, la ligne se rallume. &amp;lt;br&amp;gt;&lt;br /&gt;
Rien ne se passait comme prévu, et plus précisément, il n'y avait même pas de logique dans la ré-apparition de la ligne.&amp;lt;br&amp;gt;&lt;br /&gt;
Ayant déjà été confronté à des problèmes de rebonds avec des boutons poussoir, ce phénomène a été testé sur l'oscilloscope numérique.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Rebond.png||center|Exemple de rebond|Exemple de rebond]] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous demanderons alors aux référents quelle stratégie adopter : filtrer le signal avec un condensateur en parallèle au bouton ou bien utiliser une comparaison avec registre à décalage pour vérifier la stabilité du signal avant d'envoie du front montant.&amp;lt;br&amp;gt;&lt;br /&gt;
Certes la correction du bouton n'était pas nécessaire aux tests entrepris pour l'affichage (nous aurions pu mettre une clock interne) mais ceci nous servira pour filtrer les choix effectués par l'utilisateur (haut, droite, select). &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Objectifs pour la séance prochaine====&lt;br /&gt;
&lt;br /&gt;
Les schémas effectués restent des ébauches, il y a forcément eu des oublis. Néanmoins, comme chaque schéma se compile, le passage à l'étape de mise en place de la liaison série durant la séance 2 est envisageable. Il faudra donc créer un protocole plus concret afin de savoir qui doit jouer, quand envoyer, quand recevoir des données. Si le temps le permet, quelques programmes simples seront testés sur la nanoboard afin de vérifier le fonctionnement de l'affichage de la matrice après discutions avec les enseignants au sujet du phénomène de rebond.&lt;br /&gt;
&lt;br /&gt;
=== Partie informatique ===&lt;br /&gt;
Dans cette première séance nous avons programmé l'arduino afin de créer le programme de morpion, pour pouvoir tester la partie informatique sans disposer de la partie électronique.&lt;br /&gt;
Pour cela nous avons due apprendre à utiliser une matrice de LED RGB à l'aide des codes fournit par SparkFun.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Puis nous avons pu commencer à programmer le morpion:&lt;br /&gt;
&lt;br /&gt;
*le jeu se déroule dans une matrice 3x3.&lt;br /&gt;
*le position du curseur est représentée par une lumière bleue, celle des pions du joueurs 1 par une lumière rouge et celle des pions du joueurs 2 par une lumière verte.&lt;br /&gt;
*si le curseur est sur un pions les deux couleurs s'additionnent pour donner du magenta où du cyan.&lt;br /&gt;
*le joueur se déplace à l'aide de 2 boutons poussoir,l'un permettant d'aller vers le haut, l'autre permettant d'aller à droite&lt;br /&gt;
**pour éviter plusieurs déplacements d'un coup, un délais a été mis entre deux actions&lt;br /&gt;
*une fois tout en haut, si le joueur presse le bouton pour aller vers le haut le joueur se retrouve en bas.&lt;br /&gt;
*une fois tout à droite, si le joueur presse le bouton pour aller vers la droite le joueur se retrouve à gauche. &lt;br /&gt;
*enfin un dernier bouton poussoir permet de placer un pion à l'endroit où se trouve le curseur.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Une fois les mouvements programmés il fallait régir les règles du jeu:&lt;br /&gt;
&lt;br /&gt;
*Ainsi le curseur commence toujours en haut à droite&lt;br /&gt;
*Si le un joueurs arrive a créer une ligne de 3, il gagne la partie&lt;br /&gt;
*Si aucun joueur n'arrive à gagner et que le terrain est remplit, la partie se termine sur un match nul&lt;br /&gt;
*Une fois la partie terminée, le terrain est remis à zéros&lt;br /&gt;
&lt;br /&gt;
Les fonctions permettant les différentes actions ont été décrites dans la partie Arduino de la séance n°3.&lt;br /&gt;
&lt;br /&gt;
== Séance 2 ==&lt;br /&gt;
&lt;br /&gt;
=== Partie électronique ===&lt;br /&gt;
&lt;br /&gt;
La matrice led ne pourra être alimentée par les différentes broches de la nanoboard sous peine de créer une chute de tension et risquer un reset du fpga.&amp;lt;br&amp;gt;&lt;br /&gt;
Ainsi, le but de cet séance est de réfléchir à la conception d'un prototype de carte permettant d'alimenter la matrice led de manière externe. &amp;lt;br&amp;gt;&lt;br /&gt;
====Utilisation de transistors====&lt;br /&gt;
L'utilisation de transistors en saturé paraît la meilleur chose à faire. En effet, ceci permettra de générer un gain en courant et de contrôler l'état des différentes couleurs ligne par ligne et colonne par colonne.&amp;lt;br&amp;gt;&lt;br /&gt;
Pour permettra la liaison de chaque led au VCC, on utilisera un transistor PNP. Pour permettre la liaison au GND, on utilisera un NPN.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Montage_roussel.PNG||center|upright = 0.5|Montage d'une branche|Montage d'une branche de led]] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Comme il s'agit de transistor à anodes communes, il suffira de 8 transistors NPN. Notre choix s'est donc porté vers le ULN2803A, qui est un ensemble de 8 paires Darlington.&amp;lt;br&amp;gt;&lt;br /&gt;
L'utilisation de paires Darlington a l'avantage de permettre une génération élevée de courant. (Fort gain en courant)&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour ce qui est des cathodes, un problème de taille se pose. Il faudrait 24 transistors PNP pour gérer les 8 colonnes * 3couleurs. Ainsi, notre choix s'est plutôt déporté vers le buffer de portes trois états 74AS240. Cette famille de buffer 3 états a la capacité de délivrer un courant du même ordre de grandeur que l'ULN2803A.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Maintenant il reste à dimensionner la résistance sur chaque branche. Après quelques tests à l'aide d'un multimètre et de la matrice, on remarque que chaque led a besoin de 2mA pour fonctionner. Donc le but est de générer un courant d'environ 2mA. Ainsi, si on impose une tension de 5.5V aux bornes du montage, R = 5.5 / 0.002 = 2700 Ohms.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous avons désormais toutes les informations nécessaires pour le montage d'un prototype.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Le montage====&lt;br /&gt;
Au cours d'une séance supplémentaire, un plan a été élaboré et le prototype brasé. Voici donc le prototype achevé :&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Driver.JPG||center|400px|Driver matrice|Driver de la matrice]] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sur chaque sortie se trouve une résistance de 2700ohms. Le mieux aurait été de réaliser ce montage avec un réseau résistif cependant, le temps nous faisant défaut, nous avons utilisé les résistances déjà présentes en magasin.&amp;lt;br&amp;gt;&lt;br /&gt;
Sur chaque entrée se trouver une broche qui sera reliée à la nanoboard. &amp;lt;br&amp;gt;&lt;br /&gt;
Tous les buffers ont leur GND et VCC reliés au générateur 5.5V. Les paires Darlington sont reliées à la même masse.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Il ne restait plus qu'à relier la matrice led. Cette liaison parallèle a été réalisée en recyclant un vieux BUS d'ordinateur fixe. Finalement, voilà le montage final :&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Matrice_roussel.JPG||center|400px|Montage final de la partie électronique|Montage final de la partie électronique]] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Partie informatique ===&lt;br /&gt;
=====Arduino=====&lt;br /&gt;
Lors de cette séance nous avons pu finir le programme arduino, pour pouvoir jouer à deux sur une la carte.&lt;br /&gt;
Cette partie a été crée pour pouvoir tester les différentes fonctions, et sera modifier lors de prochaines séances.&lt;br /&gt;
La matrice LED affiche des clignotement irrégulier de couleur rouge, mais cela ne gêne pas pour jouer.&lt;br /&gt;
&lt;br /&gt;
=====Raspberry=====&lt;br /&gt;
Nous avons pu enfin commencer notre travail sur la raspberry.&lt;br /&gt;
Apres avoir branché la raspberry en série à notre pc, nous avons pu la configurer afin qu'elle fonctionne avec le réseau de l'ecole.&lt;br /&gt;
Pour cela nous avons mis une adresse IP du réseau INSECURE de l'école sur la Raspberry, celle de notre raspberry est :172.26.79.12.&lt;br /&gt;
C'est à partir de cette adresse que nous allons acceder aux pages html du projet.&lt;br /&gt;
Pour effectuer cette configuration nous avons remplacé les lignes correspondant à la configuration de la carte Ethernet dans le fichier /etc/network/interfaces par les lignes&lt;br /&gt;
  auto eth0&lt;br /&gt;
  iface eth0 inet static&lt;br /&gt;
    address 172.26.79.12&lt;br /&gt;
    netmask 255.255.240.0&lt;br /&gt;
    gateway 172.26.79.254&lt;br /&gt;
&lt;br /&gt;
Et afin d'indiquer le serveur DNS dans /etc/resolv.conf nous avons rajouté:&lt;br /&gt;
&lt;br /&gt;
  nameserver 193.48.57.34 &lt;br /&gt;
&lt;br /&gt;
Une fois la raspberry configurée, nous pouvons accéder à notre raspberry sans liaisons série grâce à un ssh.&lt;br /&gt;
Afin d'effectuer notre projet nous avons besoin de deux bibliothèques:&lt;br /&gt;
*jquery.js que l'ont a telecharger sur http://jquery.com/ afin de faciliter la programmation en javascript&lt;br /&gt;
*une bibliothèque C de WebSocket trouvé sur http://libwebsockets.org afin de pouvoir effectuer notre programme en C utilisant le Websocket&lt;br /&gt;
&lt;br /&gt;
Notre raspberry est maintenant prête pour notre projet, nous avons pu commencer notre fichier morpion.html qui permet de joueur au morpion à deux sur le même ordinateur, ce qui permet de tester les differentes fonctions utilisés pour la suite du projet.&lt;br /&gt;
&lt;br /&gt;
== Séance 3 ==&lt;br /&gt;
&lt;br /&gt;
=== Partie électronique ===&lt;br /&gt;
&lt;br /&gt;
Le montage réalisé a été testé. Quelques soudures ont été refaites et un composant ne fonctionnait pas. Heureusement, nous avions placé des socles afin de pouvoir enlever/placer les buffers facilement. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Cette mise en évidence de composant défaillant a pris beaucoup de temps, c'est pourquoi tout ce qui suit a été réalisé sur plusieurs séances supplémentaires. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La première chose effectuée fut le branchement de la carte à la nanoboard. Pour cela, nous avons utilisé un plan créé au préalable et un schematic de vérification.&amp;lt;br&amp;gt;&lt;br /&gt;
Ce schematic consistait à afficher colonne par colonne et couleur par couleur chaque led, ainsi, si un branchement était mauvais, nous pouvions le voir directement. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le montage finalisé, nous pouvions commencer les tests des fonctions créées en première séance. Sur le principe, ces schematics marchaient plutôt bien mais comme nous souhaitions générer des simulations de données venant de la liaison série, nous n'avions pas assez de boutons pour utiliser ces premières schematics. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ainsi, le travail de traitement a dû être refait. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====La seletion====&lt;br /&gt;
L'objectif est de créer un circuit numérique de sélection à l'aide de seulement deux boutons.&amp;lt;br&amp;gt;&lt;br /&gt;
Le choix s'est alors porté sur un compteur allant jusque 8. Ainsi, il y avait 9 possibilités de valeur et chaque valeur correspondra a une case.&amp;lt;br&amp;gt;&lt;br /&gt;
Le compteur devra s'incrémenter sur l'appuie d'un bouton de balayage. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Traite.JPG|vignette|center|600px|Selection|Selection]] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La sélection du joueur physique doit être contrôlée afin que seul un choix valide soit accepté. Ainsi, un schematic de vérification a été créé.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour savoir quelles cases ont déjà été jouées, nous avons décidé d'effectuer un OU logique entre les cases jouées par le joueur physique et les cases jouées par le joueur en ligne. Une fois le bus d'état global créé, il suffit d'effectuer un ET logique avec le choix de notre joueur physique. Si le choix se porte sur une case qui n'a jamais été jouée, le résultat de l'opération logique sera un bus nul. Nous comparons donc ce bus avec un bus nul. &amp;lt;br&amp;gt;&lt;br /&gt;
Finalement, le choix est valide si le comparateur sort une égalité ET le bouton de sélection a été appuyé.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Valider_choix.JPG|vignette|center|600px|Valider|Valider]] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====L'affichage====&lt;br /&gt;
Les schematics d'affichage sont restés les mêmes qu'à la séance 1, mis à part quelques corrections tel l'inversion des sorties d'affichage car nous travaillons en logique inversée sur les portes 3 états.&amp;lt;br&amp;gt;&lt;br /&gt;
Le pré-affichage s'occupe toujours du stockage des cases cochées par le joueur physique si il est le joueur courant.&amp;lt;br&amp;gt;&lt;br /&gt;
Afin d'assurer une persistance rétinienne, on devra relier l'affichage à une horloge d'au moins 3KHz.&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
[[Fichier:Traitement_preaffichage.JPG|vignette|center|500px|Pre-affichage|Pre-affichage]] [[Fichier:Affich.JPG|vignette|center|500px|Affichage|Affichage]] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Simulation de la liaison série====&lt;br /&gt;
Le but est de gérer des données semblables à ce que la raspberry pourrait nous envoyer. A savoir 1 bit de fin de partie, 1 bit de réception de donnée et 4 bits de choix de case.&amp;lt;br&amp;gt;&lt;br /&gt;
=====Conversion de l'adresse choisie=====&lt;br /&gt;
Il faut faire correspondre les 4 bits reçus à un bus de 9bits, chaque bit correspondant à une case. Ceci revient à faire un traitement similaire à la sélection du joueur physique...&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Traite_adversaire.JPG|vignette|center|400px|Conversion de l'adresse|Conversion de l'adresse]] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Stockage=====&lt;br /&gt;
Maintenant que nous savons convertir une adresse, on doit pouvoir mettre à jour les cases jouées par le joueur en ligne sur chaque réception de donnée.&amp;lt;br&amp;gt;&lt;br /&gt;
Pour effectuer ceci, on utilise 9 bascules pour stocker les choix dans différentes cases. Aucun traitement de choix valide n'est à faire car la raspberry s'en occupe déjà de son côté.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Stock_adv.JPG|vignette|center|600px|Stockage des cases de l'adversaire|Stockage des cases de l'adversaire]] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Propre à la simulation=====&lt;br /&gt;
Pour générer l'adresse, on utilise le même principe de sélection que celui du joueur physique.&amp;lt;br&amp;gt;&lt;br /&gt;
Pour avoir un aspect visuel de cette sélection, on utilise un MUX qui, en fonction du joueur courant, afficher la sélection de tel ou tel joueur.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Traite_sel.JPG|vignette|center|600px|MUX de selection|MUX de la sélection]] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour ce qui est du bit de fin de parti, on le symbolise par un bouton.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Phénomène de rebond=====&lt;br /&gt;
Pour gérer le rebond des boutons poussoirs, la solution a été numérique. Un registre à décalage a été créé, cadencé sur une clock, il décale sur chaque front d'horloge la valeur courante d'un bouton. En utilisant un comparateur, on obtient alors un front montant seulement lorsque le bouton est dans un état stable (c'est à dire lorsque tous les bits ont la même valeurs)&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Dump.JPG|vignette|center|600px|Anti-rebond|Anti-rebond]] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====TOPLEVEL====&lt;br /&gt;
Le schéma TOPLEVEL est alors le suivant :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Toplevel.JPG|vignette|center|800px|TOPLEVEL|TOPLEVEL]] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ainsi, si nous avions eu le bloc de liaison série bidirectionnel, nous aurions simplement eu à :&lt;br /&gt;
* Remplacer la génération d'adresse par les 4bits de poids faible du message de 8bits reçu.&lt;br /&gt;
* Remplacer le bouton de reset par le bit de fin de partie.&lt;br /&gt;
* Remplacer le bit de choix de l'adversaire par celui de réception validée.&lt;br /&gt;
* Relier le bit d'émission à la sortie de &amp;quot;choix valide&amp;quot;.&lt;br /&gt;
* Relier la sélection du joueur physique aux données à transmettre.&lt;br /&gt;
* Enlever le multiplexage de la sélection.&lt;br /&gt;
&lt;br /&gt;
====Réflexion====&lt;br /&gt;
La partie électronique de ce projet a donc été menée à bout. Cependant, après coup, on se rend compte que la création d'un prototype aurait été meilleure en imprimant un PCB plutôt qu'en utilisant une piste à bandes.&amp;lt;br&amp;gt;&lt;br /&gt;
Nous aurions également pu éviter une configuration en parallèle du driver. Ainsi, à l'aide de registres à décalages alimentés en externe, la lisibilité du circuit aurait été meilleure.&amp;lt;br&amp;gt;&lt;br /&gt;
On peut néanmoins se satisfaire de la réalisation numérique du circuit car elle exploite toutes les possibilités qu'offrent la conception via schematics à l'aide d'Altium designer à savoir :&amp;lt;br&amp;gt;&lt;br /&gt;
* La création d'une bibliothèque&lt;br /&gt;
* La création de composants&lt;br /&gt;
* L'utilisation de composants configurables avec édition de pins&amp;lt;br&amp;gt;&lt;br /&gt;
D'ailleurs, on comprend d'autant plus l'intérêt du langage VHDL après la création d'autant de schematics pour un projet de cette envergure.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Partie informatique ===&lt;br /&gt;
Nous avons commencé cette séance en continuant le morpion.html&lt;br /&gt;
Dans un premier temps nous avons crée &amp;quot;l'espace de jeu&amp;quot; en utilisant du code trouvé sur internet :&lt;br /&gt;
 &amp;lt;!DOCTYPE html&amp;gt;&lt;br /&gt;
  &amp;lt;head&amp;gt;&lt;br /&gt;
   &amp;lt;meta charset=&amp;quot;utf-8&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;style type=&amp;quot;text/css&amp;quot;&amp;gt;&lt;br /&gt;
 .table{&lt;br /&gt;
 width : 330px;&lt;br /&gt;
 height : 330px;&lt;br /&gt;
 border : solid 3px black;&lt;br /&gt;
  border-collapse: collapse;&lt;br /&gt;
 }&lt;br /&gt;
 .td{&lt;br /&gt;
 border : solid 3px black;&lt;br /&gt;
 width : 33%;&lt;br /&gt;
 height : 33%;&lt;br /&gt;
 }&lt;br /&gt;
 &amp;lt;/style&amp;gt;&lt;br /&gt;
 &amp;lt;title&amp;gt; Jeu morpion&amp;lt;/title&amp;gt;&lt;br /&gt;
 &amp;lt;/head&amp;gt;&lt;br /&gt;
et&lt;br /&gt;
 &amp;lt;body&amp;gt;&lt;br /&gt;
   h1&amp;gt;Morpion&amp;lt;/h1&amp;gt;&lt;br /&gt;
 table class=&amp;quot;table&amp;quot; align=&amp;quot;center&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
       &amp;lt;td class=&amp;quot;td&amp;quot; onclick=&amp;quot;placerSigne(0)&amp;quot; id=&amp;quot;0&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
       &amp;lt;td class=&amp;quot;td&amp;quot; onclick=&amp;quot;placerSigne(1)&amp;quot; id=&amp;quot;1&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
       &amp;lt;td class=&amp;quot;td&amp;quot; onclick=&amp;quot;placerSigne(2)&amp;quot; id=&amp;quot;2&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
       &amp;lt;td class=&amp;quot;td&amp;quot; onclick=&amp;quot;placerSigne(3)&amp;quot; id=&amp;quot;3&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
       &amp;lt;td class=&amp;quot;td&amp;quot; onclick=&amp;quot;placerSigne(4)&amp;quot; id=&amp;quot;4&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
       &amp;lt;td class=&amp;quot;td&amp;quot; onclick=&amp;quot;placerSigne(5)&amp;quot; id=&amp;quot;5&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
       &amp;lt;td class=&amp;quot;td&amp;quot; onclick=&amp;quot;placerSigne(6)&amp;quot; id=&amp;quot;6&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
       &amp;lt;td class=&amp;quot;td&amp;quot; onclick=&amp;quot;placerSigne(7)&amp;quot; id=&amp;quot;7&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
       &amp;lt;td class=&amp;quot;td&amp;quot; onclick=&amp;quot;placerSigne(8)&amp;quot; id=&amp;quot;8&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
 &amp;lt;/table&amp;gt;&lt;br /&gt;
 table style=&amp;quot;border : solid 3px #3399FF;&amp;quot; align=&amp;quot;center&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;tr&amp;gt;&lt;br /&gt;
 &amp;lt;td style=&amp;quot;border : solid 1px #3399FF;&amp;quot;&amp;gt;Joueur 1&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;td style=&amp;quot;border : solid 1px #3399FF;&amp;quot;&amp;gt;Joueur 2&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
 &amp;lt;tr&amp;gt;&lt;br /&gt;
 &amp;lt;td style=&amp;quot;border : solid 1px #3399FF;&amp;quot; id=&amp;quot;scre1&amp;quot;&amp;gt;0&lt;br /&gt;
 &amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;td style=&amp;quot;border : solid 1px #3399FF;&amp;quot; id=&amp;quot;scre2&amp;quot;&amp;gt;0&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
 &amp;lt;/table&amp;gt;&lt;br /&gt;
  &amp;lt;/body&amp;gt;&lt;br /&gt;
 &amp;lt;/html&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le code ci dessus n'est pas totalement bon, puisque nous avons du enlever des &amp;quot;&amp;lt;&amp;quot; afin d'afficher le code et non ce qu'il en résulte.&lt;br /&gt;
&lt;br /&gt;
L'espacement entre deux lignes peut changer en fonction de la taille de ce qui est mis dedans.&lt;br /&gt;
Si on remplis de case blanche (&amp;quot;vide.png&amp;quot;) de taille 100*100 on obtient:&lt;br /&gt;
[[Fichier:morpion1.png]]&lt;br /&gt;
&lt;br /&gt;
A chaque clique sur une case la fonction placerSigne(n) va s'effectuer avec n le numéros de la case sélectionnée.&lt;br /&gt;
 function placerSigne(idCase)&lt;br /&gt;
 { &lt;br /&gt;
         if(morpion[idCase] == 0)&lt;br /&gt;
         {coup++;&lt;br /&gt;
         morpion[idCase]=joueur;&lt;br /&gt;
         if (joueur==1)&lt;br /&gt;
                 {&lt;br /&gt;
  	  	 joueur=2;&lt;br /&gt;
                 document.getElementById(idCase).innerHTML = '&amp;lt;img src=&amp;quot;croix.gif&amp;quot; alt=&amp;quot;image !&amp;quot; /&amp;gt;';&lt;br /&gt;
 &lt;br /&gt;
                 }&lt;br /&gt;
 	else    {&lt;br /&gt;
 	   	 joueur=1;&lt;br /&gt;
                 document.getElementById(idCase).innerHTML = '&amp;lt;img src=&amp;quot;rond.gif&amp;quot; alt=&amp;quot;image !&amp;quot; /&amp;gt;';&lt;br /&gt;
 &lt;br /&gt;
                 }&lt;br /&gt;
 	if (coup&amp;gt;4)&lt;br /&gt;
 		{if (gagner(idCase))&lt;br /&gt;
 			{if (joueur==1)&lt;br /&gt;
 				{score2++;&lt;br /&gt;
 				alert(&amp;quot;joueur 2 gagne &amp;quot;);&lt;br /&gt;
 				finpartie();&lt;br /&gt;
 				}&lt;br /&gt;
 			else{score1++;&lt;br /&gt;
 				alert(&amp;quot;joueur 1 gagne &amp;quot;);&lt;br /&gt;
 				finpartie();&lt;br /&gt;
 				}&lt;br /&gt;
 			&lt;br /&gt;
 			}&lt;br /&gt;
 		else {if (egalite()==0)&lt;br /&gt;
 			{alert(&amp;quot;egalite&amp;quot;);&lt;br /&gt;
 			finpartie();}&lt;br /&gt;
 		     }&lt;br /&gt;
 		}&lt;br /&gt;
         }&lt;br /&gt;
         else{alert(&amp;quot;pas le droit&amp;quot;);}&lt;br /&gt;
 }&lt;br /&gt;
Cette fonction place une image 100x100 de rond ou de croix dans la case sélectionnée en fonction du joueur qui doit jouer.&lt;br /&gt;
*Elle calcule les scores de chaque joueurs, et appelle gagner et egalite pour savoir si on est dans une fin de partie.&lt;br /&gt;
*Et elle alerte le joueur si la case sélectionnée ne peut pas être jouée.&lt;br /&gt;
&lt;br /&gt;
Pour cela elle utilise le tableau morpion de taille 9 remplit de 0 à l'origine, et modifie la case sélectionnée en y mettant 1 ou 2 en fonction du joueur qui a joué.&lt;br /&gt;
&lt;br /&gt;
La variable coup permet de déterminer le nombre de coup jouer, ce qui permet de ne pas verifier si une partie une gagnée tant que coup n'est pas supérieur à 4, puisqu'il faut au minimum 5 coup pour gagner.&lt;br /&gt;
&lt;br /&gt;
 function finpartie()&lt;br /&gt;
 {for (var j=0;j&amp;lt;9;j++)&lt;br /&gt;
 	{ document.getElementById(j).innerHTML = '&amp;lt;img src=&amp;quot;vide.png&amp;quot; alt=&amp;quot;image !&amp;quot; /&amp;gt;';&lt;br /&gt;
 	morpion[j]=0;&lt;br /&gt;
 	}&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
La fonction finpartie() met les variables morpion et coup à zéro, et place des images blanches dans toutes les cases.&lt;br /&gt;
&lt;br /&gt;
Elle est appelé que si il y une victoire ou une égalité.&lt;br /&gt;
&lt;br /&gt;
Dans morpionsc.html qui est le fichier html final, joueur est remis à 1 dans cette fonction.&lt;br /&gt;
&lt;br /&gt;
Dans le fichier morpion.html cela n’étais pas cessionnaire et permettait en plus au joueur perdant de commencer.&lt;br /&gt;
&lt;br /&gt;
Mais pour simplifier la suite nous avons préféré définir que toujours le même joueur commencerais. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 function gagner(idCase)&lt;br /&gt;
 {switch(idCase)&lt;br /&gt;
         {&lt;br /&gt;
 case 0:&lt;br /&gt;
         return (diagonal1()||ligne1()||colonne1());&lt;br /&gt;
         break;&lt;br /&gt;
 case 1:&lt;br /&gt;
         return (ligne1()||colonne2());&lt;br /&gt;
         break;&lt;br /&gt;
 case 2:&lt;br /&gt;
         return (diagonal2()||ligne1()||colonne3());&lt;br /&gt;
         break;&lt;br /&gt;
 case 3:&lt;br /&gt;
         return (ligne2()||colonne1());&lt;br /&gt;
         break; &lt;br /&gt;
 &lt;br /&gt;
 case 4:&lt;br /&gt;
         return (diagonal1()||diagonal2()||ligne2()||colonne2());&lt;br /&gt;
         break;&lt;br /&gt;
 case 5:&lt;br /&gt;
         return (ligne2()||colonne3());&lt;br /&gt;
         break;&lt;br /&gt;
 case 6:&lt;br /&gt;
         return (diagonal2()||ligne3()||colonne1());&lt;br /&gt;
         break;&lt;br /&gt;
 case 7:&lt;br /&gt;
         return (ligne3()||colonne2());&lt;br /&gt;
         break;&lt;br /&gt;
 case 8:&lt;br /&gt;
         return (diagonal1()||ligne3()||colonne3());&lt;br /&gt;
         break;&lt;br /&gt;
         }&lt;br /&gt;
 }&lt;br /&gt;
La fonction gagner appelle des fonctions diagonal,ligne,colonne qui retourne 1 si il y'a 3 même symboles sur leur domaines.&lt;br /&gt;
&lt;br /&gt;
Gagner teste donc si il y a une suite de 3 symboles sur la ligne, colonne et les diagonales passant par la case qui a été joué.&lt;br /&gt;
&lt;br /&gt;
 function egalite()&lt;br /&gt;
 {var cp=0;&lt;br /&gt;
 for (var i=0;i &amp;lt; 9;i++)&lt;br /&gt;
         {if (morpion[i]==0)&lt;br /&gt;
 		{cp++;}&lt;br /&gt;
         }&lt;br /&gt;
 return cp;&lt;br /&gt;
 }&lt;br /&gt;
La fonction egalité teste si toutes les cases ont été joué.&lt;br /&gt;
&lt;br /&gt;
On aurait pu utiliser la variable coup, si coup était égal à 9 alors égalité, mais la fonction egalité permet de vérifier si il n'y a pas eu de problème lors de la modification de la matrice.&lt;br /&gt;
&lt;br /&gt;
Avec morpion.html nous avons pu apprendre le javascript, et poser les bases de notre fichier html final.&lt;br /&gt;
&lt;br /&gt;
===Séances supplémentaires===&lt;br /&gt;
&lt;br /&gt;
====HTML====&lt;br /&gt;
Pour le HTML/Javascript on garde les mêmes fonctions gagner et egalite.&lt;br /&gt;
On va ajouter lors de l'initialisation&lt;br /&gt;
 window.WebSocket=(window.WebSocket||window.MozWebSocket);&lt;br /&gt;
 &lt;br /&gt;
 var websocket=new WebSocket('ws://172.26.79.12:9000','myprotocol');&lt;br /&gt;
 &lt;br /&gt;
 websocket.onopen=function(){ $('h1').css('color','green'); };&lt;br /&gt;
 &lt;br /&gt;
 websocket.onerror=function(){ $('h1').css('color','red'); };&lt;br /&gt;
On modifie placerSigne:&lt;br /&gt;
*si ce n'est pas au tour du joueur 1 de jouer on lui envoie une alerte.&lt;br /&gt;
*si il y a une fin de partie on envoie 9 grâce a sendMessage.&lt;br /&gt;
*si il n'y a pas de fin de partie on envoie la case jouer toujours grâce à sendMessage:&lt;br /&gt;
 function sendMessage(data){&lt;br /&gt;
 websocket.send(data);&lt;br /&gt;
 }&lt;br /&gt;
Pour finpartie on rajoute juste &lt;br /&gt;
 joueur=1;&lt;br /&gt;
&lt;br /&gt;
Pour faire jouer le second joueur il faut recevoir un message du websocket ainsi :&lt;br /&gt;
 websocket.onmessage=function(message)&lt;br /&gt;
sera la fonction dans laquelle on fera jouer le joueur 2. &lt;br /&gt;
&lt;br /&gt;
Le websocket envoie simplement la case en char* ainsi:&lt;br /&gt;
 websocket.onmessage=function(message){&lt;br /&gt;
 idCase=parseInt((message.data)-30);&lt;br /&gt;
 console.log(idCase);&lt;br /&gt;
 &lt;br /&gt;
 if(morpion[idCase] == 0)&lt;br /&gt;
                 {coup++;&lt;br /&gt;
                  morpion[idCase]=2;&lt;br /&gt;
                  joueur=1;&lt;br /&gt;
  		document.getElementById(idCase).innerHTML = '&amp;lt;img src=&amp;quot;rond.gif&amp;quot; alt=&amp;quot;image !&amp;quot; /&amp;gt;';&lt;br /&gt;
  		 if (coup&amp;gt;4)&lt;br /&gt;
 			 {if (gagner(idCase))&lt;br /&gt;
                                {score2++; &lt;br /&gt;
                                         alert(&amp;quot;joueur 2 gagne &amp;quot;);&lt;br /&gt;
                                         finpartie();&lt;br /&gt;
 					sendMessage(9);&lt;br /&gt;
                                }&lt;br /&gt;
  &lt;br /&gt;
 &lt;br /&gt;
                           else {if (egalite()==0)&lt;br /&gt;
                                         {alert(&amp;quot;egalite&amp;quot;);&lt;br /&gt;
                                         finpartie();&lt;br /&gt;
 					sendMessage(9);&lt;br /&gt;
 &lt;br /&gt;
                                         }&lt;br /&gt;
 				}&lt;br /&gt;
 			&lt;br /&gt;
 			}&lt;br /&gt;
 		}&lt;br /&gt;
 &lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Console.log permet d'afficher dans le debug, la valeur traitée.&lt;br /&gt;
On envoie toujours 9 si la partie se termine, sinon on effectue la même chose que dans placerSigne de morpion.html&lt;br /&gt;
&lt;br /&gt;
====Fichier C====&lt;br /&gt;
Il faut maintenant créer la passerelle entre l'arduino et le fichier html.&lt;br /&gt;
Pour cela notre fichier doit utiliser des fonctions de websocket mais aussi de serial.c&lt;br /&gt;
Les fonctions de serial.c sont directement intégrées dans notre fichier, il n'y a donc pas besoin de lui faire appel pour compiler.&lt;br /&gt;
 &lt;br /&gt;
 #include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;stdlib.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;string.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;unistd.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;fcntl.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;termios.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;strings.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;sys/types.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;sys/ioctl.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;sys/file.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;linux/serial.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;libwebsockets.h&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 #define MAX_FRAME_SIZE  1024&lt;br /&gt;
 #define WAIT_DELAY      50&lt;br /&gt;
 #define MAX_MESSAGE     2 &lt;br /&gt;
 &lt;br /&gt;
 #define SERIAL_READ 0&lt;br /&gt;
 #define SERIAL_WRITE 1&lt;br /&gt;
 #define SERIAL_BOTH 2&lt;br /&gt;
 &lt;br /&gt;
 #define SERIAL_DEVICE &amp;quot;/dev/ttyUSB0&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 int sd;&lt;br /&gt;
  &lt;br /&gt;
 &lt;br /&gt;
 //&lt;br /&gt;
 // Open serial port device&lt;br /&gt;
 //&lt;br /&gt;
 int serialOpen(char *device,int mode){&lt;br /&gt;
 int flags=(mode==SERIAL_READ?O_RDONLY:(mode==SERIAL_WRITE?O_WRONLY:O_RDWR));&lt;br /&gt;
 int fd=open(device,flags|O_NOCTTY|O_NONBLOCK); &lt;br /&gt;
 if(fd&amp;lt;0){ perror(device); exit(-1); }&lt;br /&gt;
 return fd;&lt;br /&gt;
 }&lt;br /&gt;
  &lt;br /&gt;
 //&lt;br /&gt;
 // Serial port configuration&lt;br /&gt;
 //&lt;br /&gt;
 void serialConfig(int fd,int speed){&lt;br /&gt;
 struct termios new;&lt;br /&gt;
 bzero(&amp;amp;new,sizeof(new));&lt;br /&gt;
 new.c_cflag=CLOCAL|CREAD|speed|CS8;&lt;br /&gt;
 new.c_iflag=0;&lt;br /&gt;
 new.c_oflag=0;&lt;br /&gt;
 new.c_lflag=0;     /* set input mode (non-canonical, no echo,...) */&lt;br /&gt;
 new.c_cc[VTIME]=0; /* inter-character timer unused */&lt;br /&gt;
 new.c_cc[VMIN]=1;  /* blocking read until 1 char received */&lt;br /&gt;
 if(tcsetattr(fd,TCSANOW,&amp;amp;new)&amp;lt;0){ perror(&amp;quot;serialInit.tcsetattr&amp;quot;); exit(-1); }&lt;br /&gt;
 }&lt;br /&gt;
  &lt;br /&gt;
 //&lt;br /&gt;
 // Serial port termination&lt;br /&gt;
 //&lt;br /&gt;
 void serialClose(int fd){&lt;br /&gt;
 close(fd);&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 static int callback_http(&lt;br /&gt;
   struct libwebsocket_context *this,&lt;br /&gt;
   struct libwebsocket *wsi,enum libwebsocket_callback_reasons reason,&lt;br /&gt;
   void *user,void *in,size_t len)&lt;br /&gt;
 {&lt;br /&gt;
 return 0;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
  static struct libwebsocket_protocols protocols[] = {&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;http-only&amp;quot;,   // name&lt;br /&gt;
      callback_http, // callback&lt;br /&gt;
      0,             // data size&lt;br /&gt;
      0              // maximum frame size&lt;br /&gt;
    },&lt;br /&gt;
    {&amp;quot;myprotocol&amp;quot;,callback_my,0,MAX_FRAME_SIZE},&lt;br /&gt;
    {NULL,NULL,0,0}&lt;br /&gt;
    };&lt;br /&gt;
  &lt;br /&gt;
 &lt;br /&gt;
Ci-dessus se trouve le code se trouvant dans serial.c afin de créer serialOpen, serialClose et serialConfig, ainsi que l'initialisation de variables utilisées.&lt;br /&gt;
&lt;br /&gt;
Mais aussi la fonction callback_http(),la structure libwebsocket_protocols, et l'initialisation de variables. &lt;br /&gt;
 &lt;br /&gt;
 int main(void) {&lt;br /&gt;
 int port=9000;&lt;br /&gt;
 struct lws_context_creation_info info;&lt;br /&gt;
 memset(&amp;amp;info,0,sizeof info);&lt;br /&gt;
 info.port=port;&lt;br /&gt;
 info.protocols=protocols;&lt;br /&gt;
 info.gid=-1;&lt;br /&gt;
 info.uid=-1;&lt;br /&gt;
 struct libwebsocket_context *context=libwebsocket_create_context(&amp;amp;info);&lt;br /&gt;
 if(context==NULL){&lt;br /&gt;
   fprintf(stderr, &amp;quot;libwebsocket init failed\n&amp;quot;);&lt;br /&gt;
   return -1;&lt;br /&gt;
   }&lt;br /&gt;
 printf(&amp;quot;starting server...\n&amp;quot;);&lt;br /&gt;
 &lt;br /&gt;
   &lt;br /&gt;
 sd=serialOpen(SERIAL_DEVICE,SERIAL_BOTH);&lt;br /&gt;
 serialConfig(sd,B9600);&lt;br /&gt;
 &lt;br /&gt;
  &lt;br /&gt;
 while(1){&lt;br /&gt;
   libwebsocket_service(context,WAIT_DELAY);&lt;br /&gt;
   }&lt;br /&gt;
     &lt;br /&gt;
 &lt;br /&gt;
 serialClose(sd); &lt;br /&gt;
 &lt;br /&gt;
  &lt;br /&gt;
 libwebsocket_context_destroy(context);&lt;br /&gt;
 return 0;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Le main permet d'initialiser une liaison série de 9600 Baud et de lancer une boucle infini dans laquelle la passerelle entre arduino et html va s'effectuer.&lt;br /&gt;
&lt;br /&gt;
 static int callback_my(&lt;br /&gt;
   struct libwebsocket_context * this,&lt;br /&gt;
   struct libwebsocket *wsi,enum libwebsocket_callback_reasons reason,&lt;br /&gt;
   void *user,void *in,size_t len)&lt;br /&gt;
 {&lt;br /&gt;
 static char message[2+LWS_SEND_BUFFER_PRE_PADDING+LWS_SEND_BUFFER_POST_PADDING];&lt;br /&gt;
 static char valeur;&lt;br /&gt;
 switch(reason){&lt;br /&gt;
   case LWS_CALLBACK_ESTABLISHED:&lt;br /&gt;
     printf(&amp;quot;connection established\n&amp;quot;);&lt;br /&gt;
                 // Declenchement d'un prochain envoi au navigateur&lt;br /&gt;
     break;&lt;br /&gt;
   case LWS_CALLBACK_RECEIVE:&lt;br /&gt;
                 // Ici sont traites les messages envoyes par le navigateur&lt;br /&gt;
 //printf(&amp;quot;received data: %s\n&amp;quot;,(char *)in);&lt;br /&gt;
     if(write(sd,in,sizeof(char))!=1){ perror(&amp;quot;main.write&amp;quot;); exit(-1); }&lt;br /&gt;
 printf(&amp;quot;writen data: %s\n&amp;quot;,(char *)in);&lt;br /&gt;
                 // Declenchement d'un prochain envoi au navigateur&lt;br /&gt;
     libwebsocket_callback_on_writable(this,wsi);&lt;br /&gt;
     break;&lt;br /&gt;
   case LWS_CALLBACK_SERVER_WRITEABLE:&lt;br /&gt;
                 // Ici sont envoyes les messages au navigateur&lt;br /&gt;
 &lt;br /&gt;
 if (read(sd,&amp;amp;valeur,sizeof(char))==1)&lt;br /&gt;
 { &lt;br /&gt;
 //printf(&amp;quot;write data: %c\n&amp;quot;,valeur);&lt;br /&gt;
       char *out=message+LWS_SEND_BUFFER_PRE_PADDING;&lt;br /&gt;
        sprintf(out,&amp;quot;%02x&amp;quot;,valeur);&lt;br /&gt;
 //printf(&amp;quot;write data: %s\n&amp;quot;,(char *)out);&lt;br /&gt;
 &lt;br /&gt;
     libwebsocket_write(wsi,(unsigned char *)out,MAX_MESSAGE,LWS_WRITE_TEXT);&lt;br /&gt;
 }&lt;br /&gt;
 else{libwebsocket_callback_on_writable(this,wsi);&lt;br /&gt;
 }&lt;br /&gt;
     break;&lt;br /&gt;
   default:&lt;br /&gt;
     break;&lt;br /&gt;
        	  }   &lt;br /&gt;
 return 0;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
La fonction ci-dessus est celle qui definie la passerelle.&lt;br /&gt;
&lt;br /&gt;
Si elle établit une liaison, elle imprime &amp;quot;connection established&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Une fois la connection établit on se retrouve dans le cas LWS_CALLBACK_RECEIVE si la page html envoie une valeur.&lt;br /&gt;
&lt;br /&gt;
Dans ce cas la valeur pointée par in est écrite dans sd(liaison serie), puis on utilise :&lt;br /&gt;
 libwebsocket_callback_on_writable(this,wsi);&lt;br /&gt;
&lt;br /&gt;
Qui permet de passer en mode réception de message par la liaison série, qui est definit ici par le cas:&lt;br /&gt;
 case LWS_CALLBACK_SERVER_WRITEABLE:&lt;br /&gt;
Dans ce cas on lit la valeur dans la liaison serie et on la met dans la variable valeur. Si il n'y a rien à lire pour le moment on utilise a nouveau:&lt;br /&gt;
 libwebsocket_callback_on_writable(this,wsi);&lt;br /&gt;
Afin de rester dans le même case.&lt;br /&gt;
&lt;br /&gt;
Si la valeur a été lu on crée out:&lt;br /&gt;
  char *out=message+LWS_SEND_BUFFER_PRE_PADDING;&lt;br /&gt;
avec message :&lt;br /&gt;
 static char message[2+LWS_SEND_BUFFER_PRE_PADDING+LWS_SEND_BUFFER_POST_PADDING];&lt;br /&gt;
out va etre du bon type et de la bonne taille pour pouvoir être envoyer a l'html.&lt;br /&gt;
On modife donc la valeur de out grâce à la valeur lue:&lt;br /&gt;
 sprintf(out,&amp;quot;%02x&amp;quot;,valeur);&lt;br /&gt;
Puis on l'envoie:&lt;br /&gt;
 libwebsocket_write(wsi,(unsigned char *)out,MAX_MESSAGE,LWS_WRITE_TEXT);&lt;br /&gt;
&lt;br /&gt;
====Arduino====&lt;br /&gt;
Pour l'affichage de la matrice LED nous avons utilisé un exemple trouvé sur le site de SparkFun Electronics:&lt;br /&gt;
 //Example_RGBMatrix.ino&lt;br /&gt;
 //By: Ryan Owens @ SparkFun Electronics&lt;br /&gt;
 //&lt;br /&gt;
 //modified 27 Oct 2014&lt;br /&gt;
 //by Bobby Chan @ SparkFun Electronics&lt;br /&gt;
&lt;br /&gt;
Nous avons ensuite crée:&lt;br /&gt;
&lt;br /&gt;
 void affichage(int je[3][3])&lt;br /&gt;
 {&lt;br /&gt;
   for (int i = 0; i &amp;lt; 3; i++)&lt;br /&gt;
   {&lt;br /&gt;
     for (int j = 0; j &amp;lt; 3; j++)&lt;br /&gt;
     { if (je[i][j] == 1)&lt;br /&gt;
       {&lt;br /&gt;
         color_buffer[0 + i + j * 8] = BLUE;&lt;br /&gt;
       }&lt;br /&gt;
       else if (je[i][j] == 2)&lt;br /&gt;
       {&lt;br /&gt;
         color_buffer[0 + i + j * 8] = RED;&lt;br /&gt;
       }&lt;br /&gt;
       else if (je[i][j] == 5)&lt;br /&gt;
       {&lt;br /&gt;
         color_buffer[0 + i + j * 8] = TEAL;&lt;br /&gt;
       }&lt;br /&gt;
       else if (je[i][j] == 4)&lt;br /&gt;
       {&lt;br /&gt;
         color_buffer[0 + i + j * 8] = GREEN;&lt;br /&gt;
       }&lt;br /&gt;
       else if (je[i][j] == 3) {&lt;br /&gt;
         color_buffer[0 + i + j * 8] = MAGENTA;&lt;br /&gt;
       }&lt;br /&gt;
       else if (je[i][j] == 0) {&lt;br /&gt;
         color_buffer[0 + i + j * 8] = BLACK;&lt;br /&gt;
       }&lt;br /&gt;
     }&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
Qui change la valeur des buffers sur une matrice 3x3, en fonction d'une matrice donnée en paramètre de taille 3x3.&lt;br /&gt;
&lt;br /&gt;
Il faut ensuite matrix_write(); pour observer les resultats&lt;br /&gt;
 &lt;br /&gt;
 void go(int joueur)&lt;br /&gt;
 {if (joueur==2)&lt;br /&gt;
 {color_buffer[7]=GREEN;}&lt;br /&gt;
 else{color_buffer[7]=RED;}}&lt;br /&gt;
Cette fonction met un buffer vert si le joueur 2 peut jouer sinon rouge, le buffer se trouve en dehors de la zone de jeu et donc ne gène pas l'utilisateur.&lt;br /&gt;
&lt;br /&gt;
Il faut ensuite matrix_write(); pour observer les resultats&lt;br /&gt;
&lt;br /&gt;
 void reset(int jeu[3][3])&lt;br /&gt;
 { joueur = 0;&lt;br /&gt;
 color_buffer[7]=RED;&lt;br /&gt;
   for (int i = 0; i &amp;lt; 3; i++)&lt;br /&gt;
   {&lt;br /&gt;
     for (int j = 0; j &amp;lt; 3; j++)&lt;br /&gt;
     { jeu[i][j] = 0;&lt;br /&gt;
     }&lt;br /&gt;
   }&lt;br /&gt;
   jeu[0][0] = 1;&lt;br /&gt;
 }&lt;br /&gt;
Cette fonction remet dispose la matrice LED comme lors d'un début de partie.&lt;br /&gt;
On aurait pu remettre a zéro certaines variables dans cette fonction.&lt;br /&gt;
&lt;br /&gt;
Une fois ces fonctions crées, il faut crée la fonction loop:&lt;br /&gt;
 void loop() {&lt;br /&gt;
   go(joueur);&lt;br /&gt;
   if (Serial.available() &amp;gt; 0)&lt;br /&gt;
   { int a = (Serial.read() - 48);&lt;br /&gt;
     if (a == 9) {&lt;br /&gt;
       reset(jeu);&lt;br /&gt;
     }&lt;br /&gt;
     else {&lt;br /&gt;
       if (joueur == 0)&lt;br /&gt;
       { int b = (a) / 3;&lt;br /&gt;
         int c = a - (b) * 3;&lt;br /&gt;
         jeu[b][c] = 2;&lt;br /&gt;
         joueur = 2;&lt;br /&gt;
         if (jeu[0][0] == 2)&lt;br /&gt;
         {&lt;br /&gt;
           jeu[0][0] = 3;&lt;br /&gt;
         }&lt;br /&gt;
       }&lt;br /&gt;
     }&lt;br /&gt;
   }&lt;br /&gt;
   else {&lt;br /&gt;
     if (joueur == 2)&lt;br /&gt;
     { if (digitalRead(9) == 1)&lt;br /&gt;
       { jeu[l][h] = jeu[l][h] - 1;&lt;br /&gt;
         h = (h + 1) % 3;&lt;br /&gt;
         jeu[l][h]++;&lt;br /&gt;
         delay(50);&lt;br /&gt;
       }&lt;br /&gt;
       else if (digitalRead(8) == 1)&lt;br /&gt;
       {&lt;br /&gt;
         jeu[l][h] = jeu[l][h] - 1;&lt;br /&gt;
         l = (l + 1) % 3;&lt;br /&gt;
         jeu[l][h]++;&lt;br /&gt;
         delay(50);&lt;br /&gt;
       }&lt;br /&gt;
       else if (digitalRead(7) == 1)&lt;br /&gt;
       {&lt;br /&gt;
         if (jeu[l][h] == 1)&lt;br /&gt;
         { jeu[l][h] = 4;&lt;br /&gt;
           Serial.write((l * 3 + h) + 48);&lt;br /&gt;
 &lt;br /&gt;
           l = 0;&lt;br /&gt;
           h = 0;&lt;br /&gt;
           jeu[l][h] = jeu[l][h] + 1;&lt;br /&gt;
           joueur = 0;&lt;br /&gt;
         }&lt;br /&gt;
       }&lt;br /&gt;
     }&lt;br /&gt;
   }&lt;br /&gt;
 &lt;br /&gt;
   affichage(jeu);&lt;br /&gt;
   matrix_write();&lt;br /&gt;
   delay(100);&lt;br /&gt;
 }&lt;br /&gt;
Cette fonction utilise en premier lieu go() pour indiquer au joueur si il peut jouer.&lt;br /&gt;
Ensuite il vérifie la liaison série.&lt;br /&gt;
&lt;br /&gt;
On enlève 48 a ce que l'on a reçut, car on reçoit un char et on désire un int.&lt;br /&gt;
&lt;br /&gt;
Ainsi on ajoutera 48 a ce qu'on enverra dans le Serial.write.&lt;br /&gt;
&lt;br /&gt;
Si on reçoit 9, fin de partie.&lt;br /&gt;
Sinon on vérifie qui doit jouer et on le fais jouer si on peut ou on attend. &lt;br /&gt;
&lt;br /&gt;
Le Joueur 0 équivaut au joueur 1 pour l'html.&lt;br /&gt;
&lt;br /&gt;
Une fois les coups effectués, on affiche ce qui en résulte et ajoute un delay pour éviter d'appuyer deux fois d'affilée sans le vouloir.&lt;br /&gt;
&lt;br /&gt;
En reliant en série notre arduino en USB à notre raspberry, nous pouvons jouer aux morpions à deux , un sur l'arduino à l'aide de bouton poussoir , et l'autre sur une page html grâce à sa souris.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Test====&lt;br /&gt;
Une fois l'arduino branché en série avec la raspberry, la raspberry connecté en ethernet, et l’exécutable morpion lancé, on peut aller sur 172.26.79.12/morpionsc.html et observer les resultats ci-dessous:&lt;br /&gt;
[[Fichier:TestImage2.jpg]]&lt;br /&gt;
Le joueur sur la page html doit jouer en premier, ici il a sélectionné la case du milieu,ainsi une croix s'affiche sur la case sur la page html, et un point rouge est affiché sur l'aire de jeu de la matrice.&lt;br /&gt;
&lt;br /&gt;
Maintenant c'est le tour du joueur sur arduino, c'est pourquoi la led tout en bas est de couleur verte, pour avertir le joueur.&lt;br /&gt;
&lt;br /&gt;
Si le joueur sur html essaie de jouer, il verra une alerte &amp;quot;pas ton tour&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
La led bleue sert de pointeur pour le joueur sur l'arduino, il va donc déplacer celui-ci afin de jouer, et une fois que la case désiré est pointé, il appuiera sur le bouton sélection pour jouer sur cette case&lt;br /&gt;
&lt;br /&gt;
[[Fichier:ImageTest1.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Sur la photo ci-dessus la led tout en bas est passé au rouge, ainsi le joueur arduino a joué.&lt;br /&gt;
&lt;br /&gt;
Il a joué à l'endroit ou se trouve la led verte.&lt;br /&gt;
&lt;br /&gt;
Ainsi sur la page html il y aura un rond au niveau de cette case.&lt;br /&gt;
&lt;br /&gt;
La led bleue est replacé à sa position par défaut.&lt;br /&gt;
&lt;br /&gt;
Tout fonctionne comme prévue.&lt;br /&gt;
&lt;br /&gt;
== Démonstration ==&lt;br /&gt;
Présentation de la partie électronique :&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
https://youtu.be/2FaJIIrb3Mw&lt;br /&gt;
&lt;br /&gt;
Présentation de la partie informatique :&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
https://youtu.be/8ZPqU17tZ9Q&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
&lt;br /&gt;
Cette expérience nous a appris à aborder un projet en ayant l'obligation de scinder les tâches. Ainsi, nous devions nous communiquer les informations essentielles afin que les produits finaux des différentes parties soient compatibles.&amp;lt;br&amp;gt;&lt;br /&gt;
Malheureusement, nous n'avons pas pu relier la partie informatique à celle électronique faute de programme de liaison série. Cependant, nous pouvons nous féliciter du fait qu'en simulant la liaison série, via une arduino ou en générant des signaux encodés de la même manière que ceux de la raspberry, tout était opérationnel.&amp;lt;br&amp;gt;&lt;br /&gt;
Finalement, ce projet nous a initié à la spécialité &amp;quot;Système Communicant&amp;quot; de par la création d'un circuit analogique/numérique et l’exploitation des capacités asynchrone d'un websocket.&lt;/div&gt;</summary>
		<author><name>Tstieven</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Projet_IMA3_P1,_2015/2016,_TD2&amp;diff=32421</id>
		<title>Projet IMA3 P1, 2015/2016, TD2</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Projet_IMA3_P1,_2015/2016,_TD2&amp;diff=32421"/>
				<updated>2016-06-17T21:49:43Z</updated>
		
		<summary type="html">&lt;p&gt;Tstieven : /* Arduino */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Projet IMA3-SC 2015/2016 : MORPION =&lt;br /&gt;
&lt;br /&gt;
== Cahier des charges ==&lt;br /&gt;
Notre projet &amp;quot;système communicant&amp;quot; aura pour but de créer une interface connectée du &amp;quot;morpion&amp;quot;. L'objectif est de permettre à un joueur interagissant sur un site internet de jouer contre une autre personne qui, elle, jouera à l'aide d'un affichage fait à partir de leds. &lt;br /&gt;
&lt;br /&gt;
Nous cherchons donc à exploiter la capacité asynchrone d'un websocket afin de permettre une partie en temps réel.&lt;br /&gt;
&lt;br /&gt;
=== Matériel ===&lt;br /&gt;
* Une nanoboard&lt;br /&gt;
* Une raspberry pi&lt;br /&gt;
* Une matrice de leds 9x9 ou plus&lt;br /&gt;
* Un clavier numérique ou 9 boutons-poussoirs&lt;br /&gt;
* Des ordinateurs avec les logiciels de développement nécessaires &lt;br /&gt;
&lt;br /&gt;
=== Optionnel ===&lt;br /&gt;
* Un buzzer afin d'avertir le joueur d'un choix incohérent&lt;br /&gt;
* Trois afficheurs sept segments afin d'ajouter un tableau des scores&lt;br /&gt;
&lt;br /&gt;
===Schéma de principe===&lt;br /&gt;
[[Fichier:Principe.png||center|600px|Schema de principe|Schéma de principe]] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Séance 1 ==&lt;br /&gt;
&lt;br /&gt;
=== Partie électronique ===&lt;br /&gt;
Le but de cette première séance était de se familiariser avec le logiciel de conception Altium Designer et de réfléchir à la façon d'aborder la conception électronique du morpion.&lt;br /&gt;
&lt;br /&gt;
Cette conception se fera en plusieurs étapes :&lt;br /&gt;
&lt;br /&gt;
* gérer le positionnement d'un curseur en fonction de l'état courant de la partie&lt;br /&gt;
* gérer l'affichage de la matrice en fonction des cases remplies / sélectionnées&lt;br /&gt;
* permettre la réception et l'envoie de données à l'aide de la liaison série&lt;br /&gt;
* traiter la remise à zéro du plateau en cas de fin de partie&lt;br /&gt;
&lt;br /&gt;
====Positionnement du curseur et état de la partie====&lt;br /&gt;
&lt;br /&gt;
Dans un premier lieu, il était nécessaire de traiter les actions entrantes. En effet, si ce n'est pas au tour du joueur &amp;quot;physique&amp;quot;, l'utilisation des boutons doit être bloquée.&amp;lt;br&amp;gt;&lt;br /&gt;
Ceci consiste simplement à effectuer un ET logique entre un bit symbolisant le joueur courant (si 1 alors joueur physique, si 0 alors joueur en ligne) et l'action demandée.&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fichier:Choisir.png|vignette|center|400px|alt=Schema de choix|Circuit logique de la permission d'action]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Une fois les choix accessibles, il faut désormais les traiter. Le traitement s'effectuera à l'aide de bascules, chaque case comportera deux bascules : une bascule de sélection (la case est-elle sélectionnée ?) et une bascule permettant de savoir si la case a déjà été jouée.&amp;lt;br&amp;gt;&lt;br /&gt;
Si la case a déjà été jouée, il ne faut empêcher l'utilisateur de la jouer.&amp;lt;br&amp;gt;&lt;br /&gt;
Nous considérerons que le joueur en ligne n'effectuera pas de choix erroné et nous testerons seulement les choix du joueur &amp;quot;physique&amp;quot;.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Traitement.png|vignette|center|600px|alt=Schema de traitement|Circuit logique du traitement d'une action]] &amp;lt;br&amp;gt;&lt;br /&gt;
Les ronds verts permettent la distinction des 9 cases. &amp;lt;br&amp;gt;&lt;br /&gt;
Le rond jaune correspond à la zone des sorties d'état. Plus précisément, il s'agit de deux bus regroupant les cases remplies et le lieu de la case sélectionnée.&amp;lt;br&amp;gt;&lt;br /&gt;
Le rond noir correspond au choix de l'adversaire.&amp;lt;br&amp;gt;&lt;br /&gt;
Le rond orange correspond à la sortie &amp;quot;selection_done&amp;quot; qui effectue un état haut lorsqu'un choix valide a été fait par l'utilisateur.&amp;lt;br&amp;gt;&lt;br /&gt;
Le rond rouge met en évidence la zone permettant de traiter les décalage du bit de sélection. Ce décalage consiste à garder seulement UNE bascule à l'état haut en effectuant le passage logique d'une bascule à une autre en fonction du choix tout en appliquant un reset sur l'ancienne sélection. Le schéma de ce déplacement se trouve ci-dessous et est appliqué aux 9 cases.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Andor.png|vignette|center|alt=Schema permettant le déplacement|Circuit logique utilisé afin de déplacer le curseur]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Complément à la séance 1===&lt;br /&gt;
====Affichage dynamique====&lt;br /&gt;
&lt;br /&gt;
L'un des grands problèmes à la réalisation du morpion sur nanoboard est l'affichage dynamique. En effet, il va falloir à la fois stocker les valeurs, et stocker quel joueur a joué telle ou telle case, afin de savoir quel case s'allumera de la couleur désirée. Ceci rajouté à l'affichage dynamique de la sélection, ceci s'avère compliqué.&amp;lt;br&amp;gt;&lt;br /&gt;
La tâche a alors été décomposée en deux étapes :&lt;br /&gt;
* Le traitement des couleurs (Quelle couleur affilier à quelle case ?)&lt;br /&gt;
* L'affichage de ces couleurs&lt;br /&gt;
=====Traitement des couleurs=====&lt;br /&gt;
&lt;br /&gt;
Le but était de se simplifier au maximum les choses. Le premier problème est de savoir quel joueur a joué une case, pour ceci, nous nous sommes servi de l'état du plateau fourni dans le bloc TRAITEMENT. Nous savons quelles cases sont à 1 et imposons donc une couleur rouge à toutes ces cases.&amp;lt;br&amp;gt;&lt;br /&gt;
De plus, nous savons qu'à chaque fois que le joueur &amp;quot;physique&amp;quot; effectue un choix valide, un front montant est appliqué sur la broche &amp;quot;selection_done&amp;quot; de TRAITEMENT. Nous avons alors re-créé 9 registres symbolisant les cases, mais cette fois ci, en fonction de l'endroit sélectionné par l'utilisateur, si ce dernier effectue un choix valide, le registre passera à 1. Le but de cette manipulation est de recenser tous les registres joués par le joueur physique. &amp;lt;br&amp;gt;&lt;br /&gt;
Maintenant, nous relions ces registres aux valeurs de couleur verte afin d'additionner le vert au rouge  des cases jouées et obtiendrons finalement des cases de couleur jaune pour symboliser les cases du joueur physique et des cases de couleur rouge pour le jouer en ligne. &amp;lt;br&amp;gt;&lt;br /&gt;
Il ne reste qu'à relier directement la case sélectionnée (recensée par le bus Etat_selection de TRAITEMENT) à la couleur bleue.&amp;lt;br&amp;gt;&lt;br /&gt;
Finalement nous avons : &lt;br /&gt;
* joueur en ligne : rouge&lt;br /&gt;
* joueur physique : jaune&lt;br /&gt;
* sélection : magenta, cyan ou bleu&lt;br /&gt;
&lt;br /&gt;
 [[Fichier:Traitement_affichage.png|vignette|center|800px|Schéma du traitement pré affichage|Circuit logique du traitement pré-affichage]] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Affichage=====&lt;br /&gt;
&lt;br /&gt;
La matrice led employée est une matrice led à anode commune. Elle a pour avantage de permettre la sélection d'une ligne et de la couleur de chaque colonne.&amp;lt;br&amp;gt;&lt;br /&gt;
Cependant, nous ne pouvons donc choisir la couleur que d'une colonne. C'est pourquoi nous allons faire varier cet affichage ligne par ligne à une fréquence élevée afin que l’œil humain ne le remarque pas. Nous pourrons donc choisir quelle couleur sera affichée sur chaque ligne. &amp;lt;br&amp;gt;&lt;br /&gt;
Cet affichage ligne par ligne sera effectué via un multiplexeur donc le bus de sélection sera relié à un compteur 3bits cadencé sur une clock suffisamment rapide pour opérer une persistance rétinienne. &amp;lt;br&amp;gt;&lt;br /&gt;
Dans chaque bus nous avons imposé certains bits afin que la grille soit dessinée en bleu.&amp;lt;br&amp;gt;&lt;br /&gt;
Le bus multiplexé sera ensuite redirigé vers les pins de la matrice leds.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Affichage.png|vignette|center|800px|Schéma d'affichage|Circuit logique de l'affichage]] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Tests====&lt;br /&gt;
&lt;br /&gt;
Le bloc d'affichage a été testé et deux problèmes ont été rencontrés : &lt;br /&gt;
* La sélection a été mal réfléchie&lt;br /&gt;
* Un phénomène de rebond a été remarqué sur l'oscilloscope numérique&lt;br /&gt;
&lt;br /&gt;
=====La sélection=====&lt;br /&gt;
&lt;br /&gt;
Dans la fonction d'affichage, on retourne la sélection de la ligne en logique inversée. Le problème est que dans la version 1.0 de l'affichage, un GND avait été placé en entrée du MUX de sélection. Nous n'avions pas pensé au fait que dans ce cas la, toutes les sorties seraient en permanence au GND... &amp;lt;br&amp;gt;La correction a donc été de placer un VCC en entrée et d'inverser les sorties, ainsi une seul anode de ligne sera placée sur le GND.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Selection.PNG|vignette|center||400px|Schéma de selection|Correction de la sortie de selection]] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le schéma semble fonctionnel cependant d'autres tests restent à faire.&lt;br /&gt;
&lt;br /&gt;
=====Le rebond=====&lt;br /&gt;
&lt;br /&gt;
Lors du test de l'affichage, la clock d'affichage a été simulée par un bouton de la nanoboard et l'affichage a été relié sur une seule ligne.&amp;lt;br&amp;gt;&lt;br /&gt;
Nous étions sensé remarquer que lorsque la ligne s'allume, si on appuie sur le bouton, elle s’éteint et enfin si nous appuyons sept fois sur le bouton, la ligne se rallume. &amp;lt;br&amp;gt;&lt;br /&gt;
Rien ne se passait comme prévu, et plus précisément, il n'y avait même pas de logique dans la ré-apparition de la ligne.&amp;lt;br&amp;gt;&lt;br /&gt;
Ayant déjà été confronté à des problèmes de rebonds avec des boutons poussoir, ce phénomène a été testé sur l'oscilloscope numérique.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Rebond.png||center|Exemple de rebond|Exemple de rebond]] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous demanderons alors aux référents quelle stratégie adopter : filtrer le signal avec un condensateur en parallèle au bouton ou bien utiliser une comparaison avec registre à décalage pour vérifier la stabilité du signal avant d'envoie du front montant.&amp;lt;br&amp;gt;&lt;br /&gt;
Certes la correction du bouton n'était pas nécessaire aux tests entrepris pour l'affichage (nous aurions pu mettre une clock interne) mais ceci nous servira pour filtrer les choix effectués par l'utilisateur (haut, droite, select). &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Objectifs pour la séance prochaine====&lt;br /&gt;
&lt;br /&gt;
Les schémas effectués restent des ébauches, il y a forcément eu des oublis. Néanmoins, comme chaque schéma se compile, le passage à l'étape de mise en place de la liaison série durant la séance 2 est envisageable. Il faudra donc créer un protocole plus concret afin de savoir qui doit jouer, quand envoyer, quand recevoir des données. Si le temps le permet, quelques programmes simples seront testés sur la nanoboard afin de vérifier le fonctionnement de l'affichage de la matrice après discutions avec les enseignants au sujet du phénomène de rebond.&lt;br /&gt;
&lt;br /&gt;
=== Partie informatique ===&lt;br /&gt;
Dans cette première séance nous avons programmé l'arduino afin de créer le programme de morpion, pour pouvoir tester la partie informatique sans disposer de la partie électronique.&lt;br /&gt;
Pour cela nous avons due apprendre à utiliser une matrice de LED RGB à l'aide des codes fournit par SparkFun.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Puis nous avons pu commencer à programmer le morpion:&lt;br /&gt;
&lt;br /&gt;
*le jeu se déroule dans une matrice 3x3.&lt;br /&gt;
*le position du curseur est représentée par une lumière bleue, celle des pions du joueurs 1 par une lumière rouge et celle des pions du joueurs 2 par une lumière verte.&lt;br /&gt;
*si le curseur est sur un pions les deux couleurs s'additionnent pour donner du magenta où du cyan.&lt;br /&gt;
*le joueur se déplace à l'aide de 2 boutons poussoir,l'un permettant d'aller vers le haut, l'autre permettant d'aller à droite&lt;br /&gt;
**pour éviter plusieurs déplacements d'un coup, un délais a été mis entre deux actions&lt;br /&gt;
*une fois tout en haut, si le joueur presse le bouton pour aller vers le haut le joueur se retrouve en bas.&lt;br /&gt;
*une fois tout à droite, si le joueur presse le bouton pour aller vers la droite le joueur se retrouve à gauche. &lt;br /&gt;
*enfin un dernier bouton poussoir permet de placer un pion à l'endroit où se trouve le curseur.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Une fois les mouvements programmés il fallait régir les règles du jeu:&lt;br /&gt;
&lt;br /&gt;
*Ainsi le curseur commence toujours en haut à droite&lt;br /&gt;
*Si le un joueurs arrive a créer une ligne de 3, il gagne la partie&lt;br /&gt;
*Si aucun joueur n'arrive à gagner et que le terrain est remplit, la partie se termine sur un match nul&lt;br /&gt;
*Une fois la partie terminée, le terrain est remis à zéros&lt;br /&gt;
&lt;br /&gt;
Les fonctions permettant les différentes actions ont été décrites dans la partie Arduino de la séance n°3.&lt;br /&gt;
&lt;br /&gt;
== Séance 2 ==&lt;br /&gt;
&lt;br /&gt;
=== Partie électronique ===&lt;br /&gt;
&lt;br /&gt;
La matrice led ne pourra être alimentée par les différentes broches de la nanoboard sous peine de créer une chute de tension et risquer un reset du fpga.&amp;lt;br&amp;gt;&lt;br /&gt;
Ainsi, le but de cet séance est de réfléchir à la conception d'un prototype de carte permettant d'alimenter la matrice led de manière externe. &amp;lt;br&amp;gt;&lt;br /&gt;
====Utilisation de transistors====&lt;br /&gt;
L'utilisation de transistors en saturé paraît la meilleur chose à faire. En effet, ceci permettra de générer un gain en courant et de contrôler l'état des différentes couleurs ligne par ligne et colonne par colonne.&amp;lt;br&amp;gt;&lt;br /&gt;
Pour permettra la liaison de chaque led au VCC, on utilisera un transistor PNP. Pour permettre la liaison au GND, on utilisera un NPN.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Montage_roussel.PNG||center|upright = 0.5|Montage d'une branche|Montage d'une branche de led]] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Comme il s'agit de transistor à anodes communes, il suffira de 8 transistors NPN. Notre choix s'est donc porté vers le ULN2803A, qui est un ensemble de 8 paires Darlington.&amp;lt;br&amp;gt;&lt;br /&gt;
L'utilisation de paires Darlington a l'avantage de permettre une génération élevée de courant. (Fort gain en courant)&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour ce qui est des cathodes, un problème de taille se pose. Il faudrait 24 transistors PNP pour gérer les 8 colonnes * 3couleurs. Ainsi, notre choix s'est plutôt déporté vers le buffer de portes trois états 74AS240. Cette famille de buffer 3 états a la capacité de délivrer un courant du même ordre de grandeur que l'ULN2803A.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Maintenant il reste à dimensionner la résistance sur chaque branche. Après quelques tests à l'aide d'un multimètre et de la matrice, on remarque que chaque led a besoin de 2mA pour fonctionner. Donc le but est de générer un courant d'environ 2mA. Ainsi, si on impose une tension de 5.5V aux bornes du montage, R = 5.5 / 0.002 = 2700 Ohms.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous avons désormais toutes les informations nécessaires pour le montage d'un prototype.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Le montage====&lt;br /&gt;
Au cours d'une séance supplémentaire, un plan a été élaboré et le prototype brasé. Voici donc le prototype achevé :&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Driver.JPG||center|400px|Driver matrice|Driver de la matrice]] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sur chaque sortie se trouve une résistance de 2700ohms. Le mieux aurait été de réaliser ce montage avec un réseau résistif cependant, le temps nous faisant défaut, nous avons utilisé les résistances déjà présentes en magasin.&amp;lt;br&amp;gt;&lt;br /&gt;
Sur chaque entrée se trouver une broche qui sera reliée à la nanoboard. &amp;lt;br&amp;gt;&lt;br /&gt;
Tous les buffers ont leur GND et VCC reliés au générateur 5.5V. Les paires Darlington sont reliées à la même masse.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Il ne restait plus qu'à relier la matrice led. Cette liaison parallèle a été réalisée en recyclant un vieux BUS d'ordinateur fixe. Finalement, voilà le montage final :&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Matrice_roussel.JPG||center|400px|Montage final de la partie électronique|Montage final de la partie électronique]] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Partie informatique ===&lt;br /&gt;
=====Arduino=====&lt;br /&gt;
Lors de cette séance nous avons pu finir le programme arduino, pour pouvoir jouer à deux sur une la carte.&lt;br /&gt;
Cette partie a été crée pour pouvoir tester les différentes fonctions, et sera modifier lors de prochaines séances.&lt;br /&gt;
La matrice LED affiche des clignotement irrégulier de couleur rouge, mais cela ne gêne pas pour jouer.&lt;br /&gt;
&lt;br /&gt;
=====Raspberry=====&lt;br /&gt;
Nous avons pu enfin commencer notre travail sur la raspberry.&lt;br /&gt;
Apres avoir branché la raspberry en série à notre pc, nous avons pu la configurer afin qu'elle fonctionne avec le réseau de l'ecole.&lt;br /&gt;
Pour cela nous avons mis une adresse IP du réseau INSECURE de l'école sur la Raspberry, celle de notre raspberry est :172.26.79.12.&lt;br /&gt;
C'est à partir de cette adresse que nous allons acceder aux pages html du projet.&lt;br /&gt;
Pour effectuer cette configuration nous avons remplacé les lignes correspondant à la configuration de la carte Ethernet dans le fichier /etc/network/interfaces par les lignes&lt;br /&gt;
  auto eth0&lt;br /&gt;
  iface eth0 inet static&lt;br /&gt;
    address 172.26.79.12&lt;br /&gt;
    netmask 255.255.240.0&lt;br /&gt;
    gateway 172.26.79.254&lt;br /&gt;
&lt;br /&gt;
Et afin d'indiquer le serveur DNS dans /etc/resolv.conf nous avons rajouté:&lt;br /&gt;
&lt;br /&gt;
  nameserver 193.48.57.34 &lt;br /&gt;
&lt;br /&gt;
Une fois la raspberry configurée, nous pouvons accéder à notre raspberry sans liaisons série grâce à un ssh.&lt;br /&gt;
Afin d'effectuer notre projet nous avons besoin de deux bibliothèques:&lt;br /&gt;
*jquery.js que l'ont a telecharger sur http://jquery.com/ afin de faciliter la programmation en javascript&lt;br /&gt;
*une bibliothèque C de WebSocket trouvé sur http://libwebsockets.org afin de pouvoir effectuer notre programme en C utilisant le Websocket&lt;br /&gt;
&lt;br /&gt;
Notre raspberry est maintenant prête pour notre projet, nous avons pu commencer notre fichier morpion.html qui permet de joueur au morpion à deux sur le même ordinateur, ce qui permet de tester les differentes fonctions utilisés pour la suite du projet.&lt;br /&gt;
&lt;br /&gt;
== Séance 3 ==&lt;br /&gt;
&lt;br /&gt;
=== Partie électronique ===&lt;br /&gt;
&lt;br /&gt;
Le montage réalisé a été testé. Quelques soudures ont été refaites et un composant ne fonctionnait pas. Heureusement, nous avions placé des socles afin de pouvoir enlever/placer les buffers facilement. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Cette mise en évidence de composant défaillant a pris beaucoup de temps, c'est pourquoi tout ce qui suit a été réalisé sur plusieurs séances supplémentaires. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La première chose effectuée fut le branchement de la carte à la nanoboard. Pour cela, nous avons utilisé un plan créé au préalable et un schematic de vérification.&amp;lt;br&amp;gt;&lt;br /&gt;
Ce schematic consistait à afficher colonne par colonne et couleur par couleur chaque led, ainsi, si un branchement était mauvais, nous pouvions le voir directement. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le montage finalisé, nous pouvions commencer les tests des fonctions créées en première séance. Sur le principe, ces schematics marchaient plutôt bien mais comme nous souhaitions générer des simulations de données venant de la liaison série, nous n'avions pas assez de boutons pour utiliser ces premières schematics. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ainsi, le travail de traitement a dû être refait. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====La seletion====&lt;br /&gt;
L'objectif est de créer un circuit numérique de sélection à l'aide de seulement deux boutons.&amp;lt;br&amp;gt;&lt;br /&gt;
Le choix s'est alors porté sur un compteur allant jusque 8. Ainsi, il y avait 9 possibilités de valeur et chaque valeur correspondra a une case.&amp;lt;br&amp;gt;&lt;br /&gt;
Le compteur devra s'incrémenter sur l'appuie d'un bouton de balayage. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Traite.JPG|vignette|center|600px|Selection|Selection]] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La sélection du joueur physique doit être contrôlée afin que seul un choix valide soit accepté. Ainsi, un schematic de vérification a été créé.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour savoir quelles cases ont déjà été jouées, nous avons décidé d'effectuer un OU logique entre les cases jouées par le joueur physique et les cases jouées par le joueur en ligne. Une fois le bus d'état global créé, il suffit d'effectuer un ET logique avec le choix de notre joueur physique. Si le choix se porte sur une case qui n'a jamais été jouée, le résultat de l'opération logique sera un bus nul. Nous comparons donc ce bus avec un bus nul. &amp;lt;br&amp;gt;&lt;br /&gt;
Finalement, le choix est valide si le comparateur sort une égalité ET le bouton de sélection a été appuyé.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Valider_choix.JPG|vignette|center|600px|Valider|Valider]] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====L'affichage====&lt;br /&gt;
Les schematics d'affichage sont restés les mêmes qu'à la séance 1, mis à part quelques corrections tel l'inversion des sorties d'affichage car nous travaillons en logique inversée sur les portes 3 états.&amp;lt;br&amp;gt;&lt;br /&gt;
Le pré-affichage s'occupe toujours du stockage des cases cochées par le joueur physique si il est le joueur courant.&amp;lt;br&amp;gt;&lt;br /&gt;
Afin d'assurer une persistance rétinienne, on devra relier l'affichage à une horloge d'au moins 3KHz.&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
[[Fichier:Traitement_preaffichage.JPG|vignette|center|500px|Pre-affichage|Pre-affichage]] [[Fichier:Affich.JPG|vignette|center|500px|Affichage|Affichage]] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Simulation de la liaison série====&lt;br /&gt;
Le but est de gérer des données semblables à ce que la raspberry pourrait nous envoyer. A savoir 1 bit de fin de partie, 1 bit de réception de donnée et 4 bits de choix de case.&amp;lt;br&amp;gt;&lt;br /&gt;
=====Conversion de l'adresse choisie=====&lt;br /&gt;
Il faut faire correspondre les 4 bits reçus à un bus de 9bits, chaque bit correspondant à une case. Ceci revient à faire un traitement similaire à la sélection du joueur physique...&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Traite_adversaire.JPG|vignette|center|400px|Conversion de l'adresse|Conversion de l'adresse]] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Stockage=====&lt;br /&gt;
Maintenant que nous savons convertir une adresse, on doit pouvoir mettre à jour les cases jouées par le joueur en ligne sur chaque réception de donnée.&amp;lt;br&amp;gt;&lt;br /&gt;
Pour effectuer ceci, on utilise 9 bascules pour stocker les choix dans différentes cases. Aucun traitement de choix valide n'est à faire car la raspberry s'en occupe déjà de son côté.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Stock_adv.JPG|vignette|center|600px|Stockage des cases de l'adversaire|Stockage des cases de l'adversaire]] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Propre à la simulation=====&lt;br /&gt;
Pour générer l'adresse, on utilise le même principe de sélection que celui du joueur physique.&amp;lt;br&amp;gt;&lt;br /&gt;
Pour avoir un aspect visuel de cette sélection, on utilise un MUX qui, en fonction du joueur courant, afficher la sélection de tel ou tel joueur.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Traite_sel.JPG|vignette|center|600px|MUX de selection|MUX de la sélection]] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour ce qui est du bit de fin de parti, on le symbolise par un bouton.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Phénomène de rebond=====&lt;br /&gt;
Pour gérer le rebond des boutons poussoirs, la solution a été numérique. Un registre à décalage a été créé, cadencé sur une clock, il décale sur chaque front d'horloge la valeur courante d'un bouton. En utilisant un comparateur, on obtient alors un front montant seulement lorsque le bouton est dans un état stable (c'est à dire lorsque tous les bits ont la même valeurs)&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Dump.JPG|vignette|center|600px|Anti-rebond|Anti-rebond]] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====TOPLEVEL====&lt;br /&gt;
Le schéma TOPLEVEL est alors le suivant :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Toplevel.JPG|vignette|center|800px|TOPLEVEL|TOPLEVEL]] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ainsi, si nous avions eu le bloc de liaison série bidirectionnel, nous aurions simplement eu à :&lt;br /&gt;
* Remplacer la génération d'adresse par les 4bits de poids faible du message de 8bits reçu.&lt;br /&gt;
* Remplacer le bouton de reset par le bit de fin de partie.&lt;br /&gt;
* Remplacer le bit de choix de l'adversaire par celui de réception validée.&lt;br /&gt;
* Relier le bit d'émission à la sortie de &amp;quot;choix valide&amp;quot;.&lt;br /&gt;
* Relier la sélection du joueur physique aux données à transmettre.&lt;br /&gt;
* Enlever le multiplexage de la sélection.&lt;br /&gt;
&lt;br /&gt;
====Réflexion====&lt;br /&gt;
La partie électronique de ce projet a donc été menée à bout. Cependant, après coup, on se rend compte que la création d'un prototype aurait été meilleure en imprimant un PCB plutôt qu'en utilisant une piste à bandes.&amp;lt;br&amp;gt;&lt;br /&gt;
Nous aurions également pu éviter une configuration en parallèle du driver. Ainsi, à l'aide de registres à décalages alimentés en externe, la lisibilité du circuit aurait été meilleure.&amp;lt;br&amp;gt;&lt;br /&gt;
On peut néanmoins se satisfaire de la réalisation numérique du circuit car elle exploite toutes les possibilités qu'offrent la conception via schematics à l'aide d'Altium designer à savoir :&amp;lt;br&amp;gt;&lt;br /&gt;
* La création d'une bibliothèque&lt;br /&gt;
* La création de composants&lt;br /&gt;
* L'utilisation de composants configurables avec édition de pins&amp;lt;br&amp;gt;&lt;br /&gt;
D'ailleurs, on comprend d'autant plus l'intérêt du langage VHDL après la création d'autant de schematics pour un projet de cette envergure.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Partie informatique ===&lt;br /&gt;
Nous avons commencé cette séance en continuant le morpion.html&lt;br /&gt;
Dans un premier temps nous avons crée &amp;quot;l'espace de jeu&amp;quot; en utilisant du code trouvé sur internet :&lt;br /&gt;
 &amp;lt;!DOCTYPE html&amp;gt;&lt;br /&gt;
  &amp;lt;head&amp;gt;&lt;br /&gt;
   &amp;lt;meta charset=&amp;quot;utf-8&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;style type=&amp;quot;text/css&amp;quot;&amp;gt;&lt;br /&gt;
 .table{&lt;br /&gt;
 width : 330px;&lt;br /&gt;
 height : 330px;&lt;br /&gt;
 border : solid 3px black;&lt;br /&gt;
  border-collapse: collapse;&lt;br /&gt;
 }&lt;br /&gt;
 .td{&lt;br /&gt;
 border : solid 3px black;&lt;br /&gt;
 width : 33%;&lt;br /&gt;
 height : 33%;&lt;br /&gt;
 }&lt;br /&gt;
 &amp;lt;/style&amp;gt;&lt;br /&gt;
 &amp;lt;title&amp;gt; Jeu morpion&amp;lt;/title&amp;gt;&lt;br /&gt;
 &amp;lt;/head&amp;gt;&lt;br /&gt;
et&lt;br /&gt;
 &amp;lt;body&amp;gt;&lt;br /&gt;
   h1&amp;gt;Morpion&amp;lt;/h1&amp;gt;&lt;br /&gt;
 table class=&amp;quot;table&amp;quot; align=&amp;quot;center&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
       &amp;lt;td class=&amp;quot;td&amp;quot; onclick=&amp;quot;placerSigne(0)&amp;quot; id=&amp;quot;0&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
       &amp;lt;td class=&amp;quot;td&amp;quot; onclick=&amp;quot;placerSigne(1)&amp;quot; id=&amp;quot;1&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
       &amp;lt;td class=&amp;quot;td&amp;quot; onclick=&amp;quot;placerSigne(2)&amp;quot; id=&amp;quot;2&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
       &amp;lt;td class=&amp;quot;td&amp;quot; onclick=&amp;quot;placerSigne(3)&amp;quot; id=&amp;quot;3&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
       &amp;lt;td class=&amp;quot;td&amp;quot; onclick=&amp;quot;placerSigne(4)&amp;quot; id=&amp;quot;4&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
       &amp;lt;td class=&amp;quot;td&amp;quot; onclick=&amp;quot;placerSigne(5)&amp;quot; id=&amp;quot;5&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
       &amp;lt;td class=&amp;quot;td&amp;quot; onclick=&amp;quot;placerSigne(6)&amp;quot; id=&amp;quot;6&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
       &amp;lt;td class=&amp;quot;td&amp;quot; onclick=&amp;quot;placerSigne(7)&amp;quot; id=&amp;quot;7&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
       &amp;lt;td class=&amp;quot;td&amp;quot; onclick=&amp;quot;placerSigne(8)&amp;quot; id=&amp;quot;8&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
 &amp;lt;/table&amp;gt;&lt;br /&gt;
 table style=&amp;quot;border : solid 3px #3399FF;&amp;quot; align=&amp;quot;center&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;tr&amp;gt;&lt;br /&gt;
 &amp;lt;td style=&amp;quot;border : solid 1px #3399FF;&amp;quot;&amp;gt;Joueur 1&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;td style=&amp;quot;border : solid 1px #3399FF;&amp;quot;&amp;gt;Joueur 2&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
 &amp;lt;tr&amp;gt;&lt;br /&gt;
 &amp;lt;td style=&amp;quot;border : solid 1px #3399FF;&amp;quot; id=&amp;quot;scre1&amp;quot;&amp;gt;0&lt;br /&gt;
 &amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;td style=&amp;quot;border : solid 1px #3399FF;&amp;quot; id=&amp;quot;scre2&amp;quot;&amp;gt;0&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
 &amp;lt;/table&amp;gt;&lt;br /&gt;
  &amp;lt;/body&amp;gt;&lt;br /&gt;
 &amp;lt;/html&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le code ci dessus n'est pas totalement bon, puisque nous avons du enlever des &amp;quot;&amp;lt;&amp;quot; afin d'afficher le code et non ce qu'il en résulte.&lt;br /&gt;
&lt;br /&gt;
L'espacement entre deux lignes peut changer en fonction de la taille de ce qui est mis dedans.&lt;br /&gt;
Si on remplis de case blanche (&amp;quot;vide.png&amp;quot;) de taille 100*100 on obtient:&lt;br /&gt;
[[Fichier:morpion1.png]]&lt;br /&gt;
&lt;br /&gt;
A chaque clique sur une case la fonction placerSigne(n) va s'effectuer avec n le numéros de la case sélectionnée.&lt;br /&gt;
 function placerSigne(idCase)&lt;br /&gt;
 { &lt;br /&gt;
         if(morpion[idCase] == 0)&lt;br /&gt;
         {coup++;&lt;br /&gt;
         morpion[idCase]=joueur;&lt;br /&gt;
         if (joueur==1)&lt;br /&gt;
                 {&lt;br /&gt;
  	  	 joueur=2;&lt;br /&gt;
                 document.getElementById(idCase).innerHTML = '&amp;lt;img src=&amp;quot;croix.gif&amp;quot; alt=&amp;quot;image !&amp;quot; /&amp;gt;';&lt;br /&gt;
 &lt;br /&gt;
                 }&lt;br /&gt;
 	else    {&lt;br /&gt;
 	   	 joueur=1;&lt;br /&gt;
                 document.getElementById(idCase).innerHTML = '&amp;lt;img src=&amp;quot;rond.gif&amp;quot; alt=&amp;quot;image !&amp;quot; /&amp;gt;';&lt;br /&gt;
 &lt;br /&gt;
                 }&lt;br /&gt;
 	if (coup&amp;gt;4)&lt;br /&gt;
 		{if (gagner(idCase))&lt;br /&gt;
 			{if (joueur==1)&lt;br /&gt;
 				{score2++;&lt;br /&gt;
 				alert(&amp;quot;joueur 2 gagne &amp;quot;);&lt;br /&gt;
 				finpartie();&lt;br /&gt;
 				}&lt;br /&gt;
 			else{score1++;&lt;br /&gt;
 				alert(&amp;quot;joueur 1 gagne &amp;quot;);&lt;br /&gt;
 				finpartie();&lt;br /&gt;
 				}&lt;br /&gt;
 			&lt;br /&gt;
 			}&lt;br /&gt;
 		else {if (egalite()==0)&lt;br /&gt;
 			{alert(&amp;quot;egalite&amp;quot;);&lt;br /&gt;
 			finpartie();}&lt;br /&gt;
 		     }&lt;br /&gt;
 		}&lt;br /&gt;
         }&lt;br /&gt;
         else{alert(&amp;quot;pas le droit&amp;quot;);}&lt;br /&gt;
 }&lt;br /&gt;
Cette fonction place une image 100x100 de rond ou de croix dans la case sélectionnée en fonction du joueur qui doit jouer.&lt;br /&gt;
*Elle calcule les scores de chaque joueurs, et appelle gagner et egalite pour savoir si on est dans une fin de partie.&lt;br /&gt;
*Et elle alerte le joueur si la case sélectionnée ne peut pas être jouée.&lt;br /&gt;
&lt;br /&gt;
Pour cela elle utilise le tableau morpion de taille 9 remplit de 0 à l'origine, et modifie la case sélectionnée en y mettant 1 ou 2 en fonction du joueur qui a joué.&lt;br /&gt;
&lt;br /&gt;
La variable coup permet de déterminer le nombre de coup jouer, ce qui permet de ne pas verifier si une partie une gagnée tant que coup n'est pas supérieur à 4, puisqu'il faut au minimum 5 coup pour gagner.&lt;br /&gt;
&lt;br /&gt;
 function finpartie()&lt;br /&gt;
 {for (var j=0;j&amp;lt;9;j++)&lt;br /&gt;
 	{ document.getElementById(j).innerHTML = '&amp;lt;img src=&amp;quot;vide.png&amp;quot; alt=&amp;quot;image !&amp;quot; /&amp;gt;';&lt;br /&gt;
 	morpion[j]=0;&lt;br /&gt;
 	}&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
La fonction finpartie() met les variables morpion et coup à zéro, et place des images blanches dans toutes les cases.&lt;br /&gt;
&lt;br /&gt;
Elle est appelé que si il y une victoire ou une égalité.&lt;br /&gt;
&lt;br /&gt;
Dans morpionsc.html qui est le fichier html final, joueur est remis à 1 dans cette fonction.&lt;br /&gt;
&lt;br /&gt;
Dans le fichier morpion.html cela n’étais pas cessionnaire et permettait en plus au joueur perdant de commencer.&lt;br /&gt;
&lt;br /&gt;
Mais pour simplifier la suite nous avons préféré définir que toujours le même joueur commencerais. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 function gagner(idCase)&lt;br /&gt;
 {switch(idCase)&lt;br /&gt;
         {&lt;br /&gt;
 case 0:&lt;br /&gt;
         return (diagonal1()||ligne1()||colonne1());&lt;br /&gt;
         break;&lt;br /&gt;
 case 1:&lt;br /&gt;
         return (ligne1()||colonne2());&lt;br /&gt;
         break;&lt;br /&gt;
 case 2:&lt;br /&gt;
         return (diagonal2()||ligne1()||colonne3());&lt;br /&gt;
         break;&lt;br /&gt;
 case 3:&lt;br /&gt;
         return (ligne2()||colonne1());&lt;br /&gt;
         break; &lt;br /&gt;
 &lt;br /&gt;
 case 4:&lt;br /&gt;
         return (diagonal1()||diagonal2()||ligne2()||colonne2());&lt;br /&gt;
         break;&lt;br /&gt;
 case 5:&lt;br /&gt;
         return (ligne2()||colonne3());&lt;br /&gt;
         break;&lt;br /&gt;
 case 6:&lt;br /&gt;
         return (diagonal2()||ligne3()||colonne1());&lt;br /&gt;
         break;&lt;br /&gt;
 case 7:&lt;br /&gt;
         return (ligne3()||colonne2());&lt;br /&gt;
         break;&lt;br /&gt;
 case 8:&lt;br /&gt;
         return (diagonal1()||ligne3()||colonne3());&lt;br /&gt;
         break;&lt;br /&gt;
         }&lt;br /&gt;
 }&lt;br /&gt;
La fonction gagner appelle des fonctions diagonal,ligne,colonne qui retourne 1 si il y'a 3 même symboles sur leur domaines.&lt;br /&gt;
&lt;br /&gt;
Gagner teste donc si il y a une suite de 3 symboles sur la ligne, colonne et les diagonales passant par la case qui a été joué.&lt;br /&gt;
&lt;br /&gt;
 function egalite()&lt;br /&gt;
 {var cp=0;&lt;br /&gt;
 for (var i=0;i &amp;lt; 9;i++)&lt;br /&gt;
         {if (morpion[i]==0)&lt;br /&gt;
 		{cp++;}&lt;br /&gt;
         }&lt;br /&gt;
 return cp;&lt;br /&gt;
 }&lt;br /&gt;
La fonction egalité teste si toutes les cases ont été joué.&lt;br /&gt;
&lt;br /&gt;
On aurait pu utiliser la variable coup, si coup était égal à 9 alors égalité, mais la fonction egalité permet de vérifier si il n'y a pas eu de problème lors de la modification de la matrice.&lt;br /&gt;
&lt;br /&gt;
Avec morpion.html nous avons pu apprendre le javascript, et poser les bases de notre fichier html final.&lt;br /&gt;
&lt;br /&gt;
===Séances supplémentaires===&lt;br /&gt;
&lt;br /&gt;
====HTML====&lt;br /&gt;
Pour le HTML/Javascript on garde les mêmes fonctions gagner et egalite.&lt;br /&gt;
On va ajouter lors de l'initialisation&lt;br /&gt;
 window.WebSocket=(window.WebSocket||window.MozWebSocket);&lt;br /&gt;
 &lt;br /&gt;
 var websocket=new WebSocket('ws://172.26.79.12:9000','myprotocol');&lt;br /&gt;
 &lt;br /&gt;
 websocket.onopen=function(){ $('h1').css('color','green'); };&lt;br /&gt;
 &lt;br /&gt;
 websocket.onerror=function(){ $('h1').css('color','red'); };&lt;br /&gt;
On modifie placerSigne:&lt;br /&gt;
*si ce n'est pas au tour du joueur 1 de jouer on lui envoie une alerte.&lt;br /&gt;
*si il y a une fin de partie on envoie 9 grâce a sendMessage.&lt;br /&gt;
*si il n'y a pas de fin de partie on envoie la case jouer toujours grâce à sendMessage:&lt;br /&gt;
 function sendMessage(data){&lt;br /&gt;
 websocket.send(data);&lt;br /&gt;
 }&lt;br /&gt;
Pour finpartie on rajoute juste &lt;br /&gt;
 joueur=1;&lt;br /&gt;
&lt;br /&gt;
Pour faire jouer le second joueur il faut recevoir un message du websocket ainsi :&lt;br /&gt;
 websocket.onmessage=function(message)&lt;br /&gt;
sera la fonction dans laquelle on fera jouer le joueur 2. &lt;br /&gt;
&lt;br /&gt;
Le websocket envoie simplement la case en char* ainsi:&lt;br /&gt;
 websocket.onmessage=function(message){&lt;br /&gt;
 idCase=parseInt((message.data)-30);&lt;br /&gt;
 console.log(idCase);&lt;br /&gt;
 &lt;br /&gt;
 if(morpion[idCase] == 0)&lt;br /&gt;
                 {coup++;&lt;br /&gt;
                  morpion[idCase]=2;&lt;br /&gt;
                  joueur=1;&lt;br /&gt;
  		document.getElementById(idCase).innerHTML = '&amp;lt;img src=&amp;quot;rond.gif&amp;quot; alt=&amp;quot;image !&amp;quot; /&amp;gt;';&lt;br /&gt;
  		 if (coup&amp;gt;4)&lt;br /&gt;
 			 {if (gagner(idCase))&lt;br /&gt;
                                {score2++; &lt;br /&gt;
                                         alert(&amp;quot;joueur 2 gagne &amp;quot;);&lt;br /&gt;
                                         finpartie();&lt;br /&gt;
 					sendMessage(9);&lt;br /&gt;
                                }&lt;br /&gt;
  &lt;br /&gt;
 &lt;br /&gt;
                           else {if (egalite()==0)&lt;br /&gt;
                                         {alert(&amp;quot;egalite&amp;quot;);&lt;br /&gt;
                                         finpartie();&lt;br /&gt;
 					sendMessage(9);&lt;br /&gt;
 &lt;br /&gt;
                                         }&lt;br /&gt;
 				}&lt;br /&gt;
 			&lt;br /&gt;
 			}&lt;br /&gt;
 		}&lt;br /&gt;
 &lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Console.log permet d'afficher dans le debug, la valeur traitée.&lt;br /&gt;
On envoie toujours 9 si la partie se termine, sinon on effectue la même chose que dans placerSigne de morpion.html&lt;br /&gt;
&lt;br /&gt;
====Fichier C====&lt;br /&gt;
Il faut maintenant créer la passerelle entre l'arduino et le fichier html.&lt;br /&gt;
Pour cela notre fichier doit utiliser des fonctions de websocket mais aussi de serial.c&lt;br /&gt;
Les fonctions de serial.c sont directement intégrées dans notre fichier, il n'y a donc pas besoin de lui faire appel pour compiler.&lt;br /&gt;
 &lt;br /&gt;
 #include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;stdlib.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;string.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;unistd.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;fcntl.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;termios.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;strings.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;sys/types.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;sys/ioctl.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;sys/file.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;linux/serial.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;libwebsockets.h&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 #define MAX_FRAME_SIZE  1024&lt;br /&gt;
 #define WAIT_DELAY      50&lt;br /&gt;
 #define MAX_MESSAGE     2 &lt;br /&gt;
 &lt;br /&gt;
 #define SERIAL_READ 0&lt;br /&gt;
 #define SERIAL_WRITE 1&lt;br /&gt;
 #define SERIAL_BOTH 2&lt;br /&gt;
 &lt;br /&gt;
 #define SERIAL_DEVICE &amp;quot;/dev/ttyUSB0&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 int sd;&lt;br /&gt;
  &lt;br /&gt;
 &lt;br /&gt;
 //&lt;br /&gt;
 // Open serial port device&lt;br /&gt;
 //&lt;br /&gt;
 int serialOpen(char *device,int mode){&lt;br /&gt;
 int flags=(mode==SERIAL_READ?O_RDONLY:(mode==SERIAL_WRITE?O_WRONLY:O_RDWR));&lt;br /&gt;
 int fd=open(device,flags|O_NOCTTY|O_NONBLOCK); &lt;br /&gt;
 if(fd&amp;lt;0){ perror(device); exit(-1); }&lt;br /&gt;
 return fd;&lt;br /&gt;
 }&lt;br /&gt;
  &lt;br /&gt;
 //&lt;br /&gt;
 // Serial port configuration&lt;br /&gt;
 //&lt;br /&gt;
 void serialConfig(int fd,int speed){&lt;br /&gt;
 struct termios new;&lt;br /&gt;
 bzero(&amp;amp;new,sizeof(new));&lt;br /&gt;
 new.c_cflag=CLOCAL|CREAD|speed|CS8;&lt;br /&gt;
 new.c_iflag=0;&lt;br /&gt;
 new.c_oflag=0;&lt;br /&gt;
 new.c_lflag=0;     /* set input mode (non-canonical, no echo,...) */&lt;br /&gt;
 new.c_cc[VTIME]=0; /* inter-character timer unused */&lt;br /&gt;
 new.c_cc[VMIN]=1;  /* blocking read until 1 char received */&lt;br /&gt;
 if(tcsetattr(fd,TCSANOW,&amp;amp;new)&amp;lt;0){ perror(&amp;quot;serialInit.tcsetattr&amp;quot;); exit(-1); }&lt;br /&gt;
 }&lt;br /&gt;
  &lt;br /&gt;
 //&lt;br /&gt;
 // Serial port termination&lt;br /&gt;
 //&lt;br /&gt;
 void serialClose(int fd){&lt;br /&gt;
 close(fd);&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 static int callback_http(&lt;br /&gt;
   struct libwebsocket_context *this,&lt;br /&gt;
   struct libwebsocket *wsi,enum libwebsocket_callback_reasons reason,&lt;br /&gt;
   void *user,void *in,size_t len)&lt;br /&gt;
 {&lt;br /&gt;
 return 0;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
  static struct libwebsocket_protocols protocols[] = {&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;http-only&amp;quot;,   // name&lt;br /&gt;
      callback_http, // callback&lt;br /&gt;
      0,             // data size&lt;br /&gt;
      0              // maximum frame size&lt;br /&gt;
    },&lt;br /&gt;
    {&amp;quot;myprotocol&amp;quot;,callback_my,0,MAX_FRAME_SIZE},&lt;br /&gt;
    {NULL,NULL,0,0}&lt;br /&gt;
    };&lt;br /&gt;
  &lt;br /&gt;
 &lt;br /&gt;
Ci-dessus se trouve le code se trouvant dans serial.c afin de créer serialOpen, serialClose et serialConfig, ainsi que l'initialisation de variables utilisées.&lt;br /&gt;
&lt;br /&gt;
Mais aussi la fonction callback_http(),la structure libwebsocket_protocols, et l'initialisation de variables. &lt;br /&gt;
 &lt;br /&gt;
 int main(void) {&lt;br /&gt;
 int port=9000;&lt;br /&gt;
 struct lws_context_creation_info info;&lt;br /&gt;
 memset(&amp;amp;info,0,sizeof info);&lt;br /&gt;
 info.port=port;&lt;br /&gt;
 info.protocols=protocols;&lt;br /&gt;
 info.gid=-1;&lt;br /&gt;
 info.uid=-1;&lt;br /&gt;
 struct libwebsocket_context *context=libwebsocket_create_context(&amp;amp;info);&lt;br /&gt;
 if(context==NULL){&lt;br /&gt;
   fprintf(stderr, &amp;quot;libwebsocket init failed\n&amp;quot;);&lt;br /&gt;
   return -1;&lt;br /&gt;
   }&lt;br /&gt;
 printf(&amp;quot;starting server...\n&amp;quot;);&lt;br /&gt;
 &lt;br /&gt;
   &lt;br /&gt;
 sd=serialOpen(SERIAL_DEVICE,SERIAL_BOTH);&lt;br /&gt;
 serialConfig(sd,B9600);&lt;br /&gt;
 &lt;br /&gt;
  &lt;br /&gt;
 while(1){&lt;br /&gt;
   libwebsocket_service(context,WAIT_DELAY);&lt;br /&gt;
   }&lt;br /&gt;
     &lt;br /&gt;
 &lt;br /&gt;
 serialClose(sd); &lt;br /&gt;
 &lt;br /&gt;
  &lt;br /&gt;
 libwebsocket_context_destroy(context);&lt;br /&gt;
 return 0;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Le main permet d'initialiser une liaison série de 9600 Baud et de lancer une boucle infini dans laquelle la passerelle entre arduino et html va s'effectuer.&lt;br /&gt;
&lt;br /&gt;
 static int callback_my(&lt;br /&gt;
   struct libwebsocket_context * this,&lt;br /&gt;
   struct libwebsocket *wsi,enum libwebsocket_callback_reasons reason,&lt;br /&gt;
   void *user,void *in,size_t len)&lt;br /&gt;
 {&lt;br /&gt;
 static char message[2+LWS_SEND_BUFFER_PRE_PADDING+LWS_SEND_BUFFER_POST_PADDING];&lt;br /&gt;
 static char valeur;&lt;br /&gt;
 switch(reason){&lt;br /&gt;
   case LWS_CALLBACK_ESTABLISHED:&lt;br /&gt;
     printf(&amp;quot;connection established\n&amp;quot;);&lt;br /&gt;
                 // Declenchement d'un prochain envoi au navigateur&lt;br /&gt;
     break;&lt;br /&gt;
   case LWS_CALLBACK_RECEIVE:&lt;br /&gt;
                 // Ici sont traites les messages envoyes par le navigateur&lt;br /&gt;
 //printf(&amp;quot;received data: %s\n&amp;quot;,(char *)in);&lt;br /&gt;
     if(write(sd,in,sizeof(char))!=1){ perror(&amp;quot;main.write&amp;quot;); exit(-1); }&lt;br /&gt;
 printf(&amp;quot;writen data: %s\n&amp;quot;,(char *)in);&lt;br /&gt;
                 // Declenchement d'un prochain envoi au navigateur&lt;br /&gt;
     libwebsocket_callback_on_writable(this,wsi);&lt;br /&gt;
     break;&lt;br /&gt;
   case LWS_CALLBACK_SERVER_WRITEABLE:&lt;br /&gt;
                 // Ici sont envoyes les messages au navigateur&lt;br /&gt;
 &lt;br /&gt;
 if (read(sd,&amp;amp;valeur,sizeof(char))==1)&lt;br /&gt;
 { &lt;br /&gt;
 //printf(&amp;quot;write data: %c\n&amp;quot;,valeur);&lt;br /&gt;
       char *out=message+LWS_SEND_BUFFER_PRE_PADDING;&lt;br /&gt;
        sprintf(out,&amp;quot;%02x&amp;quot;,valeur);&lt;br /&gt;
 //printf(&amp;quot;write data: %s\n&amp;quot;,(char *)out);&lt;br /&gt;
 &lt;br /&gt;
     libwebsocket_write(wsi,(unsigned char *)out,MAX_MESSAGE,LWS_WRITE_TEXT);&lt;br /&gt;
 }&lt;br /&gt;
 else{libwebsocket_callback_on_writable(this,wsi);&lt;br /&gt;
 }&lt;br /&gt;
     break;&lt;br /&gt;
   default:&lt;br /&gt;
     break;&lt;br /&gt;
        	  }   &lt;br /&gt;
 return 0;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
La fonction ci-dessus est celle qui definie la passerelle.&lt;br /&gt;
&lt;br /&gt;
Si elle établit une liaison, elle imprime &amp;quot;connection established&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Une fois la connection établit on se retrouve dans le cas LWS_CALLBACK_RECEIVE si la page html envoie une valeur.&lt;br /&gt;
&lt;br /&gt;
Dans ce cas la valeur pointée par in est écrite dans sd(liaison serie), puis on utilise :&lt;br /&gt;
 libwebsocket_callback_on_writable(this,wsi);&lt;br /&gt;
&lt;br /&gt;
Qui permet de passer en mode réception de message par la liaison série, qui est definit ici par le cas:&lt;br /&gt;
 case LWS_CALLBACK_SERVER_WRITEABLE:&lt;br /&gt;
Dans ce cas on lit la valeur dans la liaison serie et on la met dans la variable valeur. Si il n'y a rien à lire pour le moment on utilise a nouveau:&lt;br /&gt;
 libwebsocket_callback_on_writable(this,wsi);&lt;br /&gt;
Afin de rester dans le même case.&lt;br /&gt;
&lt;br /&gt;
Si la valeur a été lu on crée out:&lt;br /&gt;
  char *out=message+LWS_SEND_BUFFER_PRE_PADDING;&lt;br /&gt;
avec message :&lt;br /&gt;
 static char message[2+LWS_SEND_BUFFER_PRE_PADDING+LWS_SEND_BUFFER_POST_PADDING];&lt;br /&gt;
out va etre du bon type et de la bonne taille pour pouvoir être envoyer a l'html.&lt;br /&gt;
On modife donc la valeur de out grâce à la valeur lue:&lt;br /&gt;
 sprintf(out,&amp;quot;%02x&amp;quot;,valeur);&lt;br /&gt;
Puis on l'envoie:&lt;br /&gt;
 libwebsocket_write(wsi,(unsigned char *)out,MAX_MESSAGE,LWS_WRITE_TEXT);&lt;br /&gt;
&lt;br /&gt;
====Arduino====&lt;br /&gt;
Pour l'affichage de la matrice LED nous avons utilisé un exemple trouvé sur le site de SparkFun Electronics:&lt;br /&gt;
 //Example_RGBMatrix.ino&lt;br /&gt;
 //By: Ryan Owens @ SparkFun Electronics&lt;br /&gt;
 //&lt;br /&gt;
 //modified 27 Oct 2014&lt;br /&gt;
 //by Bobby Chan @ SparkFun Electronics&lt;br /&gt;
&lt;br /&gt;
Nous avons ensuite crée:&lt;br /&gt;
&lt;br /&gt;
 void affichage(int je[3][3])&lt;br /&gt;
 {&lt;br /&gt;
   for (int i = 0; i &amp;lt; 3; i++)&lt;br /&gt;
   {&lt;br /&gt;
     for (int j = 0; j &amp;lt; 3; j++)&lt;br /&gt;
     { if (je[i][j] == 1)&lt;br /&gt;
       {&lt;br /&gt;
         color_buffer[0 + i + j * 8] = BLUE;&lt;br /&gt;
       }&lt;br /&gt;
       else if (je[i][j] == 2)&lt;br /&gt;
       {&lt;br /&gt;
         color_buffer[0 + i + j * 8] = RED;&lt;br /&gt;
       }&lt;br /&gt;
       else if (je[i][j] == 5)&lt;br /&gt;
       {&lt;br /&gt;
         color_buffer[0 + i + j * 8] = TEAL;&lt;br /&gt;
       }&lt;br /&gt;
       else if (je[i][j] == 4)&lt;br /&gt;
       {&lt;br /&gt;
         color_buffer[0 + i + j * 8] = GREEN;&lt;br /&gt;
       }&lt;br /&gt;
       else if (je[i][j] == 3) {&lt;br /&gt;
         color_buffer[0 + i + j * 8] = MAGENTA;&lt;br /&gt;
       }&lt;br /&gt;
       else if (je[i][j] == 0) {&lt;br /&gt;
         color_buffer[0 + i + j * 8] = BLACK;&lt;br /&gt;
       }&lt;br /&gt;
     }&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
Qui change la valeur des buffers sur une matrice 3x3, en fonction d'une matrice donnée en paramètre de taille 3x3.&lt;br /&gt;
&lt;br /&gt;
Il faut ensuite matrix_write(); pour observer les resultats&lt;br /&gt;
 &lt;br /&gt;
 void go(int joueur)&lt;br /&gt;
 {if (joueur==2)&lt;br /&gt;
 {color_buffer[7]=GREEN;}&lt;br /&gt;
 else{color_buffer[7]=RED;}}&lt;br /&gt;
Cette fonction met un buffer vert si le joueur 2 peut jouer sinon rouge, le buffer se trouve en dehors de la zone de jeu et donc ne gène pas l'utilisateur.&lt;br /&gt;
&lt;br /&gt;
Il faut ensuite matrix_write(); pour observer les resultats&lt;br /&gt;
&lt;br /&gt;
 void reset(int jeu[3][3])&lt;br /&gt;
 { joueur = 0;&lt;br /&gt;
 color_buffer[7]=RED;&lt;br /&gt;
   for (int i = 0; i &amp;lt; 3; i++)&lt;br /&gt;
   {&lt;br /&gt;
     for (int j = 0; j &amp;lt; 3; j++)&lt;br /&gt;
     { jeu[i][j] = 0;&lt;br /&gt;
     }&lt;br /&gt;
   }&lt;br /&gt;
   jeu[0][0] = 1;&lt;br /&gt;
 }&lt;br /&gt;
Cette fonction remet dispose la matrice LED comme lors d'un début de partie.&lt;br /&gt;
On aurait pu remettre a zéro certaines variables dans cette fonction.&lt;br /&gt;
&lt;br /&gt;
Une fois ces fonctions crées, il faut crée la fonction loop:&lt;br /&gt;
 void loop() {&lt;br /&gt;
   go(joueur);&lt;br /&gt;
   if (Serial.available() &amp;gt; 0)&lt;br /&gt;
   { int a = (Serial.read() - 48);&lt;br /&gt;
     if (a == 9) {&lt;br /&gt;
       reset(jeu);&lt;br /&gt;
     }&lt;br /&gt;
     else {&lt;br /&gt;
       if (joueur == 0)&lt;br /&gt;
       { int b = (a) / 3;&lt;br /&gt;
         int c = a - (b) * 3;&lt;br /&gt;
         jeu[b][c] = 2;&lt;br /&gt;
         joueur = 2;&lt;br /&gt;
         if (jeu[0][0] == 2)&lt;br /&gt;
         {&lt;br /&gt;
           jeu[0][0] = 3;&lt;br /&gt;
         }&lt;br /&gt;
       }&lt;br /&gt;
     }&lt;br /&gt;
   }&lt;br /&gt;
   else {&lt;br /&gt;
     if (joueur == 2)&lt;br /&gt;
     { if (digitalRead(9) == 1)&lt;br /&gt;
       { jeu[l][h] = jeu[l][h] - 1;&lt;br /&gt;
         h = (h + 1) % 3;&lt;br /&gt;
         jeu[l][h]++;&lt;br /&gt;
         delay(50);&lt;br /&gt;
       }&lt;br /&gt;
       else if (digitalRead(8) == 1)&lt;br /&gt;
       {&lt;br /&gt;
         jeu[l][h] = jeu[l][h] - 1;&lt;br /&gt;
         l = (l + 1) % 3;&lt;br /&gt;
         jeu[l][h]++;&lt;br /&gt;
         delay(50);&lt;br /&gt;
       }&lt;br /&gt;
       else if (digitalRead(7) == 1)&lt;br /&gt;
       {&lt;br /&gt;
         if (jeu[l][h] == 1)&lt;br /&gt;
         { jeu[l][h] = 4;&lt;br /&gt;
           Serial.write((l * 3 + h) + 48);&lt;br /&gt;
 &lt;br /&gt;
           l = 0;&lt;br /&gt;
           h = 0;&lt;br /&gt;
           jeu[l][h] = jeu[l][h] + 1;&lt;br /&gt;
           joueur = 0;&lt;br /&gt;
         }&lt;br /&gt;
       }&lt;br /&gt;
     }&lt;br /&gt;
   }&lt;br /&gt;
 &lt;br /&gt;
   affichage(jeu);&lt;br /&gt;
   matrix_write();&lt;br /&gt;
   delay(100);&lt;br /&gt;
 }&lt;br /&gt;
Cette fonction utilise en premier lieu go() pour indiquer au joueur si il peut jouer.&lt;br /&gt;
Ensuite il vérifie la liaison série.&lt;br /&gt;
&lt;br /&gt;
On enlève 48 a ce que l'on a reçut, car on reçoit un char et on désire un int.&lt;br /&gt;
&lt;br /&gt;
Ainsi on ajoutera 48 a ce qu'on enverra dans le Serial.write.&lt;br /&gt;
&lt;br /&gt;
Si on reçoit 9, fin de partie.&lt;br /&gt;
Sinon on vérifie qui doit jouer et on le fais jouer si on peut ou on attend. &lt;br /&gt;
&lt;br /&gt;
Le Joueur 0 équivaut au joueur 1 pour l'html.&lt;br /&gt;
&lt;br /&gt;
Une fois les coups effectués, on affiche ce qui en résulte et ajoute un delay pour éviter d'appuyer deux fois d'affilée sans le vouloir.&lt;br /&gt;
&lt;br /&gt;
En reliant en série notre arduino en USB à notre raspberry, nous pouvons jouer aux morpions à deux , un sur l'arduino à l'aide de bouton poussoir , et l'autre sur une page html grâce à sa souris.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Test====&lt;br /&gt;
Une fois l'arduino branché en série avec la raspberry, la raspberry connecté en ethernet, et l’exécutable morpion lancé, on peut aller sur 172.26.79.12/morpionsc.html et observer les resultats ci-dessous:&lt;br /&gt;
[[Fichier:TestImage2.jpg]]&lt;br /&gt;
Le joueur sur la page html doit jouer en premier, ici il a sélectionné la case du milieu,ainsi une croix s'affiche sur la case sur la page html, et un point rouge est affiché sur l'aire de jeu de la matrice.&lt;br /&gt;
&lt;br /&gt;
Maintenant c'est le tour du joueur sur arduino, c'est pourquoi la led tout en bas est de couleur verte, pour avertir le joueur.&lt;br /&gt;
&lt;br /&gt;
Si le joueur sur html essaie de jouer, il verra une alerte &amp;quot;pas ton tour&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
La led bleue sert de pointeur pour le joueur sur l'arduino, il va donc déplacer celui-ci afin de jouer, et une fois que la case désiré est pointé, il appuiera sur le bouton sélection pour jouer sur cette case&lt;br /&gt;
&lt;br /&gt;
[[Fichier:ImageTest1.jpg]]&lt;br /&gt;
Sur la photo ci-dessus la led tout en bas est passé au rouge, ainsi le joueur arduino a joué.&lt;br /&gt;
&lt;br /&gt;
Il a joué à l'endroit ou se trouve la led verte.&lt;br /&gt;
&lt;br /&gt;
Ainsi sur la page html il y aura un rond au niveau de cette case.&lt;br /&gt;
&lt;br /&gt;
La led bleue est replacé à sa position par défaut.&lt;br /&gt;
&lt;br /&gt;
Tout fonctionne comme prévue.&lt;br /&gt;
&lt;br /&gt;
== Démonstration ==&lt;br /&gt;
Présentation de la partie électronique :&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
https://youtu.be/2FaJIIrb3Mw&lt;br /&gt;
&lt;br /&gt;
Présentation de la partie informatique :&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
https://youtu.be/8ZPqU17tZ9Q&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
&lt;br /&gt;
Cette expérience nous a appris à aborder un projet en ayant l'obligation de scinder les tâches. Ainsi, nous devions nous communiquer les informations essentielles afin que les produits finaux des différentes parties soient compatibles.&amp;lt;br&amp;gt;&lt;br /&gt;
Malheureusement, nous n'avons pas pu relier la partie informatique à celle électronique faute de programme de liaison série. Cependant, nous pouvons nous féliciter du fait qu'en simulant la liaison série, via une arduino ou en générant des signaux encodés de la même manière que ceux de la raspberry, tout était opérationnel.&amp;lt;br&amp;gt;&lt;br /&gt;
Finalement, ce projet nous a initié à la spécialité &amp;quot;Système Communicant&amp;quot; de par la création d'un circuit analogique/numérique et l’exploitation des capacités asynchrone d'un websocket.&lt;/div&gt;</summary>
		<author><name>Tstieven</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Fichier:TestImage2.jpg&amp;diff=32420</id>
		<title>Fichier:TestImage2.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Fichier:TestImage2.jpg&amp;diff=32420"/>
				<updated>2016-06-17T21:32:25Z</updated>
		
		<summary type="html">&lt;p&gt;Tstieven : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Tstieven</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Fichier:ImageTest1.jpg&amp;diff=32419</id>
		<title>Fichier:ImageTest1.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Fichier:ImageTest1.jpg&amp;diff=32419"/>
				<updated>2016-06-17T21:31:50Z</updated>
		
		<summary type="html">&lt;p&gt;Tstieven : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Tstieven</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Projet_IMA3_P1,_2015/2016,_TD2&amp;diff=32316</id>
		<title>Projet IMA3 P1, 2015/2016, TD2</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Projet_IMA3_P1,_2015/2016,_TD2&amp;diff=32316"/>
				<updated>2016-06-16T23:14:11Z</updated>
		
		<summary type="html">&lt;p&gt;Tstieven : /* Complément à la séance 3 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Projet IMA3-SC 2015/2016 : MORPION =&lt;br /&gt;
&lt;br /&gt;
== Cahier des charges ==&lt;br /&gt;
Notre projet &amp;quot;système communicant&amp;quot; aura pour but de créer une interface connectée du &amp;quot;morpion&amp;quot;. L'objectif est de permettre à un joueur interagissant sur un site internet de jouer contre une autre personne qui, elle, jouera à l'aide d'un affichage fait à partir de leds. &lt;br /&gt;
&lt;br /&gt;
Nous cherchons donc à exploiter la capacité asynchrone d'un websocket afin de permettre une partie en temps réel.&lt;br /&gt;
&lt;br /&gt;
=== Matériel ===&lt;br /&gt;
* Une nanoboard&lt;br /&gt;
* Une raspberry pi&lt;br /&gt;
* Une matrice de leds 9x9 ou plus&lt;br /&gt;
* Un clavier numérique ou 9 boutons-poussoirs&lt;br /&gt;
* Des ordinateurs avec les logiciels de développement nécessaires &lt;br /&gt;
&lt;br /&gt;
=== Optionnel ===&lt;br /&gt;
* Un buzzer afin d'avertir le joueur d'un choix incohérent&lt;br /&gt;
* Trois afficheurs sept segments afin d'ajouter un tableau des scores&lt;br /&gt;
&lt;br /&gt;
== Séance 1 ==&lt;br /&gt;
&lt;br /&gt;
=== Partie électronique ===&lt;br /&gt;
Le but de cette première séance était de se familiariser avec le logiciel de conception Altium Designer et de réfléchir à la façon d'aborder la conception électronique du morpion.&lt;br /&gt;
&lt;br /&gt;
Cette conception se fera en plusieurs étapes :&lt;br /&gt;
&lt;br /&gt;
* gérer le positionnement d'un curseur en fonction de l'état courant de la partie&lt;br /&gt;
* gérer l'affichage de la matrice en fonction des cases remplies / sélectionnées&lt;br /&gt;
* permettre la réception et l'envoie de données à l'aide de la liaison série&lt;br /&gt;
* traiter la remise à zéro du plateau en cas de fin de partie&lt;br /&gt;
&lt;br /&gt;
====Positionnement du curseur et état de la partie====&lt;br /&gt;
&lt;br /&gt;
Dans un premier lieu, il était nécessaire de traiter les actions entrantes. En effet, si ce n'est pas au tour du joueur &amp;quot;physique&amp;quot;, l'utilisation des boutons doit être bloquée.&amp;lt;br&amp;gt;&lt;br /&gt;
Ceci consiste simplement à effectuer un ET logique entre un bit symbolisant le joueur courant (si 1 alors joueur physique, si 0 alors joueur en ligne) et l'action demandée.&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fichier:Choisir.png||center|alt=Schema de choix|Circuit logique de la permission d'action]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Une fois les choix accessibles, il faut désormais les traiter. Le traitement s'effectuera à l'aide de bascules, chaque case comportera deux bascules : une bascule de sélection (la case est-elle sélectionnée ?) et une bascule permettant de savoir si la case a déjà été jouée.&amp;lt;br&amp;gt;&lt;br /&gt;
Si la case a déjà été jouée, il ne faut empêcher l'utilisateur de la jouer.&amp;lt;br&amp;gt;&lt;br /&gt;
Nous considérerons que le joueur en ligne n'effectuera pas de choix erroné et nous testerons seulement les choix du joueur &amp;quot;physique&amp;quot;.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Traitement.png||center|alt=Schema de traitement|Circuit logique du traitement d'une action]] &amp;lt;br&amp;gt;&lt;br /&gt;
Les ronds verts permettent la distinction des 9 cases. &amp;lt;br&amp;gt;&lt;br /&gt;
Le rond jaune correspond à la zone des sorties d'état. Plus précisément, il s'agit de deux bus regroupant les cases remplies et le lieu de la case sélectionnée.&amp;lt;br&amp;gt;&lt;br /&gt;
Le rond noir correspond au choix de l'adversaire.&amp;lt;br&amp;gt;&lt;br /&gt;
Le rond orange correspond à la sortie &amp;quot;selection_done&amp;quot; qui effectue un état haut lorsqu'un choix valide a été fait par l'utilisateur.&amp;lt;br&amp;gt;&lt;br /&gt;
Le rond rouge met en évidence la zone permettant de traiter les décalage du bit de sélection. Ce décalage consiste à garder seulement UNE bascule à l'état haut en effectuant le passage logique d'une bascule à une autre en fonction du choix tout en appliquant un reset sur l'ancienne sélection. Le schéma de ce déplacement se trouve ci-dessous et est appliqué aux 9 cases.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Andor.png||center|alt=Schema permettant le déplacement|Circuit logique utilisé afin de déplacer le curseur]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Complément à la séance 1===&lt;br /&gt;
====Affichage dynamique====&lt;br /&gt;
&lt;br /&gt;
L'un des grands problèmes à la réalisation du morpion sur nanoboard est l'affichage dynamique. En effet, il va falloir à la fois stocker les valeurs, et stocker quel joueur a joué telle ou telle case, afin de savoir quel case s'allumera de la couleur désirée. Ceci rajouté à l'affichage dynamique de la sélection, ceci s'avère compliqué.&amp;lt;br&amp;gt;&lt;br /&gt;
La tâche a alors été décomposée en deux étapes :&lt;br /&gt;
* Le traitement des couleurs (Quelle couleur affilier à quelle case ?)&lt;br /&gt;
* L'affichage de ces couleurs&lt;br /&gt;
=====Traitement des couleurs=====&lt;br /&gt;
&lt;br /&gt;
Le but était de se simplifier au maximum les choses. Le premier problème est de savoir quel joueur a joué une case, pour ceci, nous nous sommes servi de l'état du plateau fourni dans le bloc TRAITEMENT. Nous savons quelles cases sont à 1 et imposons donc une couleur rouge à toutes ces cases.&amp;lt;br&amp;gt;&lt;br /&gt;
De plus, nous savons qu'à chaque fois que le joueur &amp;quot;physique&amp;quot; effectue un choix valide, un front montant est appliqué sur la broche &amp;quot;selection_done&amp;quot; de TRAITEMENT. Nous avons alors re-créé 9 registres symbolisant les cases, mais cette fois ci, en fonction de l'endroit sélectionné par l'utilisateur, si ce dernier effectue un choix valide, le registre passera à 1. Le but de cette manipulation est de recenser tous les registres joués par le joueur physique. &amp;lt;br&amp;gt;&lt;br /&gt;
Maintenant, nous relions ces registres aux valeurs de couleur verte afin d'additionner le vert au rouge  des cases jouées et obtiendrons finalement des cases de couleur jaune pour symboliser les cases du joueur physique et des cases de couleur rouge pour le jouer en ligne. &amp;lt;br&amp;gt;&lt;br /&gt;
Il ne reste qu'à relier directement la case sélectionnée (recensée par le bus Etat_selection de TRAITEMENT) à la couleur bleue.&amp;lt;br&amp;gt;&lt;br /&gt;
Finalement nous avons : &lt;br /&gt;
* joueur en ligne : rouge&lt;br /&gt;
* joueur physique : jaune&lt;br /&gt;
* sélection : magenta, cyan ou bleu&lt;br /&gt;
&lt;br /&gt;
 [[Fichier:Traitement_affichage.png||center|Schéma du traitement pré affichage|Circuit logique du traitement pré-affichage]] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Affichage=====&lt;br /&gt;
&lt;br /&gt;
La matrice led employée est une matrice led à anode commune. Elle a pour avantage de permettre la sélection d'une ligne et de la couleur de chaque colonne.&amp;lt;br&amp;gt;&lt;br /&gt;
Cependant, nous ne pouvons donc choisir la couleur que d'une colonne. C'est pourquoi nous allons faire varier cet affichage ligne par ligne à une fréquence élevée afin que l’œil humain ne le remarque pas. Nous pourrons donc choisir quelle couleur sera affichée sur chaque ligne. &amp;lt;br&amp;gt;&lt;br /&gt;
Cet affichage ligne par ligne sera effectué via un multiplexeur donc le bus de sélection sera relié à un compteur 3bits cadencé sur une clock suffisamment rapide pour opérer une persistance rétinienne. &amp;lt;br&amp;gt;&lt;br /&gt;
Dans chaque bus nous avons imposé certains bits afin que la grille soit dessinée en bleu.&amp;lt;br&amp;gt;&lt;br /&gt;
Le bus multiplexé sera ensuite redirigé vers les pins de la matrice leds.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Affichage.png||center|Schéma d'affichage|Circuit logique de l'affichage]] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Tests====&lt;br /&gt;
&lt;br /&gt;
Le bloc d'affichage a été testé et deux problèmes ont été rencontrés : &lt;br /&gt;
* La sélection a été mal réfléchie&lt;br /&gt;
* Un phénomène de rebond a été remarqué sur l'oscilloscope numérique&lt;br /&gt;
&lt;br /&gt;
=====La sélection=====&lt;br /&gt;
&lt;br /&gt;
Dans la fonction d'affichage, on retourne la sélection de la ligne en logique inversée. Le problème est que dans la version 1.0 de l'affichage, un GND avait été placé en entrée du MUX de sélection. Nous n'avions pas pensé au fait que dans ce cas la, toutes les sorties seraient en permanence au GND... &amp;lt;br&amp;gt;La correction a donc été de placer un VCC en entrée et d'inverser les sorties, ainsi une seul anode de ligne sera placée sur le GND.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Selection.PNG||center|Schéma de selection|Correction de la sortie de selection]] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le schéma semble fonctionnel cependant d'autres tests restent à faire.&lt;br /&gt;
&lt;br /&gt;
=====Le rebond=====&lt;br /&gt;
&lt;br /&gt;
Lors du test de l'affichage, la clock d'affichage a été simulée par un bouton de la nanoboard et l'affichage a été relié sur une seule ligne.&amp;lt;br&amp;gt;&lt;br /&gt;
Nous étions sensé remarquer que lorsque la ligne s'allume, si on appuie sur le bouton, elle s’éteint et enfin si nous appuyons sept fois sur le bouton, la ligne se rallume. &amp;lt;br&amp;gt;&lt;br /&gt;
Rien ne se passait comme prévu, et plus précisément, il n'y avait même pas de logique dans la ré-apparition de la ligne.&amp;lt;br&amp;gt;&lt;br /&gt;
Ayant déjà été confronté à des problèmes de rebonds avec des boutons poussoir, ce phénomène a été testé sur l'oscilloscope numérique.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Rebond.png||center|Exemple de rebond|Exemple de rebond]] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous demanderons alors aux référents quelle stratégie adopter : filtrer le signal avec un condensateur en parallèle au bouton ou bien utiliser une comparaison avec registre à décalage pour vérifier la stabilité du signal avant d'envoie du front montant.&amp;lt;br&amp;gt;&lt;br /&gt;
Certes la correction du bouton n'était pas nécessaire aux tests entrepris pour l'affichage (nous aurions pu mettre une clock interne) mais ceci nous servira pour filtrer les choix effectués par l'utilisateur (haut, droite, select). &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Objectifs pour la séance prochaine====&lt;br /&gt;
&lt;br /&gt;
Les schémas effectués restent des ébauches, il y a forcément eu des oublis. Néanmoins, comme chaque schéma se compile, le passage à l'étape de mise en place de la liaison série durant la séance 2 est envisageable. Il faudra donc créer un protocole plus concret afin de savoir qui doit jouer, quand envoyer, quand recevoir des données. Si le temps le permet, quelques programmes simples seront testés sur la nanoboard afin de vérifier le fonctionnement de l'affichage de la matrice après discutions avec les enseignants au sujet du phénomène de rebond.&lt;br /&gt;
&lt;br /&gt;
=== Partie informatique ===&lt;br /&gt;
Dans cette première séance nous avons programmé l'arduino afin de créer le programme de morpion, pour pouvoir tester la partie informatique sans disposer de la partie électronique.&lt;br /&gt;
Pour cela nous avons due apprendre à utiliser une matrice de LED RGB à l'aide des codes fournit par SparkFun.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Puis nous avons pu commencer à programmer le morpion:&lt;br /&gt;
&lt;br /&gt;
*le jeu se déroule dans une matrice 3x3.&lt;br /&gt;
*le position du curseur est représentée par une lumière bleue, celle des pions du joueurs 1 par une lumière rouge et celle des pions du joueurs 2 par une lumière verte.&lt;br /&gt;
*si le curseur est sur un pions les deux couleurs s'additionnent pour donner du magenta où du cyan.&lt;br /&gt;
*le joueur se déplace à l'aide de 2 boutons poussoir,l'un permettant d'aller vers le haut, l'autre permettant d'aller à droite&lt;br /&gt;
**pour éviter plusieurs déplacements d'un coup, un délais a été mis entre deux actions&lt;br /&gt;
*une fois tout en haut, si le joueur presse le bouton pour aller vers le haut le joueur se retrouve en bas.&lt;br /&gt;
*une fois tout à droite, si le joueur presse le bouton pour aller vers la droite le joueur se retrouve à gauche. &lt;br /&gt;
*enfin un dernier bouton poussoir permet de placer un pion à l'endroit où se trouve le curseur.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Une fois les mouvements programmés il fallait régir les règles du jeu:&lt;br /&gt;
&lt;br /&gt;
*Ainsi le curseur commence toujours en haut à droite&lt;br /&gt;
*Si le un joueurs arrive a créer une ligne de 3, il gagne la partie&lt;br /&gt;
*Si aucun joueur n'arrive à gagner et que le terrain est remplit, la partie se termine sur un match nul&lt;br /&gt;
*Une fois la partie terminée, le terrain est remis à zéros&lt;br /&gt;
&lt;br /&gt;
Les fonctions permettant les différentes actions ont été décrites dans la partie Arduino de la séance n°3.&lt;br /&gt;
&lt;br /&gt;
== Séance 2 ==&lt;br /&gt;
&lt;br /&gt;
=== Partie électronique ===&lt;br /&gt;
&lt;br /&gt;
La matrice led ne pourra être alimentée par les différentes broches de la nanoboard sous peine de créer une chute de tension et risquer un reset du fpga.&amp;lt;br&amp;gt;&lt;br /&gt;
Ainsi, le but de cet séance est de réfléchir à la conception d'un prototype de carte permettant d'alimenter la matrice led de manière externe. &amp;lt;br&amp;gt;&lt;br /&gt;
====Utilisation de transistors====&lt;br /&gt;
L'utilisation de transistors en saturé paraît la meilleur chose à faire. En effet, ceci permettra de générer un gain en courant et de contrôler l'état des différentes couleurs ligne par ligne et colonne par colonne.&amp;lt;br&amp;gt;&lt;br /&gt;
Pour permettra la liaison de chaque led au VCC, on utilisera un transistor PNP. Pour permettre la liaison au GND, on utilisera un NPN.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Montage_roussel.PNG||center|upright = 0.5|Montage d'une branche|Montage d'une branche de led]] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Comme il s'agit de transistor à anodes communes, il suffira de 8 transistors NPN. Notre choix s'est donc porté vers le ULN2803A, qui est un ensemble de 8 paires Darlington.&amp;lt;br&amp;gt;&lt;br /&gt;
L'utilisation de paires Darlington a l'avantage de permettre une génération élevée de courant. (Fort gain en courant)&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour ce qui est des cathodes, un problème de taille se pose. Il faudrait 24 transistors PNP pour gérer les 8 colonnes * 3couleurs. Ainsi, notre choix s'est plutôt déporté vers le buffer de portes trois états 74AS240. Cette famille de buffer 3 états a la capacité de délivrer un courant du même ordre de grandeur que l'ULN2803A.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Maintenant il reste à dimensionner la résistance sur chaque branche. Après quelques tests à l'aide d'un multimètre et de la matrice, on remarque que chaque led a besoin de 2mA pour fonctionner. Donc le but est de générer un courant d'environ 2mA. Ainsi, si on impose une tension de 5.5V aux bornes du montage, R = 5.5 / 0.002 = 2700 Ohms.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous avons désormais toutes les informations nécessaires pour le montage d'un prototype.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Le montage====&lt;br /&gt;
Au cours d'une séance supplémentaire, un plan a été élaboré et le prototype brasé. Voici donc le prototype achevé :&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Driver.JPG||center|400px|Driver matrice|Driver de la matrice]] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sur chaque sortie se trouve une résistance de 2700ohms. Le mieux aurait été de réaliser ce montage avec un réseau résistif cependant, le temps nous faisant défaut, nous avons utilisé les résistances déjà présentes en magasin.&amp;lt;br&amp;gt;&lt;br /&gt;
Sur chaque entrée se trouver une broche qui sera reliée à la nanoboard. &amp;lt;br&amp;gt;&lt;br /&gt;
Tous les buffers ont leur GND et VCC reliés au générateur 5.5V. Les paires Darlington sont reliées à la même masse.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Il ne restait plus qu'à relier la matrice led. Cette liaison parallèle a été réalisée en recyclant un vieux BUS d'ordinateur fixe. Finalement, voilà le montage final :&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Matrice_roussel.JPG||center|400px|Montage final de la partie électronique|Montage final de la partie électronique]] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Partie informatique ===&lt;br /&gt;
=====Arduino=====&lt;br /&gt;
Lors de cette séance nous avons pu finir le programme arduino, pour pouvoir jouer à deux sur une la carte.&lt;br /&gt;
Cette partie a été crée pour pouvoir tester les différentes fonctions, et sera modifier lors de prochaines séances.&lt;br /&gt;
La matrice LED affiche des clignotement irrégulier de couleur rouge, mais cela ne gêne pas pour jouer.&lt;br /&gt;
&lt;br /&gt;
=====Raspberry=====&lt;br /&gt;
Nous avons pu enfin commencer notre travail sur la raspberry.&lt;br /&gt;
Apres avoir branché la raspberry en série à notre pc, nous avons pu la configurer afin qu'elle fonctionne avec le réseau de l'ecole.&lt;br /&gt;
Pour cela nous avons mis une adresse IP du réseau INSECURE de l'école sur la Raspberry, celle de notre raspberry est :172.26.79.12.&lt;br /&gt;
C'est à partir de cette adresse que nous allons acceder aux pages html du projet.&lt;br /&gt;
Pour effectuer cette configuration nous avons remplacé les lignes correspondant à la configuration de la carte Ethernet dans le fichier /etc/network/interfaces par les lignes&lt;br /&gt;
  auto eth0&lt;br /&gt;
  iface eth0 inet static&lt;br /&gt;
    address 172.26.79.12&lt;br /&gt;
    netmask 255.255.240.0&lt;br /&gt;
    gateway 172.26.79.254&lt;br /&gt;
&lt;br /&gt;
Et afin d'indiquer le serveur DNS dans /etc/resolv.conf nous avons rajouté:&lt;br /&gt;
&lt;br /&gt;
  nameserver 193.48.57.34 &lt;br /&gt;
&lt;br /&gt;
Une fois la raspberry configurée, nous pouvons accéder à notre raspberry sans liaisons série grâce à un ssh.&lt;br /&gt;
Afin d'effectuer notre projet nous avons besoin de deux bibliothèques:&lt;br /&gt;
*jquery.js que l'ont a telecharger sur http://jquery.com/ afin de faciliter la programmation en javascript&lt;br /&gt;
*une bibliothèque C de WebSocket trouvé sur http://libwebsockets.org afin de pouvoir effectuer notre programme en C utilisant le Websocket&lt;br /&gt;
&lt;br /&gt;
Notre raspberry est maintenant prête pour notre projet, nous avons pu commencer notre fichier morpion.html qui permet de joueur au morpion à deux sur le même ordinateur, ce qui permet de tester les differentes fonctions utilisés pour la suite du projet.&lt;br /&gt;
&lt;br /&gt;
== Séance 3 ==&lt;br /&gt;
&lt;br /&gt;
=== Partie électronique ===&lt;br /&gt;
&lt;br /&gt;
Le montage réalisé a été testé. Quelques soudures ont été refaites et un composant ne fonctionnait pas. Heureusement, nous avions placé des socles afin de pouvoir enlever/placer les buffers facilement. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Cette mise en évidence de composant défaillant a pris beaucoup de temps, c'est pourquoi tout ce qui suit a été réalisé sur plusieurs séances supplémentaires. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La première chose effectuée fut le branchement de la carte à la nanoboard. Pour cela, nous avons utilisé un plan créé au préalable et un schematic de vérification.&amp;lt;br&amp;gt;&lt;br /&gt;
Ce schematic consistait à afficher colonne par colonne et couleur par couleur chaque led, ainsi, si un branchement était mauvais, nous pouvions le voir directement. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le montage finalisé, nous pouvions commencer les tests des fonctions créées en première séance. Sur le principe, ces schematics marchaient plutôt bien mais comme nous souhaitions générer des simulations de données venant de la liaison série, nous n'avions pas assez de boutons pour utiliser ces premières schematics. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ainsi, le travail de traitement a dû être refait. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====La seletion====&lt;br /&gt;
L'objectif est de créer un circuit numérique de sélection à l'aide de seulement deux boutons.&amp;lt;br&amp;gt;&lt;br /&gt;
Le choix s'est alors porté sur un compteur allant jusque 8. Ainsi, il y avait 9 possibilités de valeur et chaque valeur correspondra a une case.&amp;lt;br&amp;gt;&lt;br /&gt;
Le compteur devra s'incrémenter sur l'appuie d'un bouton de balayage. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Traite.JPG|vignette|center|600px|Selection|Selection]] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La sélection du joueur physique doit être contrôlée afin que seul un choix valide soit accepté. Ainsi, un schematic de vérification a été créé.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour savoir quelles cases ont déjà été jouées, nous avons décidé d'effectuer un OU logique entre les cases jouées par le joueur physique et les cases jouées par le joueur en ligne. Une fois le bus d'état global créé, il suffit d'effectuer un ET logique avec le choix de notre joueur physique. Si le choix se porte sur une case qui n'a jamais été jouée, le résultat de l'opération logique sera un bus nul. Nous comparons donc ce bus avec un bus nul. &amp;lt;br&amp;gt;&lt;br /&gt;
Finalement, le choix est valide si le comparateur sort une égalité ET le bouton de sélection a été appuyé.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Valider_choix.JPG|vignette|center|600px|Valider|Valider]] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====L'affichage====&lt;br /&gt;
Les schematics d'affichage sont restés les mêmes qu'à la séance 1, mis à part quelques corrections tel l'inversion des sorties d'affichage car nous travaillons en logique inversée sur les portes 3 états.&amp;lt;br&amp;gt;&lt;br /&gt;
Le pré-affichage s'occupe toujours du stockage des cases cochées par le joueur physique si il est le joueur courant.&amp;lt;br&amp;gt;&lt;br /&gt;
Afin d'assurer une persistance rétinienne, on devra relier l'affichage à une horloge d'au moins 3KHz.&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
[[Fichier:Traitement_preaffichage.JPG|vignette|center|500px|Pre-affichage|Pre-affichage]] [[Fichier:Affich.JPG|vignette|center|500px|Affichage|Affichage]] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Simulation de la liaison série====&lt;br /&gt;
Le but est de gérer des données semblables à ce que la raspberry pourrait nous envoyer. A savoir 1 bit de fin de partie, 1 bit de réception de donnée et 4 bits de choix de case.&amp;lt;br&amp;gt;&lt;br /&gt;
=====Conversion de l'adresse choisie=====&lt;br /&gt;
Il faut faire correspondre les 4 bits reçus à un bus de 9bits, chaque bit correspondant à une case. Ceci revient à faire un traitement similaire à la sélection du joueur physique...&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Traite_adversaire.JPG|vignette|center|400px|Conversion de l'adresse|Conversion de l'adresse]] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Stockage=====&lt;br /&gt;
Maintenant que nous savons convertir une adresse, on doit pouvoir mettre à jour les cases jouées par le joueur en ligne sur chaque réception de donnée.&amp;lt;br&amp;gt;&lt;br /&gt;
Pour effectuer ceci, on utilise 9 bascules pour stocker les choix dans différentes cases. Aucun traitement de choix valide n'est à faire car la raspberry s'en occupe déjà de son côté.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Stock_adv.JPG|vignette|center|600px|Stockage des cases de l'adversaire|Stockage des cases de l'adversaire]] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Propre à la simulation=====&lt;br /&gt;
Pour générer l'adresse, on utilise le même principe de sélection que celui du joueur physique.&amp;lt;br&amp;gt;&lt;br /&gt;
Pour avoir un aspect visuel de cette sélection, on utilise un MUX qui, en fonction du joueur courant, afficher la sélection de tel ou tel joueur.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Traite_sel.JPG|vignette|center|600px|MUX de selection|MUX de la sélection]] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour ce qui est du bit de fin de parti, on le symbolise par un bouton.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Phénomène de rebond=====&lt;br /&gt;
Pour gérer le rebond des boutons poussoirs, la solution a été numérique. Un registre à décalage a été créé, cadencé sur une clock, il décale sur chaque front d'horloge la valeur courante d'un bouton. En utilisant un comparateur, on obtient alors un front montant seulement lorsque le bouton est dans un état stable (c'est à dire lorsque tous les bits ont la même valeurs)&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Dump.JPG|vignette|center|600px|Anti-rebond|Anti-rebond]] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====TOPLEVEL====&lt;br /&gt;
Le schéma TOPLEVEL est alors le suivant :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Toplevel.JPG|vignette|center|800px|TOPLEVEL|TOPLEVEL]] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ainsi, si nous avions eu le bloc de liaison série bidirectionnel, nous aurions simplement eu à :&lt;br /&gt;
* Remplacer la génération d'adresse par les 4bits de poids faible du message de 8bits reçu.&lt;br /&gt;
* Remplacer le bouton de reset par le bit de fin de partie.&lt;br /&gt;
* Remplacer le bit de choix de l'adversaire par celui de réception validée.&lt;br /&gt;
* Relier le bit d'émission à la sortie de &amp;quot;choix valide&amp;quot;.&lt;br /&gt;
* Relier la sélection du joueur physique aux données à transmettre.&lt;br /&gt;
* Enlever le multiplexage de la sélection.&lt;br /&gt;
&lt;br /&gt;
====Réflexion====&lt;br /&gt;
La partie électronique de ce projet a donc été menée à bout. Cependant, après coup, on se rend compte que la création d'un prototype aurait été meilleure en imprimant un PCB plutôt qu'en utilisant une piste à bandes.&amp;lt;br&amp;gt;&lt;br /&gt;
Nous aurions également pu éviter une configuration en parallèle du driver. Ainsi, à l'aide de registres à décalages alimentés en externe, la lisibilité du circuit aurait été meilleure.&amp;lt;br&amp;gt;&lt;br /&gt;
On peut néanmoins se satisfaire de la réalisation numérique du circuit car elle exploite toutes les possibilités qu'offrent la conception via schematics à l'aide d'Altium designer à savoir :&amp;lt;br&amp;gt;&lt;br /&gt;
* La création d'une bibliothèque&lt;br /&gt;
* La création de composants&lt;br /&gt;
* L'utilisation de composants configurables avec édition de pins&amp;lt;br&amp;gt;&lt;br /&gt;
D'ailleurs, on comprend d'autant plus l'intérêt du langage VHDL après la création d'autant de schematics pour un projet de cette envergure.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Partie informatique ===&lt;br /&gt;
Nous avons commencé cette séance en continuant le morpion.html&lt;br /&gt;
Dans un premier temps nous avons crée &amp;quot;l'espace de jeu&amp;quot; en utilisant du code trouvé sur internet :&lt;br /&gt;
 &amp;lt;!DOCTYPE html&amp;gt;&lt;br /&gt;
  &amp;lt;head&amp;gt;&lt;br /&gt;
   &amp;lt;meta charset=&amp;quot;utf-8&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;style type=&amp;quot;text/css&amp;quot;&amp;gt;&lt;br /&gt;
 .table{&lt;br /&gt;
 width : 330px;&lt;br /&gt;
 height : 330px;&lt;br /&gt;
 border : solid 3px black;&lt;br /&gt;
  border-collapse: collapse;&lt;br /&gt;
 }&lt;br /&gt;
 .td{&lt;br /&gt;
 border : solid 3px black;&lt;br /&gt;
 width : 33%;&lt;br /&gt;
 height : 33%;&lt;br /&gt;
 }&lt;br /&gt;
 &amp;lt;/style&amp;gt;&lt;br /&gt;
 &amp;lt;title&amp;gt; Jeu morpion&amp;lt;/title&amp;gt;&lt;br /&gt;
 &amp;lt;/head&amp;gt;&lt;br /&gt;
et&lt;br /&gt;
 &amp;lt;body&amp;gt;&lt;br /&gt;
   h1&amp;gt;Morpion&amp;lt;/h1&amp;gt;&lt;br /&gt;
 table class=&amp;quot;table&amp;quot; align=&amp;quot;center&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
       &amp;lt;td class=&amp;quot;td&amp;quot; onclick=&amp;quot;placerSigne(0)&amp;quot; id=&amp;quot;0&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
       &amp;lt;td class=&amp;quot;td&amp;quot; onclick=&amp;quot;placerSigne(1)&amp;quot; id=&amp;quot;1&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
       &amp;lt;td class=&amp;quot;td&amp;quot; onclick=&amp;quot;placerSigne(2)&amp;quot; id=&amp;quot;2&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
       &amp;lt;td class=&amp;quot;td&amp;quot; onclick=&amp;quot;placerSigne(3)&amp;quot; id=&amp;quot;3&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
       &amp;lt;td class=&amp;quot;td&amp;quot; onclick=&amp;quot;placerSigne(4)&amp;quot; id=&amp;quot;4&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
       &amp;lt;td class=&amp;quot;td&amp;quot; onclick=&amp;quot;placerSigne(5)&amp;quot; id=&amp;quot;5&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
       &amp;lt;td class=&amp;quot;td&amp;quot; onclick=&amp;quot;placerSigne(6)&amp;quot; id=&amp;quot;6&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
       &amp;lt;td class=&amp;quot;td&amp;quot; onclick=&amp;quot;placerSigne(7)&amp;quot; id=&amp;quot;7&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
       &amp;lt;td class=&amp;quot;td&amp;quot; onclick=&amp;quot;placerSigne(8)&amp;quot; id=&amp;quot;8&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
 &amp;lt;/table&amp;gt;&lt;br /&gt;
 table style=&amp;quot;border : solid 3px #3399FF;&amp;quot; align=&amp;quot;center&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;tr&amp;gt;&lt;br /&gt;
 &amp;lt;td style=&amp;quot;border : solid 1px #3399FF;&amp;quot;&amp;gt;Joueur 1&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;td style=&amp;quot;border : solid 1px #3399FF;&amp;quot;&amp;gt;Joueur 2&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
 &amp;lt;tr&amp;gt;&lt;br /&gt;
 &amp;lt;td style=&amp;quot;border : solid 1px #3399FF;&amp;quot; id=&amp;quot;scre1&amp;quot;&amp;gt;0&lt;br /&gt;
 &amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;td style=&amp;quot;border : solid 1px #3399FF;&amp;quot; id=&amp;quot;scre2&amp;quot;&amp;gt;0&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
 &amp;lt;/table&amp;gt;&lt;br /&gt;
  &amp;lt;/body&amp;gt;&lt;br /&gt;
 &amp;lt;/html&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le code ci dessus n'est pas totalement bon, puisque nous avons du enlever des &amp;quot;&amp;lt;&amp;quot; afin d'afficher le code et non ce qu'il en résulte.&lt;br /&gt;
&lt;br /&gt;
L'espacement entre deux lignes peut changer en fonction de la taille de ce qui est mis dedans.&lt;br /&gt;
Si on remplis de case blanche (&amp;quot;vide.png&amp;quot;) de taille 100*100 on obtient:&lt;br /&gt;
[[Fichier:morpion1.png]]&lt;br /&gt;
&lt;br /&gt;
A chaque clique sur une case la fonction placerSigne(n) va s'effectuer avec n le numéros de la case sélectionnée.&lt;br /&gt;
 function placerSigne(idCase)&lt;br /&gt;
 { &lt;br /&gt;
         if(morpion[idCase] == 0)&lt;br /&gt;
         {coup++;&lt;br /&gt;
         morpion[idCase]=joueur;&lt;br /&gt;
         if (joueur==1)&lt;br /&gt;
                 {&lt;br /&gt;
  	  	 joueur=2;&lt;br /&gt;
                 document.getElementById(idCase).innerHTML = '&amp;lt;img src=&amp;quot;croix.gif&amp;quot; alt=&amp;quot;image !&amp;quot; /&amp;gt;';&lt;br /&gt;
 &lt;br /&gt;
                 }&lt;br /&gt;
 	else    {&lt;br /&gt;
 	   	 joueur=1;&lt;br /&gt;
                 document.getElementById(idCase).innerHTML = '&amp;lt;img src=&amp;quot;rond.gif&amp;quot; alt=&amp;quot;image !&amp;quot; /&amp;gt;';&lt;br /&gt;
 &lt;br /&gt;
                 }&lt;br /&gt;
 	if (coup&amp;gt;4)&lt;br /&gt;
 		{if (gagner(idCase))&lt;br /&gt;
 			{if (joueur==1)&lt;br /&gt;
 				{score2++;&lt;br /&gt;
 				alert(&amp;quot;joueur 2 gagne &amp;quot;);&lt;br /&gt;
 				finpartie();&lt;br /&gt;
 				}&lt;br /&gt;
 			else{score1++;&lt;br /&gt;
 				alert(&amp;quot;joueur 1 gagne &amp;quot;);&lt;br /&gt;
 				finpartie();&lt;br /&gt;
 				}&lt;br /&gt;
 			&lt;br /&gt;
 			}&lt;br /&gt;
 		else {if (egalite()==0)&lt;br /&gt;
 			{alert(&amp;quot;egalite&amp;quot;);&lt;br /&gt;
 			finpartie();}&lt;br /&gt;
 		     }&lt;br /&gt;
 		}&lt;br /&gt;
         }&lt;br /&gt;
         else{alert(&amp;quot;pas le droit&amp;quot;);}&lt;br /&gt;
 }&lt;br /&gt;
Cette fonction place une image 100x100 de rond ou de croix dans la case sélectionnée en fonction du joueur qui doit jouer.&lt;br /&gt;
*Elle calcule les scores de chaque joueurs, et appelle gagner et egalite pour savoir si on est dans une fin de partie.&lt;br /&gt;
*Et elle alerte le joueur si la case sélectionnée ne peut pas être jouée.&lt;br /&gt;
&lt;br /&gt;
Pour cela elle utilise le tableau morpion de taille 9 remplit de 0 à l'origine, et modifie la case sélectionnée en y mettant 1 ou 2 en fonction du joueur qui a joué.&lt;br /&gt;
&lt;br /&gt;
La variable coup permet de déterminer le nombre de coup jouer, ce qui permet de ne pas verifier si une partie une gagnée tant que coup n'est pas supérieur à 4, puisqu'il faut au minimum 5 coup pour gagner.&lt;br /&gt;
&lt;br /&gt;
 function finpartie()&lt;br /&gt;
 {for (var j=0;j&amp;lt;9;j++)&lt;br /&gt;
 	{ document.getElementById(j).innerHTML = '&amp;lt;img src=&amp;quot;vide.png&amp;quot; alt=&amp;quot;image !&amp;quot; /&amp;gt;';&lt;br /&gt;
 	morpion[j]=0;&lt;br /&gt;
 	}&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
La fonction finpartie() met les variables morpion et coup à zéro, et place des images blanches dans toutes les cases.&lt;br /&gt;
&lt;br /&gt;
Elle est appelé que si il y une victoire ou une égalité.&lt;br /&gt;
&lt;br /&gt;
Dans morpionsc.html qui est le fichier html final, joueur est remis à 1 dans cette fonction.&lt;br /&gt;
&lt;br /&gt;
Dans le fichier morpion.html cela n’étais pas cessionnaire et permettait en plus au joueur perdant de commencer.&lt;br /&gt;
&lt;br /&gt;
Mais pour simplifier la suite nous avons préféré définir que toujours le même joueur commencerais. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 function gagner(idCase)&lt;br /&gt;
 {switch(idCase)&lt;br /&gt;
         {&lt;br /&gt;
 case 0:&lt;br /&gt;
         return (diagonal1()||ligne1()||colonne1());&lt;br /&gt;
         break;&lt;br /&gt;
 case 1:&lt;br /&gt;
         return (ligne1()||colonne2());&lt;br /&gt;
         break;&lt;br /&gt;
 case 2:&lt;br /&gt;
         return (diagonal2()||ligne1()||colonne3());&lt;br /&gt;
         break;&lt;br /&gt;
 case 3:&lt;br /&gt;
         return (ligne2()||colonne1());&lt;br /&gt;
         break; &lt;br /&gt;
 &lt;br /&gt;
 case 4:&lt;br /&gt;
         return (diagonal1()||diagonal2()||ligne2()||colonne2());&lt;br /&gt;
         break;&lt;br /&gt;
 case 5:&lt;br /&gt;
         return (ligne2()||colonne3());&lt;br /&gt;
         break;&lt;br /&gt;
 case 6:&lt;br /&gt;
         return (diagonal2()||ligne3()||colonne1());&lt;br /&gt;
         break;&lt;br /&gt;
 case 7:&lt;br /&gt;
         return (ligne3()||colonne2());&lt;br /&gt;
         break;&lt;br /&gt;
 case 8:&lt;br /&gt;
         return (diagonal1()||ligne3()||colonne3());&lt;br /&gt;
         break;&lt;br /&gt;
         }&lt;br /&gt;
 }&lt;br /&gt;
La fonction gagner appelle des fonctions diagonal,ligne,colonne qui retourne 1 si il y'a 3 même symboles sur leur domaines.&lt;br /&gt;
&lt;br /&gt;
Gagner teste donc si il y a une suite de 3 symboles sur la ligne, colonne et les diagonales passant par la case qui a été joué.&lt;br /&gt;
&lt;br /&gt;
 function egalite()&lt;br /&gt;
 {var cp=0;&lt;br /&gt;
 for (var i=0;i &amp;lt; 9;i++)&lt;br /&gt;
         {if (morpion[i]==0)&lt;br /&gt;
 		{cp++;}&lt;br /&gt;
         }&lt;br /&gt;
 return cp;&lt;br /&gt;
 }&lt;br /&gt;
La fonction egalité teste si toutes les cases ont été joué.&lt;br /&gt;
&lt;br /&gt;
On aurait pu utiliser la variable coup, si coup était égal à 9 alors égalité, mais la fonction egalité permet de vérifier si il n'y a pas eu de problème lors de la modification de la matrice.&lt;br /&gt;
&lt;br /&gt;
Avec morpion.html nous avons pu apprendre le javascript, et poser les bases de notre fichier html final.&lt;br /&gt;
&lt;br /&gt;
===Séances supplémentaires===&lt;br /&gt;
&lt;br /&gt;
====HTML====&lt;br /&gt;
Pour le HTML/Javascript on garde les mêmes fonctions gagner et egalite.&lt;br /&gt;
On va ajouter lors de l'initialisation&lt;br /&gt;
 window.WebSocket=(window.WebSocket||window.MozWebSocket);&lt;br /&gt;
 &lt;br /&gt;
 var websocket=new WebSocket('ws://172.26.79.12:9000','myprotocol');&lt;br /&gt;
 &lt;br /&gt;
 websocket.onopen=function(){ $('h1').css('color','green'); };&lt;br /&gt;
 &lt;br /&gt;
 websocket.onerror=function(){ $('h1').css('color','red'); };&lt;br /&gt;
On modifie placerSigne:&lt;br /&gt;
*si ce n'est pas au tour du joueur 1 de jouer on lui envoie une alerte.&lt;br /&gt;
*si il y a une fin de partie on envoie 9 grâce a sendMessage.&lt;br /&gt;
*si il n'y a pas de fin de partie on envoie la case jouer toujours grâce à sendMessage:&lt;br /&gt;
 function sendMessage(data){&lt;br /&gt;
 websocket.send(data);&lt;br /&gt;
 }&lt;br /&gt;
Pour finpartie on rajoute juste &lt;br /&gt;
 joueur=1;&lt;br /&gt;
&lt;br /&gt;
Pour faire jouer le second joueur il faut recevoir un message du websocket ainsi :&lt;br /&gt;
 websocket.onmessage=function(message)&lt;br /&gt;
sera la fonction dans laquelle on fera jouer le joueur 2. &lt;br /&gt;
&lt;br /&gt;
Le websocket envoie simplement la case en char* ainsi:&lt;br /&gt;
 websocket.onmessage=function(message){&lt;br /&gt;
 idCase=parseInt((message.data)-30);&lt;br /&gt;
 console.log(idCase);&lt;br /&gt;
 &lt;br /&gt;
 if(morpion[idCase] == 0)&lt;br /&gt;
                 {coup++;&lt;br /&gt;
                  morpion[idCase]=2;&lt;br /&gt;
                  joueur=1;&lt;br /&gt;
  		document.getElementById(idCase).innerHTML = '&amp;lt;img src=&amp;quot;rond.gif&amp;quot; alt=&amp;quot;image !&amp;quot; /&amp;gt;';&lt;br /&gt;
  		 if (coup&amp;gt;4)&lt;br /&gt;
 			 {if (gagner(idCase))&lt;br /&gt;
                                {score2++; &lt;br /&gt;
                                         alert(&amp;quot;joueur 2 gagne &amp;quot;);&lt;br /&gt;
                                         finpartie();&lt;br /&gt;
 					sendMessage(9);&lt;br /&gt;
                                }&lt;br /&gt;
  &lt;br /&gt;
 &lt;br /&gt;
                           else {if (egalite()==0)&lt;br /&gt;
                                         {alert(&amp;quot;egalite&amp;quot;);&lt;br /&gt;
                                         finpartie();&lt;br /&gt;
 					sendMessage(9);&lt;br /&gt;
 &lt;br /&gt;
                                         }&lt;br /&gt;
 				}&lt;br /&gt;
 			&lt;br /&gt;
 			}&lt;br /&gt;
 		}&lt;br /&gt;
 &lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Console.log permet d'afficher dans le debug, la valeur traitée.&lt;br /&gt;
On envoie toujours 9 si la partie se termine, sinon on effectue la même chose que dans placerSigne de morpion.html&lt;br /&gt;
&lt;br /&gt;
====Fichier C====&lt;br /&gt;
Il faut maintenant créer la passerelle entre l'arduino et le fichier html.&lt;br /&gt;
Pour cela notre fichier doit utiliser des fonctions de websocket mais aussi de serial.c&lt;br /&gt;
Les fonctions de serial.c sont directement intégrées dans notre fichier, il n'y a donc pas besoin de lui faire appel pour compiler.&lt;br /&gt;
 &lt;br /&gt;
 #include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;stdlib.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;string.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;unistd.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;fcntl.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;termios.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;strings.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;sys/types.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;sys/ioctl.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;sys/file.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;linux/serial.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;libwebsockets.h&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 #define MAX_FRAME_SIZE  1024&lt;br /&gt;
 #define WAIT_DELAY      50&lt;br /&gt;
 #define MAX_MESSAGE     2 &lt;br /&gt;
 &lt;br /&gt;
 #define SERIAL_READ 0&lt;br /&gt;
 #define SERIAL_WRITE 1&lt;br /&gt;
 #define SERIAL_BOTH 2&lt;br /&gt;
 &lt;br /&gt;
 #define SERIAL_DEVICE &amp;quot;/dev/ttyUSB0&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 int sd;&lt;br /&gt;
  &lt;br /&gt;
 &lt;br /&gt;
 //&lt;br /&gt;
 // Open serial port device&lt;br /&gt;
 //&lt;br /&gt;
 int serialOpen(char *device,int mode){&lt;br /&gt;
 int flags=(mode==SERIAL_READ?O_RDONLY:(mode==SERIAL_WRITE?O_WRONLY:O_RDWR));&lt;br /&gt;
 int fd=open(device,flags|O_NOCTTY|O_NONBLOCK); &lt;br /&gt;
 if(fd&amp;lt;0){ perror(device); exit(-1); }&lt;br /&gt;
 return fd;&lt;br /&gt;
 }&lt;br /&gt;
  &lt;br /&gt;
 //&lt;br /&gt;
 // Serial port configuration&lt;br /&gt;
 //&lt;br /&gt;
 void serialConfig(int fd,int speed){&lt;br /&gt;
 struct termios new;&lt;br /&gt;
 bzero(&amp;amp;new,sizeof(new));&lt;br /&gt;
 new.c_cflag=CLOCAL|CREAD|speed|CS8;&lt;br /&gt;
 new.c_iflag=0;&lt;br /&gt;
 new.c_oflag=0;&lt;br /&gt;
 new.c_lflag=0;     /* set input mode (non-canonical, no echo,...) */&lt;br /&gt;
 new.c_cc[VTIME]=0; /* inter-character timer unused */&lt;br /&gt;
 new.c_cc[VMIN]=1;  /* blocking read until 1 char received */&lt;br /&gt;
 if(tcsetattr(fd,TCSANOW,&amp;amp;new)&amp;lt;0){ perror(&amp;quot;serialInit.tcsetattr&amp;quot;); exit(-1); }&lt;br /&gt;
 }&lt;br /&gt;
  &lt;br /&gt;
 //&lt;br /&gt;
 // Serial port termination&lt;br /&gt;
 //&lt;br /&gt;
 void serialClose(int fd){&lt;br /&gt;
 close(fd);&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 static int callback_http(&lt;br /&gt;
   struct libwebsocket_context *this,&lt;br /&gt;
   struct libwebsocket *wsi,enum libwebsocket_callback_reasons reason,&lt;br /&gt;
   void *user,void *in,size_t len)&lt;br /&gt;
 {&lt;br /&gt;
 return 0;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
  static struct libwebsocket_protocols protocols[] = {&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;http-only&amp;quot;,   // name&lt;br /&gt;
      callback_http, // callback&lt;br /&gt;
      0,             // data size&lt;br /&gt;
      0              // maximum frame size&lt;br /&gt;
    },&lt;br /&gt;
    {&amp;quot;myprotocol&amp;quot;,callback_my,0,MAX_FRAME_SIZE},&lt;br /&gt;
    {NULL,NULL,0,0}&lt;br /&gt;
    };&lt;br /&gt;
  &lt;br /&gt;
 &lt;br /&gt;
Ci-dessus se trouve le code se trouvant dans serial.c afin de créer serialOpen, serialClose et serialConfig, ainsi que l'initialisation de variables utilisées.&lt;br /&gt;
&lt;br /&gt;
Mais aussi la fonction callback_http(),la structure libwebsocket_protocols, et l'initialisation de variables. &lt;br /&gt;
 &lt;br /&gt;
 int main(void) {&lt;br /&gt;
 int port=9000;&lt;br /&gt;
 struct lws_context_creation_info info;&lt;br /&gt;
 memset(&amp;amp;info,0,sizeof info);&lt;br /&gt;
 info.port=port;&lt;br /&gt;
 info.protocols=protocols;&lt;br /&gt;
 info.gid=-1;&lt;br /&gt;
 info.uid=-1;&lt;br /&gt;
 struct libwebsocket_context *context=libwebsocket_create_context(&amp;amp;info);&lt;br /&gt;
 if(context==NULL){&lt;br /&gt;
   fprintf(stderr, &amp;quot;libwebsocket init failed\n&amp;quot;);&lt;br /&gt;
   return -1;&lt;br /&gt;
   }&lt;br /&gt;
 printf(&amp;quot;starting server...\n&amp;quot;);&lt;br /&gt;
 &lt;br /&gt;
   &lt;br /&gt;
 sd=serialOpen(SERIAL_DEVICE,SERIAL_BOTH);&lt;br /&gt;
 serialConfig(sd,B9600);&lt;br /&gt;
 &lt;br /&gt;
  &lt;br /&gt;
 while(1){&lt;br /&gt;
   libwebsocket_service(context,WAIT_DELAY);&lt;br /&gt;
   }&lt;br /&gt;
     &lt;br /&gt;
 &lt;br /&gt;
 serialClose(sd); &lt;br /&gt;
 &lt;br /&gt;
  &lt;br /&gt;
 libwebsocket_context_destroy(context);&lt;br /&gt;
 return 0;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Le main permet d'initialiser une liaison série de 9600 Baud et de lancer une boucle infini dans laquelle la passerelle entre arduino et html va s'effectuer.&lt;br /&gt;
&lt;br /&gt;
 static int callback_my(&lt;br /&gt;
   struct libwebsocket_context * this,&lt;br /&gt;
   struct libwebsocket *wsi,enum libwebsocket_callback_reasons reason,&lt;br /&gt;
   void *user,void *in,size_t len)&lt;br /&gt;
 {&lt;br /&gt;
 static char message[2+LWS_SEND_BUFFER_PRE_PADDING+LWS_SEND_BUFFER_POST_PADDING];&lt;br /&gt;
 static char valeur;&lt;br /&gt;
 switch(reason){&lt;br /&gt;
   case LWS_CALLBACK_ESTABLISHED:&lt;br /&gt;
     printf(&amp;quot;connection established\n&amp;quot;);&lt;br /&gt;
                 // Declenchement d'un prochain envoi au navigateur&lt;br /&gt;
     break;&lt;br /&gt;
   case LWS_CALLBACK_RECEIVE:&lt;br /&gt;
                 // Ici sont traites les messages envoyes par le navigateur&lt;br /&gt;
 //printf(&amp;quot;received data: %s\n&amp;quot;,(char *)in);&lt;br /&gt;
     if(write(sd,in,sizeof(char))!=1){ perror(&amp;quot;main.write&amp;quot;); exit(-1); }&lt;br /&gt;
 printf(&amp;quot;writen data: %s\n&amp;quot;,(char *)in);&lt;br /&gt;
                 // Declenchement d'un prochain envoi au navigateur&lt;br /&gt;
     libwebsocket_callback_on_writable(this,wsi);&lt;br /&gt;
     break;&lt;br /&gt;
   case LWS_CALLBACK_SERVER_WRITEABLE:&lt;br /&gt;
                 // Ici sont envoyes les messages au navigateur&lt;br /&gt;
 &lt;br /&gt;
 if (read(sd,&amp;amp;valeur,sizeof(char))==1)&lt;br /&gt;
 { &lt;br /&gt;
 //printf(&amp;quot;write data: %c\n&amp;quot;,valeur);&lt;br /&gt;
       char *out=message+LWS_SEND_BUFFER_PRE_PADDING;&lt;br /&gt;
        sprintf(out,&amp;quot;%02x&amp;quot;,valeur);&lt;br /&gt;
 //printf(&amp;quot;write data: %s\n&amp;quot;,(char *)out);&lt;br /&gt;
 &lt;br /&gt;
     libwebsocket_write(wsi,(unsigned char *)out,MAX_MESSAGE,LWS_WRITE_TEXT);&lt;br /&gt;
 }&lt;br /&gt;
 else{libwebsocket_callback_on_writable(this,wsi);&lt;br /&gt;
 }&lt;br /&gt;
     break;&lt;br /&gt;
   default:&lt;br /&gt;
     break;&lt;br /&gt;
        	  }   &lt;br /&gt;
 return 0;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
La fonction ci-dessus est celle qui definie la passerelle.&lt;br /&gt;
&lt;br /&gt;
Si elle établit une liaison, elle imprime &amp;quot;connection established&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Une fois la connection établit on se retrouve dans le cas LWS_CALLBACK_RECEIVE si la page html envoie une valeur.&lt;br /&gt;
&lt;br /&gt;
Dans ce cas la valeur pointée par in est écrite dans sd(liaison serie), puis on utilise :&lt;br /&gt;
 libwebsocket_callback_on_writable(this,wsi);&lt;br /&gt;
&lt;br /&gt;
Qui permet de passer en mode réception de message par la liaison série, qui est definit ici par le cas:&lt;br /&gt;
 case LWS_CALLBACK_SERVER_WRITEABLE:&lt;br /&gt;
Dans ce cas on lit la valeur dans la liaison serie et on la met dans la variable valeur. Si il n'y a rien à lire pour le moment on utilise a nouveau:&lt;br /&gt;
 libwebsocket_callback_on_writable(this,wsi);&lt;br /&gt;
Afin de rester dans le même case.&lt;br /&gt;
&lt;br /&gt;
Si la valeur a été lu on crée out:&lt;br /&gt;
  char *out=message+LWS_SEND_BUFFER_PRE_PADDING;&lt;br /&gt;
avec message :&lt;br /&gt;
 static char message[2+LWS_SEND_BUFFER_PRE_PADDING+LWS_SEND_BUFFER_POST_PADDING];&lt;br /&gt;
out va etre du bon type et de la bonne taille pour pouvoir être envoyer a l'html.&lt;br /&gt;
On modife donc la valeur de out grâce à la valeur lue:&lt;br /&gt;
 sprintf(out,&amp;quot;%02x&amp;quot;,valeur);&lt;br /&gt;
Puis on l'envoie:&lt;br /&gt;
 libwebsocket_write(wsi,(unsigned char *)out,MAX_MESSAGE,LWS_WRITE_TEXT);&lt;br /&gt;
&lt;br /&gt;
====Arduino====&lt;br /&gt;
Pour l'affichage de la matrice LED nous avons utilisé un exemple trouvé sur le site de SparkFun Electronics:&lt;br /&gt;
 //Example_RGBMatrix.ino&lt;br /&gt;
 //By: Ryan Owens @ SparkFun Electronics&lt;br /&gt;
 //&lt;br /&gt;
 //modified 27 Oct 2014&lt;br /&gt;
 //by Bobby Chan @ SparkFun Electronics&lt;br /&gt;
&lt;br /&gt;
Nous avons ensuite crée:&lt;br /&gt;
&lt;br /&gt;
 void affichage(int je[3][3])&lt;br /&gt;
 {&lt;br /&gt;
   for (int i = 0; i &amp;lt; 3; i++)&lt;br /&gt;
   {&lt;br /&gt;
     for (int j = 0; j &amp;lt; 3; j++)&lt;br /&gt;
     { if (je[i][j] == 1)&lt;br /&gt;
       {&lt;br /&gt;
         color_buffer[0 + i + j * 8] = BLUE;&lt;br /&gt;
       }&lt;br /&gt;
       else if (je[i][j] == 2)&lt;br /&gt;
       {&lt;br /&gt;
         color_buffer[0 + i + j * 8] = RED;&lt;br /&gt;
       }&lt;br /&gt;
       else if (je[i][j] == 5)&lt;br /&gt;
       {&lt;br /&gt;
         color_buffer[0 + i + j * 8] = TEAL;&lt;br /&gt;
       }&lt;br /&gt;
       else if (je[i][j] == 4)&lt;br /&gt;
       {&lt;br /&gt;
         color_buffer[0 + i + j * 8] = GREEN;&lt;br /&gt;
       }&lt;br /&gt;
       else if (je[i][j] == 3) {&lt;br /&gt;
         color_buffer[0 + i + j * 8] = MAGENTA;&lt;br /&gt;
       }&lt;br /&gt;
       else if (je[i][j] == 0) {&lt;br /&gt;
         color_buffer[0 + i + j * 8] = BLACK;&lt;br /&gt;
       }&lt;br /&gt;
     }&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
Qui change la valeur des buffers sur une matrice 3x3, en fonction d'une matrice donnée en paramètre de taille 3x3.&lt;br /&gt;
&lt;br /&gt;
Il faut ensuite matrix_write(); pour observer les resultats&lt;br /&gt;
 &lt;br /&gt;
 void go(int joueur)&lt;br /&gt;
 {if (joueur==2)&lt;br /&gt;
 {color_buffer[7]=GREEN;}&lt;br /&gt;
 else{color_buffer[7]=RED;}}&lt;br /&gt;
Cette fonction met un buffer vert si le joueur 2 peut jouer sinon rouge, le buffer se trouve en dehors de la zone de jeu et donc ne gène pas l'utilisateur.&lt;br /&gt;
&lt;br /&gt;
Il faut ensuite matrix_write(); pour observer les resultats&lt;br /&gt;
&lt;br /&gt;
 void reset(int jeu[3][3])&lt;br /&gt;
 { joueur = 0;&lt;br /&gt;
 color_buffer[7]=RED;&lt;br /&gt;
   for (int i = 0; i &amp;lt; 3; i++)&lt;br /&gt;
   {&lt;br /&gt;
     for (int j = 0; j &amp;lt; 3; j++)&lt;br /&gt;
     { jeu[i][j] = 0;&lt;br /&gt;
     }&lt;br /&gt;
   }&lt;br /&gt;
   jeu[0][0] = 1;&lt;br /&gt;
 }&lt;br /&gt;
Cette fonction remet dispose la matrice LED comme lors d'un début de partie.&lt;br /&gt;
On aurait pu remettre a zéro certaines variables dans cette fonction.&lt;br /&gt;
&lt;br /&gt;
Une fois ces fonctions crées, il faut crée la fonction loop:&lt;br /&gt;
 void loop() {&lt;br /&gt;
   go(joueur);&lt;br /&gt;
   if (Serial.available() &amp;gt; 0)&lt;br /&gt;
   { int a = (Serial.read() - 48);&lt;br /&gt;
     if (a == 9) {&lt;br /&gt;
       reset(jeu);&lt;br /&gt;
     }&lt;br /&gt;
     else {&lt;br /&gt;
       if (joueur == 0)&lt;br /&gt;
       { int b = (a) / 3;&lt;br /&gt;
         int c = a - (b) * 3;&lt;br /&gt;
         jeu[b][c] = 2;&lt;br /&gt;
         joueur = 2;&lt;br /&gt;
         if (jeu[0][0] == 2)&lt;br /&gt;
         {&lt;br /&gt;
           jeu[0][0] = 3;&lt;br /&gt;
         }&lt;br /&gt;
       }&lt;br /&gt;
     }&lt;br /&gt;
   }&lt;br /&gt;
   else {&lt;br /&gt;
     if (joueur == 2)&lt;br /&gt;
     { if (digitalRead(9) == 1)&lt;br /&gt;
       { jeu[l][h] = jeu[l][h] - 1;&lt;br /&gt;
         h = (h + 1) % 3;&lt;br /&gt;
         jeu[l][h]++;&lt;br /&gt;
         delay(50);&lt;br /&gt;
       }&lt;br /&gt;
       else if (digitalRead(8) == 1)&lt;br /&gt;
       {&lt;br /&gt;
         jeu[l][h] = jeu[l][h] - 1;&lt;br /&gt;
         l = (l + 1) % 3;&lt;br /&gt;
         jeu[l][h]++;&lt;br /&gt;
         delay(50);&lt;br /&gt;
       }&lt;br /&gt;
       else if (digitalRead(7) == 1)&lt;br /&gt;
       {&lt;br /&gt;
         if (jeu[l][h] == 1)&lt;br /&gt;
         { jeu[l][h] = 4;&lt;br /&gt;
           Serial.write((l * 3 + h) + 48);&lt;br /&gt;
 &lt;br /&gt;
           l = 0;&lt;br /&gt;
           h = 0;&lt;br /&gt;
           jeu[l][h] = jeu[l][h] + 1;&lt;br /&gt;
           joueur = 0;&lt;br /&gt;
         }&lt;br /&gt;
       }&lt;br /&gt;
     }&lt;br /&gt;
   }&lt;br /&gt;
 &lt;br /&gt;
   affichage(jeu);&lt;br /&gt;
   matrix_write();&lt;br /&gt;
   delay(100);&lt;br /&gt;
 }&lt;br /&gt;
Cette fonction utilise en premier lieu go() pour indiquer au joueur si il peut jouer.&lt;br /&gt;
Ensuite il vérifie la liaison série.&lt;br /&gt;
&lt;br /&gt;
On enlève 48 a ce que l'on a reçut, car on reçoit un char et on désire un int.&lt;br /&gt;
&lt;br /&gt;
Ainsi on ajoutera 48 a ce qu'on enverra dans le Serial.write.&lt;br /&gt;
&lt;br /&gt;
Si on reçoit 9, fin de partie.&lt;br /&gt;
Sinon on vérifie qui doit jouer et on le fais jouer si on peut ou on attend. &lt;br /&gt;
&lt;br /&gt;
Le Joueur 0 équivaut au joueur 1 pour l'html.&lt;br /&gt;
&lt;br /&gt;
Une fois les coups effectués, on affiche ce qui en résulte et ajoute un delay pour éviter d'appuyer deux fois d'affilée sans le vouloir.&lt;br /&gt;
&lt;br /&gt;
En reliant en série notre arduino en USB à notre raspberry, nous pouvons jouer aux morpions à deux , un sur l'arduino à l'aide de bouton poussoir , et l'autre sur une page html grâce à sa souris.&lt;br /&gt;
&lt;br /&gt;
== Démonstration ==&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;/div&gt;</summary>
		<author><name>Tstieven</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Projet_IMA3_P1,_2015/2016,_TD2&amp;diff=32315</id>
		<title>Projet IMA3 P1, 2015/2016, TD2</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Projet_IMA3_P1,_2015/2016,_TD2&amp;diff=32315"/>
				<updated>2016-06-16T23:13:38Z</updated>
		
		<summary type="html">&lt;p&gt;Tstieven : /* Partie informatique */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Projet IMA3-SC 2015/2016 : MORPION =&lt;br /&gt;
&lt;br /&gt;
== Cahier des charges ==&lt;br /&gt;
Notre projet &amp;quot;système communicant&amp;quot; aura pour but de créer une interface connectée du &amp;quot;morpion&amp;quot;. L'objectif est de permettre à un joueur interagissant sur un site internet de jouer contre une autre personne qui, elle, jouera à l'aide d'un affichage fait à partir de leds. &lt;br /&gt;
&lt;br /&gt;
Nous cherchons donc à exploiter la capacité asynchrone d'un websocket afin de permettre une partie en temps réel.&lt;br /&gt;
&lt;br /&gt;
=== Matériel ===&lt;br /&gt;
* Une nanoboard&lt;br /&gt;
* Une raspberry pi&lt;br /&gt;
* Une matrice de leds 9x9 ou plus&lt;br /&gt;
* Un clavier numérique ou 9 boutons-poussoirs&lt;br /&gt;
* Des ordinateurs avec les logiciels de développement nécessaires &lt;br /&gt;
&lt;br /&gt;
=== Optionnel ===&lt;br /&gt;
* Un buzzer afin d'avertir le joueur d'un choix incohérent&lt;br /&gt;
* Trois afficheurs sept segments afin d'ajouter un tableau des scores&lt;br /&gt;
&lt;br /&gt;
== Séance 1 ==&lt;br /&gt;
&lt;br /&gt;
=== Partie électronique ===&lt;br /&gt;
Le but de cette première séance était de se familiariser avec le logiciel de conception Altium Designer et de réfléchir à la façon d'aborder la conception électronique du morpion.&lt;br /&gt;
&lt;br /&gt;
Cette conception se fera en plusieurs étapes :&lt;br /&gt;
&lt;br /&gt;
* gérer le positionnement d'un curseur en fonction de l'état courant de la partie&lt;br /&gt;
* gérer l'affichage de la matrice en fonction des cases remplies / sélectionnées&lt;br /&gt;
* permettre la réception et l'envoie de données à l'aide de la liaison série&lt;br /&gt;
* traiter la remise à zéro du plateau en cas de fin de partie&lt;br /&gt;
&lt;br /&gt;
====Positionnement du curseur et état de la partie====&lt;br /&gt;
&lt;br /&gt;
Dans un premier lieu, il était nécessaire de traiter les actions entrantes. En effet, si ce n'est pas au tour du joueur &amp;quot;physique&amp;quot;, l'utilisation des boutons doit être bloquée.&amp;lt;br&amp;gt;&lt;br /&gt;
Ceci consiste simplement à effectuer un ET logique entre un bit symbolisant le joueur courant (si 1 alors joueur physique, si 0 alors joueur en ligne) et l'action demandée.&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fichier:Choisir.png||center|alt=Schema de choix|Circuit logique de la permission d'action]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Une fois les choix accessibles, il faut désormais les traiter. Le traitement s'effectuera à l'aide de bascules, chaque case comportera deux bascules : une bascule de sélection (la case est-elle sélectionnée ?) et une bascule permettant de savoir si la case a déjà été jouée.&amp;lt;br&amp;gt;&lt;br /&gt;
Si la case a déjà été jouée, il ne faut empêcher l'utilisateur de la jouer.&amp;lt;br&amp;gt;&lt;br /&gt;
Nous considérerons que le joueur en ligne n'effectuera pas de choix erroné et nous testerons seulement les choix du joueur &amp;quot;physique&amp;quot;.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Traitement.png||center|alt=Schema de traitement|Circuit logique du traitement d'une action]] &amp;lt;br&amp;gt;&lt;br /&gt;
Les ronds verts permettent la distinction des 9 cases. &amp;lt;br&amp;gt;&lt;br /&gt;
Le rond jaune correspond à la zone des sorties d'état. Plus précisément, il s'agit de deux bus regroupant les cases remplies et le lieu de la case sélectionnée.&amp;lt;br&amp;gt;&lt;br /&gt;
Le rond noir correspond au choix de l'adversaire.&amp;lt;br&amp;gt;&lt;br /&gt;
Le rond orange correspond à la sortie &amp;quot;selection_done&amp;quot; qui effectue un état haut lorsqu'un choix valide a été fait par l'utilisateur.&amp;lt;br&amp;gt;&lt;br /&gt;
Le rond rouge met en évidence la zone permettant de traiter les décalage du bit de sélection. Ce décalage consiste à garder seulement UNE bascule à l'état haut en effectuant le passage logique d'une bascule à une autre en fonction du choix tout en appliquant un reset sur l'ancienne sélection. Le schéma de ce déplacement se trouve ci-dessous et est appliqué aux 9 cases.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Andor.png||center|alt=Schema permettant le déplacement|Circuit logique utilisé afin de déplacer le curseur]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Complément à la séance 1===&lt;br /&gt;
====Affichage dynamique====&lt;br /&gt;
&lt;br /&gt;
L'un des grands problèmes à la réalisation du morpion sur nanoboard est l'affichage dynamique. En effet, il va falloir à la fois stocker les valeurs, et stocker quel joueur a joué telle ou telle case, afin de savoir quel case s'allumera de la couleur désirée. Ceci rajouté à l'affichage dynamique de la sélection, ceci s'avère compliqué.&amp;lt;br&amp;gt;&lt;br /&gt;
La tâche a alors été décomposée en deux étapes :&lt;br /&gt;
* Le traitement des couleurs (Quelle couleur affilier à quelle case ?)&lt;br /&gt;
* L'affichage de ces couleurs&lt;br /&gt;
=====Traitement des couleurs=====&lt;br /&gt;
&lt;br /&gt;
Le but était de se simplifier au maximum les choses. Le premier problème est de savoir quel joueur a joué une case, pour ceci, nous nous sommes servi de l'état du plateau fourni dans le bloc TRAITEMENT. Nous savons quelles cases sont à 1 et imposons donc une couleur rouge à toutes ces cases.&amp;lt;br&amp;gt;&lt;br /&gt;
De plus, nous savons qu'à chaque fois que le joueur &amp;quot;physique&amp;quot; effectue un choix valide, un front montant est appliqué sur la broche &amp;quot;selection_done&amp;quot; de TRAITEMENT. Nous avons alors re-créé 9 registres symbolisant les cases, mais cette fois ci, en fonction de l'endroit sélectionné par l'utilisateur, si ce dernier effectue un choix valide, le registre passera à 1. Le but de cette manipulation est de recenser tous les registres joués par le joueur physique. &amp;lt;br&amp;gt;&lt;br /&gt;
Maintenant, nous relions ces registres aux valeurs de couleur verte afin d'additionner le vert au rouge  des cases jouées et obtiendrons finalement des cases de couleur jaune pour symboliser les cases du joueur physique et des cases de couleur rouge pour le jouer en ligne. &amp;lt;br&amp;gt;&lt;br /&gt;
Il ne reste qu'à relier directement la case sélectionnée (recensée par le bus Etat_selection de TRAITEMENT) à la couleur bleue.&amp;lt;br&amp;gt;&lt;br /&gt;
Finalement nous avons : &lt;br /&gt;
* joueur en ligne : rouge&lt;br /&gt;
* joueur physique : jaune&lt;br /&gt;
* sélection : magenta, cyan ou bleu&lt;br /&gt;
&lt;br /&gt;
 [[Fichier:Traitement_affichage.png||center|Schéma du traitement pré affichage|Circuit logique du traitement pré-affichage]] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Affichage=====&lt;br /&gt;
&lt;br /&gt;
La matrice led employée est une matrice led à anode commune. Elle a pour avantage de permettre la sélection d'une ligne et de la couleur de chaque colonne.&amp;lt;br&amp;gt;&lt;br /&gt;
Cependant, nous ne pouvons donc choisir la couleur que d'une colonne. C'est pourquoi nous allons faire varier cet affichage ligne par ligne à une fréquence élevée afin que l’œil humain ne le remarque pas. Nous pourrons donc choisir quelle couleur sera affichée sur chaque ligne. &amp;lt;br&amp;gt;&lt;br /&gt;
Cet affichage ligne par ligne sera effectué via un multiplexeur donc le bus de sélection sera relié à un compteur 3bits cadencé sur une clock suffisamment rapide pour opérer une persistance rétinienne. &amp;lt;br&amp;gt;&lt;br /&gt;
Dans chaque bus nous avons imposé certains bits afin que la grille soit dessinée en bleu.&amp;lt;br&amp;gt;&lt;br /&gt;
Le bus multiplexé sera ensuite redirigé vers les pins de la matrice leds.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Affichage.png||center|Schéma d'affichage|Circuit logique de l'affichage]] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Tests====&lt;br /&gt;
&lt;br /&gt;
Le bloc d'affichage a été testé et deux problèmes ont été rencontrés : &lt;br /&gt;
* La sélection a été mal réfléchie&lt;br /&gt;
* Un phénomène de rebond a été remarqué sur l'oscilloscope numérique&lt;br /&gt;
&lt;br /&gt;
=====La sélection=====&lt;br /&gt;
&lt;br /&gt;
Dans la fonction d'affichage, on retourne la sélection de la ligne en logique inversée. Le problème est que dans la version 1.0 de l'affichage, un GND avait été placé en entrée du MUX de sélection. Nous n'avions pas pensé au fait que dans ce cas la, toutes les sorties seraient en permanence au GND... &amp;lt;br&amp;gt;La correction a donc été de placer un VCC en entrée et d'inverser les sorties, ainsi une seul anode de ligne sera placée sur le GND.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Selection.PNG||center|Schéma de selection|Correction de la sortie de selection]] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le schéma semble fonctionnel cependant d'autres tests restent à faire.&lt;br /&gt;
&lt;br /&gt;
=====Le rebond=====&lt;br /&gt;
&lt;br /&gt;
Lors du test de l'affichage, la clock d'affichage a été simulée par un bouton de la nanoboard et l'affichage a été relié sur une seule ligne.&amp;lt;br&amp;gt;&lt;br /&gt;
Nous étions sensé remarquer que lorsque la ligne s'allume, si on appuie sur le bouton, elle s’éteint et enfin si nous appuyons sept fois sur le bouton, la ligne se rallume. &amp;lt;br&amp;gt;&lt;br /&gt;
Rien ne se passait comme prévu, et plus précisément, il n'y avait même pas de logique dans la ré-apparition de la ligne.&amp;lt;br&amp;gt;&lt;br /&gt;
Ayant déjà été confronté à des problèmes de rebonds avec des boutons poussoir, ce phénomène a été testé sur l'oscilloscope numérique.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Rebond.png||center|Exemple de rebond|Exemple de rebond]] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous demanderons alors aux référents quelle stratégie adopter : filtrer le signal avec un condensateur en parallèle au bouton ou bien utiliser une comparaison avec registre à décalage pour vérifier la stabilité du signal avant d'envoie du front montant.&amp;lt;br&amp;gt;&lt;br /&gt;
Certes la correction du bouton n'était pas nécessaire aux tests entrepris pour l'affichage (nous aurions pu mettre une clock interne) mais ceci nous servira pour filtrer les choix effectués par l'utilisateur (haut, droite, select). &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Objectifs pour la séance prochaine====&lt;br /&gt;
&lt;br /&gt;
Les schémas effectués restent des ébauches, il y a forcément eu des oublis. Néanmoins, comme chaque schéma se compile, le passage à l'étape de mise en place de la liaison série durant la séance 2 est envisageable. Il faudra donc créer un protocole plus concret afin de savoir qui doit jouer, quand envoyer, quand recevoir des données. Si le temps le permet, quelques programmes simples seront testés sur la nanoboard afin de vérifier le fonctionnement de l'affichage de la matrice après discutions avec les enseignants au sujet du phénomène de rebond.&lt;br /&gt;
&lt;br /&gt;
=== Partie informatique ===&lt;br /&gt;
Dans cette première séance nous avons programmé l'arduino afin de créer le programme de morpion, pour pouvoir tester la partie informatique sans disposer de la partie électronique.&lt;br /&gt;
Pour cela nous avons due apprendre à utiliser une matrice de LED RGB à l'aide des codes fournit par SparkFun.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Puis nous avons pu commencer à programmer le morpion:&lt;br /&gt;
&lt;br /&gt;
*le jeu se déroule dans une matrice 3x3.&lt;br /&gt;
*le position du curseur est représentée par une lumière bleue, celle des pions du joueurs 1 par une lumière rouge et celle des pions du joueurs 2 par une lumière verte.&lt;br /&gt;
*si le curseur est sur un pions les deux couleurs s'additionnent pour donner du magenta où du cyan.&lt;br /&gt;
*le joueur se déplace à l'aide de 2 boutons poussoir,l'un permettant d'aller vers le haut, l'autre permettant d'aller à droite&lt;br /&gt;
**pour éviter plusieurs déplacements d'un coup, un délais a été mis entre deux actions&lt;br /&gt;
*une fois tout en haut, si le joueur presse le bouton pour aller vers le haut le joueur se retrouve en bas.&lt;br /&gt;
*une fois tout à droite, si le joueur presse le bouton pour aller vers la droite le joueur se retrouve à gauche. &lt;br /&gt;
*enfin un dernier bouton poussoir permet de placer un pion à l'endroit où se trouve le curseur.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Une fois les mouvements programmés il fallait régir les règles du jeu:&lt;br /&gt;
&lt;br /&gt;
*Ainsi le curseur commence toujours en haut à droite&lt;br /&gt;
*Si le un joueurs arrive a créer une ligne de 3, il gagne la partie&lt;br /&gt;
*Si aucun joueur n'arrive à gagner et que le terrain est remplit, la partie se termine sur un match nul&lt;br /&gt;
*Une fois la partie terminée, le terrain est remis à zéros&lt;br /&gt;
&lt;br /&gt;
Les fonctions permettant les différentes actions ont été décrites dans la partie Arduino de la séance n°3.&lt;br /&gt;
&lt;br /&gt;
== Séance 2 ==&lt;br /&gt;
&lt;br /&gt;
=== Partie électronique ===&lt;br /&gt;
&lt;br /&gt;
La matrice led ne pourra être alimentée par les différentes broches de la nanoboard sous peine de créer une chute de tension et risquer un reset du fpga.&amp;lt;br&amp;gt;&lt;br /&gt;
Ainsi, le but de cet séance est de réfléchir à la conception d'un prototype de carte permettant d'alimenter la matrice led de manière externe. &amp;lt;br&amp;gt;&lt;br /&gt;
====Utilisation de transistors====&lt;br /&gt;
L'utilisation de transistors en saturé paraît la meilleur chose à faire. En effet, ceci permettra de générer un gain en courant et de contrôler l'état des différentes couleurs ligne par ligne et colonne par colonne.&amp;lt;br&amp;gt;&lt;br /&gt;
Pour permettra la liaison de chaque led au VCC, on utilisera un transistor PNP. Pour permettre la liaison au GND, on utilisera un NPN.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Montage_roussel.PNG||center|upright = 0.5|Montage d'une branche|Montage d'une branche de led]] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Comme il s'agit de transistor à anodes communes, il suffira de 8 transistors NPN. Notre choix s'est donc porté vers le ULN2803A, qui est un ensemble de 8 paires Darlington.&amp;lt;br&amp;gt;&lt;br /&gt;
L'utilisation de paires Darlington a l'avantage de permettre une génération élevée de courant. (Fort gain en courant)&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour ce qui est des cathodes, un problème de taille se pose. Il faudrait 24 transistors PNP pour gérer les 8 colonnes * 3couleurs. Ainsi, notre choix s'est plutôt déporté vers le buffer de portes trois états 74AS240. Cette famille de buffer 3 états a la capacité de délivrer un courant du même ordre de grandeur que l'ULN2803A.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Maintenant il reste à dimensionner la résistance sur chaque branche. Après quelques tests à l'aide d'un multimètre et de la matrice, on remarque que chaque led a besoin de 2mA pour fonctionner. Donc le but est de générer un courant d'environ 2mA. Ainsi, si on impose une tension de 5.5V aux bornes du montage, R = 5.5 / 0.002 = 2700 Ohms.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous avons désormais toutes les informations nécessaires pour le montage d'un prototype.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Le montage====&lt;br /&gt;
Au cours d'une séance supplémentaire, un plan a été élaboré et le prototype brasé. Voici donc le prototype achevé :&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Driver.JPG||center|400px|Driver matrice|Driver de la matrice]] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sur chaque sortie se trouve une résistance de 2700ohms. Le mieux aurait été de réaliser ce montage avec un réseau résistif cependant, le temps nous faisant défaut, nous avons utilisé les résistances déjà présentes en magasin.&amp;lt;br&amp;gt;&lt;br /&gt;
Sur chaque entrée se trouver une broche qui sera reliée à la nanoboard. &amp;lt;br&amp;gt;&lt;br /&gt;
Tous les buffers ont leur GND et VCC reliés au générateur 5.5V. Les paires Darlington sont reliées à la même masse.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Il ne restait plus qu'à relier la matrice led. Cette liaison parallèle a été réalisée en recyclant un vieux BUS d'ordinateur fixe. Finalement, voilà le montage final :&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Matrice_roussel.JPG||center|400px|Montage final de la partie électronique|Montage final de la partie électronique]] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Partie informatique ===&lt;br /&gt;
=====Arduino=====&lt;br /&gt;
Lors de cette séance nous avons pu finir le programme arduino, pour pouvoir jouer à deux sur une la carte.&lt;br /&gt;
Cette partie a été crée pour pouvoir tester les différentes fonctions, et sera modifier lors de prochaines séances.&lt;br /&gt;
La matrice LED affiche des clignotement irrégulier de couleur rouge, mais cela ne gêne pas pour jouer.&lt;br /&gt;
&lt;br /&gt;
=====Raspberry=====&lt;br /&gt;
Nous avons pu enfin commencer notre travail sur la raspberry.&lt;br /&gt;
Apres avoir branché la raspberry en série à notre pc, nous avons pu la configurer afin qu'elle fonctionne avec le réseau de l'ecole.&lt;br /&gt;
Pour cela nous avons mis une adresse IP du réseau INSECURE de l'école sur la Raspberry, celle de notre raspberry est :172.26.79.12.&lt;br /&gt;
C'est à partir de cette adresse que nous allons acceder aux pages html du projet.&lt;br /&gt;
Pour effectuer cette configuration nous avons remplacé les lignes correspondant à la configuration de la carte Ethernet dans le fichier /etc/network/interfaces par les lignes&lt;br /&gt;
  auto eth0&lt;br /&gt;
  iface eth0 inet static&lt;br /&gt;
    address 172.26.79.12&lt;br /&gt;
    netmask 255.255.240.0&lt;br /&gt;
    gateway 172.26.79.254&lt;br /&gt;
&lt;br /&gt;
Et afin d'indiquer le serveur DNS dans /etc/resolv.conf nous avons rajouté:&lt;br /&gt;
&lt;br /&gt;
  nameserver 193.48.57.34 &lt;br /&gt;
&lt;br /&gt;
Une fois la raspberry configurée, nous pouvons accéder à notre raspberry sans liaisons série grâce à un ssh.&lt;br /&gt;
Afin d'effectuer notre projet nous avons besoin de deux bibliothèques:&lt;br /&gt;
*jquery.js que l'ont a telecharger sur http://jquery.com/ afin de faciliter la programmation en javascript&lt;br /&gt;
*une bibliothèque C de WebSocket trouvé sur http://libwebsockets.org afin de pouvoir effectuer notre programme en C utilisant le Websocket&lt;br /&gt;
&lt;br /&gt;
Notre raspberry est maintenant prête pour notre projet, nous avons pu commencer notre fichier morpion.html qui permet de joueur au morpion à deux sur le même ordinateur, ce qui permet de tester les differentes fonctions utilisés pour la suite du projet.&lt;br /&gt;
&lt;br /&gt;
== Séance 3 ==&lt;br /&gt;
&lt;br /&gt;
=== Partie électronique ===&lt;br /&gt;
&lt;br /&gt;
Le montage réalisé a été testé. Quelques soudures ont été refaites et un composant ne fonctionnait pas. Heureusement, nous avions placé des socles afin de pouvoir enlever/placer les buffers facilement. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Cette mise en évidence de composant défaillant a pris beaucoup de temps, c'est pourquoi tout ce qui suit a été réalisé sur plusieurs séances supplémentaires. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La première chose effectuée fut le branchement de la carte à la nanoboard. Pour cela, nous avons utilisé un plan créé au préalable et un schematic de vérification.&amp;lt;br&amp;gt;&lt;br /&gt;
Ce schematic consistait à afficher colonne par colonne et couleur par couleur chaque led, ainsi, si un branchement était mauvais, nous pouvions le voir directement. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le montage finalisé, nous pouvions commencer les tests des fonctions créées en première séance. Sur le principe, ces schematics marchaient plutôt bien mais comme nous souhaitions générer des simulations de données venant de la liaison série, nous n'avions pas assez de boutons pour utiliser ces premières schematics. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ainsi, le travail de traitement a dû être refait. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====La seletion====&lt;br /&gt;
L'objectif est de créer un circuit numérique de sélection à l'aide de seulement deux boutons.&amp;lt;br&amp;gt;&lt;br /&gt;
Le choix s'est alors porté sur un compteur allant jusque 8. Ainsi, il y avait 9 possibilités de valeur et chaque valeur correspondra a une case.&amp;lt;br&amp;gt;&lt;br /&gt;
Le compteur devra s'incrémenter sur l'appuie d'un bouton de balayage. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Traite.JPG|vignette|center|600px|Selection|Selection]] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La sélection du joueur physique doit être contrôlée afin que seul un choix valide soit accepté. Ainsi, un schematic de vérification a été créé.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour savoir quelles cases ont déjà été jouées, nous avons décidé d'effectuer un OU logique entre les cases jouées par le joueur physique et les cases jouées par le joueur en ligne. Une fois le bus d'état global créé, il suffit d'effectuer un ET logique avec le choix de notre joueur physique. Si le choix se porte sur une case qui n'a jamais été jouée, le résultat de l'opération logique sera un bus nul. Nous comparons donc ce bus avec un bus nul. &amp;lt;br&amp;gt;&lt;br /&gt;
Finalement, le choix est valide si le comparateur sort une égalité ET le bouton de sélection a été appuyé.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Valider_choix.JPG|vignette|center|600px|Valider|Valider]] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====L'affichage====&lt;br /&gt;
Les schematics d'affichage sont restés les mêmes qu'à la séance 1, mis à part quelques corrections tel l'inversion des sorties d'affichage car nous travaillons en logique inversée sur les portes 3 états.&amp;lt;br&amp;gt;&lt;br /&gt;
Le pré-affichage s'occupe toujours du stockage des cases cochées par le joueur physique si il est le joueur courant.&amp;lt;br&amp;gt;&lt;br /&gt;
Afin d'assurer une persistance rétinienne, on devra relier l'affichage à une horloge d'au moins 3KHz.&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
[[Fichier:Traitement_preaffichage.JPG|vignette|center|500px|Pre-affichage|Pre-affichage]] [[Fichier:Affich.JPG|vignette|center|500px|Affichage|Affichage]] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Simulation de la liaison série====&lt;br /&gt;
Le but est de gérer des données semblables à ce que la raspberry pourrait nous envoyer. A savoir 1 bit de fin de partie, 1 bit de réception de donnée et 4 bits de choix de case.&amp;lt;br&amp;gt;&lt;br /&gt;
=====Conversion de l'adresse choisie=====&lt;br /&gt;
Il faut faire correspondre les 4 bits reçus à un bus de 9bits, chaque bit correspondant à une case. Ceci revient à faire un traitement similaire à la sélection du joueur physique...&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Traite_adversaire.JPG|vignette|center|400px|Conversion de l'adresse|Conversion de l'adresse]] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Stockage=====&lt;br /&gt;
Maintenant que nous savons convertir une adresse, on doit pouvoir mettre à jour les cases jouées par le joueur en ligne sur chaque réception de donnée.&amp;lt;br&amp;gt;&lt;br /&gt;
Pour effectuer ceci, on utilise 9 bascules pour stocker les choix dans différentes cases. Aucun traitement de choix valide n'est à faire car la raspberry s'en occupe déjà de son côté.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Stock_adv.JPG|vignette|center|600px|Stockage des cases de l'adversaire|Stockage des cases de l'adversaire]] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Propre à la simulation=====&lt;br /&gt;
Pour générer l'adresse, on utilise le même principe de sélection que celui du joueur physique.&amp;lt;br&amp;gt;&lt;br /&gt;
Pour avoir un aspect visuel de cette sélection, on utilise un MUX qui, en fonction du joueur courant, afficher la sélection de tel ou tel joueur.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Traite_sel.JPG|vignette|center|600px|MUX de selection|MUX de la sélection]] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour ce qui est du bit de fin de parti, on le symbolise par un bouton.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Phénomène de rebond=====&lt;br /&gt;
Pour gérer le rebond des boutons poussoirs, la solution a été numérique. Un registre à décalage a été créé, cadencé sur une clock, il décale sur chaque front d'horloge la valeur courante d'un bouton. En utilisant un comparateur, on obtient alors un front montant seulement lorsque le bouton est dans un état stable (c'est à dire lorsque tous les bits ont la même valeurs)&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Dump.JPG|vignette|center|600px|Anti-rebond|Anti-rebond]] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====TOPLEVEL====&lt;br /&gt;
Le schéma TOPLEVEL est alors le suivant :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Toplevel.JPG|vignette|center|800px|TOPLEVEL|TOPLEVEL]] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ainsi, si nous avions eu le bloc de liaison série bidirectionnel, nous aurions simplement eu à :&lt;br /&gt;
* Remplacer la génération d'adresse par les 4bits de poids faible du message de 8bits reçu.&lt;br /&gt;
* Remplacer le bouton de reset par le bit de fin de partie.&lt;br /&gt;
* Remplacer le bit de choix de l'adversaire par celui de réception validée.&lt;br /&gt;
* Relier le bit d'émission à la sortie de &amp;quot;choix valide&amp;quot;.&lt;br /&gt;
* Relier la sélection du joueur physique aux données à transmettre.&lt;br /&gt;
* Enlever le multiplexage de la sélection.&lt;br /&gt;
&lt;br /&gt;
====Réflexion====&lt;br /&gt;
La partie électronique de ce projet a donc été menée à bout. Cependant, après coup, on se rend compte que la création d'un prototype aurait été meilleure en imprimant un PCB plutôt qu'en utilisant une piste à bandes.&amp;lt;br&amp;gt;&lt;br /&gt;
Nous aurions également pu éviter une configuration en parallèle du driver. Ainsi, à l'aide de registres à décalages alimentés en externe, la lisibilité du circuit aurait été meilleure.&amp;lt;br&amp;gt;&lt;br /&gt;
On peut néanmoins se satisfaire de la réalisation numérique du circuit car elle exploite toutes les possibilités qu'offrent la conception via schematics à l'aide d'Altium designer à savoir :&amp;lt;br&amp;gt;&lt;br /&gt;
* La création d'une bibliothèque&lt;br /&gt;
* La création de composants&lt;br /&gt;
* L'utilisation de composants configurables avec édition de pins&amp;lt;br&amp;gt;&lt;br /&gt;
D'ailleurs, on comprend d'autant plus l'intérêt du langage VHDL après la création d'autant de schematics pour un projet de cette envergure.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Partie informatique ===&lt;br /&gt;
Nous avons commencé cette séance en continuant le morpion.html&lt;br /&gt;
Dans un premier temps nous avons crée &amp;quot;l'espace de jeu&amp;quot; en utilisant du code trouvé sur internet :&lt;br /&gt;
 &amp;lt;!DOCTYPE html&amp;gt;&lt;br /&gt;
  &amp;lt;head&amp;gt;&lt;br /&gt;
   &amp;lt;meta charset=&amp;quot;utf-8&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;style type=&amp;quot;text/css&amp;quot;&amp;gt;&lt;br /&gt;
 .table{&lt;br /&gt;
 width : 330px;&lt;br /&gt;
 height : 330px;&lt;br /&gt;
 border : solid 3px black;&lt;br /&gt;
  border-collapse: collapse;&lt;br /&gt;
 }&lt;br /&gt;
 .td{&lt;br /&gt;
 border : solid 3px black;&lt;br /&gt;
 width : 33%;&lt;br /&gt;
 height : 33%;&lt;br /&gt;
 }&lt;br /&gt;
 &amp;lt;/style&amp;gt;&lt;br /&gt;
 &amp;lt;title&amp;gt; Jeu morpion&amp;lt;/title&amp;gt;&lt;br /&gt;
 &amp;lt;/head&amp;gt;&lt;br /&gt;
et&lt;br /&gt;
 &amp;lt;body&amp;gt;&lt;br /&gt;
   h1&amp;gt;Morpion&amp;lt;/h1&amp;gt;&lt;br /&gt;
 table class=&amp;quot;table&amp;quot; align=&amp;quot;center&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
       &amp;lt;td class=&amp;quot;td&amp;quot; onclick=&amp;quot;placerSigne(0)&amp;quot; id=&amp;quot;0&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
       &amp;lt;td class=&amp;quot;td&amp;quot; onclick=&amp;quot;placerSigne(1)&amp;quot; id=&amp;quot;1&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
       &amp;lt;td class=&amp;quot;td&amp;quot; onclick=&amp;quot;placerSigne(2)&amp;quot; id=&amp;quot;2&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
       &amp;lt;td class=&amp;quot;td&amp;quot; onclick=&amp;quot;placerSigne(3)&amp;quot; id=&amp;quot;3&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
       &amp;lt;td class=&amp;quot;td&amp;quot; onclick=&amp;quot;placerSigne(4)&amp;quot; id=&amp;quot;4&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
       &amp;lt;td class=&amp;quot;td&amp;quot; onclick=&amp;quot;placerSigne(5)&amp;quot; id=&amp;quot;5&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
       &amp;lt;td class=&amp;quot;td&amp;quot; onclick=&amp;quot;placerSigne(6)&amp;quot; id=&amp;quot;6&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
       &amp;lt;td class=&amp;quot;td&amp;quot; onclick=&amp;quot;placerSigne(7)&amp;quot; id=&amp;quot;7&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
       &amp;lt;td class=&amp;quot;td&amp;quot; onclick=&amp;quot;placerSigne(8)&amp;quot; id=&amp;quot;8&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
 &amp;lt;/table&amp;gt;&lt;br /&gt;
 table style=&amp;quot;border : solid 3px #3399FF;&amp;quot; align=&amp;quot;center&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;tr&amp;gt;&lt;br /&gt;
 &amp;lt;td style=&amp;quot;border : solid 1px #3399FF;&amp;quot;&amp;gt;Joueur 1&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;td style=&amp;quot;border : solid 1px #3399FF;&amp;quot;&amp;gt;Joueur 2&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
 &amp;lt;tr&amp;gt;&lt;br /&gt;
 &amp;lt;td style=&amp;quot;border : solid 1px #3399FF;&amp;quot; id=&amp;quot;scre1&amp;quot;&amp;gt;0&lt;br /&gt;
 &amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;td style=&amp;quot;border : solid 1px #3399FF;&amp;quot; id=&amp;quot;scre2&amp;quot;&amp;gt;0&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
 &amp;lt;/table&amp;gt;&lt;br /&gt;
  &amp;lt;/body&amp;gt;&lt;br /&gt;
 &amp;lt;/html&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le code ci dessus n'est pas totalement bon, puisque nous avons du enlever des &amp;quot;&amp;lt;&amp;quot; afin d'afficher le code et non ce qu'il en résulte.&lt;br /&gt;
&lt;br /&gt;
L'espacement entre deux lignes peut changer en fonction de la taille de ce qui est mis dedans.&lt;br /&gt;
Si on remplis de case blanche (&amp;quot;vide.png&amp;quot;) de taille 100*100 on obtient:&lt;br /&gt;
[[Fichier:morpion1.png]]&lt;br /&gt;
&lt;br /&gt;
A chaque clique sur une case la fonction placerSigne(n) va s'effectuer avec n le numéros de la case sélectionnée.&lt;br /&gt;
 function placerSigne(idCase)&lt;br /&gt;
 { &lt;br /&gt;
         if(morpion[idCase] == 0)&lt;br /&gt;
         {coup++;&lt;br /&gt;
         morpion[idCase]=joueur;&lt;br /&gt;
         if (joueur==1)&lt;br /&gt;
                 {&lt;br /&gt;
  	  	 joueur=2;&lt;br /&gt;
                 document.getElementById(idCase).innerHTML = '&amp;lt;img src=&amp;quot;croix.gif&amp;quot; alt=&amp;quot;image !&amp;quot; /&amp;gt;';&lt;br /&gt;
 &lt;br /&gt;
                 }&lt;br /&gt;
 	else    {&lt;br /&gt;
 	   	 joueur=1;&lt;br /&gt;
                 document.getElementById(idCase).innerHTML = '&amp;lt;img src=&amp;quot;rond.gif&amp;quot; alt=&amp;quot;image !&amp;quot; /&amp;gt;';&lt;br /&gt;
 &lt;br /&gt;
                 }&lt;br /&gt;
 	if (coup&amp;gt;4)&lt;br /&gt;
 		{if (gagner(idCase))&lt;br /&gt;
 			{if (joueur==1)&lt;br /&gt;
 				{score2++;&lt;br /&gt;
 				alert(&amp;quot;joueur 2 gagne &amp;quot;);&lt;br /&gt;
 				finpartie();&lt;br /&gt;
 				}&lt;br /&gt;
 			else{score1++;&lt;br /&gt;
 				alert(&amp;quot;joueur 1 gagne &amp;quot;);&lt;br /&gt;
 				finpartie();&lt;br /&gt;
 				}&lt;br /&gt;
 			&lt;br /&gt;
 			}&lt;br /&gt;
 		else {if (egalite()==0)&lt;br /&gt;
 			{alert(&amp;quot;egalite&amp;quot;);&lt;br /&gt;
 			finpartie();}&lt;br /&gt;
 		     }&lt;br /&gt;
 		}&lt;br /&gt;
         }&lt;br /&gt;
         else{alert(&amp;quot;pas le droit&amp;quot;);}&lt;br /&gt;
 }&lt;br /&gt;
Cette fonction place une image 100x100 de rond ou de croix dans la case sélectionnée en fonction du joueur qui doit jouer.&lt;br /&gt;
*Elle calcule les scores de chaque joueurs, et appelle gagner et egalite pour savoir si on est dans une fin de partie.&lt;br /&gt;
*Et elle alerte le joueur si la case sélectionnée ne peut pas être jouée.&lt;br /&gt;
&lt;br /&gt;
Pour cela elle utilise le tableau morpion de taille 9 remplit de 0 à l'origine, et modifie la case sélectionnée en y mettant 1 ou 2 en fonction du joueur qui a joué.&lt;br /&gt;
&lt;br /&gt;
La variable coup permet de déterminer le nombre de coup jouer, ce qui permet de ne pas verifier si une partie une gagnée tant que coup n'est pas supérieur à 4, puisqu'il faut au minimum 5 coup pour gagner.&lt;br /&gt;
&lt;br /&gt;
 function finpartie()&lt;br /&gt;
 {for (var j=0;j&amp;lt;9;j++)&lt;br /&gt;
 	{ document.getElementById(j).innerHTML = '&amp;lt;img src=&amp;quot;vide.png&amp;quot; alt=&amp;quot;image !&amp;quot; /&amp;gt;';&lt;br /&gt;
 	morpion[j]=0;&lt;br /&gt;
 	}&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
La fonction finpartie() met les variables morpion et coup à zéro, et place des images blanches dans toutes les cases.&lt;br /&gt;
&lt;br /&gt;
Elle est appelé que si il y une victoire ou une égalité.&lt;br /&gt;
&lt;br /&gt;
Dans morpionsc.html qui est le fichier html final, joueur est remis à 1 dans cette fonction.&lt;br /&gt;
&lt;br /&gt;
Dans le fichier morpion.html cela n’étais pas cessionnaire et permettait en plus au joueur perdant de commencer.&lt;br /&gt;
&lt;br /&gt;
Mais pour simplifier la suite nous avons préféré définir que toujours le même joueur commencerais. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 function gagner(idCase)&lt;br /&gt;
 {switch(idCase)&lt;br /&gt;
         {&lt;br /&gt;
 case 0:&lt;br /&gt;
         return (diagonal1()||ligne1()||colonne1());&lt;br /&gt;
         break;&lt;br /&gt;
 case 1:&lt;br /&gt;
         return (ligne1()||colonne2());&lt;br /&gt;
         break;&lt;br /&gt;
 case 2:&lt;br /&gt;
         return (diagonal2()||ligne1()||colonne3());&lt;br /&gt;
         break;&lt;br /&gt;
 case 3:&lt;br /&gt;
         return (ligne2()||colonne1());&lt;br /&gt;
         break; &lt;br /&gt;
 &lt;br /&gt;
 case 4:&lt;br /&gt;
         return (diagonal1()||diagonal2()||ligne2()||colonne2());&lt;br /&gt;
         break;&lt;br /&gt;
 case 5:&lt;br /&gt;
         return (ligne2()||colonne3());&lt;br /&gt;
         break;&lt;br /&gt;
 case 6:&lt;br /&gt;
         return (diagonal2()||ligne3()||colonne1());&lt;br /&gt;
         break;&lt;br /&gt;
 case 7:&lt;br /&gt;
         return (ligne3()||colonne2());&lt;br /&gt;
         break;&lt;br /&gt;
 case 8:&lt;br /&gt;
         return (diagonal1()||ligne3()||colonne3());&lt;br /&gt;
         break;&lt;br /&gt;
         }&lt;br /&gt;
 }&lt;br /&gt;
La fonction gagner appelle des fonctions diagonal,ligne,colonne qui retourne 1 si il y'a 3 même symboles sur leur domaines.&lt;br /&gt;
&lt;br /&gt;
Gagner teste donc si il y a une suite de 3 symboles sur la ligne, colonne et les diagonales passant par la case qui a été joué.&lt;br /&gt;
&lt;br /&gt;
 function egalite()&lt;br /&gt;
 {var cp=0;&lt;br /&gt;
 for (var i=0;i &amp;lt; 9;i++)&lt;br /&gt;
         {if (morpion[i]==0)&lt;br /&gt;
 		{cp++;}&lt;br /&gt;
         }&lt;br /&gt;
 return cp;&lt;br /&gt;
 }&lt;br /&gt;
La fonction egalité teste si toutes les cases ont été joué.&lt;br /&gt;
&lt;br /&gt;
On aurait pu utiliser la variable coup, si coup était égal à 9 alors égalité, mais la fonction egalité permet de vérifier si il n'y a pas eu de problème lors de la modification de la matrice.&lt;br /&gt;
&lt;br /&gt;
Avec morpion.html nous avons pu apprendre le javascript, et poser les bases de notre fichier html final.&lt;br /&gt;
&lt;br /&gt;
===Complément à la séance 3===&lt;br /&gt;
&lt;br /&gt;
====HTML====&lt;br /&gt;
Pour le HTML/Javascript on garde les mêmes fonctions gagner et egalite.&lt;br /&gt;
On va ajouter lors de l'initialisation&lt;br /&gt;
 window.WebSocket=(window.WebSocket||window.MozWebSocket);&lt;br /&gt;
 &lt;br /&gt;
 var websocket=new WebSocket('ws://172.26.79.12:9000','myprotocol');&lt;br /&gt;
 &lt;br /&gt;
 websocket.onopen=function(){ $('h1').css('color','green'); };&lt;br /&gt;
 &lt;br /&gt;
 websocket.onerror=function(){ $('h1').css('color','red'); };&lt;br /&gt;
On modifie placerSigne:&lt;br /&gt;
*si ce n'est pas au tour du joueur 1 de jouer on lui envoie une alerte.&lt;br /&gt;
*si il y a une fin de partie on envoie 9 grâce a sendMessage.&lt;br /&gt;
*si il n'y a pas de fin de partie on envoie la case jouer toujours grâce à sendMessage:&lt;br /&gt;
 function sendMessage(data){&lt;br /&gt;
 websocket.send(data);&lt;br /&gt;
 }&lt;br /&gt;
Pour finpartie on rajoute juste &lt;br /&gt;
 joueur=1;&lt;br /&gt;
&lt;br /&gt;
Pour faire jouer le second joueur il faut recevoir un message du websocket ainsi :&lt;br /&gt;
 websocket.onmessage=function(message)&lt;br /&gt;
sera la fonction dans laquelle on fera jouer le joueur 2. &lt;br /&gt;
&lt;br /&gt;
Le websocket envoie simplement la case en char* ainsi:&lt;br /&gt;
 websocket.onmessage=function(message){&lt;br /&gt;
 idCase=parseInt((message.data)-30);&lt;br /&gt;
 console.log(idCase);&lt;br /&gt;
 &lt;br /&gt;
 if(morpion[idCase] == 0)&lt;br /&gt;
                 {coup++;&lt;br /&gt;
                  morpion[idCase]=2;&lt;br /&gt;
                  joueur=1;&lt;br /&gt;
  		document.getElementById(idCase).innerHTML = '&amp;lt;img src=&amp;quot;rond.gif&amp;quot; alt=&amp;quot;image !&amp;quot; /&amp;gt;';&lt;br /&gt;
  		 if (coup&amp;gt;4)&lt;br /&gt;
 			 {if (gagner(idCase))&lt;br /&gt;
                                {score2++; &lt;br /&gt;
                                         alert(&amp;quot;joueur 2 gagne &amp;quot;);&lt;br /&gt;
                                         finpartie();&lt;br /&gt;
 					sendMessage(9);&lt;br /&gt;
                                }&lt;br /&gt;
  &lt;br /&gt;
 &lt;br /&gt;
                           else {if (egalite()==0)&lt;br /&gt;
                                         {alert(&amp;quot;egalite&amp;quot;);&lt;br /&gt;
                                         finpartie();&lt;br /&gt;
 					sendMessage(9);&lt;br /&gt;
 &lt;br /&gt;
                                         }&lt;br /&gt;
 				}&lt;br /&gt;
 			&lt;br /&gt;
 			}&lt;br /&gt;
 		}&lt;br /&gt;
 &lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Console.log permet d'afficher dans le debug, la valeur traitée.&lt;br /&gt;
On envoie toujours 9 si la partie se termine, sinon on effectue la même chose que dans placerSigne de morpion.html&lt;br /&gt;
&lt;br /&gt;
====Fichier C====&lt;br /&gt;
Il faut maintenant créer la passerelle entre l'arduino et le fichier html.&lt;br /&gt;
Pour cela notre fichier doit utiliser des fonctions de websocket mais aussi de serial.c&lt;br /&gt;
Les fonctions de serial.c sont directement intégrées dans notre fichier, il n'y a donc pas besoin de lui faire appel pour compiler.&lt;br /&gt;
 &lt;br /&gt;
 #include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;stdlib.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;string.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;unistd.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;fcntl.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;termios.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;strings.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;sys/types.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;sys/ioctl.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;sys/file.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;linux/serial.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;libwebsockets.h&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 #define MAX_FRAME_SIZE  1024&lt;br /&gt;
 #define WAIT_DELAY      50&lt;br /&gt;
 #define MAX_MESSAGE     2 &lt;br /&gt;
 &lt;br /&gt;
 #define SERIAL_READ 0&lt;br /&gt;
 #define SERIAL_WRITE 1&lt;br /&gt;
 #define SERIAL_BOTH 2&lt;br /&gt;
 &lt;br /&gt;
 #define SERIAL_DEVICE &amp;quot;/dev/ttyUSB0&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 int sd;&lt;br /&gt;
  &lt;br /&gt;
 &lt;br /&gt;
 //&lt;br /&gt;
 // Open serial port device&lt;br /&gt;
 //&lt;br /&gt;
 int serialOpen(char *device,int mode){&lt;br /&gt;
 int flags=(mode==SERIAL_READ?O_RDONLY:(mode==SERIAL_WRITE?O_WRONLY:O_RDWR));&lt;br /&gt;
 int fd=open(device,flags|O_NOCTTY|O_NONBLOCK); &lt;br /&gt;
 if(fd&amp;lt;0){ perror(device); exit(-1); }&lt;br /&gt;
 return fd;&lt;br /&gt;
 }&lt;br /&gt;
  &lt;br /&gt;
 //&lt;br /&gt;
 // Serial port configuration&lt;br /&gt;
 //&lt;br /&gt;
 void serialConfig(int fd,int speed){&lt;br /&gt;
 struct termios new;&lt;br /&gt;
 bzero(&amp;amp;new,sizeof(new));&lt;br /&gt;
 new.c_cflag=CLOCAL|CREAD|speed|CS8;&lt;br /&gt;
 new.c_iflag=0;&lt;br /&gt;
 new.c_oflag=0;&lt;br /&gt;
 new.c_lflag=0;     /* set input mode (non-canonical, no echo,...) */&lt;br /&gt;
 new.c_cc[VTIME]=0; /* inter-character timer unused */&lt;br /&gt;
 new.c_cc[VMIN]=1;  /* blocking read until 1 char received */&lt;br /&gt;
 if(tcsetattr(fd,TCSANOW,&amp;amp;new)&amp;lt;0){ perror(&amp;quot;serialInit.tcsetattr&amp;quot;); exit(-1); }&lt;br /&gt;
 }&lt;br /&gt;
  &lt;br /&gt;
 //&lt;br /&gt;
 // Serial port termination&lt;br /&gt;
 //&lt;br /&gt;
 void serialClose(int fd){&lt;br /&gt;
 close(fd);&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 static int callback_http(&lt;br /&gt;
   struct libwebsocket_context *this,&lt;br /&gt;
   struct libwebsocket *wsi,enum libwebsocket_callback_reasons reason,&lt;br /&gt;
   void *user,void *in,size_t len)&lt;br /&gt;
 {&lt;br /&gt;
 return 0;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
  static struct libwebsocket_protocols protocols[] = {&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;http-only&amp;quot;,   // name&lt;br /&gt;
      callback_http, // callback&lt;br /&gt;
      0,             // data size&lt;br /&gt;
      0              // maximum frame size&lt;br /&gt;
    },&lt;br /&gt;
    {&amp;quot;myprotocol&amp;quot;,callback_my,0,MAX_FRAME_SIZE},&lt;br /&gt;
    {NULL,NULL,0,0}&lt;br /&gt;
    };&lt;br /&gt;
  &lt;br /&gt;
 &lt;br /&gt;
Ci-dessus se trouve le code se trouvant dans serial.c afin de créer serialOpen, serialClose et serialConfig, ainsi que l'initialisation de variables utilisées.&lt;br /&gt;
&lt;br /&gt;
Mais aussi la fonction callback_http(),la structure libwebsocket_protocols, et l'initialisation de variables. &lt;br /&gt;
 &lt;br /&gt;
 int main(void) {&lt;br /&gt;
 int port=9000;&lt;br /&gt;
 struct lws_context_creation_info info;&lt;br /&gt;
 memset(&amp;amp;info,0,sizeof info);&lt;br /&gt;
 info.port=port;&lt;br /&gt;
 info.protocols=protocols;&lt;br /&gt;
 info.gid=-1;&lt;br /&gt;
 info.uid=-1;&lt;br /&gt;
 struct libwebsocket_context *context=libwebsocket_create_context(&amp;amp;info);&lt;br /&gt;
 if(context==NULL){&lt;br /&gt;
   fprintf(stderr, &amp;quot;libwebsocket init failed\n&amp;quot;);&lt;br /&gt;
   return -1;&lt;br /&gt;
   }&lt;br /&gt;
 printf(&amp;quot;starting server...\n&amp;quot;);&lt;br /&gt;
 &lt;br /&gt;
   &lt;br /&gt;
 sd=serialOpen(SERIAL_DEVICE,SERIAL_BOTH);&lt;br /&gt;
 serialConfig(sd,B9600);&lt;br /&gt;
 &lt;br /&gt;
  &lt;br /&gt;
 while(1){&lt;br /&gt;
   libwebsocket_service(context,WAIT_DELAY);&lt;br /&gt;
   }&lt;br /&gt;
     &lt;br /&gt;
 &lt;br /&gt;
 serialClose(sd); &lt;br /&gt;
 &lt;br /&gt;
  &lt;br /&gt;
 libwebsocket_context_destroy(context);&lt;br /&gt;
 return 0;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Le main permet d'initialiser une liaison série de 9600 Baud et de lancer une boucle infini dans laquelle la passerelle entre arduino et html va s'effectuer.&lt;br /&gt;
&lt;br /&gt;
 static int callback_my(&lt;br /&gt;
   struct libwebsocket_context * this,&lt;br /&gt;
   struct libwebsocket *wsi,enum libwebsocket_callback_reasons reason,&lt;br /&gt;
   void *user,void *in,size_t len)&lt;br /&gt;
 {&lt;br /&gt;
 static char message[2+LWS_SEND_BUFFER_PRE_PADDING+LWS_SEND_BUFFER_POST_PADDING];&lt;br /&gt;
 static char valeur;&lt;br /&gt;
 switch(reason){&lt;br /&gt;
   case LWS_CALLBACK_ESTABLISHED:&lt;br /&gt;
     printf(&amp;quot;connection established\n&amp;quot;);&lt;br /&gt;
                 // Declenchement d'un prochain envoi au navigateur&lt;br /&gt;
     break;&lt;br /&gt;
   case LWS_CALLBACK_RECEIVE:&lt;br /&gt;
                 // Ici sont traites les messages envoyes par le navigateur&lt;br /&gt;
 //printf(&amp;quot;received data: %s\n&amp;quot;,(char *)in);&lt;br /&gt;
     if(write(sd,in,sizeof(char))!=1){ perror(&amp;quot;main.write&amp;quot;); exit(-1); }&lt;br /&gt;
 printf(&amp;quot;writen data: %s\n&amp;quot;,(char *)in);&lt;br /&gt;
                 // Declenchement d'un prochain envoi au navigateur&lt;br /&gt;
     libwebsocket_callback_on_writable(this,wsi);&lt;br /&gt;
     break;&lt;br /&gt;
   case LWS_CALLBACK_SERVER_WRITEABLE:&lt;br /&gt;
                 // Ici sont envoyes les messages au navigateur&lt;br /&gt;
 &lt;br /&gt;
 if (read(sd,&amp;amp;valeur,sizeof(char))==1)&lt;br /&gt;
 { &lt;br /&gt;
 //printf(&amp;quot;write data: %c\n&amp;quot;,valeur);&lt;br /&gt;
       char *out=message+LWS_SEND_BUFFER_PRE_PADDING;&lt;br /&gt;
        sprintf(out,&amp;quot;%02x&amp;quot;,valeur);&lt;br /&gt;
 //printf(&amp;quot;write data: %s\n&amp;quot;,(char *)out);&lt;br /&gt;
 &lt;br /&gt;
     libwebsocket_write(wsi,(unsigned char *)out,MAX_MESSAGE,LWS_WRITE_TEXT);&lt;br /&gt;
 }&lt;br /&gt;
 else{libwebsocket_callback_on_writable(this,wsi);&lt;br /&gt;
 }&lt;br /&gt;
     break;&lt;br /&gt;
   default:&lt;br /&gt;
     break;&lt;br /&gt;
        	  }   &lt;br /&gt;
 return 0;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
La fonction ci-dessus est celle qui definie la passerelle.&lt;br /&gt;
&lt;br /&gt;
Si elle établit une liaison, elle imprime &amp;quot;connection established&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Une fois la connection établit on se retrouve dans le cas LWS_CALLBACK_RECEIVE si la page html envoie une valeur.&lt;br /&gt;
&lt;br /&gt;
Dans ce cas la valeur pointée par in est écrite dans sd(liaison serie), puis on utilise :&lt;br /&gt;
 libwebsocket_callback_on_writable(this,wsi);&lt;br /&gt;
&lt;br /&gt;
Qui permet de passer en mode réception de message par la liaison série, qui est definit ici par le cas:&lt;br /&gt;
 case LWS_CALLBACK_SERVER_WRITEABLE:&lt;br /&gt;
Dans ce cas on lit la valeur dans la liaison serie et on la met dans la variable valeur. Si il n'y a rien à lire pour le moment on utilise a nouveau:&lt;br /&gt;
 libwebsocket_callback_on_writable(this,wsi);&lt;br /&gt;
Afin de rester dans le même case.&lt;br /&gt;
&lt;br /&gt;
Si la valeur a été lu on crée out:&lt;br /&gt;
  char *out=message+LWS_SEND_BUFFER_PRE_PADDING;&lt;br /&gt;
avec message :&lt;br /&gt;
 static char message[2+LWS_SEND_BUFFER_PRE_PADDING+LWS_SEND_BUFFER_POST_PADDING];&lt;br /&gt;
out va etre du bon type et de la bonne taille pour pouvoir être envoyer a l'html.&lt;br /&gt;
On modife donc la valeur de out grâce à la valeur lue:&lt;br /&gt;
 sprintf(out,&amp;quot;%02x&amp;quot;,valeur);&lt;br /&gt;
Puis on l'envoie:&lt;br /&gt;
 libwebsocket_write(wsi,(unsigned char *)out,MAX_MESSAGE,LWS_WRITE_TEXT);&lt;br /&gt;
&lt;br /&gt;
====Arduino====&lt;br /&gt;
Pour l'affichage de la matrice LED nous avons utilisé un exemple trouvé sur le site de SparkFun Electronics:&lt;br /&gt;
 //Example_RGBMatrix.ino&lt;br /&gt;
 //By: Ryan Owens @ SparkFun Electronics&lt;br /&gt;
 //&lt;br /&gt;
 //modified 27 Oct 2014&lt;br /&gt;
 //by Bobby Chan @ SparkFun Electronics&lt;br /&gt;
&lt;br /&gt;
Nous avons ensuite crée:&lt;br /&gt;
&lt;br /&gt;
 void affichage(int je[3][3])&lt;br /&gt;
 {&lt;br /&gt;
   for (int i = 0; i &amp;lt; 3; i++)&lt;br /&gt;
   {&lt;br /&gt;
     for (int j = 0; j &amp;lt; 3; j++)&lt;br /&gt;
     { if (je[i][j] == 1)&lt;br /&gt;
       {&lt;br /&gt;
         color_buffer[0 + i + j * 8] = BLUE;&lt;br /&gt;
       }&lt;br /&gt;
       else if (je[i][j] == 2)&lt;br /&gt;
       {&lt;br /&gt;
         color_buffer[0 + i + j * 8] = RED;&lt;br /&gt;
       }&lt;br /&gt;
       else if (je[i][j] == 5)&lt;br /&gt;
       {&lt;br /&gt;
         color_buffer[0 + i + j * 8] = TEAL;&lt;br /&gt;
       }&lt;br /&gt;
       else if (je[i][j] == 4)&lt;br /&gt;
       {&lt;br /&gt;
         color_buffer[0 + i + j * 8] = GREEN;&lt;br /&gt;
       }&lt;br /&gt;
       else if (je[i][j] == 3) {&lt;br /&gt;
         color_buffer[0 + i + j * 8] = MAGENTA;&lt;br /&gt;
       }&lt;br /&gt;
       else if (je[i][j] == 0) {&lt;br /&gt;
         color_buffer[0 + i + j * 8] = BLACK;&lt;br /&gt;
       }&lt;br /&gt;
     }&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
Qui change la valeur des buffers sur une matrice 3x3, en fonction d'une matrice donnée en paramètre de taille 3x3.&lt;br /&gt;
&lt;br /&gt;
Il faut ensuite matrix_write(); pour observer les resultats&lt;br /&gt;
 &lt;br /&gt;
 void go(int joueur)&lt;br /&gt;
 {if (joueur==2)&lt;br /&gt;
 {color_buffer[7]=GREEN;}&lt;br /&gt;
 else{color_buffer[7]=RED;}}&lt;br /&gt;
Cette fonction met un buffer vert si le joueur 2 peut jouer sinon rouge, le buffer se trouve en dehors de la zone de jeu et donc ne gène pas l'utilisateur.&lt;br /&gt;
&lt;br /&gt;
Il faut ensuite matrix_write(); pour observer les resultats&lt;br /&gt;
&lt;br /&gt;
 void reset(int jeu[3][3])&lt;br /&gt;
 { joueur = 0;&lt;br /&gt;
 color_buffer[7]=RED;&lt;br /&gt;
   for (int i = 0; i &amp;lt; 3; i++)&lt;br /&gt;
   {&lt;br /&gt;
     for (int j = 0; j &amp;lt; 3; j++)&lt;br /&gt;
     { jeu[i][j] = 0;&lt;br /&gt;
     }&lt;br /&gt;
   }&lt;br /&gt;
   jeu[0][0] = 1;&lt;br /&gt;
 }&lt;br /&gt;
Cette fonction remet dispose la matrice LED comme lors d'un début de partie.&lt;br /&gt;
On aurait pu remettre a zéro certaines variables dans cette fonction.&lt;br /&gt;
&lt;br /&gt;
Une fois ces fonctions crées, il faut crée la fonction loop:&lt;br /&gt;
 void loop() {&lt;br /&gt;
   go(joueur);&lt;br /&gt;
   if (Serial.available() &amp;gt; 0)&lt;br /&gt;
   { int a = (Serial.read() - 48);&lt;br /&gt;
     if (a == 9) {&lt;br /&gt;
       reset(jeu);&lt;br /&gt;
     }&lt;br /&gt;
     else {&lt;br /&gt;
       if (joueur == 0)&lt;br /&gt;
       { int b = (a) / 3;&lt;br /&gt;
         int c = a - (b) * 3;&lt;br /&gt;
         jeu[b][c] = 2;&lt;br /&gt;
         joueur = 2;&lt;br /&gt;
         if (jeu[0][0] == 2)&lt;br /&gt;
         {&lt;br /&gt;
           jeu[0][0] = 3;&lt;br /&gt;
         }&lt;br /&gt;
       }&lt;br /&gt;
     }&lt;br /&gt;
   }&lt;br /&gt;
   else {&lt;br /&gt;
     if (joueur == 2)&lt;br /&gt;
     { if (digitalRead(9) == 1)&lt;br /&gt;
       { jeu[l][h] = jeu[l][h] - 1;&lt;br /&gt;
         h = (h + 1) % 3;&lt;br /&gt;
         jeu[l][h]++;&lt;br /&gt;
         delay(50);&lt;br /&gt;
       }&lt;br /&gt;
       else if (digitalRead(8) == 1)&lt;br /&gt;
       {&lt;br /&gt;
         jeu[l][h] = jeu[l][h] - 1;&lt;br /&gt;
         l = (l + 1) % 3;&lt;br /&gt;
         jeu[l][h]++;&lt;br /&gt;
         delay(50);&lt;br /&gt;
       }&lt;br /&gt;
       else if (digitalRead(7) == 1)&lt;br /&gt;
       {&lt;br /&gt;
         if (jeu[l][h] == 1)&lt;br /&gt;
         { jeu[l][h] = 4;&lt;br /&gt;
           Serial.write((l * 3 + h) + 48);&lt;br /&gt;
 &lt;br /&gt;
           l = 0;&lt;br /&gt;
           h = 0;&lt;br /&gt;
           jeu[l][h] = jeu[l][h] + 1;&lt;br /&gt;
           joueur = 0;&lt;br /&gt;
         }&lt;br /&gt;
       }&lt;br /&gt;
     }&lt;br /&gt;
   }&lt;br /&gt;
 &lt;br /&gt;
   affichage(jeu);&lt;br /&gt;
   matrix_write();&lt;br /&gt;
   delay(100);&lt;br /&gt;
 }&lt;br /&gt;
Cette fonction utilise en premier lieu go() pour indiquer au joueur si il peut jouer.&lt;br /&gt;
Ensuite il vérifie la liaison série.&lt;br /&gt;
&lt;br /&gt;
On enlève 48 a ce que l'on a reçut, car on reçoit un char et on désire un int.&lt;br /&gt;
&lt;br /&gt;
Ainsi on ajoutera 48 a ce qu'on enverra dans le Serial.write.&lt;br /&gt;
&lt;br /&gt;
Si on reçoit 9, fin de partie.&lt;br /&gt;
Sinon on vérifie qui doit jouer et on le fais jouer si on peut ou on attend. &lt;br /&gt;
&lt;br /&gt;
Le Joueur 0 équivaut au joueur 1 pour l'html.&lt;br /&gt;
&lt;br /&gt;
Une fois les coups effectués, on affiche ce qui en résulte et ajoute un delay pour éviter d'appuyer deux fois d'affilée sans le vouloir.&lt;br /&gt;
&lt;br /&gt;
En reliant en série notre arduino en USB à notre raspberry, nous pouvons jouer aux morpions à deux , un sur l'arduino à l'aide de bouton poussoir , et l'autre sur une page html grâce à sa souris.&lt;br /&gt;
&lt;br /&gt;
== Démonstration ==&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;/div&gt;</summary>
		<author><name>Tstieven</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Projet_IMA3_P1,_2015/2016,_TD2&amp;diff=32313</id>
		<title>Projet IMA3 P1, 2015/2016, TD2</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Projet_IMA3_P1,_2015/2016,_TD2&amp;diff=32313"/>
				<updated>2016-06-16T23:12:15Z</updated>
		
		<summary type="html">&lt;p&gt;Tstieven : /* Arduino */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Projet IMA3-SC 2015/2016 : MORPION =&lt;br /&gt;
&lt;br /&gt;
== Cahier des charges ==&lt;br /&gt;
Notre projet &amp;quot;système communicant&amp;quot; aura pour but de créer une interface connectée du &amp;quot;morpion&amp;quot;. L'objectif est de permettre à un joueur interagissant sur un site internet de jouer contre une autre personne qui, elle, jouera à l'aide d'un affichage fait à partir de leds. &lt;br /&gt;
&lt;br /&gt;
Nous cherchons donc à exploiter la capacité asynchrone d'un websocket afin de permettre une partie en temps réel.&lt;br /&gt;
&lt;br /&gt;
=== Matériel ===&lt;br /&gt;
* Une nanoboard&lt;br /&gt;
* Une raspberry pi&lt;br /&gt;
* Une matrice de leds 9x9 ou plus&lt;br /&gt;
* Un clavier numérique ou 9 boutons-poussoirs&lt;br /&gt;
* Des ordinateurs avec les logiciels de développement nécessaires &lt;br /&gt;
&lt;br /&gt;
=== Optionnel ===&lt;br /&gt;
* Un buzzer afin d'avertir le joueur d'un choix incohérent&lt;br /&gt;
* Trois afficheurs sept segments afin d'ajouter un tableau des scores&lt;br /&gt;
&lt;br /&gt;
== Séance 1 ==&lt;br /&gt;
&lt;br /&gt;
=== Partie électronique ===&lt;br /&gt;
Le but de cette première séance était de se familiariser avec le logiciel de conception Altium Designer et de réfléchir à la façon d'aborder la conception électronique du morpion.&lt;br /&gt;
&lt;br /&gt;
Cette conception se fera en plusieurs étapes :&lt;br /&gt;
&lt;br /&gt;
* gérer le positionnement d'un curseur en fonction de l'état courant de la partie&lt;br /&gt;
* gérer l'affichage de la matrice en fonction des cases remplies / sélectionnées&lt;br /&gt;
* permettre la réception et l'envoie de données à l'aide de la liaison série&lt;br /&gt;
* traiter la remise à zéro du plateau en cas de fin de partie&lt;br /&gt;
&lt;br /&gt;
====Positionnement du curseur et état de la partie====&lt;br /&gt;
&lt;br /&gt;
Dans un premier lieu, il était nécessaire de traiter les actions entrantes. En effet, si ce n'est pas au tour du joueur &amp;quot;physique&amp;quot;, l'utilisation des boutons doit être bloquée.&amp;lt;br&amp;gt;&lt;br /&gt;
Ceci consiste simplement à effectuer un ET logique entre un bit symbolisant le joueur courant (si 1 alors joueur physique, si 0 alors joueur en ligne) et l'action demandée.&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fichier:Choisir.png||center|alt=Schema de choix|Circuit logique de la permission d'action]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Une fois les choix accessibles, il faut désormais les traiter. Le traitement s'effectuera à l'aide de bascules, chaque case comportera deux bascules : une bascule de sélection (la case est-elle sélectionnée ?) et une bascule permettant de savoir si la case a déjà été jouée.&amp;lt;br&amp;gt;&lt;br /&gt;
Si la case a déjà été jouée, il ne faut empêcher l'utilisateur de la jouer.&amp;lt;br&amp;gt;&lt;br /&gt;
Nous considérerons que le joueur en ligne n'effectuera pas de choix erroné et nous testerons seulement les choix du joueur &amp;quot;physique&amp;quot;.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Traitement.png||center|alt=Schema de traitement|Circuit logique du traitement d'une action]] &amp;lt;br&amp;gt;&lt;br /&gt;
Les ronds verts permettent la distinction des 9 cases. &amp;lt;br&amp;gt;&lt;br /&gt;
Le rond jaune correspond à la zone des sorties d'état. Plus précisément, il s'agit de deux bus regroupant les cases remplies et le lieu de la case sélectionnée.&amp;lt;br&amp;gt;&lt;br /&gt;
Le rond noir correspond au choix de l'adversaire.&amp;lt;br&amp;gt;&lt;br /&gt;
Le rond orange correspond à la sortie &amp;quot;selection_done&amp;quot; qui effectue un état haut lorsqu'un choix valide a été fait par l'utilisateur.&amp;lt;br&amp;gt;&lt;br /&gt;
Le rond rouge met en évidence la zone permettant de traiter les décalage du bit de sélection. Ce décalage consiste à garder seulement UNE bascule à l'état haut en effectuant le passage logique d'une bascule à une autre en fonction du choix tout en appliquant un reset sur l'ancienne sélection. Le schéma de ce déplacement se trouve ci-dessous et est appliqué aux 9 cases.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Andor.png||center|alt=Schema permettant le déplacement|Circuit logique utilisé afin de déplacer le curseur]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Complément à la séance 1===&lt;br /&gt;
====Affichage dynamique====&lt;br /&gt;
&lt;br /&gt;
L'un des grands problèmes à la réalisation du morpion sur nanoboard est l'affichage dynamique. En effet, il va falloir à la fois stocker les valeurs, et stocker quel joueur a joué telle ou telle case, afin de savoir quel case s'allumera de la couleur désirée. Ceci rajouté à l'affichage dynamique de la sélection, ceci s'avère compliqué.&amp;lt;br&amp;gt;&lt;br /&gt;
La tâche a alors été décomposée en deux étapes :&lt;br /&gt;
* Le traitement des couleurs (Quelle couleur affilier à quelle case ?)&lt;br /&gt;
* L'affichage de ces couleurs&lt;br /&gt;
=====Traitement des couleurs=====&lt;br /&gt;
&lt;br /&gt;
Le but était de se simplifier au maximum les choses. Le premier problème est de savoir quel joueur a joué une case, pour ceci, nous nous sommes servi de l'état du plateau fourni dans le bloc TRAITEMENT. Nous savons quelles cases sont à 1 et imposons donc une couleur rouge à toutes ces cases.&amp;lt;br&amp;gt;&lt;br /&gt;
De plus, nous savons qu'à chaque fois que le joueur &amp;quot;physique&amp;quot; effectue un choix valide, un front montant est appliqué sur la broche &amp;quot;selection_done&amp;quot; de TRAITEMENT. Nous avons alors re-créé 9 registres symbolisant les cases, mais cette fois ci, en fonction de l'endroit sélectionné par l'utilisateur, si ce dernier effectue un choix valide, le registre passera à 1. Le but de cette manipulation est de recenser tous les registres joués par le joueur physique. &amp;lt;br&amp;gt;&lt;br /&gt;
Maintenant, nous relions ces registres aux valeurs de couleur verte afin d'additionner le vert au rouge  des cases jouées et obtiendrons finalement des cases de couleur jaune pour symboliser les cases du joueur physique et des cases de couleur rouge pour le jouer en ligne. &amp;lt;br&amp;gt;&lt;br /&gt;
Il ne reste qu'à relier directement la case sélectionnée (recensée par le bus Etat_selection de TRAITEMENT) à la couleur bleue.&amp;lt;br&amp;gt;&lt;br /&gt;
Finalement nous avons : &lt;br /&gt;
* joueur en ligne : rouge&lt;br /&gt;
* joueur physique : jaune&lt;br /&gt;
* sélection : magenta, cyan ou bleu&lt;br /&gt;
&lt;br /&gt;
 [[Fichier:Traitement_affichage.png||center|Schéma du traitement pré affichage|Circuit logique du traitement pré-affichage]] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Affichage=====&lt;br /&gt;
&lt;br /&gt;
La matrice led employée est une matrice led à anode commune. Elle a pour avantage de permettre la sélection d'une ligne et de la couleur de chaque colonne.&amp;lt;br&amp;gt;&lt;br /&gt;
Cependant, nous ne pouvons donc choisir la couleur que d'une colonne. C'est pourquoi nous allons faire varier cet affichage ligne par ligne à une fréquence élevée afin que l’œil humain ne le remarque pas. Nous pourrons donc choisir quelle couleur sera affichée sur chaque ligne. &amp;lt;br&amp;gt;&lt;br /&gt;
Cet affichage ligne par ligne sera effectué via un multiplexeur donc le bus de sélection sera relié à un compteur 3bits cadencé sur une clock suffisamment rapide pour opérer une persistance rétinienne. &amp;lt;br&amp;gt;&lt;br /&gt;
Dans chaque bus nous avons imposé certains bits afin que la grille soit dessinée en bleu.&amp;lt;br&amp;gt;&lt;br /&gt;
Le bus multiplexé sera ensuite redirigé vers les pins de la matrice leds.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Affichage.png||center|Schéma d'affichage|Circuit logique de l'affichage]] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Tests====&lt;br /&gt;
&lt;br /&gt;
Le bloc d'affichage a été testé et deux problèmes ont été rencontrés : &lt;br /&gt;
* La sélection a été mal réfléchie&lt;br /&gt;
* Un phénomène de rebond a été remarqué sur l'oscilloscope numérique&lt;br /&gt;
&lt;br /&gt;
=====La sélection=====&lt;br /&gt;
&lt;br /&gt;
Dans la fonction d'affichage, on retourne la sélection de la ligne en logique inversée. Le problème est que dans la version 1.0 de l'affichage, un GND avait été placé en entrée du MUX de sélection. Nous n'avions pas pensé au fait que dans ce cas la, toutes les sorties seraient en permanence au GND... &amp;lt;br&amp;gt;La correction a donc été de placer un VCC en entrée et d'inverser les sorties, ainsi une seul anode de ligne sera placée sur le GND.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Selection.PNG||center|Schéma de selection|Correction de la sortie de selection]] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le schéma semble fonctionnel cependant d'autres tests restent à faire.&lt;br /&gt;
&lt;br /&gt;
=====Le rebond=====&lt;br /&gt;
&lt;br /&gt;
Lors du test de l'affichage, la clock d'affichage a été simulée par un bouton de la nanoboard et l'affichage a été relié sur une seule ligne.&amp;lt;br&amp;gt;&lt;br /&gt;
Nous étions sensé remarquer que lorsque la ligne s'allume, si on appuie sur le bouton, elle s’éteint et enfin si nous appuyons sept fois sur le bouton, la ligne se rallume. &amp;lt;br&amp;gt;&lt;br /&gt;
Rien ne se passait comme prévu, et plus précisément, il n'y avait même pas de logique dans la ré-apparition de la ligne.&amp;lt;br&amp;gt;&lt;br /&gt;
Ayant déjà été confronté à des problèmes de rebonds avec des boutons poussoir, ce phénomène a été testé sur l'oscilloscope numérique.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Rebond.png||center|Exemple de rebond|Exemple de rebond]] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous demanderons alors aux référents quelle stratégie adopter : filtrer le signal avec un condensateur en parallèle au bouton ou bien utiliser une comparaison avec registre à décalage pour vérifier la stabilité du signal avant d'envoie du front montant.&amp;lt;br&amp;gt;&lt;br /&gt;
Certes la correction du bouton n'était pas nécessaire aux tests entrepris pour l'affichage (nous aurions pu mettre une clock interne) mais ceci nous servira pour filtrer les choix effectués par l'utilisateur (haut, droite, select). &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Objectifs pour la séance prochaine====&lt;br /&gt;
&lt;br /&gt;
Les schémas effectués restent des ébauches, il y a forcément eu des oublis. Néanmoins, comme chaque schéma se compile, le passage à l'étape de mise en place de la liaison série durant la séance 2 est envisageable. Il faudra donc créer un protocole plus concret afin de savoir qui doit jouer, quand envoyer, quand recevoir des données. Si le temps le permet, quelques programmes simples seront testés sur la nanoboard afin de vérifier le fonctionnement de l'affichage de la matrice après discutions avec les enseignants au sujet du phénomène de rebond.&lt;br /&gt;
&lt;br /&gt;
=== Partie informatique ===&lt;br /&gt;
Dans cette première séance nous avons programmé l'arduino afin de créer le programme de morpion, pour pouvoir tester la partie informatique sans disposer de la partie électronique.&lt;br /&gt;
Pour cela nous avons due apprendre à utiliser une matrice de LED RGB à l'aide des codes fournit par SparkFun.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Puis nous avons pu commencer à programmer le morpion:&lt;br /&gt;
&lt;br /&gt;
*le jeu se déroule dans une matrice 3x3.&lt;br /&gt;
*le position du curseur est représentée par une lumière bleue, celle des pions du joueurs 1 par une lumière rouge et celle des pions du joueurs 2 par une lumière verte.&lt;br /&gt;
*si le curseur est sur un pions les deux couleurs s'additionnent pour donner du magenta où du cyan.&lt;br /&gt;
*le joueur se déplace à l'aide de 2 boutons poussoir,l'un permettant d'aller vers le haut, l'autre permettant d'aller à droite&lt;br /&gt;
**pour éviter plusieurs déplacements d'un coup, un délais a été mis entre deux actions&lt;br /&gt;
*une fois tout en haut, si le joueur presse le bouton pour aller vers le haut le joueur se retrouve en bas.&lt;br /&gt;
*une fois tout à droite, si le joueur presse le bouton pour aller vers la droite le joueur se retrouve à gauche. &lt;br /&gt;
*enfin un dernier bouton poussoir permet de placer un pion à l'endroit où se trouve le curseur.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Une fois les mouvements programmés il fallait régir les règles du jeu:&lt;br /&gt;
&lt;br /&gt;
*Ainsi le curseur commence toujours en haut à droite&lt;br /&gt;
*Si le un joueurs arrive a créer une ligne de 3, il gagne la partie&lt;br /&gt;
*Si aucun joueur n'arrive à gagner et que le terrain est remplit, la partie se termine sur un match nul&lt;br /&gt;
*Une fois la partie terminée, le terrain est remis à zéros&lt;br /&gt;
&lt;br /&gt;
== Séance 2 ==&lt;br /&gt;
&lt;br /&gt;
=== Partie électronique ===&lt;br /&gt;
&lt;br /&gt;
La matrice led ne pourra être alimentée par les différentes broches de la nanoboard sous peine de créer une chute de tension et risquer un reset du fpga.&amp;lt;br&amp;gt;&lt;br /&gt;
Ainsi, le but de cet séance est de réfléchir à la conception d'un prototype de carte permettant d'alimenter la matrice led de manière externe. &amp;lt;br&amp;gt;&lt;br /&gt;
====Utilisation de transistors====&lt;br /&gt;
L'utilisation de transistors en saturé paraît la meilleur chose à faire. En effet, ceci permettra de générer un gain en courant et de contrôler l'état des différentes couleurs ligne par ligne et colonne par colonne.&amp;lt;br&amp;gt;&lt;br /&gt;
Pour permettra la liaison de chaque led au VCC, on utilisera un transistor PNP. Pour permettre la liaison au GND, on utilisera un NPN.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Montage_roussel.PNG||center|upright = 0.5|Montage d'une branche|Montage d'une branche de led]] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Comme il s'agit de transistor à anodes communes, il suffira de 8 transistors NPN. Notre choix s'est donc porté vers le ULN2803A, qui est un ensemble de 8 paires Darlington.&amp;lt;br&amp;gt;&lt;br /&gt;
L'utilisation de paires Darlington a l'avantage de permettre une génération élevée de courant. (Fort gain en courant)&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour ce qui est des cathodes, un problème de taille se pose. Il faudrait 24 transistors PNP pour gérer les 8 colonnes * 3couleurs. Ainsi, notre choix s'est plutôt déporté vers le buffer de portes trois états 74AS240. Cette famille de buffer 3 états a la capacité de délivrer un courant du même ordre de grandeur que l'ULN2803A.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Maintenant il reste à dimensionner la résistance sur chaque branche. Après quelques tests à l'aide d'un multimètre et de la matrice, on remarque que chaque led a besoin de 2mA pour fonctionner. Donc le but est de générer un courant d'environ 2mA. Ainsi, si on impose une tension de 5.5V aux bornes du montage, R = 5.5 / 0.002 = 2700 Ohms.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous avons désormais toutes les informations nécessaires pour le montage d'un prototype.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Le montage====&lt;br /&gt;
Au cours d'une séance supplémentaire, un plan a été élaboré et le prototype brasé. Voici donc le prototype achevé :&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Driver.JPG||center|400px|Driver matrice|Driver de la matrice]] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sur chaque sortie se trouve une résistance de 2700ohms. Le mieux aurait été de réaliser ce montage avec un réseau résistif cependant, le temps nous faisant défaut, nous avons utilisé les résistances déjà présentes en magasin.&amp;lt;br&amp;gt;&lt;br /&gt;
Sur chaque entrée se trouver une broche qui sera reliée à la nanoboard. &amp;lt;br&amp;gt;&lt;br /&gt;
Tous les buffers ont leur GND et VCC reliés au générateur 5.5V. Les paires Darlington sont reliées à la même masse.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Il ne restait plus qu'à relier la matrice led. Cette liaison parallèle a été réalisée en recyclant un vieux BUS d'ordinateur fixe. Finalement, voilà le montage final :&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Matrice_roussel.JPG||center|400px|Montage final de la partie électronique|Montage final de la partie électronique]] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Partie informatique ===&lt;br /&gt;
=====Arduino=====&lt;br /&gt;
Lors de cette séance nous avons pu finir le programme arduino, pour pouvoir jouer à deux sur une la carte.&lt;br /&gt;
Cette partie a été crée pour pouvoir tester les différentes fonctions, et sera modifier lors de prochaines séances.&lt;br /&gt;
La matrice LED affiche des clignotement irrégulier de couleur rouge, mais cela ne gêne pas pour jouer.&lt;br /&gt;
&lt;br /&gt;
=====Raspberry=====&lt;br /&gt;
Nous avons pu enfin commencer notre travail sur la raspberry.&lt;br /&gt;
Apres avoir branché la raspberry en série à notre pc, nous avons pu la configurer afin qu'elle fonctionne avec le réseau de l'ecole.&lt;br /&gt;
Pour cela nous avons mis une adresse IP du réseau INSECURE de l'école sur la Raspberry, celle de notre raspberry est :172.26.79.12.&lt;br /&gt;
C'est à partir de cette adresse que nous allons acceder aux pages html du projet.&lt;br /&gt;
Pour effectuer cette configuration nous avons remplacé les lignes correspondant à la configuration de la carte Ethernet dans le fichier /etc/network/interfaces par les lignes&lt;br /&gt;
  auto eth0&lt;br /&gt;
  iface eth0 inet static&lt;br /&gt;
    address 172.26.79.12&lt;br /&gt;
    netmask 255.255.240.0&lt;br /&gt;
    gateway 172.26.79.254&lt;br /&gt;
&lt;br /&gt;
Et afin d'indiquer le serveur DNS dans /etc/resolv.conf nous avons rajouté:&lt;br /&gt;
&lt;br /&gt;
  nameserver 193.48.57.34 &lt;br /&gt;
&lt;br /&gt;
Une fois la raspberry configurée, nous pouvons accéder à notre raspberry sans liaisons série grâce à un ssh.&lt;br /&gt;
Afin d'effectuer notre projet nous avons besoin de deux bibliothèques:&lt;br /&gt;
*jquery.js que l'ont a telecharger sur http://jquery.com/ afin de faciliter la programmation en javascript&lt;br /&gt;
*une bibliothèque C de WebSocket trouvé sur http://libwebsockets.org afin de pouvoir effectuer notre programme en C utilisant le Websocket&lt;br /&gt;
&lt;br /&gt;
Notre raspberry est maintenant prête pour notre projet, nous avons pu commencer notre fichier morpion.html qui permet de joueur au morpion à deux sur le même ordinateur, ce qui permet de tester les differentes fonctions utilisés pour la suite du projet.&lt;br /&gt;
&lt;br /&gt;
== Séance 3 ==&lt;br /&gt;
&lt;br /&gt;
=== Partie électronique ===&lt;br /&gt;
&lt;br /&gt;
Le montage réalisé a été testé. Quelques soudures ont été refaites et un composant ne fonctionnait pas. Heureusement, nous avions placé des socles afin de pouvoir enlever/placer les buffers facilement. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Cette mise en évidence de composant défaillant a pris beaucoup de temps, c'est pourquoi tout ce qui suit a été réalisé sur plusieurs séances supplémentaires. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La première chose effectuée fut le branchement de la carte à la nanoboard. Pour cela, nous avons utilisé un plan créé au préalable et un schematic de vérification.&amp;lt;br&amp;gt;&lt;br /&gt;
Ce schematic consistait à afficher colonne par colonne et couleur par couleur chaque led, ainsi, si un branchement était mauvais, nous pouvions le voir directement. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le montage finalisé, nous pouvions commencer les tests des fonctions créées en première séance. Sur le principe, ces schematics marchaient plutôt bien mais comme nous souhaitions générer des simulations de données venant de la liaison série, nous n'avions pas assez de boutons pour utiliser ces premières schematics. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ainsi, le travail de traitement a dû être refait. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====La seletion====&lt;br /&gt;
L'objectif est de créer un circuit numérique de sélection à l'aide de seulement deux boutons.&amp;lt;br&amp;gt;&lt;br /&gt;
Le choix s'est alors porté sur un compteur allant jusque 8. Ainsi, il y avait 9 possibilités de valeur et chaque valeur correspondra a une case.&amp;lt;br&amp;gt;&lt;br /&gt;
Le compteur devra s'incrémenter sur l'appuie d'un bouton de balayage. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Traite.JPG|vignette|center|600px|Selection|Selection]] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La sélection du joueur physique doit être contrôlée afin que seul un choix valide soit accepté. Ainsi, un schematic de vérification a été créé.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour savoir quelles cases ont déjà été jouées, nous avons décidé d'effectuer un OU logique entre les cases jouées par le joueur physique et les cases jouées par le joueur en ligne. Une fois le bus d'état global créé, il suffit d'effectuer un ET logique avec le choix de notre joueur physique. Si le choix se porte sur une case qui n'a jamais été jouée, le résultat de l'opération logique sera un bus nul. Nous comparons donc ce bus avec un bus nul. &amp;lt;br&amp;gt;&lt;br /&gt;
Finalement, le choix est valide si le comparateur sort une égalité ET le bouton de sélection a été appuyé.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Valider_choix.JPG|vignette|center|600px|Valider|Valider]] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====L'affichage====&lt;br /&gt;
Les schematics d'affichage sont restés les mêmes qu'à la séance 1, mis à part quelques corrections tel l'inversion des sorties d'affichage car nous travaillons en logique inversée sur les portes 3 états.&amp;lt;br&amp;gt;&lt;br /&gt;
Le pré-affichage s'occupe toujours du stockage des cases cochées par le joueur physique si il est le joueur courant.&amp;lt;br&amp;gt;&lt;br /&gt;
Afin d'assurer une persistance rétinienne, on devra relier l'affichage à une horloge d'au moins 3KHz.&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
[[Fichier:Traitement_preaffichage.JPG|vignette|center|500px|Pre-affichage|Pre-affichage]] [[Fichier:Affich.JPG|vignette|center|500px|Affichage|Affichage]] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Simulation de la liaison série====&lt;br /&gt;
Le but est de gérer des données semblables à ce que la raspberry pourrait nous envoyer. A savoir 1 bit de fin de partie, 1 bit de réception de donnée et 4 bits de choix de case.&amp;lt;br&amp;gt;&lt;br /&gt;
=====Conversion de l'adresse choisie=====&lt;br /&gt;
Il faut faire correspondre les 4 bits reçus à un bus de 9bits, chaque bit correspondant à une case. Ceci revient à faire un traitement similaire à la sélection du joueur physique...&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Traite_adversaire.JPG|vignette|center|400px|Conversion de l'adresse|Conversion de l'adresse]] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Stockage=====&lt;br /&gt;
Maintenant que nous savons convertir une adresse, on doit pouvoir mettre à jour les cases jouées par le joueur en ligne sur chaque réception de donnée.&amp;lt;br&amp;gt;&lt;br /&gt;
Pour effectuer ceci, on utilise 9 bascules pour stocker les choix dans différentes cases. Aucun traitement de choix valide n'est à faire car la raspberry s'en occupe déjà de son côté.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Stock_adv.JPG|vignette|center|600px|Stockage des cases de l'adversaire|Stockage des cases de l'adversaire]] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Propre à la simulation=====&lt;br /&gt;
Pour générer l'adresse, on utilise le même principe de sélection que celui du joueur physique.&amp;lt;br&amp;gt;&lt;br /&gt;
Pour avoir un aspect visuel de cette sélection, on utilise un MUX qui, en fonction du joueur courant, afficher la sélection de tel ou tel joueur.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Traite_sel.JPG|vignette|center|600px|MUX de selection|MUX de la sélection]] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour ce qui est du bit de fin de parti, on le symbolise par un bouton.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Phénomène de rebond=====&lt;br /&gt;
Pour gérer le rebond des boutons poussoirs, la solution a été numérique. Un registre à décalage a été créé, cadencé sur une clock, il décale sur chaque front d'horloge la valeur courante d'un bouton. En utilisant un comparateur, on obtient alors un front montant seulement lorsque le bouton est dans un état stable (c'est à dire lorsque tous les bits ont la même valeurs)&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Dump.JPG|vignette|center|600px|Anti-rebond|Anti-rebond]] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====TOPLEVEL====&lt;br /&gt;
Le schéma TOPLEVEL est alors le suivant :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Toplevel.JPG|vignette|center|800px|TOPLEVEL|TOPLEVEL]] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ainsi, si nous avions eu le bloc de liaison série bidirectionnel, nous aurions simplement eu à :&lt;br /&gt;
* Remplacer la génération d'adresse par les 4bits de poids faible du message de 8bits reçu.&lt;br /&gt;
* Remplacer le bouton de reset par le bit de fin de partie.&lt;br /&gt;
* Remplacer le bit de choix de l'adversaire par celui de réception validée.&lt;br /&gt;
* Relier le bit d'émission à la sortie de &amp;quot;choix valide&amp;quot;.&lt;br /&gt;
* Relier la sélection du joueur physique aux données à transmettre.&lt;br /&gt;
* Enlever le multiplexage de la sélection.&lt;br /&gt;
&lt;br /&gt;
====Réflexion====&lt;br /&gt;
La partie électronique de ce projet a donc été menée à bout. Cependant, après coup, on se rend compte que la création d'un prototype aurait été meilleure en imprimant un PCB plutôt qu'en utilisant une piste à bandes.&amp;lt;br&amp;gt;&lt;br /&gt;
Nous aurions également pu éviter une configuration en parallèle du driver. Ainsi, à l'aide de registres à décalages alimentés en externe, la lisibilité du circuit aurait été meilleure.&amp;lt;br&amp;gt;&lt;br /&gt;
On peut néanmoins se satisfaire de la réalisation numérique du circuit car elle exploite toutes les possibilités qu'offrent la conception via schematics à l'aide d'Altium designer à savoir :&amp;lt;br&amp;gt;&lt;br /&gt;
* La création d'une bibliothèque&lt;br /&gt;
* La création de composants&lt;br /&gt;
* L'utilisation de composants configurables avec édition de pins&amp;lt;br&amp;gt;&lt;br /&gt;
D'ailleurs, on comprend d'autant plus l'intérêt du langage VHDL après la création d'autant de schematics pour un projet de cette envergure.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Partie informatique ===&lt;br /&gt;
Nous avons commencé cette séance en continuant le morpion.html&lt;br /&gt;
Dans un premier temps nous avons crée &amp;quot;l'espace de jeu&amp;quot; en utilisant du code trouvé sur internet :&lt;br /&gt;
 &amp;lt;!DOCTYPE html&amp;gt;&lt;br /&gt;
  &amp;lt;head&amp;gt;&lt;br /&gt;
   &amp;lt;meta charset=&amp;quot;utf-8&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;style type=&amp;quot;text/css&amp;quot;&amp;gt;&lt;br /&gt;
 .table{&lt;br /&gt;
 width : 330px;&lt;br /&gt;
 height : 330px;&lt;br /&gt;
 border : solid 3px black;&lt;br /&gt;
  border-collapse: collapse;&lt;br /&gt;
 }&lt;br /&gt;
 .td{&lt;br /&gt;
 border : solid 3px black;&lt;br /&gt;
 width : 33%;&lt;br /&gt;
 height : 33%;&lt;br /&gt;
 }&lt;br /&gt;
 &amp;lt;/style&amp;gt;&lt;br /&gt;
 &amp;lt;title&amp;gt; Jeu morpion&amp;lt;/title&amp;gt;&lt;br /&gt;
 &amp;lt;/head&amp;gt;&lt;br /&gt;
et&lt;br /&gt;
 &amp;lt;body&amp;gt;&lt;br /&gt;
   h1&amp;gt;Morpion&amp;lt;/h1&amp;gt;&lt;br /&gt;
 table class=&amp;quot;table&amp;quot; align=&amp;quot;center&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
       &amp;lt;td class=&amp;quot;td&amp;quot; onclick=&amp;quot;placerSigne(0)&amp;quot; id=&amp;quot;0&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
       &amp;lt;td class=&amp;quot;td&amp;quot; onclick=&amp;quot;placerSigne(1)&amp;quot; id=&amp;quot;1&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
       &amp;lt;td class=&amp;quot;td&amp;quot; onclick=&amp;quot;placerSigne(2)&amp;quot; id=&amp;quot;2&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
       &amp;lt;td class=&amp;quot;td&amp;quot; onclick=&amp;quot;placerSigne(3)&amp;quot; id=&amp;quot;3&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
       &amp;lt;td class=&amp;quot;td&amp;quot; onclick=&amp;quot;placerSigne(4)&amp;quot; id=&amp;quot;4&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
       &amp;lt;td class=&amp;quot;td&amp;quot; onclick=&amp;quot;placerSigne(5)&amp;quot; id=&amp;quot;5&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
       &amp;lt;td class=&amp;quot;td&amp;quot; onclick=&amp;quot;placerSigne(6)&amp;quot; id=&amp;quot;6&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
       &amp;lt;td class=&amp;quot;td&amp;quot; onclick=&amp;quot;placerSigne(7)&amp;quot; id=&amp;quot;7&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
       &amp;lt;td class=&amp;quot;td&amp;quot; onclick=&amp;quot;placerSigne(8)&amp;quot; id=&amp;quot;8&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
 &amp;lt;/table&amp;gt;&lt;br /&gt;
 table style=&amp;quot;border : solid 3px #3399FF;&amp;quot; align=&amp;quot;center&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;tr&amp;gt;&lt;br /&gt;
 &amp;lt;td style=&amp;quot;border : solid 1px #3399FF;&amp;quot;&amp;gt;Joueur 1&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;td style=&amp;quot;border : solid 1px #3399FF;&amp;quot;&amp;gt;Joueur 2&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
 &amp;lt;tr&amp;gt;&lt;br /&gt;
 &amp;lt;td style=&amp;quot;border : solid 1px #3399FF;&amp;quot; id=&amp;quot;scre1&amp;quot;&amp;gt;0&lt;br /&gt;
 &amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;td style=&amp;quot;border : solid 1px #3399FF;&amp;quot; id=&amp;quot;scre2&amp;quot;&amp;gt;0&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
 &amp;lt;/table&amp;gt;&lt;br /&gt;
  &amp;lt;/body&amp;gt;&lt;br /&gt;
 &amp;lt;/html&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le code ci dessus n'est pas totalement bon, puisque nous avons du enlever des &amp;quot;&amp;lt;&amp;quot; afin d'afficher le code et non ce qu'il en résulte.&lt;br /&gt;
&lt;br /&gt;
L'espacement entre deux lignes peut changer en fonction de la taille de ce qui est mis dedans.&lt;br /&gt;
Si on remplis de case blanche (&amp;quot;vide.png&amp;quot;) de taille 100*100 on obtient:&lt;br /&gt;
[[Fichier:morpion1.png]]&lt;br /&gt;
&lt;br /&gt;
A chaque clique sur une case la fonction placerSigne(n) va s'effectuer avec n le numéros de la case sélectionnée.&lt;br /&gt;
 function placerSigne(idCase)&lt;br /&gt;
 { &lt;br /&gt;
         if(morpion[idCase] == 0)&lt;br /&gt;
         {coup++;&lt;br /&gt;
         morpion[idCase]=joueur;&lt;br /&gt;
         if (joueur==1)&lt;br /&gt;
                 {&lt;br /&gt;
  	  	 joueur=2;&lt;br /&gt;
                 document.getElementById(idCase).innerHTML = '&amp;lt;img src=&amp;quot;croix.gif&amp;quot; alt=&amp;quot;image !&amp;quot; /&amp;gt;';&lt;br /&gt;
 &lt;br /&gt;
                 }&lt;br /&gt;
 	else    {&lt;br /&gt;
 	   	 joueur=1;&lt;br /&gt;
                 document.getElementById(idCase).innerHTML = '&amp;lt;img src=&amp;quot;rond.gif&amp;quot; alt=&amp;quot;image !&amp;quot; /&amp;gt;';&lt;br /&gt;
 &lt;br /&gt;
                 }&lt;br /&gt;
 	if (coup&amp;gt;4)&lt;br /&gt;
 		{if (gagner(idCase))&lt;br /&gt;
 			{if (joueur==1)&lt;br /&gt;
 				{score2++;&lt;br /&gt;
 				alert(&amp;quot;joueur 2 gagne &amp;quot;);&lt;br /&gt;
 				finpartie();&lt;br /&gt;
 				}&lt;br /&gt;
 			else{score1++;&lt;br /&gt;
 				alert(&amp;quot;joueur 1 gagne &amp;quot;);&lt;br /&gt;
 				finpartie();&lt;br /&gt;
 				}&lt;br /&gt;
 			&lt;br /&gt;
 			}&lt;br /&gt;
 		else {if (egalite()==0)&lt;br /&gt;
 			{alert(&amp;quot;egalite&amp;quot;);&lt;br /&gt;
 			finpartie();}&lt;br /&gt;
 		     }&lt;br /&gt;
 		}&lt;br /&gt;
         }&lt;br /&gt;
         else{alert(&amp;quot;pas le droit&amp;quot;);}&lt;br /&gt;
 }&lt;br /&gt;
Cette fonction place une image 100x100 de rond ou de croix dans la case sélectionnée en fonction du joueur qui doit jouer.&lt;br /&gt;
*Elle calcule les scores de chaque joueurs, et appelle gagner et egalite pour savoir si on est dans une fin de partie.&lt;br /&gt;
*Et elle alerte le joueur si la case sélectionnée ne peut pas être jouée.&lt;br /&gt;
&lt;br /&gt;
Pour cela elle utilise le tableau morpion de taille 9 remplit de 0 à l'origine, et modifie la case sélectionnée en y mettant 1 ou 2 en fonction du joueur qui a joué.&lt;br /&gt;
&lt;br /&gt;
La variable coup permet de déterminer le nombre de coup jouer, ce qui permet de ne pas verifier si une partie une gagnée tant que coup n'est pas supérieur à 4, puisqu'il faut au minimum 5 coup pour gagner.&lt;br /&gt;
&lt;br /&gt;
 function finpartie()&lt;br /&gt;
 {for (var j=0;j&amp;lt;9;j++)&lt;br /&gt;
 	{ document.getElementById(j).innerHTML = '&amp;lt;img src=&amp;quot;vide.png&amp;quot; alt=&amp;quot;image !&amp;quot; /&amp;gt;';&lt;br /&gt;
 	morpion[j]=0;&lt;br /&gt;
 	}&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
La fonction finpartie() met les variables morpion et coup à zéro, et place des images blanches dans toutes les cases.&lt;br /&gt;
&lt;br /&gt;
Elle est appelé que si il y une victoire ou une égalité.&lt;br /&gt;
&lt;br /&gt;
Dans morpionsc.html qui est le fichier html final, joueur est remis à 1 dans cette fonction.&lt;br /&gt;
&lt;br /&gt;
Dans le fichier morpion.html cela n’étais pas cessionnaire et permettait en plus au joueur perdant de commencer.&lt;br /&gt;
&lt;br /&gt;
Mais pour simplifier la suite nous avons préféré définir que toujours le même joueur commencerais. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 function gagner(idCase)&lt;br /&gt;
 {switch(idCase)&lt;br /&gt;
         {&lt;br /&gt;
 case 0:&lt;br /&gt;
         return (diagonal1()||ligne1()||colonne1());&lt;br /&gt;
         break;&lt;br /&gt;
 case 1:&lt;br /&gt;
         return (ligne1()||colonne2());&lt;br /&gt;
         break;&lt;br /&gt;
 case 2:&lt;br /&gt;
         return (diagonal2()||ligne1()||colonne3());&lt;br /&gt;
         break;&lt;br /&gt;
 case 3:&lt;br /&gt;
         return (ligne2()||colonne1());&lt;br /&gt;
         break; &lt;br /&gt;
 &lt;br /&gt;
 case 4:&lt;br /&gt;
         return (diagonal1()||diagonal2()||ligne2()||colonne2());&lt;br /&gt;
         break;&lt;br /&gt;
 case 5:&lt;br /&gt;
         return (ligne2()||colonne3());&lt;br /&gt;
         break;&lt;br /&gt;
 case 6:&lt;br /&gt;
         return (diagonal2()||ligne3()||colonne1());&lt;br /&gt;
         break;&lt;br /&gt;
 case 7:&lt;br /&gt;
         return (ligne3()||colonne2());&lt;br /&gt;
         break;&lt;br /&gt;
 case 8:&lt;br /&gt;
         return (diagonal1()||ligne3()||colonne3());&lt;br /&gt;
         break;&lt;br /&gt;
         }&lt;br /&gt;
 }&lt;br /&gt;
La fonction gagner appelle des fonctions diagonal,ligne,colonne qui retourne 1 si il y'a 3 même symboles sur leur domaines.&lt;br /&gt;
&lt;br /&gt;
Gagner teste donc si il y a une suite de 3 symboles sur la ligne, colonne et les diagonales passant par la case qui a été joué.&lt;br /&gt;
&lt;br /&gt;
 function egalite()&lt;br /&gt;
 {var cp=0;&lt;br /&gt;
 for (var i=0;i &amp;lt; 9;i++)&lt;br /&gt;
         {if (morpion[i]==0)&lt;br /&gt;
 		{cp++;}&lt;br /&gt;
         }&lt;br /&gt;
 return cp;&lt;br /&gt;
 }&lt;br /&gt;
La fonction egalité teste si toutes les cases ont été joué.&lt;br /&gt;
&lt;br /&gt;
On aurait pu utiliser la variable coup, si coup était égal à 9 alors égalité, mais la fonction egalité permet de vérifier si il n'y a pas eu de problème lors de la modification de la matrice.&lt;br /&gt;
&lt;br /&gt;
Avec morpion.html nous avons pu apprendre le javascript, et poser les bases de notre fichier html final.&lt;br /&gt;
&lt;br /&gt;
===Complément à la séance 3===&lt;br /&gt;
&lt;br /&gt;
====HTML====&lt;br /&gt;
Pour le HTML/Javascript on garde les mêmes fonctions gagner et egalite.&lt;br /&gt;
On va ajouter lors de l'initialisation&lt;br /&gt;
 window.WebSocket=(window.WebSocket||window.MozWebSocket);&lt;br /&gt;
 &lt;br /&gt;
 var websocket=new WebSocket('ws://172.26.79.12:9000','myprotocol');&lt;br /&gt;
 &lt;br /&gt;
 websocket.onopen=function(){ $('h1').css('color','green'); };&lt;br /&gt;
 &lt;br /&gt;
 websocket.onerror=function(){ $('h1').css('color','red'); };&lt;br /&gt;
On modifie placerSigne:&lt;br /&gt;
*si ce n'est pas au tour du joueur 1 de jouer on lui envoie une alerte.&lt;br /&gt;
*si il y a une fin de partie on envoie 9 grâce a sendMessage.&lt;br /&gt;
*si il n'y a pas de fin de partie on envoie la case jouer toujours grâce à sendMessage:&lt;br /&gt;
 function sendMessage(data){&lt;br /&gt;
 websocket.send(data);&lt;br /&gt;
 }&lt;br /&gt;
Pour finpartie on rajoute juste &lt;br /&gt;
 joueur=1;&lt;br /&gt;
&lt;br /&gt;
Pour faire jouer le second joueur il faut recevoir un message du websocket ainsi :&lt;br /&gt;
 websocket.onmessage=function(message)&lt;br /&gt;
sera la fonction dans laquelle on fera jouer le joueur 2. &lt;br /&gt;
&lt;br /&gt;
Le websocket envoie simplement la case en char* ainsi:&lt;br /&gt;
 websocket.onmessage=function(message){&lt;br /&gt;
 idCase=parseInt((message.data)-30);&lt;br /&gt;
 console.log(idCase);&lt;br /&gt;
 &lt;br /&gt;
 if(morpion[idCase] == 0)&lt;br /&gt;
                 {coup++;&lt;br /&gt;
                  morpion[idCase]=2;&lt;br /&gt;
                  joueur=1;&lt;br /&gt;
  		document.getElementById(idCase).innerHTML = '&amp;lt;img src=&amp;quot;rond.gif&amp;quot; alt=&amp;quot;image !&amp;quot; /&amp;gt;';&lt;br /&gt;
  		 if (coup&amp;gt;4)&lt;br /&gt;
 			 {if (gagner(idCase))&lt;br /&gt;
                                {score2++; &lt;br /&gt;
                                         alert(&amp;quot;joueur 2 gagne &amp;quot;);&lt;br /&gt;
                                         finpartie();&lt;br /&gt;
 					sendMessage(9);&lt;br /&gt;
                                }&lt;br /&gt;
  &lt;br /&gt;
 &lt;br /&gt;
                           else {if (egalite()==0)&lt;br /&gt;
                                         {alert(&amp;quot;egalite&amp;quot;);&lt;br /&gt;
                                         finpartie();&lt;br /&gt;
 					sendMessage(9);&lt;br /&gt;
 &lt;br /&gt;
                                         }&lt;br /&gt;
 				}&lt;br /&gt;
 			&lt;br /&gt;
 			}&lt;br /&gt;
 		}&lt;br /&gt;
 &lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Console.log permet d'afficher dans le debug, la valeur traitée.&lt;br /&gt;
On envoie toujours 9 si la partie se termine, sinon on effectue la même chose que dans placerSigne de morpion.html&lt;br /&gt;
&lt;br /&gt;
====Fichier C====&lt;br /&gt;
Il faut maintenant créer la passerelle entre l'arduino et le fichier html.&lt;br /&gt;
Pour cela notre fichier doit utiliser des fonctions de websocket mais aussi de serial.c&lt;br /&gt;
Les fonctions de serial.c sont directement intégrées dans notre fichier, il n'y a donc pas besoin de lui faire appel pour compiler.&lt;br /&gt;
 &lt;br /&gt;
 #include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;stdlib.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;string.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;unistd.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;fcntl.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;termios.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;strings.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;sys/types.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;sys/ioctl.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;sys/file.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;linux/serial.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;libwebsockets.h&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 #define MAX_FRAME_SIZE  1024&lt;br /&gt;
 #define WAIT_DELAY      50&lt;br /&gt;
 #define MAX_MESSAGE     2 &lt;br /&gt;
 &lt;br /&gt;
 #define SERIAL_READ 0&lt;br /&gt;
 #define SERIAL_WRITE 1&lt;br /&gt;
 #define SERIAL_BOTH 2&lt;br /&gt;
 &lt;br /&gt;
 #define SERIAL_DEVICE &amp;quot;/dev/ttyUSB0&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 int sd;&lt;br /&gt;
  &lt;br /&gt;
 &lt;br /&gt;
 //&lt;br /&gt;
 // Open serial port device&lt;br /&gt;
 //&lt;br /&gt;
 int serialOpen(char *device,int mode){&lt;br /&gt;
 int flags=(mode==SERIAL_READ?O_RDONLY:(mode==SERIAL_WRITE?O_WRONLY:O_RDWR));&lt;br /&gt;
 int fd=open(device,flags|O_NOCTTY|O_NONBLOCK); &lt;br /&gt;
 if(fd&amp;lt;0){ perror(device); exit(-1); }&lt;br /&gt;
 return fd;&lt;br /&gt;
 }&lt;br /&gt;
  &lt;br /&gt;
 //&lt;br /&gt;
 // Serial port configuration&lt;br /&gt;
 //&lt;br /&gt;
 void serialConfig(int fd,int speed){&lt;br /&gt;
 struct termios new;&lt;br /&gt;
 bzero(&amp;amp;new,sizeof(new));&lt;br /&gt;
 new.c_cflag=CLOCAL|CREAD|speed|CS8;&lt;br /&gt;
 new.c_iflag=0;&lt;br /&gt;
 new.c_oflag=0;&lt;br /&gt;
 new.c_lflag=0;     /* set input mode (non-canonical, no echo,...) */&lt;br /&gt;
 new.c_cc[VTIME]=0; /* inter-character timer unused */&lt;br /&gt;
 new.c_cc[VMIN]=1;  /* blocking read until 1 char received */&lt;br /&gt;
 if(tcsetattr(fd,TCSANOW,&amp;amp;new)&amp;lt;0){ perror(&amp;quot;serialInit.tcsetattr&amp;quot;); exit(-1); }&lt;br /&gt;
 }&lt;br /&gt;
  &lt;br /&gt;
 //&lt;br /&gt;
 // Serial port termination&lt;br /&gt;
 //&lt;br /&gt;
 void serialClose(int fd){&lt;br /&gt;
 close(fd);&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 static int callback_http(&lt;br /&gt;
   struct libwebsocket_context *this,&lt;br /&gt;
   struct libwebsocket *wsi,enum libwebsocket_callback_reasons reason,&lt;br /&gt;
   void *user,void *in,size_t len)&lt;br /&gt;
 {&lt;br /&gt;
 return 0;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
  static struct libwebsocket_protocols protocols[] = {&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;http-only&amp;quot;,   // name&lt;br /&gt;
      callback_http, // callback&lt;br /&gt;
      0,             // data size&lt;br /&gt;
      0              // maximum frame size&lt;br /&gt;
    },&lt;br /&gt;
    {&amp;quot;myprotocol&amp;quot;,callback_my,0,MAX_FRAME_SIZE},&lt;br /&gt;
    {NULL,NULL,0,0}&lt;br /&gt;
    };&lt;br /&gt;
  &lt;br /&gt;
 &lt;br /&gt;
Ci-dessus se trouve le code se trouvant dans serial.c afin de créer serialOpen, serialClose et serialConfig, ainsi que l'initialisation de variables utilisées.&lt;br /&gt;
&lt;br /&gt;
Mais aussi la fonction callback_http(),la structure libwebsocket_protocols, et l'initialisation de variables. &lt;br /&gt;
 &lt;br /&gt;
 int main(void) {&lt;br /&gt;
 int port=9000;&lt;br /&gt;
 struct lws_context_creation_info info;&lt;br /&gt;
 memset(&amp;amp;info,0,sizeof info);&lt;br /&gt;
 info.port=port;&lt;br /&gt;
 info.protocols=protocols;&lt;br /&gt;
 info.gid=-1;&lt;br /&gt;
 info.uid=-1;&lt;br /&gt;
 struct libwebsocket_context *context=libwebsocket_create_context(&amp;amp;info);&lt;br /&gt;
 if(context==NULL){&lt;br /&gt;
   fprintf(stderr, &amp;quot;libwebsocket init failed\n&amp;quot;);&lt;br /&gt;
   return -1;&lt;br /&gt;
   }&lt;br /&gt;
 printf(&amp;quot;starting server...\n&amp;quot;);&lt;br /&gt;
 &lt;br /&gt;
   &lt;br /&gt;
 sd=serialOpen(SERIAL_DEVICE,SERIAL_BOTH);&lt;br /&gt;
 serialConfig(sd,B9600);&lt;br /&gt;
 &lt;br /&gt;
  &lt;br /&gt;
 while(1){&lt;br /&gt;
   libwebsocket_service(context,WAIT_DELAY);&lt;br /&gt;
   }&lt;br /&gt;
     &lt;br /&gt;
 &lt;br /&gt;
 serialClose(sd); &lt;br /&gt;
 &lt;br /&gt;
  &lt;br /&gt;
 libwebsocket_context_destroy(context);&lt;br /&gt;
 return 0;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Le main permet d'initialiser une liaison série de 9600 Baud et de lancer une boucle infini dans laquelle la passerelle entre arduino et html va s'effectuer.&lt;br /&gt;
&lt;br /&gt;
 static int callback_my(&lt;br /&gt;
   struct libwebsocket_context * this,&lt;br /&gt;
   struct libwebsocket *wsi,enum libwebsocket_callback_reasons reason,&lt;br /&gt;
   void *user,void *in,size_t len)&lt;br /&gt;
 {&lt;br /&gt;
 static char message[2+LWS_SEND_BUFFER_PRE_PADDING+LWS_SEND_BUFFER_POST_PADDING];&lt;br /&gt;
 static char valeur;&lt;br /&gt;
 switch(reason){&lt;br /&gt;
   case LWS_CALLBACK_ESTABLISHED:&lt;br /&gt;
     printf(&amp;quot;connection established\n&amp;quot;);&lt;br /&gt;
                 // Declenchement d'un prochain envoi au navigateur&lt;br /&gt;
     break;&lt;br /&gt;
   case LWS_CALLBACK_RECEIVE:&lt;br /&gt;
                 // Ici sont traites les messages envoyes par le navigateur&lt;br /&gt;
 //printf(&amp;quot;received data: %s\n&amp;quot;,(char *)in);&lt;br /&gt;
     if(write(sd,in,sizeof(char))!=1){ perror(&amp;quot;main.write&amp;quot;); exit(-1); }&lt;br /&gt;
 printf(&amp;quot;writen data: %s\n&amp;quot;,(char *)in);&lt;br /&gt;
                 // Declenchement d'un prochain envoi au navigateur&lt;br /&gt;
     libwebsocket_callback_on_writable(this,wsi);&lt;br /&gt;
     break;&lt;br /&gt;
   case LWS_CALLBACK_SERVER_WRITEABLE:&lt;br /&gt;
                 // Ici sont envoyes les messages au navigateur&lt;br /&gt;
 &lt;br /&gt;
 if (read(sd,&amp;amp;valeur,sizeof(char))==1)&lt;br /&gt;
 { &lt;br /&gt;
 //printf(&amp;quot;write data: %c\n&amp;quot;,valeur);&lt;br /&gt;
       char *out=message+LWS_SEND_BUFFER_PRE_PADDING;&lt;br /&gt;
        sprintf(out,&amp;quot;%02x&amp;quot;,valeur);&lt;br /&gt;
 //printf(&amp;quot;write data: %s\n&amp;quot;,(char *)out);&lt;br /&gt;
 &lt;br /&gt;
     libwebsocket_write(wsi,(unsigned char *)out,MAX_MESSAGE,LWS_WRITE_TEXT);&lt;br /&gt;
 }&lt;br /&gt;
 else{libwebsocket_callback_on_writable(this,wsi);&lt;br /&gt;
 }&lt;br /&gt;
     break;&lt;br /&gt;
   default:&lt;br /&gt;
     break;&lt;br /&gt;
        	  }   &lt;br /&gt;
 return 0;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
La fonction ci-dessus est celle qui definie la passerelle.&lt;br /&gt;
&lt;br /&gt;
Si elle établit une liaison, elle imprime &amp;quot;connection established&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Une fois la connection établit on se retrouve dans le cas LWS_CALLBACK_RECEIVE si la page html envoie une valeur.&lt;br /&gt;
&lt;br /&gt;
Dans ce cas la valeur pointée par in est écrite dans sd(liaison serie), puis on utilise :&lt;br /&gt;
 libwebsocket_callback_on_writable(this,wsi);&lt;br /&gt;
&lt;br /&gt;
Qui permet de passer en mode réception de message par la liaison série, qui est definit ici par le cas:&lt;br /&gt;
 case LWS_CALLBACK_SERVER_WRITEABLE:&lt;br /&gt;
Dans ce cas on lit la valeur dans la liaison serie et on la met dans la variable valeur. Si il n'y a rien à lire pour le moment on utilise a nouveau:&lt;br /&gt;
 libwebsocket_callback_on_writable(this,wsi);&lt;br /&gt;
Afin de rester dans le même case.&lt;br /&gt;
&lt;br /&gt;
Si la valeur a été lu on crée out:&lt;br /&gt;
  char *out=message+LWS_SEND_BUFFER_PRE_PADDING;&lt;br /&gt;
avec message :&lt;br /&gt;
 static char message[2+LWS_SEND_BUFFER_PRE_PADDING+LWS_SEND_BUFFER_POST_PADDING];&lt;br /&gt;
out va etre du bon type et de la bonne taille pour pouvoir être envoyer a l'html.&lt;br /&gt;
On modife donc la valeur de out grâce à la valeur lue:&lt;br /&gt;
 sprintf(out,&amp;quot;%02x&amp;quot;,valeur);&lt;br /&gt;
Puis on l'envoie:&lt;br /&gt;
 libwebsocket_write(wsi,(unsigned char *)out,MAX_MESSAGE,LWS_WRITE_TEXT);&lt;br /&gt;
&lt;br /&gt;
====Arduino====&lt;br /&gt;
Pour l'affichage de la matrice LED nous avons utilisé un exemple trouvé sur le site de SparkFun Electronics:&lt;br /&gt;
 //Example_RGBMatrix.ino&lt;br /&gt;
 //By: Ryan Owens @ SparkFun Electronics&lt;br /&gt;
 //&lt;br /&gt;
 //modified 27 Oct 2014&lt;br /&gt;
 //by Bobby Chan @ SparkFun Electronics&lt;br /&gt;
&lt;br /&gt;
Nous avons ensuite crée:&lt;br /&gt;
&lt;br /&gt;
 void affichage(int je[3][3])&lt;br /&gt;
 {&lt;br /&gt;
   for (int i = 0; i &amp;lt; 3; i++)&lt;br /&gt;
   {&lt;br /&gt;
     for (int j = 0; j &amp;lt; 3; j++)&lt;br /&gt;
     { if (je[i][j] == 1)&lt;br /&gt;
       {&lt;br /&gt;
         color_buffer[0 + i + j * 8] = BLUE;&lt;br /&gt;
       }&lt;br /&gt;
       else if (je[i][j] == 2)&lt;br /&gt;
       {&lt;br /&gt;
         color_buffer[0 + i + j * 8] = RED;&lt;br /&gt;
       }&lt;br /&gt;
       else if (je[i][j] == 5)&lt;br /&gt;
       {&lt;br /&gt;
         color_buffer[0 + i + j * 8] = TEAL;&lt;br /&gt;
       }&lt;br /&gt;
       else if (je[i][j] == 4)&lt;br /&gt;
       {&lt;br /&gt;
         color_buffer[0 + i + j * 8] = GREEN;&lt;br /&gt;
       }&lt;br /&gt;
       else if (je[i][j] == 3) {&lt;br /&gt;
         color_buffer[0 + i + j * 8] = MAGENTA;&lt;br /&gt;
       }&lt;br /&gt;
       else if (je[i][j] == 0) {&lt;br /&gt;
         color_buffer[0 + i + j * 8] = BLACK;&lt;br /&gt;
       }&lt;br /&gt;
     }&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
Qui change la valeur des buffers sur une matrice 3x3, en fonction d'une matrice donnée en paramètre de taille 3x3.&lt;br /&gt;
&lt;br /&gt;
Il faut ensuite matrix_write(); pour observer les resultats&lt;br /&gt;
 &lt;br /&gt;
 void go(int joueur)&lt;br /&gt;
 {if (joueur==2)&lt;br /&gt;
 {color_buffer[7]=GREEN;}&lt;br /&gt;
 else{color_buffer[7]=RED;}}&lt;br /&gt;
Cette fonction met un buffer vert si le joueur 2 peut jouer sinon rouge, le buffer se trouve en dehors de la zone de jeu et donc ne gène pas l'utilisateur.&lt;br /&gt;
&lt;br /&gt;
Il faut ensuite matrix_write(); pour observer les resultats&lt;br /&gt;
&lt;br /&gt;
 void reset(int jeu[3][3])&lt;br /&gt;
 { joueur = 0;&lt;br /&gt;
 color_buffer[7]=RED;&lt;br /&gt;
   for (int i = 0; i &amp;lt; 3; i++)&lt;br /&gt;
   {&lt;br /&gt;
     for (int j = 0; j &amp;lt; 3; j++)&lt;br /&gt;
     { jeu[i][j] = 0;&lt;br /&gt;
     }&lt;br /&gt;
   }&lt;br /&gt;
   jeu[0][0] = 1;&lt;br /&gt;
 }&lt;br /&gt;
Cette fonction remet dispose la matrice LED comme lors d'un début de partie.&lt;br /&gt;
On aurait pu remettre a zéro certaines variables dans cette fonction.&lt;br /&gt;
&lt;br /&gt;
Une fois ces fonctions crées, il faut crée la fonction loop:&lt;br /&gt;
 void loop() {&lt;br /&gt;
   go(joueur);&lt;br /&gt;
   if (Serial.available() &amp;gt; 0)&lt;br /&gt;
   { int a = (Serial.read() - 48);&lt;br /&gt;
     if (a == 9) {&lt;br /&gt;
       reset(jeu);&lt;br /&gt;
     }&lt;br /&gt;
     else {&lt;br /&gt;
       if (joueur == 0)&lt;br /&gt;
       { int b = (a) / 3;&lt;br /&gt;
         int c = a - (b) * 3;&lt;br /&gt;
         jeu[b][c] = 2;&lt;br /&gt;
         joueur = 2;&lt;br /&gt;
         if (jeu[0][0] == 2)&lt;br /&gt;
         {&lt;br /&gt;
           jeu[0][0] = 3;&lt;br /&gt;
         }&lt;br /&gt;
       }&lt;br /&gt;
     }&lt;br /&gt;
   }&lt;br /&gt;
   else {&lt;br /&gt;
     if (joueur == 2)&lt;br /&gt;
     { if (digitalRead(9) == 1)&lt;br /&gt;
       { jeu[l][h] = jeu[l][h] - 1;&lt;br /&gt;
         h = (h + 1) % 3;&lt;br /&gt;
         jeu[l][h]++;&lt;br /&gt;
         delay(50);&lt;br /&gt;
       }&lt;br /&gt;
       else if (digitalRead(8) == 1)&lt;br /&gt;
       {&lt;br /&gt;
         jeu[l][h] = jeu[l][h] - 1;&lt;br /&gt;
         l = (l + 1) % 3;&lt;br /&gt;
         jeu[l][h]++;&lt;br /&gt;
         delay(50);&lt;br /&gt;
       }&lt;br /&gt;
       else if (digitalRead(7) == 1)&lt;br /&gt;
       {&lt;br /&gt;
         if (jeu[l][h] == 1)&lt;br /&gt;
         { jeu[l][h] = 4;&lt;br /&gt;
           Serial.write((l * 3 + h) + 48);&lt;br /&gt;
 &lt;br /&gt;
           l = 0;&lt;br /&gt;
           h = 0;&lt;br /&gt;
           jeu[l][h] = jeu[l][h] + 1;&lt;br /&gt;
           joueur = 0;&lt;br /&gt;
         }&lt;br /&gt;
       }&lt;br /&gt;
     }&lt;br /&gt;
   }&lt;br /&gt;
 &lt;br /&gt;
   affichage(jeu);&lt;br /&gt;
   matrix_write();&lt;br /&gt;
   delay(100);&lt;br /&gt;
 }&lt;br /&gt;
Cette fonction utilise en premier lieu go() pour indiquer au joueur si il peut jouer.&lt;br /&gt;
Ensuite il vérifie la liaison série.&lt;br /&gt;
&lt;br /&gt;
On enlève 48 a ce que l'on a reçut, car on reçoit un char et on désire un int.&lt;br /&gt;
&lt;br /&gt;
Ainsi on ajoutera 48 a ce qu'on enverra dans le Serial.write.&lt;br /&gt;
&lt;br /&gt;
Si on reçoit 9, fin de partie.&lt;br /&gt;
Sinon on vérifie qui doit jouer et on le fais jouer si on peut ou on attend. &lt;br /&gt;
&lt;br /&gt;
Le Joueur 0 équivaut au joueur 1 pour l'html.&lt;br /&gt;
&lt;br /&gt;
Une fois les coups effectués, on affiche ce qui en résulte et ajoute un delay pour éviter d'appuyer deux fois d'affilée sans le vouloir.&lt;br /&gt;
&lt;br /&gt;
En reliant en série notre arduino en USB à notre raspberry, nous pouvons jouer aux morpions à deux , un sur l'arduino à l'aide de bouton poussoir , et l'autre sur une page html grâce à sa souris.&lt;br /&gt;
&lt;br /&gt;
== Démonstration ==&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;/div&gt;</summary>
		<author><name>Tstieven</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Projet_IMA3_P1,_2015/2016,_TD2&amp;diff=32310</id>
		<title>Projet IMA3 P1, 2015/2016, TD2</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Projet_IMA3_P1,_2015/2016,_TD2&amp;diff=32310"/>
				<updated>2016-06-16T23:09:21Z</updated>
		
		<summary type="html">&lt;p&gt;Tstieven : /* Fichier C */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Projet IMA3-SC 2015/2016 : MORPION =&lt;br /&gt;
&lt;br /&gt;
== Cahier des charges ==&lt;br /&gt;
Notre projet &amp;quot;système communicant&amp;quot; aura pour but de créer une interface connectée du &amp;quot;morpion&amp;quot;. L'objectif est de permettre à un joueur interagissant sur un site internet de jouer contre une autre personne qui, elle, jouera à l'aide d'un affichage fait à partir de leds. &lt;br /&gt;
&lt;br /&gt;
Nous cherchons donc à exploiter la capacité asynchrone d'un websocket afin de permettre une partie en temps réel.&lt;br /&gt;
&lt;br /&gt;
=== Matériel ===&lt;br /&gt;
* Une nanoboard&lt;br /&gt;
* Une raspberry pi&lt;br /&gt;
* Une matrice de leds 9x9 ou plus&lt;br /&gt;
* Un clavier numérique ou 9 boutons-poussoirs&lt;br /&gt;
* Des ordinateurs avec les logiciels de développement nécessaires &lt;br /&gt;
&lt;br /&gt;
=== Optionnel ===&lt;br /&gt;
* Un buzzer afin d'avertir le joueur d'un choix incohérent&lt;br /&gt;
* Trois afficheurs sept segments afin d'ajouter un tableau des scores&lt;br /&gt;
&lt;br /&gt;
== Séance 1 ==&lt;br /&gt;
&lt;br /&gt;
=== Partie électronique ===&lt;br /&gt;
Le but de cette première séance était de se familiariser avec le logiciel de conception Altium Designer et de réfléchir à la façon d'aborder la conception électronique du morpion.&lt;br /&gt;
&lt;br /&gt;
Cette conception se fera en plusieurs étapes :&lt;br /&gt;
&lt;br /&gt;
* gérer le positionnement d'un curseur en fonction de l'état courant de la partie&lt;br /&gt;
* gérer l'affichage de la matrice en fonction des cases remplies / sélectionnées&lt;br /&gt;
* permettre la réception et l'envoie de données à l'aide de la liaison série&lt;br /&gt;
* traiter la remise à zéro du plateau en cas de fin de partie&lt;br /&gt;
&lt;br /&gt;
====Positionnement du curseur et état de la partie====&lt;br /&gt;
&lt;br /&gt;
Dans un premier lieu, il était nécessaire de traiter les actions entrantes. En effet, si ce n'est pas au tour du joueur &amp;quot;physique&amp;quot;, l'utilisation des boutons doit être bloquée.&amp;lt;br&amp;gt;&lt;br /&gt;
Ceci consiste simplement à effectuer un ET logique entre un bit symbolisant le joueur courant (si 1 alors joueur physique, si 0 alors joueur en ligne) et l'action demandée.&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fichier:Choisir.png||center|alt=Schema de choix|Circuit logique de la permission d'action]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Une fois les choix accessibles, il faut désormais les traiter. Le traitement s'effectuera à l'aide de bascules, chaque case comportera deux bascules : une bascule de sélection (la case est-elle sélectionnée ?) et une bascule permettant de savoir si la case a déjà été jouée.&amp;lt;br&amp;gt;&lt;br /&gt;
Si la case a déjà été jouée, il ne faut empêcher l'utilisateur de la jouer.&amp;lt;br&amp;gt;&lt;br /&gt;
Nous considérerons que le joueur en ligne n'effectuera pas de choix erroné et nous testerons seulement les choix du joueur &amp;quot;physique&amp;quot;.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Traitement.png||center|alt=Schema de traitement|Circuit logique du traitement d'une action]] &amp;lt;br&amp;gt;&lt;br /&gt;
Les ronds verts permettent la distinction des 9 cases. &amp;lt;br&amp;gt;&lt;br /&gt;
Le rond jaune correspond à la zone des sorties d'état. Plus précisément, il s'agit de deux bus regroupant les cases remplies et le lieu de la case sélectionnée.&amp;lt;br&amp;gt;&lt;br /&gt;
Le rond noir correspond au choix de l'adversaire.&amp;lt;br&amp;gt;&lt;br /&gt;
Le rond orange correspond à la sortie &amp;quot;selection_done&amp;quot; qui effectue un état haut lorsqu'un choix valide a été fait par l'utilisateur.&amp;lt;br&amp;gt;&lt;br /&gt;
Le rond rouge met en évidence la zone permettant de traiter les décalage du bit de sélection. Ce décalage consiste à garder seulement UNE bascule à l'état haut en effectuant le passage logique d'une bascule à une autre en fonction du choix tout en appliquant un reset sur l'ancienne sélection. Le schéma de ce déplacement se trouve ci-dessous et est appliqué aux 9 cases.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Andor.png||center|alt=Schema permettant le déplacement|Circuit logique utilisé afin de déplacer le curseur]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Complément à la séance 1===&lt;br /&gt;
====Affichage dynamique====&lt;br /&gt;
&lt;br /&gt;
L'un des grands problèmes à la réalisation du morpion sur nanoboard est l'affichage dynamique. En effet, il va falloir à la fois stocker les valeurs, et stocker quel joueur a joué telle ou telle case, afin de savoir quel case s'allumera de la couleur désirée. Ceci rajouté à l'affichage dynamique de la sélection, ceci s'avère compliqué.&amp;lt;br&amp;gt;&lt;br /&gt;
La tâche a alors été décomposée en deux étapes :&lt;br /&gt;
* Le traitement des couleurs (Quelle couleur affilier à quelle case ?)&lt;br /&gt;
* L'affichage de ces couleurs&lt;br /&gt;
=====Traitement des couleurs=====&lt;br /&gt;
&lt;br /&gt;
Le but était de se simplifier au maximum les choses. Le premier problème est de savoir quel joueur a joué une case, pour ceci, nous nous sommes servi de l'état du plateau fourni dans le bloc TRAITEMENT. Nous savons quelles cases sont à 1 et imposons donc une couleur rouge à toutes ces cases.&amp;lt;br&amp;gt;&lt;br /&gt;
De plus, nous savons qu'à chaque fois que le joueur &amp;quot;physique&amp;quot; effectue un choix valide, un front montant est appliqué sur la broche &amp;quot;selection_done&amp;quot; de TRAITEMENT. Nous avons alors re-créé 9 registres symbolisant les cases, mais cette fois ci, en fonction de l'endroit sélectionné par l'utilisateur, si ce dernier effectue un choix valide, le registre passera à 1. Le but de cette manipulation est de recenser tous les registres joués par le joueur physique. &amp;lt;br&amp;gt;&lt;br /&gt;
Maintenant, nous relions ces registres aux valeurs de couleur verte afin d'additionner le vert au rouge  des cases jouées et obtiendrons finalement des cases de couleur jaune pour symboliser les cases du joueur physique et des cases de couleur rouge pour le jouer en ligne. &amp;lt;br&amp;gt;&lt;br /&gt;
Il ne reste qu'à relier directement la case sélectionnée (recensée par le bus Etat_selection de TRAITEMENT) à la couleur bleue.&amp;lt;br&amp;gt;&lt;br /&gt;
Finalement nous avons : &lt;br /&gt;
* joueur en ligne : rouge&lt;br /&gt;
* joueur physique : jaune&lt;br /&gt;
* sélection : magenta, cyan ou bleu&lt;br /&gt;
&lt;br /&gt;
 [[Fichier:Traitement_affichage.png||center|Schéma du traitement pré affichage|Circuit logique du traitement pré-affichage]] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Affichage=====&lt;br /&gt;
&lt;br /&gt;
La matrice led employée est une matrice led à anode commune. Elle a pour avantage de permettre la sélection d'une ligne et de la couleur de chaque colonne.&amp;lt;br&amp;gt;&lt;br /&gt;
Cependant, nous ne pouvons donc choisir la couleur que d'une colonne. C'est pourquoi nous allons faire varier cet affichage ligne par ligne à une fréquence élevée afin que l’œil humain ne le remarque pas. Nous pourrons donc choisir quelle couleur sera affichée sur chaque ligne. &amp;lt;br&amp;gt;&lt;br /&gt;
Cet affichage ligne par ligne sera effectué via un multiplexeur donc le bus de sélection sera relié à un compteur 3bits cadencé sur une clock suffisamment rapide pour opérer une persistance rétinienne. &amp;lt;br&amp;gt;&lt;br /&gt;
Dans chaque bus nous avons imposé certains bits afin que la grille soit dessinée en bleu.&amp;lt;br&amp;gt;&lt;br /&gt;
Le bus multiplexé sera ensuite redirigé vers les pins de la matrice leds.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Affichage.png||center|Schéma d'affichage|Circuit logique de l'affichage]] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Tests====&lt;br /&gt;
&lt;br /&gt;
Le bloc d'affichage a été testé et deux problèmes ont été rencontrés : &lt;br /&gt;
* La sélection a été mal réfléchie&lt;br /&gt;
* Un phénomène de rebond a été remarqué sur l'oscilloscope numérique&lt;br /&gt;
&lt;br /&gt;
=====La sélection=====&lt;br /&gt;
&lt;br /&gt;
Dans la fonction d'affichage, on retourne la sélection de la ligne en logique inversée. Le problème est que dans la version 1.0 de l'affichage, un GND avait été placé en entrée du MUX de sélection. Nous n'avions pas pensé au fait que dans ce cas la, toutes les sorties seraient en permanence au GND... &amp;lt;br&amp;gt;La correction a donc été de placer un VCC en entrée et d'inverser les sorties, ainsi une seul anode de ligne sera placée sur le GND.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Selection.PNG||center|Schéma de selection|Correction de la sortie de selection]] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le schéma semble fonctionnel cependant d'autres tests restent à faire.&lt;br /&gt;
&lt;br /&gt;
=====Le rebond=====&lt;br /&gt;
&lt;br /&gt;
Lors du test de l'affichage, la clock d'affichage a été simulée par un bouton de la nanoboard et l'affichage a été relié sur une seule ligne.&amp;lt;br&amp;gt;&lt;br /&gt;
Nous étions sensé remarquer que lorsque la ligne s'allume, si on appuie sur le bouton, elle s’éteint et enfin si nous appuyons sept fois sur le bouton, la ligne se rallume. &amp;lt;br&amp;gt;&lt;br /&gt;
Rien ne se passait comme prévu, et plus précisément, il n'y avait même pas de logique dans la ré-apparition de la ligne.&amp;lt;br&amp;gt;&lt;br /&gt;
Ayant déjà été confronté à des problèmes de rebonds avec des boutons poussoir, ce phénomène a été testé sur l'oscilloscope numérique.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Rebond.png||center|Exemple de rebond|Exemple de rebond]] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous demanderons alors aux référents quelle stratégie adopter : filtrer le signal avec un condensateur en parallèle au bouton ou bien utiliser une comparaison avec registre à décalage pour vérifier la stabilité du signal avant d'envoie du front montant.&amp;lt;br&amp;gt;&lt;br /&gt;
Certes la correction du bouton n'était pas nécessaire aux tests entrepris pour l'affichage (nous aurions pu mettre une clock interne) mais ceci nous servira pour filtrer les choix effectués par l'utilisateur (haut, droite, select). &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Objectifs pour la séance prochaine====&lt;br /&gt;
&lt;br /&gt;
Les schémas effectués restent des ébauches, il y a forcément eu des oublis. Néanmoins, comme chaque schéma se compile, le passage à l'étape de mise en place de la liaison série durant la séance 2 est envisageable. Il faudra donc créer un protocole plus concret afin de savoir qui doit jouer, quand envoyer, quand recevoir des données. Si le temps le permet, quelques programmes simples seront testés sur la nanoboard afin de vérifier le fonctionnement de l'affichage de la matrice après discutions avec les enseignants au sujet du phénomène de rebond.&lt;br /&gt;
&lt;br /&gt;
=== Partie informatique ===&lt;br /&gt;
Dans cette première séance nous avons programmé l'arduino afin de créer le programme de morpion, pour pouvoir tester la partie informatique sans disposer de la partie électronique.&lt;br /&gt;
Pour cela nous avons due apprendre à utiliser une matrice de LED RGB à l'aide des codes fournit par SparkFun.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Puis nous avons pu commencer à programmer le morpion:&lt;br /&gt;
&lt;br /&gt;
*le jeu se déroule dans une matrice 3x3.&lt;br /&gt;
*le position du curseur est représentée par une lumière bleue, celle des pions du joueurs 1 par une lumière rouge et celle des pions du joueurs 2 par une lumière verte.&lt;br /&gt;
*si le curseur est sur un pions les deux couleurs s'additionnent pour donner du magenta où du cyan.&lt;br /&gt;
*le joueur se déplace à l'aide de 2 boutons poussoir,l'un permettant d'aller vers le haut, l'autre permettant d'aller à droite&lt;br /&gt;
**pour éviter plusieurs déplacements d'un coup, un délais a été mis entre deux actions&lt;br /&gt;
*une fois tout en haut, si le joueur presse le bouton pour aller vers le haut le joueur se retrouve en bas.&lt;br /&gt;
*une fois tout à droite, si le joueur presse le bouton pour aller vers la droite le joueur se retrouve à gauche. &lt;br /&gt;
*enfin un dernier bouton poussoir permet de placer un pion à l'endroit où se trouve le curseur.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Une fois les mouvements programmés il fallait régir les règles du jeu:&lt;br /&gt;
&lt;br /&gt;
*Ainsi le curseur commence toujours en haut à droite&lt;br /&gt;
*Si le un joueurs arrive a créer une ligne de 3, il gagne la partie&lt;br /&gt;
*Si aucun joueur n'arrive à gagner et que le terrain est remplit, la partie se termine sur un match nul&lt;br /&gt;
*Une fois la partie terminée, le terrain est remis à zéros&lt;br /&gt;
&lt;br /&gt;
== Séance 2 ==&lt;br /&gt;
&lt;br /&gt;
=== Partie électronique ===&lt;br /&gt;
&lt;br /&gt;
La matrice led ne pourra être alimentée par les différentes broches de la nanoboard sous peine de créer une chute de tension et risquer un reset du fpga.&amp;lt;br&amp;gt;&lt;br /&gt;
Ainsi, le but de cet séance est de réfléchir à la conception d'un prototype de carte permettant d'alimenter la matrice led de manière externe. &amp;lt;br&amp;gt;&lt;br /&gt;
====Utilisation de transistors====&lt;br /&gt;
L'utilisation de transistors en saturé paraît la meilleur chose à faire. En effet, ceci permettra de générer un gain en courant et de contrôler l'état des différentes couleurs ligne par ligne et colonne par colonne.&amp;lt;br&amp;gt;&lt;br /&gt;
Pour permettra la liaison de chaque led au VCC, on utilisera un transistor PNP. Pour permettre la liaison au GND, on utilisera un NPN.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Montage_roussel.PNG||center|upright = 0.5|Montage d'une branche|Montage d'une branche de led]] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Comme il s'agit de transistor à anodes communes, il suffira de 8 transistors NPN. Notre choix s'est donc porté vers le ULN2803A, qui est un ensemble de 8 paires Darlington.&amp;lt;br&amp;gt;&lt;br /&gt;
L'utilisation de paires Darlington a l'avantage de permettre une génération élevée de courant. (Fort gain en courant)&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour ce qui est des cathodes, un problème de taille se pose. Il faudrait 24 transistors PNP pour gérer les 8 colonnes * 3couleurs. Ainsi, notre choix s'est plutôt déporté vers le buffer de portes trois états 74AS240. Cette famille de buffer 3 états a la capacité de délivrer un courant du même ordre de grandeur que l'ULN2803A.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Maintenant il reste à dimensionner la résistance sur chaque branche. Après quelques tests à l'aide d'un multimètre et de la matrice, on remarque que chaque led a besoin de 2mA pour fonctionner. Donc le but est de générer un courant d'environ 2mA. Ainsi, si on impose une tension de 5.5V aux bornes du montage, R = 5.5 / 0.002 = 2700 Ohms.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous avons désormais toutes les informations nécessaires pour le montage d'un prototype.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Le montage====&lt;br /&gt;
Au cours d'une séance supplémentaire, un plan a été élaboré et le prototype brasé. Voici donc le prototype achevé :&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Driver.JPG||center|400px|Driver matrice|Driver de la matrice]] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sur chaque sortie se trouve une résistance de 2700ohms. Le mieux aurait été de réaliser ce montage avec un réseau résistif cependant, le temps nous faisant défaut, nous avons utilisé les résistances déjà présentes en magasin.&amp;lt;br&amp;gt;&lt;br /&gt;
Sur chaque entrée se trouver une broche qui sera reliée à la nanoboard. &amp;lt;br&amp;gt;&lt;br /&gt;
Tous les buffers ont leur GND et VCC reliés au générateur 5.5V. Les paires Darlington sont reliées à la même masse.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Il ne restait plus qu'à relier la matrice led. Cette liaison parallèle a été réalisée en recyclant un vieux BUS d'ordinateur fixe. Finalement, voilà le montage final :&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Matrice_roussel.JPG||center|400px|Montage final de la partie électronique|Montage final de la partie électronique]] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Partie informatique ===&lt;br /&gt;
=====Arduino=====&lt;br /&gt;
Lors de cette séance nous avons pu finir le programme arduino, pour pouvoir jouer à deux sur une la carte.&lt;br /&gt;
Cette partie a été crée pour pouvoir tester les différentes fonctions, et sera modifier lors de prochaines séances.&lt;br /&gt;
La matrice LED affiche des clignotement irrégulier de couleur rouge, mais cela ne gêne pas pour jouer.&lt;br /&gt;
&lt;br /&gt;
=====Raspberry=====&lt;br /&gt;
Nous avons pu enfin commencer notre travail sur la raspberry.&lt;br /&gt;
Apres avoir branché la raspberry en série à notre pc, nous avons pu la configurer afin qu'elle fonctionne avec le réseau de l'ecole.&lt;br /&gt;
Pour cela nous avons mis une adresse IP du réseau INSECURE de l'école sur la Raspberry, celle de notre raspberry est :172.26.79.12.&lt;br /&gt;
C'est à partir de cette adresse que nous allons acceder aux pages html du projet.&lt;br /&gt;
Pour effectuer cette configuration nous avons remplacé les lignes correspondant à la configuration de la carte Ethernet dans le fichier /etc/network/interfaces par les lignes&lt;br /&gt;
  auto eth0&lt;br /&gt;
  iface eth0 inet static&lt;br /&gt;
    address 172.26.79.12&lt;br /&gt;
    netmask 255.255.240.0&lt;br /&gt;
    gateway 172.26.79.254&lt;br /&gt;
&lt;br /&gt;
Et afin d'indiquer le serveur DNS dans /etc/resolv.conf nous avons rajouté:&lt;br /&gt;
&lt;br /&gt;
  nameserver 193.48.57.34 &lt;br /&gt;
&lt;br /&gt;
Une fois la raspberry configurée, nous pouvons accéder à notre raspberry sans liaisons série grâce à un ssh.&lt;br /&gt;
Afin d'effectuer notre projet nous avons besoin de deux bibliothèques:&lt;br /&gt;
*jquery.js que l'ont a telecharger sur http://jquery.com/ afin de faciliter la programmation en javascript&lt;br /&gt;
*une bibliothèque C de WebSocket trouvé sur http://libwebsockets.org afin de pouvoir effectuer notre programme en C utilisant le Websocket&lt;br /&gt;
&lt;br /&gt;
Notre raspberry est maintenant prête pour notre projet, nous avons pu commencer notre fichier morpion.html qui permet de joueur au morpion à deux sur le même ordinateur, ce qui permet de tester les differentes fonctions utilisés pour la suite du projet.&lt;br /&gt;
&lt;br /&gt;
== Séance 3 ==&lt;br /&gt;
&lt;br /&gt;
=== Partie électronique ===&lt;br /&gt;
&lt;br /&gt;
Le montage réalisé a été testé. Quelques soudures ont été refaites et un composant ne fonctionnait pas. Heureusement, nous avions placé des socles afin de pouvoir enlever/placer les buffers facilement. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Cette mise en évidence de composant défaillant a pris beaucoup de temps, c'est pourquoi tout ce qui suit a été réalisé sur plusieurs séances supplémentaires. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La première chose effectuée fut le branchement de la carte à la nanoboard. Pour cela, nous avons utilisé un plan créé au préalable et un schematic de vérification.&amp;lt;br&amp;gt;&lt;br /&gt;
Ce schematic consistait à afficher colonne par colonne et couleur par couleur chaque led, ainsi, si un branchement était mauvais, nous pouvions le voir directement. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le montage finalisé, nous pouvions commencer les tests des fonctions créées en première séance. Sur le principe, ces schematics marchaient plutôt bien mais comme nous souhaitions générer des simulations de données venant de la liaison série, nous n'avions pas assez de boutons pour utiliser ces premières schematics. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ainsi, le travail de traitement a dû être refait. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====La seletion====&lt;br /&gt;
L'objectif est de créer un circuit numérique de sélection à l'aide de seulement deux boutons.&amp;lt;br&amp;gt;&lt;br /&gt;
Le choix s'est alors porté sur un compteur allant jusque 8. Ainsi, il y avait 9 possibilités de valeur et chaque valeur correspondra a une case.&amp;lt;br&amp;gt;&lt;br /&gt;
Le compteur devra s'incrémenter sur l'appuie d'un bouton de balayage. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Traite.JPG|vignette|center|600px|Selection|Selection]] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La sélection du joueur physique doit être contrôlée afin que seul un choix valide soit accepté. Ainsi, un schematic de vérification a été créé.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour savoir quelles cases ont déjà été jouées, nous avons décidé d'effectuer un OU logique entre les cases jouées par le joueur physique et les cases jouées par le joueur en ligne. Une fois le bus d'état global créé, il suffit d'effectuer un ET logique avec le choix de notre joueur physique. Si le choix se porte sur une case qui n'a jamais été jouée, le résultat de l'opération logique sera un bus nul. Nous comparons donc ce bus avec un bus nul. &amp;lt;br&amp;gt;&lt;br /&gt;
Finalement, le choix est valide si le comparateur sort une égalité ET le bouton de sélection a été appuyé.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Valider_choix.JPG|vignette|center|600px|Valider|Valider]] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====L'affichage====&lt;br /&gt;
Les schematics d'affichage sont restés les mêmes qu'à la séance 1, mis à part quelques corrections tel l'inversion des sorties d'affichage car nous travaillons en logique inversée sur les portes 3 états.&amp;lt;br&amp;gt;&lt;br /&gt;
Le pré-affichage s'occupe toujours du stockage des cases cochées par le joueur physique si il est le joueur courant.&amp;lt;br&amp;gt;&lt;br /&gt;
Afin d'assurer une persistance rétinienne, on devra relier l'affichage à une horloge d'au moins 3KHz.&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
[[Fichier:Traitement_preaffichage.JPG|vignette|center|500px|Pre-affichage|Pre-affichage]] [[Fichier:Affich.JPG|vignette|center|500px|Affichage|Affichage]] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Simulation de la liaison série====&lt;br /&gt;
Le but est de gérer des données semblables à ce que la raspberry pourrait nous envoyer. A savoir 1 bit de fin de partie, 1 bit de réception de donnée et 4 bits de choix de case.&amp;lt;br&amp;gt;&lt;br /&gt;
=====Conversion de l'adresse choisie=====&lt;br /&gt;
Il faut faire correspondre les 4 bits reçus à un bus de 9bits, chaque bit correspondant à une case. Ceci revient à faire un traitement similaire à la sélection du joueur physique...&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Traite_adversaire.JPG|vignette|center|400px|Conversion de l'adresse|Conversion de l'adresse]] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Stockage=====&lt;br /&gt;
Maintenant que nous savons convertir une adresse, on doit pouvoir mettre à jour les cases jouées par le joueur en ligne sur chaque réception de donnée.&amp;lt;br&amp;gt;&lt;br /&gt;
Pour effectuer ceci, on utilise 9 bascules pour stocker les choix dans différentes cases. Aucun traitement de choix valide n'est à faire car la raspberry s'en occupe déjà de son côté.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Stock_adv.JPG|vignette|center|600px|Stockage des cases de l'adversaire|Stockage des cases de l'adversaire]] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Propre à la simulation=====&lt;br /&gt;
Pour générer l'adresse, on utilise le même principe de sélection que celui du joueur physique.&amp;lt;br&amp;gt;&lt;br /&gt;
Pour avoir un aspect visuel de cette sélection, on utilise un MUX qui, en fonction du joueur courant, afficher la sélection de tel ou tel joueur.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Traite_sel.JPG|vignette|center|600px|MUX de selection|MUX de la sélection]] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour ce qui est du bit de fin de parti, on le symbolise par un bouton.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Phénomène de rebond=====&lt;br /&gt;
Pour gérer le rebond des boutons poussoirs, la solution a été numérique. Un registre à décalage a été créé, cadencé sur une clock, il décale sur chaque front d'horloge la valeur courante d'un bouton. En utilisant un comparateur, on obtient alors un front montant seulement lorsque le bouton est dans un état stable (c'est à dire lorsque tous les bits ont la même valeurs)&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Dump.JPG|vignette|center|600px|Anti-rebond|Anti-rebond]] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====TOPLEVEL====&lt;br /&gt;
Le schéma TOPLEVEL est alors le suivant :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Toplevel.JPG|vignette|center|800px|TOPLEVEL|TOPLEVEL]] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ainsi, si nous avions eu le bloc de liaison série bidirectionnel, nous aurions simplement eu à :&lt;br /&gt;
* Remplacer la génération d'adresse par les 4bits de poids faible du message de 8bits reçu.&lt;br /&gt;
* Remplacer le bouton de reset par le bit de fin de partie.&lt;br /&gt;
* Remplacer le bit de choix de l'adversaire par celui de réception validée.&lt;br /&gt;
* Relier le bit d'émission à la sortie de &amp;quot;choix valide&amp;quot;.&lt;br /&gt;
* Relier la sélection du joueur physique aux données à transmettre.&lt;br /&gt;
* Enlever le multiplexage de la sélection.&lt;br /&gt;
&lt;br /&gt;
====Réflexion====&lt;br /&gt;
La partie électronique de ce projet a donc été menée à bout. Cependant, après coup, on se rend compte que la création d'un prototype aurait été meilleure en imprimant un PCB plutôt qu'en utilisant une piste à bandes.&amp;lt;br&amp;gt;&lt;br /&gt;
Nous aurions également pu éviter une configuration en parallèle du driver. Ainsi, à l'aide de registres à décalages alimentés en externe, la lisibilité du circuit aurait été meilleure.&amp;lt;br&amp;gt;&lt;br /&gt;
On peut néanmoins se satisfaire de la réalisation numérique du circuit car elle exploite toutes les possibilités qu'offrent la conception via schematics à l'aide d'Altium designer à savoir :&amp;lt;br&amp;gt;&lt;br /&gt;
* La création d'une bibliothèque&lt;br /&gt;
* La création de composants&lt;br /&gt;
* L'utilisation de composants configurables avec édition de pins&amp;lt;br&amp;gt;&lt;br /&gt;
D'ailleurs, on comprend d'autant plus l'intérêt du langage VHDL après la création d'autant de schematics pour un projet de cette envergure.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Partie informatique ===&lt;br /&gt;
Nous avons commencé cette séance en continuant le morpion.html&lt;br /&gt;
Dans un premier temps nous avons crée &amp;quot;l'espace de jeu&amp;quot; en utilisant du code trouvé sur internet :&lt;br /&gt;
 &amp;lt;!DOCTYPE html&amp;gt;&lt;br /&gt;
  &amp;lt;head&amp;gt;&lt;br /&gt;
   &amp;lt;meta charset=&amp;quot;utf-8&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;style type=&amp;quot;text/css&amp;quot;&amp;gt;&lt;br /&gt;
 .table{&lt;br /&gt;
 width : 330px;&lt;br /&gt;
 height : 330px;&lt;br /&gt;
 border : solid 3px black;&lt;br /&gt;
  border-collapse: collapse;&lt;br /&gt;
 }&lt;br /&gt;
 .td{&lt;br /&gt;
 border : solid 3px black;&lt;br /&gt;
 width : 33%;&lt;br /&gt;
 height : 33%;&lt;br /&gt;
 }&lt;br /&gt;
 &amp;lt;/style&amp;gt;&lt;br /&gt;
 &amp;lt;title&amp;gt; Jeu morpion&amp;lt;/title&amp;gt;&lt;br /&gt;
 &amp;lt;/head&amp;gt;&lt;br /&gt;
et&lt;br /&gt;
 &amp;lt;body&amp;gt;&lt;br /&gt;
   h1&amp;gt;Morpion&amp;lt;/h1&amp;gt;&lt;br /&gt;
 table class=&amp;quot;table&amp;quot; align=&amp;quot;center&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
       &amp;lt;td class=&amp;quot;td&amp;quot; onclick=&amp;quot;placerSigne(0)&amp;quot; id=&amp;quot;0&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
       &amp;lt;td class=&amp;quot;td&amp;quot; onclick=&amp;quot;placerSigne(1)&amp;quot; id=&amp;quot;1&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
       &amp;lt;td class=&amp;quot;td&amp;quot; onclick=&amp;quot;placerSigne(2)&amp;quot; id=&amp;quot;2&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
       &amp;lt;td class=&amp;quot;td&amp;quot; onclick=&amp;quot;placerSigne(3)&amp;quot; id=&amp;quot;3&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
       &amp;lt;td class=&amp;quot;td&amp;quot; onclick=&amp;quot;placerSigne(4)&amp;quot; id=&amp;quot;4&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
       &amp;lt;td class=&amp;quot;td&amp;quot; onclick=&amp;quot;placerSigne(5)&amp;quot; id=&amp;quot;5&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
       &amp;lt;td class=&amp;quot;td&amp;quot; onclick=&amp;quot;placerSigne(6)&amp;quot; id=&amp;quot;6&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
       &amp;lt;td class=&amp;quot;td&amp;quot; onclick=&amp;quot;placerSigne(7)&amp;quot; id=&amp;quot;7&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
       &amp;lt;td class=&amp;quot;td&amp;quot; onclick=&amp;quot;placerSigne(8)&amp;quot; id=&amp;quot;8&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
 &amp;lt;/table&amp;gt;&lt;br /&gt;
 table style=&amp;quot;border : solid 3px #3399FF;&amp;quot; align=&amp;quot;center&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;tr&amp;gt;&lt;br /&gt;
 &amp;lt;td style=&amp;quot;border : solid 1px #3399FF;&amp;quot;&amp;gt;Joueur 1&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;td style=&amp;quot;border : solid 1px #3399FF;&amp;quot;&amp;gt;Joueur 2&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
 &amp;lt;tr&amp;gt;&lt;br /&gt;
 &amp;lt;td style=&amp;quot;border : solid 1px #3399FF;&amp;quot; id=&amp;quot;scre1&amp;quot;&amp;gt;0&lt;br /&gt;
 &amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;td style=&amp;quot;border : solid 1px #3399FF;&amp;quot; id=&amp;quot;scre2&amp;quot;&amp;gt;0&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
 &amp;lt;/table&amp;gt;&lt;br /&gt;
  &amp;lt;/body&amp;gt;&lt;br /&gt;
 &amp;lt;/html&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le code ci dessus n'est pas totalement bon, puisque nous avons du enlever des &amp;quot;&amp;lt;&amp;quot; afin d'afficher le code et non ce qu'il en résulte.&lt;br /&gt;
&lt;br /&gt;
L'espacement entre deux lignes peut changer en fonction de la taille de ce qui est mis dedans.&lt;br /&gt;
Si on remplis de case blanche (&amp;quot;vide.png&amp;quot;) de taille 100*100 on obtient:&lt;br /&gt;
[[Fichier:morpion1.png]]&lt;br /&gt;
&lt;br /&gt;
A chaque clique sur une case la fonction placerSigne(n) va s'effectuer avec n le numéros de la case sélectionnée.&lt;br /&gt;
 function placerSigne(idCase)&lt;br /&gt;
 { &lt;br /&gt;
         if(morpion[idCase] == 0)&lt;br /&gt;
         {coup++;&lt;br /&gt;
         morpion[idCase]=joueur;&lt;br /&gt;
         if (joueur==1)&lt;br /&gt;
                 {&lt;br /&gt;
  	  	 joueur=2;&lt;br /&gt;
                 document.getElementById(idCase).innerHTML = '&amp;lt;img src=&amp;quot;croix.gif&amp;quot; alt=&amp;quot;image !&amp;quot; /&amp;gt;';&lt;br /&gt;
 &lt;br /&gt;
                 }&lt;br /&gt;
 	else    {&lt;br /&gt;
 	   	 joueur=1;&lt;br /&gt;
                 document.getElementById(idCase).innerHTML = '&amp;lt;img src=&amp;quot;rond.gif&amp;quot; alt=&amp;quot;image !&amp;quot; /&amp;gt;';&lt;br /&gt;
 &lt;br /&gt;
                 }&lt;br /&gt;
 	if (coup&amp;gt;4)&lt;br /&gt;
 		{if (gagner(idCase))&lt;br /&gt;
 			{if (joueur==1)&lt;br /&gt;
 				{score2++;&lt;br /&gt;
 				alert(&amp;quot;joueur 2 gagne &amp;quot;);&lt;br /&gt;
 				finpartie();&lt;br /&gt;
 				}&lt;br /&gt;
 			else{score1++;&lt;br /&gt;
 				alert(&amp;quot;joueur 1 gagne &amp;quot;);&lt;br /&gt;
 				finpartie();&lt;br /&gt;
 				}&lt;br /&gt;
 			&lt;br /&gt;
 			}&lt;br /&gt;
 		else {if (egalite()==0)&lt;br /&gt;
 			{alert(&amp;quot;egalite&amp;quot;);&lt;br /&gt;
 			finpartie();}&lt;br /&gt;
 		     }&lt;br /&gt;
 		}&lt;br /&gt;
         }&lt;br /&gt;
         else{alert(&amp;quot;pas le droit&amp;quot;);}&lt;br /&gt;
 }&lt;br /&gt;
Cette fonction place une image 100x100 de rond ou de croix dans la case sélectionnée en fonction du joueur qui doit jouer.&lt;br /&gt;
*Elle calcule les scores de chaque joueurs, et appelle gagner et egalite pour savoir si on est dans une fin de partie.&lt;br /&gt;
*Et elle alerte le joueur si la case sélectionnée ne peut pas être jouée.&lt;br /&gt;
&lt;br /&gt;
Pour cela elle utilise le tableau morpion de taille 9 remplit de 0 à l'origine, et modifie la case sélectionnée en y mettant 1 ou 2 en fonction du joueur qui a joué.&lt;br /&gt;
&lt;br /&gt;
La variable coup permet de déterminer le nombre de coup jouer, ce qui permet de ne pas verifier si une partie une gagnée tant que coup n'est pas supérieur à 4, puisqu'il faut au minimum 5 coup pour gagner.&lt;br /&gt;
&lt;br /&gt;
 function finpartie()&lt;br /&gt;
 {for (var j=0;j&amp;lt;9;j++)&lt;br /&gt;
 	{ document.getElementById(j).innerHTML = '&amp;lt;img src=&amp;quot;vide.png&amp;quot; alt=&amp;quot;image !&amp;quot; /&amp;gt;';&lt;br /&gt;
 	morpion[j]=0;&lt;br /&gt;
 	}&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
La fonction finpartie() met les variables morpion et coup à zéro, et place des images blanches dans toutes les cases.&lt;br /&gt;
&lt;br /&gt;
Elle est appelé que si il y une victoire ou une égalité.&lt;br /&gt;
&lt;br /&gt;
Dans morpionsc.html qui est le fichier html final, joueur est remis à 1 dans cette fonction.&lt;br /&gt;
&lt;br /&gt;
Dans le fichier morpion.html cela n’étais pas cessionnaire et permettait en plus au joueur perdant de commencer.&lt;br /&gt;
&lt;br /&gt;
Mais pour simplifier la suite nous avons préféré définir que toujours le même joueur commencerais. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 function gagner(idCase)&lt;br /&gt;
 {switch(idCase)&lt;br /&gt;
         {&lt;br /&gt;
 case 0:&lt;br /&gt;
         return (diagonal1()||ligne1()||colonne1());&lt;br /&gt;
         break;&lt;br /&gt;
 case 1:&lt;br /&gt;
         return (ligne1()||colonne2());&lt;br /&gt;
         break;&lt;br /&gt;
 case 2:&lt;br /&gt;
         return (diagonal2()||ligne1()||colonne3());&lt;br /&gt;
         break;&lt;br /&gt;
 case 3:&lt;br /&gt;
         return (ligne2()||colonne1());&lt;br /&gt;
         break; &lt;br /&gt;
 &lt;br /&gt;
 case 4:&lt;br /&gt;
         return (diagonal1()||diagonal2()||ligne2()||colonne2());&lt;br /&gt;
         break;&lt;br /&gt;
 case 5:&lt;br /&gt;
         return (ligne2()||colonne3());&lt;br /&gt;
         break;&lt;br /&gt;
 case 6:&lt;br /&gt;
         return (diagonal2()||ligne3()||colonne1());&lt;br /&gt;
         break;&lt;br /&gt;
 case 7:&lt;br /&gt;
         return (ligne3()||colonne2());&lt;br /&gt;
         break;&lt;br /&gt;
 case 8:&lt;br /&gt;
         return (diagonal1()||ligne3()||colonne3());&lt;br /&gt;
         break;&lt;br /&gt;
         }&lt;br /&gt;
 }&lt;br /&gt;
La fonction gagner appelle des fonctions diagonal,ligne,colonne qui retourne 1 si il y'a 3 même symboles sur leur domaines.&lt;br /&gt;
&lt;br /&gt;
Gagner teste donc si il y a une suite de 3 symboles sur la ligne, colonne et les diagonales passant par la case qui a été joué.&lt;br /&gt;
&lt;br /&gt;
 function egalite()&lt;br /&gt;
 {var cp=0;&lt;br /&gt;
 for (var i=0;i &amp;lt; 9;i++)&lt;br /&gt;
         {if (morpion[i]==0)&lt;br /&gt;
 		{cp++;}&lt;br /&gt;
         }&lt;br /&gt;
 return cp;&lt;br /&gt;
 }&lt;br /&gt;
La fonction egalité teste si toutes les cases ont été joué.&lt;br /&gt;
&lt;br /&gt;
On aurait pu utiliser la variable coup, si coup était égal à 9 alors égalité, mais la fonction egalité permet de vérifier si il n'y a pas eu de problème lors de la modification de la matrice.&lt;br /&gt;
&lt;br /&gt;
Avec morpion.html nous avons pu apprendre le javascript, et poser les bases de notre fichier html final.&lt;br /&gt;
&lt;br /&gt;
===Complément à la séance 3===&lt;br /&gt;
&lt;br /&gt;
====HTML====&lt;br /&gt;
Pour le HTML/Javascript on garde les mêmes fonctions gagner et egalite.&lt;br /&gt;
On va ajouter lors de l'initialisation&lt;br /&gt;
 window.WebSocket=(window.WebSocket||window.MozWebSocket);&lt;br /&gt;
 &lt;br /&gt;
 var websocket=new WebSocket('ws://172.26.79.12:9000','myprotocol');&lt;br /&gt;
 &lt;br /&gt;
 websocket.onopen=function(){ $('h1').css('color','green'); };&lt;br /&gt;
 &lt;br /&gt;
 websocket.onerror=function(){ $('h1').css('color','red'); };&lt;br /&gt;
On modifie placerSigne:&lt;br /&gt;
*si ce n'est pas au tour du joueur 1 de jouer on lui envoie une alerte.&lt;br /&gt;
*si il y a une fin de partie on envoie 9 grâce a sendMessage.&lt;br /&gt;
*si il n'y a pas de fin de partie on envoie la case jouer toujours grâce à sendMessage:&lt;br /&gt;
 function sendMessage(data){&lt;br /&gt;
 websocket.send(data);&lt;br /&gt;
 }&lt;br /&gt;
Pour finpartie on rajoute juste &lt;br /&gt;
 joueur=1;&lt;br /&gt;
&lt;br /&gt;
Pour faire jouer le second joueur il faut recevoir un message du websocket ainsi :&lt;br /&gt;
 websocket.onmessage=function(message)&lt;br /&gt;
sera la fonction dans laquelle on fera jouer le joueur 2. &lt;br /&gt;
&lt;br /&gt;
Le websocket envoie simplement la case en char* ainsi:&lt;br /&gt;
 websocket.onmessage=function(message){&lt;br /&gt;
 idCase=parseInt((message.data)-30);&lt;br /&gt;
 console.log(idCase);&lt;br /&gt;
 &lt;br /&gt;
 if(morpion[idCase] == 0)&lt;br /&gt;
                 {coup++;&lt;br /&gt;
                  morpion[idCase]=2;&lt;br /&gt;
                  joueur=1;&lt;br /&gt;
  		document.getElementById(idCase).innerHTML = '&amp;lt;img src=&amp;quot;rond.gif&amp;quot; alt=&amp;quot;image !&amp;quot; /&amp;gt;';&lt;br /&gt;
  		 if (coup&amp;gt;4)&lt;br /&gt;
 			 {if (gagner(idCase))&lt;br /&gt;
                                {score2++; &lt;br /&gt;
                                         alert(&amp;quot;joueur 2 gagne &amp;quot;);&lt;br /&gt;
                                         finpartie();&lt;br /&gt;
 					sendMessage(9);&lt;br /&gt;
                                }&lt;br /&gt;
  &lt;br /&gt;
 &lt;br /&gt;
                           else {if (egalite()==0)&lt;br /&gt;
                                         {alert(&amp;quot;egalite&amp;quot;);&lt;br /&gt;
                                         finpartie();&lt;br /&gt;
 					sendMessage(9);&lt;br /&gt;
 &lt;br /&gt;
                                         }&lt;br /&gt;
 				}&lt;br /&gt;
 			&lt;br /&gt;
 			}&lt;br /&gt;
 		}&lt;br /&gt;
 &lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Console.log permet d'afficher dans le debug, la valeur traitée.&lt;br /&gt;
On envoie toujours 9 si la partie se termine, sinon on effectue la même chose que dans placerSigne de morpion.html&lt;br /&gt;
&lt;br /&gt;
====Fichier C====&lt;br /&gt;
Il faut maintenant créer la passerelle entre l'arduino et le fichier html.&lt;br /&gt;
Pour cela notre fichier doit utiliser des fonctions de websocket mais aussi de serial.c&lt;br /&gt;
Les fonctions de serial.c sont directement intégrées dans notre fichier, il n'y a donc pas besoin de lui faire appel pour compiler.&lt;br /&gt;
 &lt;br /&gt;
 #include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;stdlib.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;string.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;unistd.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;fcntl.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;termios.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;strings.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;sys/types.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;sys/ioctl.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;sys/file.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;linux/serial.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;libwebsockets.h&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 #define MAX_FRAME_SIZE  1024&lt;br /&gt;
 #define WAIT_DELAY      50&lt;br /&gt;
 #define MAX_MESSAGE     2 &lt;br /&gt;
 &lt;br /&gt;
 #define SERIAL_READ 0&lt;br /&gt;
 #define SERIAL_WRITE 1&lt;br /&gt;
 #define SERIAL_BOTH 2&lt;br /&gt;
 &lt;br /&gt;
 #define SERIAL_DEVICE &amp;quot;/dev/ttyUSB0&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 int sd;&lt;br /&gt;
  &lt;br /&gt;
 &lt;br /&gt;
 //&lt;br /&gt;
 // Open serial port device&lt;br /&gt;
 //&lt;br /&gt;
 int serialOpen(char *device,int mode){&lt;br /&gt;
 int flags=(mode==SERIAL_READ?O_RDONLY:(mode==SERIAL_WRITE?O_WRONLY:O_RDWR));&lt;br /&gt;
 int fd=open(device,flags|O_NOCTTY|O_NONBLOCK); &lt;br /&gt;
 if(fd&amp;lt;0){ perror(device); exit(-1); }&lt;br /&gt;
 return fd;&lt;br /&gt;
 }&lt;br /&gt;
  &lt;br /&gt;
 //&lt;br /&gt;
 // Serial port configuration&lt;br /&gt;
 //&lt;br /&gt;
 void serialConfig(int fd,int speed){&lt;br /&gt;
 struct termios new;&lt;br /&gt;
 bzero(&amp;amp;new,sizeof(new));&lt;br /&gt;
 new.c_cflag=CLOCAL|CREAD|speed|CS8;&lt;br /&gt;
 new.c_iflag=0;&lt;br /&gt;
 new.c_oflag=0;&lt;br /&gt;
 new.c_lflag=0;     /* set input mode (non-canonical, no echo,...) */&lt;br /&gt;
 new.c_cc[VTIME]=0; /* inter-character timer unused */&lt;br /&gt;
 new.c_cc[VMIN]=1;  /* blocking read until 1 char received */&lt;br /&gt;
 if(tcsetattr(fd,TCSANOW,&amp;amp;new)&amp;lt;0){ perror(&amp;quot;serialInit.tcsetattr&amp;quot;); exit(-1); }&lt;br /&gt;
 }&lt;br /&gt;
  &lt;br /&gt;
 //&lt;br /&gt;
 // Serial port termination&lt;br /&gt;
 //&lt;br /&gt;
 void serialClose(int fd){&lt;br /&gt;
 close(fd);&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 static int callback_http(&lt;br /&gt;
   struct libwebsocket_context *this,&lt;br /&gt;
   struct libwebsocket *wsi,enum libwebsocket_callback_reasons reason,&lt;br /&gt;
   void *user,void *in,size_t len)&lt;br /&gt;
 {&lt;br /&gt;
 return 0;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
  static struct libwebsocket_protocols protocols[] = {&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;http-only&amp;quot;,   // name&lt;br /&gt;
      callback_http, // callback&lt;br /&gt;
      0,             // data size&lt;br /&gt;
      0              // maximum frame size&lt;br /&gt;
    },&lt;br /&gt;
    {&amp;quot;myprotocol&amp;quot;,callback_my,0,MAX_FRAME_SIZE},&lt;br /&gt;
    {NULL,NULL,0,0}&lt;br /&gt;
    };&lt;br /&gt;
  &lt;br /&gt;
 &lt;br /&gt;
Ci-dessus se trouve le code se trouvant dans serial.c afin de créer serialOpen, serialClose et serialConfig, ainsi que l'initialisation de variables utilisées.&lt;br /&gt;
&lt;br /&gt;
Mais aussi la fonction callback_http(),la structure libwebsocket_protocols, et l'initialisation de variables. &lt;br /&gt;
 &lt;br /&gt;
 int main(void) {&lt;br /&gt;
 int port=9000;&lt;br /&gt;
 struct lws_context_creation_info info;&lt;br /&gt;
 memset(&amp;amp;info,0,sizeof info);&lt;br /&gt;
 info.port=port;&lt;br /&gt;
 info.protocols=protocols;&lt;br /&gt;
 info.gid=-1;&lt;br /&gt;
 info.uid=-1;&lt;br /&gt;
 struct libwebsocket_context *context=libwebsocket_create_context(&amp;amp;info);&lt;br /&gt;
 if(context==NULL){&lt;br /&gt;
   fprintf(stderr, &amp;quot;libwebsocket init failed\n&amp;quot;);&lt;br /&gt;
   return -1;&lt;br /&gt;
   }&lt;br /&gt;
 printf(&amp;quot;starting server...\n&amp;quot;);&lt;br /&gt;
 &lt;br /&gt;
   &lt;br /&gt;
 sd=serialOpen(SERIAL_DEVICE,SERIAL_BOTH);&lt;br /&gt;
 serialConfig(sd,B9600);&lt;br /&gt;
 &lt;br /&gt;
  &lt;br /&gt;
 while(1){&lt;br /&gt;
   libwebsocket_service(context,WAIT_DELAY);&lt;br /&gt;
   }&lt;br /&gt;
     &lt;br /&gt;
 &lt;br /&gt;
 serialClose(sd); &lt;br /&gt;
 &lt;br /&gt;
  &lt;br /&gt;
 libwebsocket_context_destroy(context);&lt;br /&gt;
 return 0;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Le main permet d'initialiser une liaison série de 9600 Baud et de lancer une boucle infini dans laquelle la passerelle entre arduino et html va s'effectuer.&lt;br /&gt;
&lt;br /&gt;
 static int callback_my(&lt;br /&gt;
   struct libwebsocket_context * this,&lt;br /&gt;
   struct libwebsocket *wsi,enum libwebsocket_callback_reasons reason,&lt;br /&gt;
   void *user,void *in,size_t len)&lt;br /&gt;
 {&lt;br /&gt;
 static char message[2+LWS_SEND_BUFFER_PRE_PADDING+LWS_SEND_BUFFER_POST_PADDING];&lt;br /&gt;
 static char valeur;&lt;br /&gt;
 switch(reason){&lt;br /&gt;
   case LWS_CALLBACK_ESTABLISHED:&lt;br /&gt;
     printf(&amp;quot;connection established\n&amp;quot;);&lt;br /&gt;
                 // Declenchement d'un prochain envoi au navigateur&lt;br /&gt;
     break;&lt;br /&gt;
   case LWS_CALLBACK_RECEIVE:&lt;br /&gt;
                 // Ici sont traites les messages envoyes par le navigateur&lt;br /&gt;
 //printf(&amp;quot;received data: %s\n&amp;quot;,(char *)in);&lt;br /&gt;
     if(write(sd,in,sizeof(char))!=1){ perror(&amp;quot;main.write&amp;quot;); exit(-1); }&lt;br /&gt;
 printf(&amp;quot;writen data: %s\n&amp;quot;,(char *)in);&lt;br /&gt;
                 // Declenchement d'un prochain envoi au navigateur&lt;br /&gt;
     libwebsocket_callback_on_writable(this,wsi);&lt;br /&gt;
     break;&lt;br /&gt;
   case LWS_CALLBACK_SERVER_WRITEABLE:&lt;br /&gt;
                 // Ici sont envoyes les messages au navigateur&lt;br /&gt;
 &lt;br /&gt;
 if (read(sd,&amp;amp;valeur,sizeof(char))==1)&lt;br /&gt;
 { &lt;br /&gt;
 //printf(&amp;quot;write data: %c\n&amp;quot;,valeur);&lt;br /&gt;
       char *out=message+LWS_SEND_BUFFER_PRE_PADDING;&lt;br /&gt;
        sprintf(out,&amp;quot;%02x&amp;quot;,valeur);&lt;br /&gt;
 //printf(&amp;quot;write data: %s\n&amp;quot;,(char *)out);&lt;br /&gt;
 &lt;br /&gt;
     libwebsocket_write(wsi,(unsigned char *)out,MAX_MESSAGE,LWS_WRITE_TEXT);&lt;br /&gt;
 }&lt;br /&gt;
 else{libwebsocket_callback_on_writable(this,wsi);&lt;br /&gt;
 }&lt;br /&gt;
     break;&lt;br /&gt;
   default:&lt;br /&gt;
     break;&lt;br /&gt;
        	  }   &lt;br /&gt;
 return 0;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
La fonction ci-dessus est celle qui definie la passerelle.&lt;br /&gt;
&lt;br /&gt;
Si elle établit une liaison, elle imprime &amp;quot;connection established&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Une fois la connection établit on se retrouve dans le cas LWS_CALLBACK_RECEIVE si la page html envoie une valeur.&lt;br /&gt;
&lt;br /&gt;
Dans ce cas la valeur pointée par in est écrite dans sd(liaison serie), puis on utilise :&lt;br /&gt;
 libwebsocket_callback_on_writable(this,wsi);&lt;br /&gt;
&lt;br /&gt;
Qui permet de passer en mode réception de message par la liaison série, qui est definit ici par le cas:&lt;br /&gt;
 case LWS_CALLBACK_SERVER_WRITEABLE:&lt;br /&gt;
Dans ce cas on lit la valeur dans la liaison serie et on la met dans la variable valeur. Si il n'y a rien à lire pour le moment on utilise a nouveau:&lt;br /&gt;
 libwebsocket_callback_on_writable(this,wsi);&lt;br /&gt;
Afin de rester dans le même case.&lt;br /&gt;
&lt;br /&gt;
Si la valeur a été lu on crée out:&lt;br /&gt;
  char *out=message+LWS_SEND_BUFFER_PRE_PADDING;&lt;br /&gt;
avec message :&lt;br /&gt;
 static char message[2+LWS_SEND_BUFFER_PRE_PADDING+LWS_SEND_BUFFER_POST_PADDING];&lt;br /&gt;
out va etre du bon type et de la bonne taille pour pouvoir être envoyer a l'html.&lt;br /&gt;
On modife donc la valeur de out grâce à la valeur lue:&lt;br /&gt;
 sprintf(out,&amp;quot;%02x&amp;quot;,valeur);&lt;br /&gt;
Puis on l'envoie:&lt;br /&gt;
 libwebsocket_write(wsi,(unsigned char *)out,MAX_MESSAGE,LWS_WRITE_TEXT);&lt;br /&gt;
&lt;br /&gt;
====Arduino====&lt;br /&gt;
Pour l'affichage de la matrice LED nous avons utilisé un exemple trouvé sur le site de SparkFun Electronics:&lt;br /&gt;
 //Example_RGBMatrix.ino&lt;br /&gt;
 //By: Ryan Owens @ SparkFun Electronics&lt;br /&gt;
 //&lt;br /&gt;
 //modified 27 Oct 2014&lt;br /&gt;
 //by Bobby Chan @ SparkFun Electronics&lt;br /&gt;
&lt;br /&gt;
Nous avons ensuite crée:&lt;br /&gt;
&lt;br /&gt;
 void affichage(int je[3][3])&lt;br /&gt;
 {&lt;br /&gt;
   for (int i = 0; i &amp;lt; 3; i++)&lt;br /&gt;
   {&lt;br /&gt;
     for (int j = 0; j &amp;lt; 3; j++)&lt;br /&gt;
     { if (je[i][j] == 1)&lt;br /&gt;
       {&lt;br /&gt;
         color_buffer[0 + i + j * 8] = BLUE;&lt;br /&gt;
       }&lt;br /&gt;
       else if (je[i][j] == 2)&lt;br /&gt;
       {&lt;br /&gt;
         color_buffer[0 + i + j * 8] = RED;&lt;br /&gt;
       }&lt;br /&gt;
       else if (je[i][j] == 5)&lt;br /&gt;
       {&lt;br /&gt;
         color_buffer[0 + i + j * 8] = TEAL;&lt;br /&gt;
       }&lt;br /&gt;
       else if (je[i][j] == 4)&lt;br /&gt;
       {&lt;br /&gt;
         color_buffer[0 + i + j * 8] = GREEN;&lt;br /&gt;
       }&lt;br /&gt;
       else if (je[i][j] == 3) {&lt;br /&gt;
         color_buffer[0 + i + j * 8] = MAGENTA;&lt;br /&gt;
       }&lt;br /&gt;
       else if (je[i][j] == 0) {&lt;br /&gt;
         color_buffer[0 + i + j * 8] = BLACK;&lt;br /&gt;
       }&lt;br /&gt;
     }&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
Qui change la valeur des buffers sur une matrice 3x3, en fonction d'une matrice donnée en paramètre de taille 3x3.&lt;br /&gt;
&lt;br /&gt;
Il faut ensuite matrix_write(); pour observer les resultats&lt;br /&gt;
 &lt;br /&gt;
 void go(int joueur)&lt;br /&gt;
 {if (joueur==2)&lt;br /&gt;
 {color_buffer[7]=GREEN;}&lt;br /&gt;
 else{color_buffer[7]=RED;}}&lt;br /&gt;
Cette fonction met un buffer vert si le joueur 2 peut jouer sinon rouge, le buffer se trouve en dehors de la zone de jeu et donc ne gène pas l'utilisateur.&lt;br /&gt;
&lt;br /&gt;
Il faut ensuite matrix_write(); pour observer les resultats&lt;br /&gt;
&lt;br /&gt;
 void reset(int jeu[3][3])&lt;br /&gt;
 { joueur = 0;&lt;br /&gt;
 color_buffer[7]=RED;&lt;br /&gt;
   for (int i = 0; i &amp;lt; 3; i++)&lt;br /&gt;
   {&lt;br /&gt;
     for (int j = 0; j &amp;lt; 3; j++)&lt;br /&gt;
     { jeu[i][j] = 0;&lt;br /&gt;
     }&lt;br /&gt;
   }&lt;br /&gt;
   jeu[0][0] = 1;&lt;br /&gt;
 }&lt;br /&gt;
Cette fonction remet dispose la matrice LED comme lors d'un début de partie.&lt;br /&gt;
On aurait pu remettre a zéro certaines variables dans cette fonction.&lt;br /&gt;
&lt;br /&gt;
Une fois ces fonctions crées, il faut crée la fonction loop:&lt;br /&gt;
 void loop() {&lt;br /&gt;
   go(joueur);&lt;br /&gt;
   if (Serial.available() &amp;gt; 0)&lt;br /&gt;
   { int a = (Serial.read() - 48);&lt;br /&gt;
     if (a == 9) {&lt;br /&gt;
       reset(jeu);&lt;br /&gt;
     }&lt;br /&gt;
     else {&lt;br /&gt;
       if (joueur == 0)&lt;br /&gt;
       { int b = (a) / 3;&lt;br /&gt;
         int c = a - (b) * 3;&lt;br /&gt;
         jeu[b][c] = 2;&lt;br /&gt;
         joueur = 2;&lt;br /&gt;
         if (jeu[0][0] == 2)&lt;br /&gt;
         {&lt;br /&gt;
           jeu[0][0] = 3;&lt;br /&gt;
         }&lt;br /&gt;
       }&lt;br /&gt;
     }&lt;br /&gt;
   }&lt;br /&gt;
   else {&lt;br /&gt;
     if (joueur == 2)&lt;br /&gt;
     { if (digitalRead(9) == 1)&lt;br /&gt;
       { jeu[l][h] = jeu[l][h] - 1;&lt;br /&gt;
         h = (h + 1) % 3;&lt;br /&gt;
         jeu[l][h]++;&lt;br /&gt;
         delay(50);&lt;br /&gt;
       }&lt;br /&gt;
       else if (digitalRead(8) == 1)&lt;br /&gt;
       {&lt;br /&gt;
         jeu[l][h] = jeu[l][h] - 1;&lt;br /&gt;
         l = (l + 1) % 3;&lt;br /&gt;
         jeu[l][h]++;&lt;br /&gt;
         delay(50);&lt;br /&gt;
       }&lt;br /&gt;
       else if (digitalRead(7) == 1)&lt;br /&gt;
       {&lt;br /&gt;
         if (jeu[l][h] == 1)&lt;br /&gt;
         { jeu[l][h] = 4;&lt;br /&gt;
           Serial.write((l * 3 + h) + 48);&lt;br /&gt;
 &lt;br /&gt;
           l = 0;&lt;br /&gt;
           h = 0;&lt;br /&gt;
           jeu[l][h] = jeu[l][h] + 1;&lt;br /&gt;
           joueur = 0;&lt;br /&gt;
         }&lt;br /&gt;
       }&lt;br /&gt;
     }&lt;br /&gt;
   }&lt;br /&gt;
 &lt;br /&gt;
   affichage(jeu);&lt;br /&gt;
   matrix_write();&lt;br /&gt;
   delay(100);&lt;br /&gt;
 }&lt;br /&gt;
Cette fonction utilise en premier lieu go() pour indiquer au joueur si il peut jouer.&lt;br /&gt;
Ensuite il vérifie la liaison série.&lt;br /&gt;
&lt;br /&gt;
On enlève 48 a ce que l'on a reçut, car on reçoit un char et on désire un int.&lt;br /&gt;
&lt;br /&gt;
Ainsi on ajoutera 48 a ce qu'on enverra dans le Serial.write.&lt;br /&gt;
&lt;br /&gt;
Si on reçoit 9, fin de partie.&lt;br /&gt;
Sinon on vérifie qui doit jouer et on le fais jouer si on peut ou on attend. &lt;br /&gt;
&lt;br /&gt;
Le Joueur 0 équivaut au joueur 1 pour l'html.&lt;br /&gt;
&lt;br /&gt;
Une fois les coups effectués, on affiche ce qui en résulte et ajoute un delay pour éviter d'appuyer deux fois d'affilée sans le vouloir.&lt;br /&gt;
&lt;br /&gt;
== Démonstration ==&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;/div&gt;</summary>
		<author><name>Tstieven</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Fichier:Morpion1.png&amp;diff=32306</id>
		<title>Fichier:Morpion1.png</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Fichier:Morpion1.png&amp;diff=32306"/>
				<updated>2016-06-16T23:07:26Z</updated>
		
		<summary type="html">&lt;p&gt;Tstieven : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Tstieven</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Projet_IMA3_P1,_2015/2016,_TD2&amp;diff=32305</id>
		<title>Projet IMA3 P1, 2015/2016, TD2</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Projet_IMA3_P1,_2015/2016,_TD2&amp;diff=32305"/>
				<updated>2016-06-16T23:06:20Z</updated>
		
		<summary type="html">&lt;p&gt;Tstieven : /* Partie informatique */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Projet IMA3-SC 2015/2016 : MORPION =&lt;br /&gt;
&lt;br /&gt;
== Cahier des charges ==&lt;br /&gt;
Notre projet &amp;quot;système communicant&amp;quot; aura pour but de créer une interface connectée du &amp;quot;morpion&amp;quot;. L'objectif est de permettre à un joueur interagissant sur un site internet de jouer contre une autre personne qui, elle, jouera à l'aide d'un affichage fait à partir de leds. &lt;br /&gt;
&lt;br /&gt;
Nous cherchons donc à exploiter la capacité asynchrone d'un websocket afin de permettre une partie en temps réel.&lt;br /&gt;
&lt;br /&gt;
=== Matériel ===&lt;br /&gt;
* Une nanoboard&lt;br /&gt;
* Une raspberry pi&lt;br /&gt;
* Une matrice de leds 9x9 ou plus&lt;br /&gt;
* Un clavier numérique ou 9 boutons-poussoirs&lt;br /&gt;
* Des ordinateurs avec les logiciels de développement nécessaires &lt;br /&gt;
&lt;br /&gt;
=== Optionnel ===&lt;br /&gt;
* Un buzzer afin d'avertir le joueur d'un choix incohérent&lt;br /&gt;
* Trois afficheurs sept segments afin d'ajouter un tableau des scores&lt;br /&gt;
&lt;br /&gt;
== Séance 1 ==&lt;br /&gt;
&lt;br /&gt;
=== Partie électronique ===&lt;br /&gt;
Le but de cette première séance était de se familiariser avec le logiciel de conception Altium Designer et de réfléchir à la façon d'aborder la conception électronique du morpion.&lt;br /&gt;
&lt;br /&gt;
Cette conception se fera en plusieurs étapes :&lt;br /&gt;
&lt;br /&gt;
* gérer le positionnement d'un curseur en fonction de l'état courant de la partie&lt;br /&gt;
* gérer l'affichage de la matrice en fonction des cases remplies / sélectionnées&lt;br /&gt;
* permettre la réception et l'envoie de données à l'aide de la liaison série&lt;br /&gt;
* traiter la remise à zéro du plateau en cas de fin de partie&lt;br /&gt;
&lt;br /&gt;
====Positionnement du curseur et état de la partie====&lt;br /&gt;
&lt;br /&gt;
Dans un premier lieu, il était nécessaire de traiter les actions entrantes. En effet, si ce n'est pas au tour du joueur &amp;quot;physique&amp;quot;, l'utilisation des boutons doit être bloquée.&amp;lt;br&amp;gt;&lt;br /&gt;
Ceci consiste simplement à effectuer un ET logique entre un bit symbolisant le joueur courant (si 1 alors joueur physique, si 0 alors joueur en ligne) et l'action demandée.&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fichier:Choisir.png||center|alt=Schema de choix|Circuit logique de la permission d'action]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Une fois les choix accessibles, il faut désormais les traiter. Le traitement s'effectuera à l'aide de bascules, chaque case comportera deux bascules : une bascule de sélection (la case est-elle sélectionnée ?) et une bascule permettant de savoir si la case a déjà été jouée.&amp;lt;br&amp;gt;&lt;br /&gt;
Si la case a déjà été jouée, il ne faut empêcher l'utilisateur de la jouer.&amp;lt;br&amp;gt;&lt;br /&gt;
Nous considérerons que le joueur en ligne n'effectuera pas de choix erroné et nous testerons seulement les choix du joueur &amp;quot;physique&amp;quot;.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Traitement.png||center|alt=Schema de traitement|Circuit logique du traitement d'une action]] &amp;lt;br&amp;gt;&lt;br /&gt;
Les ronds verts permettent la distinction des 9 cases. &amp;lt;br&amp;gt;&lt;br /&gt;
Le rond jaune correspond à la zone des sorties d'état. Plus précisément, il s'agit de deux bus regroupant les cases remplies et le lieu de la case sélectionnée.&amp;lt;br&amp;gt;&lt;br /&gt;
Le rond noir correspond au choix de l'adversaire.&amp;lt;br&amp;gt;&lt;br /&gt;
Le rond orange correspond à la sortie &amp;quot;selection_done&amp;quot; qui effectue un état haut lorsqu'un choix valide a été fait par l'utilisateur.&amp;lt;br&amp;gt;&lt;br /&gt;
Le rond rouge met en évidence la zone permettant de traiter les décalage du bit de sélection. Ce décalage consiste à garder seulement UNE bascule à l'état haut en effectuant le passage logique d'une bascule à une autre en fonction du choix tout en appliquant un reset sur l'ancienne sélection. Le schéma de ce déplacement se trouve ci-dessous et est appliqué aux 9 cases.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Andor.png||center|alt=Schema permettant le déplacement|Circuit logique utilisé afin de déplacer le curseur]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Complément à la séance 1===&lt;br /&gt;
====Affichage dynamique====&lt;br /&gt;
&lt;br /&gt;
L'un des grands problèmes à la réalisation du morpion sur nanoboard est l'affichage dynamique. En effet, il va falloir à la fois stocker les valeurs, et stocker quel joueur a joué telle ou telle case, afin de savoir quel case s'allumera de la couleur désirée. Ceci rajouté à l'affichage dynamique de la sélection, ceci s'avère compliqué.&amp;lt;br&amp;gt;&lt;br /&gt;
La tâche a alors été décomposée en deux étapes :&lt;br /&gt;
* Le traitement des couleurs (Quelle couleur affilier à quelle case ?)&lt;br /&gt;
* L'affichage de ces couleurs&lt;br /&gt;
=====Traitement des couleurs=====&lt;br /&gt;
&lt;br /&gt;
Le but était de se simplifier au maximum les choses. Le premier problème est de savoir quel joueur a joué une case, pour ceci, nous nous sommes servi de l'état du plateau fourni dans le bloc TRAITEMENT. Nous savons quelles cases sont à 1 et imposons donc une couleur rouge à toutes ces cases.&amp;lt;br&amp;gt;&lt;br /&gt;
De plus, nous savons qu'à chaque fois que le joueur &amp;quot;physique&amp;quot; effectue un choix valide, un front montant est appliqué sur la broche &amp;quot;selection_done&amp;quot; de TRAITEMENT. Nous avons alors re-créé 9 registres symbolisant les cases, mais cette fois ci, en fonction de l'endroit sélectionné par l'utilisateur, si ce dernier effectue un choix valide, le registre passera à 1. Le but de cette manipulation est de recenser tous les registres joués par le joueur physique. &amp;lt;br&amp;gt;&lt;br /&gt;
Maintenant, nous relions ces registres aux valeurs de couleur verte afin d'additionner le vert au rouge  des cases jouées et obtiendrons finalement des cases de couleur jaune pour symboliser les cases du joueur physique et des cases de couleur rouge pour le jouer en ligne. &amp;lt;br&amp;gt;&lt;br /&gt;
Il ne reste qu'à relier directement la case sélectionnée (recensée par le bus Etat_selection de TRAITEMENT) à la couleur bleue.&amp;lt;br&amp;gt;&lt;br /&gt;
Finalement nous avons : &lt;br /&gt;
* joueur en ligne : rouge&lt;br /&gt;
* joueur physique : jaune&lt;br /&gt;
* sélection : magenta, cyan ou bleu&lt;br /&gt;
&lt;br /&gt;
 [[Fichier:Traitement_affichage.png||center|Schéma du traitement pré affichage|Circuit logique du traitement pré-affichage]] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Affichage=====&lt;br /&gt;
&lt;br /&gt;
La matrice led employée est une matrice led à anode commune. Elle a pour avantage de permettre la sélection d'une ligne et de la couleur de chaque colonne.&amp;lt;br&amp;gt;&lt;br /&gt;
Cependant, nous ne pouvons donc choisir la couleur que d'une colonne. C'est pourquoi nous allons faire varier cet affichage ligne par ligne à une fréquence élevée afin que l’œil humain ne le remarque pas. Nous pourrons donc choisir quelle couleur sera affichée sur chaque ligne. &amp;lt;br&amp;gt;&lt;br /&gt;
Cet affichage ligne par ligne sera effectué via un multiplexeur donc le bus de sélection sera relié à un compteur 3bits cadencé sur une clock suffisamment rapide pour opérer une persistance rétinienne. &amp;lt;br&amp;gt;&lt;br /&gt;
Dans chaque bus nous avons imposé certains bits afin que la grille soit dessinée en bleu.&amp;lt;br&amp;gt;&lt;br /&gt;
Le bus multiplexé sera ensuite redirigé vers les pins de la matrice leds.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Affichage.png||center|Schéma d'affichage|Circuit logique de l'affichage]] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Tests====&lt;br /&gt;
&lt;br /&gt;
Le bloc d'affichage a été testé et deux problèmes ont été rencontrés : &lt;br /&gt;
* La sélection a été mal réfléchie&lt;br /&gt;
* Un phénomène de rebond a été remarqué sur l'oscilloscope numérique&lt;br /&gt;
&lt;br /&gt;
=====La sélection=====&lt;br /&gt;
&lt;br /&gt;
Dans la fonction d'affichage, on retourne la sélection de la ligne en logique inversée. Le problème est que dans la version 1.0 de l'affichage, un GND avait été placé en entrée du MUX de sélection. Nous n'avions pas pensé au fait que dans ce cas la, toutes les sorties seraient en permanence au GND... &amp;lt;br&amp;gt;La correction a donc été de placer un VCC en entrée et d'inverser les sorties, ainsi une seul anode de ligne sera placée sur le GND.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Selection.PNG||center|Schéma de selection|Correction de la sortie de selection]] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le schéma semble fonctionnel cependant d'autres tests restent à faire.&lt;br /&gt;
&lt;br /&gt;
=====Le rebond=====&lt;br /&gt;
&lt;br /&gt;
Lors du test de l'affichage, la clock d'affichage a été simulée par un bouton de la nanoboard et l'affichage a été relié sur une seule ligne.&amp;lt;br&amp;gt;&lt;br /&gt;
Nous étions sensé remarquer que lorsque la ligne s'allume, si on appuie sur le bouton, elle s’éteint et enfin si nous appuyons sept fois sur le bouton, la ligne se rallume. &amp;lt;br&amp;gt;&lt;br /&gt;
Rien ne se passait comme prévu, et plus précisément, il n'y avait même pas de logique dans la ré-apparition de la ligne.&amp;lt;br&amp;gt;&lt;br /&gt;
Ayant déjà été confronté à des problèmes de rebonds avec des boutons poussoir, ce phénomène a été testé sur l'oscilloscope numérique.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Rebond.png||center|Exemple de rebond|Exemple de rebond]] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous demanderons alors aux référents quelle stratégie adopter : filtrer le signal avec un condensateur en parallèle au bouton ou bien utiliser une comparaison avec registre à décalage pour vérifier la stabilité du signal avant d'envoie du front montant.&amp;lt;br&amp;gt;&lt;br /&gt;
Certes la correction du bouton n'était pas nécessaire aux tests entrepris pour l'affichage (nous aurions pu mettre une clock interne) mais ceci nous servira pour filtrer les choix effectués par l'utilisateur (haut, droite, select). &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Objectifs pour la séance prochaine====&lt;br /&gt;
&lt;br /&gt;
Les schémas effectués restent des ébauches, il y a forcément eu des oublis. Néanmoins, comme chaque schéma se compile, le passage à l'étape de mise en place de la liaison série durant la séance 2 est envisageable. Il faudra donc créer un protocole plus concret afin de savoir qui doit jouer, quand envoyer, quand recevoir des données. Si le temps le permet, quelques programmes simples seront testés sur la nanoboard afin de vérifier le fonctionnement de l'affichage de la matrice après discutions avec les enseignants au sujet du phénomène de rebond.&lt;br /&gt;
&lt;br /&gt;
=== Partie informatique ===&lt;br /&gt;
Dans cette première séance nous avons programmé l'arduino afin de créer le programme de morpion, pour pouvoir tester la partie informatique sans disposer de la partie électronique.&lt;br /&gt;
Pour cela nous avons due apprendre à utiliser une matrice de LED RGB à l'aide des codes fournit par SparkFun.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Puis nous avons pu commencer à programmer le morpion:&lt;br /&gt;
&lt;br /&gt;
*le jeu se déroule dans une matrice 3x3.&lt;br /&gt;
*le position du curseur est représentée par une lumière bleue, celle des pions du joueurs 1 par une lumière rouge et celle des pions du joueurs 2 par une lumière verte.&lt;br /&gt;
*si le curseur est sur un pions les deux couleurs s'additionnent pour donner du magenta où du cyan.&lt;br /&gt;
*le joueur se déplace à l'aide de 2 boutons poussoir,l'un permettant d'aller vers le haut, l'autre permettant d'aller à droite&lt;br /&gt;
**pour éviter plusieurs déplacements d'un coup, un délais a été mis entre deux actions&lt;br /&gt;
*une fois tout en haut, si le joueur presse le bouton pour aller vers le haut le joueur se retrouve en bas.&lt;br /&gt;
*une fois tout à droite, si le joueur presse le bouton pour aller vers la droite le joueur se retrouve à gauche. &lt;br /&gt;
*enfin un dernier bouton poussoir permet de placer un pion à l'endroit où se trouve le curseur.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Une fois les mouvements programmés il fallait régir les règles du jeu:&lt;br /&gt;
&lt;br /&gt;
*Ainsi le curseur commence toujours en haut à droite&lt;br /&gt;
*Si le un joueurs arrive a créer une ligne de 3, il gagne la partie&lt;br /&gt;
*Si aucun joueur n'arrive à gagner et que le terrain est remplit, la partie se termine sur un match nul&lt;br /&gt;
*Une fois la partie terminée, le terrain est remis à zéros&lt;br /&gt;
&lt;br /&gt;
== Séance 2 ==&lt;br /&gt;
&lt;br /&gt;
=== Partie électronique ===&lt;br /&gt;
&lt;br /&gt;
La matrice led ne pourra être alimentée par les différentes broches de la nanoboard sous peine de créer une chute de tension et risquer un reset du fpga.&amp;lt;br&amp;gt;&lt;br /&gt;
Ainsi, le but de cet séance est de réfléchir à la conception d'un prototype de carte permettant d'alimenter la matrice led de manière externe. &amp;lt;br&amp;gt;&lt;br /&gt;
====Utilisation de transistors====&lt;br /&gt;
L'utilisation de transistors en saturé paraît la meilleur chose à faire. En effet, ceci permettra de générer un gain en courant et de contrôler l'état des différentes couleurs ligne par ligne et colonne par colonne.&amp;lt;br&amp;gt;&lt;br /&gt;
Pour permettra la liaison de chaque led au VCC, on utilisera un transistor PNP. Pour permettre la liaison au GND, on utilisera un NPN.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Montage_roussel.PNG||center|upright = 0.5|Montage d'une branche|Montage d'une branche de led]] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Comme il s'agit de transistor à anodes communes, il suffira de 8 transistors NPN. Notre choix s'est donc porté vers le ULN2803A, qui est un ensemble de 8 paires Darlington.&amp;lt;br&amp;gt;&lt;br /&gt;
L'utilisation de paires Darlington a l'avantage de permettre une génération élevée de courant. (Fort gain en courant)&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour ce qui est des cathodes, un problème de taille se pose. Il faudrait 24 transistors PNP pour gérer les 8 colonnes * 3couleurs. Ainsi, notre choix s'est plutôt déporté vers le buffer de portes trois états 74AS240. Cette famille de buffer 3 états a la capacité de délivrer un courant du même ordre de grandeur que l'ULN2803A.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Maintenant il reste à dimensionner la résistance sur chaque branche. Après quelques tests à l'aide d'un multimètre et de la matrice, on remarque que chaque led a besoin de 2mA pour fonctionner. Donc le but est de générer un courant d'environ 2mA. Ainsi, si on impose une tension de 5.5V aux bornes du montage, R = 5.5 / 0.002 = 2700 Ohms.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous avons désormais toutes les informations nécessaires pour le montage d'un prototype.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Le montage====&lt;br /&gt;
Au cours d'une séance supplémentaire, un plan a été élaboré et le prototype brasé. Voici donc le prototype achevé :&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Driver.JPG||center|400px|Driver matrice|Driver de la matrice]] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sur chaque sortie se trouve une résistance de 2700ohms. Le mieux aurait été de réaliser ce montage avec un réseau résistif cependant, le temps nous faisant défaut, nous avons utilisé les résistances déjà présentes en magasin.&amp;lt;br&amp;gt;&lt;br /&gt;
Sur chaque entrée se trouver une broche qui sera reliée à la nanoboard. &amp;lt;br&amp;gt;&lt;br /&gt;
Tous les buffers ont leur GND et VCC reliés au générateur 5.5V. Les paires Darlington sont reliées à la même masse.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Il ne restait plus qu'à relier la matrice led. Cette liaison parallèle a été réalisée en recyclant un vieux BUS d'ordinateur fixe. Finalement, voilà le montage final :&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Matrice_roussel.JPG||center|400px|Montage final de la partie électronique|Montage final de la partie électronique]] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Partie informatique ===&lt;br /&gt;
=====Arduino=====&lt;br /&gt;
Lors de cette séance nous avons pu finir le programme arduino, pour pouvoir jouer à deux sur une la carte.&lt;br /&gt;
Cette partie a été crée pour pouvoir tester les différentes fonctions, et sera modifier lors de prochaines séances.&lt;br /&gt;
La matrice LED affiche des clignotement irrégulier de couleur rouge, mais cela ne gêne pas pour jouer.&lt;br /&gt;
&lt;br /&gt;
=====Raspberry=====&lt;br /&gt;
Nous avons pu enfin commencer notre travail sur la raspberry.&lt;br /&gt;
Apres avoir branché la raspberry en série à notre pc, nous avons pu la configurer afin qu'elle fonctionne avec le réseau de l'ecole.&lt;br /&gt;
Pour cela nous avons mis une adresse IP du réseau INSECURE de l'école sur la Raspberry, celle de notre raspberry est :172.26.79.12.&lt;br /&gt;
C'est à partir de cette adresse que nous allons acceder aux pages html du projet.&lt;br /&gt;
Pour effectuer cette configuration nous avons remplacé les lignes correspondant à la configuration de la carte Ethernet dans le fichier /etc/network/interfaces par les lignes&lt;br /&gt;
  auto eth0&lt;br /&gt;
  iface eth0 inet static&lt;br /&gt;
    address 172.26.79.12&lt;br /&gt;
    netmask 255.255.240.0&lt;br /&gt;
    gateway 172.26.79.254&lt;br /&gt;
&lt;br /&gt;
Et afin d'indiquer le serveur DNS dans /etc/resolv.conf nous avons rajouté:&lt;br /&gt;
&lt;br /&gt;
  nameserver 193.48.57.34 &lt;br /&gt;
&lt;br /&gt;
Une fois la raspberry configurée, nous pouvons accéder à notre raspberry sans liaisons série grâce à un ssh.&lt;br /&gt;
Afin d'effectuer notre projet nous avons besoin de deux bibliothèques:&lt;br /&gt;
*jquery.js que l'ont a telecharger sur http://jquery.com/ afin de faciliter la programmation en javascript&lt;br /&gt;
*une bibliothèque C de WebSocket trouvé sur http://libwebsockets.org afin de pouvoir effectuer notre programme en C utilisant le Websocket&lt;br /&gt;
&lt;br /&gt;
Notre raspberry est maintenant prête pour notre projet, nous avons pu commencer notre fichier morpion.html qui permet de joueur au morpion à deux sur le même ordinateur, ce qui permet de tester les differentes fonctions utilisés pour la suite du projet.&lt;br /&gt;
&lt;br /&gt;
== Séance 3 ==&lt;br /&gt;
&lt;br /&gt;
=== Partie électronique ===&lt;br /&gt;
&lt;br /&gt;
Le montage réalisé a été testé. Quelques soudures ont été refaites et un composant ne fonctionnait pas. Heureusement, nous avions placé des socles afin de pouvoir enlever/placer les buffers facilement. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Cette mise en évidence de composant défaillant a pris beaucoup de temps, c'est pourquoi tout ce qui suit a été réalisé sur plusieurs séances supplémentaires. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La première chose effectuée fut le branchement de la carte à la nanoboard. Pour cela, nous avons utilisé un plan créé au préalable et un schematic de vérification.&amp;lt;br&amp;gt;&lt;br /&gt;
Ce schematic consistait à afficher colonne par colonne et couleur par couleur chaque led, ainsi, si un branchement était mauvais, nous pouvions le voir directement. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le montage finalisé, nous pouvions commencer les tests des fonctions créées en première séance. Sur le principe, ces schematics marchaient plutôt bien mais comme nous souhaitions générer des simulations de données venant de la liaison série, nous n'avions pas assez de boutons pour utiliser ces premières schematics. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ainsi, le travail de traitement a dû être refait. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====La seletion====&lt;br /&gt;
L'objectif est de créer un circuit numérique de sélection à l'aide de seulement deux boutons.&amp;lt;br&amp;gt;&lt;br /&gt;
Le choix s'est alors porté sur un compteur allant jusque 8. Ainsi, il y avait 9 possibilités de valeur et chaque valeur correspondra a une case.&amp;lt;br&amp;gt;&lt;br /&gt;
Le compteur devra s'incrémenter sur l'appuie d'un bouton de balayage. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Traite.JPG|vignette|center|600px|Selection|Selection]] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La sélection du joueur physique doit être contrôlée afin que seul un choix valide soit accepté. Ainsi, un schematic de vérification a été créé.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour savoir quelles cases ont déjà été jouées, nous avons décidé d'effectuer un OU logique entre les cases jouées par le joueur physique et les cases jouées par le joueur en ligne. Une fois le bus d'état global créé, il suffit d'effectuer un ET logique avec le choix de notre joueur physique. Si le choix se porte sur une case qui n'a jamais été jouée, le résultat de l'opération logique sera un bus nul. Nous comparons donc ce bus avec un bus nul. &amp;lt;br&amp;gt;&lt;br /&gt;
Finalement, le choix est valide si le comparateur sort une égalité ET le bouton de sélection a été appuyé.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Valider_choix.JPG|vignette|center|600px|Valider|Valider]] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====L'affichage====&lt;br /&gt;
Les schematics d'affichage sont restés les mêmes qu'à la séance 1, mis à part quelques corrections tel l'inversion des sorties d'affichage car nous travaillons en logique inversée sur les portes 3 états.&amp;lt;br&amp;gt;&lt;br /&gt;
Le pré-affichage s'occupe toujours du stockage des cases cochées par le joueur physique si il est le joueur courant.&amp;lt;br&amp;gt;&lt;br /&gt;
Afin d'assurer une persistance rétinienne, on devra relier l'affichage à une horloge d'au moins 3KHz.&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
[[Fichier:Traitement_preaffichage.JPG|vignette|center|500px|Pre-affichage|Pre-affichage]] [[Fichier:Affich.JPG|vignette|center|500px|Affichage|Affichage]] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Simulation de la liaison série====&lt;br /&gt;
Le but est de gérer des données semblables à ce que la raspberry pourrait nous envoyer. A savoir 1 bit de fin de partie, 1 bit de réception de donnée et 4 bits de choix de case.&amp;lt;br&amp;gt;&lt;br /&gt;
=====Conversion de l'adresse choisie=====&lt;br /&gt;
Il faut faire correspondre les 4 bits reçus à un bus de 9bits, chaque bit correspondant à une case. Ceci revient à faire un traitement similaire à la sélection du joueur physique...&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Traite_adversaire.JPG|vignette|center|400px|Conversion de l'adresse|Conversion de l'adresse]] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Stockage=====&lt;br /&gt;
Maintenant que nous savons convertir une adresse, on doit pouvoir mettre à jour les cases jouées par le joueur en ligne sur chaque réception de donnée.&amp;lt;br&amp;gt;&lt;br /&gt;
Pour effectuer ceci, on utilise 9 bascules pour stocker les choix dans différentes cases. Aucun traitement de choix valide n'est à faire car la raspberry s'en occupe déjà de son côté.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Stock_adv.JPG|vignette|center|600px|Stockage des cases de l'adversaire|Stockage des cases de l'adversaire]] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Propre à la simulation=====&lt;br /&gt;
Pour générer l'adresse, on utilise le même principe de sélection que celui du joueur physique.&amp;lt;br&amp;gt;&lt;br /&gt;
Pour avoir un aspect visuel de cette sélection, on utilise un MUX qui, en fonction du joueur courant, afficher la sélection de tel ou tel joueur.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Traite_sel.JPG|vignette|center|600px|MUX de selection|MUX de la sélection]] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour ce qui est du bit de fin de parti, on le symbolise par un bouton.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Phénomène de rebond=====&lt;br /&gt;
Pour gérer le rebond des boutons poussoirs, la solution a été numérique. Un registre à décalage a été créé, cadencé sur une clock, il décale sur chaque front d'horloge la valeur courante d'un bouton. En utilisant un comparateur, on obtient alors un front montant seulement lorsque le bouton est dans un état stable (c'est à dire lorsque tous les bits ont la même valeurs)&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Dump.JPG|vignette|center|600px|Anti-rebond|Anti-rebond]] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====TOPLEVEL====&lt;br /&gt;
Le schéma TOPLEVEL est alors le suivant :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Toplevel.JPG|vignette|center|800px|TOPLEVEL|TOPLEVEL]] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ainsi, si nous avions eu le bloc de liaison série bidirectionnel, nous aurions simplement eu à :&lt;br /&gt;
* Remplacer la génération d'adresse par les 4bits de poids faible du message de 8bits reçu.&lt;br /&gt;
* Remplacer le bouton de reset par le bit de fin de partie.&lt;br /&gt;
* Remplacer le bit de choix de l'adversaire par celui de réception validée.&lt;br /&gt;
* Relier le bit d'émission à la sortie de &amp;quot;choix valide&amp;quot;.&lt;br /&gt;
* Relier la sélection du joueur physique aux données à transmettre.&lt;br /&gt;
* Enlever le multiplexage de la sélection.&lt;br /&gt;
&lt;br /&gt;
====Réflexion====&lt;br /&gt;
La partie électronique de ce projet a donc été menée à bout. Cependant, après coup, on se rend compte que la création d'un prototype aurait été meilleure en imprimant un PCB plutôt qu'en utilisant une piste à bandes.&amp;lt;br&amp;gt;&lt;br /&gt;
Nous aurions également pu éviter une configuration en parallèle du driver. Ainsi, à l'aide de registres à décalages alimentés en externe, la lisibilité du circuit aurait été meilleure.&amp;lt;br&amp;gt;&lt;br /&gt;
On peut néanmoins se satisfaire de la réalisation numérique du circuit car elle exploite toutes les possibilités qu'offrent la conception via schematics à l'aide d'Altium designer à savoir :&amp;lt;br&amp;gt;&lt;br /&gt;
* La création d'une bibliothèque&lt;br /&gt;
* La création de composants&lt;br /&gt;
* L'utilisation de composants configurables avec édition de pins&amp;lt;br&amp;gt;&lt;br /&gt;
D'ailleurs, on comprend d'autant plus l'intérêt du langage VHDL après la création d'autant de schematics pour un projet de cette envergure.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Partie informatique ===&lt;br /&gt;
Nous avons commencé cette séance en continuant le morpion.html&lt;br /&gt;
Dans un premier temps nous avons crée &amp;quot;l'espace de jeu&amp;quot; en utilisant du code trouvé sur internet :&lt;br /&gt;
 &amp;lt;!DOCTYPE html&amp;gt;&lt;br /&gt;
  &amp;lt;head&amp;gt;&lt;br /&gt;
   &amp;lt;meta charset=&amp;quot;utf-8&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;style type=&amp;quot;text/css&amp;quot;&amp;gt;&lt;br /&gt;
 .table{&lt;br /&gt;
 width : 330px;&lt;br /&gt;
 height : 330px;&lt;br /&gt;
 border : solid 3px black;&lt;br /&gt;
  border-collapse: collapse;&lt;br /&gt;
 }&lt;br /&gt;
 .td{&lt;br /&gt;
 border : solid 3px black;&lt;br /&gt;
 width : 33%;&lt;br /&gt;
 height : 33%;&lt;br /&gt;
 }&lt;br /&gt;
 &amp;lt;/style&amp;gt;&lt;br /&gt;
 &amp;lt;title&amp;gt; Jeu morpion&amp;lt;/title&amp;gt;&lt;br /&gt;
 &amp;lt;/head&amp;gt;&lt;br /&gt;
et&lt;br /&gt;
 &amp;lt;body&amp;gt;&lt;br /&gt;
   h1&amp;gt;Morpion&amp;lt;/h1&amp;gt;&lt;br /&gt;
 table class=&amp;quot;table&amp;quot; align=&amp;quot;center&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
       &amp;lt;td class=&amp;quot;td&amp;quot; onclick=&amp;quot;placerSigne(0)&amp;quot; id=&amp;quot;0&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
       &amp;lt;td class=&amp;quot;td&amp;quot; onclick=&amp;quot;placerSigne(1)&amp;quot; id=&amp;quot;1&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
       &amp;lt;td class=&amp;quot;td&amp;quot; onclick=&amp;quot;placerSigne(2)&amp;quot; id=&amp;quot;2&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
       &amp;lt;td class=&amp;quot;td&amp;quot; onclick=&amp;quot;placerSigne(3)&amp;quot; id=&amp;quot;3&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
       &amp;lt;td class=&amp;quot;td&amp;quot; onclick=&amp;quot;placerSigne(4)&amp;quot; id=&amp;quot;4&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
       &amp;lt;td class=&amp;quot;td&amp;quot; onclick=&amp;quot;placerSigne(5)&amp;quot; id=&amp;quot;5&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
       &amp;lt;td class=&amp;quot;td&amp;quot; onclick=&amp;quot;placerSigne(6)&amp;quot; id=&amp;quot;6&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
       &amp;lt;td class=&amp;quot;td&amp;quot; onclick=&amp;quot;placerSigne(7)&amp;quot; id=&amp;quot;7&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
       &amp;lt;td class=&amp;quot;td&amp;quot; onclick=&amp;quot;placerSigne(8)&amp;quot; id=&amp;quot;8&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
 &amp;lt;/table&amp;gt;&lt;br /&gt;
 table style=&amp;quot;border : solid 3px #3399FF;&amp;quot; align=&amp;quot;center&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;tr&amp;gt;&lt;br /&gt;
 &amp;lt;td style=&amp;quot;border : solid 1px #3399FF;&amp;quot;&amp;gt;Joueur 1&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;td style=&amp;quot;border : solid 1px #3399FF;&amp;quot;&amp;gt;Joueur 2&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
 &amp;lt;tr&amp;gt;&lt;br /&gt;
 &amp;lt;td style=&amp;quot;border : solid 1px #3399FF;&amp;quot; id=&amp;quot;scre1&amp;quot;&amp;gt;0&lt;br /&gt;
 &amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;td style=&amp;quot;border : solid 1px #3399FF;&amp;quot; id=&amp;quot;scre2&amp;quot;&amp;gt;0&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
 &amp;lt;/table&amp;gt;&lt;br /&gt;
  &amp;lt;/body&amp;gt;&lt;br /&gt;
 &amp;lt;/html&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le code ci dessus n'est pas totalement bon, puisque nous avons du enlever des &amp;quot;&amp;lt;&amp;quot; afin d'afficher le code et non ce qu'il en résulte.&lt;br /&gt;
&lt;br /&gt;
L'espacement entre deux lignes peut changer en fonction de la taille de ce qui est mis dedans.&lt;br /&gt;
Si on remplis de case blanche (&amp;quot;vide.png&amp;quot;) de taille 100*100 on obtient:&lt;br /&gt;
[[Fichier:morpion1.png]]&lt;br /&gt;
&lt;br /&gt;
A chaque clique sur une case la fonction placerSigne(n) va s'effectuer avec n le numéros de la case sélectionnée.&lt;br /&gt;
 function placerSigne(idCase)&lt;br /&gt;
 { &lt;br /&gt;
         if(morpion[idCase] == 0)&lt;br /&gt;
         {coup++;&lt;br /&gt;
         morpion[idCase]=joueur;&lt;br /&gt;
         if (joueur==1)&lt;br /&gt;
                 {&lt;br /&gt;
  	  	 joueur=2;&lt;br /&gt;
                 document.getElementById(idCase).innerHTML = '&amp;lt;img src=&amp;quot;croix.gif&amp;quot; alt=&amp;quot;image !&amp;quot; /&amp;gt;';&lt;br /&gt;
 &lt;br /&gt;
                 }&lt;br /&gt;
 	else    {&lt;br /&gt;
 	   	 joueur=1;&lt;br /&gt;
                 document.getElementById(idCase).innerHTML = '&amp;lt;img src=&amp;quot;rond.gif&amp;quot; alt=&amp;quot;image !&amp;quot; /&amp;gt;';&lt;br /&gt;
 &lt;br /&gt;
                 }&lt;br /&gt;
 	if (coup&amp;gt;4)&lt;br /&gt;
 		{if (gagner(idCase))&lt;br /&gt;
 			{if (joueur==1)&lt;br /&gt;
 				{score2++;&lt;br /&gt;
 				alert(&amp;quot;joueur 2 gagne &amp;quot;);&lt;br /&gt;
 				finpartie();&lt;br /&gt;
 				}&lt;br /&gt;
 			else{score1++;&lt;br /&gt;
 				alert(&amp;quot;joueur 1 gagne &amp;quot;);&lt;br /&gt;
 				finpartie();&lt;br /&gt;
 				}&lt;br /&gt;
 			&lt;br /&gt;
 			}&lt;br /&gt;
 		else {if (egalite()==0)&lt;br /&gt;
 			{alert(&amp;quot;egalite&amp;quot;);&lt;br /&gt;
 			finpartie();}&lt;br /&gt;
 		     }&lt;br /&gt;
 		}&lt;br /&gt;
         }&lt;br /&gt;
         else{alert(&amp;quot;pas le droit&amp;quot;);}&lt;br /&gt;
 }&lt;br /&gt;
Cette fonction place une image 100x100 de rond ou de croix dans la case sélectionnée en fonction du joueur qui doit jouer.&lt;br /&gt;
*Elle calcule les scores de chaque joueurs, et appelle gagner et egalite pour savoir si on est dans une fin de partie.&lt;br /&gt;
*Et elle alerte le joueur si la case sélectionnée ne peut pas être jouée.&lt;br /&gt;
&lt;br /&gt;
Pour cela elle utilise le tableau morpion de taille 9 remplit de 0 à l'origine, et modifie la case sélectionnée en y mettant 1 ou 2 en fonction du joueur qui a joué.&lt;br /&gt;
&lt;br /&gt;
La variable coup permet de déterminer le nombre de coup jouer, ce qui permet de ne pas verifier si une partie une gagnée tant que coup n'est pas supérieur à 4, puisqu'il faut au minimum 5 coup pour gagner.&lt;br /&gt;
&lt;br /&gt;
 function finpartie()&lt;br /&gt;
 {for (var j=0;j&amp;lt;9;j++)&lt;br /&gt;
 	{ document.getElementById(j).innerHTML = '&amp;lt;img src=&amp;quot;vide.png&amp;quot; alt=&amp;quot;image !&amp;quot; /&amp;gt;';&lt;br /&gt;
 	morpion[j]=0;&lt;br /&gt;
 	}&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
La fonction finpartie() met les variables morpion et coup à zéro, et place des images blanches dans toutes les cases.&lt;br /&gt;
&lt;br /&gt;
Elle est appelé que si il y une victoire ou une égalité.&lt;br /&gt;
&lt;br /&gt;
Dans morpionsc.html qui est le fichier html final, joueur est remis à 1 dans cette fonction.&lt;br /&gt;
&lt;br /&gt;
Dans le fichier morpion.html cela n’étais pas cessionnaire et permettait en plus au joueur perdant de commencer.&lt;br /&gt;
&lt;br /&gt;
Mais pour simplifier la suite nous avons préféré définir que toujours le même joueur commencerais. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 function gagner(idCase)&lt;br /&gt;
 {switch(idCase)&lt;br /&gt;
         {&lt;br /&gt;
 case 0:&lt;br /&gt;
         return (diagonal1()||ligne1()||colonne1());&lt;br /&gt;
         break;&lt;br /&gt;
 case 1:&lt;br /&gt;
         return (ligne1()||colonne2());&lt;br /&gt;
         break;&lt;br /&gt;
 case 2:&lt;br /&gt;
         return (diagonal2()||ligne1()||colonne3());&lt;br /&gt;
         break;&lt;br /&gt;
 case 3:&lt;br /&gt;
         return (ligne2()||colonne1());&lt;br /&gt;
         break; &lt;br /&gt;
 &lt;br /&gt;
 case 4:&lt;br /&gt;
         return (diagonal1()||diagonal2()||ligne2()||colonne2());&lt;br /&gt;
         break;&lt;br /&gt;
 case 5:&lt;br /&gt;
         return (ligne2()||colonne3());&lt;br /&gt;
         break;&lt;br /&gt;
 case 6:&lt;br /&gt;
         return (diagonal2()||ligne3()||colonne1());&lt;br /&gt;
         break;&lt;br /&gt;
 case 7:&lt;br /&gt;
         return (ligne3()||colonne2());&lt;br /&gt;
         break;&lt;br /&gt;
 case 8:&lt;br /&gt;
         return (diagonal1()||ligne3()||colonne3());&lt;br /&gt;
         break;&lt;br /&gt;
         }&lt;br /&gt;
 }&lt;br /&gt;
La fonction gagner appelle des fonctions diagonal,ligne,colonne qui retourne 1 si il y'a 3 même symboles sur leur domaines.&lt;br /&gt;
&lt;br /&gt;
Gagner teste donc si il y a une suite de 3 symboles sur la ligne, colonne et les diagonales passant par la case qui a été joué.&lt;br /&gt;
&lt;br /&gt;
 function egalite()&lt;br /&gt;
 {var cp=0;&lt;br /&gt;
 for (var i=0;i &amp;lt; 9;i++)&lt;br /&gt;
         {if (morpion[i]==0)&lt;br /&gt;
 		{cp++;}&lt;br /&gt;
         }&lt;br /&gt;
 return cp;&lt;br /&gt;
 }&lt;br /&gt;
La fonction egalité teste si toutes les cases ont été joué.&lt;br /&gt;
&lt;br /&gt;
On aurait pu utiliser la variable coup, si coup était égal à 9 alors égalité, mais la fonction egalité permet de vérifier si il n'y a pas eu de problème lors de la modification de la matrice.&lt;br /&gt;
&lt;br /&gt;
Avec morpion.html nous avons pu apprendre le javascript, et poser les bases de notre fichier html final.&lt;br /&gt;
&lt;br /&gt;
===Complément à la séance 3===&lt;br /&gt;
&lt;br /&gt;
====HTML====&lt;br /&gt;
Pour le HTML/Javascript on garde les mêmes fonctions gagner et egalite.&lt;br /&gt;
On va ajouter lors de l'initialisation&lt;br /&gt;
 window.WebSocket=(window.WebSocket||window.MozWebSocket);&lt;br /&gt;
 &lt;br /&gt;
 var websocket=new WebSocket('ws://172.26.79.12:9000','myprotocol');&lt;br /&gt;
 &lt;br /&gt;
 websocket.onopen=function(){ $('h1').css('color','green'); };&lt;br /&gt;
 &lt;br /&gt;
 websocket.onerror=function(){ $('h1').css('color','red'); };&lt;br /&gt;
On modifie placerSigne:&lt;br /&gt;
*si ce n'est pas au tour du joueur 1 de jouer on lui envoie une alerte.&lt;br /&gt;
*si il y a une fin de partie on envoie 9 grâce a sendMessage.&lt;br /&gt;
*si il n'y a pas de fin de partie on envoie la case jouer toujours grâce à sendMessage:&lt;br /&gt;
 function sendMessage(data){&lt;br /&gt;
 websocket.send(data);&lt;br /&gt;
 }&lt;br /&gt;
Pour finpartie on rajoute juste &lt;br /&gt;
 joueur=1;&lt;br /&gt;
&lt;br /&gt;
Pour faire jouer le second joueur il faut recevoir un message du websocket ainsi :&lt;br /&gt;
 websocket.onmessage=function(message)&lt;br /&gt;
sera la fonction dans laquelle on fera jouer le joueur 2. &lt;br /&gt;
&lt;br /&gt;
Le websocket envoie simplement la case en char* ainsi:&lt;br /&gt;
 websocket.onmessage=function(message){&lt;br /&gt;
 idCase=parseInt((message.data)-30);&lt;br /&gt;
 console.log(idCase);&lt;br /&gt;
 &lt;br /&gt;
 if(morpion[idCase] == 0)&lt;br /&gt;
                 {coup++;&lt;br /&gt;
                  morpion[idCase]=2;&lt;br /&gt;
                  joueur=1;&lt;br /&gt;
  		document.getElementById(idCase).innerHTML = '&amp;lt;img src=&amp;quot;rond.gif&amp;quot; alt=&amp;quot;image !&amp;quot; /&amp;gt;';&lt;br /&gt;
  		 if (coup&amp;gt;4)&lt;br /&gt;
 			 {if (gagner(idCase))&lt;br /&gt;
                                {score2++; &lt;br /&gt;
                                         alert(&amp;quot;joueur 2 gagne &amp;quot;);&lt;br /&gt;
                                         finpartie();&lt;br /&gt;
 					sendMessage(9);&lt;br /&gt;
                                }&lt;br /&gt;
  &lt;br /&gt;
 &lt;br /&gt;
                           else {if (egalite()==0)&lt;br /&gt;
                                         {alert(&amp;quot;egalite&amp;quot;);&lt;br /&gt;
                                         finpartie();&lt;br /&gt;
 					sendMessage(9);&lt;br /&gt;
 &lt;br /&gt;
                                         }&lt;br /&gt;
 				}&lt;br /&gt;
 			&lt;br /&gt;
 			}&lt;br /&gt;
 		}&lt;br /&gt;
 &lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Console.log permet d'afficher dans le debug, la valeur traitée.&lt;br /&gt;
On envoie toujours 9 si la partie se termine, sinon on effectue la même chose que dans placerSigne de morpion.html&lt;br /&gt;
&lt;br /&gt;
====Fichier C====&lt;br /&gt;
Il faut maintenant créer la passerelle entre l'arduino et le fichier html.&lt;br /&gt;
Pour cela notre fichier doit utiliser des fonctions de websocket mais aussi de serial.c&lt;br /&gt;
Les fonctions de serial.c sont directement intégrées dans notre fichier, il n'y a donc pas besoin de lui faire appel pour compiler.&lt;br /&gt;
 &lt;br /&gt;
 #include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;stdlib.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;string.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;unistd.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;fcntl.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;termios.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;strings.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;sys/types.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;sys/ioctl.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;sys/file.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;linux/serial.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;libwebsockets.h&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 #define MAX_FRAME_SIZE  1024&lt;br /&gt;
 #define WAIT_DELAY      50&lt;br /&gt;
 #define MAX_MESSAGE     2 &lt;br /&gt;
 &lt;br /&gt;
 #define SERIAL_READ 0&lt;br /&gt;
 #define SERIAL_WRITE 1&lt;br /&gt;
 #define SERIAL_BOTH 2&lt;br /&gt;
 &lt;br /&gt;
 #define SERIAL_DEVICE &amp;quot;/dev/ttyUSB0&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 int sd;&lt;br /&gt;
  &lt;br /&gt;
 &lt;br /&gt;
 //&lt;br /&gt;
 // Open serial port device&lt;br /&gt;
 //&lt;br /&gt;
 int serialOpen(char *device,int mode){&lt;br /&gt;
 int flags=(mode==SERIAL_READ?O_RDONLY:(mode==SERIAL_WRITE?O_WRONLY:O_RDWR));&lt;br /&gt;
 int fd=open(device,flags|O_NOCTTY|O_NONBLOCK); &lt;br /&gt;
 if(fd&amp;lt;0){ perror(device); exit(-1); }&lt;br /&gt;
 return fd;&lt;br /&gt;
 }&lt;br /&gt;
  &lt;br /&gt;
 //&lt;br /&gt;
 // Serial port configuration&lt;br /&gt;
 //&lt;br /&gt;
 void serialConfig(int fd,int speed){&lt;br /&gt;
 struct termios new;&lt;br /&gt;
 bzero(&amp;amp;new,sizeof(new));&lt;br /&gt;
 new.c_cflag=CLOCAL|CREAD|speed|CS8;&lt;br /&gt;
 new.c_iflag=0;&lt;br /&gt;
 new.c_oflag=0;&lt;br /&gt;
 new.c_lflag=0;     /* set input mode (non-canonical, no echo,...) */&lt;br /&gt;
 new.c_cc[VTIME]=0; /* inter-character timer unused */&lt;br /&gt;
 new.c_cc[VMIN]=1;  /* blocking read until 1 char received */&lt;br /&gt;
 if(tcsetattr(fd,TCSANOW,&amp;amp;new)&amp;lt;0){ perror(&amp;quot;serialInit.tcsetattr&amp;quot;); exit(-1); }&lt;br /&gt;
 }&lt;br /&gt;
  &lt;br /&gt;
 //&lt;br /&gt;
 // Serial port termination&lt;br /&gt;
 //&lt;br /&gt;
 void serialClose(int fd){&lt;br /&gt;
 close(fd);&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 static int callback_http(&lt;br /&gt;
   struct libwebsocket_context *this,&lt;br /&gt;
   struct libwebsocket *wsi,enum libwebsocket_callback_reasons reason,&lt;br /&gt;
   void *user,void *in,size_t len)&lt;br /&gt;
 {&lt;br /&gt;
 return 0;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
  static struct libwebsocket_protocols protocols[] = {&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;http-only&amp;quot;,   // name&lt;br /&gt;
      callback_http, // callback&lt;br /&gt;
      0,             // data size&lt;br /&gt;
      0              // maximum frame size&lt;br /&gt;
    },&lt;br /&gt;
    {&amp;quot;myprotocol&amp;quot;,callback_my,0,MAX_FRAME_SIZE},&lt;br /&gt;
    {NULL,NULL,0,0}&lt;br /&gt;
    };&lt;br /&gt;
  &lt;br /&gt;
 &lt;br /&gt;
Ci-dessus se trouve le code se trouvant dans serial.c afin de créer serialOpen, serialClose et serialConfig, ainsi que l'initialisation de variables utilisées.&lt;br /&gt;
Mais aussi la fonction callback_http(),la structure libwebsocket_protocols, et l'initialisation de variables. &lt;br /&gt;
 &lt;br /&gt;
 int main(void) {&lt;br /&gt;
 int port=9000;&lt;br /&gt;
 struct lws_context_creation_info info;&lt;br /&gt;
 memset(&amp;amp;info,0,sizeof info);&lt;br /&gt;
 info.port=port;&lt;br /&gt;
 info.protocols=protocols;&lt;br /&gt;
 info.gid=-1;&lt;br /&gt;
 info.uid=-1;&lt;br /&gt;
 struct libwebsocket_context *context=libwebsocket_create_context(&amp;amp;info);&lt;br /&gt;
 if(context==NULL){&lt;br /&gt;
   fprintf(stderr, &amp;quot;libwebsocket init failed\n&amp;quot;);&lt;br /&gt;
   return -1;&lt;br /&gt;
   }&lt;br /&gt;
 printf(&amp;quot;starting server...\n&amp;quot;);&lt;br /&gt;
 &lt;br /&gt;
   &lt;br /&gt;
 sd=serialOpen(SERIAL_DEVICE,SERIAL_BOTH);&lt;br /&gt;
 serialConfig(sd,B9600);&lt;br /&gt;
 &lt;br /&gt;
  &lt;br /&gt;
 while(1){&lt;br /&gt;
   libwebsocket_service(context,WAIT_DELAY);&lt;br /&gt;
   }&lt;br /&gt;
     &lt;br /&gt;
 &lt;br /&gt;
 serialClose(sd); &lt;br /&gt;
 &lt;br /&gt;
  &lt;br /&gt;
 libwebsocket_context_destroy(context);&lt;br /&gt;
 return 0;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Le main permet d'initialiser une liaison série de 9600 Baud et de lancer une boucle infini dans laquelle la passerelle entre arduino et html va s'effectuer.&lt;br /&gt;
&lt;br /&gt;
 static int callback_my(&lt;br /&gt;
   struct libwebsocket_context * this,&lt;br /&gt;
   struct libwebsocket *wsi,enum libwebsocket_callback_reasons reason,&lt;br /&gt;
   void *user,void *in,size_t len)&lt;br /&gt;
 {&lt;br /&gt;
 static char message[2+LWS_SEND_BUFFER_PRE_PADDING+LWS_SEND_BUFFER_POST_PADDING];&lt;br /&gt;
 static char valeur;&lt;br /&gt;
 switch(reason){&lt;br /&gt;
   case LWS_CALLBACK_ESTABLISHED:&lt;br /&gt;
     printf(&amp;quot;connection established\n&amp;quot;);&lt;br /&gt;
                 // Declenchement d'un prochain envoi au navigateur&lt;br /&gt;
     break;&lt;br /&gt;
   case LWS_CALLBACK_RECEIVE:&lt;br /&gt;
                 // Ici sont traites les messages envoyes par le navigateur&lt;br /&gt;
 //printf(&amp;quot;received data: %s\n&amp;quot;,(char *)in);&lt;br /&gt;
     if(write(sd,in,sizeof(char))!=1){ perror(&amp;quot;main.write&amp;quot;); exit(-1); }&lt;br /&gt;
 printf(&amp;quot;writen data: %s\n&amp;quot;,(char *)in);&lt;br /&gt;
                 // Declenchement d'un prochain envoi au navigateur&lt;br /&gt;
     libwebsocket_callback_on_writable(this,wsi);&lt;br /&gt;
     break;&lt;br /&gt;
   case LWS_CALLBACK_SERVER_WRITEABLE:&lt;br /&gt;
                 // Ici sont envoyes les messages au navigateur&lt;br /&gt;
 &lt;br /&gt;
 if (read(sd,&amp;amp;valeur,sizeof(char))==1)&lt;br /&gt;
 { &lt;br /&gt;
 //printf(&amp;quot;write data: %c\n&amp;quot;,valeur);&lt;br /&gt;
       char *out=message+LWS_SEND_BUFFER_PRE_PADDING;&lt;br /&gt;
        sprintf(out,&amp;quot;%02x&amp;quot;,valeur);&lt;br /&gt;
 //printf(&amp;quot;write data: %s\n&amp;quot;,(char *)out);&lt;br /&gt;
 &lt;br /&gt;
     libwebsocket_write(wsi,(unsigned char *)out,MAX_MESSAGE,LWS_WRITE_TEXT);&lt;br /&gt;
 }&lt;br /&gt;
 else{libwebsocket_callback_on_writable(this,wsi);&lt;br /&gt;
 }&lt;br /&gt;
     break;&lt;br /&gt;
   default:&lt;br /&gt;
     break;&lt;br /&gt;
        	  }   &lt;br /&gt;
 return 0;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
La fonction ci-dessus est celle qui definie la passerelle.&lt;br /&gt;
Si elle établit une liaison, elle imprime &amp;quot;connection established&amp;quot;.&lt;br /&gt;
Une fois la connection établit on se retrouve dans le cas LWS_CALLBACK_RECEIVE si la page html envoie une valeur.&lt;br /&gt;
Dans ce cas la valeur pointée par in est écrite dans sd(liaison serie), puis on utilise :&lt;br /&gt;
 libwebsocket_callback_on_writable(this,wsi);&lt;br /&gt;
&lt;br /&gt;
Qui permet de passer en mode réception de message par la liaison série, qui est definit ici par le cas:&lt;br /&gt;
 case LWS_CALLBACK_SERVER_WRITEABLE:&lt;br /&gt;
Dans ce cas on lit la valeur dans la liaison serie et on la met dans la variable valeur. Si il n'y a rien à lire pour le moment on utilise a nouveau:4&lt;br /&gt;
 libwebsocket_callback_on_writable(this,wsi);&lt;br /&gt;
Afin de rester dans le même case.&lt;br /&gt;
Si la valeur a été lu on crée out:&lt;br /&gt;
  char *out=message+LWS_SEND_BUFFER_PRE_PADDING;&lt;br /&gt;
avec message :&lt;br /&gt;
 static char message[2+LWS_SEND_BUFFER_PRE_PADDING+LWS_SEND_BUFFER_POST_PADDING];&lt;br /&gt;
out va etre du bon type et de la bonne taille pour pouvoir être envoyer a l'html.&lt;br /&gt;
On modife donc la valeur de out grâce à la valeur lue:&lt;br /&gt;
 sprintf(out,&amp;quot;%02x&amp;quot;,valeur);&lt;br /&gt;
Puis on l'envoie:&lt;br /&gt;
 libwebsocket_write(wsi,(unsigned char *)out,MAX_MESSAGE,LWS_WRITE_TEXT);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Arduino====&lt;br /&gt;
Pour l'affichage de la matrice LED nous avons utilisé un exemple trouvé sur le site de SparkFun Electronics:&lt;br /&gt;
 //Example_RGBMatrix.ino&lt;br /&gt;
 //By: Ryan Owens @ SparkFun Electronics&lt;br /&gt;
 //&lt;br /&gt;
 //modified 27 Oct 2014&lt;br /&gt;
 //by Bobby Chan @ SparkFun Electronics&lt;br /&gt;
&lt;br /&gt;
Nous avons ensuite crée:&lt;br /&gt;
&lt;br /&gt;
 void affichage(int je[3][3])&lt;br /&gt;
 {&lt;br /&gt;
   for (int i = 0; i &amp;lt; 3; i++)&lt;br /&gt;
   {&lt;br /&gt;
     for (int j = 0; j &amp;lt; 3; j++)&lt;br /&gt;
     { if (je[i][j] == 1)&lt;br /&gt;
       {&lt;br /&gt;
         color_buffer[0 + i + j * 8] = BLUE;&lt;br /&gt;
       }&lt;br /&gt;
       else if (je[i][j] == 2)&lt;br /&gt;
       {&lt;br /&gt;
         color_buffer[0 + i + j * 8] = RED;&lt;br /&gt;
       }&lt;br /&gt;
       else if (je[i][j] == 5)&lt;br /&gt;
       {&lt;br /&gt;
         color_buffer[0 + i + j * 8] = TEAL;&lt;br /&gt;
       }&lt;br /&gt;
       else if (je[i][j] == 4)&lt;br /&gt;
       {&lt;br /&gt;
         color_buffer[0 + i + j * 8] = GREEN;&lt;br /&gt;
       }&lt;br /&gt;
       else if (je[i][j] == 3) {&lt;br /&gt;
         color_buffer[0 + i + j * 8] = MAGENTA;&lt;br /&gt;
       }&lt;br /&gt;
       else if (je[i][j] == 0) {&lt;br /&gt;
         color_buffer[0 + i + j * 8] = BLACK;&lt;br /&gt;
       }&lt;br /&gt;
     }&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
Qui change la valeur des buffers sur une matrice 3x3, en fonction d'une matrice donnée en paramètre de taille 3x3.&lt;br /&gt;
&lt;br /&gt;
Il faut ensuite matrix_write(); pour observer les resultats&lt;br /&gt;
 &lt;br /&gt;
 void go(int joueur)&lt;br /&gt;
 {if (joueur==2)&lt;br /&gt;
 {color_buffer[7]=GREEN;}&lt;br /&gt;
 else{color_buffer[7]=RED;}}&lt;br /&gt;
Cette fonction met un buffer vert si le joueur 2 peut jouer sinon rouge, le buffer se trouve en dehors de la zone de jeu et donc ne gène pas l'utilisateur.&lt;br /&gt;
&lt;br /&gt;
Il faut ensuite matrix_write(); pour observer les resultats&lt;br /&gt;
&lt;br /&gt;
 void reset(int jeu[3][3])&lt;br /&gt;
 { joueur = 0;&lt;br /&gt;
 color_buffer[7]=RED;&lt;br /&gt;
   for (int i = 0; i &amp;lt; 3; i++)&lt;br /&gt;
   {&lt;br /&gt;
     for (int j = 0; j &amp;lt; 3; j++)&lt;br /&gt;
     { jeu[i][j] = 0;&lt;br /&gt;
     }&lt;br /&gt;
   }&lt;br /&gt;
   jeu[0][0] = 1;&lt;br /&gt;
 }&lt;br /&gt;
Cette fonction remet dispose la matrice LED comme lors d'un début de partie.&lt;br /&gt;
On aurait pu remettre a zéro certaines variables dans cette fonction.&lt;br /&gt;
&lt;br /&gt;
Une fois ces fonctions crées, il faut crée la fonction loop:&lt;br /&gt;
 void loop() {&lt;br /&gt;
   go(joueur);&lt;br /&gt;
   if (Serial.available() &amp;gt; 0)&lt;br /&gt;
   { int a = (Serial.read() - 48);&lt;br /&gt;
     if (a == 9) {&lt;br /&gt;
       reset(jeu);&lt;br /&gt;
     }&lt;br /&gt;
     else {&lt;br /&gt;
       if (joueur == 0)&lt;br /&gt;
       { int b = (a) / 3;&lt;br /&gt;
         int c = a - (b) * 3;&lt;br /&gt;
         jeu[b][c] = 2;&lt;br /&gt;
         joueur = 2;&lt;br /&gt;
         if (jeu[0][0] == 2)&lt;br /&gt;
         {&lt;br /&gt;
           jeu[0][0] = 3;&lt;br /&gt;
         }&lt;br /&gt;
       }&lt;br /&gt;
     }&lt;br /&gt;
   }&lt;br /&gt;
   else {&lt;br /&gt;
     if (joueur == 2)&lt;br /&gt;
     { if (digitalRead(9) == 1)&lt;br /&gt;
       { jeu[l][h] = jeu[l][h] - 1;&lt;br /&gt;
         h = (h + 1) % 3;&lt;br /&gt;
         jeu[l][h]++;&lt;br /&gt;
         delay(50);&lt;br /&gt;
       }&lt;br /&gt;
       else if (digitalRead(8) == 1)&lt;br /&gt;
       {&lt;br /&gt;
         jeu[l][h] = jeu[l][h] - 1;&lt;br /&gt;
         l = (l + 1) % 3;&lt;br /&gt;
         jeu[l][h]++;&lt;br /&gt;
         delay(50);&lt;br /&gt;
       }&lt;br /&gt;
       else if (digitalRead(7) == 1)&lt;br /&gt;
       {&lt;br /&gt;
         if (jeu[l][h] == 1)&lt;br /&gt;
         { jeu[l][h] = 4;&lt;br /&gt;
           Serial.write((l * 3 + h) + 48);&lt;br /&gt;
 &lt;br /&gt;
           l = 0;&lt;br /&gt;
           h = 0;&lt;br /&gt;
           jeu[l][h] = jeu[l][h] + 1;&lt;br /&gt;
           joueur = 0;&lt;br /&gt;
         }&lt;br /&gt;
       }&lt;br /&gt;
     }&lt;br /&gt;
   }&lt;br /&gt;
 &lt;br /&gt;
   affichage(jeu);&lt;br /&gt;
   matrix_write();&lt;br /&gt;
   delay(100);&lt;br /&gt;
 }&lt;br /&gt;
Cette fonction utilise en premier lieu go() pour indiquer au joueur si il peut jouer.&lt;br /&gt;
Ensuite il vérifie la liaison série.&lt;br /&gt;
&lt;br /&gt;
On enlève 48 a ce que l'on a reçut, car on reçoit un char et on désire un int.&lt;br /&gt;
&lt;br /&gt;
Ainsi on ajoutera 48 a ce qu'on enverra dans le Serial.write.&lt;br /&gt;
&lt;br /&gt;
Si on reçoit 9, fin de partie.&lt;br /&gt;
Sinon on vérifie qui doit jouer et on le fais jouer si on peut ou on attend. &lt;br /&gt;
&lt;br /&gt;
Le Joueur 0 équivaut au joueur 1 pour l'html.&lt;br /&gt;
&lt;br /&gt;
Une fois les coups effectués, on affiche ce qui en résulte et ajoute un delay pour éviter d'appuyer deux fois d'affilée sans le vouloir.&lt;br /&gt;
&lt;br /&gt;
== Démonstration ==&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;/div&gt;</summary>
		<author><name>Tstieven</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Projet_IMA3_P1,_2015/2016,_TD2&amp;diff=32304</id>
		<title>Projet IMA3 P1, 2015/2016, TD2</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Projet_IMA3_P1,_2015/2016,_TD2&amp;diff=32304"/>
				<updated>2016-06-16T23:02:27Z</updated>
		
		<summary type="html">&lt;p&gt;Tstieven : /* Arduino */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Projet IMA3-SC 2015/2016 : MORPION =&lt;br /&gt;
&lt;br /&gt;
== Cahier des charges ==&lt;br /&gt;
Notre projet &amp;quot;système communicant&amp;quot; aura pour but de créer une interface connectée du &amp;quot;morpion&amp;quot;. L'objectif est de permettre à un joueur interagissant sur un site internet de jouer contre une autre personne qui, elle, jouera à l'aide d'un affichage fait à partir de leds. &lt;br /&gt;
&lt;br /&gt;
Nous cherchons donc à exploiter la capacité asynchrone d'un websocket afin de permettre une partie en temps réel.&lt;br /&gt;
&lt;br /&gt;
=== Matériel ===&lt;br /&gt;
* Une nanoboard&lt;br /&gt;
* Une raspberry pi&lt;br /&gt;
* Une matrice de leds 9x9 ou plus&lt;br /&gt;
* Un clavier numérique ou 9 boutons-poussoirs&lt;br /&gt;
* Des ordinateurs avec les logiciels de développement nécessaires &lt;br /&gt;
&lt;br /&gt;
=== Optionnel ===&lt;br /&gt;
* Un buzzer afin d'avertir le joueur d'un choix incohérent&lt;br /&gt;
* Trois afficheurs sept segments afin d'ajouter un tableau des scores&lt;br /&gt;
&lt;br /&gt;
== Séance 1 ==&lt;br /&gt;
&lt;br /&gt;
=== Partie électronique ===&lt;br /&gt;
Le but de cette première séance était de se familiariser avec le logiciel de conception Altium Designer et de réfléchir à la façon d'aborder la conception électronique du morpion.&lt;br /&gt;
&lt;br /&gt;
Cette conception se fera en plusieurs étapes :&lt;br /&gt;
&lt;br /&gt;
* gérer le positionnement d'un curseur en fonction de l'état courant de la partie&lt;br /&gt;
* gérer l'affichage de la matrice en fonction des cases remplies / sélectionnées&lt;br /&gt;
* permettre la réception et l'envoie de données à l'aide de la liaison série&lt;br /&gt;
* traiter la remise à zéro du plateau en cas de fin de partie&lt;br /&gt;
&lt;br /&gt;
====Positionnement du curseur et état de la partie====&lt;br /&gt;
&lt;br /&gt;
Dans un premier lieu, il était nécessaire de traiter les actions entrantes. En effet, si ce n'est pas au tour du joueur &amp;quot;physique&amp;quot;, l'utilisation des boutons doit être bloquée.&amp;lt;br&amp;gt;&lt;br /&gt;
Ceci consiste simplement à effectuer un ET logique entre un bit symbolisant le joueur courant (si 1 alors joueur physique, si 0 alors joueur en ligne) et l'action demandée.&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fichier:Choisir.png||center|alt=Schema de choix|Circuit logique de la permission d'action]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Une fois les choix accessibles, il faut désormais les traiter. Le traitement s'effectuera à l'aide de bascules, chaque case comportera deux bascules : une bascule de sélection (la case est-elle sélectionnée ?) et une bascule permettant de savoir si la case a déjà été jouée.&amp;lt;br&amp;gt;&lt;br /&gt;
Si la case a déjà été jouée, il ne faut empêcher l'utilisateur de la jouer.&amp;lt;br&amp;gt;&lt;br /&gt;
Nous considérerons que le joueur en ligne n'effectuera pas de choix erroné et nous testerons seulement les choix du joueur &amp;quot;physique&amp;quot;.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Traitement.png||center|alt=Schema de traitement|Circuit logique du traitement d'une action]] &amp;lt;br&amp;gt;&lt;br /&gt;
Les ronds verts permettent la distinction des 9 cases. &amp;lt;br&amp;gt;&lt;br /&gt;
Le rond jaune correspond à la zone des sorties d'état. Plus précisément, il s'agit de deux bus regroupant les cases remplies et le lieu de la case sélectionnée.&amp;lt;br&amp;gt;&lt;br /&gt;
Le rond noir correspond au choix de l'adversaire.&amp;lt;br&amp;gt;&lt;br /&gt;
Le rond orange correspond à la sortie &amp;quot;selection_done&amp;quot; qui effectue un état haut lorsqu'un choix valide a été fait par l'utilisateur.&amp;lt;br&amp;gt;&lt;br /&gt;
Le rond rouge met en évidence la zone permettant de traiter les décalage du bit de sélection. Ce décalage consiste à garder seulement UNE bascule à l'état haut en effectuant le passage logique d'une bascule à une autre en fonction du choix tout en appliquant un reset sur l'ancienne sélection. Le schéma de ce déplacement se trouve ci-dessous et est appliqué aux 9 cases.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Andor.png||center|alt=Schema permettant le déplacement|Circuit logique utilisé afin de déplacer le curseur]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Complément à la séance 1===&lt;br /&gt;
====Affichage dynamique====&lt;br /&gt;
&lt;br /&gt;
L'un des grands problèmes à la réalisation du morpion sur nanoboard est l'affichage dynamique. En effet, il va falloir à la fois stocker les valeurs, et stocker quel joueur a joué telle ou telle case, afin de savoir quel case s'allumera de la couleur désirée. Ceci rajouté à l'affichage dynamique de la sélection, ceci s'avère compliqué.&amp;lt;br&amp;gt;&lt;br /&gt;
La tâche a alors été décomposée en deux étapes :&lt;br /&gt;
* Le traitement des couleurs (Quelle couleur affilier à quelle case ?)&lt;br /&gt;
* L'affichage de ces couleurs&lt;br /&gt;
=====Traitement des couleurs=====&lt;br /&gt;
&lt;br /&gt;
Le but était de se simplifier au maximum les choses. Le premier problème est de savoir quel joueur a joué une case, pour ceci, nous nous sommes servi de l'état du plateau fourni dans le bloc TRAITEMENT. Nous savons quelles cases sont à 1 et imposons donc une couleur rouge à toutes ces cases.&amp;lt;br&amp;gt;&lt;br /&gt;
De plus, nous savons qu'à chaque fois que le joueur &amp;quot;physique&amp;quot; effectue un choix valide, un front montant est appliqué sur la broche &amp;quot;selection_done&amp;quot; de TRAITEMENT. Nous avons alors re-créé 9 registres symbolisant les cases, mais cette fois ci, en fonction de l'endroit sélectionné par l'utilisateur, si ce dernier effectue un choix valide, le registre passera à 1. Le but de cette manipulation est de recenser tous les registres joués par le joueur physique. &amp;lt;br&amp;gt;&lt;br /&gt;
Maintenant, nous relions ces registres aux valeurs de couleur verte afin d'additionner le vert au rouge  des cases jouées et obtiendrons finalement des cases de couleur jaune pour symboliser les cases du joueur physique et des cases de couleur rouge pour le jouer en ligne. &amp;lt;br&amp;gt;&lt;br /&gt;
Il ne reste qu'à relier directement la case sélectionnée (recensée par le bus Etat_selection de TRAITEMENT) à la couleur bleue.&amp;lt;br&amp;gt;&lt;br /&gt;
Finalement nous avons : &lt;br /&gt;
* joueur en ligne : rouge&lt;br /&gt;
* joueur physique : jaune&lt;br /&gt;
* sélection : magenta, cyan ou bleu&lt;br /&gt;
&lt;br /&gt;
 [[Fichier:Traitement_affichage.png||center|Schéma du traitement pré affichage|Circuit logique du traitement pré-affichage]] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Affichage=====&lt;br /&gt;
&lt;br /&gt;
La matrice led employée est une matrice led à anode commune. Elle a pour avantage de permettre la sélection d'une ligne et de la couleur de chaque colonne.&amp;lt;br&amp;gt;&lt;br /&gt;
Cependant, nous ne pouvons donc choisir la couleur que d'une colonne. C'est pourquoi nous allons faire varier cet affichage ligne par ligne à une fréquence élevée afin que l’œil humain ne le remarque pas. Nous pourrons donc choisir quelle couleur sera affichée sur chaque ligne. &amp;lt;br&amp;gt;&lt;br /&gt;
Cet affichage ligne par ligne sera effectué via un multiplexeur donc le bus de sélection sera relié à un compteur 3bits cadencé sur une clock suffisamment rapide pour opérer une persistance rétinienne. &amp;lt;br&amp;gt;&lt;br /&gt;
Dans chaque bus nous avons imposé certains bits afin que la grille soit dessinée en bleu.&amp;lt;br&amp;gt;&lt;br /&gt;
Le bus multiplexé sera ensuite redirigé vers les pins de la matrice leds.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Affichage.png||center|Schéma d'affichage|Circuit logique de l'affichage]] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Tests====&lt;br /&gt;
&lt;br /&gt;
Le bloc d'affichage a été testé et deux problèmes ont été rencontrés : &lt;br /&gt;
* La sélection a été mal réfléchie&lt;br /&gt;
* Un phénomène de rebond a été remarqué sur l'oscilloscope numérique&lt;br /&gt;
&lt;br /&gt;
=====La sélection=====&lt;br /&gt;
&lt;br /&gt;
Dans la fonction d'affichage, on retourne la sélection de la ligne en logique inversée. Le problème est que dans la version 1.0 de l'affichage, un GND avait été placé en entrée du MUX de sélection. Nous n'avions pas pensé au fait que dans ce cas la, toutes les sorties seraient en permanence au GND... &amp;lt;br&amp;gt;La correction a donc été de placer un VCC en entrée et d'inverser les sorties, ainsi une seul anode de ligne sera placée sur le GND.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Selection.PNG||center|Schéma de selection|Correction de la sortie de selection]] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le schéma semble fonctionnel cependant d'autres tests restent à faire.&lt;br /&gt;
&lt;br /&gt;
=====Le rebond=====&lt;br /&gt;
&lt;br /&gt;
Lors du test de l'affichage, la clock d'affichage a été simulée par un bouton de la nanoboard et l'affichage a été relié sur une seule ligne.&amp;lt;br&amp;gt;&lt;br /&gt;
Nous étions sensé remarquer que lorsque la ligne s'allume, si on appuie sur le bouton, elle s’éteint et enfin si nous appuyons sept fois sur le bouton, la ligne se rallume. &amp;lt;br&amp;gt;&lt;br /&gt;
Rien ne se passait comme prévu, et plus précisément, il n'y avait même pas de logique dans la ré-apparition de la ligne.&amp;lt;br&amp;gt;&lt;br /&gt;
Ayant déjà été confronté à des problèmes de rebonds avec des boutons poussoir, ce phénomène a été testé sur l'oscilloscope numérique.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Rebond.png||center|Exemple de rebond|Exemple de rebond]] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous demanderons alors aux référents quelle stratégie adopter : filtrer le signal avec un condensateur en parallèle au bouton ou bien utiliser une comparaison avec registre à décalage pour vérifier la stabilité du signal avant d'envoie du front montant.&amp;lt;br&amp;gt;&lt;br /&gt;
Certes la correction du bouton n'était pas nécessaire aux tests entrepris pour l'affichage (nous aurions pu mettre une clock interne) mais ceci nous servira pour filtrer les choix effectués par l'utilisateur (haut, droite, select). &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Objectifs pour la séance prochaine====&lt;br /&gt;
&lt;br /&gt;
Les schémas effectués restent des ébauches, il y a forcément eu des oublis. Néanmoins, comme chaque schéma se compile, le passage à l'étape de mise en place de la liaison série durant la séance 2 est envisageable. Il faudra donc créer un protocole plus concret afin de savoir qui doit jouer, quand envoyer, quand recevoir des données. Si le temps le permet, quelques programmes simples seront testés sur la nanoboard afin de vérifier le fonctionnement de l'affichage de la matrice après discutions avec les enseignants au sujet du phénomène de rebond.&lt;br /&gt;
&lt;br /&gt;
=== Partie informatique ===&lt;br /&gt;
Dans cette première séance nous avons programmé l'arduino afin de créer le programme de morpion, pour pouvoir tester la partie informatique sans disposer de la partie électronique.&lt;br /&gt;
Pour cela nous avons due apprendre à utiliser une matrice de LED RGB à l'aide des codes fournit par SparkFun.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Puis nous avons pu commencer à programmer le morpion:&lt;br /&gt;
&lt;br /&gt;
*le jeu se déroule dans une matrice 3x3.&lt;br /&gt;
*le position du curseur est représentée par une lumière bleue, celle des pions du joueurs 1 par une lumière rouge et celle des pions du joueurs 2 par une lumière verte.&lt;br /&gt;
*si le curseur est sur un pions les deux couleurs s'additionnent pour donner du magenta où du cyan.&lt;br /&gt;
*le joueur se déplace à l'aide de 2 boutons poussoir,l'un permettant d'aller vers le haut, l'autre permettant d'aller à droite&lt;br /&gt;
**pour éviter plusieurs déplacements d'un coup, un délais a été mis entre deux actions&lt;br /&gt;
*une fois tout en haut, si le joueur presse le bouton pour aller vers le haut le joueur se retrouve en bas.&lt;br /&gt;
*une fois tout à droite, si le joueur presse le bouton pour aller vers la droite le joueur se retrouve à gauche. &lt;br /&gt;
*enfin un dernier bouton poussoir permet de placer un pion à l'endroit où se trouve le curseur.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Une fois les mouvements programmés il fallait régir les règles du jeu:&lt;br /&gt;
&lt;br /&gt;
*Ainsi le curseur commence toujours en haut à droite&lt;br /&gt;
*Si le un joueurs arrive a créer une ligne de 3, il gagne la partie&lt;br /&gt;
*Si aucun joueur n'arrive à gagner et que le terrain est remplit, la partie se termine sur un match nul&lt;br /&gt;
*Une fois la partie terminée, le terrain est remis à zéros&lt;br /&gt;
&lt;br /&gt;
== Séance 2 ==&lt;br /&gt;
&lt;br /&gt;
=== Partie électronique ===&lt;br /&gt;
&lt;br /&gt;
La matrice led ne pourra être alimentée par les différentes broches de la nanoboard sous peine de créer une chute de tension et risquer un reset du fpga.&amp;lt;br&amp;gt;&lt;br /&gt;
Ainsi, le but de cet séance est de réfléchir à la conception d'un prototype de carte permettant d'alimenter la matrice led de manière externe. &amp;lt;br&amp;gt;&lt;br /&gt;
====Utilisation de transistors====&lt;br /&gt;
L'utilisation de transistors en saturé paraît la meilleur chose à faire. En effet, ceci permettra de générer un gain en courant et de contrôler l'état des différentes couleurs ligne par ligne et colonne par colonne.&amp;lt;br&amp;gt;&lt;br /&gt;
Pour permettra la liaison de chaque led au VCC, on utilisera un transistor PNP. Pour permettre la liaison au GND, on utilisera un NPN.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Montage_roussel.PNG||center|upright = 0.5|Montage d'une branche|Montage d'une branche de led]] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Comme il s'agit de transistor à anodes communes, il suffira de 8 transistors NPN. Notre choix s'est donc porté vers le ULN2803A, qui est un ensemble de 8 paires Darlington.&amp;lt;br&amp;gt;&lt;br /&gt;
L'utilisation de paires Darlington a l'avantage de permettre une génération élevée de courant. (Fort gain en courant)&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour ce qui est des cathodes, un problème de taille se pose. Il faudrait 24 transistors PNP pour gérer les 8 colonnes * 3couleurs. Ainsi, notre choix s'est plutôt déporté vers le buffer de portes trois états 74AS240. Cette famille de buffer 3 états a la capacité de délivrer un courant du même ordre de grandeur que l'ULN2803A.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Maintenant il reste à dimensionner la résistance sur chaque branche. Après quelques tests à l'aide d'un multimètre et de la matrice, on remarque que chaque led a besoin de 2mA pour fonctionner. Donc le but est de générer un courant d'environ 2mA. Ainsi, si on impose une tension de 5.5V aux bornes du montage, R = 5.5 / 0.002 = 2700 Ohms.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous avons désormais toutes les informations nécessaires pour le montage d'un prototype.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Le montage====&lt;br /&gt;
Au cours d'une séance supplémentaire, un plan a été élaboré et le prototype brasé. Voici donc le prototype achevé :&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Driver.JPG||center|400px|Driver matrice|Driver de la matrice]] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sur chaque sortie se trouve une résistance de 2700ohms. Le mieux aurait été de réaliser ce montage avec un réseau résistif cependant, le temps nous faisant défaut, nous avons utilisé les résistances déjà présentes en magasin.&amp;lt;br&amp;gt;&lt;br /&gt;
Sur chaque entrée se trouver une broche qui sera reliée à la nanoboard. &amp;lt;br&amp;gt;&lt;br /&gt;
Tous les buffers ont leur GND et VCC reliés au générateur 5.5V. Les paires Darlington sont reliées à la même masse.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Il ne restait plus qu'à relier la matrice led. Cette liaison parallèle a été réalisée en recyclant un vieux BUS d'ordinateur fixe. Finalement, voilà le montage final :&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Matrice_roussel.JPG||center|400px|Montage final de la partie électronique|Montage final de la partie électronique]] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Partie informatique ===&lt;br /&gt;
=====Arduino=====&lt;br /&gt;
Lors de cette séance nous avons pu finir le programme arduino, pour pouvoir jouer à deux sur une la carte.&lt;br /&gt;
Cette partie a été crée pour pouvoir tester les différentes fonctions, et sera modifier lors de prochaines séances.&lt;br /&gt;
La matrice LED affiche des clignotement irrégulier de couleur rouge, mais cela ne gêne pas pour jouer.&lt;br /&gt;
&lt;br /&gt;
=====Raspberry=====&lt;br /&gt;
Nous avons pu enfin commencer notre travail sur la raspberry.&lt;br /&gt;
Apres avoir branché la raspberry en série à notre pc, nous avons pu la configurer afin qu'elle fonctionne avec le réseau de l'ecole.&lt;br /&gt;
Pour cela nous avons mis une adresse IP du réseau INSECURE de l'école sur la Raspberry, celle de notre raspberry est :172.26.79.12.&lt;br /&gt;
C'est à partir de cette adresse que nous allons acceder aux pages html du projet.&lt;br /&gt;
Pour effectuer cette configuration nous avons remplacé les lignes correspondant à la configuration de la carte Ethernet dans le fichier /etc/network/interfaces par les lignes&lt;br /&gt;
  auto eth0&lt;br /&gt;
  iface eth0 inet static&lt;br /&gt;
    address 172.26.79.12&lt;br /&gt;
    netmask 255.255.240.0&lt;br /&gt;
    gateway 172.26.79.254&lt;br /&gt;
&lt;br /&gt;
Et afin d'indiquer le serveur DNS dans /etc/resolv.conf nous avons rajouté:&lt;br /&gt;
&lt;br /&gt;
  nameserver 193.48.57.34 &lt;br /&gt;
&lt;br /&gt;
Une fois la raspberry configurée, nous pouvons accéder à notre raspberry sans liaisons série grâce à un ssh.&lt;br /&gt;
Afin d'effectuer notre projet nous avons besoin de deux bibliothèques:&lt;br /&gt;
*jquery.js que l'ont a telecharger sur http://jquery.com/ afin de faciliter la programmation en javascript&lt;br /&gt;
*une bibliothèque C de WebSocket trouvé sur http://libwebsockets.org afin de pouvoir effectuer notre programme en C utilisant le Websocket&lt;br /&gt;
&lt;br /&gt;
Notre raspberry est maintenant prête pour notre projet, nous avons pu commencer notre fichier morpion.html qui permet de joueur au morpion à deux sur le même ordinateur, ce qui permet de tester les differentes fonctions utilisés pour la suite du projet.&lt;br /&gt;
&lt;br /&gt;
== Séance 3 ==&lt;br /&gt;
&lt;br /&gt;
=== Partie électronique ===&lt;br /&gt;
&lt;br /&gt;
Le montage réalisé a été testé. Quelques soudures ont été refaites et un composant ne fonctionnait pas. Heureusement, nous avions placé des socles afin de pouvoir enlever/placer les buffers facilement. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Cette mise en évidence de composant défaillant a pris beaucoup de temps, c'est pourquoi tout ce qui suit a été réalisé sur plusieurs séances supplémentaires. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La première chose effectuée fut le branchement de la carte à la nanoboard. Pour cela, nous avons utilisé un plan créé au préalable et un schematic de vérification.&amp;lt;br&amp;gt;&lt;br /&gt;
Ce schematic consistait à afficher colonne par colonne et couleur par couleur chaque led, ainsi, si un branchement était mauvais, nous pouvions le voir directement. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le montage finalisé, nous pouvions commencer les tests des fonctions créées en première séance. Sur le principe, ces schematics marchaient plutôt bien mais comme nous souhaitions générer des simulations de données venant de la liaison série, nous n'avions pas assez de boutons pour utiliser ces premières schematics. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ainsi, le travail de traitement a dû être refait. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====La seletion====&lt;br /&gt;
L'objectif est de créer un circuit numérique de sélection à l'aide de seulement deux boutons.&amp;lt;br&amp;gt;&lt;br /&gt;
Le choix s'est alors porté sur un compteur allant jusque 8. Ainsi, il y avait 9 possibilités de valeur et chaque valeur correspondra a une case.&amp;lt;br&amp;gt;&lt;br /&gt;
Le compteur devra s'incrémenter sur l'appuie d'un bouton de balayage. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Traite.JPG|vignette|center|600px|Selection|Selection]] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La sélection du joueur physique doit être contrôlée afin que seul un choix valide soit accepté. Ainsi, un schematic de vérification a été créé.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour savoir quelles cases ont déjà été jouées, nous avons décidé d'effectuer un OU logique entre les cases jouées par le joueur physique et les cases jouées par le joueur en ligne. Une fois le bus d'état global créé, il suffit d'effectuer un ET logique avec le choix de notre joueur physique. Si le choix se porte sur une case qui n'a jamais été jouée, le résultat de l'opération logique sera un bus nul. Nous comparons donc ce bus avec un bus nul. &amp;lt;br&amp;gt;&lt;br /&gt;
Finalement, le choix est valide si le comparateur sort une égalité ET le bouton de sélection a été appuyé.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Valider_choix.JPG|vignette|center|600px|Valider|Valider]] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====L'affichage====&lt;br /&gt;
Les schematics d'affichage sont restés les mêmes qu'à la séance 1, mis à part quelques corrections tel l'inversion des sorties d'affichage car nous travaillons en logique inversée sur les portes 3 états.&amp;lt;br&amp;gt;&lt;br /&gt;
Le pré-affichage s'occupe toujours du stockage des cases cochées par le joueur physique si il est le joueur courant.&amp;lt;br&amp;gt;&lt;br /&gt;
Afin d'assurer une persistance rétinienne, on devra relier l'affichage à une horloge d'au moins 3KHz.&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
[[Fichier:Traitement_preaffichage.JPG|vignette|center|500px|Pre-affichage|Pre-affichage]] [[Fichier:Affich.JPG|vignette|center|500px|Affichage|Affichage]] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Simulation de la liaison série====&lt;br /&gt;
Le but est de gérer des données semblables à ce que la raspberry pourrait nous envoyer. A savoir 1 bit de fin de partie, 1 bit de réception de donnée et 4 bits de choix de case.&amp;lt;br&amp;gt;&lt;br /&gt;
=====Conversion de l'adresse choisie=====&lt;br /&gt;
Il faut faire correspondre les 4 bits reçus à un bus de 9bits, chaque bit correspondant à une case. Ceci revient à faire un traitement similaire à la sélection du joueur physique...&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Traite_adversaire.JPG|vignette|center|400px|Conversion de l'adresse|Conversion de l'adresse]] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Stockage=====&lt;br /&gt;
Maintenant que nous savons convertir une adresse, on doit pouvoir mettre à jour les cases jouées par le joueur en ligne sur chaque réception de donnée.&amp;lt;br&amp;gt;&lt;br /&gt;
Pour effectuer ceci, on utilise 9 bascules pour stocker les choix dans différentes cases. Aucun traitement de choix valide n'est à faire car la raspberry s'en occupe déjà de son côté.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Stock_adv.JPG|vignette|center|600px|Stockage des cases de l'adversaire|Stockage des cases de l'adversaire]] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Propre à la simulation=====&lt;br /&gt;
Pour générer l'adresse, on utilise le même principe de sélection que celui du joueur physique.&amp;lt;br&amp;gt;&lt;br /&gt;
Pour avoir un aspect visuel de cette sélection, on utilise un MUX qui, en fonction du joueur courant, afficher la sélection de tel ou tel joueur.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Traite_sel.JPG|vignette|center|600px|MUX de selection|MUX de la sélection]] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour ce qui est du bit de fin de parti, on le symbolise par un bouton.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Phénomène de rebond=====&lt;br /&gt;
Pour gérer le rebond des boutons poussoirs, la solution a été numérique. Un registre à décalage a été créé, cadencé sur une clock, il décale sur chaque front d'horloge la valeur courante d'un bouton. En utilisant un comparateur, on obtient alors un front montant seulement lorsque le bouton est dans un état stable (c'est à dire lorsque tous les bits ont la même valeurs)&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Dump.JPG|vignette|center|600px|Anti-rebond|Anti-rebond]] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====TOPLEVEL====&lt;br /&gt;
Le schéma TOPLEVEL est alors le suivant :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Toplevel.JPG|vignette|center|800px|TOPLEVEL|TOPLEVEL]] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ainsi, si nous avions eu le bloc de liaison série bidirectionnel, nous aurions simplement eu à :&lt;br /&gt;
* Remplacer la génération d'adresse par les 4bits de poids faible du message de 8bits reçu.&lt;br /&gt;
* Remplacer le bouton de reset par le bit de fin de partie.&lt;br /&gt;
* Remplacer le bit de choix de l'adversaire par celui de réception validée.&lt;br /&gt;
* Relier le bit d'émission à la sortie de &amp;quot;choix valide&amp;quot;.&lt;br /&gt;
* Relier la sélection du joueur physique aux données à transmettre.&lt;br /&gt;
* Enlever le multiplexage de la sélection.&lt;br /&gt;
&lt;br /&gt;
====Réflexion====&lt;br /&gt;
La partie électronique de ce projet a donc été menée à bout. Cependant, après coup, on se rend compte que la création d'un prototype aurait été meilleure en imprimant un PCB plutôt qu'en utilisant une piste à bandes.&amp;lt;br&amp;gt;&lt;br /&gt;
Nous aurions également pu éviter une configuration en parallèle du driver. Ainsi, à l'aide de registres à décalages alimentés en externe, la lisibilité du circuit aurait été meilleure.&amp;lt;br&amp;gt;&lt;br /&gt;
On peut néanmoins se satisfaire de la réalisation numérique du circuit car elle exploite toutes les possibilités qu'offrent la conception via schematics à l'aide d'Altium designer à savoir :&amp;lt;br&amp;gt;&lt;br /&gt;
* La création d'une bibliothèque&lt;br /&gt;
* La création de composants&lt;br /&gt;
* L'utilisation de composants configurables avec édition de pins&amp;lt;br&amp;gt;&lt;br /&gt;
D'ailleurs, on comprend d'autant plus l'intérêt du langage VHDL après la création d'autant de schematics pour un projet de cette envergure.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Partie informatique ===&lt;br /&gt;
Nous avons commencé cette séance en continuant le morpion.html&lt;br /&gt;
Dans un premier temps nous avons crée &amp;quot;l'espace de jeu&amp;quot; en utilisant du code trouvé sur internet :&lt;br /&gt;
 &amp;lt;!DOCTYPE html&amp;gt;&lt;br /&gt;
  &amp;lt;head&amp;gt;&lt;br /&gt;
   &amp;lt;meta charset=&amp;quot;utf-8&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;style type=&amp;quot;text/css&amp;quot;&amp;gt;&lt;br /&gt;
 .table{&lt;br /&gt;
 width : 330px;&lt;br /&gt;
 height : 330px;&lt;br /&gt;
 border : solid 3px black;&lt;br /&gt;
  border-collapse: collapse;&lt;br /&gt;
 }&lt;br /&gt;
 .td{&lt;br /&gt;
 border : solid 3px black;&lt;br /&gt;
 width : 33%;&lt;br /&gt;
 height : 33%;&lt;br /&gt;
 }&lt;br /&gt;
 &amp;lt;/style&amp;gt;&lt;br /&gt;
 &amp;lt;title&amp;gt; Jeu morpion&amp;lt;/title&amp;gt;&lt;br /&gt;
 &amp;lt;/head&amp;gt;&lt;br /&gt;
et&lt;br /&gt;
 &amp;lt;body&amp;gt;&lt;br /&gt;
   h1&amp;gt;Morpion&amp;lt;/h1&amp;gt;&lt;br /&gt;
 table class=&amp;quot;table&amp;quot; align=&amp;quot;center&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
       &amp;lt;td class=&amp;quot;td&amp;quot; onclick=&amp;quot;placerSigne(0)&amp;quot; id=&amp;quot;0&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
       &amp;lt;td class=&amp;quot;td&amp;quot; onclick=&amp;quot;placerSigne(1)&amp;quot; id=&amp;quot;1&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
       &amp;lt;td class=&amp;quot;td&amp;quot; onclick=&amp;quot;placerSigne(2)&amp;quot; id=&amp;quot;2&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
       &amp;lt;td class=&amp;quot;td&amp;quot; onclick=&amp;quot;placerSigne(3)&amp;quot; id=&amp;quot;3&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
       &amp;lt;td class=&amp;quot;td&amp;quot; onclick=&amp;quot;placerSigne(4)&amp;quot; id=&amp;quot;4&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
       &amp;lt;td class=&amp;quot;td&amp;quot; onclick=&amp;quot;placerSigne(5)&amp;quot; id=&amp;quot;5&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
       &amp;lt;td class=&amp;quot;td&amp;quot; onclick=&amp;quot;placerSigne(6)&amp;quot; id=&amp;quot;6&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
       &amp;lt;td class=&amp;quot;td&amp;quot; onclick=&amp;quot;placerSigne(7)&amp;quot; id=&amp;quot;7&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
       &amp;lt;td class=&amp;quot;td&amp;quot; onclick=&amp;quot;placerSigne(8)&amp;quot; id=&amp;quot;8&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
 &amp;lt;/table&amp;gt;&lt;br /&gt;
 table style=&amp;quot;border : solid 3px #3399FF;&amp;quot; align=&amp;quot;center&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;tr&amp;gt;&lt;br /&gt;
 &amp;lt;td style=&amp;quot;border : solid 1px #3399FF;&amp;quot;&amp;gt;Joueur 1&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;td style=&amp;quot;border : solid 1px #3399FF;&amp;quot;&amp;gt;Joueur 2&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
 &amp;lt;tr&amp;gt;&lt;br /&gt;
 &amp;lt;td style=&amp;quot;border : solid 1px #3399FF;&amp;quot; id=&amp;quot;scre1&amp;quot;&amp;gt;0&lt;br /&gt;
 &amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;td style=&amp;quot;border : solid 1px #3399FF;&amp;quot; id=&amp;quot;scre2&amp;quot;&amp;gt;0&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
 &amp;lt;/table&amp;gt;&lt;br /&gt;
  &amp;lt;/body&amp;gt;&lt;br /&gt;
 &amp;lt;/html&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le code ci dessus n'est pas totalement bon, puisque nous avons du enlever des &amp;quot;&amp;lt;&amp;quot; afin d'afficher le code et non ce qu'il en résulte.&lt;br /&gt;
&lt;br /&gt;
L'espacement entre deux lignes peut changer en fonction de la taille de ce qui est mis dedans.&lt;br /&gt;
Si on remplis de case blanche (&amp;quot;vide.png&amp;quot;) de taille 100*100 on obtient:&lt;br /&gt;
[[Fichier:morpion1.png]]&lt;br /&gt;
&lt;br /&gt;
A chaque clique sur une case la fonction placerSigne(n) va s'effectuer avec n le numéros de la case sélectionnée.&lt;br /&gt;
 function placerSigne(idCase)&lt;br /&gt;
 { &lt;br /&gt;
         if(morpion[idCase] == 0)&lt;br /&gt;
         {coup++;&lt;br /&gt;
         morpion[idCase]=joueur;&lt;br /&gt;
         if (joueur==1)&lt;br /&gt;
                 {&lt;br /&gt;
  	  	 joueur=2;&lt;br /&gt;
                 document.getElementById(idCase).innerHTML = '&amp;lt;img src=&amp;quot;croix.gif&amp;quot; alt=&amp;quot;image !&amp;quot; /&amp;gt;';&lt;br /&gt;
 &lt;br /&gt;
                 }&lt;br /&gt;
 	else    {&lt;br /&gt;
 	   	 joueur=1;&lt;br /&gt;
                 document.getElementById(idCase).innerHTML = '&amp;lt;img src=&amp;quot;rond.gif&amp;quot; alt=&amp;quot;image !&amp;quot; /&amp;gt;';&lt;br /&gt;
 &lt;br /&gt;
                 }&lt;br /&gt;
 	if (coup&amp;gt;4)&lt;br /&gt;
 		{if (gagner(idCase))&lt;br /&gt;
 			{if (joueur==1)&lt;br /&gt;
 				{score2++;&lt;br /&gt;
 				alert(&amp;quot;joueur 2 gagne &amp;quot;);&lt;br /&gt;
 				finpartie();&lt;br /&gt;
 				}&lt;br /&gt;
 			else{score1++;&lt;br /&gt;
 				alert(&amp;quot;joueur 1 gagne &amp;quot;);&lt;br /&gt;
 				finpartie();&lt;br /&gt;
 				}&lt;br /&gt;
 			&lt;br /&gt;
 			}&lt;br /&gt;
 		else {if (egalite()==0)&lt;br /&gt;
 			{alert(&amp;quot;egalite&amp;quot;);&lt;br /&gt;
 			finpartie();}&lt;br /&gt;
 		     }&lt;br /&gt;
 		}&lt;br /&gt;
         }&lt;br /&gt;
         else{alert(&amp;quot;pas le droit&amp;quot;);}&lt;br /&gt;
 }&lt;br /&gt;
Cette fonction place une image 100x100 de rond ou de croix dans la case sélectionnée en fonction du joueur qui doit jouer.&lt;br /&gt;
*Elle calcule les scores de chaque joueurs, et appelle gagner et egalite pour savoir si on est dans une fin de partie.&lt;br /&gt;
*Et elle alerte le joueur si la case sélectionnée ne peut pas être jouée.&lt;br /&gt;
&lt;br /&gt;
Pour cela elle utilise le tableau morpion de taille 9 remplit de 0 à l'origine, et modifie la case sélectionnée en y mettant 1 ou 2 en fonction du joueur qui a joué.&lt;br /&gt;
La variable coup permet de déterminer le nombre de coup jouer, ce qui permet de ne pas verifier si une partie une gagnée tant que coup n'est pas supérieur à 4, puisqu'il faut au minimum 5 coup pour gagner.&lt;br /&gt;
&lt;br /&gt;
 function finpartie()&lt;br /&gt;
 {for (var j=0;j&amp;lt;9;j++)&lt;br /&gt;
 	{ document.getElementById(j).innerHTML = '&amp;lt;img src=&amp;quot;vide.png&amp;quot; alt=&amp;quot;image !&amp;quot; /&amp;gt;';&lt;br /&gt;
 	morpion[j]=0;&lt;br /&gt;
 	}&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
La fonction finpartie() met les variables morpion et coup à zéro, et place des images blanches dans toutes les cases.&lt;br /&gt;
Elle est appelé que si il y une victoire ou une égalité.&lt;br /&gt;
Dans morpionsc.html qui est le fichier html final, joueur est remis à 1 dans cette fonction.&lt;br /&gt;
Dans le fichier morpion.html cela n'etais pas necessaire et permettait en plus au joueur perdant de commencer.&lt;br /&gt;
Mais pour simplifier la suite nous avons préféré définir que toujours le même joueur commencerais. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 function gagner(idCase)&lt;br /&gt;
 {switch(idCase)&lt;br /&gt;
         {&lt;br /&gt;
 case 0:&lt;br /&gt;
         return (diagonal1()||ligne1()||colonne1());&lt;br /&gt;
         break;&lt;br /&gt;
 case 1:&lt;br /&gt;
         return (ligne1()||colonne2());&lt;br /&gt;
         break;&lt;br /&gt;
 case 2:&lt;br /&gt;
         return (diagonal2()||ligne1()||colonne3());&lt;br /&gt;
         break;&lt;br /&gt;
 case 3:&lt;br /&gt;
         return (ligne2()||colonne1());&lt;br /&gt;
         break; &lt;br /&gt;
 &lt;br /&gt;
 case 4:&lt;br /&gt;
         return (diagonal1()||diagonal2()||ligne2()||colonne2());&lt;br /&gt;
         break;&lt;br /&gt;
 case 5:&lt;br /&gt;
         return (ligne2()||colonne3());&lt;br /&gt;
         break;&lt;br /&gt;
 case 6:&lt;br /&gt;
         return (diagonal2()||ligne3()||colonne1());&lt;br /&gt;
         break;&lt;br /&gt;
 case 7:&lt;br /&gt;
         return (ligne3()||colonne2());&lt;br /&gt;
         break;&lt;br /&gt;
 case 8:&lt;br /&gt;
         return (diagonal1()||ligne3()||colonne3());&lt;br /&gt;
         break;&lt;br /&gt;
         }&lt;br /&gt;
 }&lt;br /&gt;
La fonction gagner appelle des fonctions diagonal,ligne,colonne qui retourne 1 si il y'a 3 même symboles sur leur domaines.&lt;br /&gt;
Gagner teste donc si il y a une suite de 3 symboles sur la ligne, colonne et les diagonales passant par la case qui a été joué.&lt;br /&gt;
&lt;br /&gt;
 function egalite()&lt;br /&gt;
 {var cp=0;&lt;br /&gt;
 for (var i=0;i &amp;lt; 9;i++)&lt;br /&gt;
         {if (morpion[i]==0)&lt;br /&gt;
 		{cp++;}&lt;br /&gt;
         }&lt;br /&gt;
 return cp;&lt;br /&gt;
 }&lt;br /&gt;
La fonction egalité teste si toutes les cases ont été joué.&lt;br /&gt;
On aurait pu utiliser la variable coup, si coup était égal à 9 alors égalité, mais la fonction egalité permet de vérifier si il n'y a pas eu de problème lors de la modification de la matrice.&lt;br /&gt;
&lt;br /&gt;
Avec morpion.html nous avons pu apprendre le javascript, et poser les bases de notre fichier html final.&lt;br /&gt;
&lt;br /&gt;
===Complément à la séance 3===&lt;br /&gt;
&lt;br /&gt;
====HTML====&lt;br /&gt;
Pour le HTML/Javascript on garde les mêmes fonctions gagner et egalite.&lt;br /&gt;
On va ajouter lors de l'initialisation&lt;br /&gt;
 window.WebSocket=(window.WebSocket||window.MozWebSocket);&lt;br /&gt;
 &lt;br /&gt;
 var websocket=new WebSocket('ws://172.26.79.12:9000','myprotocol');&lt;br /&gt;
 &lt;br /&gt;
 websocket.onopen=function(){ $('h1').css('color','green'); };&lt;br /&gt;
 &lt;br /&gt;
 websocket.onerror=function(){ $('h1').css('color','red'); };&lt;br /&gt;
On modifie placerSigne:&lt;br /&gt;
*si ce n'est pas au tour du joueur 1 de jouer on lui envoie une alerte.&lt;br /&gt;
*si il y a une fin de partie on envoie 9 grâce a sendMessage.&lt;br /&gt;
*si il n'y a pas de fin de partie on envoie la case jouer toujours grâce à sendMessage:&lt;br /&gt;
 function sendMessage(data){&lt;br /&gt;
 websocket.send(data);&lt;br /&gt;
 }&lt;br /&gt;
Pour finpartie on rajoute juste &lt;br /&gt;
 joueur=1;&lt;br /&gt;
&lt;br /&gt;
Pour faire jouer le second joueur il faut recevoir un message du websocket ainsi :&lt;br /&gt;
 websocket.onmessage=function(message)&lt;br /&gt;
sera la fonction dans laquelle on fera jouer le joueur 2. &lt;br /&gt;
&lt;br /&gt;
Le websocket envoie simplement la case en char* ainsi:&lt;br /&gt;
 websocket.onmessage=function(message){&lt;br /&gt;
 idCase=parseInt((message.data)-30);&lt;br /&gt;
 console.log(idCase);&lt;br /&gt;
 &lt;br /&gt;
 if(morpion[idCase] == 0)&lt;br /&gt;
                 {coup++;&lt;br /&gt;
                  morpion[idCase]=2;&lt;br /&gt;
                  joueur=1;&lt;br /&gt;
  		document.getElementById(idCase).innerHTML = '&amp;lt;img src=&amp;quot;rond.gif&amp;quot; alt=&amp;quot;image !&amp;quot; /&amp;gt;';&lt;br /&gt;
  		 if (coup&amp;gt;4)&lt;br /&gt;
 			 {if (gagner(idCase))&lt;br /&gt;
                                {score2++; &lt;br /&gt;
                                         alert(&amp;quot;joueur 2 gagne &amp;quot;);&lt;br /&gt;
                                         finpartie();&lt;br /&gt;
 					sendMessage(9);&lt;br /&gt;
                                }&lt;br /&gt;
  &lt;br /&gt;
 &lt;br /&gt;
                           else {if (egalite()==0)&lt;br /&gt;
                                         {alert(&amp;quot;egalite&amp;quot;);&lt;br /&gt;
                                         finpartie();&lt;br /&gt;
 					sendMessage(9);&lt;br /&gt;
 &lt;br /&gt;
                                         }&lt;br /&gt;
 				}&lt;br /&gt;
 			&lt;br /&gt;
 			}&lt;br /&gt;
 		}&lt;br /&gt;
 &lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Console.log permet d'afficher dans le debug, la valeur traitée.&lt;br /&gt;
On envoie toujours 9 si la partie se termine, sinon on effectue la même chose que dans placerSigne de morpion.html&lt;br /&gt;
&lt;br /&gt;
====Fichier C====&lt;br /&gt;
Il faut maintenant créer la passerelle entre l'arduino et le fichier html.&lt;br /&gt;
Pour cela notre fichier doit utiliser des fonctions de websocket mais aussi de serial.c&lt;br /&gt;
Les fonctions de serial.c sont directement intégrées dans notre fichier, il n'y a donc pas besoin de lui faire appel pour compiler.&lt;br /&gt;
 &lt;br /&gt;
 #include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;stdlib.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;string.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;unistd.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;fcntl.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;termios.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;strings.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;sys/types.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;sys/ioctl.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;sys/file.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;linux/serial.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;libwebsockets.h&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 #define MAX_FRAME_SIZE  1024&lt;br /&gt;
 #define WAIT_DELAY      50&lt;br /&gt;
 #define MAX_MESSAGE     2 &lt;br /&gt;
 &lt;br /&gt;
 #define SERIAL_READ 0&lt;br /&gt;
 #define SERIAL_WRITE 1&lt;br /&gt;
 #define SERIAL_BOTH 2&lt;br /&gt;
 &lt;br /&gt;
 #define SERIAL_DEVICE &amp;quot;/dev/ttyUSB0&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 int sd;&lt;br /&gt;
  &lt;br /&gt;
 &lt;br /&gt;
 //&lt;br /&gt;
 // Open serial port device&lt;br /&gt;
 //&lt;br /&gt;
 int serialOpen(char *device,int mode){&lt;br /&gt;
 int flags=(mode==SERIAL_READ?O_RDONLY:(mode==SERIAL_WRITE?O_WRONLY:O_RDWR));&lt;br /&gt;
 int fd=open(device,flags|O_NOCTTY|O_NONBLOCK); &lt;br /&gt;
 if(fd&amp;lt;0){ perror(device); exit(-1); }&lt;br /&gt;
 return fd;&lt;br /&gt;
 }&lt;br /&gt;
  &lt;br /&gt;
 //&lt;br /&gt;
 // Serial port configuration&lt;br /&gt;
 //&lt;br /&gt;
 void serialConfig(int fd,int speed){&lt;br /&gt;
 struct termios new;&lt;br /&gt;
 bzero(&amp;amp;new,sizeof(new));&lt;br /&gt;
 new.c_cflag=CLOCAL|CREAD|speed|CS8;&lt;br /&gt;
 new.c_iflag=0;&lt;br /&gt;
 new.c_oflag=0;&lt;br /&gt;
 new.c_lflag=0;     /* set input mode (non-canonical, no echo,...) */&lt;br /&gt;
 new.c_cc[VTIME]=0; /* inter-character timer unused */&lt;br /&gt;
 new.c_cc[VMIN]=1;  /* blocking read until 1 char received */&lt;br /&gt;
 if(tcsetattr(fd,TCSANOW,&amp;amp;new)&amp;lt;0){ perror(&amp;quot;serialInit.tcsetattr&amp;quot;); exit(-1); }&lt;br /&gt;
 }&lt;br /&gt;
  &lt;br /&gt;
 //&lt;br /&gt;
 // Serial port termination&lt;br /&gt;
 //&lt;br /&gt;
 void serialClose(int fd){&lt;br /&gt;
 close(fd);&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 static int callback_http(&lt;br /&gt;
   struct libwebsocket_context *this,&lt;br /&gt;
   struct libwebsocket *wsi,enum libwebsocket_callback_reasons reason,&lt;br /&gt;
   void *user,void *in,size_t len)&lt;br /&gt;
 {&lt;br /&gt;
 return 0;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
  static struct libwebsocket_protocols protocols[] = {&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;http-only&amp;quot;,   // name&lt;br /&gt;
      callback_http, // callback&lt;br /&gt;
      0,             // data size&lt;br /&gt;
      0              // maximum frame size&lt;br /&gt;
    },&lt;br /&gt;
    {&amp;quot;myprotocol&amp;quot;,callback_my,0,MAX_FRAME_SIZE},&lt;br /&gt;
    {NULL,NULL,0,0}&lt;br /&gt;
    };&lt;br /&gt;
  &lt;br /&gt;
 &lt;br /&gt;
Ci-dessus se trouve le code se trouvant dans serial.c afin de créer serialOpen, serialClose et serialConfig, ainsi que l'initialisation de variables utilisées.&lt;br /&gt;
Mais aussi la fonction callback_http(),la structure libwebsocket_protocols, et l'initialisation de variables. &lt;br /&gt;
 &lt;br /&gt;
 int main(void) {&lt;br /&gt;
 int port=9000;&lt;br /&gt;
 struct lws_context_creation_info info;&lt;br /&gt;
 memset(&amp;amp;info,0,sizeof info);&lt;br /&gt;
 info.port=port;&lt;br /&gt;
 info.protocols=protocols;&lt;br /&gt;
 info.gid=-1;&lt;br /&gt;
 info.uid=-1;&lt;br /&gt;
 struct libwebsocket_context *context=libwebsocket_create_context(&amp;amp;info);&lt;br /&gt;
 if(context==NULL){&lt;br /&gt;
   fprintf(stderr, &amp;quot;libwebsocket init failed\n&amp;quot;);&lt;br /&gt;
   return -1;&lt;br /&gt;
   }&lt;br /&gt;
 printf(&amp;quot;starting server...\n&amp;quot;);&lt;br /&gt;
 &lt;br /&gt;
   &lt;br /&gt;
 sd=serialOpen(SERIAL_DEVICE,SERIAL_BOTH);&lt;br /&gt;
 serialConfig(sd,B9600);&lt;br /&gt;
 &lt;br /&gt;
  &lt;br /&gt;
 while(1){&lt;br /&gt;
   libwebsocket_service(context,WAIT_DELAY);&lt;br /&gt;
   }&lt;br /&gt;
     &lt;br /&gt;
 &lt;br /&gt;
 serialClose(sd); &lt;br /&gt;
 &lt;br /&gt;
  &lt;br /&gt;
 libwebsocket_context_destroy(context);&lt;br /&gt;
 return 0;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Le main permet d'initialiser une liaison série de 9600 Baud et de lancer une boucle infini dans laquelle la passerelle entre arduino et html va s'effectuer.&lt;br /&gt;
&lt;br /&gt;
 static int callback_my(&lt;br /&gt;
   struct libwebsocket_context * this,&lt;br /&gt;
   struct libwebsocket *wsi,enum libwebsocket_callback_reasons reason,&lt;br /&gt;
   void *user,void *in,size_t len)&lt;br /&gt;
 {&lt;br /&gt;
 static char message[2+LWS_SEND_BUFFER_PRE_PADDING+LWS_SEND_BUFFER_POST_PADDING];&lt;br /&gt;
 static char valeur;&lt;br /&gt;
 switch(reason){&lt;br /&gt;
   case LWS_CALLBACK_ESTABLISHED:&lt;br /&gt;
     printf(&amp;quot;connection established\n&amp;quot;);&lt;br /&gt;
                 // Declenchement d'un prochain envoi au navigateur&lt;br /&gt;
     break;&lt;br /&gt;
   case LWS_CALLBACK_RECEIVE:&lt;br /&gt;
                 // Ici sont traites les messages envoyes par le navigateur&lt;br /&gt;
 //printf(&amp;quot;received data: %s\n&amp;quot;,(char *)in);&lt;br /&gt;
     if(write(sd,in,sizeof(char))!=1){ perror(&amp;quot;main.write&amp;quot;); exit(-1); }&lt;br /&gt;
 printf(&amp;quot;writen data: %s\n&amp;quot;,(char *)in);&lt;br /&gt;
                 // Declenchement d'un prochain envoi au navigateur&lt;br /&gt;
     libwebsocket_callback_on_writable(this,wsi);&lt;br /&gt;
     break;&lt;br /&gt;
   case LWS_CALLBACK_SERVER_WRITEABLE:&lt;br /&gt;
                 // Ici sont envoyes les messages au navigateur&lt;br /&gt;
 &lt;br /&gt;
 if (read(sd,&amp;amp;valeur,sizeof(char))==1)&lt;br /&gt;
 { &lt;br /&gt;
 //printf(&amp;quot;write data: %c\n&amp;quot;,valeur);&lt;br /&gt;
       char *out=message+LWS_SEND_BUFFER_PRE_PADDING;&lt;br /&gt;
        sprintf(out,&amp;quot;%02x&amp;quot;,valeur);&lt;br /&gt;
 //printf(&amp;quot;write data: %s\n&amp;quot;,(char *)out);&lt;br /&gt;
 &lt;br /&gt;
     libwebsocket_write(wsi,(unsigned char *)out,MAX_MESSAGE,LWS_WRITE_TEXT);&lt;br /&gt;
 }&lt;br /&gt;
 else{libwebsocket_callback_on_writable(this,wsi);&lt;br /&gt;
 }&lt;br /&gt;
     break;&lt;br /&gt;
   default:&lt;br /&gt;
     break;&lt;br /&gt;
        	  }   &lt;br /&gt;
 return 0;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
La fonction ci-dessus est celle qui definie la passerelle.&lt;br /&gt;
Si elle établit une liaison, elle imprime &amp;quot;connection established&amp;quot;.&lt;br /&gt;
Une fois la connection établit on se retrouve dans le cas LWS_CALLBACK_RECEIVE si la page html envoie une valeur.&lt;br /&gt;
Dans ce cas la valeur pointée par in est écrite dans sd(liaison serie), puis on utilise :&lt;br /&gt;
 libwebsocket_callback_on_writable(this,wsi);&lt;br /&gt;
&lt;br /&gt;
Qui permet de passer en mode réception de message par la liaison série, qui est definit ici par le cas:&lt;br /&gt;
 case LWS_CALLBACK_SERVER_WRITEABLE:&lt;br /&gt;
Dans ce cas on lit la valeur dans la liaison serie et on la met dans la variable valeur. Si il n'y a rien à lire pour le moment on utilise a nouveau:4&lt;br /&gt;
 libwebsocket_callback_on_writable(this,wsi);&lt;br /&gt;
Afin de rester dans le même case.&lt;br /&gt;
Si la valeur a été lu on crée out:&lt;br /&gt;
  char *out=message+LWS_SEND_BUFFER_PRE_PADDING;&lt;br /&gt;
avec message :&lt;br /&gt;
 static char message[2+LWS_SEND_BUFFER_PRE_PADDING+LWS_SEND_BUFFER_POST_PADDING];&lt;br /&gt;
out va etre du bon type et de la bonne taille pour pouvoir être envoyer a l'html.&lt;br /&gt;
On modife donc la valeur de out grâce à la valeur lue:&lt;br /&gt;
 sprintf(out,&amp;quot;%02x&amp;quot;,valeur);&lt;br /&gt;
Puis on l'envoie:&lt;br /&gt;
 libwebsocket_write(wsi,(unsigned char *)out,MAX_MESSAGE,LWS_WRITE_TEXT);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Arduino====&lt;br /&gt;
Pour l'affichage de la matrice LED nous avons utilisé un exemple trouvé sur le site de SparkFun Electronics:&lt;br /&gt;
 //Example_RGBMatrix.ino&lt;br /&gt;
 //By: Ryan Owens @ SparkFun Electronics&lt;br /&gt;
 //&lt;br /&gt;
 //modified 27 Oct 2014&lt;br /&gt;
 //by Bobby Chan @ SparkFun Electronics&lt;br /&gt;
&lt;br /&gt;
Nous avons ensuite crée:&lt;br /&gt;
&lt;br /&gt;
 void affichage(int je[3][3])&lt;br /&gt;
 {&lt;br /&gt;
   for (int i = 0; i &amp;lt; 3; i++)&lt;br /&gt;
   {&lt;br /&gt;
     for (int j = 0; j &amp;lt; 3; j++)&lt;br /&gt;
     { if (je[i][j] == 1)&lt;br /&gt;
       {&lt;br /&gt;
         color_buffer[0 + i + j * 8] = BLUE;&lt;br /&gt;
       }&lt;br /&gt;
       else if (je[i][j] == 2)&lt;br /&gt;
       {&lt;br /&gt;
         color_buffer[0 + i + j * 8] = RED;&lt;br /&gt;
       }&lt;br /&gt;
       else if (je[i][j] == 5)&lt;br /&gt;
       {&lt;br /&gt;
         color_buffer[0 + i + j * 8] = TEAL;&lt;br /&gt;
       }&lt;br /&gt;
       else if (je[i][j] == 4)&lt;br /&gt;
       {&lt;br /&gt;
         color_buffer[0 + i + j * 8] = GREEN;&lt;br /&gt;
       }&lt;br /&gt;
       else if (je[i][j] == 3) {&lt;br /&gt;
         color_buffer[0 + i + j * 8] = MAGENTA;&lt;br /&gt;
       }&lt;br /&gt;
       else if (je[i][j] == 0) {&lt;br /&gt;
         color_buffer[0 + i + j * 8] = BLACK;&lt;br /&gt;
       }&lt;br /&gt;
     }&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
Qui change la valeur des buffers sur une matrice 3x3, en fonction d'une matrice donnée en paramètre de taille 3x3.&lt;br /&gt;
&lt;br /&gt;
Il faut ensuite matrix_write(); pour observer les resultats&lt;br /&gt;
 &lt;br /&gt;
 void go(int joueur)&lt;br /&gt;
 {if (joueur==2)&lt;br /&gt;
 {color_buffer[7]=GREEN;}&lt;br /&gt;
 else{color_buffer[7]=RED;}}&lt;br /&gt;
Cette fonction met un buffer vert si le joueur 2 peut jouer sinon rouge, le buffer se trouve en dehors de la zone de jeu et donc ne gène pas l'utilisateur.&lt;br /&gt;
&lt;br /&gt;
Il faut ensuite matrix_write(); pour observer les resultats&lt;br /&gt;
&lt;br /&gt;
 void reset(int jeu[3][3])&lt;br /&gt;
 { joueur = 0;&lt;br /&gt;
 color_buffer[7]=RED;&lt;br /&gt;
   for (int i = 0; i &amp;lt; 3; i++)&lt;br /&gt;
   {&lt;br /&gt;
     for (int j = 0; j &amp;lt; 3; j++)&lt;br /&gt;
     { jeu[i][j] = 0;&lt;br /&gt;
     }&lt;br /&gt;
   }&lt;br /&gt;
   jeu[0][0] = 1;&lt;br /&gt;
 }&lt;br /&gt;
Cette fonction remet dispose la matrice LED comme lors d'un début de partie.&lt;br /&gt;
On aurait pu remettre a zéro certaines variables dans cette fonction.&lt;br /&gt;
&lt;br /&gt;
Une fois ces fonctions crées, il faut crée la fonction loop:&lt;br /&gt;
 void loop() {&lt;br /&gt;
   go(joueur);&lt;br /&gt;
   if (Serial.available() &amp;gt; 0)&lt;br /&gt;
   { int a = (Serial.read() - 48);&lt;br /&gt;
     if (a == 9) {&lt;br /&gt;
       reset(jeu);&lt;br /&gt;
     }&lt;br /&gt;
     else {&lt;br /&gt;
       if (joueur == 0)&lt;br /&gt;
       { int b = (a) / 3;&lt;br /&gt;
         int c = a - (b) * 3;&lt;br /&gt;
         jeu[b][c] = 2;&lt;br /&gt;
         joueur = 2;&lt;br /&gt;
         if (jeu[0][0] == 2)&lt;br /&gt;
         {&lt;br /&gt;
           jeu[0][0] = 3;&lt;br /&gt;
         }&lt;br /&gt;
       }&lt;br /&gt;
     }&lt;br /&gt;
   }&lt;br /&gt;
   else {&lt;br /&gt;
     if (joueur == 2)&lt;br /&gt;
     { if (digitalRead(9) == 1)&lt;br /&gt;
       { jeu[l][h] = jeu[l][h] - 1;&lt;br /&gt;
         h = (h + 1) % 3;&lt;br /&gt;
         jeu[l][h]++;&lt;br /&gt;
         delay(50);&lt;br /&gt;
       }&lt;br /&gt;
       else if (digitalRead(8) == 1)&lt;br /&gt;
       {&lt;br /&gt;
         jeu[l][h] = jeu[l][h] - 1;&lt;br /&gt;
         l = (l + 1) % 3;&lt;br /&gt;
         jeu[l][h]++;&lt;br /&gt;
         delay(50);&lt;br /&gt;
       }&lt;br /&gt;
       else if (digitalRead(7) == 1)&lt;br /&gt;
       {&lt;br /&gt;
         if (jeu[l][h] == 1)&lt;br /&gt;
         { jeu[l][h] = 4;&lt;br /&gt;
           Serial.write((l * 3 + h) + 48);&lt;br /&gt;
 &lt;br /&gt;
           l = 0;&lt;br /&gt;
           h = 0;&lt;br /&gt;
           jeu[l][h] = jeu[l][h] + 1;&lt;br /&gt;
           joueur = 0;&lt;br /&gt;
         }&lt;br /&gt;
       }&lt;br /&gt;
     }&lt;br /&gt;
   }&lt;br /&gt;
 &lt;br /&gt;
   affichage(jeu);&lt;br /&gt;
   matrix_write();&lt;br /&gt;
   delay(100);&lt;br /&gt;
 }&lt;br /&gt;
Cette fonction utilise en premier lieu go() pour indiquer au joueur si il peut jouer.&lt;br /&gt;
Ensuite il vérifie la liaison série.&lt;br /&gt;
&lt;br /&gt;
On enlève 48 a ce que l'on a reçut, car on reçoit un char et on désire un int.&lt;br /&gt;
&lt;br /&gt;
Ainsi on ajoutera 48 a ce qu'on enverra dans le Serial.write.&lt;br /&gt;
&lt;br /&gt;
Si on reçoit 9, fin de partie.&lt;br /&gt;
Sinon on vérifie qui doit jouer et on le fais jouer si on peut ou on attend. &lt;br /&gt;
&lt;br /&gt;
Le Joueur 0 équivaut au joueur 1 pour l'html.&lt;br /&gt;
&lt;br /&gt;
Une fois les coups effectués, on affiche ce qui en résulte et ajoute un delay pour éviter d'appuyer deux fois d'affilée sans le vouloir.&lt;br /&gt;
&lt;br /&gt;
== Démonstration ==&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;/div&gt;</summary>
		<author><name>Tstieven</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Projet_IMA3_P1,_2015/2016,_TD2&amp;diff=32300</id>
		<title>Projet IMA3 P1, 2015/2016, TD2</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Projet_IMA3_P1,_2015/2016,_TD2&amp;diff=32300"/>
				<updated>2016-06-16T22:39:21Z</updated>
		
		<summary type="html">&lt;p&gt;Tstieven : /* Complément à la séance 3 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Projet IMA3-SC 2015/2016 : MORPION =&lt;br /&gt;
&lt;br /&gt;
== Cahier des charges ==&lt;br /&gt;
Notre projet &amp;quot;système communicant&amp;quot; aura pour but de créer une interface connectée du &amp;quot;morpion&amp;quot;. L'objectif est de permettre à un joueur interagissant sur un site internet de jouer contre une autre personne qui, elle, jouera à l'aide d'un affichage fait à partir de leds. &lt;br /&gt;
&lt;br /&gt;
Nous cherchons donc à exploiter la capacité asynchrone d'un websocket afin de permettre une partie en temps réel.&lt;br /&gt;
&lt;br /&gt;
=== Matériel ===&lt;br /&gt;
* Une nanoboard&lt;br /&gt;
* Une raspberry pi&lt;br /&gt;
* Une matrice de leds 9x9 ou plus&lt;br /&gt;
* Un clavier numérique ou 9 boutons-poussoirs&lt;br /&gt;
* Des ordinateurs avec les logiciels de développement nécessaires &lt;br /&gt;
&lt;br /&gt;
=== Optionnel ===&lt;br /&gt;
* Un buzzer afin d'avertir le joueur d'un choix incohérent&lt;br /&gt;
* Trois afficheurs sept segments afin d'ajouter un tableau des scores&lt;br /&gt;
&lt;br /&gt;
== Séance 1 ==&lt;br /&gt;
&lt;br /&gt;
=== Partie électronique ===&lt;br /&gt;
Le but de cette première séance était de se familiariser avec le logiciel de conception Altium Designer et de réfléchir à la façon d'aborder la conception électronique du morpion.&lt;br /&gt;
&lt;br /&gt;
Cette conception se fera en plusieurs étapes :&lt;br /&gt;
&lt;br /&gt;
* gérer le positionnement d'un curseur en fonction de l'état courant de la partie&lt;br /&gt;
* gérer l'affichage de la matrice en fonction des cases remplies / sélectionnées&lt;br /&gt;
* permettre la réception et l'envoie de données à l'aide de la liaison série&lt;br /&gt;
* traiter la remise à zéro du plateau en cas de fin de partie&lt;br /&gt;
&lt;br /&gt;
====Positionnement du curseur et état de la partie====&lt;br /&gt;
&lt;br /&gt;
Dans un premier lieu, il était nécessaire de traiter les actions entrantes. En effet, si ce n'est pas au tour du joueur &amp;quot;physique&amp;quot;, l'utilisation des boutons doit être bloquée.&amp;lt;br&amp;gt;&lt;br /&gt;
Ceci consiste simplement à effectuer un ET logique entre un bit symbolisant le joueur courant (si 1 alors joueur physique, si 0 alors joueur en ligne) et l'action demandée.&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fichier:Choisir.png||center|alt=Schema de choix|Circuit logique de la permission d'action]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Une fois les choix accessibles, il faut désormais les traiter. Le traitement s'effectuera à l'aide de bascules, chaque case comportera deux bascules : une bascule de sélection (la case est-elle sélectionnée ?) et une bascule permettant de savoir si la case a déjà été jouée.&amp;lt;br&amp;gt;&lt;br /&gt;
Si la case a déjà été jouée, il ne faut empêcher l'utilisateur de la jouer.&amp;lt;br&amp;gt;&lt;br /&gt;
Nous considérerons que le joueur en ligne n'effectuera pas de choix erroné et nous testerons seulement les choix du joueur &amp;quot;physique&amp;quot;.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Traitement.png||center|alt=Schema de traitement|Circuit logique du traitement d'une action]] &amp;lt;br&amp;gt;&lt;br /&gt;
Les ronds verts permettent la distinction des 9 cases. &amp;lt;br&amp;gt;&lt;br /&gt;
Le rond jaune correspond à la zone des sorties d'état. Plus précisément, il s'agit de deux bus regroupant les cases remplies et le lieu de la case sélectionnée.&amp;lt;br&amp;gt;&lt;br /&gt;
Le rond noir correspond au choix de l'adversaire.&amp;lt;br&amp;gt;&lt;br /&gt;
Le rond orange correspond à la sortie &amp;quot;selection_done&amp;quot; qui effectue un état haut lorsqu'un choix valide a été fait par l'utilisateur.&amp;lt;br&amp;gt;&lt;br /&gt;
Le rond rouge met en évidence la zone permettant de traiter les décalage du bit de sélection. Ce décalage consiste à garder seulement UNE bascule à l'état haut en effectuant le passage logique d'une bascule à une autre en fonction du choix tout en appliquant un reset sur l'ancienne sélection. Le schéma de ce déplacement se trouve ci-dessous et est appliqué aux 9 cases.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Andor.png||center|alt=Schema permettant le déplacement|Circuit logique utilisé afin de déplacer le curseur]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Complément à la séance 1===&lt;br /&gt;
====Affichage dynamique====&lt;br /&gt;
&lt;br /&gt;
L'un des grands problèmes à la réalisation du morpion sur nanoboard est l'affichage dynamique. En effet, il va falloir à la fois stocker les valeurs, et stocker quel joueur a joué telle ou telle case, afin de savoir quel case s'allumera de la couleur désirée. Ceci rajouté à l'affichage dynamique de la sélection, ceci s'avère compliqué.&amp;lt;br&amp;gt;&lt;br /&gt;
La tâche a alors été décomposée en deux étapes :&lt;br /&gt;
* Le traitement des couleurs (Quelle couleur affilier à quelle case ?)&lt;br /&gt;
* L'affichage de ces couleurs&lt;br /&gt;
=====Traitement des couleurs=====&lt;br /&gt;
&lt;br /&gt;
Le but était de se simplifier au maximum les choses. Le premier problème est de savoir quel joueur a joué une case, pour ceci, nous nous sommes servi de l'état du plateau fourni dans le bloc TRAITEMENT. Nous savons quelles cases sont à 1 et imposons donc une couleur rouge à toutes ces cases.&amp;lt;br&amp;gt;&lt;br /&gt;
De plus, nous savons qu'à chaque fois que le joueur &amp;quot;physique&amp;quot; effectue un choix valide, un front montant est appliqué sur la broche &amp;quot;selection_done&amp;quot; de TRAITEMENT. Nous avons alors re-créé 9 registres symbolisant les cases, mais cette fois ci, en fonction de l'endroit sélectionné par l'utilisateur, si ce dernier effectue un choix valide, le registre passera à 1. Le but de cette manipulation est de recenser tous les registres joués par le joueur physique. &amp;lt;br&amp;gt;&lt;br /&gt;
Maintenant, nous relions ces registres aux valeurs de couleur verte afin d'additionner le vert au rouge  des cases jouées et obtiendrons finalement des cases de couleur jaune pour symboliser les cases du joueur physique et des cases de couleur rouge pour le jouer en ligne. &amp;lt;br&amp;gt;&lt;br /&gt;
Il ne reste qu'à relier directement la case sélectionnée (recensée par le bus Etat_selection de TRAITEMENT) à la couleur bleue.&amp;lt;br&amp;gt;&lt;br /&gt;
Finalement nous avons : &lt;br /&gt;
* joueur en ligne : rouge&lt;br /&gt;
* joueur physique : jaune&lt;br /&gt;
* sélection : magenta, cyan ou bleu&lt;br /&gt;
&lt;br /&gt;
 [[Fichier:Traitement_affichage.png||center|Schéma du traitement pré affichage|Circuit logique du traitement pré-affichage]] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Affichage=====&lt;br /&gt;
&lt;br /&gt;
La matrice led employée est une matrice led à anode commune. Elle a pour avantage de permettre la sélection d'une ligne et de la couleur de chaque colonne.&amp;lt;br&amp;gt;&lt;br /&gt;
Cependant, nous ne pouvons donc choisir la couleur que d'une colonne. C'est pourquoi nous allons faire varier cet affichage ligne par ligne à une fréquence élevée afin que l’œil humain ne le remarque pas. Nous pourrons donc choisir quelle couleur sera affichée sur chaque ligne. &amp;lt;br&amp;gt;&lt;br /&gt;
Cet affichage ligne par ligne sera effectué via un multiplexeur donc le bus de sélection sera relié à un compteur 3bits cadencé sur une clock suffisamment rapide pour opérer une persistance rétinienne. &amp;lt;br&amp;gt;&lt;br /&gt;
Dans chaque bus nous avons imposé certains bits afin que la grille soit dessinée en bleu.&amp;lt;br&amp;gt;&lt;br /&gt;
Le bus multiplexé sera ensuite redirigé vers les pins de la matrice leds.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Affichage.png||center|Schéma d'affichage|Circuit logique de l'affichage]] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Tests====&lt;br /&gt;
&lt;br /&gt;
Le bloc d'affichage a été testé et deux problèmes ont été rencontrés : &lt;br /&gt;
* La sélection a été mal réfléchie&lt;br /&gt;
* Un phénomène de rebond a été remarqué sur l'oscilloscope numérique&lt;br /&gt;
&lt;br /&gt;
=====La sélection=====&lt;br /&gt;
&lt;br /&gt;
Dans la fonction d'affichage, on retourne la sélection de la ligne en logique inversée. Le problème est que dans la version 1.0 de l'affichage, un GND avait été placé en entrée du MUX de sélection. Nous n'avions pas pensé au fait que dans ce cas la, toutes les sorties seraient en permanence au GND... &amp;lt;br&amp;gt;La correction a donc été de placer un VCC en entrée et d'inverser les sorties, ainsi une seul anode de ligne sera placée sur le GND.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Selection.PNG||center|Schéma de selection|Correction de la sortie de selection]] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le schéma semble fonctionnel cependant d'autres tests restent à faire.&lt;br /&gt;
&lt;br /&gt;
=====Le rebond=====&lt;br /&gt;
&lt;br /&gt;
Lors du test de l'affichage, la clock d'affichage a été simulée par un bouton de la nanoboard et l'affichage a été relié sur une seule ligne.&amp;lt;br&amp;gt;&lt;br /&gt;
Nous étions sensé remarquer que lorsque la ligne s'allume, si on appuie sur le bouton, elle s’éteint et enfin si nous appuyons sept fois sur le bouton, la ligne se rallume. &amp;lt;br&amp;gt;&lt;br /&gt;
Rien ne se passait comme prévu, et plus précisément, il n'y avait même pas de logique dans la ré-apparition de la ligne.&amp;lt;br&amp;gt;&lt;br /&gt;
Ayant déjà été confronté à des problèmes de rebonds avec des boutons poussoir, ce phénomène a été testé sur l'oscilloscope numérique.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Rebond.png||center|Exemple de rebond|Exemple de rebond]] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous demanderons alors aux référents quelle stratégie adopter : filtrer le signal avec un condensateur en parallèle au bouton ou bien utiliser une comparaison avec registre à décalage pour vérifier la stabilité du signal avant d'envoie du front montant.&amp;lt;br&amp;gt;&lt;br /&gt;
Certes la correction du bouton n'était pas nécessaire aux tests entrepris pour l'affichage (nous aurions pu mettre une clock interne) mais ceci nous servira pour filtrer les choix effectués par l'utilisateur (haut, droite, select). &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Objectifs pour la séance prochaine====&lt;br /&gt;
&lt;br /&gt;
Les schémas effectués restent des ébauches, il y a forcément eu des oublis. Néanmoins, comme chaque schéma se compile, le passage à l'étape de mise en place de la liaison série durant la séance 2 est envisageable. Il faudra donc créer un protocole plus concret afin de savoir qui doit jouer, quand envoyer, quand recevoir des données. Si le temps le permet, quelques programmes simples seront testés sur la nanoboard afin de vérifier le fonctionnement de l'affichage de la matrice après discutions avec les enseignants au sujet du phénomène de rebond.&lt;br /&gt;
&lt;br /&gt;
=== Partie informatique ===&lt;br /&gt;
Dans cette première séance nous avons programmé l'arduino afin de créer le programme de morpion, pour pouvoir tester la partie informatique sans disposer de la partie électronique.&lt;br /&gt;
Pour cela nous avons due apprendre à utiliser une matrice de LED RGB à l'aide des codes fournit par SparkFun.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Puis nous avons pu commencer à programmer le morpion:&lt;br /&gt;
&lt;br /&gt;
*le jeu se déroule dans une matrice 3x3.&lt;br /&gt;
*le position du curseur est représentée par une lumière bleue, celle des pions du joueurs 1 par une lumière rouge et celle des pions du joueurs 2 par une lumière verte.&lt;br /&gt;
*si le curseur est sur un pions les deux couleurs s'additionnent pour donner du magenta où du cyan.&lt;br /&gt;
*le joueur se déplace à l'aide de 2 boutons poussoir,l'un permettant d'aller vers le haut, l'autre permettant d'aller à droite&lt;br /&gt;
**pour éviter plusieurs déplacements d'un coup, un délais a été mis entre deux actions&lt;br /&gt;
*une fois tout en haut, si le joueur presse le bouton pour aller vers le haut le joueur se retrouve en bas.&lt;br /&gt;
*une fois tout à droite, si le joueur presse le bouton pour aller vers la droite le joueur se retrouve à gauche. &lt;br /&gt;
*enfin un dernier bouton poussoir permet de placer un pion à l'endroit où se trouve le curseur.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Une fois les mouvements programmés il fallait régir les règles du jeu:&lt;br /&gt;
&lt;br /&gt;
*Ainsi le curseur commence toujours en haut à droite&lt;br /&gt;
*Si le un joueurs arrive a créer une ligne de 3, il gagne la partie&lt;br /&gt;
*Si aucun joueur n'arrive à gagner et que le terrain est remplit, la partie se termine sur un match nul&lt;br /&gt;
*Une fois la partie terminée, le terrain est remis à zéros&lt;br /&gt;
&lt;br /&gt;
== Séance 2 ==&lt;br /&gt;
&lt;br /&gt;
=== Partie électronique ===&lt;br /&gt;
&lt;br /&gt;
La matrice led ne pourra être alimentée par les différentes broches de la nanoboard sous peine de créer une chute de tension et risquer un reset du fpga.&amp;lt;br&amp;gt;&lt;br /&gt;
Ainsi, le but de cet séance est de réfléchir à la conception d'un prototype de carte permettant d'alimenter la matrice led de manière externe. &amp;lt;br&amp;gt;&lt;br /&gt;
====Utilisation de transistors====&lt;br /&gt;
L'utilisation de transistors en saturé paraît la meilleur chose à faire. En effet, ceci permettra de générer un gain en courant et de contrôler l'état des différentes couleurs ligne par ligne et colonne par colonne.&amp;lt;br&amp;gt;&lt;br /&gt;
Pour permettra la liaison de chaque led au VCC, on utilisera un transistor PNP. Pour permettre la liaison au GND, on utilisera un NPN.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Montage_roussel.PNG||center|upright = 0.5|Montage d'une branche|Montage d'une branche de led]] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Comme il s'agit de transistor à anodes communes, il suffira de 8 transistors NPN. Notre choix s'est donc porté vers le ULN2803A, qui est un ensemble de 8 paires Darlington.&amp;lt;br&amp;gt;&lt;br /&gt;
L'utilisation de paires Darlington a l'avantage de permettre une génération élevée de courant. (Fort gain en courant)&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour ce qui est des cathodes, un problème de taille se pose. Il faudrait 24 transistors PNP pour gérer les 8 colonnes * 3couleurs. Ainsi, notre choix s'est plutôt déporté vers le buffer de portes trois états 74AS240. Cette famille de buffer 3 états a la capacité de délivrer un courant du même ordre de grandeur que l'ULN2803A.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Maintenant il reste à dimensionner la résistance sur chaque branche. Après quelques tests à l'aide d'un multimètre et de la matrice, on remarque que chaque led a besoin de 2mA pour fonctionner. Donc le but est de générer un courant d'environ 2mA. Ainsi, si on impose une tension de 5.5V aux bornes du montage, R = 5.5 / 0.002 = 2700 Ohms.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous avons désormais toutes les informations nécessaires pour le montage d'un prototype.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Le montage====&lt;br /&gt;
Au cours d'une séance supplémentaire, un plan a été élaboré et le prototype brasé. Voici donc le prototype achevé :&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Driver.JPG||center|400px|Driver matrice|Driver de la matrice]] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sur chaque sortie se trouve une résistance de 2700ohms. Le mieux aurait été de réaliser ce montage avec un réseau résistif cependant, le temps nous faisant défaut, nous avons utilisé les résistances déjà présentes en magasin.&amp;lt;br&amp;gt;&lt;br /&gt;
Sur chaque entrée se trouver une broche qui sera reliée à la nanoboard. &amp;lt;br&amp;gt;&lt;br /&gt;
Tous les buffers ont leur GND et VCC reliés au générateur 5.5V. Les paires Darlington sont reliées à la même masse.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Il ne restait plus qu'à relier la matrice led. Cette liaison parallèle a été réalisée en recyclant un vieux BUS d'ordinateur fixe. Finalement, voilà le montage final :&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Matrice_roussel.JPG||center|400px|Montage final de la partie électronique|Montage final de la partie électronique]] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Partie informatique ===&lt;br /&gt;
=====Arduino=====&lt;br /&gt;
Lors de cette séance nous avons pu finir le programme arduino, pour pouvoir jouer à deux sur une la carte.&lt;br /&gt;
Cette partie a été crée pour pouvoir tester les différentes fonctions, et sera modifier lors de prochaines séances.&lt;br /&gt;
La matrice LED affiche des clignotement irrégulier de couleur rouge, mais cela ne gêne pas pour jouer.&lt;br /&gt;
&lt;br /&gt;
=====Raspberry=====&lt;br /&gt;
Nous avons pu enfin commencer notre travail sur la raspberry.&lt;br /&gt;
Apres avoir branché la raspberry en série à notre pc, nous avons pu la configurer afin qu'elle fonctionne avec le réseau de l'ecole.&lt;br /&gt;
Pour cela nous avons mis une adresse IP du réseau INSECURE de l'école sur la Raspberry, celle de notre raspberry est :172.26.79.12.&lt;br /&gt;
C'est à partir de cette adresse que nous allons acceder aux pages html du projet.&lt;br /&gt;
Pour effectuer cette configuration nous avons remplacé les lignes correspondant à la configuration de la carte Ethernet dans le fichier /etc/network/interfaces par les lignes&lt;br /&gt;
  auto eth0&lt;br /&gt;
  iface eth0 inet static&lt;br /&gt;
    address 172.26.79.12&lt;br /&gt;
    netmask 255.255.240.0&lt;br /&gt;
    gateway 172.26.79.254&lt;br /&gt;
&lt;br /&gt;
Et afin d'indiquer le serveur DNS dans /etc/resolv.conf nous avons rajouté:&lt;br /&gt;
&lt;br /&gt;
  nameserver 193.48.57.34 &lt;br /&gt;
&lt;br /&gt;
Une fois la raspberry configurée, nous pouvons accéder à notre raspberry sans liaisons série grâce à un ssh.&lt;br /&gt;
Afin d'effectuer notre projet nous avons besoin de deux bibliothèques:&lt;br /&gt;
*jquery.js que l'ont a telecharger sur http://jquery.com/ afin de faciliter la programmation en javascript&lt;br /&gt;
*une bibliothèque C de WebSocket trouvé sur http://libwebsockets.org afin de pouvoir effectuer notre programme en C utilisant le Websocket&lt;br /&gt;
&lt;br /&gt;
Notre raspberry est maintenant prête pour notre projet, nous avons pu commencer notre fichier morpion.html qui permet de joueur au morpion à deux sur le même ordinateur, ce qui permet de tester les differentes fonctions utilisés pour la suite du projet.&lt;br /&gt;
&lt;br /&gt;
== Séance 3 ==&lt;br /&gt;
&lt;br /&gt;
=== Partie électronique ===&lt;br /&gt;
&lt;br /&gt;
=== Partie informatique ===&lt;br /&gt;
Nous avons commencé cette séance en continuant le morpion.html&lt;br /&gt;
Dans un premier temps nous avons crée &amp;quot;l'espace de jeu&amp;quot; en utilisant du code trouvé sur internet :&lt;br /&gt;
 &amp;lt;!DOCTYPE html&amp;gt;&lt;br /&gt;
  &amp;lt;head&amp;gt;&lt;br /&gt;
   &amp;lt;meta charset=&amp;quot;utf-8&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;style type=&amp;quot;text/css&amp;quot;&amp;gt;&lt;br /&gt;
 .table{&lt;br /&gt;
 width : 330px;&lt;br /&gt;
 height : 330px;&lt;br /&gt;
 border : solid 3px black;&lt;br /&gt;
  border-collapse: collapse;&lt;br /&gt;
 }&lt;br /&gt;
 .td{&lt;br /&gt;
 border : solid 3px black;&lt;br /&gt;
 width : 33%;&lt;br /&gt;
 height : 33%;&lt;br /&gt;
 }&lt;br /&gt;
 &amp;lt;/style&amp;gt;&lt;br /&gt;
 &amp;lt;title&amp;gt; Jeu morpion&amp;lt;/title&amp;gt;&lt;br /&gt;
 &amp;lt;/head&amp;gt;&lt;br /&gt;
et&lt;br /&gt;
 &amp;lt;body&amp;gt;&lt;br /&gt;
   h1&amp;gt;Morpion&amp;lt;/h1&amp;gt;&lt;br /&gt;
 table class=&amp;quot;table&amp;quot; align=&amp;quot;center&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
       &amp;lt;td class=&amp;quot;td&amp;quot; onclick=&amp;quot;placerSigne(0)&amp;quot; id=&amp;quot;0&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
       &amp;lt;td class=&amp;quot;td&amp;quot; onclick=&amp;quot;placerSigne(1)&amp;quot; id=&amp;quot;1&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
       &amp;lt;td class=&amp;quot;td&amp;quot; onclick=&amp;quot;placerSigne(2)&amp;quot; id=&amp;quot;2&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
       &amp;lt;td class=&amp;quot;td&amp;quot; onclick=&amp;quot;placerSigne(3)&amp;quot; id=&amp;quot;3&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
       &amp;lt;td class=&amp;quot;td&amp;quot; onclick=&amp;quot;placerSigne(4)&amp;quot; id=&amp;quot;4&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
       &amp;lt;td class=&amp;quot;td&amp;quot; onclick=&amp;quot;placerSigne(5)&amp;quot; id=&amp;quot;5&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
       &amp;lt;td class=&amp;quot;td&amp;quot; onclick=&amp;quot;placerSigne(6)&amp;quot; id=&amp;quot;6&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
       &amp;lt;td class=&amp;quot;td&amp;quot; onclick=&amp;quot;placerSigne(7)&amp;quot; id=&amp;quot;7&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
       &amp;lt;td class=&amp;quot;td&amp;quot; onclick=&amp;quot;placerSigne(8)&amp;quot; id=&amp;quot;8&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
 &amp;lt;/table&amp;gt;&lt;br /&gt;
 table style=&amp;quot;border : solid 3px #3399FF;&amp;quot; align=&amp;quot;center&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;tr&amp;gt;&lt;br /&gt;
 &amp;lt;td style=&amp;quot;border : solid 1px #3399FF;&amp;quot;&amp;gt;Joueur 1&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;td style=&amp;quot;border : solid 1px #3399FF;&amp;quot;&amp;gt;Joueur 2&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
 &amp;lt;tr&amp;gt;&lt;br /&gt;
 &amp;lt;td style=&amp;quot;border : solid 1px #3399FF;&amp;quot; id=&amp;quot;scre1&amp;quot;&amp;gt;0&lt;br /&gt;
 &amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;td style=&amp;quot;border : solid 1px #3399FF;&amp;quot; id=&amp;quot;scre2&amp;quot;&amp;gt;0&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
 &amp;lt;/table&amp;gt;&lt;br /&gt;
  &amp;lt;/body&amp;gt;&lt;br /&gt;
 &amp;lt;/html&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le code ci dessus n'est pas totalement bon, puisque nous avons du enlever des &amp;quot;&amp;lt;&amp;quot; afin d'afficher le code et non ce qu'il en résulte.&lt;br /&gt;
&lt;br /&gt;
L'espacement entre deux lignes peut changer en fonction de la taille de ce qui est mis dedans.&lt;br /&gt;
Si on remplis de case blanche (&amp;quot;vide.png&amp;quot;) de taille 100*100 on obtient:&lt;br /&gt;
[[Fichier:morpion1.png]]&lt;br /&gt;
&lt;br /&gt;
A chaque clique sur une case la fonction placerSigne(n) va s'effectuer avec n le numéros de la case sélectionnée.&lt;br /&gt;
 function placerSigne(idCase)&lt;br /&gt;
 { &lt;br /&gt;
         if(morpion[idCase] == 0)&lt;br /&gt;
         {coup++;&lt;br /&gt;
         morpion[idCase]=joueur;&lt;br /&gt;
         if (joueur==1)&lt;br /&gt;
                 {&lt;br /&gt;
  	  	 joueur=2;&lt;br /&gt;
                 document.getElementById(idCase).innerHTML = '&amp;lt;img src=&amp;quot;croix.gif&amp;quot; alt=&amp;quot;image !&amp;quot; /&amp;gt;';&lt;br /&gt;
 &lt;br /&gt;
                 }&lt;br /&gt;
 	else    {&lt;br /&gt;
 	   	 joueur=1;&lt;br /&gt;
                 document.getElementById(idCase).innerHTML = '&amp;lt;img src=&amp;quot;rond.gif&amp;quot; alt=&amp;quot;image !&amp;quot; /&amp;gt;';&lt;br /&gt;
 &lt;br /&gt;
                 }&lt;br /&gt;
 	if (coup&amp;gt;4)&lt;br /&gt;
 		{if (gagner(idCase))&lt;br /&gt;
 			{if (joueur==1)&lt;br /&gt;
 				{score2++;&lt;br /&gt;
 				alert(&amp;quot;joueur 2 gagne &amp;quot;);&lt;br /&gt;
 				finpartie();&lt;br /&gt;
 				}&lt;br /&gt;
 			else{score1++;&lt;br /&gt;
 				alert(&amp;quot;joueur 1 gagne &amp;quot;);&lt;br /&gt;
 				finpartie();&lt;br /&gt;
 				}&lt;br /&gt;
 			&lt;br /&gt;
 			}&lt;br /&gt;
 		else {if (egalite()==0)&lt;br /&gt;
 			{alert(&amp;quot;egalite&amp;quot;);&lt;br /&gt;
 			finpartie();}&lt;br /&gt;
 		     }&lt;br /&gt;
 		}&lt;br /&gt;
         }&lt;br /&gt;
         else{alert(&amp;quot;pas le droit&amp;quot;);}&lt;br /&gt;
 }&lt;br /&gt;
Cette fonction place une image 100x100 de rond ou de croix dans la case sélectionnée en fonction du joueur qui doit jouer.&lt;br /&gt;
*Elle calcule les scores de chaque joueurs, et appelle gagner et egalite pour savoir si on est dans une fin de partie.&lt;br /&gt;
*Et elle alerte le joueur si la case sélectionnée ne peut pas être jouée.&lt;br /&gt;
&lt;br /&gt;
Pour cela elle utilise le tableau morpion de taille 9 remplit de 0 à l'origine, et modifie la case sélectionnée en y mettant 1 ou 2 en fonction du joueur qui a joué.&lt;br /&gt;
La variable coup permet de déterminer le nombre de coup jouer, ce qui permet de ne pas verifier si une partie une gagnée tant que coup n'est pas supérieur à 4, puisqu'il faut au minimum 5 coup pour gagner.&lt;br /&gt;
&lt;br /&gt;
 function finpartie()&lt;br /&gt;
 {for (var j=0;j&amp;lt;9;j++)&lt;br /&gt;
 	{ document.getElementById(j).innerHTML = '&amp;lt;img src=&amp;quot;vide.png&amp;quot; alt=&amp;quot;image !&amp;quot; /&amp;gt;';&lt;br /&gt;
 	morpion[j]=0;&lt;br /&gt;
 	}&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
La fonction finpartie() met les variables morpion et coup à zéro, et place des images blanches dans toutes les cases.&lt;br /&gt;
Elle est appelé que si il y une victoire ou une égalité.&lt;br /&gt;
Dans morpionsc.html qui est le fichier html final, joueur est remis à 1 dans cette fonction.&lt;br /&gt;
Dans le fichier morpion.html cela n'etais pas necessaire et permettait en plus au joueur perdant de commencer.&lt;br /&gt;
Mais pour simplifier la suite nous avons préféré définir que toujours le même joueur commencerais. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 function gagner(idCase)&lt;br /&gt;
 {switch(idCase)&lt;br /&gt;
         {&lt;br /&gt;
 case 0:&lt;br /&gt;
         return (diagonal1()||ligne1()||colonne1());&lt;br /&gt;
         break;&lt;br /&gt;
 case 1:&lt;br /&gt;
         return (ligne1()||colonne2());&lt;br /&gt;
         break;&lt;br /&gt;
 case 2:&lt;br /&gt;
         return (diagonal2()||ligne1()||colonne3());&lt;br /&gt;
         break;&lt;br /&gt;
 case 3:&lt;br /&gt;
         return (ligne2()||colonne1());&lt;br /&gt;
         break; &lt;br /&gt;
 &lt;br /&gt;
 case 4:&lt;br /&gt;
         return (diagonal1()||diagonal2()||ligne2()||colonne2());&lt;br /&gt;
         break;&lt;br /&gt;
 case 5:&lt;br /&gt;
         return (ligne2()||colonne3());&lt;br /&gt;
         break;&lt;br /&gt;
 case 6:&lt;br /&gt;
         return (diagonal2()||ligne3()||colonne1());&lt;br /&gt;
         break;&lt;br /&gt;
 case 7:&lt;br /&gt;
         return (ligne3()||colonne2());&lt;br /&gt;
         break;&lt;br /&gt;
 case 8:&lt;br /&gt;
         return (diagonal1()||ligne3()||colonne3());&lt;br /&gt;
         break;&lt;br /&gt;
         }&lt;br /&gt;
 }&lt;br /&gt;
La fonction gagner appelle des fonctions diagonal,ligne,colonne qui retourne 1 si il y'a 3 même symboles sur leur domaines.&lt;br /&gt;
Gagner teste donc si il y a une suite de 3 symboles sur la ligne, colonne et les diagonales passant par la case qui a été joué.&lt;br /&gt;
&lt;br /&gt;
 function egalite()&lt;br /&gt;
 {var cp=0;&lt;br /&gt;
 for (var i=0;i &amp;lt; 9;i++)&lt;br /&gt;
         {if (morpion[i]==0)&lt;br /&gt;
 		{cp++;}&lt;br /&gt;
         }&lt;br /&gt;
 return cp;&lt;br /&gt;
 }&lt;br /&gt;
La fonction egalité teste si toutes les cases ont été joué.&lt;br /&gt;
On aurait pu utiliser la variable coup, si coup était égal à 9 alors égalité, mais la fonction egalité permet de vérifier si il n'y a pas eu de problème lors de la modification de la matrice.&lt;br /&gt;
&lt;br /&gt;
Avec morpion.html nous avons pu apprendre le javascript, et poser les bases de notre fichier html final.&lt;br /&gt;
&lt;br /&gt;
===Complément à la séance 3===&lt;br /&gt;
&lt;br /&gt;
====HTML====&lt;br /&gt;
Pour le HTML/Javascript on garde les mêmes fonctions gagner et egalite.&lt;br /&gt;
On va ajouter lors de l'initialisation&lt;br /&gt;
 window.WebSocket=(window.WebSocket||window.MozWebSocket);&lt;br /&gt;
 &lt;br /&gt;
 var websocket=new WebSocket('ws://172.26.79.12:9000','myprotocol');&lt;br /&gt;
 &lt;br /&gt;
 websocket.onopen=function(){ $('h1').css('color','green'); };&lt;br /&gt;
 &lt;br /&gt;
 websocket.onerror=function(){ $('h1').css('color','red'); };&lt;br /&gt;
On modifie placerSigne:&lt;br /&gt;
*si ce n'est pas au tour du joueur 1 de jouer on lui envoie une alerte.&lt;br /&gt;
*si il y a une fin de partie on envoie 9 grâce a sendMessage.&lt;br /&gt;
*si il n'y a pas de fin de partie on envoie la case jouer toujours grâce à sendMessage:&lt;br /&gt;
 function sendMessage(data){&lt;br /&gt;
 websocket.send(data);&lt;br /&gt;
 }&lt;br /&gt;
Pour finpartie on rajoute juste &lt;br /&gt;
 joueur=1;&lt;br /&gt;
&lt;br /&gt;
Pour faire jouer le second joueur il faut recevoir un message du websocket ainsi :&lt;br /&gt;
 websocket.onmessage=function(message)&lt;br /&gt;
sera la fonction dans laquelle on fera jouer le joueur 2. &lt;br /&gt;
&lt;br /&gt;
Le websocket envoie simplement la case en char* ainsi:&lt;br /&gt;
 websocket.onmessage=function(message){&lt;br /&gt;
 idCase=parseInt((message.data)-30);&lt;br /&gt;
 console.log(idCase);&lt;br /&gt;
 &lt;br /&gt;
 if(morpion[idCase] == 0)&lt;br /&gt;
                 {coup++;&lt;br /&gt;
                  morpion[idCase]=2;&lt;br /&gt;
                  joueur=1;&lt;br /&gt;
  		document.getElementById(idCase).innerHTML = '&amp;lt;img src=&amp;quot;rond.gif&amp;quot; alt=&amp;quot;image !&amp;quot; /&amp;gt;';&lt;br /&gt;
  		 if (coup&amp;gt;4)&lt;br /&gt;
 			 {if (gagner(idCase))&lt;br /&gt;
                                {score2++; &lt;br /&gt;
                                         alert(&amp;quot;joueur 2 gagne &amp;quot;);&lt;br /&gt;
                                         finpartie();&lt;br /&gt;
 					sendMessage(9);&lt;br /&gt;
                                }&lt;br /&gt;
  &lt;br /&gt;
 &lt;br /&gt;
                           else {if (egalite()==0)&lt;br /&gt;
                                         {alert(&amp;quot;egalite&amp;quot;);&lt;br /&gt;
                                         finpartie();&lt;br /&gt;
 					sendMessage(9);&lt;br /&gt;
 &lt;br /&gt;
                                         }&lt;br /&gt;
 				}&lt;br /&gt;
 			&lt;br /&gt;
 			}&lt;br /&gt;
 		}&lt;br /&gt;
 &lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Console.log permet d'afficher dans le debug, la valeur traitée.&lt;br /&gt;
On envoie toujours 9 si la partie se termine, sinon on effectue la même chose que dans placerSigne de morpion.html&lt;br /&gt;
&lt;br /&gt;
====Fichier C====&lt;br /&gt;
Il faut maintenant créer la passerelle entre l'arduino et le fichier html.&lt;br /&gt;
Pour cela notre fichier doit utiliser des fonctions de websocket mais aussi de serial.c&lt;br /&gt;
Les fonctions de serial.c sont directement intégrées dans notre fichier, il n'y a donc pas besoin de lui faire appel pour compiler.&lt;br /&gt;
 &lt;br /&gt;
 #include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;stdlib.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;string.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;unistd.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;fcntl.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;termios.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;strings.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;sys/types.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;sys/ioctl.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;sys/file.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;linux/serial.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;libwebsockets.h&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 #define MAX_FRAME_SIZE  1024&lt;br /&gt;
 #define WAIT_DELAY      50&lt;br /&gt;
 #define MAX_MESSAGE     2 &lt;br /&gt;
 &lt;br /&gt;
 #define SERIAL_READ 0&lt;br /&gt;
 #define SERIAL_WRITE 1&lt;br /&gt;
 #define SERIAL_BOTH 2&lt;br /&gt;
 &lt;br /&gt;
 #define SERIAL_DEVICE &amp;quot;/dev/ttyUSB0&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 int sd;&lt;br /&gt;
  &lt;br /&gt;
 &lt;br /&gt;
 //&lt;br /&gt;
 // Open serial port device&lt;br /&gt;
 //&lt;br /&gt;
 int serialOpen(char *device,int mode){&lt;br /&gt;
 int flags=(mode==SERIAL_READ?O_RDONLY:(mode==SERIAL_WRITE?O_WRONLY:O_RDWR));&lt;br /&gt;
 int fd=open(device,flags|O_NOCTTY|O_NONBLOCK); &lt;br /&gt;
 if(fd&amp;lt;0){ perror(device); exit(-1); }&lt;br /&gt;
 return fd;&lt;br /&gt;
 }&lt;br /&gt;
  &lt;br /&gt;
 //&lt;br /&gt;
 // Serial port configuration&lt;br /&gt;
 //&lt;br /&gt;
 void serialConfig(int fd,int speed){&lt;br /&gt;
 struct termios new;&lt;br /&gt;
 bzero(&amp;amp;new,sizeof(new));&lt;br /&gt;
 new.c_cflag=CLOCAL|CREAD|speed|CS8;&lt;br /&gt;
 new.c_iflag=0;&lt;br /&gt;
 new.c_oflag=0;&lt;br /&gt;
 new.c_lflag=0;     /* set input mode (non-canonical, no echo,...) */&lt;br /&gt;
 new.c_cc[VTIME]=0; /* inter-character timer unused */&lt;br /&gt;
 new.c_cc[VMIN]=1;  /* blocking read until 1 char received */&lt;br /&gt;
 if(tcsetattr(fd,TCSANOW,&amp;amp;new)&amp;lt;0){ perror(&amp;quot;serialInit.tcsetattr&amp;quot;); exit(-1); }&lt;br /&gt;
 }&lt;br /&gt;
  &lt;br /&gt;
 //&lt;br /&gt;
 // Serial port termination&lt;br /&gt;
 //&lt;br /&gt;
 void serialClose(int fd){&lt;br /&gt;
 close(fd);&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 static int callback_http(&lt;br /&gt;
   struct libwebsocket_context *this,&lt;br /&gt;
   struct libwebsocket *wsi,enum libwebsocket_callback_reasons reason,&lt;br /&gt;
   void *user,void *in,size_t len)&lt;br /&gt;
 {&lt;br /&gt;
 return 0;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
  static struct libwebsocket_protocols protocols[] = {&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;http-only&amp;quot;,   // name&lt;br /&gt;
      callback_http, // callback&lt;br /&gt;
      0,             // data size&lt;br /&gt;
      0              // maximum frame size&lt;br /&gt;
    },&lt;br /&gt;
    {&amp;quot;myprotocol&amp;quot;,callback_my,0,MAX_FRAME_SIZE},&lt;br /&gt;
    {NULL,NULL,0,0}&lt;br /&gt;
    };&lt;br /&gt;
  &lt;br /&gt;
 &lt;br /&gt;
Ci-dessus se trouve le code se trouvant dans serial.c afin de créer serialOpen, serialClose et serialConfig, ainsi que l'initialisation de variables utilisées.&lt;br /&gt;
Mais aussi la fonction callback_http(),la structure libwebsocket_protocols, et l'initialisation de variables. &lt;br /&gt;
 &lt;br /&gt;
 int main(void) {&lt;br /&gt;
 int port=9000;&lt;br /&gt;
 struct lws_context_creation_info info;&lt;br /&gt;
 memset(&amp;amp;info,0,sizeof info);&lt;br /&gt;
 info.port=port;&lt;br /&gt;
 info.protocols=protocols;&lt;br /&gt;
 info.gid=-1;&lt;br /&gt;
 info.uid=-1;&lt;br /&gt;
 struct libwebsocket_context *context=libwebsocket_create_context(&amp;amp;info);&lt;br /&gt;
 if(context==NULL){&lt;br /&gt;
   fprintf(stderr, &amp;quot;libwebsocket init failed\n&amp;quot;);&lt;br /&gt;
   return -1;&lt;br /&gt;
   }&lt;br /&gt;
 printf(&amp;quot;starting server...\n&amp;quot;);&lt;br /&gt;
 &lt;br /&gt;
   &lt;br /&gt;
 sd=serialOpen(SERIAL_DEVICE,SERIAL_BOTH);&lt;br /&gt;
 serialConfig(sd,B9600);&lt;br /&gt;
 &lt;br /&gt;
  &lt;br /&gt;
 while(1){&lt;br /&gt;
   libwebsocket_service(context,WAIT_DELAY);&lt;br /&gt;
   }&lt;br /&gt;
     &lt;br /&gt;
 &lt;br /&gt;
 serialClose(sd); &lt;br /&gt;
 &lt;br /&gt;
  &lt;br /&gt;
 libwebsocket_context_destroy(context);&lt;br /&gt;
 return 0;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Le main permet d'initialiser une liaison série de 9600 Baud et de lancer une boucle infini dans laquelle la passerelle entre arduino et html va s'effectuer.&lt;br /&gt;
&lt;br /&gt;
 static int callback_my(&lt;br /&gt;
   struct libwebsocket_context * this,&lt;br /&gt;
   struct libwebsocket *wsi,enum libwebsocket_callback_reasons reason,&lt;br /&gt;
   void *user,void *in,size_t len)&lt;br /&gt;
 {&lt;br /&gt;
 static char message[2+LWS_SEND_BUFFER_PRE_PADDING+LWS_SEND_BUFFER_POST_PADDING];&lt;br /&gt;
 static char valeur;&lt;br /&gt;
 switch(reason){&lt;br /&gt;
   case LWS_CALLBACK_ESTABLISHED:&lt;br /&gt;
     printf(&amp;quot;connection established\n&amp;quot;);&lt;br /&gt;
                 // Declenchement d'un prochain envoi au navigateur&lt;br /&gt;
     break;&lt;br /&gt;
   case LWS_CALLBACK_RECEIVE:&lt;br /&gt;
                 // Ici sont traites les messages envoyes par le navigateur&lt;br /&gt;
 //printf(&amp;quot;received data: %s\n&amp;quot;,(char *)in);&lt;br /&gt;
     if(write(sd,in,sizeof(char))!=1){ perror(&amp;quot;main.write&amp;quot;); exit(-1); }&lt;br /&gt;
 printf(&amp;quot;writen data: %s\n&amp;quot;,(char *)in);&lt;br /&gt;
                 // Declenchement d'un prochain envoi au navigateur&lt;br /&gt;
     libwebsocket_callback_on_writable(this,wsi);&lt;br /&gt;
     break;&lt;br /&gt;
   case LWS_CALLBACK_SERVER_WRITEABLE:&lt;br /&gt;
                 // Ici sont envoyes les messages au navigateur&lt;br /&gt;
 &lt;br /&gt;
 if (read(sd,&amp;amp;valeur,sizeof(char))==1)&lt;br /&gt;
 { &lt;br /&gt;
 //printf(&amp;quot;write data: %c\n&amp;quot;,valeur);&lt;br /&gt;
       char *out=message+LWS_SEND_BUFFER_PRE_PADDING;&lt;br /&gt;
        sprintf(out,&amp;quot;%02x&amp;quot;,valeur);&lt;br /&gt;
 //printf(&amp;quot;write data: %s\n&amp;quot;,(char *)out);&lt;br /&gt;
 &lt;br /&gt;
     libwebsocket_write(wsi,(unsigned char *)out,MAX_MESSAGE,LWS_WRITE_TEXT);&lt;br /&gt;
 }&lt;br /&gt;
 else{libwebsocket_callback_on_writable(this,wsi);&lt;br /&gt;
 }&lt;br /&gt;
     break;&lt;br /&gt;
   default:&lt;br /&gt;
     break;&lt;br /&gt;
        	  }   &lt;br /&gt;
 return 0;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
La fonction ci-dessus est celle qui definie la passerelle.&lt;br /&gt;
Si elle établit une liaison, elle imprime &amp;quot;connection established&amp;quot;.&lt;br /&gt;
Une fois la connection établit on se retrouve dans le cas LWS_CALLBACK_RECEIVE si la page html envoie une valeur.&lt;br /&gt;
Dans ce cas la valeur pointée par in est écrite dans sd(liaison serie), puis on utilise :&lt;br /&gt;
 libwebsocket_callback_on_writable(this,wsi);&lt;br /&gt;
&lt;br /&gt;
Qui permet de passer en mode réception de message par la liaison série, qui est definit ici par le cas:&lt;br /&gt;
 case LWS_CALLBACK_SERVER_WRITEABLE:&lt;br /&gt;
Dans ce cas on lit la valeur dans la liaison serie et on la met dans la variable valeur. Si il n'y a rien à lire pour le moment on utilise a nouveau:4&lt;br /&gt;
 libwebsocket_callback_on_writable(this,wsi);&lt;br /&gt;
Afin de rester dans le même case.&lt;br /&gt;
Si la valeur a été lu on crée out:&lt;br /&gt;
  char *out=message+LWS_SEND_BUFFER_PRE_PADDING;&lt;br /&gt;
avec message :&lt;br /&gt;
 static char message[2+LWS_SEND_BUFFER_PRE_PADDING+LWS_SEND_BUFFER_POST_PADDING];&lt;br /&gt;
out va etre du bon type et de la bonne taille pour pouvoir être envoyer a l'html.&lt;br /&gt;
On modife donc la valeur de out grâce à la valeur lue:&lt;br /&gt;
 sprintf(out,&amp;quot;%02x&amp;quot;,valeur);&lt;br /&gt;
Puis on l'envoie:&lt;br /&gt;
 libwebsocket_write(wsi,(unsigned char *)out,MAX_MESSAGE,LWS_WRITE_TEXT);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Arduino====&lt;br /&gt;
&lt;br /&gt;
== Démonstration ==&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;/div&gt;</summary>
		<author><name>Tstieven</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Projet_IMA3_P1,_2015/2016,_TD2&amp;diff=32279</id>
		<title>Projet IMA3 P1, 2015/2016, TD2</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Projet_IMA3_P1,_2015/2016,_TD2&amp;diff=32279"/>
				<updated>2016-06-16T22:11:15Z</updated>
		
		<summary type="html">&lt;p&gt;Tstieven : /* Partie informatique */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Projet IMA3-SC 2015/2016 : MORPION =&lt;br /&gt;
&lt;br /&gt;
== Cahier des charges ==&lt;br /&gt;
Notre projet &amp;quot;système communicant&amp;quot; aura pour but de créer une interface connectée du &amp;quot;morpion&amp;quot;. L'objectif est de permettre à un joueur interagissant sur un site internet de jouer contre une autre personne qui, elle, jouera à l'aide d'un affichage fait à partir de leds. &lt;br /&gt;
&lt;br /&gt;
Nous cherchons donc à exploiter la capacité asynchrone d'un websocket afin de permettre une partie en temps réel.&lt;br /&gt;
&lt;br /&gt;
=== Matériel ===&lt;br /&gt;
* Une nanoboard&lt;br /&gt;
* Une raspberry pi&lt;br /&gt;
* Une matrice de leds 9x9 ou plus&lt;br /&gt;
* Un clavier numérique ou 9 boutons-poussoirs&lt;br /&gt;
* Des ordinateurs avec les logiciels de développement nécessaires &lt;br /&gt;
&lt;br /&gt;
=== Optionnel ===&lt;br /&gt;
* Un buzzer afin d'avertir le joueur d'un choix incohérent&lt;br /&gt;
* Trois afficheurs sept segments afin d'ajouter un tableau des scores&lt;br /&gt;
&lt;br /&gt;
== Séance 1 ==&lt;br /&gt;
&lt;br /&gt;
=== Partie électronique ===&lt;br /&gt;
Le but de cette première séance était de se familiariser avec le logiciel de conception Altium Designer et de réfléchir à la façon d'aborder la conception électronique du morpion.&lt;br /&gt;
&lt;br /&gt;
Cette conception se fera en plusieurs étapes :&lt;br /&gt;
&lt;br /&gt;
* gérer le positionnement d'un curseur en fonction de l'état courant de la partie&lt;br /&gt;
* gérer l'affichage de la matrice en fonction des cases remplies / sélectionnées&lt;br /&gt;
* permettre la réception et l'envoie de données à l'aide de la liaison série&lt;br /&gt;
* traiter la remise à zéro du plateau en cas de fin de partie&lt;br /&gt;
&lt;br /&gt;
====Positionnement du curseur et état de la partie====&lt;br /&gt;
&lt;br /&gt;
Dans un premier lieu, il était nécessaire de traiter les actions entrantes. En effet, si ce n'est pas au tour du joueur &amp;quot;physique&amp;quot;, l'utilisation des boutons doit être bloquée.&amp;lt;br&amp;gt;&lt;br /&gt;
Ceci consiste simplement à effectuer un ET logique entre un bit symbolisant le joueur courant (si 1 alors joueur physique, si 0 alors joueur en ligne) et l'action demandée.&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fichier:Choisir.png||center|alt=Schema de choix|Circuit logique de la permission d'action]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Une fois les choix accessibles, il faut désormais les traiter. Le traitement s'effectuera à l'aide de bascules, chaque case comportera deux bascules : une bascule de sélection (la case est-elle sélectionnée ?) et une bascule permettant de savoir si la case a déjà été jouée.&amp;lt;br&amp;gt;&lt;br /&gt;
Si la case a déjà été jouée, il ne faut empêcher l'utilisateur de la jouer.&amp;lt;br&amp;gt;&lt;br /&gt;
Nous considérerons que le joueur en ligne n'effectuera pas de choix erroné et nous testerons seulement les choix du joueur &amp;quot;physique&amp;quot;.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Traitement.png||center|alt=Schema de traitement|Circuit logique du traitement d'une action]] &amp;lt;br&amp;gt;&lt;br /&gt;
Les ronds verts permettent la distinction des 9 cases. &amp;lt;br&amp;gt;&lt;br /&gt;
Le rond jaune correspond à la zone des sorties d'état. Plus précisément, il s'agit de deux bus regroupant les cases remplies et le lieu de la case sélectionnée.&amp;lt;br&amp;gt;&lt;br /&gt;
Le rond noir correspond au choix de l'adversaire.&amp;lt;br&amp;gt;&lt;br /&gt;
Le rond orange correspond à la sortie &amp;quot;selection_done&amp;quot; qui effectue un état haut lorsqu'un choix valide a été fait par l'utilisateur.&amp;lt;br&amp;gt;&lt;br /&gt;
Le rond rouge met en évidence la zone permettant de traiter les décalage du bit de sélection. Ce décalage consiste à garder seulement UNE bascule à l'état haut en effectuant le passage logique d'une bascule à une autre en fonction du choix tout en appliquant un reset sur l'ancienne sélection. Le schéma de ce déplacement se trouve ci-dessous et est appliqué aux 9 cases.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Andor.png||center|alt=Schema permettant le déplacement|Circuit logique utilisé afin de déplacer le curseur]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Complément à la séance 1===&lt;br /&gt;
====Affichage dynamique====&lt;br /&gt;
&lt;br /&gt;
L'un des grands problèmes à la réalisation du morpion sur nanoboard est l'affichage dynamique. En effet, il va falloir à la fois stocker les valeurs, et stocker quel joueur a joué telle ou telle case, afin de savoir quel case s'allumera de la couleur désirée. Ceci rajouté à l'affichage dynamique de la sélection, ceci s'avère compliqué.&amp;lt;br&amp;gt;&lt;br /&gt;
La tâche a alors été décomposée en deux étapes :&lt;br /&gt;
* Le traitement des couleurs (Quelle couleur affilier à quelle case ?)&lt;br /&gt;
* L'affichage de ces couleurs&lt;br /&gt;
=====Traitement des couleurs=====&lt;br /&gt;
&lt;br /&gt;
Le but était de se simplifier au maximum les choses. Le premier problème est de savoir quel joueur a joué une case, pour ceci, nous nous sommes servi de l'état du plateau fourni dans le bloc TRAITEMENT. Nous savons quelles cases sont à 1 et imposons donc une couleur rouge à toutes ces cases.&amp;lt;br&amp;gt;&lt;br /&gt;
De plus, nous savons qu'à chaque fois que le joueur &amp;quot;physique&amp;quot; effectue un choix valide, un front montant est appliqué sur la broche &amp;quot;selection_done&amp;quot; de TRAITEMENT. Nous avons alors re-créé 9 registres symbolisant les cases, mais cette fois ci, en fonction de l'endroit sélectionné par l'utilisateur, si ce dernier effectue un choix valide, le registre passera à 1. Le but de cette manipulation est de recenser tous les registres joués par le joueur physique. &amp;lt;br&amp;gt;&lt;br /&gt;
Maintenant, nous relions ces registres aux valeurs de couleur verte afin d'additionner le vert au rouge  des cases jouées et obtiendrons finalement des cases de couleur jaune pour symboliser les cases du joueur physique et des cases de couleur rouge pour le jouer en ligne. &amp;lt;br&amp;gt;&lt;br /&gt;
Il ne reste qu'à relier directement la case sélectionnée (recensée par le bus Etat_selection de TRAITEMENT) à la couleur bleue.&amp;lt;br&amp;gt;&lt;br /&gt;
Finalement nous avons : &lt;br /&gt;
* joueur en ligne : rouge&lt;br /&gt;
* joueur physique : jaune&lt;br /&gt;
* sélection : magenta, cyan ou bleu&lt;br /&gt;
&lt;br /&gt;
 [[Fichier:Traitement_affichage.png||center|Schéma du traitement pré affichage|Circuit logique du traitement pré-affichage]] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Affichage=====&lt;br /&gt;
&lt;br /&gt;
La matrice led employée est une matrice led à anode commune. Elle a pour avantage de permettre la sélection d'une ligne et de la couleur de chaque colonne.&amp;lt;br&amp;gt;&lt;br /&gt;
Cependant, nous ne pouvons donc choisir la couleur que d'une colonne. C'est pourquoi nous allons faire varier cet affichage ligne par ligne à une fréquence élevée afin que l’œil humain ne le remarque pas. Nous pourrons donc choisir quelle couleur sera affichée sur chaque ligne. &amp;lt;br&amp;gt;&lt;br /&gt;
Cet affichage ligne par ligne sera effectué via un multiplexeur donc le bus de sélection sera relié à un compteur 3bits cadencé sur une clock suffisamment rapide pour opérer une persistance rétinienne. &amp;lt;br&amp;gt;&lt;br /&gt;
Dans chaque bus nous avons imposé certains bits afin que la grille soit dessinée en bleu.&amp;lt;br&amp;gt;&lt;br /&gt;
Le bus multiplexé sera ensuite redirigé vers les pins de la matrice leds.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Affichage.png||center|Schéma d'affichage|Circuit logique de l'affichage]] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Tests====&lt;br /&gt;
&lt;br /&gt;
Le bloc d'affichage a été testé et deux problèmes ont été rencontrés : &lt;br /&gt;
* La sélection a été mal réfléchie&lt;br /&gt;
* Un phénomène de rebond a été remarqué sur l'oscilloscope numérique&lt;br /&gt;
&lt;br /&gt;
=====La sélection=====&lt;br /&gt;
&lt;br /&gt;
Dans la fonction d'affichage, on retourne la sélection de la ligne en logique inversée. Le problème est que dans la version 1.0 de l'affichage, un GND avait été placé en entrée du MUX de sélection. Nous n'avions pas pensé au fait que dans ce cas la, toutes les sorties seraient en permanence au GND... &amp;lt;br&amp;gt;La correction a donc été de placer un VCC en entrée et d'inverser les sorties, ainsi une seul anode de ligne sera placée sur le GND.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Selection.PNG||center|Schéma de selection|Correction de la sortie de selection]] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le schéma semble fonctionnel cependant d'autres tests restent à faire.&lt;br /&gt;
&lt;br /&gt;
=====Le rebond=====&lt;br /&gt;
&lt;br /&gt;
Lors du test de l'affichage, la clock d'affichage a été simulée par un bouton de la nanoboard et l'affichage a été relié sur une seule ligne.&amp;lt;br&amp;gt;&lt;br /&gt;
Nous étions sensé remarquer que lorsque la ligne s'allume, si on appuie sur le bouton, elle s’éteint et enfin si nous appuyons sept fois sur le bouton, la ligne se rallume. &amp;lt;br&amp;gt;&lt;br /&gt;
Rien ne se passait comme prévu, et plus précisément, il n'y avait même pas de logique dans la ré-apparition de la ligne.&amp;lt;br&amp;gt;&lt;br /&gt;
Ayant déjà été confronté à des problèmes de rebonds avec des boutons poussoir, ce phénomène a été testé sur l'oscilloscope numérique.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Rebond.png||center|Exemple de rebond|Exemple de rebond]] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous demanderons alors aux référents quelle stratégie adopter : filtrer le signal avec un condensateur en parallèle au bouton ou bien utiliser une comparaison avec registre à décalage pour vérifier la stabilité du signal avant d'envoie du front montant.&amp;lt;br&amp;gt;&lt;br /&gt;
Certes la correction du bouton n'était pas nécessaire aux tests entrepris pour l'affichage (nous aurions pu mettre une clock interne) mais ceci nous servira pour filtrer les choix effectués par l'utilisateur (haut, droite, select). &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Objectifs pour la séance prochaine====&lt;br /&gt;
&lt;br /&gt;
Les schémas effectués restent des ébauches, il y a forcément eu des oublis. Néanmoins, comme chaque schéma se compile, le passage à l'étape de mise en place de la liaison série durant la séance 2 est envisageable. Il faudra donc créer un protocole plus concret afin de savoir qui doit jouer, quand envoyer, quand recevoir des données. Si le temps le permet, quelques programmes simples seront testés sur la nanoboard afin de vérifier le fonctionnement de l'affichage de la matrice après discutions avec les enseignants au sujet du phénomène de rebond.&lt;br /&gt;
&lt;br /&gt;
=== Partie informatique ===&lt;br /&gt;
Dans cette première séance nous avons programmé l'arduino afin de créer le programme de morpion, pour pouvoir tester la partie informatique sans disposer de la partie électronique.&lt;br /&gt;
Pour cela nous avons due apprendre à utiliser une matrice de LED RGB à l'aide des codes fournit par SparkFun.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Puis nous avons pu commencer à programmer le morpion:&lt;br /&gt;
&lt;br /&gt;
*le jeu se déroule dans une matrice 3x3.&lt;br /&gt;
*le position du curseur est représentée par une lumière bleue, celle des pions du joueurs 1 par une lumière rouge et celle des pions du joueurs 2 par une lumière verte.&lt;br /&gt;
*si le curseur est sur un pions les deux couleurs s'additionnent pour donner du magenta où du cyan.&lt;br /&gt;
*le joueur se déplace à l'aide de 2 boutons poussoir,l'un permettant d'aller vers le haut, l'autre permettant d'aller à droite&lt;br /&gt;
**pour éviter plusieurs déplacements d'un coup, un délais a été mis entre deux actions&lt;br /&gt;
*une fois tout en haut, si le joueur presse le bouton pour aller vers le haut le joueur se retrouve en bas.&lt;br /&gt;
*une fois tout à droite, si le joueur presse le bouton pour aller vers la droite le joueur se retrouve à gauche. &lt;br /&gt;
*enfin un dernier bouton poussoir permet de placer un pion à l'endroit où se trouve le curseur.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Une fois les mouvements programmés il fallait régir les règles du jeu:&lt;br /&gt;
&lt;br /&gt;
*Ainsi le curseur commence toujours en haut à droite&lt;br /&gt;
*Si le un joueurs arrive a créer une ligne de 3, il gagne la partie&lt;br /&gt;
*Si aucun joueur n'arrive à gagner et que le terrain est remplit, la partie se termine sur un match nul&lt;br /&gt;
*Une fois la partie terminée, le terrain est remis à zéros&lt;br /&gt;
&lt;br /&gt;
== Séance 2 ==&lt;br /&gt;
&lt;br /&gt;
=== Partie électronique ===&lt;br /&gt;
&lt;br /&gt;
La matrice led ne pourra être alimentée par les différentes broches de la nanoboard sous peine de créer une chute de tension et risquer un reset du fpga.&amp;lt;br&amp;gt;&lt;br /&gt;
Ainsi, le but de cet séance est de réfléchir à la conception d'un prototype de carte permettant d'alimenter la matrice led de manière externe. &amp;lt;br&amp;gt;&lt;br /&gt;
====Utilisation de transistors====&lt;br /&gt;
L'utilisation de transistors en saturé paraît la meilleur chose à faire. En effet, ceci permettra de générer un gain en courant et de contrôler l'état des différentes couleurs ligne par ligne et colonne par colonne.&amp;lt;br&amp;gt;&lt;br /&gt;
Pour permettra la liaison de chaque led au VCC, on utilisera un transistor PNP. Pour permettre la liaison au GND, on utilisera un NPN.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Montage_roussel.PNG||center|upright = 0.5|Montage d'une branche|Montage d'une branche de led]] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Comme il s'agit de transistor à anodes communes, il suffira de 8 transistors NPN. Notre choix s'est donc porté vers le ULN2803A, qui est un ensemble de 8 paires Darlington.&amp;lt;br&amp;gt;&lt;br /&gt;
L'utilisation de paires Darlington a l'avantage de permettre une génération élevée de courant. (Fort gain en courant)&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour ce qui est des cathodes, un problème de taille se pose. Il faudrait 24 transistors PNP pour gérer les 8 colonnes * 3couleurs. Ainsi, notre choix s'est plutôt déporté vers le buffer de portes trois états 74AS240. Cette famille de buffer 3 états a la capacité de délivrer un courant du même ordre de grandeur que l'ULN2803A.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Maintenant il reste à dimensionner la résistance sur chaque branche. Après quelques tests à l'aide d'un multimètre et de la matrice, on remarque que chaque led a besoin de 2mA pour fonctionner. Donc le but est de générer un courant d'environ 2mA. Ainsi, si on impose une tension de 5.5V aux bornes du montage, R = 5.5 / 0.002 = 2700 Ohms.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous avons désormais toutes les informations nécessaires pour le montage d'un prototype.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Le montage====&lt;br /&gt;
Au cours d'une séance supplémentaire, un plan a été élaboré et le prototype brasé. Voici donc le prototype achevé :&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Driver.JPG||center|400px|Driver matrice|Driver de la matrice]] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sur chaque sortie se trouve une résistance de 2700ohms. Le mieux aurait été de réaliser ce montage avec un réseau résistif cependant, le temps nous faisant défaut, nous avons utilisé les résistances déjà présentes en magasin.&amp;lt;br&amp;gt;&lt;br /&gt;
Sur chaque entrée se trouver une broche qui sera reliée à la nanoboard. &amp;lt;br&amp;gt;&lt;br /&gt;
Tous les buffers ont leur GND et VCC reliés au générateur 5.5V. Les paires Darlington sont reliées à la même masse.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Il ne restait plus qu'à relier la matrice led. Cette liaison parallèle a été réalisée en recyclant un vieux BUS d'ordinateur fixe. Finalement, voilà le montage final :&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Matrice_roussel.JPG||center|400px|Montage final de la partie électronique|Montage final de la partie électronique]] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Partie informatique ===&lt;br /&gt;
=====Arduino=====&lt;br /&gt;
Lors de cette séance nous avons pu finir le programme arduino, pour pouvoir jouer à deux sur une la carte.&lt;br /&gt;
Cette partie a été crée pour pouvoir tester les différentes fonctions, et sera modifier lors de prochaines séances.&lt;br /&gt;
La matrice LED affiche des clignotement irrégulier de couleur rouge, mais cela ne gêne pas pour jouer.&lt;br /&gt;
&lt;br /&gt;
=====Raspberry=====&lt;br /&gt;
Nous avons pu enfin commencer notre travail sur la raspberry.&lt;br /&gt;
Apres avoir branché la raspberry en série à notre pc, nous avons pu la configurer afin qu'elle fonctionne avec le réseau de l'ecole.&lt;br /&gt;
Pour cela nous avons mis une adresse IP du réseau INSECURE de l'école sur la Raspberry, celle de notre raspberry est :172.26.79.12.&lt;br /&gt;
C'est à partir de cette adresse que nous allons acceder aux pages html du projet.&lt;br /&gt;
Pour effectuer cette configuration nous avons remplacé les lignes correspondant à la configuration de la carte Ethernet dans le fichier /etc/network/interfaces par les lignes&lt;br /&gt;
  auto eth0&lt;br /&gt;
  iface eth0 inet static&lt;br /&gt;
    address 172.26.79.12&lt;br /&gt;
    netmask 255.255.240.0&lt;br /&gt;
    gateway 172.26.79.254&lt;br /&gt;
&lt;br /&gt;
Et afin d'indiquer le serveur DNS dans /etc/resolv.conf nous avons rajouté:&lt;br /&gt;
&lt;br /&gt;
  nameserver 193.48.57.34 &lt;br /&gt;
&lt;br /&gt;
Une fois la raspberry configurée, nous pouvons accéder à notre raspberry sans liaisons série grâce à un ssh.&lt;br /&gt;
Afin d'effectuer notre projet nous avons besoin de deux bibliothèques:&lt;br /&gt;
*jquery.js que l'ont a telecharger sur http://jquery.com/ afin de faciliter la programmation en javascript&lt;br /&gt;
*une bibliothèque C de WebSocket trouvé sur http://libwebsockets.org afin de pouvoir effectuer notre programme en C utilisant le Websocket&lt;br /&gt;
&lt;br /&gt;
Notre raspberry est maintenant prête pour notre projet, nous avons pu commencer notre fichier morpion.html qui permet de joueur au morpion à deux sur le même ordinateur, ce qui permet de tester les differentes fonctions utilisés pour la suite du projet.&lt;br /&gt;
&lt;br /&gt;
== Séance 3 ==&lt;br /&gt;
&lt;br /&gt;
=== Partie électronique ===&lt;br /&gt;
&lt;br /&gt;
=== Partie informatique ===&lt;br /&gt;
Nous avons commencé cette séance en continuant le morpion.html&lt;br /&gt;
Dans un premier temps nous avons crée &amp;quot;l'espace de jeu&amp;quot; en utilisant du code trouvé sur internet :&lt;br /&gt;
 &amp;lt;!DOCTYPE html&amp;gt;&lt;br /&gt;
  &amp;lt;head&amp;gt;&lt;br /&gt;
   &amp;lt;meta charset=&amp;quot;utf-8&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;style type=&amp;quot;text/css&amp;quot;&amp;gt;&lt;br /&gt;
 .table{&lt;br /&gt;
 width : 330px;&lt;br /&gt;
 height : 330px;&lt;br /&gt;
 border : solid 3px black;&lt;br /&gt;
  border-collapse: collapse;&lt;br /&gt;
 }&lt;br /&gt;
 .td{&lt;br /&gt;
 border : solid 3px black;&lt;br /&gt;
 width : 33%;&lt;br /&gt;
 height : 33%;&lt;br /&gt;
 }&lt;br /&gt;
 &amp;lt;/style&amp;gt;&lt;br /&gt;
 &amp;lt;title&amp;gt; Jeu morpion&amp;lt;/title&amp;gt;&lt;br /&gt;
 &amp;lt;/head&amp;gt;&lt;br /&gt;
et&lt;br /&gt;
 &amp;lt;body&amp;gt;&lt;br /&gt;
   h1&amp;gt;Morpion&amp;lt;/h1&amp;gt;&lt;br /&gt;
 table class=&amp;quot;table&amp;quot; align=&amp;quot;center&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
       &amp;lt;td class=&amp;quot;td&amp;quot; onclick=&amp;quot;placerSigne(0)&amp;quot; id=&amp;quot;0&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
       &amp;lt;td class=&amp;quot;td&amp;quot; onclick=&amp;quot;placerSigne(1)&amp;quot; id=&amp;quot;1&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
       &amp;lt;td class=&amp;quot;td&amp;quot; onclick=&amp;quot;placerSigne(2)&amp;quot; id=&amp;quot;2&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
       &amp;lt;td class=&amp;quot;td&amp;quot; onclick=&amp;quot;placerSigne(3)&amp;quot; id=&amp;quot;3&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
       &amp;lt;td class=&amp;quot;td&amp;quot; onclick=&amp;quot;placerSigne(4)&amp;quot; id=&amp;quot;4&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
       &amp;lt;td class=&amp;quot;td&amp;quot; onclick=&amp;quot;placerSigne(5)&amp;quot; id=&amp;quot;5&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
       &amp;lt;td class=&amp;quot;td&amp;quot; onclick=&amp;quot;placerSigne(6)&amp;quot; id=&amp;quot;6&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
       &amp;lt;td class=&amp;quot;td&amp;quot; onclick=&amp;quot;placerSigne(7)&amp;quot; id=&amp;quot;7&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
       &amp;lt;td class=&amp;quot;td&amp;quot; onclick=&amp;quot;placerSigne(8)&amp;quot; id=&amp;quot;8&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
 &amp;lt;/table&amp;gt;&lt;br /&gt;
 table style=&amp;quot;border : solid 3px #3399FF;&amp;quot; align=&amp;quot;center&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;tr&amp;gt;&lt;br /&gt;
 &amp;lt;td style=&amp;quot;border : solid 1px #3399FF;&amp;quot;&amp;gt;Joueur 1&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;td style=&amp;quot;border : solid 1px #3399FF;&amp;quot;&amp;gt;Joueur 2&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
 &amp;lt;tr&amp;gt;&lt;br /&gt;
 &amp;lt;td style=&amp;quot;border : solid 1px #3399FF;&amp;quot; id=&amp;quot;scre1&amp;quot;&amp;gt;0&lt;br /&gt;
 &amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;td style=&amp;quot;border : solid 1px #3399FF;&amp;quot; id=&amp;quot;scre2&amp;quot;&amp;gt;0&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
 &amp;lt;/table&amp;gt;&lt;br /&gt;
  &amp;lt;/body&amp;gt;&lt;br /&gt;
 &amp;lt;/html&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le code ci dessus n'est pas totalement bon, puisque nous avons du enlever des &amp;quot;&amp;lt;&amp;quot; afin d'afficher le code et non ce qu'il en résulte.&lt;br /&gt;
&lt;br /&gt;
L'espacement entre deux lignes peut changer en fonction de la taille de ce qui est mis dedans.&lt;br /&gt;
Si on remplis de case blanche (&amp;quot;vide.png&amp;quot;) de taille 100*100 on obtient:&lt;br /&gt;
[[Fichier:morpion1.png]]&lt;br /&gt;
&lt;br /&gt;
A chaque clique sur une case la fonction placerSigne(n) va s'effectuer avec n le numéros de la case sélectionnée.&lt;br /&gt;
 function placerSigne(idCase)&lt;br /&gt;
 { &lt;br /&gt;
         if(morpion[idCase] == 0)&lt;br /&gt;
         {coup++;&lt;br /&gt;
         morpion[idCase]=joueur;&lt;br /&gt;
         if (joueur==1)&lt;br /&gt;
                 {&lt;br /&gt;
  	  	 joueur=2;&lt;br /&gt;
                 document.getElementById(idCase).innerHTML = '&amp;lt;img src=&amp;quot;croix.gif&amp;quot; alt=&amp;quot;image !&amp;quot; /&amp;gt;';&lt;br /&gt;
 &lt;br /&gt;
                 }&lt;br /&gt;
 	else    {&lt;br /&gt;
 	   	 joueur=1;&lt;br /&gt;
                 document.getElementById(idCase).innerHTML = '&amp;lt;img src=&amp;quot;rond.gif&amp;quot; alt=&amp;quot;image !&amp;quot; /&amp;gt;';&lt;br /&gt;
 &lt;br /&gt;
                 }&lt;br /&gt;
 	if (coup&amp;gt;4)&lt;br /&gt;
 		{if (gagner(idCase))&lt;br /&gt;
 			{if (joueur==1)&lt;br /&gt;
 				{score2++;&lt;br /&gt;
 				alert(&amp;quot;joueur 2 gagne &amp;quot;);&lt;br /&gt;
 				finpartie();&lt;br /&gt;
 				}&lt;br /&gt;
 			else{score1++;&lt;br /&gt;
 				alert(&amp;quot;joueur 1 gagne &amp;quot;);&lt;br /&gt;
 				finpartie();&lt;br /&gt;
 				}&lt;br /&gt;
 			&lt;br /&gt;
 			}&lt;br /&gt;
 		else {if (egalite()==0)&lt;br /&gt;
 			{alert(&amp;quot;egalite&amp;quot;);&lt;br /&gt;
 			finpartie();}&lt;br /&gt;
 		     }&lt;br /&gt;
 		}&lt;br /&gt;
         }&lt;br /&gt;
         else{alert(&amp;quot;pas le droit&amp;quot;);}&lt;br /&gt;
 }&lt;br /&gt;
Cette fonction place une image 100x100 de rond ou de croix dans la case sélectionnée en fonction du joueur qui doit jouer.&lt;br /&gt;
*Elle calcule les scores de chaque joueurs, et appelle gagner et egalite pour savoir si on est dans une fin de partie.&lt;br /&gt;
*Et elle alerte le joueur si la case sélectionnée ne peut pas être jouée.&lt;br /&gt;
&lt;br /&gt;
Pour cela elle utilise le tableau morpion de taille 9 remplit de 0 à l'origine, et modifie la case sélectionnée en y mettant 1 ou 2 en fonction du joueur qui a joué.&lt;br /&gt;
La variable coup permet de déterminer le nombre de coup jouer, ce qui permet de ne pas verifier si une partie une gagnée tant que coup n'est pas supérieur à 4, puisqu'il faut au minimum 5 coup pour gagner.&lt;br /&gt;
&lt;br /&gt;
 function finpartie()&lt;br /&gt;
 {for (var j=0;j&amp;lt;9;j++)&lt;br /&gt;
 	{ document.getElementById(j).innerHTML = '&amp;lt;img src=&amp;quot;vide.png&amp;quot; alt=&amp;quot;image !&amp;quot; /&amp;gt;';&lt;br /&gt;
 	morpion[j]=0;&lt;br /&gt;
 	}&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
La fonction finpartie() met les variables morpion et coup à zéro, et place des images blanches dans toutes les cases.&lt;br /&gt;
Elle est appelé que si il y une victoire ou une égalité.&lt;br /&gt;
Dans morpionsc.html qui est le fichier html final, joueur est remis à 1 dans cette fonction.&lt;br /&gt;
Dans le fichier morpion.html cela n'etais pas necessaire et permettait en plus au joueur perdant de commencer.&lt;br /&gt;
Mais pour simplifier la suite nous avons préféré définir que toujours le même joueur commencerais. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 function gagner(idCase)&lt;br /&gt;
 {switch(idCase)&lt;br /&gt;
         {&lt;br /&gt;
 case 0:&lt;br /&gt;
         return (diagonal1()||ligne1()||colonne1());&lt;br /&gt;
         break;&lt;br /&gt;
 case 1:&lt;br /&gt;
         return (ligne1()||colonne2());&lt;br /&gt;
         break;&lt;br /&gt;
 case 2:&lt;br /&gt;
         return (diagonal2()||ligne1()||colonne3());&lt;br /&gt;
         break;&lt;br /&gt;
 case 3:&lt;br /&gt;
         return (ligne2()||colonne1());&lt;br /&gt;
         break; &lt;br /&gt;
 &lt;br /&gt;
 case 4:&lt;br /&gt;
         return (diagonal1()||diagonal2()||ligne2()||colonne2());&lt;br /&gt;
         break;&lt;br /&gt;
 case 5:&lt;br /&gt;
         return (ligne2()||colonne3());&lt;br /&gt;
         break;&lt;br /&gt;
 case 6:&lt;br /&gt;
         return (diagonal2()||ligne3()||colonne1());&lt;br /&gt;
         break;&lt;br /&gt;
 case 7:&lt;br /&gt;
         return (ligne3()||colonne2());&lt;br /&gt;
         break;&lt;br /&gt;
 case 8:&lt;br /&gt;
         return (diagonal1()||ligne3()||colonne3());&lt;br /&gt;
         break;&lt;br /&gt;
         }&lt;br /&gt;
 }&lt;br /&gt;
La fonction gagner appelle des fonctions diagonal,ligne,colonne qui retourne 1 si il y'a 3 même symboles sur leur domaines.&lt;br /&gt;
Gagner teste donc si il y a une suite de 3 symboles sur la ligne, colonne et les diagonales passant par la case qui a été joué.&lt;br /&gt;
&lt;br /&gt;
 function egalite()&lt;br /&gt;
 {var cp=0;&lt;br /&gt;
 for (var i=0;i &amp;lt; 9;i++)&lt;br /&gt;
         {if (morpion[i]==0)&lt;br /&gt;
 		{cp++;}&lt;br /&gt;
         }&lt;br /&gt;
 return cp;&lt;br /&gt;
 }&lt;br /&gt;
La fonction egalité teste si toutes les cases ont été joué.&lt;br /&gt;
On aurait pu utiliser la variable coup, si coup était égal à 9 alors égalité, mais la fonction egalité permet de vérifier si il n'y a pas eu de problème lors de la modification de la matrice.&lt;br /&gt;
&lt;br /&gt;
Avec morpion.html nous avons pu apprendre le javascript, et poser les bases de notre fichier html final.&lt;br /&gt;
&lt;br /&gt;
===Complément à la séance 3===&lt;br /&gt;
&lt;br /&gt;
====HTML====&lt;br /&gt;
Pour le HTML/Javascript on garde les mêmes fonctions gagner et egalite.&lt;br /&gt;
On va ajouter lors de l'initialisation&lt;br /&gt;
 window.WebSocket=(window.WebSocket||window.MozWebSocket);&lt;br /&gt;
 &lt;br /&gt;
 var websocket=new WebSocket('ws://172.26.79.12:9000','myprotocol');&lt;br /&gt;
 &lt;br /&gt;
 websocket.onopen=function(){ $('h1').css('color','green'); };&lt;br /&gt;
 &lt;br /&gt;
 websocket.onerror=function(){ $('h1').css('color','red'); };&lt;br /&gt;
On modifie placerSigne:&lt;br /&gt;
*si ce n'est pas au tour du joueur 1 de jouer on lui envoie une alerte.&lt;br /&gt;
*si il y a une fin de partie on envoie 9 grâce a sendMessage.&lt;br /&gt;
*si il n'y a pas de fin de partie on envoie la case jouer toujours grâce à sendMessage:&lt;br /&gt;
 function sendMessage(data){&lt;br /&gt;
 websocket.send(data);&lt;br /&gt;
 }&lt;br /&gt;
Pour finpartie on rajoute juste &lt;br /&gt;
 joueur=1;&lt;br /&gt;
&lt;br /&gt;
Pour faire jouer le second joueur il faut recevoir un message du websocket ainsi :&lt;br /&gt;
 websocket.onmessage=function(message)&lt;br /&gt;
sera la fonction dans laquelle on fera jouer le joueur 2. &lt;br /&gt;
&lt;br /&gt;
Le websocket envoie simplement la case en char* ainsi:&lt;br /&gt;
 websocket.onmessage=function(message){&lt;br /&gt;
 idCase=parseInt((message.data)-30);&lt;br /&gt;
 console.log(idCase);&lt;br /&gt;
 &lt;br /&gt;
 if(morpion[idCase] == 0)&lt;br /&gt;
                 {coup++;&lt;br /&gt;
                  morpion[idCase]=2;&lt;br /&gt;
                  joueur=1;&lt;br /&gt;
  		document.getElementById(idCase).innerHTML = '&amp;lt;img src=&amp;quot;rond.gif&amp;quot; alt=&amp;quot;image !&amp;quot; /&amp;gt;';&lt;br /&gt;
  		 if (coup&amp;gt;4)&lt;br /&gt;
 			 {if (gagner(idCase))&lt;br /&gt;
                                {score2++; &lt;br /&gt;
                                         alert(&amp;quot;joueur 2 gagne &amp;quot;);&lt;br /&gt;
                                         finpartie();&lt;br /&gt;
 					sendMessage(9);&lt;br /&gt;
                                }&lt;br /&gt;
  &lt;br /&gt;
 &lt;br /&gt;
                           else {if (egalite()==0)&lt;br /&gt;
                                         {alert(&amp;quot;egalite&amp;quot;);&lt;br /&gt;
                                         finpartie();&lt;br /&gt;
 					sendMessage(9);&lt;br /&gt;
 &lt;br /&gt;
                                         }&lt;br /&gt;
 				}&lt;br /&gt;
 			&lt;br /&gt;
 			}&lt;br /&gt;
 		}&lt;br /&gt;
 &lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Console.log permet d'afficher dans le debug, la valeur traiter.&lt;br /&gt;
On envoie toujours 9 si la partie se termine, sinon on effectue la meme chose que dans placerSigne de morpion.html&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Fichier C====&lt;br /&gt;
====Arduino====&lt;br /&gt;
&lt;br /&gt;
== Démonstration ==&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;/div&gt;</summary>
		<author><name>Tstieven</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Projet_IMA3_P1,_2015/2016,_TD2&amp;diff=32276</id>
		<title>Projet IMA3 P1, 2015/2016, TD2</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Projet_IMA3_P1,_2015/2016,_TD2&amp;diff=32276"/>
				<updated>2016-06-16T21:57:42Z</updated>
		
		<summary type="html">&lt;p&gt;Tstieven : /* Partie informatique */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Projet IMA3-SC 2015/2016 : MORPION =&lt;br /&gt;
&lt;br /&gt;
== Cahier des charges ==&lt;br /&gt;
Notre projet &amp;quot;système communicant&amp;quot; aura pour but de créer une interface connectée du &amp;quot;morpion&amp;quot;. L'objectif est de permettre à un joueur interagissant sur un site internet de jouer contre une autre personne qui, elle, jouera à l'aide d'un affichage fait à partir de leds. &lt;br /&gt;
&lt;br /&gt;
Nous cherchons donc à exploiter la capacité asynchrone d'un websocket afin de permettre une partie en temps réel.&lt;br /&gt;
&lt;br /&gt;
=== Matériel ===&lt;br /&gt;
* Une nanoboard&lt;br /&gt;
* Une raspberry pi&lt;br /&gt;
* Une matrice de leds 9x9 ou plus&lt;br /&gt;
* Un clavier numérique ou 9 boutons-poussoirs&lt;br /&gt;
* Des ordinateurs avec les logiciels de développement nécessaires &lt;br /&gt;
&lt;br /&gt;
=== Optionnel ===&lt;br /&gt;
* Un buzzer afin d'avertir le joueur d'un choix incohérent&lt;br /&gt;
* Trois afficheurs sept segments afin d'ajouter un tableau des scores&lt;br /&gt;
&lt;br /&gt;
== Séance 1 ==&lt;br /&gt;
&lt;br /&gt;
=== Partie électronique ===&lt;br /&gt;
Le but de cette première séance était de se familiariser avec le logiciel de conception Altium Designer et de réfléchir à la façon d'aborder la conception électronique du morpion.&lt;br /&gt;
&lt;br /&gt;
Cette conception se fera en plusieurs étapes :&lt;br /&gt;
&lt;br /&gt;
* gérer le positionnement d'un curseur en fonction de l'état courant de la partie&lt;br /&gt;
* gérer l'affichage de la matrice en fonction des cases remplies / sélectionnées&lt;br /&gt;
* permettre la réception et l'envoie de données à l'aide de la liaison série&lt;br /&gt;
* traiter la remise à zéro du plateau en cas de fin de partie&lt;br /&gt;
&lt;br /&gt;
====Positionnement du curseur et état de la partie====&lt;br /&gt;
&lt;br /&gt;
Dans un premier lieu, il était nécessaire de traiter les actions entrantes. En effet, si ce n'est pas au tour du joueur &amp;quot;physique&amp;quot;, l'utilisation des boutons doit être bloquée.&amp;lt;br&amp;gt;&lt;br /&gt;
Ceci consiste simplement à effectuer un ET logique entre un bit symbolisant le joueur courant (si 1 alors joueur physique, si 0 alors joueur en ligne) et l'action demandée.&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fichier:Choisir.png||center|alt=Schema de choix|Circuit logique de la permission d'action]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Une fois les choix accessibles, il faut désormais les traiter. Le traitement s'effectuera à l'aide de bascules, chaque case comportera deux bascules : une bascule de sélection (la case est-elle sélectionnée ?) et une bascule permettant de savoir si la case a déjà été jouée.&amp;lt;br&amp;gt;&lt;br /&gt;
Si la case a déjà été jouée, il ne faut empêcher l'utilisateur de la jouer.&amp;lt;br&amp;gt;&lt;br /&gt;
Nous considérerons que le joueur en ligne n'effectuera pas de choix erroné et nous testerons seulement les choix du joueur &amp;quot;physique&amp;quot;.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Traitement.png||center|alt=Schema de traitement|Circuit logique du traitement d'une action]] &amp;lt;br&amp;gt;&lt;br /&gt;
Les ronds verts permettent la distinction des 9 cases. &amp;lt;br&amp;gt;&lt;br /&gt;
Le rond jaune correspond à la zone des sorties d'état. Plus précisément, il s'agit de deux bus regroupant les cases remplies et le lieu de la case sélectionnée.&amp;lt;br&amp;gt;&lt;br /&gt;
Le rond noir correspond au choix de l'adversaire.&amp;lt;br&amp;gt;&lt;br /&gt;
Le rond orange correspond à la sortie &amp;quot;selection_done&amp;quot; qui effectue un état haut lorsqu'un choix valide a été fait par l'utilisateur.&amp;lt;br&amp;gt;&lt;br /&gt;
Le rond rouge met en évidence la zone permettant de traiter les décalage du bit de sélection. Ce décalage consiste à garder seulement UNE bascule à l'état haut en effectuant le passage logique d'une bascule à une autre en fonction du choix tout en appliquant un reset sur l'ancienne sélection. Le schéma de ce déplacement se trouve ci-dessous et est appliqué aux 9 cases.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Andor.png||center|alt=Schema permettant le déplacement|Circuit logique utilisé afin de déplacer le curseur]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Complément à la séance 1===&lt;br /&gt;
====Affichage dynamique====&lt;br /&gt;
&lt;br /&gt;
L'un des grands problèmes à la réalisation du morpion sur nanoboard est l'affichage dynamique. En effet, il va falloir à la fois stocker les valeurs, et stocker quel joueur a joué telle ou telle case, afin de savoir quel case s'allumera de la couleur désirée. Ceci rajouté à l'affichage dynamique de la sélection, ceci s'avère compliqué.&amp;lt;br&amp;gt;&lt;br /&gt;
La tâche a alors été décomposée en deux étapes :&lt;br /&gt;
* Le traitement des couleurs (Quelle couleur affilier à quelle case ?)&lt;br /&gt;
* L'affichage de ces couleurs&lt;br /&gt;
=====Traitement des couleurs=====&lt;br /&gt;
&lt;br /&gt;
Le but était de se simplifier au maximum les choses. Le premier problème est de savoir quel joueur a joué une case, pour ceci, nous nous sommes servi de l'état du plateau fourni dans le bloc TRAITEMENT. Nous savons quelles cases sont à 1 et imposons donc une couleur rouge à toutes ces cases.&amp;lt;br&amp;gt;&lt;br /&gt;
De plus, nous savons qu'à chaque fois que le joueur &amp;quot;physique&amp;quot; effectue un choix valide, un front montant est appliqué sur la broche &amp;quot;selection_done&amp;quot; de TRAITEMENT. Nous avons alors re-créé 9 registres symbolisant les cases, mais cette fois ci, en fonction de l'endroit sélectionné par l'utilisateur, si ce dernier effectue un choix valide, le registre passera à 1. Le but de cette manipulation est de recenser tous les registres joués par le joueur physique. &amp;lt;br&amp;gt;&lt;br /&gt;
Maintenant, nous relions ces registres aux valeurs de couleur verte afin d'additionner le vert au rouge  des cases jouées et obtiendrons finalement des cases de couleur jaune pour symboliser les cases du joueur physique et des cases de couleur rouge pour le jouer en ligne. &amp;lt;br&amp;gt;&lt;br /&gt;
Il ne reste qu'à relier directement la case sélectionnée (recensée par le bus Etat_selection de TRAITEMENT) à la couleur bleue.&amp;lt;br&amp;gt;&lt;br /&gt;
Finalement nous avons : &lt;br /&gt;
* joueur en ligne : rouge&lt;br /&gt;
* joueur physique : jaune&lt;br /&gt;
* sélection : magenta, cyan ou bleu&lt;br /&gt;
&lt;br /&gt;
 [[Fichier:Traitement_affichage.png||center|Schéma du traitement pré affichage|Circuit logique du traitement pré-affichage]] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Affichage=====&lt;br /&gt;
&lt;br /&gt;
La matrice led employée est une matrice led à anode commune. Elle a pour avantage de permettre la sélection d'une ligne et de la couleur de chaque colonne.&amp;lt;br&amp;gt;&lt;br /&gt;
Cependant, nous ne pouvons donc choisir la couleur que d'une colonne. C'est pourquoi nous allons faire varier cet affichage ligne par ligne à une fréquence élevée afin que l’œil humain ne le remarque pas. Nous pourrons donc choisir quelle couleur sera affichée sur chaque ligne. &amp;lt;br&amp;gt;&lt;br /&gt;
Cet affichage ligne par ligne sera effectué via un multiplexeur donc le bus de sélection sera relié à un compteur 3bits cadencé sur une clock suffisamment rapide pour opérer une persistance rétinienne. &amp;lt;br&amp;gt;&lt;br /&gt;
Dans chaque bus nous avons imposé certains bits afin que la grille soit dessinée en bleu.&amp;lt;br&amp;gt;&lt;br /&gt;
Le bus multiplexé sera ensuite redirigé vers les pins de la matrice leds.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Affichage.png||center|Schéma d'affichage|Circuit logique de l'affichage]] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Tests====&lt;br /&gt;
&lt;br /&gt;
Le bloc d'affichage a été testé et deux problèmes ont été rencontrés : &lt;br /&gt;
* La sélection a été mal réfléchie&lt;br /&gt;
* Un phénomène de rebond a été remarqué sur l'oscilloscope numérique&lt;br /&gt;
&lt;br /&gt;
=====La sélection=====&lt;br /&gt;
&lt;br /&gt;
Dans la fonction d'affichage, on retourne la sélection de la ligne en logique inversée. Le problème est que dans la version 1.0 de l'affichage, un GND avait été placé en entrée du MUX de sélection. Nous n'avions pas pensé au fait que dans ce cas la, toutes les sorties seraient en permanence au GND... &amp;lt;br&amp;gt;La correction a donc été de placer un VCC en entrée et d'inverser les sorties, ainsi une seul anode de ligne sera placée sur le GND.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Selection.PNG||center|Schéma de selection|Correction de la sortie de selection]] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le schéma semble fonctionnel cependant d'autres tests restent à faire.&lt;br /&gt;
&lt;br /&gt;
=====Le rebond=====&lt;br /&gt;
&lt;br /&gt;
Lors du test de l'affichage, la clock d'affichage a été simulée par un bouton de la nanoboard et l'affichage a été relié sur une seule ligne.&amp;lt;br&amp;gt;&lt;br /&gt;
Nous étions sensé remarquer que lorsque la ligne s'allume, si on appuie sur le bouton, elle s’éteint et enfin si nous appuyons sept fois sur le bouton, la ligne se rallume. &amp;lt;br&amp;gt;&lt;br /&gt;
Rien ne se passait comme prévu, et plus précisément, il n'y avait même pas de logique dans la ré-apparition de la ligne.&amp;lt;br&amp;gt;&lt;br /&gt;
Ayant déjà été confronté à des problèmes de rebonds avec des boutons poussoir, ce phénomène a été testé sur l'oscilloscope numérique.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Rebond.png||center|Exemple de rebond|Exemple de rebond]] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous demanderons alors aux référents quelle stratégie adopter : filtrer le signal avec un condensateur en parallèle au bouton ou bien utiliser une comparaison avec registre à décalage pour vérifier la stabilité du signal avant d'envoie du front montant.&amp;lt;br&amp;gt;&lt;br /&gt;
Certes la correction du bouton n'était pas nécessaire aux tests entrepris pour l'affichage (nous aurions pu mettre une clock interne) mais ceci nous servira pour filtrer les choix effectués par l'utilisateur (haut, droite, select). &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Objectifs pour la séance prochaine====&lt;br /&gt;
&lt;br /&gt;
Les schémas effectués restent des ébauches, il y a forcément eu des oublis. Néanmoins, comme chaque schéma se compile, le passage à l'étape de mise en place de la liaison série durant la séance 2 est envisageable. Il faudra donc créer un protocole plus concret afin de savoir qui doit jouer, quand envoyer, quand recevoir des données. Si le temps le permet, quelques programmes simples seront testés sur la nanoboard afin de vérifier le fonctionnement de l'affichage de la matrice après discutions avec les enseignants au sujet du phénomène de rebond.&lt;br /&gt;
&lt;br /&gt;
=== Partie informatique ===&lt;br /&gt;
Dans cette première séance nous avons programmé l'arduino afin de créer le programme de morpion, pour pouvoir tester la partie informatique sans disposer de la partie électronique.&lt;br /&gt;
Pour cela nous avons due apprendre à utiliser une matrice de LED RGB à l'aide des codes fournit par SparkFun.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Puis nous avons pu commencer à programmer le morpion:&lt;br /&gt;
&lt;br /&gt;
*le jeu se déroule dans une matrice 3x3.&lt;br /&gt;
*le position du curseur est représentée par une lumière bleue, celle des pions du joueurs 1 par une lumière rouge et celle des pions du joueurs 2 par une lumière verte.&lt;br /&gt;
*si le curseur est sur un pions les deux couleurs s'additionnent pour donner du magenta où du cyan.&lt;br /&gt;
*le joueur se déplace à l'aide de 2 boutons poussoir,l'un permettant d'aller vers le haut, l'autre permettant d'aller à droite&lt;br /&gt;
**pour éviter plusieurs déplacements d'un coup, un délais a été mis entre deux actions&lt;br /&gt;
*une fois tout en haut, si le joueur presse le bouton pour aller vers le haut le joueur se retrouve en bas.&lt;br /&gt;
*une fois tout à droite, si le joueur presse le bouton pour aller vers la droite le joueur se retrouve à gauche. &lt;br /&gt;
*enfin un dernier bouton poussoir permet de placer un pion à l'endroit où se trouve le curseur.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Une fois les mouvements programmés il fallait régir les règles du jeu:&lt;br /&gt;
&lt;br /&gt;
*Ainsi le curseur commence toujours en haut à droite&lt;br /&gt;
*Si le un joueurs arrive a créer une ligne de 3, il gagne la partie&lt;br /&gt;
*Si aucun joueur n'arrive à gagner et que le terrain est remplit, la partie se termine sur un match nul&lt;br /&gt;
*Une fois la partie terminée, le terrain est remis à zéros&lt;br /&gt;
&lt;br /&gt;
== Séance 2 ==&lt;br /&gt;
&lt;br /&gt;
=== Partie électronique ===&lt;br /&gt;
&lt;br /&gt;
La matrice led ne pourra être alimentée par les différentes broches de la nanoboard sous peine de créer une chute de tension et risquer un reset du fpga.&amp;lt;br&amp;gt;&lt;br /&gt;
Ainsi, le but de cet séance est de réfléchir à la conception d'un prototype de carte permettant d'alimenter la matrice led de manière externe. &amp;lt;br&amp;gt;&lt;br /&gt;
====Utilisation de transistors====&lt;br /&gt;
L'utilisation de transistors en saturé paraît la meilleur chose à faire. En effet, ceci permettra de générer un gain en courant et de contrôler l'état des différentes couleurs ligne par ligne et colonne par colonne.&amp;lt;br&amp;gt;&lt;br /&gt;
Pour permettra la liaison de chaque led au VCC, on utilisera un transistor PNP. Pour permettre la liaison au GND, on utilisera un NPN.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Montage_roussel.PNG||center|upright = 0.5|Montage d'une branche|Montage d'une branche de led]] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Comme il s'agit de transistor à anodes communes, il suffira de 8 transistors NPN. Notre choix s'est donc porté vers le ULN2803A, qui est un ensemble de 8 paires Darlington.&amp;lt;br&amp;gt;&lt;br /&gt;
L'utilisation de paires Darlington a l'avantage de permettre une génération élevée de courant. (Fort gain en courant)&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour ce qui est des cathodes, un problème de taille se pose. Il faudrait 24 transistors PNP pour gérer les 8 colonnes * 3couleurs. Ainsi, notre choix s'est plutôt déporté vers le buffer de portes trois états 74AS240. Cette famille de buffer 3 états a la capacité de délivrer un courant du même ordre de grandeur que l'ULN2803A.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Maintenant il reste à dimensionner la résistance sur chaque branche. Après quelques tests à l'aide d'un multimètre et de la matrice, on remarque que chaque led a besoin de 2mA pour fonctionner. Donc le but est de générer un courant d'environ 2mA. Ainsi, si on impose une tension de 5.5V aux bornes du montage, R = 5.5 / 0.002 = 2700 Ohms.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous avons désormais toutes les informations nécessaires pour le montage d'un prototype.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Le montage====&lt;br /&gt;
Au cours d'une séance supplémentaire, un plan a été élaboré et le prototype brasé. Voici donc le prototype achevé :&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Driver.JPG||center|400px|Driver matrice|Driver de la matrice]] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sur chaque sortie se trouve une résistance de 2700ohms. Le mieux aurait été de réaliser ce montage avec un réseau résistif cependant, le temps nous faisant défaut, nous avons utilisé les résistances déjà présentes en magasin.&amp;lt;br&amp;gt;&lt;br /&gt;
Sur chaque entrée se trouver une broche qui sera reliée à la nanoboard. &amp;lt;br&amp;gt;&lt;br /&gt;
Tous les buffers ont leur GND et VCC reliés au générateur 5.5V. Les paires Darlington sont reliées à la même masse.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Il ne restait plus qu'à relier la matrice led. Cette liaison parallèle a été réalisée en recyclant un vieux BUS d'ordinateur fixe. Finalement, voilà le montage final :&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Matrice_roussel.JPG||center|400px|Montage final de la partie électronique|Montage final de la partie électronique]] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Partie informatique ===&lt;br /&gt;
=====Arduino=====&lt;br /&gt;
Lors de cette séance nous avons pu finir le programme arduino, pour pouvoir jouer à deux sur une la carte.&lt;br /&gt;
Cette partie a été crée pour pouvoir tester les différentes fonctions, et sera modifier lors de prochaines séances.&lt;br /&gt;
La matrice LED affiche des clignotement irrégulier de couleur rouge, mais cela ne gêne pas pour jouer.&lt;br /&gt;
&lt;br /&gt;
=====Raspberry=====&lt;br /&gt;
Nous avons pu enfin commencer notre travail sur la raspberry.&lt;br /&gt;
Apres avoir branché la raspberry en série à notre pc, nous avons pu la configurer afin qu'elle fonctionne avec le réseau de l'ecole.&lt;br /&gt;
Pour cela nous avons mis une adresse IP du réseau INSECURE de l'école sur la Raspberry, celle de notre raspberry est :172.26.79.12.&lt;br /&gt;
C'est à partir de cette adresse que nous allons acceder aux pages html du projet.&lt;br /&gt;
Pour effectuer cette configuration nous avons remplacé les lignes correspondant à la configuration de la carte Ethernet dans le fichier /etc/network/interfaces par les lignes&lt;br /&gt;
  auto eth0&lt;br /&gt;
  iface eth0 inet static&lt;br /&gt;
    address 172.26.79.12&lt;br /&gt;
    netmask 255.255.240.0&lt;br /&gt;
    gateway 172.26.79.254&lt;br /&gt;
&lt;br /&gt;
Et afin d'indiquer le serveur DNS dans /etc/resolv.conf nous avons rajouté:&lt;br /&gt;
&lt;br /&gt;
  nameserver 193.48.57.34 &lt;br /&gt;
&lt;br /&gt;
Une fois la raspberry configurée, nous pouvons accéder à notre raspberry sans liaisons série grâce à un ssh.&lt;br /&gt;
Afin d'effectuer notre projet nous avons besoin de deux bibliothèques:&lt;br /&gt;
*jquery.js que l'ont a telecharger sur http://jquery.com/ afin de faciliter la programmation en javascript&lt;br /&gt;
*une bibliothèque C de WebSocket trouvé sur http://libwebsockets.org afin de pouvoir effectuer notre programme en C utilisant le Websocket&lt;br /&gt;
&lt;br /&gt;
Notre raspberry est maintenant prête pour notre projet, nous avons pu commencer notre fichier morpion.html qui permet de joueur au morpion à deux sur le même ordinateur, ce qui permet de tester les differentes fonctions utilisés pour la suite du projet.&lt;br /&gt;
&lt;br /&gt;
== Séance 3 ==&lt;br /&gt;
&lt;br /&gt;
=== Partie électronique ===&lt;br /&gt;
&lt;br /&gt;
=== Partie informatique ===&lt;br /&gt;
Nous avons commencé cette séance en continuant le morpion.html&lt;br /&gt;
Dans un premier temps nous avons crée &amp;quot;l'espace de jeu&amp;quot; en utilisant du code trouvé sur internet :&lt;br /&gt;
 &amp;lt;!DOCTYPE html&amp;gt;&lt;br /&gt;
  &amp;lt;head&amp;gt;&lt;br /&gt;
   &amp;lt;meta charset=&amp;quot;utf-8&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;style type=&amp;quot;text/css&amp;quot;&amp;gt;&lt;br /&gt;
 .table{&lt;br /&gt;
 width : 330px;&lt;br /&gt;
 height : 330px;&lt;br /&gt;
 border : solid 3px black;&lt;br /&gt;
  border-collapse: collapse;&lt;br /&gt;
 }&lt;br /&gt;
 .td{&lt;br /&gt;
 border : solid 3px black;&lt;br /&gt;
 width : 33%;&lt;br /&gt;
 height : 33%;&lt;br /&gt;
 }&lt;br /&gt;
 &amp;lt;/style&amp;gt;&lt;br /&gt;
 &amp;lt;title&amp;gt; Jeu morpion&amp;lt;/title&amp;gt;&lt;br /&gt;
 &amp;lt;/head&amp;gt;&lt;br /&gt;
et&lt;br /&gt;
 &amp;lt;body&amp;gt;&lt;br /&gt;
   h1&amp;gt;Morpion&amp;lt;/h1&amp;gt;&lt;br /&gt;
 table class=&amp;quot;table&amp;quot; align=&amp;quot;center&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
       &amp;lt;td class=&amp;quot;td&amp;quot; onclick=&amp;quot;placerSigne(0)&amp;quot; id=&amp;quot;0&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
       &amp;lt;td class=&amp;quot;td&amp;quot; onclick=&amp;quot;placerSigne(1)&amp;quot; id=&amp;quot;1&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
       &amp;lt;td class=&amp;quot;td&amp;quot; onclick=&amp;quot;placerSigne(2)&amp;quot; id=&amp;quot;2&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
       &amp;lt;td class=&amp;quot;td&amp;quot; onclick=&amp;quot;placerSigne(3)&amp;quot; id=&amp;quot;3&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
       &amp;lt;td class=&amp;quot;td&amp;quot; onclick=&amp;quot;placerSigne(4)&amp;quot; id=&amp;quot;4&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
       &amp;lt;td class=&amp;quot;td&amp;quot; onclick=&amp;quot;placerSigne(5)&amp;quot; id=&amp;quot;5&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
       &amp;lt;td class=&amp;quot;td&amp;quot; onclick=&amp;quot;placerSigne(6)&amp;quot; id=&amp;quot;6&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
       &amp;lt;td class=&amp;quot;td&amp;quot; onclick=&amp;quot;placerSigne(7)&amp;quot; id=&amp;quot;7&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
       &amp;lt;td class=&amp;quot;td&amp;quot; onclick=&amp;quot;placerSigne(8)&amp;quot; id=&amp;quot;8&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
 &amp;lt;/table&amp;gt;&lt;br /&gt;
 table style=&amp;quot;border : solid 3px #3399FF;&amp;quot; align=&amp;quot;center&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;tr&amp;gt;&lt;br /&gt;
 &amp;lt;td style=&amp;quot;border : solid 1px #3399FF;&amp;quot;&amp;gt;Joueur 1&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;td style=&amp;quot;border : solid 1px #3399FF;&amp;quot;&amp;gt;Joueur 2&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
 &amp;lt;tr&amp;gt;&lt;br /&gt;
 &amp;lt;td style=&amp;quot;border : solid 1px #3399FF;&amp;quot; id=&amp;quot;scre1&amp;quot;&amp;gt;0&lt;br /&gt;
 &amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;td style=&amp;quot;border : solid 1px #3399FF;&amp;quot; id=&amp;quot;scre2&amp;quot;&amp;gt;0&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
 &amp;lt;/table&amp;gt;&lt;br /&gt;
  &amp;lt;/body&amp;gt;&lt;br /&gt;
 &amp;lt;/html&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le code ci dessus n'est pas totalement bon, puisque nous avons du enlever des &amp;quot;&amp;lt;&amp;quot; afin d'afficher le code et non ce qu'il en résulte.&lt;br /&gt;
&lt;br /&gt;
L'espacement entre deux lignes peut changer en fonction de la taille de ce qui est mis dedans.&lt;br /&gt;
Si on remplis de case blanche (&amp;quot;vide.png&amp;quot;) de taille 100*100 on obtient:&lt;br /&gt;
[[Fichier:morpion1.png]]&lt;br /&gt;
&lt;br /&gt;
A chaque clique sur une case la fonction placerSigne(n) va s'effectuer avec n le numéros de la case sélectionnée.&lt;br /&gt;
 function placerSigne(idCase)&lt;br /&gt;
 { &lt;br /&gt;
         if(morpion[idCase] == 0)&lt;br /&gt;
         {coup++;&lt;br /&gt;
         morpion[idCase]=joueur;&lt;br /&gt;
         if (joueur==1)&lt;br /&gt;
                 {&lt;br /&gt;
  	  	 joueur=2;&lt;br /&gt;
                 document.getElementById(idCase).innerHTML = '&amp;lt;img src=&amp;quot;croix.gif&amp;quot; alt=&amp;quot;image !&amp;quot; /&amp;gt;';&lt;br /&gt;
 &lt;br /&gt;
                 }&lt;br /&gt;
 	else    {&lt;br /&gt;
 	   	 joueur=1;&lt;br /&gt;
                 document.getElementById(idCase).innerHTML = '&amp;lt;img src=&amp;quot;rond.gif&amp;quot; alt=&amp;quot;image !&amp;quot; /&amp;gt;';&lt;br /&gt;
 &lt;br /&gt;
                 }&lt;br /&gt;
 	if (coup&amp;gt;4)&lt;br /&gt;
 		{if (gagner(idCase))&lt;br /&gt;
 			{if (joueur==1)&lt;br /&gt;
 				{score2++;&lt;br /&gt;
 				alert(&amp;quot;joueur 2 gagne &amp;quot;);&lt;br /&gt;
 				finpartie();&lt;br /&gt;
 				}&lt;br /&gt;
 			else{score1++;&lt;br /&gt;
 				alert(&amp;quot;joueur 1 gagne &amp;quot;);&lt;br /&gt;
 				finpartie();&lt;br /&gt;
 				}&lt;br /&gt;
 			&lt;br /&gt;
 			}&lt;br /&gt;
 		else {if (egalite()==0)&lt;br /&gt;
 			{alert(&amp;quot;egalite&amp;quot;);&lt;br /&gt;
 			finpartie();}&lt;br /&gt;
 		     }&lt;br /&gt;
 		}&lt;br /&gt;
         }&lt;br /&gt;
         else{alert(&amp;quot;pas le droit&amp;quot;);}&lt;br /&gt;
 }&lt;br /&gt;
Cette fonction place une image 100x100 de rond ou de croix dans la case sélectionnée en fonction du joueur qui doit jouer.&lt;br /&gt;
*Elle calcule les scores de chaque joueurs, et appelle gagner et egalite pour savoir si on est dans une fin de partie.&lt;br /&gt;
*Et elle alerte le joueur si la case sélectionnée ne peut pas être jouée.&lt;br /&gt;
&lt;br /&gt;
Pour cela elle utilise le tableau morpion de taille 9 remplit de 0 à l'origine, et modifie la case sélectionnée en y mettant 1 ou 2 en fonction du joueur qui a joué.&lt;br /&gt;
La variable coup permet de déterminer le nombre de coup jouer, ce qui permet de ne pas verifier si une partie une gagnée tant que coup n'est pas supérieur à 4, puisqu'il faut au minimum 5 coup pour gagner.&lt;br /&gt;
&lt;br /&gt;
 function finpartie()&lt;br /&gt;
 {for (var j=0;j&amp;lt;9;j++)&lt;br /&gt;
 	{ document.getElementById(j).innerHTML = '&amp;lt;img src=&amp;quot;vide.png&amp;quot; alt=&amp;quot;image !&amp;quot; /&amp;gt;';&lt;br /&gt;
 	morpion[j]=0;&lt;br /&gt;
 	}&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
La fonction finpartie() met les variables morpion et coup à zéro, et place des images blanches dans toutes les cases.&lt;br /&gt;
Elle est appelé que si il y une victoire ou une égalité.&lt;br /&gt;
Dans morpionsc.html qui est le fichier html final, joueur est remis à 1 dans cette fonction.&lt;br /&gt;
Dans le fichier morpion.html cela n'etais pas necessaire et permettait en plus au joueur perdant de commencer.&lt;br /&gt;
Mais pour simplifier la suite nous avons préféré définir que toujours le même joueur commencerais. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 function gagner(idCase)&lt;br /&gt;
 {switch(idCase)&lt;br /&gt;
         {&lt;br /&gt;
 case 0:&lt;br /&gt;
         return (diagonal1()||ligne1()||colonne1());&lt;br /&gt;
         break;&lt;br /&gt;
 case 1:&lt;br /&gt;
         return (ligne1()||colonne2());&lt;br /&gt;
         break;&lt;br /&gt;
 case 2:&lt;br /&gt;
         return (diagonal2()||ligne1()||colonne3());&lt;br /&gt;
         break;&lt;br /&gt;
 case 3:&lt;br /&gt;
         return (ligne2()||colonne1());&lt;br /&gt;
         break; &lt;br /&gt;
 &lt;br /&gt;
 case 4:&lt;br /&gt;
         return (diagonal1()||diagonal2()||ligne2()||colonne2());&lt;br /&gt;
         break;&lt;br /&gt;
 case 5:&lt;br /&gt;
         return (ligne2()||colonne3());&lt;br /&gt;
         break;&lt;br /&gt;
 case 6:&lt;br /&gt;
         return (diagonal2()||ligne3()||colonne1());&lt;br /&gt;
         break;&lt;br /&gt;
 case 7:&lt;br /&gt;
         return (ligne3()||colonne2());&lt;br /&gt;
         break;&lt;br /&gt;
 case 8:&lt;br /&gt;
         return (diagonal1()||ligne3()||colonne3());&lt;br /&gt;
         break;&lt;br /&gt;
         }&lt;br /&gt;
 }&lt;br /&gt;
La fonction gagner appelle des fonctions diagonal,ligne,colonne qui retourne 1 si il y'a 3 même symboles sur leur domaines.&lt;br /&gt;
Gagner teste donc si il y a une suite de 3 symboles sur la ligne, colonne et les diagonales passant par la case qui a été joué.&lt;br /&gt;
&lt;br /&gt;
 function egalite()&lt;br /&gt;
 {var cp=0;&lt;br /&gt;
 for (var i=0;i &amp;lt; 9;i++)&lt;br /&gt;
         {if (morpion[i]==0)&lt;br /&gt;
 		{cp++;}&lt;br /&gt;
         }&lt;br /&gt;
 return cp;&lt;br /&gt;
 }&lt;br /&gt;
La fonction egalité teste si toutes les cases ont été joué.&lt;br /&gt;
On aurait pu utiliser la variable coup, si coup était égal à 9 alors égalité, mais la fonction egalité permet de vérifier si il n'y a pas eu de problème lors de la modification de la matrice.&lt;br /&gt;
&lt;br /&gt;
Avec morpion.html nous avons pu apprendre le javascript, et poser les bases de notre fichier html final.&lt;br /&gt;
&lt;br /&gt;
== Démonstration ==&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;/div&gt;</summary>
		<author><name>Tstieven</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Projet_IMA3_P1,_2015/2016,_TD2&amp;diff=32262</id>
		<title>Projet IMA3 P1, 2015/2016, TD2</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Projet_IMA3_P1,_2015/2016,_TD2&amp;diff=32262"/>
				<updated>2016-06-16T20:46:06Z</updated>
		
		<summary type="html">&lt;p&gt;Tstieven : /* Partie informatique */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Projet IMA3-SC 2015/2016 : MORPION =&lt;br /&gt;
&lt;br /&gt;
== Cahier des charges ==&lt;br /&gt;
Notre projet &amp;quot;système communicant&amp;quot; aura pour but de créer une interface connectée du &amp;quot;morpion&amp;quot;. L'objectif est de permettre à un joueur interagissant sur un site internet de jouer contre une autre personne qui, elle, jouera à l'aide d'un affichage fait à partir de leds. &lt;br /&gt;
&lt;br /&gt;
Nous cherchons donc à exploiter la capacité asynchrone d'un websocket afin de permettre une partie en temps réel.&lt;br /&gt;
&lt;br /&gt;
=== Matériel ===&lt;br /&gt;
* Une nanoboard&lt;br /&gt;
* Une raspberry pi&lt;br /&gt;
* Une matrice de leds 9x9 ou plus&lt;br /&gt;
* Un clavier numérique ou 9 boutons-poussoirs&lt;br /&gt;
* Des ordinateurs avec les logiciels de développement nécessaires &lt;br /&gt;
&lt;br /&gt;
=== Optionnel ===&lt;br /&gt;
* Un buzzer afin d'avertir le joueur d'un choix incohérent&lt;br /&gt;
* Trois afficheurs sept segments afin d'ajouter un tableau des scores&lt;br /&gt;
&lt;br /&gt;
== Séance 1 ==&lt;br /&gt;
&lt;br /&gt;
=== Partie électronique ===&lt;br /&gt;
Le but de cette première séance était de se familiariser avec le logiciel de conception Altium Designer et de réfléchir à la façon d'aborder la conception électronique du morpion.&lt;br /&gt;
&lt;br /&gt;
Cette conception se fera en plusieurs étapes :&lt;br /&gt;
&lt;br /&gt;
* gérer le positionnement d'un curseur en fonction de l'état courant de la partie&lt;br /&gt;
* gérer l'affichage de la matrice en fonction des cases remplies / sélectionnées&lt;br /&gt;
* permettre la réception et l'envoie de données à l'aide de la liaison série&lt;br /&gt;
* traiter la remise à zéro du plateau en cas de fin de partie&lt;br /&gt;
&lt;br /&gt;
====Positionnement du curseur et état de la partie====&lt;br /&gt;
&lt;br /&gt;
Dans un premier lieu, il était nécessaire de traiter les actions entrantes. En effet, si ce n'est pas au tour du joueur &amp;quot;physique&amp;quot;, l'utilisation des boutons doit être bloquée.&amp;lt;br&amp;gt;&lt;br /&gt;
Ceci consiste simplement à effectuer un ET logique entre un bit symbolisant le joueur courant (si 1 alors joueur physique, si 0 alors joueur en ligne) et l'action demandée.&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fichier:Choisir.png||center|alt=Schema de choix|Circuit logique de la permission d'action]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Une fois les choix accessibles, il faut désormais les traiter. Le traitement s'effectuera à l'aide de bascules, chaque case comportera deux bascules : une bascule de sélection (la case est-elle sélectionnée ?) et une bascule permettant de savoir si la case a déjà été jouée.&amp;lt;br&amp;gt;&lt;br /&gt;
Si la case a déjà été jouée, il ne faut empêcher l'utilisateur de la jouer.&amp;lt;br&amp;gt;&lt;br /&gt;
Nous considérerons que le joueur en ligne n'effectuera pas de choix erroné et nous testerons seulement les choix du joueur &amp;quot;physique&amp;quot;.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Traitement.png||center|alt=Schema de traitement|Circuit logique du traitement d'une action]] &amp;lt;br&amp;gt;&lt;br /&gt;
Les ronds verts permettent la distinction des 9 cases. &amp;lt;br&amp;gt;&lt;br /&gt;
Le rond jaune correspond à la zone des sorties d'état. Plus précisément, il s'agit de deux bus regroupant les cases remplies et le lieu de la case sélectionnée.&amp;lt;br&amp;gt;&lt;br /&gt;
Le rond noir correspond au choix de l'adversaire.&amp;lt;br&amp;gt;&lt;br /&gt;
Le rond orange correspond à la sortie &amp;quot;selection_done&amp;quot; qui effectue un état haut lorsqu'un choix valide a été fait par l'utilisateur.&amp;lt;br&amp;gt;&lt;br /&gt;
Le rond rouge met en évidence la zone permettant de traiter les décalage du bit de sélection. Ce décalage consiste à garder seulement UNE bascule à l'état haut en effectuant le passage logique d'une bascule à une autre en fonction du choix tout en appliquant un reset sur l'ancienne sélection. Le schéma de ce déplacement se trouve ci-dessous et est appliqué aux 9 cases.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Andor.png||center|alt=Schema permettant le déplacement|Circuit logique utilisé afin de déplacer le curseur]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Complément à la séance 1===&lt;br /&gt;
====Affichage dynamique====&lt;br /&gt;
&lt;br /&gt;
L'un des grands problèmes à la réalisation du morpion sur nanoboard est l'affichage dynamique. En effet, il va falloir à la fois stocker les valeurs, et stocker quel joueur a joué telle ou telle case, afin de savoir quel case s'allumera de la couleur désirée. Ceci rajouté à l'affichage dynamique de la sélection, ceci s'avère compliqué.&amp;lt;br&amp;gt;&lt;br /&gt;
La tâche a alors été décomposée en deux étapes :&lt;br /&gt;
* Le traitement des couleurs (Quelle couleur affilier à quelle case ?)&lt;br /&gt;
* L'affichage de ces couleurs&lt;br /&gt;
=====Traitement des couleurs=====&lt;br /&gt;
&lt;br /&gt;
Le but était de se simplifier au maximum les choses. Le premier problème est de savoir quel joueur a joué une case, pour ceci, nous nous sommes servi de l'état du plateau fourni dans le bloc TRAITEMENT. Nous savons quelles cases sont à 1 et imposons donc une couleur rouge à toutes ces cases.&amp;lt;br&amp;gt;&lt;br /&gt;
De plus, nous savons qu'à chaque fois que le joueur &amp;quot;physique&amp;quot; effectue un choix valide, un front montant est appliqué sur la broche &amp;quot;selection_done&amp;quot; de TRAITEMENT. Nous avons alors re-créé 9 registres symbolisant les cases, mais cette fois ci, en fonction de l'endroit sélectionné par l'utilisateur, si ce dernier effectue un choix valide, le registre passera à 1. Le but de cette manipulation est de recenser tous les registres joués par le joueur physique. &amp;lt;br&amp;gt;&lt;br /&gt;
Maintenant, nous relions ces registres aux valeurs de couleur verte afin d'additionner le vert au rouge  des cases jouées et obtiendrons finalement des cases de couleur jaune pour symboliser les cases du joueur physique et des cases de couleur rouge pour le jouer en ligne. &amp;lt;br&amp;gt;&lt;br /&gt;
Il ne reste qu'à relier directement la case sélectionnée (recensée par le bus Etat_selection de TRAITEMENT) à la couleur bleue.&amp;lt;br&amp;gt;&lt;br /&gt;
Finalement nous avons : &lt;br /&gt;
* joueur en ligne : rouge&lt;br /&gt;
* joueur physique : jaune&lt;br /&gt;
* sélection : magenta, cyan ou bleu&lt;br /&gt;
&lt;br /&gt;
 [[Fichier:Traitement_affichage.png||center|Schéma du traitement pré affichage|Circuit logique du traitement pré-affichage]] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Affichage=====&lt;br /&gt;
&lt;br /&gt;
La matrice led employée est une matrice led à anode commune. Elle a pour avantage de permettre la sélection d'une ligne et de la couleur de chaque colonne.&amp;lt;br&amp;gt;&lt;br /&gt;
Cependant, nous ne pouvons donc choisir la couleur que d'une colonne. C'est pourquoi nous allons faire varier cet affichage ligne par ligne à une fréquence élevée afin que l’œil humain ne le remarque pas. Nous pourrons donc choisir quelle couleur sera affichée sur chaque ligne. &amp;lt;br&amp;gt;&lt;br /&gt;
Cet affichage ligne par ligne sera effectué via un multiplexeur donc le bus de sélection sera relié à un compteur 3bits cadencé sur une clock suffisamment rapide pour opérer une persistance rétinienne. &amp;lt;br&amp;gt;&lt;br /&gt;
Dans chaque bus nous avons imposé certains bits afin que la grille soit dessinée en bleu.&amp;lt;br&amp;gt;&lt;br /&gt;
Le bus multiplexé sera ensuite redirigé vers les pins de la matrice leds.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Affichage.png||center|Schéma d'affichage|Circuit logique de l'affichage]] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Tests====&lt;br /&gt;
&lt;br /&gt;
Le bloc d'affichage a été testé et deux problèmes ont été rencontrés : &lt;br /&gt;
* La sélection a été mal réfléchie&lt;br /&gt;
* Un phénomène de rebond a été remarqué sur l'oscilloscope numérique&lt;br /&gt;
&lt;br /&gt;
=====La sélection=====&lt;br /&gt;
&lt;br /&gt;
Dans la fonction d'affichage, on retourne la sélection de la ligne en logique inversée. Le problème est que dans la version 1.0 de l'affichage, un GND avait été placé en entrée du MUX de sélection. Nous n'avions pas pensé au fait que dans ce cas la, toutes les sorties seraient en permanence au GND... &amp;lt;br&amp;gt;La correction a donc été de placer un VCC en entrée et d'inverser les sorties, ainsi une seul anode de ligne sera placée sur le GND.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Selection.PNG||center|Schéma de selection|Correction de la sortie de selection]] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le schéma semble fonctionnel cependant d'autres tests restent à faire.&lt;br /&gt;
&lt;br /&gt;
=====Le rebond=====&lt;br /&gt;
&lt;br /&gt;
Lors du test de l'affichage, la clock d'affichage a été simulée par un bouton de la nanoboard et l'affichage a été relié sur une seule ligne.&amp;lt;br&amp;gt;&lt;br /&gt;
Nous étions sensé remarquer que lorsque la ligne s'allume, si on appuie sur le bouton, elle s’éteint et enfin si nous appuyons sept fois sur le bouton, la ligne se rallume. &amp;lt;br&amp;gt;&lt;br /&gt;
Rien ne se passait comme prévu, et plus précisément, il n'y avait même pas de logique dans la ré-apparition de la ligne.&amp;lt;br&amp;gt;&lt;br /&gt;
Ayant déjà été confronté à des problèmes de rebonds avec des boutons poussoir, ce phénomène a été testé sur l'oscilloscope numérique.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Rebond.png||center|Exemple de rebond|Exemple de rebond]] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous demanderons alors aux référents quelle stratégie adopter : filtrer le signal avec un condensateur en parallèle au bouton ou bien utiliser une comparaison avec registre à décalage pour vérifier la stabilité du signal avant d'envoie du front montant.&amp;lt;br&amp;gt;&lt;br /&gt;
Certes la correction du bouton n'était pas nécessaire aux tests entrepris pour l'affichage (nous aurions pu mettre une clock interne) mais ceci nous servira pour filtrer les choix effectués par l'utilisateur (haut, droite, select). &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Objectifs pour la séance prochaine====&lt;br /&gt;
&lt;br /&gt;
Les schémas effectués restent des ébauches, il y a forcément eu des oublis. Néanmoins, comme chaque schéma se compile, le passage à l'étape de mise en place de la liaison série durant la séance 2 est envisageable. Il faudra donc créer un protocole plus concret afin de savoir qui doit jouer, quand envoyer, quand recevoir des données. Si le temps le permet, quelques programmes simples seront testés sur la nanoboard afin de vérifier le fonctionnement de l'affichage de la matrice après discutions avec les enseignants au sujet du phénomène de rebond.&lt;br /&gt;
&lt;br /&gt;
=== Partie informatique ===&lt;br /&gt;
Dans cette première séance nous avons programmé l'arduino afin de créer le programme de morpion, pour pouvoir tester la partie informatique sans disposer de la partie électronique.&lt;br /&gt;
Pour cela nous avons due apprendre à utiliser une matrice de LED RGB à l'aide des codes fournit par SparkFun.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Puis nous avons pu commencer à programmer le morpion:&lt;br /&gt;
&lt;br /&gt;
*le jeu se déroule dans une matrice 3x3.&lt;br /&gt;
*le position du curseur est représentée par une lumière bleue, celle des pions du joueurs 1 par une lumière rouge et celle des pions du joueurs 2 par une lumière verte.&lt;br /&gt;
*si le curseur est sur un pions les deux couleurs s'additionnent pour donner du magenta où du cyan.&lt;br /&gt;
*le joueur se déplace à l'aide de 2 boutons poussoir,l'un permettant d'aller vers le haut, l'autre permettant d'aller à droite&lt;br /&gt;
**pour éviter plusieurs déplacements d'un coup, un délais a été mis entre deux actions&lt;br /&gt;
*une fois tout en haut, si le joueur presse le bouton pour aller vers le haut le joueur se retrouve en bas.&lt;br /&gt;
*une fois tout à droite, si le joueur presse le bouton pour aller vers la droite le joueur se retrouve à gauche. &lt;br /&gt;
*enfin un dernier bouton poussoir permet de placer un pion à l'endroit où se trouve le curseur.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Une fois les mouvements programmés il fallait régir les règles du jeu:&lt;br /&gt;
&lt;br /&gt;
*Ainsi le curseur commence toujours en haut à droite&lt;br /&gt;
*Si le un joueurs arrive a créer une ligne de 3, il gagne la partie&lt;br /&gt;
*Si aucun joueur n'arrive à gagner et que le terrain est remplit, la partie se termine sur un match nul&lt;br /&gt;
*Une fois la partie terminée, le terrain est remis à zéros&lt;br /&gt;
&lt;br /&gt;
== Séance 2 ==&lt;br /&gt;
&lt;br /&gt;
=== Partie électronique ===&lt;br /&gt;
&lt;br /&gt;
=== Partie informatique ===&lt;br /&gt;
=====Arduino=====&lt;br /&gt;
Lors de cette séance nous avons pu finir le programme arduino, pour pouvoir jouer à deux sur une la carte.&lt;br /&gt;
Cette partie a été crée pour pouvoir tester les différentes fonctions, et sera modifier lors de prochaines séances.&lt;br /&gt;
La matrice LED affiche des clignotement irrégulier de couleur rouge, mais cela ne gêne pas pour jouer.&lt;br /&gt;
&lt;br /&gt;
=====Raspberry=====&lt;br /&gt;
Nous avons pu enfin commencer notre travail sur la raspberry.&lt;br /&gt;
Apres avoir branché la raspberry en série à notre pc, nous avons pu la configurer afin qu'elle fonctionne avec le réseau de l'ecole.&lt;br /&gt;
Pour cela nous avons mis une adresse IP du réseau INSECURE de l'école sur la Raspberry, celle de notre raspberry est :172.26.79.12.&lt;br /&gt;
C'est à partir de cette adresse que nous allons acceder aux pages html du projet.&lt;br /&gt;
Pour effectuer cette configuration nous avons remplacé les lignes correspondant à la configuration de la carte Ethernet dans le fichier /etc/network/interfaces par les lignes&lt;br /&gt;
  auto eth0&lt;br /&gt;
  iface eth0 inet static&lt;br /&gt;
    address 172.26.79.12&lt;br /&gt;
    netmask 255.255.240.0&lt;br /&gt;
    gateway 172.26.79.254&lt;br /&gt;
&lt;br /&gt;
Et afin d'indiquer le serveur DNS dans /etc/resolv.conf nous avons rajouté:&lt;br /&gt;
&lt;br /&gt;
  nameserver 193.48.57.34 &lt;br /&gt;
&lt;br /&gt;
Une fois la raspberry configurée, nous pouvons accéder à notre raspberry sans liaisons série grâce à un ssh.&lt;br /&gt;
Afin d'effectuer notre projet nous avons besoin de deux bibliothèques:&lt;br /&gt;
*jquery.js que l'ont a telecharger sur http://jquery.com/ afin de faciliter la programmation en javascript&lt;br /&gt;
*une bibliothèque C de WebSocket trouvé sur http://libwebsockets.org afin de pouvoir effectuer notre programme en C utilisant le Websocket&lt;br /&gt;
&lt;br /&gt;
Notre raspberry est maintenant prête pour notre projet, nous avons pu commencer notre fichier morpion.html qui permet de joueur au morpion à deux sur le même ordinateur, ce qui permet de tester les differentes fonctions utilisés pour la suite du projet.&lt;br /&gt;
&lt;br /&gt;
== Séance 3 ==&lt;br /&gt;
&lt;br /&gt;
=== Partie électronique ===&lt;br /&gt;
&lt;br /&gt;
=== Partie informatique ===&lt;br /&gt;
&lt;br /&gt;
== Démonstration ==&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;/div&gt;</summary>
		<author><name>Tstieven</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Projet_IMA3_P1,_2015/2016,_TD2&amp;diff=31361</id>
		<title>Projet IMA3 P1, 2015/2016, TD2</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Projet_IMA3_P1,_2015/2016,_TD2&amp;diff=31361"/>
				<updated>2016-05-25T18:29:29Z</updated>
		
		<summary type="html">&lt;p&gt;Tstieven : /* Partie informatique */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Projet IMA3-SC 2015/2016 : MORPION =&lt;br /&gt;
&lt;br /&gt;
== Cahier des charges ==&lt;br /&gt;
Notre projet &amp;quot;système communicant&amp;quot; aura pour but de créer une interface connectée du &amp;quot;morpion&amp;quot;. L'objectif est de permettre à un joueur interagissant sur un site internet de jouer contre une autre personne qui, elle, jouera à l'aide d'un affichage fait à partir de leds. &lt;br /&gt;
&lt;br /&gt;
Nous cherchons donc à exploiter la capacité asynchrone d'un websocket afin de permettre une partie en temps réel.&lt;br /&gt;
&lt;br /&gt;
=== Matériel ===&lt;br /&gt;
* Une nanoboard&lt;br /&gt;
* Une raspberry pi&lt;br /&gt;
* Une matrice de leds 9x9 ou plus&lt;br /&gt;
* Un clavier numérique ou 9 boutons-poussoirs&lt;br /&gt;
* Des ordinateurs avec les logiciels de développement nécessaires &lt;br /&gt;
&lt;br /&gt;
=== Optionnel ===&lt;br /&gt;
* Un buzzer afin d'avertir le joueur d'un choix incohérent&lt;br /&gt;
* Trois afficheurs sept segments afin d'ajouter un tableau des scores&lt;br /&gt;
&lt;br /&gt;
== Séance 1 ==&lt;br /&gt;
&lt;br /&gt;
=== Partie électronique ===&lt;br /&gt;
Le but de cette première séance était de se familiariser avec le logiciel de conception Altium Designer et de réfléchir à la façon d'aborder la conception électronique du morpion.&lt;br /&gt;
&lt;br /&gt;
Cette conception se fera en plusieurs étapes :&lt;br /&gt;
&lt;br /&gt;
* gérer le positionnement d'un curseur en fonction de l'état courant de la partie&lt;br /&gt;
* gérer l'affichage de la matrice en fonction des cases remplies / sélectionnées&lt;br /&gt;
* permettre la réception et l'envoie de données à l'aide de la liaison série&lt;br /&gt;
* traiter la remise à zéro du plateau en cas de fin de partie&lt;br /&gt;
&lt;br /&gt;
====Positionnement du curseur et état de la partie====&lt;br /&gt;
&lt;br /&gt;
Dans un premier lieu, il était nécessaire de traiter les actions entrantes. En effet, si ce n'est pas au tour du joueur &amp;quot;physique&amp;quot;, l'utilisation des boutons doit être bloquée.&amp;lt;br&amp;gt;&lt;br /&gt;
Ceci consiste simplement à effectuer un ET logique entre un bit symbolisant le joueur courant (si 1 alors joueur physique, si 0 alors joueur en ligne) et l'action demandée.&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fichier:Choisir.png||center|alt=Schema de choix|Circuit logique de la permission d'action]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Une fois les choix accessibles, il faut désormais les traiter. Le traitement s'effectuera à l'aide de bascules, chaque case comportera deux bascules : une bascule de sélection (la case est-elle sélectionnée ?) et une bascule permettant de savoir si la case a déjà été jouée.&amp;lt;br&amp;gt;&lt;br /&gt;
Si la case a déjà été jouée, il ne faut empêcher l'utilisateur de la jouer.&amp;lt;br&amp;gt;&lt;br /&gt;
Nous considérerons que le joueur en ligne n'effectuera pas de choix erroné et nous testerons seulement les choix du joueur &amp;quot;physique&amp;quot;.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Traitement.png||center|alt=Schema de traitement|Circuit logique du traitement d'une action]] &amp;lt;br&amp;gt;&lt;br /&gt;
Les ronds verts permettent la distinction des 9 cases. &amp;lt;br&amp;gt;&lt;br /&gt;
Le rond jaune correspond à la zone des sorties d'état. Plus précisément, il s'agit de deux bus regroupant les cases remplies et le lieu de la case sélectionnée.&amp;lt;br&amp;gt;&lt;br /&gt;
Le rond noir correspond au choix de l'adversaire.&amp;lt;br&amp;gt;&lt;br /&gt;
Le rond orange correspond à la sortie &amp;quot;selection_done&amp;quot; qui effectue un état haut lorsqu'un choix valide a été fait par l'utilisateur.&amp;lt;br&amp;gt;&lt;br /&gt;
Le rond rouge met en évidence la zone permettant de traiter les décalage du bit de sélection. Ce décalage consiste à garder seulement UNE bascule à l'état haut en effectuant le passage logique d'une bascule à une autre en fonction du choix tout en appliquant un reset sur l'ancienne sélection. Le schéma de ce déplacement se trouve ci-dessous et est appliqué aux 9 cases.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Andor.png||center|alt=Schema permettant le déplacement|Circuit logique utilisé afin de déplacer le curseur]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Partie informatique ===&lt;br /&gt;
Dans cette première séance nous avons programmé l'arduino afin de créer le programme de morpion, pour pouvoir tester la partie informatique sans disposer de la partie électronique.&lt;br /&gt;
Pour cela nous avons due apprendre à utiliser une matrice de LED RGB à l'aide des codes fournit par SparkFun.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Puis nous avons pu commencer à programmer le morpion:&lt;br /&gt;
&lt;br /&gt;
*le jeu se déroule dans une matrice 3x3.&lt;br /&gt;
*le position du curseur est représentée par une lumière bleue, celle des pions du joueurs 1 par une lumière rouge et celle des pions du joueurs 2 par une lumière verte.&lt;br /&gt;
*si le curseur est sur un pions les deux couleurs s'additionnent pour donner du magenta où du cyan.&lt;br /&gt;
*le joueur se déplace à l'aide de 2 boutons poussoir,l'un permettant d'aller vers le haut, l'autre permettant d'aller à droite&lt;br /&gt;
**pour éviter plusieurs déplacements d'un coup, un délais a été mis entre deux actions&lt;br /&gt;
*une fois tout en haut, si le joueur presse le bouton pour aller vers le haut le joueur se retrouve en bas.&lt;br /&gt;
*une fois tout à droite, si le joueur presse le bouton pour aller vers la droite le joueur se retrouve à gauche. &lt;br /&gt;
*enfin un dernier bouton poussoir permet de placer un pion à l'endroit où se trouve le curseur.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Une fois les mouvements programmés il fallait régir les règles du jeu:&lt;br /&gt;
&lt;br /&gt;
*Ainsi le curseur commence toujours en haut à droite&lt;br /&gt;
*Si le un joueurs arrive a créer une ligne de 3, il gagne la partie&lt;br /&gt;
*Si aucun joueur n'arrive à gagner et que le terrain est remplit, la partie se termine sur un match nul&lt;br /&gt;
*Une fois la partie terminée, le terrain est remis à zéros&lt;br /&gt;
&lt;br /&gt;
== Séance 2 ==&lt;br /&gt;
&lt;br /&gt;
=== Partie électronique ===&lt;br /&gt;
&lt;br /&gt;
=== Partie informatique ===&lt;br /&gt;
&lt;br /&gt;
== Séance 3 ==&lt;br /&gt;
&lt;br /&gt;
=== Partie électronique ===&lt;br /&gt;
&lt;br /&gt;
=== Partie informatique ===&lt;br /&gt;
&lt;br /&gt;
== Démonstration ==&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;/div&gt;</summary>
		<author><name>Tstieven</name></author>	</entry>

	</feed>