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

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=R%C3%A9alit%C3%A9_Augment%C3%A9e_pour_la_chirurgie&amp;diff=10295</id>
		<title>Réalité Augmentée pour la chirurgie</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=R%C3%A9alit%C3%A9_Augment%C3%A9e_pour_la_chirurgie&amp;diff=10295"/>
				<updated>2014-02-27T15:47:43Z</updated>
		
		<summary type="html">&lt;p&gt;Cdelberg : /* Semaine 3 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Papa Momar MBOUP/ Calvin DELBERGHE&lt;br /&gt;
&lt;br /&gt;
= Présentation =&lt;br /&gt;
&lt;br /&gt;
== Description et Objectif: ==&lt;br /&gt;
&lt;br /&gt;
Notre projet consiste à assister les chirurgiens lors de chirurgies laparoscopiques. La chirurgie laparoscopique est une technique chirurgicale minimalement invasive où le chirurgien réalise une opération de l'abdomen par de petites incisions où sont placés des trocars qui permettent le passage de fins instruments chirurgicaux. Dans le cadre de ce projet, il s’agit de réaliser l’ablation de la(des) tumeur(s) présente(s) dans le foie du patient. La localisation des tumeurs ainsi que de l’ensemble du réseau vasculaire peut etre réalisé grâce à un scanner pré-opératoire et donc reconstruits en 3D. Cependant, ils ne peuvent pas être visualisés par la caméra lors de l’opération chirurgicale. &lt;br /&gt;
&lt;br /&gt;
Ainsi, le chirurgien ne peut en aucun cas connaitre la localisation de la tumeur et ne peut pas se représenter la distance qui la sépare des parois du foie. D’où le but de notre projet: aider les chirurgiens dans ces opérations. Des travaux récents de l'équipe de recherche Shacra ont permis de suivre avec une bonne précision le mouvement de structures internes du foie pendant une opération laparoscopique. Le projet consiste à utiliser ces travaux pour mélanger le flux vidéo fourni par l'endoscope aux informations calculées par la simulation pour fournir aux chirurgiens des informations utiles sur la position des structures internes du foie lors de la manipulation. Différentes pistes pourront être explorées pour ne pas surcharger le flux vidéo tout en fournissant les informations importantes (position, profondeur, distance à la surface du foie...)&lt;br /&gt;
&lt;br /&gt;
== Environnement de travail :==&lt;br /&gt;
1 ordinateur&lt;br /&gt;
&lt;br /&gt;
OpenGL 3.3 &lt;br /&gt;
&lt;br /&gt;
SDL 2.0&lt;br /&gt;
&lt;br /&gt;
IDE CodeBlocks&lt;br /&gt;
&lt;br /&gt;
= Plan d'action / Gestion de projet =&lt;br /&gt;
Dans un premier temps, nous allons commencer à suivre des tutoriaux sur le framework OpenGL. Quand on sera assez avancé, nous débuterons le codage du programme principal. Donc pour le premier semestre, le plan est de mettre en place la base du programme et de bien maîtriser OpenGL pour la suite quand on ajoutera des fonctions plus poussées dans le programme.&lt;br /&gt;
&lt;br /&gt;
= Réalisation =&lt;br /&gt;
&lt;br /&gt;
== Semaine 37 ==&lt;br /&gt;
Présentation et Choix du sujet.&lt;br /&gt;
&lt;br /&gt;
== Semaine 38 ==&lt;br /&gt;
Rencontre avec les encadrants du projet:&lt;br /&gt;
 Explication détaillée du sujet ainsi que les attentes du projet.&lt;br /&gt;
 Réception des premières données pour débuter quelques tests avec OpenGL.&lt;br /&gt;
== Semaine 39 ==&lt;br /&gt;
Installation d'OpenGL sous Windows avec CodeBlocks.&lt;br /&gt;
Début des tutoriaux sur le site du zéro:&lt;br /&gt;
&lt;br /&gt;
http://fr.openclassrooms.com/informatique/cours/developpez-vos-applications-3d-avec-opengl-3-3&lt;br /&gt;
&lt;br /&gt;
== Semaine 40 ==&lt;br /&gt;
Poursuite des tutoriaux.&lt;br /&gt;
&lt;br /&gt;
== Semaine 41 ==&lt;br /&gt;
Poursuite des tutoriaux.&lt;br /&gt;
&lt;br /&gt;
== Semaine 42 ==&lt;br /&gt;
Poursuite des tutoriaux.&lt;br /&gt;
&lt;br /&gt;
== Semaine 43 ==&lt;br /&gt;
Poursuite des tutoriaux&lt;br /&gt;
&lt;br /&gt;
== Semaine 44 ==&lt;br /&gt;
Poursuite des tutoriaux&lt;br /&gt;
&lt;br /&gt;
== Semaine 45 ==&lt;br /&gt;
Poursuite des tutoriaux&lt;br /&gt;
&lt;br /&gt;
== Semaine 46 ==&lt;br /&gt;
Poursuite des tutoriaux&lt;br /&gt;
&lt;br /&gt;
== Semaine 47 ==&lt;br /&gt;
Fin de la première partie des tutoriaux.&lt;br /&gt;
&lt;br /&gt;
== Semaine 48 ==&lt;br /&gt;
Démarrage du code du programme à partir du code réalisé pendant les tutoriels.&lt;br /&gt;
&lt;br /&gt;
== Semaine 49 ==&lt;br /&gt;
Ajout de la fonction permettant de récupérer les données des fichiers .obj contenant les vertices, les coordonnées de texture, les vecteurs normaux et les références aux faces (triangles) constituant l'objet 3D.&lt;br /&gt;
&lt;br /&gt;
== Semaine 50 ==&lt;br /&gt;
Nous sommes arrivé durant cette semaine à représenter une tumeur correctement en 3D.&lt;br /&gt;
&lt;br /&gt;
Pour représenter un structure en 3D, nous allons utiliser un ensemble de triangle. Chaque triangle est constitué de 3 vertices qui sont ces sommets. Un vertex est tout simplement un point avec trois dimensions : x,y et z. Ainsi, le but est de relier les trois sommets (vertices) formant un triangle et ensuite de relier tous les triangles. Ainsi, nous obtiendront notre structure en 3D. &lt;br /&gt;
&lt;br /&gt;
Cependant, nous rencontrons un problème quand on a un nombre de vertices élevés à représenter (de l'ordre de 20000 vertices). Une des pistes pour la résolution de ce problème est d'utiliser les display list. Cependant, les display List n'existent plus en OpenGL 3.3. Donc le problème reste irrésolu pour l'instant. On va regarder du coté des VBO (Vertex Buffer Object) et VBA(Vertex Buffer Array).&lt;br /&gt;
&lt;br /&gt;
Les &amp;quot;Display List&amp;quot; permettent un stockage des données sur la carte graphique mais ne permettent pas de mettre à jour ces données. Les &amp;quot;VertexArray&amp;quot; conservent les données dans des tampons en mémoire système ce qui permet de les modifier mais oblige à transférer toutes ces données à chaque fois qu'elles doivent être affichées.&lt;br /&gt;
&lt;br /&gt;
Un VBO est un objet OpenGL qui contient des données relatives à un modèle 3D comme les vertices, les coordonnées de texture, les normales (pour les lumières), ... Sa particularité vient du fait que les données qu'il contient se trouvent non pas dans la RAM mais directement dans la carte graphique.&lt;br /&gt;
&lt;br /&gt;
Les VBO permettent de gagner un temps considérable à OpenGL en évitant de faire des aller-retours inutiles entre la RAM et la mémoire graphique:&lt;br /&gt;
[[Fichier:interet_VBO.png]]&lt;br /&gt;
&lt;br /&gt;
[[Fichier:chargement_avec_VBO.png]]&lt;br /&gt;
&lt;br /&gt;
[[Fichier:affichage_avec_VBO.png]]&lt;br /&gt;
&lt;br /&gt;
Images prises sur : http://fr.openclassrooms.com/informatique/cours/developpez-vos-applications-3d-avec-opengl-3-3/c-est-quoi-un-vbo&lt;br /&gt;
&lt;br /&gt;
On économise ainsi le transfert de centaines de milliers de données à chaque affichage, la carte graphique peut travailler plus rapidement.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous avons aussi trouvé durant cette semaine ce site qui explique très bien la théorie de l'intersection rayon/triangle avec une traduction en code.&lt;br /&gt;
 &lt;br /&gt;
http://www.scratchapixel.com/lessons/3d-basic-lessons/lesson-9-ray-triangle-intersection/ray-triangle-intersection-geometric-solution/&lt;br /&gt;
&lt;br /&gt;
Nous avons grâce à ceci pu coder une méthode adaptée pour tester les triangles de la surface du foie et voir s'ils sont en intersection avec le rayon partant du barycentre de la tumeur et ayant pour vecteur directeur X, Y, ou Z. Une fois le bon triangle trouvé, la fonction se charge de renvoyer le point d'intersection, et il ne reste qu'a récupérer sa coordonnée en X,Y,ou Z (suivant le vecteur directeur précisé dans l'appel à la fonction) qui se trouve être la distance entre la tumeur et la surface du foie. Pour affiner un peu notre méthode, il faut d'abord l'appliquer à l'enveloppe de la tumeur elle même, puis faire de même avec la surface du foie, et soustraire les coordonnées obtenues pour les points d'intersections dans chacune des 3 direction afin d'obtenir une distance correcte pour chaque direction.&lt;br /&gt;
&lt;br /&gt;
== Semaine 51 ==&lt;br /&gt;
Rédaction du rapport d'avancement &lt;br /&gt;
&lt;br /&gt;
Rédaction de la présentation oral&lt;br /&gt;
&lt;br /&gt;
= Conclusion Première partie =&lt;br /&gt;
&lt;br /&gt;
Ce premier semestre à travailler sur ce projet a été des plus instructifs pour nous,&lt;br /&gt;
nous permettant de mieux concevoir la charge de travail que représentait celuici,&lt;br /&gt;
de&lt;br /&gt;
réaliser la chance qu’il nous était donnée de pouvoir apporter notre contribution dans le&lt;br /&gt;
domaine concret et important qu’est la médecine. Cela nous aura aussi permis de nous&lt;br /&gt;
cultiver sur les méthodes utilisées aujourd’hui en chirurgie, ainsi que de découvrir OpenGL&lt;br /&gt;
et la modélisation dans l’espace.&lt;br /&gt;
Les bases de l’application sont bien en place et le cahier des charges bien défini. Il&lt;br /&gt;
reste donc pour la seconde moitié de l’année à finaliser la modélisation des structures&lt;br /&gt;
ainsi que l’affichage de la distance entre la tumeur et la surface du foie. De plus, nous&lt;br /&gt;
devrons rendre l’application dynamique avec la récupération des flux de données en&lt;br /&gt;
temps réel par la caméra.&lt;br /&gt;
&lt;br /&gt;
= Deuxième partie =&lt;br /&gt;
== Objectifs ==&lt;br /&gt;
&lt;br /&gt;
-Résoudre le problème d'affichage du foie grâce aux VBO&lt;br /&gt;
&lt;br /&gt;
-Finir l'implémentation du calcul de distances&lt;br /&gt;
&lt;br /&gt;
-Réaliser des propositions d'affichage des distances&lt;br /&gt;
&lt;br /&gt;
== Semaine 1 ==&lt;br /&gt;
Nous avons créé une classe foie pour représenter ce dernier. De ce fait, notre programme sera plus lisible et ordonné.&lt;br /&gt;
&lt;br /&gt;
== Semaine 2 ==&lt;br /&gt;
On arrive enfin à représenter le foie. Pour celà donc, nous avons utilisé les VBO afin d'aboutir à ce résultat.&lt;br /&gt;
La prochaine étape est de représenter la tumeur et le foie en même temps.&lt;br /&gt;
Nous avons créé une classe tumeur qui s'occupe du chargement et de l'affichage de la tumeur.&lt;br /&gt;
Nous arrivons maintenant à afficher le foie et la tumeur en même temps. Cependant, vu que la tumeur se trouve à l'intérieur du foie,&lt;br /&gt;
nous allons changer l'affichage du foie de tel sorte que l'on voit que les traits reliant les triangles sans couleur ni texture.&lt;br /&gt;
On affiche désormais le foie et la tumeur ensemble avec pour le foie juste des traits pour avoir une meilleure vision de la position de la tumeur.&lt;br /&gt;
&lt;br /&gt;
== Semaine 3 ==&lt;br /&gt;
Pour cette semaine, nous sommes arrivés à calculer les distances séparant la tumeur et la surface du foie.&lt;br /&gt;
&lt;br /&gt;
Afin de récupérer la distance séparant la tumeur et le foie, on réalise des tests d’intersection rayon-triangle avec les triangles composant les meshs du foie et de la tumeur. En effet, en réalisant ce test entre un rayon partant du barycentre de la tumeur suivant la direction X,Y ou Z, et les triangles constituant le foie d’une part, et la tumeur d’autre part, on obtient deux distances (toujours selon X, Y, ou Z). La première, distance entre la paroi du foie et le barycentre de la tumeur, la seconde, distance entre la paroi de la tumeur et le barycentre de celle ci. En soustrayant la seconde à la première, on obtient la distance séparant la paroi du foie et la paroi de la tumeur selon un axe prédéfini (X, Y ou Z de notre repère). Il suffit ensuite de réaliser le calcul une fois pour chaque axe.&lt;br /&gt;
Ce calcul se réalise en plusieurs étapes mathématiques présentées ci dessous :&lt;br /&gt;
&lt;br /&gt;
::[[Fichier:Raytracing.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Afin de savoir s’il y a intersection entre un rayon et un triangle, il est plus aisé de commencer tout d’abord par vérifier s’il y a intersection entre ce même rayon et le plan contenant le triangle.&lt;br /&gt;
Pour cela, on calcule le vecteur normal du plan. Le vecteur normal du plan s’obtient en faisant le produit vectoriel de deux vecteurs non colinéaires du plan. On connaît 3 points du plan (les points constituant le triangle en train d’être testé), que l’on nommera ici v0, v1 et v2. On peut donc calculer le produit vectoriel de v0v1 et v0v2 par exemple, pour obtenir le vecteur normal N(A,B,C). Une fois le vecteur normal obtenu, on réalise le produit scalaire entre N et le rayon. Si le résultat est nul, le plan et le rayon sont parallèles donc il n’y a pas intersection. Sinon on a confirmation que le rayon et le plan entrent en intersection.&lt;br /&gt;
&lt;br /&gt;
Cela permet ensuite, si intersection il y a, de calculer les coordonnées du point d’intersection P entre le rayon et le plan. P est défini de cette façon:&lt;br /&gt;
&lt;br /&gt;
P = O + t * D&lt;br /&gt;
:::-O l’origine (ici le barycentre de la tumeur)&lt;br /&gt;
:::-D le vecteur directeur du rayon&lt;br /&gt;
:::-t la distance entre O et P &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
L’équation du plan contenant le triangle est celle-ci:&lt;br /&gt;
&lt;br /&gt;
A * x + B * y + C * z + d = 0 &lt;br /&gt;
:::-A,B et C sont les composantes du vecteur normal au &lt;br /&gt;
:::plan N(A,B,C).&lt;br /&gt;
:::-(x,y,z) un point du plan.&lt;br /&gt;
:::-d la distance de l’origine (du repère) au plan, suivant la direction du vecteur normal au plan.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Grâce aux deux formules précedentes, on en déduit le calcul de t :&lt;br /&gt;
&lt;br /&gt;
	t = - ( N . O + d ) / ( N . D)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Une fois t calculé, on peut aisément obtenir les coordonnées de P. On peut maintenant passer au deuxième test à réaliser, qui est le test d’appartenance d’un point à un triangle.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
::[[Fichier:Raytracing1.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Le principe de ce test est le suivant:&lt;br /&gt;
&lt;br /&gt;
On calcule les vecteurs partant des points du triangle et allant vers P : v0P, v1P, v2P.&lt;br /&gt;
&lt;br /&gt;
On calcule de même les vecteurs correspondants aux cotés du triangle : v0v1, v1v2, v2v0.&lt;br /&gt;
&lt;br /&gt;
On calcule le produit vectoriel de chacun de ces vecteurs avec les vecteurs contenant P:&lt;br /&gt;
&lt;br /&gt;
u = v0v1 ^ v0P, v = v1v2 ^ v1P, w = v2v0 ^ v2P.&lt;br /&gt;
&lt;br /&gt;
Si P appartient au triangle, les vecteurs u, v et w ainsi calculés seront colinéaires de même sens avec le vecteur normal au triangle N. (voir Figure 11)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
On réalise donc les tests suivants: (produit scalaire)&lt;br /&gt;
&lt;br /&gt;
N . u, N . v, N . w&lt;br /&gt;
&lt;br /&gt;
Si le résultat est positif, P est placé à l’intérieur du triangle par rapport au coté testé. (u teste le coté v0v1, v teste v1v2, w teste v2v0)&lt;br /&gt;
Si les trois tests sont positifs, cela signifie que P est bien à l’intérieur du triangle.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
::[[Fichier:Raytracing2.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Une fois ces tests concluants, on récupère la distance voulue avec le calcul suivant :&lt;br /&gt;
&lt;br /&gt;
Distance =  t * D(x,y,z) &lt;br /&gt;
&lt;br /&gt;
Ceci nous donne une distance selon les 3 axes, grâce à une comparaison du vecteur directeur et des vecteurs X, Y, et Z, on récupère uniquement la distance voulue :&lt;br /&gt;
&lt;br /&gt;
Distance = t * D.x ou t * D.y ou t *D.z&lt;br /&gt;
&lt;br /&gt;
Pour le temps restant au projet, nous allons proposer différentes solutions pour l'affichage de ces distances. &lt;br /&gt;
De même, nous allons rédiger notre rapport et nous préparer à la soutenance finale.&lt;br /&gt;
&lt;br /&gt;
== Semaine 4 ==&lt;br /&gt;
&lt;br /&gt;
= Conclusion =&lt;br /&gt;
Diagramme UML de notre application finale:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:UML.PNG]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Voici un bref résumé de chacune des classes et de leurs fonctions :&lt;br /&gt;
&lt;br /&gt;
La classe Camera.cpp s’occupe de gérer tous les placements et les orientations que la caméra va prendre.&lt;br /&gt;
&lt;br /&gt;
La classe Input.cpp s’occupe de gérer tous les évènements clavier et souris, les rendant plus simples d’utilisation.&lt;br /&gt;
&lt;br /&gt;
La classe Shader.cpp permet de charger et de compiler le shader en charge de l’affichage de couleurs sur notre représentation.&lt;br /&gt;
&lt;br /&gt;
La classe principale: SceneOpenGL.cpp qui met en relation les différentes classes, permet la création de la scène, et dans laquelle nous avons codé les différentes fonctions nécessaires au programme, notamment la fonction de calcul des distances.&lt;br /&gt;
&lt;br /&gt;
La classe Texture.cpp permet de charger des textures à la place des couleurs.&lt;br /&gt;
&lt;br /&gt;
La classe Tumor.cpp permet de récupérer les vertices de la tumeur et de l’afficher.&lt;br /&gt;
&lt;br /&gt;
La classe Liver.cpp permet de récupérer les vertices du foie et de l’afficher.&lt;br /&gt;
&lt;br /&gt;
La classe DistanceDisplay.cpp permet d’afficher les distances séparant la tumeur de la surface du foie suivant les trois axes x, y et z.&lt;/div&gt;</summary>
		<author><name>Cdelberg</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=R%C3%A9alit%C3%A9_Augment%C3%A9e_pour_la_chirurgie&amp;diff=10294</id>
		<title>Réalité Augmentée pour la chirurgie</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=R%C3%A9alit%C3%A9_Augment%C3%A9e_pour_la_chirurgie&amp;diff=10294"/>
				<updated>2014-02-27T15:08:29Z</updated>
		
		<summary type="html">&lt;p&gt;Cdelberg : /* Semaine 3 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Papa Momar MBOUP/ Calvin DELBERGHE&lt;br /&gt;
&lt;br /&gt;
= Présentation =&lt;br /&gt;
&lt;br /&gt;
== Description et Objectif: ==&lt;br /&gt;
&lt;br /&gt;
Notre projet consiste à assister les chirurgiens lors de chirurgies laparoscopiques. La chirurgie laparoscopique est une technique chirurgicale minimalement invasive où le chirurgien réalise une opération de l'abdomen par de petites incisions où sont placés des trocars qui permettent le passage de fins instruments chirurgicaux. Dans le cadre de ce projet, il s’agit de réaliser l’ablation de la(des) tumeur(s) présente(s) dans le foie du patient. La localisation des tumeurs ainsi que de l’ensemble du réseau vasculaire peut etre réalisé grâce à un scanner pré-opératoire et donc reconstruits en 3D. Cependant, ils ne peuvent pas être visualisés par la caméra lors de l’opération chirurgicale. &lt;br /&gt;
&lt;br /&gt;
Ainsi, le chirurgien ne peut en aucun cas connaitre la localisation de la tumeur et ne peut pas se représenter la distance qui la sépare des parois du foie. D’où le but de notre projet: aider les chirurgiens dans ces opérations. Des travaux récents de l'équipe de recherche Shacra ont permis de suivre avec une bonne précision le mouvement de structures internes du foie pendant une opération laparoscopique. Le projet consiste à utiliser ces travaux pour mélanger le flux vidéo fourni par l'endoscope aux informations calculées par la simulation pour fournir aux chirurgiens des informations utiles sur la position des structures internes du foie lors de la manipulation. Différentes pistes pourront être explorées pour ne pas surcharger le flux vidéo tout en fournissant les informations importantes (position, profondeur, distance à la surface du foie...)&lt;br /&gt;
&lt;br /&gt;
== Environnement de travail :==&lt;br /&gt;
1 ordinateur&lt;br /&gt;
&lt;br /&gt;
OpenGL 3.3 &lt;br /&gt;
&lt;br /&gt;
SDL 2.0&lt;br /&gt;
&lt;br /&gt;
IDE CodeBlocks&lt;br /&gt;
&lt;br /&gt;
= Plan d'action / Gestion de projet =&lt;br /&gt;
Dans un premier temps, nous allons commencer à suivre des tutoriaux sur le framework OpenGL. Quand on sera assez avancé, nous débuterons le codage du programme principal. Donc pour le premier semestre, le plan est de mettre en place la base du programme et de bien maîtriser OpenGL pour la suite quand on ajoutera des fonctions plus poussées dans le programme.&lt;br /&gt;
&lt;br /&gt;
= Réalisation =&lt;br /&gt;
&lt;br /&gt;
== Semaine 37 ==&lt;br /&gt;
Présentation et Choix du sujet.&lt;br /&gt;
&lt;br /&gt;
== Semaine 38 ==&lt;br /&gt;
Rencontre avec les encadrants du projet:&lt;br /&gt;
 Explication détaillée du sujet ainsi que les attentes du projet.&lt;br /&gt;
 Réception des premières données pour débuter quelques tests avec OpenGL.&lt;br /&gt;
== Semaine 39 ==&lt;br /&gt;
Installation d'OpenGL sous Windows avec CodeBlocks.&lt;br /&gt;
Début des tutoriaux sur le site du zéro:&lt;br /&gt;
&lt;br /&gt;
http://fr.openclassrooms.com/informatique/cours/developpez-vos-applications-3d-avec-opengl-3-3&lt;br /&gt;
&lt;br /&gt;
== Semaine 40 ==&lt;br /&gt;
Poursuite des tutoriaux.&lt;br /&gt;
&lt;br /&gt;
== Semaine 41 ==&lt;br /&gt;
Poursuite des tutoriaux.&lt;br /&gt;
&lt;br /&gt;
== Semaine 42 ==&lt;br /&gt;
Poursuite des tutoriaux.&lt;br /&gt;
&lt;br /&gt;
== Semaine 43 ==&lt;br /&gt;
Poursuite des tutoriaux&lt;br /&gt;
&lt;br /&gt;
== Semaine 44 ==&lt;br /&gt;
Poursuite des tutoriaux&lt;br /&gt;
&lt;br /&gt;
== Semaine 45 ==&lt;br /&gt;
Poursuite des tutoriaux&lt;br /&gt;
&lt;br /&gt;
== Semaine 46 ==&lt;br /&gt;
Poursuite des tutoriaux&lt;br /&gt;
&lt;br /&gt;
== Semaine 47 ==&lt;br /&gt;
Fin de la première partie des tutoriaux.&lt;br /&gt;
&lt;br /&gt;
== Semaine 48 ==&lt;br /&gt;
Démarrage du code du programme à partir du code réalisé pendant les tutoriels.&lt;br /&gt;
&lt;br /&gt;
== Semaine 49 ==&lt;br /&gt;
Ajout de la fonction permettant de récupérer les données des fichiers .obj contenant les vertices, les coordonnées de texture, les vecteurs normaux et les références aux faces (triangles) constituant l'objet 3D.&lt;br /&gt;
&lt;br /&gt;
== Semaine 50 ==&lt;br /&gt;
Nous sommes arrivé durant cette semaine à représenter une tumeur correctement en 3D.&lt;br /&gt;
&lt;br /&gt;
Pour représenter un structure en 3D, nous allons utiliser un ensemble de triangle. Chaque triangle est constitué de 3 vertices qui sont ces sommets. Un vertex est tout simplement un point avec trois dimensions : x,y et z. Ainsi, le but est de relier les trois sommets (vertices) formant un triangle et ensuite de relier tous les triangles. Ainsi, nous obtiendront notre structure en 3D. &lt;br /&gt;
&lt;br /&gt;
Cependant, nous rencontrons un problème quand on a un nombre de vertices élevés à représenter (de l'ordre de 20000 vertices). Une des pistes pour la résolution de ce problème est d'utiliser les display list. Cependant, les display List n'existent plus en OpenGL 3.3. Donc le problème reste irrésolu pour l'instant. On va regarder du coté des VBO (Vertex Buffer Object) et VBA(Vertex Buffer Array).&lt;br /&gt;
&lt;br /&gt;
Les &amp;quot;Display List&amp;quot; permettent un stockage des données sur la carte graphique mais ne permettent pas de mettre à jour ces données. Les &amp;quot;VertexArray&amp;quot; conservent les données dans des tampons en mémoire système ce qui permet de les modifier mais oblige à transférer toutes ces données à chaque fois qu'elles doivent être affichées.&lt;br /&gt;
&lt;br /&gt;
Un VBO est un objet OpenGL qui contient des données relatives à un modèle 3D comme les vertices, les coordonnées de texture, les normales (pour les lumières), ... Sa particularité vient du fait que les données qu'il contient se trouvent non pas dans la RAM mais directement dans la carte graphique.&lt;br /&gt;
&lt;br /&gt;
Les VBO permettent de gagner un temps considérable à OpenGL en évitant de faire des aller-retours inutiles entre la RAM et la mémoire graphique:&lt;br /&gt;
[[Fichier:interet_VBO.png]]&lt;br /&gt;
&lt;br /&gt;
[[Fichier:chargement_avec_VBO.png]]&lt;br /&gt;
&lt;br /&gt;
[[Fichier:affichage_avec_VBO.png]]&lt;br /&gt;
&lt;br /&gt;
Images prises sur : http://fr.openclassrooms.com/informatique/cours/developpez-vos-applications-3d-avec-opengl-3-3/c-est-quoi-un-vbo&lt;br /&gt;
&lt;br /&gt;
On économise ainsi le transfert de centaines de milliers de données à chaque affichage, la carte graphique peut travailler plus rapidement.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous avons aussi trouvé durant cette semaine ce site qui explique très bien la théorie de l'intersection rayon/triangle avec une traduction en code.&lt;br /&gt;
 &lt;br /&gt;
http://www.scratchapixel.com/lessons/3d-basic-lessons/lesson-9-ray-triangle-intersection/ray-triangle-intersection-geometric-solution/&lt;br /&gt;
&lt;br /&gt;
Nous avons grâce à ceci pu coder une méthode adaptée pour tester les triangles de la surface du foie et voir s'ils sont en intersection avec le rayon partant du barycentre de la tumeur et ayant pour vecteur directeur X, Y, ou Z. Une fois le bon triangle trouvé, la fonction se charge de renvoyer le point d'intersection, et il ne reste qu'a récupérer sa coordonnée en X,Y,ou Z (suivant le vecteur directeur précisé dans l'appel à la fonction) qui se trouve être la distance entre la tumeur et la surface du foie. Pour affiner un peu notre méthode, il faut d'abord l'appliquer à l'enveloppe de la tumeur elle même, puis faire de même avec la surface du foie, et soustraire les coordonnées obtenues pour les points d'intersections dans chacune des 3 direction afin d'obtenir une distance correcte pour chaque direction.&lt;br /&gt;
&lt;br /&gt;
== Semaine 51 ==&lt;br /&gt;
Rédaction du rapport d'avancement &lt;br /&gt;
&lt;br /&gt;
Rédaction de la présentation oral&lt;br /&gt;
&lt;br /&gt;
= Conclusion Première partie =&lt;br /&gt;
&lt;br /&gt;
Ce premier semestre à travailler sur ce projet a été des plus instructifs pour nous,&lt;br /&gt;
nous permettant de mieux concevoir la charge de travail que représentait celuici,&lt;br /&gt;
de&lt;br /&gt;
réaliser la chance qu’il nous était donnée de pouvoir apporter notre contribution dans le&lt;br /&gt;
domaine concret et important qu’est la médecine. Cela nous aura aussi permis de nous&lt;br /&gt;
cultiver sur les méthodes utilisées aujourd’hui en chirurgie, ainsi que de découvrir OpenGL&lt;br /&gt;
et la modélisation dans l’espace.&lt;br /&gt;
Les bases de l’application sont bien en place et le cahier des charges bien défini. Il&lt;br /&gt;
reste donc pour la seconde moitié de l’année à finaliser la modélisation des structures&lt;br /&gt;
ainsi que l’affichage de la distance entre la tumeur et la surface du foie. De plus, nous&lt;br /&gt;
devrons rendre l’application dynamique avec la récupération des flux de données en&lt;br /&gt;
temps réel par la caméra.&lt;br /&gt;
&lt;br /&gt;
= Deuxième partie =&lt;br /&gt;
== Objectifs ==&lt;br /&gt;
&lt;br /&gt;
-Résoudre le problème d'affichage du foie grâce aux VBO&lt;br /&gt;
&lt;br /&gt;
-Finir l'implémentation du calcul de distances&lt;br /&gt;
&lt;br /&gt;
-Réaliser des propositions d'affichage des distances&lt;br /&gt;
&lt;br /&gt;
== Semaine 1 ==&lt;br /&gt;
Nous avons créé une classe foie pour représenter ce dernier. De ce fait, notre programme sera plus lisible et ordonné.&lt;br /&gt;
&lt;br /&gt;
== Semaine 2 ==&lt;br /&gt;
On arrive enfin à représenter le foie. Pour celà donc, nous avons utilisé les VBO afin d'aboutir à ce résultat.&lt;br /&gt;
La prochaine étape est de représenter la tumeur et le foie en même temps.&lt;br /&gt;
Nous avons créé une classe tumeur qui s'occupe du chargement et de l'affichage de la tumeur.&lt;br /&gt;
Nous arrivons maintenant à afficher le foie et la tumeur en même temps. Cependant, vu que la tumeur se trouve à l'intérieur du foie,&lt;br /&gt;
nous allons changer l'affichage du foie de tel sorte que l'on voit que les traits reliant les triangles sans couleur ni texture.&lt;br /&gt;
On affiche désormais le foie et la tumeur ensemble avec pour le foie juste des traits pour avoir une meilleure vision de la position de la tumeur.&lt;br /&gt;
&lt;br /&gt;
== Semaine 3 ==&lt;br /&gt;
Pour cette semaine, nous sommes arrivés à calculer les distances séparant la tumeur et la surface du foie.&lt;br /&gt;
&lt;br /&gt;
Afin de récupérer la distance séparant la tumeur et le foie, on réalise des tests d’intersection rayon-triangle avec les triangles composant les meshs du foie et de la tumeur. En effet, en réalisant ce test entre un rayon partant du barycentre de la tumeur suivant la direction X,Y ou Z, et les triangles constituant le foie d’une part, et la tumeur d’autre part, on obtient deux distances (toujours selon X, Y, ou Z). La première, distance entre la paroi du foie et le barycentre de la tumeur, la seconde, distance entre la paroi de la tumeur et le barycentre de celle ci. En soustrayant la seconde à la première, on obtient la distance séparant la paroi du foie et la paroi de la tumeur selon un axe prédéfini (X, Y ou Z de notre repère). Il suffit ensuite de réaliser le calcul une fois pour chaque axe.&lt;br /&gt;
Ce calcul se réalise en plusieurs étapes mathématiques présentées ci dessous :&lt;br /&gt;
&lt;br /&gt;
Image rayon [[Fichier:Raytracing.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Afin de savoir s’il y a intersection entre un rayon et un triangle, il est plus aisé de commencer tout d’abord par vérifier s’il y a intersection entre ce même rayon et le plan contenant le triangle.&lt;br /&gt;
Pour cela, on calcule le vecteur normal du plan. Le vecteur normal du plan s’obtient en faisant le produit vectoriel de deux vecteurs non colinéaires du plan. On connaît 3 points du plan (les points constituant le triangle en train d’être testé), que l’on nommera ici v0, v1 et v2. On peut donc calculer le produit vectoriel de v0v1 et v0v2 par exemple, pour obtenir le vecteur normal N(A,B,C). Une fois le vecteur normal obtenu, on réalise le produit scalaire entre N et le rayon. Si le résultat est nul, le plan et le rayon sont parallèles donc il n’y a pas intersection. Sinon on a confirmation que le rayon et le plan entrent en intersection.&lt;br /&gt;
&lt;br /&gt;
Cela permet ensuite, si intersection il y a, de calculer les coordonnées du point d’intersection P entre le rayon et le plan. P est défini de cette façon:&lt;br /&gt;
&lt;br /&gt;
P = O + t * D&lt;br /&gt;
:::-O l’origine (ici le barycentre de la tumeur)&lt;br /&gt;
:::-D le vecteur directeur du rayon&lt;br /&gt;
:::-t la distance entre O et P &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
L’équation du plan contenant le triangle est celle-ci:&lt;br /&gt;
&lt;br /&gt;
A * x + B * y + C * z + d = 0 &lt;br /&gt;
:::-A,B et C sont les composantes du vecteur normal au &lt;br /&gt;
:::plan N(A,B,C).&lt;br /&gt;
:::-(x,y,z) un point du plan.&lt;br /&gt;
:::-d la distance de l’origine (du repère) au plan, suivant la direction du vecteur normal au plan.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Grâce aux deux formules précedentes, on en déduit le calcul de t :&lt;br /&gt;
&lt;br /&gt;
	t = - ( N . O + d ) / ( N . D)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Une fois t calculé, on peut aisément obtenir les coordonnées de P. On peut maintenant passer au deuxième test à réaliser, qui est le test d’appartenance d’un point à un triangle.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Raytracing1.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Le principe de ce test est le suivant:&lt;br /&gt;
&lt;br /&gt;
On calcule les vecteurs partant des points du triangle et allant vers P : v0P, v1P, v2P.&lt;br /&gt;
&lt;br /&gt;
On calcule de même les vecteurs correspondants aux cotés du triangle : v0v1, v1v2, v2v0.&lt;br /&gt;
&lt;br /&gt;
On calcule le produit vectoriel de chacun de ces vecteurs avec les vecteurs contenant P:&lt;br /&gt;
&lt;br /&gt;
u = v0v1 ^ v0P, v = v1v2 ^ v1P, w = v2v0 ^ v2P.&lt;br /&gt;
&lt;br /&gt;
Si P appartient au triangle, les vecteurs u, v et w ainsi calculés seront colinéaires de même sens avec le vecteur normal au triangle N. (voir Figure 11)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
On réalise donc les tests suivants: (produit scalaire)&lt;br /&gt;
&lt;br /&gt;
N . u, N . v, N . w&lt;br /&gt;
&lt;br /&gt;
Si le résultat est positif, P est placé à l’intérieur du triangle par rapport au coté testé. (u teste le coté v0v1, v teste v1v2, w teste v2v0)&lt;br /&gt;
Si les trois tests sont positifs, cela signifie que P est bien à l’intérieur du triangle.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Raytracing2.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Une fois ces tests concluants, on récupère la distance voulue avec le calcul suivant :&lt;br /&gt;
&lt;br /&gt;
Distance =  t * D(x,y,z) &lt;br /&gt;
&lt;br /&gt;
Ceci nous donne une distance selon les 3 axes, grâce à une comparaison du vecteur directeur et des vecteurs X, Y, et Z, on récupère uniquement la distance voulue :&lt;br /&gt;
&lt;br /&gt;
Distance = t * D.x ou t * D.y ou t *D.z&lt;br /&gt;
&lt;br /&gt;
Pour le temps restant au projet, nous allons proposer différentes solutions pour l'affichage de ces distances. &lt;br /&gt;
De même, nous allons rédiger notre rapport et nous préparer à la soutenance finale.&lt;br /&gt;
&lt;br /&gt;
== Semaine 4 ==&lt;br /&gt;
&lt;br /&gt;
= Conclusion =&lt;br /&gt;
Diagramme UML de notre application finale:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:UML.PNG]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Voici un bref résumé de chacune des classes et de leurs fonctions :&lt;br /&gt;
&lt;br /&gt;
La classe Camera.cpp s’occupe de gérer tous les placements et les orientations que la caméra va prendre.&lt;br /&gt;
&lt;br /&gt;
La classe Input.cpp s’occupe de gérer tous les évènements clavier et souris, les rendant plus simples d’utilisation.&lt;br /&gt;
&lt;br /&gt;
La classe Shader.cpp permet de charger et de compiler le shader en charge de l’affichage de couleurs sur notre représentation.&lt;br /&gt;
&lt;br /&gt;
La classe principale: SceneOpenGL.cpp qui met en relation les différentes classes, permet la création de la scène, et dans laquelle nous avons codé les différentes fonctions nécessaires au programme, notamment la fonction de calcul des distances.&lt;br /&gt;
&lt;br /&gt;
La classe Texture.cpp permet de charger des textures à la place des couleurs.&lt;br /&gt;
&lt;br /&gt;
La classe Tumor.cpp permet de récupérer les vertices de la tumeur et de l’afficher.&lt;br /&gt;
&lt;br /&gt;
La classe Liver.cpp permet de récupérer les vertices du foie et de l’afficher.&lt;br /&gt;
&lt;br /&gt;
La classe DistanceDisplay.cpp permet d’afficher les distances séparant la tumeur de la surface du foie suivant les trois axes x, y et z.&lt;/div&gt;</summary>
		<author><name>Cdelberg</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=R%C3%A9alit%C3%A9_Augment%C3%A9e_pour_la_chirurgie&amp;diff=10293</id>
		<title>Réalité Augmentée pour la chirurgie</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=R%C3%A9alit%C3%A9_Augment%C3%A9e_pour_la_chirurgie&amp;diff=10293"/>
				<updated>2014-02-27T15:07:34Z</updated>
		
		<summary type="html">&lt;p&gt;Cdelberg : /* Semaine 3 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Papa Momar MBOUP/ Calvin DELBERGHE&lt;br /&gt;
&lt;br /&gt;
= Présentation =&lt;br /&gt;
&lt;br /&gt;
== Description et Objectif: ==&lt;br /&gt;
&lt;br /&gt;
Notre projet consiste à assister les chirurgiens lors de chirurgies laparoscopiques. La chirurgie laparoscopique est une technique chirurgicale minimalement invasive où le chirurgien réalise une opération de l'abdomen par de petites incisions où sont placés des trocars qui permettent le passage de fins instruments chirurgicaux. Dans le cadre de ce projet, il s’agit de réaliser l’ablation de la(des) tumeur(s) présente(s) dans le foie du patient. La localisation des tumeurs ainsi que de l’ensemble du réseau vasculaire peut etre réalisé grâce à un scanner pré-opératoire et donc reconstruits en 3D. Cependant, ils ne peuvent pas être visualisés par la caméra lors de l’opération chirurgicale. &lt;br /&gt;
&lt;br /&gt;
Ainsi, le chirurgien ne peut en aucun cas connaitre la localisation de la tumeur et ne peut pas se représenter la distance qui la sépare des parois du foie. D’où le but de notre projet: aider les chirurgiens dans ces opérations. Des travaux récents de l'équipe de recherche Shacra ont permis de suivre avec une bonne précision le mouvement de structures internes du foie pendant une opération laparoscopique. Le projet consiste à utiliser ces travaux pour mélanger le flux vidéo fourni par l'endoscope aux informations calculées par la simulation pour fournir aux chirurgiens des informations utiles sur la position des structures internes du foie lors de la manipulation. Différentes pistes pourront être explorées pour ne pas surcharger le flux vidéo tout en fournissant les informations importantes (position, profondeur, distance à la surface du foie...)&lt;br /&gt;
&lt;br /&gt;
== Environnement de travail :==&lt;br /&gt;
1 ordinateur&lt;br /&gt;
&lt;br /&gt;
OpenGL 3.3 &lt;br /&gt;
&lt;br /&gt;
SDL 2.0&lt;br /&gt;
&lt;br /&gt;
IDE CodeBlocks&lt;br /&gt;
&lt;br /&gt;
= Plan d'action / Gestion de projet =&lt;br /&gt;
Dans un premier temps, nous allons commencer à suivre des tutoriaux sur le framework OpenGL. Quand on sera assez avancé, nous débuterons le codage du programme principal. Donc pour le premier semestre, le plan est de mettre en place la base du programme et de bien maîtriser OpenGL pour la suite quand on ajoutera des fonctions plus poussées dans le programme.&lt;br /&gt;
&lt;br /&gt;
= Réalisation =&lt;br /&gt;
&lt;br /&gt;
== Semaine 37 ==&lt;br /&gt;
Présentation et Choix du sujet.&lt;br /&gt;
&lt;br /&gt;
== Semaine 38 ==&lt;br /&gt;
Rencontre avec les encadrants du projet:&lt;br /&gt;
 Explication détaillée du sujet ainsi que les attentes du projet.&lt;br /&gt;
 Réception des premières données pour débuter quelques tests avec OpenGL.&lt;br /&gt;
== Semaine 39 ==&lt;br /&gt;
Installation d'OpenGL sous Windows avec CodeBlocks.&lt;br /&gt;
Début des tutoriaux sur le site du zéro:&lt;br /&gt;
&lt;br /&gt;
http://fr.openclassrooms.com/informatique/cours/developpez-vos-applications-3d-avec-opengl-3-3&lt;br /&gt;
&lt;br /&gt;
== Semaine 40 ==&lt;br /&gt;
Poursuite des tutoriaux.&lt;br /&gt;
&lt;br /&gt;
== Semaine 41 ==&lt;br /&gt;
Poursuite des tutoriaux.&lt;br /&gt;
&lt;br /&gt;
== Semaine 42 ==&lt;br /&gt;
Poursuite des tutoriaux.&lt;br /&gt;
&lt;br /&gt;
== Semaine 43 ==&lt;br /&gt;
Poursuite des tutoriaux&lt;br /&gt;
&lt;br /&gt;
== Semaine 44 ==&lt;br /&gt;
Poursuite des tutoriaux&lt;br /&gt;
&lt;br /&gt;
== Semaine 45 ==&lt;br /&gt;
Poursuite des tutoriaux&lt;br /&gt;
&lt;br /&gt;
== Semaine 46 ==&lt;br /&gt;
Poursuite des tutoriaux&lt;br /&gt;
&lt;br /&gt;
== Semaine 47 ==&lt;br /&gt;
Fin de la première partie des tutoriaux.&lt;br /&gt;
&lt;br /&gt;
== Semaine 48 ==&lt;br /&gt;
Démarrage du code du programme à partir du code réalisé pendant les tutoriels.&lt;br /&gt;
&lt;br /&gt;
== Semaine 49 ==&lt;br /&gt;
Ajout de la fonction permettant de récupérer les données des fichiers .obj contenant les vertices, les coordonnées de texture, les vecteurs normaux et les références aux faces (triangles) constituant l'objet 3D.&lt;br /&gt;
&lt;br /&gt;
== Semaine 50 ==&lt;br /&gt;
Nous sommes arrivé durant cette semaine à représenter une tumeur correctement en 3D.&lt;br /&gt;
&lt;br /&gt;
Pour représenter un structure en 3D, nous allons utiliser un ensemble de triangle. Chaque triangle est constitué de 3 vertices qui sont ces sommets. Un vertex est tout simplement un point avec trois dimensions : x,y et z. Ainsi, le but est de relier les trois sommets (vertices) formant un triangle et ensuite de relier tous les triangles. Ainsi, nous obtiendront notre structure en 3D. &lt;br /&gt;
&lt;br /&gt;
Cependant, nous rencontrons un problème quand on a un nombre de vertices élevés à représenter (de l'ordre de 20000 vertices). Une des pistes pour la résolution de ce problème est d'utiliser les display list. Cependant, les display List n'existent plus en OpenGL 3.3. Donc le problème reste irrésolu pour l'instant. On va regarder du coté des VBO (Vertex Buffer Object) et VBA(Vertex Buffer Array).&lt;br /&gt;
&lt;br /&gt;
Les &amp;quot;Display List&amp;quot; permettent un stockage des données sur la carte graphique mais ne permettent pas de mettre à jour ces données. Les &amp;quot;VertexArray&amp;quot; conservent les données dans des tampons en mémoire système ce qui permet de les modifier mais oblige à transférer toutes ces données à chaque fois qu'elles doivent être affichées.&lt;br /&gt;
&lt;br /&gt;
Un VBO est un objet OpenGL qui contient des données relatives à un modèle 3D comme les vertices, les coordonnées de texture, les normales (pour les lumières), ... Sa particularité vient du fait que les données qu'il contient se trouvent non pas dans la RAM mais directement dans la carte graphique.&lt;br /&gt;
&lt;br /&gt;
Les VBO permettent de gagner un temps considérable à OpenGL en évitant de faire des aller-retours inutiles entre la RAM et la mémoire graphique:&lt;br /&gt;
[[Fichier:interet_VBO.png]]&lt;br /&gt;
&lt;br /&gt;
[[Fichier:chargement_avec_VBO.png]]&lt;br /&gt;
&lt;br /&gt;
[[Fichier:affichage_avec_VBO.png]]&lt;br /&gt;
&lt;br /&gt;
Images prises sur : http://fr.openclassrooms.com/informatique/cours/developpez-vos-applications-3d-avec-opengl-3-3/c-est-quoi-un-vbo&lt;br /&gt;
&lt;br /&gt;
On économise ainsi le transfert de centaines de milliers de données à chaque affichage, la carte graphique peut travailler plus rapidement.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous avons aussi trouvé durant cette semaine ce site qui explique très bien la théorie de l'intersection rayon/triangle avec une traduction en code.&lt;br /&gt;
 &lt;br /&gt;
http://www.scratchapixel.com/lessons/3d-basic-lessons/lesson-9-ray-triangle-intersection/ray-triangle-intersection-geometric-solution/&lt;br /&gt;
&lt;br /&gt;
Nous avons grâce à ceci pu coder une méthode adaptée pour tester les triangles de la surface du foie et voir s'ils sont en intersection avec le rayon partant du barycentre de la tumeur et ayant pour vecteur directeur X, Y, ou Z. Une fois le bon triangle trouvé, la fonction se charge de renvoyer le point d'intersection, et il ne reste qu'a récupérer sa coordonnée en X,Y,ou Z (suivant le vecteur directeur précisé dans l'appel à la fonction) qui se trouve être la distance entre la tumeur et la surface du foie. Pour affiner un peu notre méthode, il faut d'abord l'appliquer à l'enveloppe de la tumeur elle même, puis faire de même avec la surface du foie, et soustraire les coordonnées obtenues pour les points d'intersections dans chacune des 3 direction afin d'obtenir une distance correcte pour chaque direction.&lt;br /&gt;
&lt;br /&gt;
== Semaine 51 ==&lt;br /&gt;
Rédaction du rapport d'avancement &lt;br /&gt;
&lt;br /&gt;
Rédaction de la présentation oral&lt;br /&gt;
&lt;br /&gt;
= Conclusion Première partie =&lt;br /&gt;
&lt;br /&gt;
Ce premier semestre à travailler sur ce projet a été des plus instructifs pour nous,&lt;br /&gt;
nous permettant de mieux concevoir la charge de travail que représentait celuici,&lt;br /&gt;
de&lt;br /&gt;
réaliser la chance qu’il nous était donnée de pouvoir apporter notre contribution dans le&lt;br /&gt;
domaine concret et important qu’est la médecine. Cela nous aura aussi permis de nous&lt;br /&gt;
cultiver sur les méthodes utilisées aujourd’hui en chirurgie, ainsi que de découvrir OpenGL&lt;br /&gt;
et la modélisation dans l’espace.&lt;br /&gt;
Les bases de l’application sont bien en place et le cahier des charges bien défini. Il&lt;br /&gt;
reste donc pour la seconde moitié de l’année à finaliser la modélisation des structures&lt;br /&gt;
ainsi que l’affichage de la distance entre la tumeur et la surface du foie. De plus, nous&lt;br /&gt;
devrons rendre l’application dynamique avec la récupération des flux de données en&lt;br /&gt;
temps réel par la caméra.&lt;br /&gt;
&lt;br /&gt;
= Deuxième partie =&lt;br /&gt;
== Objectifs ==&lt;br /&gt;
&lt;br /&gt;
-Résoudre le problème d'affichage du foie grâce aux VBO&lt;br /&gt;
&lt;br /&gt;
-Finir l'implémentation du calcul de distances&lt;br /&gt;
&lt;br /&gt;
-Réaliser des propositions d'affichage des distances&lt;br /&gt;
&lt;br /&gt;
== Semaine 1 ==&lt;br /&gt;
Nous avons créé une classe foie pour représenter ce dernier. De ce fait, notre programme sera plus lisible et ordonné.&lt;br /&gt;
&lt;br /&gt;
== Semaine 2 ==&lt;br /&gt;
On arrive enfin à représenter le foie. Pour celà donc, nous avons utilisé les VBO afin d'aboutir à ce résultat.&lt;br /&gt;
La prochaine étape est de représenter la tumeur et le foie en même temps.&lt;br /&gt;
Nous avons créé une classe tumeur qui s'occupe du chargement et de l'affichage de la tumeur.&lt;br /&gt;
Nous arrivons maintenant à afficher le foie et la tumeur en même temps. Cependant, vu que la tumeur se trouve à l'intérieur du foie,&lt;br /&gt;
nous allons changer l'affichage du foie de tel sorte que l'on voit que les traits reliant les triangles sans couleur ni texture.&lt;br /&gt;
On affiche désormais le foie et la tumeur ensemble avec pour le foie juste des traits pour avoir une meilleure vision de la position de la tumeur.&lt;br /&gt;
&lt;br /&gt;
== Semaine 3 ==&lt;br /&gt;
Pour cette semaine, nous sommes arrivés à calculer les distances séparant la tumeur et la surface du foie.&lt;br /&gt;
&lt;br /&gt;
Afin de récupérer la distance séparant la tumeur et le foie, on réalise des tests d’intersection rayon-triangle avec les triangles composant les meshs du foie et de la tumeur. En effet, en réalisant ce test entre un rayon partant du barycentre de la tumeur suivant la direction X,Y ou Z, et les triangles constituant le foie d’une part, et la tumeur d’autre part, on obtient deux distances (toujours selon X, Y, ou Z). La première, distance entre la paroi du foie et le barycentre de la tumeur, la seconde, distance entre la paroi de la tumeur et le barycentre de celle ci. En soustrayant la seconde à la première, on obtient la distance séparant la paroi du foie et la paroi de la tumeur selon un axe prédéfini (X, Y ou Z de notre repère). Il suffit ensuite de réaliser le calcul une fois pour chaque axe.&lt;br /&gt;
Ce calcul se réalise en plusieurs étapes mathématiques présentées ci dessous :&lt;br /&gt;
&lt;br /&gt;
Image rayon [[Fichier:Raytracing.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Afin de savoir s’il y a intersection entre un rayon et un triangle, il est plus aisé de commencer tout d’abord par vérifier s’il y a intersection entre ce même rayon et le plan contenant le triangle.&lt;br /&gt;
Pour cela, on calcule le vecteur normal du plan. Le vecteur normal du plan s’obtient en faisant le produit vectoriel de deux vecteurs non colinéaires du plan. On connaît 3 points du plan (les points constituant le triangle en train d’être testé), que l’on nommera ici v0, v1 et v2. On peut donc calculer le produit vectoriel de v0v1 et v0v2 par exemple, pour obtenir le vecteur normal N(A,B,C). Une fois le vecteur normal obtenu, on réalise le produit scalaire entre N et le rayon. Si le résultat est nul, le plan et le rayon sont parallèles donc il n’y a pas intersection. Sinon on a confirmation que le rayon et le plan entrent en intersection.&lt;br /&gt;
&lt;br /&gt;
Cela permet ensuite, si intersection il y a, de calculer les coordonnées du point d’intersection P entre le rayon et le plan. P est défini de cette façon:&lt;br /&gt;
&lt;br /&gt;
P = O + t * D&lt;br /&gt;
:::-O l’origine (ici le barycentre de la tumeur)&lt;br /&gt;
:::-D le vecteur directeur du rayon&lt;br /&gt;
:::-t la distance entre O et P &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
L’équation du plan contenant le triangle est celle-ci:&lt;br /&gt;
&lt;br /&gt;
A * x + B * y + C * z + d = 0 &lt;br /&gt;
:::-A,B et C sont les composantes du vecteur normal au &lt;br /&gt;
:::plan N(A,B,C).&lt;br /&gt;
:::-(x,y,z) un point du plan.&lt;br /&gt;
:::-d la distance de l’origine (du repère) au plan, suivant la direction du vecteur normal au plan.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Grâce aux deux formules précedentes, on en déduit le calcul de t :&lt;br /&gt;
&lt;br /&gt;
	t = - ( N . O + d ) / ( N . D)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Une fois t calculé, on peut aisément obtenir les coordonnées de P. On peut maintenant passer au deuxième test à réaliser, qui est le test d’appartenance d’un point à un triangle.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Raytracing1.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Le principe de ce test est le suivant:&lt;br /&gt;
On calcule les vecteurs partant des points du triangle et allant vers P : v0P, v1P, v2P.&lt;br /&gt;
On calcule de même les vecteurs correspondants aux cotés du triangle : v0v1, v1v2, v2v0.&lt;br /&gt;
On calcule le produit vectoriel de chacun de ces vecteurs avec les vecteurs contenant P:&lt;br /&gt;
u = v0v1 ^ v0P, v = v1v2 ^ v1P, w = v2v0 ^ v2P.&lt;br /&gt;
Si P appartient au triangle, les vecteurs u, v et w ainsi calculés seront colinéaires de même sens avec le vecteur normal au triangle N. (voir Figure 11)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
On réalise donc les tests suivants: (produit scalaire)&lt;br /&gt;
N . u, N . v, N . w&lt;br /&gt;
&lt;br /&gt;
Si le résultat est positif, P est placé à l’intérieur du triangle par rapport au coté testé. (u teste le coté v0v1, v teste v1v2, w teste v2v0)&lt;br /&gt;
Si les trois tests sont positifs, cela signifie que P est bien à l’intérieur du triangle.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Raytracing2.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Une fois ces tests concluants, on récupère la distance voulue avec le calcul suivant :&lt;br /&gt;
Distance =  t * D(x,y,z) &lt;br /&gt;
Ceci nous donne une distance selon les 3 axes, grâce à une comparaison du vecteur directeur et des vecteurs X, Y, et Z, on récupère uniquement la distance voulue :&lt;br /&gt;
Distance = t * D.x ou t * D.y ou t *D.z&lt;br /&gt;
&lt;br /&gt;
Pour le temps restant au projet, nous allons proposer différentes solutions pour l'affichage de ces distances. &lt;br /&gt;
De même, nous allons rédiger notre rapport et nous préparer à la soutenance finale.&lt;br /&gt;
&lt;br /&gt;
== Semaine 4 ==&lt;br /&gt;
&lt;br /&gt;
= Conclusion =&lt;br /&gt;
Diagramme UML de notre application finale:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:UML.PNG]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Voici un bref résumé de chacune des classes et de leurs fonctions :&lt;br /&gt;
&lt;br /&gt;
La classe Camera.cpp s’occupe de gérer tous les placements et les orientations que la caméra va prendre.&lt;br /&gt;
&lt;br /&gt;
La classe Input.cpp s’occupe de gérer tous les évènements clavier et souris, les rendant plus simples d’utilisation.&lt;br /&gt;
&lt;br /&gt;
La classe Shader.cpp permet de charger et de compiler le shader en charge de l’affichage de couleurs sur notre représentation.&lt;br /&gt;
&lt;br /&gt;
La classe principale: SceneOpenGL.cpp qui met en relation les différentes classes, permet la création de la scène, et dans laquelle nous avons codé les différentes fonctions nécessaires au programme, notamment la fonction de calcul des distances.&lt;br /&gt;
&lt;br /&gt;
La classe Texture.cpp permet de charger des textures à la place des couleurs.&lt;br /&gt;
&lt;br /&gt;
La classe Tumor.cpp permet de récupérer les vertices de la tumeur et de l’afficher.&lt;br /&gt;
&lt;br /&gt;
La classe Liver.cpp permet de récupérer les vertices du foie et de l’afficher.&lt;br /&gt;
&lt;br /&gt;
La classe DistanceDisplay.cpp permet d’afficher les distances séparant la tumeur de la surface du foie suivant les trois axes x, y et z.&lt;/div&gt;</summary>
		<author><name>Cdelberg</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=R%C3%A9alit%C3%A9_Augment%C3%A9e_pour_la_chirurgie&amp;diff=10292</id>
		<title>Réalité Augmentée pour la chirurgie</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=R%C3%A9alit%C3%A9_Augment%C3%A9e_pour_la_chirurgie&amp;diff=10292"/>
				<updated>2014-02-27T15:01:59Z</updated>
		
		<summary type="html">&lt;p&gt;Cdelberg : /* Objectifs */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Papa Momar MBOUP/ Calvin DELBERGHE&lt;br /&gt;
&lt;br /&gt;
= Présentation =&lt;br /&gt;
&lt;br /&gt;
== Description et Objectif: ==&lt;br /&gt;
&lt;br /&gt;
Notre projet consiste à assister les chirurgiens lors de chirurgies laparoscopiques. La chirurgie laparoscopique est une technique chirurgicale minimalement invasive où le chirurgien réalise une opération de l'abdomen par de petites incisions où sont placés des trocars qui permettent le passage de fins instruments chirurgicaux. Dans le cadre de ce projet, il s’agit de réaliser l’ablation de la(des) tumeur(s) présente(s) dans le foie du patient. La localisation des tumeurs ainsi que de l’ensemble du réseau vasculaire peut etre réalisé grâce à un scanner pré-opératoire et donc reconstruits en 3D. Cependant, ils ne peuvent pas être visualisés par la caméra lors de l’opération chirurgicale. &lt;br /&gt;
&lt;br /&gt;
Ainsi, le chirurgien ne peut en aucun cas connaitre la localisation de la tumeur et ne peut pas se représenter la distance qui la sépare des parois du foie. D’où le but de notre projet: aider les chirurgiens dans ces opérations. Des travaux récents de l'équipe de recherche Shacra ont permis de suivre avec une bonne précision le mouvement de structures internes du foie pendant une opération laparoscopique. Le projet consiste à utiliser ces travaux pour mélanger le flux vidéo fourni par l'endoscope aux informations calculées par la simulation pour fournir aux chirurgiens des informations utiles sur la position des structures internes du foie lors de la manipulation. Différentes pistes pourront être explorées pour ne pas surcharger le flux vidéo tout en fournissant les informations importantes (position, profondeur, distance à la surface du foie...)&lt;br /&gt;
&lt;br /&gt;
== Environnement de travail :==&lt;br /&gt;
1 ordinateur&lt;br /&gt;
&lt;br /&gt;
OpenGL 3.3 &lt;br /&gt;
&lt;br /&gt;
SDL 2.0&lt;br /&gt;
&lt;br /&gt;
IDE CodeBlocks&lt;br /&gt;
&lt;br /&gt;
= Plan d'action / Gestion de projet =&lt;br /&gt;
Dans un premier temps, nous allons commencer à suivre des tutoriaux sur le framework OpenGL. Quand on sera assez avancé, nous débuterons le codage du programme principal. Donc pour le premier semestre, le plan est de mettre en place la base du programme et de bien maîtriser OpenGL pour la suite quand on ajoutera des fonctions plus poussées dans le programme.&lt;br /&gt;
&lt;br /&gt;
= Réalisation =&lt;br /&gt;
&lt;br /&gt;
== Semaine 37 ==&lt;br /&gt;
Présentation et Choix du sujet.&lt;br /&gt;
&lt;br /&gt;
== Semaine 38 ==&lt;br /&gt;
Rencontre avec les encadrants du projet:&lt;br /&gt;
 Explication détaillée du sujet ainsi que les attentes du projet.&lt;br /&gt;
 Réception des premières données pour débuter quelques tests avec OpenGL.&lt;br /&gt;
== Semaine 39 ==&lt;br /&gt;
Installation d'OpenGL sous Windows avec CodeBlocks.&lt;br /&gt;
Début des tutoriaux sur le site du zéro:&lt;br /&gt;
&lt;br /&gt;
http://fr.openclassrooms.com/informatique/cours/developpez-vos-applications-3d-avec-opengl-3-3&lt;br /&gt;
&lt;br /&gt;
== Semaine 40 ==&lt;br /&gt;
Poursuite des tutoriaux.&lt;br /&gt;
&lt;br /&gt;
== Semaine 41 ==&lt;br /&gt;
Poursuite des tutoriaux.&lt;br /&gt;
&lt;br /&gt;
== Semaine 42 ==&lt;br /&gt;
Poursuite des tutoriaux.&lt;br /&gt;
&lt;br /&gt;
== Semaine 43 ==&lt;br /&gt;
Poursuite des tutoriaux&lt;br /&gt;
&lt;br /&gt;
== Semaine 44 ==&lt;br /&gt;
Poursuite des tutoriaux&lt;br /&gt;
&lt;br /&gt;
== Semaine 45 ==&lt;br /&gt;
Poursuite des tutoriaux&lt;br /&gt;
&lt;br /&gt;
== Semaine 46 ==&lt;br /&gt;
Poursuite des tutoriaux&lt;br /&gt;
&lt;br /&gt;
== Semaine 47 ==&lt;br /&gt;
Fin de la première partie des tutoriaux.&lt;br /&gt;
&lt;br /&gt;
== Semaine 48 ==&lt;br /&gt;
Démarrage du code du programme à partir du code réalisé pendant les tutoriels.&lt;br /&gt;
&lt;br /&gt;
== Semaine 49 ==&lt;br /&gt;
Ajout de la fonction permettant de récupérer les données des fichiers .obj contenant les vertices, les coordonnées de texture, les vecteurs normaux et les références aux faces (triangles) constituant l'objet 3D.&lt;br /&gt;
&lt;br /&gt;
== Semaine 50 ==&lt;br /&gt;
Nous sommes arrivé durant cette semaine à représenter une tumeur correctement en 3D.&lt;br /&gt;
&lt;br /&gt;
Pour représenter un structure en 3D, nous allons utiliser un ensemble de triangle. Chaque triangle est constitué de 3 vertices qui sont ces sommets. Un vertex est tout simplement un point avec trois dimensions : x,y et z. Ainsi, le but est de relier les trois sommets (vertices) formant un triangle et ensuite de relier tous les triangles. Ainsi, nous obtiendront notre structure en 3D. &lt;br /&gt;
&lt;br /&gt;
Cependant, nous rencontrons un problème quand on a un nombre de vertices élevés à représenter (de l'ordre de 20000 vertices). Une des pistes pour la résolution de ce problème est d'utiliser les display list. Cependant, les display List n'existent plus en OpenGL 3.3. Donc le problème reste irrésolu pour l'instant. On va regarder du coté des VBO (Vertex Buffer Object) et VBA(Vertex Buffer Array).&lt;br /&gt;
&lt;br /&gt;
Les &amp;quot;Display List&amp;quot; permettent un stockage des données sur la carte graphique mais ne permettent pas de mettre à jour ces données. Les &amp;quot;VertexArray&amp;quot; conservent les données dans des tampons en mémoire système ce qui permet de les modifier mais oblige à transférer toutes ces données à chaque fois qu'elles doivent être affichées.&lt;br /&gt;
&lt;br /&gt;
Un VBO est un objet OpenGL qui contient des données relatives à un modèle 3D comme les vertices, les coordonnées de texture, les normales (pour les lumières), ... Sa particularité vient du fait que les données qu'il contient se trouvent non pas dans la RAM mais directement dans la carte graphique.&lt;br /&gt;
&lt;br /&gt;
Les VBO permettent de gagner un temps considérable à OpenGL en évitant de faire des aller-retours inutiles entre la RAM et la mémoire graphique:&lt;br /&gt;
[[Fichier:interet_VBO.png]]&lt;br /&gt;
&lt;br /&gt;
[[Fichier:chargement_avec_VBO.png]]&lt;br /&gt;
&lt;br /&gt;
[[Fichier:affichage_avec_VBO.png]]&lt;br /&gt;
&lt;br /&gt;
Images prises sur : http://fr.openclassrooms.com/informatique/cours/developpez-vos-applications-3d-avec-opengl-3-3/c-est-quoi-un-vbo&lt;br /&gt;
&lt;br /&gt;
On économise ainsi le transfert de centaines de milliers de données à chaque affichage, la carte graphique peut travailler plus rapidement.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous avons aussi trouvé durant cette semaine ce site qui explique très bien la théorie de l'intersection rayon/triangle avec une traduction en code.&lt;br /&gt;
 &lt;br /&gt;
http://www.scratchapixel.com/lessons/3d-basic-lessons/lesson-9-ray-triangle-intersection/ray-triangle-intersection-geometric-solution/&lt;br /&gt;
&lt;br /&gt;
Nous avons grâce à ceci pu coder une méthode adaptée pour tester les triangles de la surface du foie et voir s'ils sont en intersection avec le rayon partant du barycentre de la tumeur et ayant pour vecteur directeur X, Y, ou Z. Une fois le bon triangle trouvé, la fonction se charge de renvoyer le point d'intersection, et il ne reste qu'a récupérer sa coordonnée en X,Y,ou Z (suivant le vecteur directeur précisé dans l'appel à la fonction) qui se trouve être la distance entre la tumeur et la surface du foie. Pour affiner un peu notre méthode, il faut d'abord l'appliquer à l'enveloppe de la tumeur elle même, puis faire de même avec la surface du foie, et soustraire les coordonnées obtenues pour les points d'intersections dans chacune des 3 direction afin d'obtenir une distance correcte pour chaque direction.&lt;br /&gt;
&lt;br /&gt;
== Semaine 51 ==&lt;br /&gt;
Rédaction du rapport d'avancement &lt;br /&gt;
&lt;br /&gt;
Rédaction de la présentation oral&lt;br /&gt;
&lt;br /&gt;
= Conclusion Première partie =&lt;br /&gt;
&lt;br /&gt;
Ce premier semestre à travailler sur ce projet a été des plus instructifs pour nous,&lt;br /&gt;
nous permettant de mieux concevoir la charge de travail que représentait celuici,&lt;br /&gt;
de&lt;br /&gt;
réaliser la chance qu’il nous était donnée de pouvoir apporter notre contribution dans le&lt;br /&gt;
domaine concret et important qu’est la médecine. Cela nous aura aussi permis de nous&lt;br /&gt;
cultiver sur les méthodes utilisées aujourd’hui en chirurgie, ainsi que de découvrir OpenGL&lt;br /&gt;
et la modélisation dans l’espace.&lt;br /&gt;
Les bases de l’application sont bien en place et le cahier des charges bien défini. Il&lt;br /&gt;
reste donc pour la seconde moitié de l’année à finaliser la modélisation des structures&lt;br /&gt;
ainsi que l’affichage de la distance entre la tumeur et la surface du foie. De plus, nous&lt;br /&gt;
devrons rendre l’application dynamique avec la récupération des flux de données en&lt;br /&gt;
temps réel par la caméra.&lt;br /&gt;
&lt;br /&gt;
= Deuxième partie =&lt;br /&gt;
== Objectifs ==&lt;br /&gt;
&lt;br /&gt;
-Résoudre le problème d'affichage du foie grâce aux VBO&lt;br /&gt;
&lt;br /&gt;
-Finir l'implémentation du calcul de distances&lt;br /&gt;
&lt;br /&gt;
-Réaliser des propositions d'affichage des distances&lt;br /&gt;
&lt;br /&gt;
== Semaine 1 ==&lt;br /&gt;
Nous avons créé une classe foie pour représenter ce dernier. De ce fait, notre programme sera plus lisible et ordonné.&lt;br /&gt;
&lt;br /&gt;
== Semaine 2 ==&lt;br /&gt;
On arrive enfin à représenter le foie. Pour celà donc, nous avons utilisé les VBO afin d'aboutir à ce résultat.&lt;br /&gt;
La prochaine étape est de représenter la tumeur et le foie en même temps.&lt;br /&gt;
Nous avons créé une classe tumeur qui s'occupe du chargement et de l'affichage de la tumeur.&lt;br /&gt;
Nous arrivons maintenant à afficher le foie et la tumeur en même temps. Cependant, vu que la tumeur se trouve à l'intérieur du foie,&lt;br /&gt;
nous allons changer l'affichage du foie de tel sorte que l'on voit que les traits reliant les triangles sans couleur ni texture.&lt;br /&gt;
On affiche désormais le foie et la tumeur ensemble avec pour le foie juste des traits pour avoir une meilleure vision de la position de la tumeur.&lt;br /&gt;
&lt;br /&gt;
== Semaine 3 ==&lt;br /&gt;
Pour cette semaine, nous sommes arrivés à calculer les distances séparant la tumeur et la surface du foie.&lt;br /&gt;
&lt;br /&gt;
Afin de récupérer la distance séparant la tumeur et le foie, on réalise des tests d’intersection rayon-triangle avec les triangles composant les meshs du foie et de la tumeur. En effet, en réalisant ce test entre un rayon partant du barycentre de la tumeur suivant la direction X,Y ou Z, et les triangles constituant le foie d’une part, et la tumeur d’autre part, on obtient deux distances (toujours selon X, Y, ou Z). La première, distance entre la paroi du foie et le barycentre de la tumeur, la seconde, distance entre la paroi de la tumeur et le barycentre de celle ci. En soustrayant la seconde à la première, on obtient la distance séparant la paroi du foie et la paroi de la tumeur selon un axe prédéfini (X, Y ou Z de notre repère). Il suffit ensuite de réaliser le calcul une fois pour chaque axe.&lt;br /&gt;
Ce calcul se réalise en plusieurs étapes mathématiques présentées ci dessous :&lt;br /&gt;
&lt;br /&gt;
Image rayon [[Fichier:Raytracing.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Afin de savoir s’il y a intersection entre un rayon et un triangle, il est plus aisé de commencer tout d’abord par vérifier s’il y a intersection entre ce même rayon et le plan contenant le triangle.&lt;br /&gt;
Pour cela, on calcule le vecteur normal du plan. Le vecteur normal du plan s’obtient en faisant le produit vectoriel de deux vecteurs non colinéaires du plan. On connaît 3 points du plan (les points constituant le triangle en train d’être testé), que l’on nommera ici v0, v1 et v2. On peut donc calculer le produit vectoriel de v0v1 et v0v2 par exemple, pour obtenir le vecteur normal N(A,B,C). Une fois le vecteur normal obtenu, on réalise le produit scalaire entre N et le rayon. Si le résultat est nul, le plan et le rayon sont parallèles donc il n’y a pas intersection. Sinon on a confirmation que le rayon et le plan entrent en intersection.&lt;br /&gt;
Cela permet ensuite, si intersection il y a, de calculer les coordonnées du point d’intersection P entre le rayon et le plan. P est défini de cette façon:&lt;br /&gt;
P = O + t * D			-O l’origine (ici le barycentre de la tumeur)&lt;br /&gt;
		-D le vecteur directeur du rayon&lt;br /&gt;
				-t la distance entre O et P &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
L’équation du plan contenant le triangle est celle-ci:&lt;br /&gt;
A * x + B * y + C * z + d = 0		-A,B et C sont les composantes du vecteur normal au &lt;br /&gt;
plan N(A,B,C).&lt;br /&gt;
-(x,y,z) un point du plan.&lt;br /&gt;
-d la distance de l’origine (du repère) au plan, suivant la direction du vecteur normal au plan.&lt;br /&gt;
&lt;br /&gt;
Grâce aux deux formules précedentes, on en déduit le calcul de t :&lt;br /&gt;
	t = - ( N . O + d ) / ( N . D)&lt;br /&gt;
&lt;br /&gt;
Une fois t calculé, on peut aisément obtenir les coordonnées de P. On peut maintenant passer au deuxième test à réaliser, qui est le test d’appartenance d’un point à un triangle.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Raytracing1.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Le principe de ce test est le suivant:&lt;br /&gt;
On calcule les vecteurs partant des points du triangle et allant vers P : v0P, v1P, v2P.&lt;br /&gt;
On calcule de même les vecteurs correspondants aux cotés du triangle : v0v1, v1v2, v2v0.&lt;br /&gt;
On calcule le produit vectoriel de chacun de ces vecteurs avec les vecteurs contenant P:&lt;br /&gt;
u = v0v1 ^ v0P, v = v1v2 ^ v1P, w = v2v0 ^ v2P.&lt;br /&gt;
Si P appartient au triangle, les vecteurs u, v et w ainsi calculés seront colinéaires de même sens avec le vecteur normal au triangle N. (voir Figure 11)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
On réalise donc les tests suivants: (produit scalaire)&lt;br /&gt;
N . u, N . v, N . w&lt;br /&gt;
&lt;br /&gt;
Si le résultat est positif, P est placé à l’intérieur du triangle par rapport au coté testé. (u teste le coté v0v1, v teste v1v2, w teste v2v0)&lt;br /&gt;
Si les trois tests sont positifs, cela signifie que P est bien à l’intérieur du triangle.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Raytracing2.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Une fois ces tests concluants, on récupère la distance voulue avec le calcul suivant :&lt;br /&gt;
Distance =  t * D(x,y,z) &lt;br /&gt;
Ceci nous donne une distance selon les 3 axes, grâce à une comparaison du vecteur directeur et des vecteurs X, Y, et Z, on récupère uniquement la distance voulue :&lt;br /&gt;
Distance = t * D.x ou t * D.y ou t *D.z&lt;br /&gt;
&lt;br /&gt;
Pour le temps restant au projet, nous allons proposer différentes solutions pour l'affichage de ces distances. &lt;br /&gt;
De même, nous allons rédiger notre rapport et nous préparer à la soutenance finale.&lt;br /&gt;
&lt;br /&gt;
== Semaine 4 ==&lt;br /&gt;
&lt;br /&gt;
= Conclusion =&lt;br /&gt;
Diagramme UML de notre application finale:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:UML.PNG]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Voici un bref résumé de chacune des classes et de leurs fonctions :&lt;br /&gt;
&lt;br /&gt;
La classe Camera.cpp s’occupe de gérer tous les placements et les orientations que la caméra va prendre.&lt;br /&gt;
&lt;br /&gt;
La classe Input.cpp s’occupe de gérer tous les évènements clavier et souris, les rendant plus simples d’utilisation.&lt;br /&gt;
&lt;br /&gt;
La classe Shader.cpp permet de charger et de compiler le shader en charge de l’affichage de couleurs sur notre représentation.&lt;br /&gt;
&lt;br /&gt;
La classe principale: SceneOpenGL.cpp qui met en relation les différentes classes, permet la création de la scène, et dans laquelle nous avons codé les différentes fonctions nécessaires au programme, notamment la fonction de calcul des distances.&lt;br /&gt;
&lt;br /&gt;
La classe Texture.cpp permet de charger des textures à la place des couleurs.&lt;br /&gt;
&lt;br /&gt;
La classe Tumor.cpp permet de récupérer les vertices de la tumeur et de l’afficher.&lt;br /&gt;
&lt;br /&gt;
La classe Liver.cpp permet de récupérer les vertices du foie et de l’afficher.&lt;br /&gt;
&lt;br /&gt;
La classe DistanceDisplay.cpp permet d’afficher les distances séparant la tumeur de la surface du foie suivant les trois axes x, y et z.&lt;/div&gt;</summary>
		<author><name>Cdelberg</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=R%C3%A9alit%C3%A9_Augment%C3%A9e_pour_la_chirurgie&amp;diff=10291</id>
		<title>Réalité Augmentée pour la chirurgie</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=R%C3%A9alit%C3%A9_Augment%C3%A9e_pour_la_chirurgie&amp;diff=10291"/>
				<updated>2014-02-27T15:01:24Z</updated>
		
		<summary type="html">&lt;p&gt;Cdelberg : /* Conclusion */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Papa Momar MBOUP/ Calvin DELBERGHE&lt;br /&gt;
&lt;br /&gt;
= Présentation =&lt;br /&gt;
&lt;br /&gt;
== Description et Objectif: ==&lt;br /&gt;
&lt;br /&gt;
Notre projet consiste à assister les chirurgiens lors de chirurgies laparoscopiques. La chirurgie laparoscopique est une technique chirurgicale minimalement invasive où le chirurgien réalise une opération de l'abdomen par de petites incisions où sont placés des trocars qui permettent le passage de fins instruments chirurgicaux. Dans le cadre de ce projet, il s’agit de réaliser l’ablation de la(des) tumeur(s) présente(s) dans le foie du patient. La localisation des tumeurs ainsi que de l’ensemble du réseau vasculaire peut etre réalisé grâce à un scanner pré-opératoire et donc reconstruits en 3D. Cependant, ils ne peuvent pas être visualisés par la caméra lors de l’opération chirurgicale. &lt;br /&gt;
&lt;br /&gt;
Ainsi, le chirurgien ne peut en aucun cas connaitre la localisation de la tumeur et ne peut pas se représenter la distance qui la sépare des parois du foie. D’où le but de notre projet: aider les chirurgiens dans ces opérations. Des travaux récents de l'équipe de recherche Shacra ont permis de suivre avec une bonne précision le mouvement de structures internes du foie pendant une opération laparoscopique. Le projet consiste à utiliser ces travaux pour mélanger le flux vidéo fourni par l'endoscope aux informations calculées par la simulation pour fournir aux chirurgiens des informations utiles sur la position des structures internes du foie lors de la manipulation. Différentes pistes pourront être explorées pour ne pas surcharger le flux vidéo tout en fournissant les informations importantes (position, profondeur, distance à la surface du foie...)&lt;br /&gt;
&lt;br /&gt;
== Environnement de travail :==&lt;br /&gt;
1 ordinateur&lt;br /&gt;
&lt;br /&gt;
OpenGL 3.3 &lt;br /&gt;
&lt;br /&gt;
SDL 2.0&lt;br /&gt;
&lt;br /&gt;
IDE CodeBlocks&lt;br /&gt;
&lt;br /&gt;
= Plan d'action / Gestion de projet =&lt;br /&gt;
Dans un premier temps, nous allons commencer à suivre des tutoriaux sur le framework OpenGL. Quand on sera assez avancé, nous débuterons le codage du programme principal. Donc pour le premier semestre, le plan est de mettre en place la base du programme et de bien maîtriser OpenGL pour la suite quand on ajoutera des fonctions plus poussées dans le programme.&lt;br /&gt;
&lt;br /&gt;
= Réalisation =&lt;br /&gt;
&lt;br /&gt;
== Semaine 37 ==&lt;br /&gt;
Présentation et Choix du sujet.&lt;br /&gt;
&lt;br /&gt;
== Semaine 38 ==&lt;br /&gt;
Rencontre avec les encadrants du projet:&lt;br /&gt;
 Explication détaillée du sujet ainsi que les attentes du projet.&lt;br /&gt;
 Réception des premières données pour débuter quelques tests avec OpenGL.&lt;br /&gt;
== Semaine 39 ==&lt;br /&gt;
Installation d'OpenGL sous Windows avec CodeBlocks.&lt;br /&gt;
Début des tutoriaux sur le site du zéro:&lt;br /&gt;
&lt;br /&gt;
http://fr.openclassrooms.com/informatique/cours/developpez-vos-applications-3d-avec-opengl-3-3&lt;br /&gt;
&lt;br /&gt;
== Semaine 40 ==&lt;br /&gt;
Poursuite des tutoriaux.&lt;br /&gt;
&lt;br /&gt;
== Semaine 41 ==&lt;br /&gt;
Poursuite des tutoriaux.&lt;br /&gt;
&lt;br /&gt;
== Semaine 42 ==&lt;br /&gt;
Poursuite des tutoriaux.&lt;br /&gt;
&lt;br /&gt;
== Semaine 43 ==&lt;br /&gt;
Poursuite des tutoriaux&lt;br /&gt;
&lt;br /&gt;
== Semaine 44 ==&lt;br /&gt;
Poursuite des tutoriaux&lt;br /&gt;
&lt;br /&gt;
== Semaine 45 ==&lt;br /&gt;
Poursuite des tutoriaux&lt;br /&gt;
&lt;br /&gt;
== Semaine 46 ==&lt;br /&gt;
Poursuite des tutoriaux&lt;br /&gt;
&lt;br /&gt;
== Semaine 47 ==&lt;br /&gt;
Fin de la première partie des tutoriaux.&lt;br /&gt;
&lt;br /&gt;
== Semaine 48 ==&lt;br /&gt;
Démarrage du code du programme à partir du code réalisé pendant les tutoriels.&lt;br /&gt;
&lt;br /&gt;
== Semaine 49 ==&lt;br /&gt;
Ajout de la fonction permettant de récupérer les données des fichiers .obj contenant les vertices, les coordonnées de texture, les vecteurs normaux et les références aux faces (triangles) constituant l'objet 3D.&lt;br /&gt;
&lt;br /&gt;
== Semaine 50 ==&lt;br /&gt;
Nous sommes arrivé durant cette semaine à représenter une tumeur correctement en 3D.&lt;br /&gt;
&lt;br /&gt;
Pour représenter un structure en 3D, nous allons utiliser un ensemble de triangle. Chaque triangle est constitué de 3 vertices qui sont ces sommets. Un vertex est tout simplement un point avec trois dimensions : x,y et z. Ainsi, le but est de relier les trois sommets (vertices) formant un triangle et ensuite de relier tous les triangles. Ainsi, nous obtiendront notre structure en 3D. &lt;br /&gt;
&lt;br /&gt;
Cependant, nous rencontrons un problème quand on a un nombre de vertices élevés à représenter (de l'ordre de 20000 vertices). Une des pistes pour la résolution de ce problème est d'utiliser les display list. Cependant, les display List n'existent plus en OpenGL 3.3. Donc le problème reste irrésolu pour l'instant. On va regarder du coté des VBO (Vertex Buffer Object) et VBA(Vertex Buffer Array).&lt;br /&gt;
&lt;br /&gt;
Les &amp;quot;Display List&amp;quot; permettent un stockage des données sur la carte graphique mais ne permettent pas de mettre à jour ces données. Les &amp;quot;VertexArray&amp;quot; conservent les données dans des tampons en mémoire système ce qui permet de les modifier mais oblige à transférer toutes ces données à chaque fois qu'elles doivent être affichées.&lt;br /&gt;
&lt;br /&gt;
Un VBO est un objet OpenGL qui contient des données relatives à un modèle 3D comme les vertices, les coordonnées de texture, les normales (pour les lumières), ... Sa particularité vient du fait que les données qu'il contient se trouvent non pas dans la RAM mais directement dans la carte graphique.&lt;br /&gt;
&lt;br /&gt;
Les VBO permettent de gagner un temps considérable à OpenGL en évitant de faire des aller-retours inutiles entre la RAM et la mémoire graphique:&lt;br /&gt;
[[Fichier:interet_VBO.png]]&lt;br /&gt;
&lt;br /&gt;
[[Fichier:chargement_avec_VBO.png]]&lt;br /&gt;
&lt;br /&gt;
[[Fichier:affichage_avec_VBO.png]]&lt;br /&gt;
&lt;br /&gt;
Images prises sur : http://fr.openclassrooms.com/informatique/cours/developpez-vos-applications-3d-avec-opengl-3-3/c-est-quoi-un-vbo&lt;br /&gt;
&lt;br /&gt;
On économise ainsi le transfert de centaines de milliers de données à chaque affichage, la carte graphique peut travailler plus rapidement.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous avons aussi trouvé durant cette semaine ce site qui explique très bien la théorie de l'intersection rayon/triangle avec une traduction en code.&lt;br /&gt;
 &lt;br /&gt;
http://www.scratchapixel.com/lessons/3d-basic-lessons/lesson-9-ray-triangle-intersection/ray-triangle-intersection-geometric-solution/&lt;br /&gt;
&lt;br /&gt;
Nous avons grâce à ceci pu coder une méthode adaptée pour tester les triangles de la surface du foie et voir s'ils sont en intersection avec le rayon partant du barycentre de la tumeur et ayant pour vecteur directeur X, Y, ou Z. Une fois le bon triangle trouvé, la fonction se charge de renvoyer le point d'intersection, et il ne reste qu'a récupérer sa coordonnée en X,Y,ou Z (suivant le vecteur directeur précisé dans l'appel à la fonction) qui se trouve être la distance entre la tumeur et la surface du foie. Pour affiner un peu notre méthode, il faut d'abord l'appliquer à l'enveloppe de la tumeur elle même, puis faire de même avec la surface du foie, et soustraire les coordonnées obtenues pour les points d'intersections dans chacune des 3 direction afin d'obtenir une distance correcte pour chaque direction.&lt;br /&gt;
&lt;br /&gt;
== Semaine 51 ==&lt;br /&gt;
Rédaction du rapport d'avancement &lt;br /&gt;
&lt;br /&gt;
Rédaction de la présentation oral&lt;br /&gt;
&lt;br /&gt;
= Conclusion Première partie =&lt;br /&gt;
&lt;br /&gt;
Ce premier semestre à travailler sur ce projet a été des plus instructifs pour nous,&lt;br /&gt;
nous permettant de mieux concevoir la charge de travail que représentait celuici,&lt;br /&gt;
de&lt;br /&gt;
réaliser la chance qu’il nous était donnée de pouvoir apporter notre contribution dans le&lt;br /&gt;
domaine concret et important qu’est la médecine. Cela nous aura aussi permis de nous&lt;br /&gt;
cultiver sur les méthodes utilisées aujourd’hui en chirurgie, ainsi que de découvrir OpenGL&lt;br /&gt;
et la modélisation dans l’espace.&lt;br /&gt;
Les bases de l’application sont bien en place et le cahier des charges bien défini. Il&lt;br /&gt;
reste donc pour la seconde moitié de l’année à finaliser la modélisation des structures&lt;br /&gt;
ainsi que l’affichage de la distance entre la tumeur et la surface du foie. De plus, nous&lt;br /&gt;
devrons rendre l’application dynamique avec la récupération des flux de données en&lt;br /&gt;
temps réel par la caméra.&lt;br /&gt;
&lt;br /&gt;
= Deuxième partie =&lt;br /&gt;
== Objectifs ==&lt;br /&gt;
&lt;br /&gt;
-Résoudre le problème d'affichage du foie grâce aux VBO&lt;br /&gt;
-Finir l'implémentation du calcul de distances&lt;br /&gt;
-Réaliser des propositions d'affichage des distances&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Semaine 1 ==&lt;br /&gt;
Nous avons créé une classe foie pour représenter ce dernier. De ce fait, notre programme sera plus lisible et ordonné.&lt;br /&gt;
&lt;br /&gt;
== Semaine 2 ==&lt;br /&gt;
On arrive enfin à représenter le foie. Pour celà donc, nous avons utilisé les VBO afin d'aboutir à ce résultat.&lt;br /&gt;
La prochaine étape est de représenter la tumeur et le foie en même temps.&lt;br /&gt;
Nous avons créé une classe tumeur qui s'occupe du chargement et de l'affichage de la tumeur.&lt;br /&gt;
Nous arrivons maintenant à afficher le foie et la tumeur en même temps. Cependant, vu que la tumeur se trouve à l'intérieur du foie,&lt;br /&gt;
nous allons changer l'affichage du foie de tel sorte que l'on voit que les traits reliant les triangles sans couleur ni texture.&lt;br /&gt;
On affiche désormais le foie et la tumeur ensemble avec pour le foie juste des traits pour avoir une meilleure vision de la position de la tumeur.&lt;br /&gt;
&lt;br /&gt;
== Semaine 3 ==&lt;br /&gt;
Pour cette semaine, nous sommes arrivés à calculer les distances séparant la tumeur et la surface du foie.&lt;br /&gt;
&lt;br /&gt;
Afin de récupérer la distance séparant la tumeur et le foie, on réalise des tests d’intersection rayon-triangle avec les triangles composant les meshs du foie et de la tumeur. En effet, en réalisant ce test entre un rayon partant du barycentre de la tumeur suivant la direction X,Y ou Z, et les triangles constituant le foie d’une part, et la tumeur d’autre part, on obtient deux distances (toujours selon X, Y, ou Z). La première, distance entre la paroi du foie et le barycentre de la tumeur, la seconde, distance entre la paroi de la tumeur et le barycentre de celle ci. En soustrayant la seconde à la première, on obtient la distance séparant la paroi du foie et la paroi de la tumeur selon un axe prédéfini (X, Y ou Z de notre repère). Il suffit ensuite de réaliser le calcul une fois pour chaque axe.&lt;br /&gt;
Ce calcul se réalise en plusieurs étapes mathématiques présentées ci dessous :&lt;br /&gt;
&lt;br /&gt;
Image rayon [[Fichier:Raytracing.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Afin de savoir s’il y a intersection entre un rayon et un triangle, il est plus aisé de commencer tout d’abord par vérifier s’il y a intersection entre ce même rayon et le plan contenant le triangle.&lt;br /&gt;
Pour cela, on calcule le vecteur normal du plan. Le vecteur normal du plan s’obtient en faisant le produit vectoriel de deux vecteurs non colinéaires du plan. On connaît 3 points du plan (les points constituant le triangle en train d’être testé), que l’on nommera ici v0, v1 et v2. On peut donc calculer le produit vectoriel de v0v1 et v0v2 par exemple, pour obtenir le vecteur normal N(A,B,C). Une fois le vecteur normal obtenu, on réalise le produit scalaire entre N et le rayon. Si le résultat est nul, le plan et le rayon sont parallèles donc il n’y a pas intersection. Sinon on a confirmation que le rayon et le plan entrent en intersection.&lt;br /&gt;
Cela permet ensuite, si intersection il y a, de calculer les coordonnées du point d’intersection P entre le rayon et le plan. P est défini de cette façon:&lt;br /&gt;
P = O + t * D			-O l’origine (ici le barycentre de la tumeur)&lt;br /&gt;
		-D le vecteur directeur du rayon&lt;br /&gt;
				-t la distance entre O et P &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
L’équation du plan contenant le triangle est celle-ci:&lt;br /&gt;
A * x + B * y + C * z + d = 0		-A,B et C sont les composantes du vecteur normal au &lt;br /&gt;
plan N(A,B,C).&lt;br /&gt;
-(x,y,z) un point du plan.&lt;br /&gt;
-d la distance de l’origine (du repère) au plan, suivant la direction du vecteur normal au plan.&lt;br /&gt;
&lt;br /&gt;
Grâce aux deux formules précedentes, on en déduit le calcul de t :&lt;br /&gt;
	t = - ( N . O + d ) / ( N . D)&lt;br /&gt;
&lt;br /&gt;
Une fois t calculé, on peut aisément obtenir les coordonnées de P. On peut maintenant passer au deuxième test à réaliser, qui est le test d’appartenance d’un point à un triangle.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Raytracing1.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Le principe de ce test est le suivant:&lt;br /&gt;
On calcule les vecteurs partant des points du triangle et allant vers P : v0P, v1P, v2P.&lt;br /&gt;
On calcule de même les vecteurs correspondants aux cotés du triangle : v0v1, v1v2, v2v0.&lt;br /&gt;
On calcule le produit vectoriel de chacun de ces vecteurs avec les vecteurs contenant P:&lt;br /&gt;
u = v0v1 ^ v0P, v = v1v2 ^ v1P, w = v2v0 ^ v2P.&lt;br /&gt;
Si P appartient au triangle, les vecteurs u, v et w ainsi calculés seront colinéaires de même sens avec le vecteur normal au triangle N. (voir Figure 11)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
On réalise donc les tests suivants: (produit scalaire)&lt;br /&gt;
N . u, N . v, N . w&lt;br /&gt;
&lt;br /&gt;
Si le résultat est positif, P est placé à l’intérieur du triangle par rapport au coté testé. (u teste le coté v0v1, v teste v1v2, w teste v2v0)&lt;br /&gt;
Si les trois tests sont positifs, cela signifie que P est bien à l’intérieur du triangle.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Raytracing2.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Une fois ces tests concluants, on récupère la distance voulue avec le calcul suivant :&lt;br /&gt;
Distance =  t * D(x,y,z) &lt;br /&gt;
Ceci nous donne une distance selon les 3 axes, grâce à une comparaison du vecteur directeur et des vecteurs X, Y, et Z, on récupère uniquement la distance voulue :&lt;br /&gt;
Distance = t * D.x ou t * D.y ou t *D.z&lt;br /&gt;
&lt;br /&gt;
Pour le temps restant au projet, nous allons proposer différentes solutions pour l'affichage de ces distances. &lt;br /&gt;
De même, nous allons rédiger notre rapport et nous préparer à la soutenance finale.&lt;br /&gt;
&lt;br /&gt;
== Semaine 4 ==&lt;br /&gt;
&lt;br /&gt;
= Conclusion =&lt;br /&gt;
Diagramme UML de notre application finale:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:UML.PNG]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Voici un bref résumé de chacune des classes et de leurs fonctions :&lt;br /&gt;
&lt;br /&gt;
La classe Camera.cpp s’occupe de gérer tous les placements et les orientations que la caméra va prendre.&lt;br /&gt;
&lt;br /&gt;
La classe Input.cpp s’occupe de gérer tous les évènements clavier et souris, les rendant plus simples d’utilisation.&lt;br /&gt;
&lt;br /&gt;
La classe Shader.cpp permet de charger et de compiler le shader en charge de l’affichage de couleurs sur notre représentation.&lt;br /&gt;
&lt;br /&gt;
La classe principale: SceneOpenGL.cpp qui met en relation les différentes classes, permet la création de la scène, et dans laquelle nous avons codé les différentes fonctions nécessaires au programme, notamment la fonction de calcul des distances.&lt;br /&gt;
&lt;br /&gt;
La classe Texture.cpp permet de charger des textures à la place des couleurs.&lt;br /&gt;
&lt;br /&gt;
La classe Tumor.cpp permet de récupérer les vertices de la tumeur et de l’afficher.&lt;br /&gt;
&lt;br /&gt;
La classe Liver.cpp permet de récupérer les vertices du foie et de l’afficher.&lt;br /&gt;
&lt;br /&gt;
La classe DistanceDisplay.cpp permet d’afficher les distances séparant la tumeur de la surface du foie suivant les trois axes x, y et z.&lt;/div&gt;</summary>
		<author><name>Cdelberg</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=Fichier:UML.PNG&amp;diff=10290</id>
		<title>Fichier:UML.PNG</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=Fichier:UML.PNG&amp;diff=10290"/>
				<updated>2014-02-27T15:01:04Z</updated>
		
		<summary type="html">&lt;p&gt;Cdelberg : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Cdelberg</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=R%C3%A9alit%C3%A9_Augment%C3%A9e_pour_la_chirurgie&amp;diff=10289</id>
		<title>Réalité Augmentée pour la chirurgie</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=R%C3%A9alit%C3%A9_Augment%C3%A9e_pour_la_chirurgie&amp;diff=10289"/>
				<updated>2014-02-27T14:59:20Z</updated>
		
		<summary type="html">&lt;p&gt;Cdelberg : /* Conclusion */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Papa Momar MBOUP/ Calvin DELBERGHE&lt;br /&gt;
&lt;br /&gt;
= Présentation =&lt;br /&gt;
&lt;br /&gt;
== Description et Objectif: ==&lt;br /&gt;
&lt;br /&gt;
Notre projet consiste à assister les chirurgiens lors de chirurgies laparoscopiques. La chirurgie laparoscopique est une technique chirurgicale minimalement invasive où le chirurgien réalise une opération de l'abdomen par de petites incisions où sont placés des trocars qui permettent le passage de fins instruments chirurgicaux. Dans le cadre de ce projet, il s’agit de réaliser l’ablation de la(des) tumeur(s) présente(s) dans le foie du patient. La localisation des tumeurs ainsi que de l’ensemble du réseau vasculaire peut etre réalisé grâce à un scanner pré-opératoire et donc reconstruits en 3D. Cependant, ils ne peuvent pas être visualisés par la caméra lors de l’opération chirurgicale. &lt;br /&gt;
&lt;br /&gt;
Ainsi, le chirurgien ne peut en aucun cas connaitre la localisation de la tumeur et ne peut pas se représenter la distance qui la sépare des parois du foie. D’où le but de notre projet: aider les chirurgiens dans ces opérations. Des travaux récents de l'équipe de recherche Shacra ont permis de suivre avec une bonne précision le mouvement de structures internes du foie pendant une opération laparoscopique. Le projet consiste à utiliser ces travaux pour mélanger le flux vidéo fourni par l'endoscope aux informations calculées par la simulation pour fournir aux chirurgiens des informations utiles sur la position des structures internes du foie lors de la manipulation. Différentes pistes pourront être explorées pour ne pas surcharger le flux vidéo tout en fournissant les informations importantes (position, profondeur, distance à la surface du foie...)&lt;br /&gt;
&lt;br /&gt;
== Environnement de travail :==&lt;br /&gt;
1 ordinateur&lt;br /&gt;
&lt;br /&gt;
OpenGL 3.3 &lt;br /&gt;
&lt;br /&gt;
SDL 2.0&lt;br /&gt;
&lt;br /&gt;
IDE CodeBlocks&lt;br /&gt;
&lt;br /&gt;
= Plan d'action / Gestion de projet =&lt;br /&gt;
Dans un premier temps, nous allons commencer à suivre des tutoriaux sur le framework OpenGL. Quand on sera assez avancé, nous débuterons le codage du programme principal. Donc pour le premier semestre, le plan est de mettre en place la base du programme et de bien maîtriser OpenGL pour la suite quand on ajoutera des fonctions plus poussées dans le programme.&lt;br /&gt;
&lt;br /&gt;
= Réalisation =&lt;br /&gt;
&lt;br /&gt;
== Semaine 37 ==&lt;br /&gt;
Présentation et Choix du sujet.&lt;br /&gt;
&lt;br /&gt;
== Semaine 38 ==&lt;br /&gt;
Rencontre avec les encadrants du projet:&lt;br /&gt;
 Explication détaillée du sujet ainsi que les attentes du projet.&lt;br /&gt;
 Réception des premières données pour débuter quelques tests avec OpenGL.&lt;br /&gt;
== Semaine 39 ==&lt;br /&gt;
Installation d'OpenGL sous Windows avec CodeBlocks.&lt;br /&gt;
Début des tutoriaux sur le site du zéro:&lt;br /&gt;
&lt;br /&gt;
http://fr.openclassrooms.com/informatique/cours/developpez-vos-applications-3d-avec-opengl-3-3&lt;br /&gt;
&lt;br /&gt;
== Semaine 40 ==&lt;br /&gt;
Poursuite des tutoriaux.&lt;br /&gt;
&lt;br /&gt;
== Semaine 41 ==&lt;br /&gt;
Poursuite des tutoriaux.&lt;br /&gt;
&lt;br /&gt;
== Semaine 42 ==&lt;br /&gt;
Poursuite des tutoriaux.&lt;br /&gt;
&lt;br /&gt;
== Semaine 43 ==&lt;br /&gt;
Poursuite des tutoriaux&lt;br /&gt;
&lt;br /&gt;
== Semaine 44 ==&lt;br /&gt;
Poursuite des tutoriaux&lt;br /&gt;
&lt;br /&gt;
== Semaine 45 ==&lt;br /&gt;
Poursuite des tutoriaux&lt;br /&gt;
&lt;br /&gt;
== Semaine 46 ==&lt;br /&gt;
Poursuite des tutoriaux&lt;br /&gt;
&lt;br /&gt;
== Semaine 47 ==&lt;br /&gt;
Fin de la première partie des tutoriaux.&lt;br /&gt;
&lt;br /&gt;
== Semaine 48 ==&lt;br /&gt;
Démarrage du code du programme à partir du code réalisé pendant les tutoriels.&lt;br /&gt;
&lt;br /&gt;
== Semaine 49 ==&lt;br /&gt;
Ajout de la fonction permettant de récupérer les données des fichiers .obj contenant les vertices, les coordonnées de texture, les vecteurs normaux et les références aux faces (triangles) constituant l'objet 3D.&lt;br /&gt;
&lt;br /&gt;
== Semaine 50 ==&lt;br /&gt;
Nous sommes arrivé durant cette semaine à représenter une tumeur correctement en 3D.&lt;br /&gt;
&lt;br /&gt;
Pour représenter un structure en 3D, nous allons utiliser un ensemble de triangle. Chaque triangle est constitué de 3 vertices qui sont ces sommets. Un vertex est tout simplement un point avec trois dimensions : x,y et z. Ainsi, le but est de relier les trois sommets (vertices) formant un triangle et ensuite de relier tous les triangles. Ainsi, nous obtiendront notre structure en 3D. &lt;br /&gt;
&lt;br /&gt;
Cependant, nous rencontrons un problème quand on a un nombre de vertices élevés à représenter (de l'ordre de 20000 vertices). Une des pistes pour la résolution de ce problème est d'utiliser les display list. Cependant, les display List n'existent plus en OpenGL 3.3. Donc le problème reste irrésolu pour l'instant. On va regarder du coté des VBO (Vertex Buffer Object) et VBA(Vertex Buffer Array).&lt;br /&gt;
&lt;br /&gt;
Les &amp;quot;Display List&amp;quot; permettent un stockage des données sur la carte graphique mais ne permettent pas de mettre à jour ces données. Les &amp;quot;VertexArray&amp;quot; conservent les données dans des tampons en mémoire système ce qui permet de les modifier mais oblige à transférer toutes ces données à chaque fois qu'elles doivent être affichées.&lt;br /&gt;
&lt;br /&gt;
Un VBO est un objet OpenGL qui contient des données relatives à un modèle 3D comme les vertices, les coordonnées de texture, les normales (pour les lumières), ... Sa particularité vient du fait que les données qu'il contient se trouvent non pas dans la RAM mais directement dans la carte graphique.&lt;br /&gt;
&lt;br /&gt;
Les VBO permettent de gagner un temps considérable à OpenGL en évitant de faire des aller-retours inutiles entre la RAM et la mémoire graphique:&lt;br /&gt;
[[Fichier:interet_VBO.png]]&lt;br /&gt;
&lt;br /&gt;
[[Fichier:chargement_avec_VBO.png]]&lt;br /&gt;
&lt;br /&gt;
[[Fichier:affichage_avec_VBO.png]]&lt;br /&gt;
&lt;br /&gt;
Images prises sur : http://fr.openclassrooms.com/informatique/cours/developpez-vos-applications-3d-avec-opengl-3-3/c-est-quoi-un-vbo&lt;br /&gt;
&lt;br /&gt;
On économise ainsi le transfert de centaines de milliers de données à chaque affichage, la carte graphique peut travailler plus rapidement.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous avons aussi trouvé durant cette semaine ce site qui explique très bien la théorie de l'intersection rayon/triangle avec une traduction en code.&lt;br /&gt;
 &lt;br /&gt;
http://www.scratchapixel.com/lessons/3d-basic-lessons/lesson-9-ray-triangle-intersection/ray-triangle-intersection-geometric-solution/&lt;br /&gt;
&lt;br /&gt;
Nous avons grâce à ceci pu coder une méthode adaptée pour tester les triangles de la surface du foie et voir s'ils sont en intersection avec le rayon partant du barycentre de la tumeur et ayant pour vecteur directeur X, Y, ou Z. Une fois le bon triangle trouvé, la fonction se charge de renvoyer le point d'intersection, et il ne reste qu'a récupérer sa coordonnée en X,Y,ou Z (suivant le vecteur directeur précisé dans l'appel à la fonction) qui se trouve être la distance entre la tumeur et la surface du foie. Pour affiner un peu notre méthode, il faut d'abord l'appliquer à l'enveloppe de la tumeur elle même, puis faire de même avec la surface du foie, et soustraire les coordonnées obtenues pour les points d'intersections dans chacune des 3 direction afin d'obtenir une distance correcte pour chaque direction.&lt;br /&gt;
&lt;br /&gt;
== Semaine 51 ==&lt;br /&gt;
Rédaction du rapport d'avancement &lt;br /&gt;
&lt;br /&gt;
Rédaction de la présentation oral&lt;br /&gt;
&lt;br /&gt;
= Conclusion Première partie =&lt;br /&gt;
&lt;br /&gt;
Ce premier semestre à travailler sur ce projet a été des plus instructifs pour nous,&lt;br /&gt;
nous permettant de mieux concevoir la charge de travail que représentait celuici,&lt;br /&gt;
de&lt;br /&gt;
réaliser la chance qu’il nous était donnée de pouvoir apporter notre contribution dans le&lt;br /&gt;
domaine concret et important qu’est la médecine. Cela nous aura aussi permis de nous&lt;br /&gt;
cultiver sur les méthodes utilisées aujourd’hui en chirurgie, ainsi que de découvrir OpenGL&lt;br /&gt;
et la modélisation dans l’espace.&lt;br /&gt;
Les bases de l’application sont bien en place et le cahier des charges bien défini. Il&lt;br /&gt;
reste donc pour la seconde moitié de l’année à finaliser la modélisation des structures&lt;br /&gt;
ainsi que l’affichage de la distance entre la tumeur et la surface du foie. De plus, nous&lt;br /&gt;
devrons rendre l’application dynamique avec la récupération des flux de données en&lt;br /&gt;
temps réel par la caméra.&lt;br /&gt;
&lt;br /&gt;
= Deuxième partie =&lt;br /&gt;
== Objectifs ==&lt;br /&gt;
&lt;br /&gt;
-Résoudre le problème d'affichage du foie grâce aux VBO&lt;br /&gt;
-Finir l'implémentation du calcul de distances&lt;br /&gt;
-Réaliser des propositions d'affichage des distances&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Semaine 1 ==&lt;br /&gt;
Nous avons créé une classe foie pour représenter ce dernier. De ce fait, notre programme sera plus lisible et ordonné.&lt;br /&gt;
&lt;br /&gt;
== Semaine 2 ==&lt;br /&gt;
On arrive enfin à représenter le foie. Pour celà donc, nous avons utilisé les VBO afin d'aboutir à ce résultat.&lt;br /&gt;
La prochaine étape est de représenter la tumeur et le foie en même temps.&lt;br /&gt;
Nous avons créé une classe tumeur qui s'occupe du chargement et de l'affichage de la tumeur.&lt;br /&gt;
Nous arrivons maintenant à afficher le foie et la tumeur en même temps. Cependant, vu que la tumeur se trouve à l'intérieur du foie,&lt;br /&gt;
nous allons changer l'affichage du foie de tel sorte que l'on voit que les traits reliant les triangles sans couleur ni texture.&lt;br /&gt;
On affiche désormais le foie et la tumeur ensemble avec pour le foie juste des traits pour avoir une meilleure vision de la position de la tumeur.&lt;br /&gt;
&lt;br /&gt;
== Semaine 3 ==&lt;br /&gt;
Pour cette semaine, nous sommes arrivés à calculer les distances séparant la tumeur et la surface du foie.&lt;br /&gt;
&lt;br /&gt;
Afin de récupérer la distance séparant la tumeur et le foie, on réalise des tests d’intersection rayon-triangle avec les triangles composant les meshs du foie et de la tumeur. En effet, en réalisant ce test entre un rayon partant du barycentre de la tumeur suivant la direction X,Y ou Z, et les triangles constituant le foie d’une part, et la tumeur d’autre part, on obtient deux distances (toujours selon X, Y, ou Z). La première, distance entre la paroi du foie et le barycentre de la tumeur, la seconde, distance entre la paroi de la tumeur et le barycentre de celle ci. En soustrayant la seconde à la première, on obtient la distance séparant la paroi du foie et la paroi de la tumeur selon un axe prédéfini (X, Y ou Z de notre repère). Il suffit ensuite de réaliser le calcul une fois pour chaque axe.&lt;br /&gt;
Ce calcul se réalise en plusieurs étapes mathématiques présentées ci dessous :&lt;br /&gt;
&lt;br /&gt;
Image rayon [[Fichier:Raytracing.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Afin de savoir s’il y a intersection entre un rayon et un triangle, il est plus aisé de commencer tout d’abord par vérifier s’il y a intersection entre ce même rayon et le plan contenant le triangle.&lt;br /&gt;
Pour cela, on calcule le vecteur normal du plan. Le vecteur normal du plan s’obtient en faisant le produit vectoriel de deux vecteurs non colinéaires du plan. On connaît 3 points du plan (les points constituant le triangle en train d’être testé), que l’on nommera ici v0, v1 et v2. On peut donc calculer le produit vectoriel de v0v1 et v0v2 par exemple, pour obtenir le vecteur normal N(A,B,C). Une fois le vecteur normal obtenu, on réalise le produit scalaire entre N et le rayon. Si le résultat est nul, le plan et le rayon sont parallèles donc il n’y a pas intersection. Sinon on a confirmation que le rayon et le plan entrent en intersection.&lt;br /&gt;
Cela permet ensuite, si intersection il y a, de calculer les coordonnées du point d’intersection P entre le rayon et le plan. P est défini de cette façon:&lt;br /&gt;
P = O + t * D			-O l’origine (ici le barycentre de la tumeur)&lt;br /&gt;
		-D le vecteur directeur du rayon&lt;br /&gt;
				-t la distance entre O et P &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
L’équation du plan contenant le triangle est celle-ci:&lt;br /&gt;
A * x + B * y + C * z + d = 0		-A,B et C sont les composantes du vecteur normal au &lt;br /&gt;
plan N(A,B,C).&lt;br /&gt;
-(x,y,z) un point du plan.&lt;br /&gt;
-d la distance de l’origine (du repère) au plan, suivant la direction du vecteur normal au plan.&lt;br /&gt;
&lt;br /&gt;
Grâce aux deux formules précedentes, on en déduit le calcul de t :&lt;br /&gt;
	t = - ( N . O + d ) / ( N . D)&lt;br /&gt;
&lt;br /&gt;
Une fois t calculé, on peut aisément obtenir les coordonnées de P. On peut maintenant passer au deuxième test à réaliser, qui est le test d’appartenance d’un point à un triangle.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Raytracing1.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Le principe de ce test est le suivant:&lt;br /&gt;
On calcule les vecteurs partant des points du triangle et allant vers P : v0P, v1P, v2P.&lt;br /&gt;
On calcule de même les vecteurs correspondants aux cotés du triangle : v0v1, v1v2, v2v0.&lt;br /&gt;
On calcule le produit vectoriel de chacun de ces vecteurs avec les vecteurs contenant P:&lt;br /&gt;
u = v0v1 ^ v0P, v = v1v2 ^ v1P, w = v2v0 ^ v2P.&lt;br /&gt;
Si P appartient au triangle, les vecteurs u, v et w ainsi calculés seront colinéaires de même sens avec le vecteur normal au triangle N. (voir Figure 11)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
On réalise donc les tests suivants: (produit scalaire)&lt;br /&gt;
N . u, N . v, N . w&lt;br /&gt;
&lt;br /&gt;
Si le résultat est positif, P est placé à l’intérieur du triangle par rapport au coté testé. (u teste le coté v0v1, v teste v1v2, w teste v2v0)&lt;br /&gt;
Si les trois tests sont positifs, cela signifie que P est bien à l’intérieur du triangle.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Raytracing2.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Une fois ces tests concluants, on récupère la distance voulue avec le calcul suivant :&lt;br /&gt;
Distance =  t * D(x,y,z) &lt;br /&gt;
Ceci nous donne une distance selon les 3 axes, grâce à une comparaison du vecteur directeur et des vecteurs X, Y, et Z, on récupère uniquement la distance voulue :&lt;br /&gt;
Distance = t * D.x ou t * D.y ou t *D.z&lt;br /&gt;
&lt;br /&gt;
Pour le temps restant au projet, nous allons proposer différentes solutions pour l'affichage de ces distances. &lt;br /&gt;
De même, nous allons rédiger notre rapport et nous préparer à la soutenance finale.&lt;br /&gt;
&lt;br /&gt;
== Semaine 4 ==&lt;br /&gt;
&lt;br /&gt;
= Conclusion =&lt;br /&gt;
Diagramme UML de notre application finale:&lt;br /&gt;
&lt;br /&gt;
Voici un bref résumé de chacune des classes et de leurs fonctions :&lt;br /&gt;
&lt;br /&gt;
La classe Camera.cpp s’occupe de gérer tous les placements et les orientations que la caméra va prendre.&lt;br /&gt;
&lt;br /&gt;
La classe Input.cpp s’occupe de gérer tous les évènements clavier et souris, les rendant plus simples d’utilisation.&lt;br /&gt;
&lt;br /&gt;
La classe Shader.cpp permet de charger et de compiler le shader en charge de l’affichage de couleurs sur notre représentation.&lt;br /&gt;
&lt;br /&gt;
La classe principale: SceneOpenGL.cpp qui met en relation les différentes classes, permet la création de la scène, et dans laquelle nous avons codé les différentes fonctions nécessaires au programme, notamment la fonction de calcul des distances.&lt;br /&gt;
&lt;br /&gt;
La classe Texture.cpp permet de charger des textures à la place des couleurs.&lt;br /&gt;
&lt;br /&gt;
La classe Tumor.cpp permet de récupérer les vertices de la tumeur et de l’afficher.&lt;br /&gt;
&lt;br /&gt;
La classe Liver.cpp permet de récupérer les vertices du foie et de l’afficher.&lt;br /&gt;
&lt;br /&gt;
La classe DistanceDisplay.cpp permet d’afficher les distances séparant la tumeur de la surface du foie suivant les trois axes x, y et z.&lt;/div&gt;</summary>
		<author><name>Cdelberg</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=R%C3%A9alit%C3%A9_Augment%C3%A9e_pour_la_chirurgie&amp;diff=10288</id>
		<title>Réalité Augmentée pour la chirurgie</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=R%C3%A9alit%C3%A9_Augment%C3%A9e_pour_la_chirurgie&amp;diff=10288"/>
				<updated>2014-02-27T14:56:47Z</updated>
		
		<summary type="html">&lt;p&gt;Cdelberg : /* Deuxième partie */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Papa Momar MBOUP/ Calvin DELBERGHE&lt;br /&gt;
&lt;br /&gt;
= Présentation =&lt;br /&gt;
&lt;br /&gt;
== Description et Objectif: ==&lt;br /&gt;
&lt;br /&gt;
Notre projet consiste à assister les chirurgiens lors de chirurgies laparoscopiques. La chirurgie laparoscopique est une technique chirurgicale minimalement invasive où le chirurgien réalise une opération de l'abdomen par de petites incisions où sont placés des trocars qui permettent le passage de fins instruments chirurgicaux. Dans le cadre de ce projet, il s’agit de réaliser l’ablation de la(des) tumeur(s) présente(s) dans le foie du patient. La localisation des tumeurs ainsi que de l’ensemble du réseau vasculaire peut etre réalisé grâce à un scanner pré-opératoire et donc reconstruits en 3D. Cependant, ils ne peuvent pas être visualisés par la caméra lors de l’opération chirurgicale. &lt;br /&gt;
&lt;br /&gt;
Ainsi, le chirurgien ne peut en aucun cas connaitre la localisation de la tumeur et ne peut pas se représenter la distance qui la sépare des parois du foie. D’où le but de notre projet: aider les chirurgiens dans ces opérations. Des travaux récents de l'équipe de recherche Shacra ont permis de suivre avec une bonne précision le mouvement de structures internes du foie pendant une opération laparoscopique. Le projet consiste à utiliser ces travaux pour mélanger le flux vidéo fourni par l'endoscope aux informations calculées par la simulation pour fournir aux chirurgiens des informations utiles sur la position des structures internes du foie lors de la manipulation. Différentes pistes pourront être explorées pour ne pas surcharger le flux vidéo tout en fournissant les informations importantes (position, profondeur, distance à la surface du foie...)&lt;br /&gt;
&lt;br /&gt;
== Environnement de travail :==&lt;br /&gt;
1 ordinateur&lt;br /&gt;
&lt;br /&gt;
OpenGL 3.3 &lt;br /&gt;
&lt;br /&gt;
SDL 2.0&lt;br /&gt;
&lt;br /&gt;
IDE CodeBlocks&lt;br /&gt;
&lt;br /&gt;
= Plan d'action / Gestion de projet =&lt;br /&gt;
Dans un premier temps, nous allons commencer à suivre des tutoriaux sur le framework OpenGL. Quand on sera assez avancé, nous débuterons le codage du programme principal. Donc pour le premier semestre, le plan est de mettre en place la base du programme et de bien maîtriser OpenGL pour la suite quand on ajoutera des fonctions plus poussées dans le programme.&lt;br /&gt;
&lt;br /&gt;
= Réalisation =&lt;br /&gt;
&lt;br /&gt;
== Semaine 37 ==&lt;br /&gt;
Présentation et Choix du sujet.&lt;br /&gt;
&lt;br /&gt;
== Semaine 38 ==&lt;br /&gt;
Rencontre avec les encadrants du projet:&lt;br /&gt;
 Explication détaillée du sujet ainsi que les attentes du projet.&lt;br /&gt;
 Réception des premières données pour débuter quelques tests avec OpenGL.&lt;br /&gt;
== Semaine 39 ==&lt;br /&gt;
Installation d'OpenGL sous Windows avec CodeBlocks.&lt;br /&gt;
Début des tutoriaux sur le site du zéro:&lt;br /&gt;
&lt;br /&gt;
http://fr.openclassrooms.com/informatique/cours/developpez-vos-applications-3d-avec-opengl-3-3&lt;br /&gt;
&lt;br /&gt;
== Semaine 40 ==&lt;br /&gt;
Poursuite des tutoriaux.&lt;br /&gt;
&lt;br /&gt;
== Semaine 41 ==&lt;br /&gt;
Poursuite des tutoriaux.&lt;br /&gt;
&lt;br /&gt;
== Semaine 42 ==&lt;br /&gt;
Poursuite des tutoriaux.&lt;br /&gt;
&lt;br /&gt;
== Semaine 43 ==&lt;br /&gt;
Poursuite des tutoriaux&lt;br /&gt;
&lt;br /&gt;
== Semaine 44 ==&lt;br /&gt;
Poursuite des tutoriaux&lt;br /&gt;
&lt;br /&gt;
== Semaine 45 ==&lt;br /&gt;
Poursuite des tutoriaux&lt;br /&gt;
&lt;br /&gt;
== Semaine 46 ==&lt;br /&gt;
Poursuite des tutoriaux&lt;br /&gt;
&lt;br /&gt;
== Semaine 47 ==&lt;br /&gt;
Fin de la première partie des tutoriaux.&lt;br /&gt;
&lt;br /&gt;
== Semaine 48 ==&lt;br /&gt;
Démarrage du code du programme à partir du code réalisé pendant les tutoriels.&lt;br /&gt;
&lt;br /&gt;
== Semaine 49 ==&lt;br /&gt;
Ajout de la fonction permettant de récupérer les données des fichiers .obj contenant les vertices, les coordonnées de texture, les vecteurs normaux et les références aux faces (triangles) constituant l'objet 3D.&lt;br /&gt;
&lt;br /&gt;
== Semaine 50 ==&lt;br /&gt;
Nous sommes arrivé durant cette semaine à représenter une tumeur correctement en 3D.&lt;br /&gt;
&lt;br /&gt;
Pour représenter un structure en 3D, nous allons utiliser un ensemble de triangle. Chaque triangle est constitué de 3 vertices qui sont ces sommets. Un vertex est tout simplement un point avec trois dimensions : x,y et z. Ainsi, le but est de relier les trois sommets (vertices) formant un triangle et ensuite de relier tous les triangles. Ainsi, nous obtiendront notre structure en 3D. &lt;br /&gt;
&lt;br /&gt;
Cependant, nous rencontrons un problème quand on a un nombre de vertices élevés à représenter (de l'ordre de 20000 vertices). Une des pistes pour la résolution de ce problème est d'utiliser les display list. Cependant, les display List n'existent plus en OpenGL 3.3. Donc le problème reste irrésolu pour l'instant. On va regarder du coté des VBO (Vertex Buffer Object) et VBA(Vertex Buffer Array).&lt;br /&gt;
&lt;br /&gt;
Les &amp;quot;Display List&amp;quot; permettent un stockage des données sur la carte graphique mais ne permettent pas de mettre à jour ces données. Les &amp;quot;VertexArray&amp;quot; conservent les données dans des tampons en mémoire système ce qui permet de les modifier mais oblige à transférer toutes ces données à chaque fois qu'elles doivent être affichées.&lt;br /&gt;
&lt;br /&gt;
Un VBO est un objet OpenGL qui contient des données relatives à un modèle 3D comme les vertices, les coordonnées de texture, les normales (pour les lumières), ... Sa particularité vient du fait que les données qu'il contient se trouvent non pas dans la RAM mais directement dans la carte graphique.&lt;br /&gt;
&lt;br /&gt;
Les VBO permettent de gagner un temps considérable à OpenGL en évitant de faire des aller-retours inutiles entre la RAM et la mémoire graphique:&lt;br /&gt;
[[Fichier:interet_VBO.png]]&lt;br /&gt;
&lt;br /&gt;
[[Fichier:chargement_avec_VBO.png]]&lt;br /&gt;
&lt;br /&gt;
[[Fichier:affichage_avec_VBO.png]]&lt;br /&gt;
&lt;br /&gt;
Images prises sur : http://fr.openclassrooms.com/informatique/cours/developpez-vos-applications-3d-avec-opengl-3-3/c-est-quoi-un-vbo&lt;br /&gt;
&lt;br /&gt;
On économise ainsi le transfert de centaines de milliers de données à chaque affichage, la carte graphique peut travailler plus rapidement.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous avons aussi trouvé durant cette semaine ce site qui explique très bien la théorie de l'intersection rayon/triangle avec une traduction en code.&lt;br /&gt;
 &lt;br /&gt;
http://www.scratchapixel.com/lessons/3d-basic-lessons/lesson-9-ray-triangle-intersection/ray-triangle-intersection-geometric-solution/&lt;br /&gt;
&lt;br /&gt;
Nous avons grâce à ceci pu coder une méthode adaptée pour tester les triangles de la surface du foie et voir s'ils sont en intersection avec le rayon partant du barycentre de la tumeur et ayant pour vecteur directeur X, Y, ou Z. Une fois le bon triangle trouvé, la fonction se charge de renvoyer le point d'intersection, et il ne reste qu'a récupérer sa coordonnée en X,Y,ou Z (suivant le vecteur directeur précisé dans l'appel à la fonction) qui se trouve être la distance entre la tumeur et la surface du foie. Pour affiner un peu notre méthode, il faut d'abord l'appliquer à l'enveloppe de la tumeur elle même, puis faire de même avec la surface du foie, et soustraire les coordonnées obtenues pour les points d'intersections dans chacune des 3 direction afin d'obtenir une distance correcte pour chaque direction.&lt;br /&gt;
&lt;br /&gt;
== Semaine 51 ==&lt;br /&gt;
Rédaction du rapport d'avancement &lt;br /&gt;
&lt;br /&gt;
Rédaction de la présentation oral&lt;br /&gt;
&lt;br /&gt;
= Conclusion Première partie =&lt;br /&gt;
&lt;br /&gt;
Ce premier semestre à travailler sur ce projet a été des plus instructifs pour nous,&lt;br /&gt;
nous permettant de mieux concevoir la charge de travail que représentait celuici,&lt;br /&gt;
de&lt;br /&gt;
réaliser la chance qu’il nous était donnée de pouvoir apporter notre contribution dans le&lt;br /&gt;
domaine concret et important qu’est la médecine. Cela nous aura aussi permis de nous&lt;br /&gt;
cultiver sur les méthodes utilisées aujourd’hui en chirurgie, ainsi que de découvrir OpenGL&lt;br /&gt;
et la modélisation dans l’espace.&lt;br /&gt;
Les bases de l’application sont bien en place et le cahier des charges bien défini. Il&lt;br /&gt;
reste donc pour la seconde moitié de l’année à finaliser la modélisation des structures&lt;br /&gt;
ainsi que l’affichage de la distance entre la tumeur et la surface du foie. De plus, nous&lt;br /&gt;
devrons rendre l’application dynamique avec la récupération des flux de données en&lt;br /&gt;
temps réel par la caméra.&lt;br /&gt;
&lt;br /&gt;
= Deuxième partie =&lt;br /&gt;
== Objectifs ==&lt;br /&gt;
&lt;br /&gt;
-Résoudre le problème d'affichage du foie grâce aux VBO&lt;br /&gt;
-Finir l'implémentation du calcul de distances&lt;br /&gt;
-Réaliser des propositions d'affichage des distances&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Semaine 1 ==&lt;br /&gt;
Nous avons créé une classe foie pour représenter ce dernier. De ce fait, notre programme sera plus lisible et ordonné.&lt;br /&gt;
&lt;br /&gt;
== Semaine 2 ==&lt;br /&gt;
On arrive enfin à représenter le foie. Pour celà donc, nous avons utilisé les VBO afin d'aboutir à ce résultat.&lt;br /&gt;
La prochaine étape est de représenter la tumeur et le foie en même temps.&lt;br /&gt;
Nous avons créé une classe tumeur qui s'occupe du chargement et de l'affichage de la tumeur.&lt;br /&gt;
Nous arrivons maintenant à afficher le foie et la tumeur en même temps. Cependant, vu que la tumeur se trouve à l'intérieur du foie,&lt;br /&gt;
nous allons changer l'affichage du foie de tel sorte que l'on voit que les traits reliant les triangles sans couleur ni texture.&lt;br /&gt;
On affiche désormais le foie et la tumeur ensemble avec pour le foie juste des traits pour avoir une meilleure vision de la position de la tumeur.&lt;br /&gt;
&lt;br /&gt;
== Semaine 3 ==&lt;br /&gt;
Pour cette semaine, nous sommes arrivés à calculer les distances séparant la tumeur et la surface du foie.&lt;br /&gt;
&lt;br /&gt;
Afin de récupérer la distance séparant la tumeur et le foie, on réalise des tests d’intersection rayon-triangle avec les triangles composant les meshs du foie et de la tumeur. En effet, en réalisant ce test entre un rayon partant du barycentre de la tumeur suivant la direction X,Y ou Z, et les triangles constituant le foie d’une part, et la tumeur d’autre part, on obtient deux distances (toujours selon X, Y, ou Z). La première, distance entre la paroi du foie et le barycentre de la tumeur, la seconde, distance entre la paroi de la tumeur et le barycentre de celle ci. En soustrayant la seconde à la première, on obtient la distance séparant la paroi du foie et la paroi de la tumeur selon un axe prédéfini (X, Y ou Z de notre repère). Il suffit ensuite de réaliser le calcul une fois pour chaque axe.&lt;br /&gt;
Ce calcul se réalise en plusieurs étapes mathématiques présentées ci dessous :&lt;br /&gt;
&lt;br /&gt;
Image rayon [[Fichier:Raytracing.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Afin de savoir s’il y a intersection entre un rayon et un triangle, il est plus aisé de commencer tout d’abord par vérifier s’il y a intersection entre ce même rayon et le plan contenant le triangle.&lt;br /&gt;
Pour cela, on calcule le vecteur normal du plan. Le vecteur normal du plan s’obtient en faisant le produit vectoriel de deux vecteurs non colinéaires du plan. On connaît 3 points du plan (les points constituant le triangle en train d’être testé), que l’on nommera ici v0, v1 et v2. On peut donc calculer le produit vectoriel de v0v1 et v0v2 par exemple, pour obtenir le vecteur normal N(A,B,C). Une fois le vecteur normal obtenu, on réalise le produit scalaire entre N et le rayon. Si le résultat est nul, le plan et le rayon sont parallèles donc il n’y a pas intersection. Sinon on a confirmation que le rayon et le plan entrent en intersection.&lt;br /&gt;
Cela permet ensuite, si intersection il y a, de calculer les coordonnées du point d’intersection P entre le rayon et le plan. P est défini de cette façon:&lt;br /&gt;
P = O + t * D			-O l’origine (ici le barycentre de la tumeur)&lt;br /&gt;
		-D le vecteur directeur du rayon&lt;br /&gt;
				-t la distance entre O et P &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
L’équation du plan contenant le triangle est celle-ci:&lt;br /&gt;
A * x + B * y + C * z + d = 0		-A,B et C sont les composantes du vecteur normal au &lt;br /&gt;
plan N(A,B,C).&lt;br /&gt;
-(x,y,z) un point du plan.&lt;br /&gt;
-d la distance de l’origine (du repère) au plan, suivant la direction du vecteur normal au plan.&lt;br /&gt;
&lt;br /&gt;
Grâce aux deux formules précedentes, on en déduit le calcul de t :&lt;br /&gt;
	t = - ( N . O + d ) / ( N . D)&lt;br /&gt;
&lt;br /&gt;
Une fois t calculé, on peut aisément obtenir les coordonnées de P. On peut maintenant passer au deuxième test à réaliser, qui est le test d’appartenance d’un point à un triangle.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Raytracing1.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Le principe de ce test est le suivant:&lt;br /&gt;
On calcule les vecteurs partant des points du triangle et allant vers P : v0P, v1P, v2P.&lt;br /&gt;
On calcule de même les vecteurs correspondants aux cotés du triangle : v0v1, v1v2, v2v0.&lt;br /&gt;
On calcule le produit vectoriel de chacun de ces vecteurs avec les vecteurs contenant P:&lt;br /&gt;
u = v0v1 ^ v0P, v = v1v2 ^ v1P, w = v2v0 ^ v2P.&lt;br /&gt;
Si P appartient au triangle, les vecteurs u, v et w ainsi calculés seront colinéaires de même sens avec le vecteur normal au triangle N. (voir Figure 11)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
On réalise donc les tests suivants: (produit scalaire)&lt;br /&gt;
N . u, N . v, N . w&lt;br /&gt;
&lt;br /&gt;
Si le résultat est positif, P est placé à l’intérieur du triangle par rapport au coté testé. (u teste le coté v0v1, v teste v1v2, w teste v2v0)&lt;br /&gt;
Si les trois tests sont positifs, cela signifie que P est bien à l’intérieur du triangle.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Raytracing2.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Une fois ces tests concluants, on récupère la distance voulue avec le calcul suivant :&lt;br /&gt;
Distance =  t * D(x,y,z) &lt;br /&gt;
Ceci nous donne une distance selon les 3 axes, grâce à une comparaison du vecteur directeur et des vecteurs X, Y, et Z, on récupère uniquement la distance voulue :&lt;br /&gt;
Distance = t * D.x ou t * D.y ou t *D.z&lt;br /&gt;
&lt;br /&gt;
Pour le temps restant au projet, nous allons proposer différentes solutions pour l'affichage de ces distances. &lt;br /&gt;
De même, nous allons rédiger notre rapport et nous préparer à la soutenance finale.&lt;br /&gt;
&lt;br /&gt;
== Semaine 4 ==&lt;br /&gt;
&lt;br /&gt;
= Conclusion =&lt;/div&gt;</summary>
		<author><name>Cdelberg</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=R%C3%A9alit%C3%A9_Augment%C3%A9e_pour_la_chirurgie&amp;diff=10287</id>
		<title>Réalité Augmentée pour la chirurgie</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=R%C3%A9alit%C3%A9_Augment%C3%A9e_pour_la_chirurgie&amp;diff=10287"/>
				<updated>2014-02-27T14:54:15Z</updated>
		
		<summary type="html">&lt;p&gt;Cdelberg : /* Semaine 3 de Mars */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Papa Momar MBOUP/ Calvin DELBERGHE&lt;br /&gt;
&lt;br /&gt;
= Présentation =&lt;br /&gt;
&lt;br /&gt;
== Description et Objectif: ==&lt;br /&gt;
&lt;br /&gt;
Notre projet consiste à assister les chirurgiens lors de chirurgies laparoscopiques. La chirurgie laparoscopique est une technique chirurgicale minimalement invasive où le chirurgien réalise une opération de l'abdomen par de petites incisions où sont placés des trocars qui permettent le passage de fins instruments chirurgicaux. Dans le cadre de ce projet, il s’agit de réaliser l’ablation de la(des) tumeur(s) présente(s) dans le foie du patient. La localisation des tumeurs ainsi que de l’ensemble du réseau vasculaire peut etre réalisé grâce à un scanner pré-opératoire et donc reconstruits en 3D. Cependant, ils ne peuvent pas être visualisés par la caméra lors de l’opération chirurgicale. &lt;br /&gt;
&lt;br /&gt;
Ainsi, le chirurgien ne peut en aucun cas connaitre la localisation de la tumeur et ne peut pas se représenter la distance qui la sépare des parois du foie. D’où le but de notre projet: aider les chirurgiens dans ces opérations. Des travaux récents de l'équipe de recherche Shacra ont permis de suivre avec une bonne précision le mouvement de structures internes du foie pendant une opération laparoscopique. Le projet consiste à utiliser ces travaux pour mélanger le flux vidéo fourni par l'endoscope aux informations calculées par la simulation pour fournir aux chirurgiens des informations utiles sur la position des structures internes du foie lors de la manipulation. Différentes pistes pourront être explorées pour ne pas surcharger le flux vidéo tout en fournissant les informations importantes (position, profondeur, distance à la surface du foie...)&lt;br /&gt;
&lt;br /&gt;
== Environnement de travail :==&lt;br /&gt;
1 ordinateur&lt;br /&gt;
&lt;br /&gt;
OpenGL 3.3 &lt;br /&gt;
&lt;br /&gt;
SDL 2.0&lt;br /&gt;
&lt;br /&gt;
IDE CodeBlocks&lt;br /&gt;
&lt;br /&gt;
= Plan d'action / Gestion de projet =&lt;br /&gt;
Dans un premier temps, nous allons commencer à suivre des tutoriaux sur le framework OpenGL. Quand on sera assez avancé, nous débuterons le codage du programme principal. Donc pour le premier semestre, le plan est de mettre en place la base du programme et de bien maîtriser OpenGL pour la suite quand on ajoutera des fonctions plus poussées dans le programme.&lt;br /&gt;
&lt;br /&gt;
= Réalisation =&lt;br /&gt;
&lt;br /&gt;
== Semaine 37 ==&lt;br /&gt;
Présentation et Choix du sujet.&lt;br /&gt;
&lt;br /&gt;
== Semaine 38 ==&lt;br /&gt;
Rencontre avec les encadrants du projet:&lt;br /&gt;
 Explication détaillée du sujet ainsi que les attentes du projet.&lt;br /&gt;
 Réception des premières données pour débuter quelques tests avec OpenGL.&lt;br /&gt;
== Semaine 39 ==&lt;br /&gt;
Installation d'OpenGL sous Windows avec CodeBlocks.&lt;br /&gt;
Début des tutoriaux sur le site du zéro:&lt;br /&gt;
&lt;br /&gt;
http://fr.openclassrooms.com/informatique/cours/developpez-vos-applications-3d-avec-opengl-3-3&lt;br /&gt;
&lt;br /&gt;
== Semaine 40 ==&lt;br /&gt;
Poursuite des tutoriaux.&lt;br /&gt;
&lt;br /&gt;
== Semaine 41 ==&lt;br /&gt;
Poursuite des tutoriaux.&lt;br /&gt;
&lt;br /&gt;
== Semaine 42 ==&lt;br /&gt;
Poursuite des tutoriaux.&lt;br /&gt;
&lt;br /&gt;
== Semaine 43 ==&lt;br /&gt;
Poursuite des tutoriaux&lt;br /&gt;
&lt;br /&gt;
== Semaine 44 ==&lt;br /&gt;
Poursuite des tutoriaux&lt;br /&gt;
&lt;br /&gt;
== Semaine 45 ==&lt;br /&gt;
Poursuite des tutoriaux&lt;br /&gt;
&lt;br /&gt;
== Semaine 46 ==&lt;br /&gt;
Poursuite des tutoriaux&lt;br /&gt;
&lt;br /&gt;
== Semaine 47 ==&lt;br /&gt;
Fin de la première partie des tutoriaux.&lt;br /&gt;
&lt;br /&gt;
== Semaine 48 ==&lt;br /&gt;
Démarrage du code du programme à partir du code réalisé pendant les tutoriels.&lt;br /&gt;
&lt;br /&gt;
== Semaine 49 ==&lt;br /&gt;
Ajout de la fonction permettant de récupérer les données des fichiers .obj contenant les vertices, les coordonnées de texture, les vecteurs normaux et les références aux faces (triangles) constituant l'objet 3D.&lt;br /&gt;
&lt;br /&gt;
== Semaine 50 ==&lt;br /&gt;
Nous sommes arrivé durant cette semaine à représenter une tumeur correctement en 3D.&lt;br /&gt;
&lt;br /&gt;
Pour représenter un structure en 3D, nous allons utiliser un ensemble de triangle. Chaque triangle est constitué de 3 vertices qui sont ces sommets. Un vertex est tout simplement un point avec trois dimensions : x,y et z. Ainsi, le but est de relier les trois sommets (vertices) formant un triangle et ensuite de relier tous les triangles. Ainsi, nous obtiendront notre structure en 3D. &lt;br /&gt;
&lt;br /&gt;
Cependant, nous rencontrons un problème quand on a un nombre de vertices élevés à représenter (de l'ordre de 20000 vertices). Une des pistes pour la résolution de ce problème est d'utiliser les display list. Cependant, les display List n'existent plus en OpenGL 3.3. Donc le problème reste irrésolu pour l'instant. On va regarder du coté des VBO (Vertex Buffer Object) et VBA(Vertex Buffer Array).&lt;br /&gt;
&lt;br /&gt;
Les &amp;quot;Display List&amp;quot; permettent un stockage des données sur la carte graphique mais ne permettent pas de mettre à jour ces données. Les &amp;quot;VertexArray&amp;quot; conservent les données dans des tampons en mémoire système ce qui permet de les modifier mais oblige à transférer toutes ces données à chaque fois qu'elles doivent être affichées.&lt;br /&gt;
&lt;br /&gt;
Un VBO est un objet OpenGL qui contient des données relatives à un modèle 3D comme les vertices, les coordonnées de texture, les normales (pour les lumières), ... Sa particularité vient du fait que les données qu'il contient se trouvent non pas dans la RAM mais directement dans la carte graphique.&lt;br /&gt;
&lt;br /&gt;
Les VBO permettent de gagner un temps considérable à OpenGL en évitant de faire des aller-retours inutiles entre la RAM et la mémoire graphique:&lt;br /&gt;
[[Fichier:interet_VBO.png]]&lt;br /&gt;
&lt;br /&gt;
[[Fichier:chargement_avec_VBO.png]]&lt;br /&gt;
&lt;br /&gt;
[[Fichier:affichage_avec_VBO.png]]&lt;br /&gt;
&lt;br /&gt;
Images prises sur : http://fr.openclassrooms.com/informatique/cours/developpez-vos-applications-3d-avec-opengl-3-3/c-est-quoi-un-vbo&lt;br /&gt;
&lt;br /&gt;
On économise ainsi le transfert de centaines de milliers de données à chaque affichage, la carte graphique peut travailler plus rapidement.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous avons aussi trouvé durant cette semaine ce site qui explique très bien la théorie de l'intersection rayon/triangle avec une traduction en code.&lt;br /&gt;
 &lt;br /&gt;
http://www.scratchapixel.com/lessons/3d-basic-lessons/lesson-9-ray-triangle-intersection/ray-triangle-intersection-geometric-solution/&lt;br /&gt;
&lt;br /&gt;
Nous avons grâce à ceci pu coder une méthode adaptée pour tester les triangles de la surface du foie et voir s'ils sont en intersection avec le rayon partant du barycentre de la tumeur et ayant pour vecteur directeur X, Y, ou Z. Une fois le bon triangle trouvé, la fonction se charge de renvoyer le point d'intersection, et il ne reste qu'a récupérer sa coordonnée en X,Y,ou Z (suivant le vecteur directeur précisé dans l'appel à la fonction) qui se trouve être la distance entre la tumeur et la surface du foie. Pour affiner un peu notre méthode, il faut d'abord l'appliquer à l'enveloppe de la tumeur elle même, puis faire de même avec la surface du foie, et soustraire les coordonnées obtenues pour les points d'intersections dans chacune des 3 direction afin d'obtenir une distance correcte pour chaque direction.&lt;br /&gt;
&lt;br /&gt;
== Semaine 51 ==&lt;br /&gt;
Rédaction du rapport d'avancement &lt;br /&gt;
&lt;br /&gt;
Rédaction de la présentation oral&lt;br /&gt;
&lt;br /&gt;
= Conclusion Première partie =&lt;br /&gt;
&lt;br /&gt;
Ce premier semestre à travailler sur ce projet a été des plus instructifs pour nous,&lt;br /&gt;
nous permettant de mieux concevoir la charge de travail que représentait celuici,&lt;br /&gt;
de&lt;br /&gt;
réaliser la chance qu’il nous était donnée de pouvoir apporter notre contribution dans le&lt;br /&gt;
domaine concret et important qu’est la médecine. Cela nous aura aussi permis de nous&lt;br /&gt;
cultiver sur les méthodes utilisées aujourd’hui en chirurgie, ainsi que de découvrir OpenGL&lt;br /&gt;
et la modélisation dans l’espace.&lt;br /&gt;
Les bases de l’application sont bien en place et le cahier des charges bien défini. Il&lt;br /&gt;
reste donc pour la seconde moitié de l’année à finaliser la modélisation des structures&lt;br /&gt;
ainsi que l’affichage de la distance entre la tumeur et la surface du foie. De plus, nous&lt;br /&gt;
devrons rendre l’application dynamique avec la récupération des flux de données en&lt;br /&gt;
temps réel par la caméra.&lt;br /&gt;
&lt;br /&gt;
= Deuxième partie =&lt;br /&gt;
== Objectifs ==&lt;br /&gt;
Les objectifs pour cette seconde partie sont représentés dans notre planning: &lt;br /&gt;
 &lt;br /&gt;
'''PHOTO''' '''PHOTO''' '''PHOTO''' '''PHOTO'''&lt;br /&gt;
&lt;br /&gt;
== Semaine 1 de Mars ==&lt;br /&gt;
Nous avons créé une classe foie pour représenter ce dernier. De ce fait, notre programme sera plus lisible et ordonné.&lt;br /&gt;
&lt;br /&gt;
== Semaine 2 de Mars ==&lt;br /&gt;
On arrive enfin à représenter le foie. Pour celà donc, nous avons utilisé les VBO afin d'aboutir à ce résultat.&lt;br /&gt;
La prochaine étape est de représenter la tumeur et le foie en même temps.&lt;br /&gt;
Nous avons créé une classe tumeur qui s'occupe du chargement et de l'affichage de la tumeur.&lt;br /&gt;
Nous arrivons maintenant à afficher le foie et la tumeur en même temps. Cependant, vu que la tumeur se trouve à l'intérieur du foie,&lt;br /&gt;
nous allons changer l'affichage du foie de tel sorte que l'on voit que les traits reliant les triangles sans couleur ni texture.&lt;br /&gt;
On affiche désormais le foie et la tumeur ensemble avec pour le foie juste des traits pour avoir une meilleure vision de la position de la tumeur.&lt;br /&gt;
&lt;br /&gt;
== Semaine 3 ==&lt;br /&gt;
Pour cette semaine, nous sommes arrivés à calculer les distances séparant la tumeur et la surface du foie.&lt;br /&gt;
&lt;br /&gt;
Afin de récupérer la distance séparant la tumeur et le foie, on réalise des tests d’intersection rayon-triangle avec les triangles composant les meshs du foie et de la tumeur. En effet, en réalisant ce test entre un rayon partant du barycentre de la tumeur suivant la direction X,Y ou Z, et les triangles constituant le foie d’une part, et la tumeur d’autre part, on obtient deux distances (toujours selon X, Y, ou Z). La première, distance entre la paroi du foie et le barycentre de la tumeur, la seconde, distance entre la paroi de la tumeur et le barycentre de celle ci. En soustrayant la seconde à la première, on obtient la distance séparant la paroi du foie et la paroi de la tumeur selon un axe prédéfini (X, Y ou Z de notre repère). Il suffit ensuite de réaliser le calcul une fois pour chaque axe.&lt;br /&gt;
Ce calcul se réalise en plusieurs étapes mathématiques présentées ci dessous :&lt;br /&gt;
&lt;br /&gt;
Image rayon [[Fichier:Raytracing.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Afin de savoir s’il y a intersection entre un rayon et un triangle, il est plus aisé de commencer tout d’abord par vérifier s’il y a intersection entre ce même rayon et le plan contenant le triangle.&lt;br /&gt;
Pour cela, on calcule le vecteur normal du plan. Le vecteur normal du plan s’obtient en faisant le produit vectoriel de deux vecteurs non colinéaires du plan. On connaît 3 points du plan (les points constituant le triangle en train d’être testé), que l’on nommera ici v0, v1 et v2. On peut donc calculer le produit vectoriel de v0v1 et v0v2 par exemple, pour obtenir le vecteur normal N(A,B,C). Une fois le vecteur normal obtenu, on réalise le produit scalaire entre N et le rayon. Si le résultat est nul, le plan et le rayon sont parallèles donc il n’y a pas intersection. Sinon on a confirmation que le rayon et le plan entrent en intersection.&lt;br /&gt;
Cela permet ensuite, si intersection il y a, de calculer les coordonnées du point d’intersection P entre le rayon et le plan. P est défini de cette façon:&lt;br /&gt;
P = O + t * D			-O l’origine (ici le barycentre de la tumeur)&lt;br /&gt;
		-D le vecteur directeur du rayon&lt;br /&gt;
				-t la distance entre O et P &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
L’équation du plan contenant le triangle est celle-ci:&lt;br /&gt;
A * x + B * y + C * z + d = 0		-A,B et C sont les composantes du vecteur normal au &lt;br /&gt;
plan N(A,B,C).&lt;br /&gt;
-(x,y,z) un point du plan.&lt;br /&gt;
-d la distance de l’origine (du repère) au plan, suivant la direction du vecteur normal au plan.&lt;br /&gt;
&lt;br /&gt;
Grâce aux deux formules précedentes, on en déduit le calcul de t :&lt;br /&gt;
	t = - ( N . O + d ) / ( N . D)&lt;br /&gt;
&lt;br /&gt;
Une fois t calculé, on peut aisément obtenir les coordonnées de P. On peut maintenant passer au deuxième test à réaliser, qui est le test d’appartenance d’un point à un triangle.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Raytracing1.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Le principe de ce test est le suivant:&lt;br /&gt;
On calcule les vecteurs partant des points du triangle et allant vers P : v0P, v1P, v2P.&lt;br /&gt;
On calcule de même les vecteurs correspondants aux cotés du triangle : v0v1, v1v2, v2v0.&lt;br /&gt;
On calcule le produit vectoriel de chacun de ces vecteurs avec les vecteurs contenant P:&lt;br /&gt;
u = v0v1 ^ v0P, v = v1v2 ^ v1P, w = v2v0 ^ v2P.&lt;br /&gt;
Si P appartient au triangle, les vecteurs u, v et w ainsi calculés seront colinéaires de même sens avec le vecteur normal au triangle N. (voir Figure 11)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
On réalise donc les tests suivants: (produit scalaire)&lt;br /&gt;
N . u, N . v, N . w&lt;br /&gt;
&lt;br /&gt;
Si le résultat est positif, P est placé à l’intérieur du triangle par rapport au coté testé. (u teste le coté v0v1, v teste v1v2, w teste v2v0)&lt;br /&gt;
Si les trois tests sont positifs, cela signifie que P est bien à l’intérieur du triangle.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Raytracing2.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Une fois ces tests concluants, on récupère la distance voulue avec le calcul suivant :&lt;br /&gt;
Distance =  t * D(x,y,z) &lt;br /&gt;
Ceci nous donne une distance selon les 3 axes, grâce à une comparaison du vecteur directeur et des vecteurs X, Y, et Z, on récupère uniquement la distance voulue :&lt;br /&gt;
Distance = t * D.x ou t * D.y ou t *D.z&lt;br /&gt;
&lt;br /&gt;
Pour le temps restant au projet, nous allons proposer différentes solutions pour l'affichage de ces distances. &lt;br /&gt;
De même, nous allons rédiger notre rapport et nous préparer à la soutenance finale.&lt;br /&gt;
&lt;br /&gt;
== Semaine 4 de Mars ==&lt;br /&gt;
= Conclusion =&lt;/div&gt;</summary>
		<author><name>Cdelberg</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=Fichier:Raytracing2.png&amp;diff=10286</id>
		<title>Fichier:Raytracing2.png</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=Fichier:Raytracing2.png&amp;diff=10286"/>
				<updated>2014-02-27T14:51:45Z</updated>
		
		<summary type="html">&lt;p&gt;Cdelberg : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Cdelberg</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=Fichier:Raytracing1.png&amp;diff=10285</id>
		<title>Fichier:Raytracing1.png</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=Fichier:Raytracing1.png&amp;diff=10285"/>
				<updated>2014-02-27T14:51:37Z</updated>
		
		<summary type="html">&lt;p&gt;Cdelberg : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Cdelberg</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=Fichier:Raytracing.png&amp;diff=10284</id>
		<title>Fichier:Raytracing.png</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=Fichier:Raytracing.png&amp;diff=10284"/>
				<updated>2014-02-27T14:51:14Z</updated>
		
		<summary type="html">&lt;p&gt;Cdelberg : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Cdelberg</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=R%C3%A9alit%C3%A9_Augment%C3%A9e_pour_la_chirurgie&amp;diff=8538</id>
		<title>Réalité Augmentée pour la chirurgie</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=R%C3%A9alit%C3%A9_Augment%C3%A9e_pour_la_chirurgie&amp;diff=8538"/>
				<updated>2013-12-18T11:58:11Z</updated>
		
		<summary type="html">&lt;p&gt;Cdelberg : /* Semaine 49 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Papa Momar MBOUP/ Calvin DELBERGHE&lt;br /&gt;
&lt;br /&gt;
= Présentation =&lt;br /&gt;
&lt;br /&gt;
== Description et Objectif: ==&lt;br /&gt;
&lt;br /&gt;
Notre projet consiste à assister les chirurgiens lors de chirurgies laparoscopiques. La chirurgie laparoscopique est une technique chirurgicale minimalement invasive où le chirurgien réalise une opération de l'abdomen par de petites incisions où sont placés des trocars qui permettent le passage de fins instruments chirurgicaux. Dans le cadre de ce projet, il s’agit de réaliser l’ablation de la(des) tumeur(s) présente(s) dans le foie du patient. La localisation des tumeurs ainsi que de l’ensemble du réseau vasculaire peut etre réalisé grâce à un scanner pré-opératoire et donc reconstruits en 3D. Cependant, ils ne peuvent pas être visualisés par la caméra lors de l’opération chirurgicale. &lt;br /&gt;
&lt;br /&gt;
Ainsi, le chirurgien ne peut en aucun cas connaitre la localisation de la tumeur et ne peut pas se représenter la distance qui la sépare des parois du foie. D’où le but de notre projet: aider les chirurgiens dans ces opérations. Des travaux récents de l'équipe de recherche Shacra ont permis de suivre avec une bonne précision le mouvement de structures internes du foie pendant une opération laparoscopique. Le projet consiste à utiliser ces travaux pour mélanger le flux vidéo fourni par l'endoscope aux informations calculées par la simulation pour fournir aux chirurgiens des informations utiles sur la position des structures internes du foie lors de la manipulation. Différentes pistes pourront être explorées pour ne pas surcharger le flux vidéo tout en fournissant les informations importantes (position, profondeur, distance à la surface du foie...)&lt;br /&gt;
&lt;br /&gt;
== Environnement de travail :==&lt;br /&gt;
1 ordinateur&lt;br /&gt;
&lt;br /&gt;
OpenGL 3.3 &lt;br /&gt;
&lt;br /&gt;
SDL 2.0&lt;br /&gt;
&lt;br /&gt;
IDE CodeBlocks&lt;br /&gt;
&lt;br /&gt;
= Plan d'action / Gestion de projet =&lt;br /&gt;
Dans un premier temps, nous allons commencer à suivre des tutoriaux sur le framework OpenGL. Quand on sera assez avancé, nous débuterons le codage du programme principal. Donc pour le premier semestre, le plan est de mettre en place la base du programme et de bien maîtriser OpenGL pour la suite quand on ajoutera des fonctions plus poussées dans le programme.&lt;br /&gt;
&lt;br /&gt;
= Réalisation =&lt;br /&gt;
&lt;br /&gt;
== Semaine 37 ==&lt;br /&gt;
Présentation et Choix du sujet.&lt;br /&gt;
&lt;br /&gt;
== Semaine 38 ==&lt;br /&gt;
Rencontre avec les encadrants du projet:&lt;br /&gt;
 Explication détaillée du sujet ainsi que les attentes du projet.&lt;br /&gt;
 Réception des premières données pour débuter quelques tests avec OpenGL.&lt;br /&gt;
== Semaine 39 ==&lt;br /&gt;
Installation d'OpenGL sous Windows avec CodeBlocks.&lt;br /&gt;
Début des tutoriaux sur le site du zéro:&lt;br /&gt;
&lt;br /&gt;
http://fr.openclassrooms.com/informatique/cours/developpez-vos-applications-3d-avec-opengl-3-3&lt;br /&gt;
&lt;br /&gt;
== Semaine 40 ==&lt;br /&gt;
Poursuite des tutoriaux.&lt;br /&gt;
&lt;br /&gt;
== Semaine 41 ==&lt;br /&gt;
Poursuite des tutoriaux.&lt;br /&gt;
&lt;br /&gt;
== Semaine 42 ==&lt;br /&gt;
Poursuite des tutoriaux.&lt;br /&gt;
&lt;br /&gt;
== Semaine 43 ==&lt;br /&gt;
Poursuite des tutoriaux&lt;br /&gt;
&lt;br /&gt;
== Semaine 44 ==&lt;br /&gt;
Poursuite des tutoriaux&lt;br /&gt;
&lt;br /&gt;
== Semaine 45 ==&lt;br /&gt;
Poursuite des tutoriaux&lt;br /&gt;
&lt;br /&gt;
== Semaine 46 ==&lt;br /&gt;
Poursuite des tutoriaux&lt;br /&gt;
&lt;br /&gt;
== Semaine 47 ==&lt;br /&gt;
Fin de la première partie des tutoriaux.&lt;br /&gt;
&lt;br /&gt;
== Semaine 48 ==&lt;br /&gt;
Démarrage du code du programme à partir du code réalisé pendant les tutoriels.&lt;br /&gt;
&lt;br /&gt;
== Semaine 49 ==&lt;br /&gt;
Ajout de la fonction permettant de récupérer les données des fichiers .obj contenant les vertices, les coordonnées de texture, les vecteurs normaux et les références aux faces (triangles) constituant l'objet 3D.&lt;br /&gt;
&lt;br /&gt;
== Semaine 50 ==&lt;br /&gt;
Nous sommes arrivé durant cette semaine à représenter une tumeur correctement en 3D.&lt;br /&gt;
&lt;br /&gt;
Cependant, nous rencontrons un problème quand on a un nombre de vertices élevés à représenter (de l'ordre de 20000 vertices). Une des pistes pour la résolution de ce problème est d'utiliser les display list. Cependant, les display List n'existent plus en OpenGL 3.3. Donc le problème reste irrésolu pour l'instant. On va regarder du coté des VBO (Vertex Buffer Object) et VBA(Vertex Buffer Array).&lt;br /&gt;
&lt;br /&gt;
Les &amp;quot;Display List&amp;quot; permettent un stockage des données sur la carte graphique mais ne permettent pas de mettre à jour ces données. Les &amp;quot;VertexArray&amp;quot; conservent les données dans des tampons en mémoire système ce qui permet de les modifier mais oblige à transférer toutes ces données à chaque fois qu'elles doivent être affichées.&lt;br /&gt;
&lt;br /&gt;
Un VBO est un objet OpenGL qui contient des données relatives à un modèle 3D comme les vertices, les coordonnées de texture, les normales (pour les lumières), ... Sa particularité vient du fait que les données qu'il contient se trouvent non pas dans la RAM mais directement dans la carte graphique.&lt;br /&gt;
&lt;br /&gt;
Les VBO permettent de gagner un temps considérable à OpenGL en évitant de faire des aller-retours inutiles entre la RAM et la mémoire graphique:&lt;br /&gt;
[[Fichier:interet_VBO.png]]&lt;br /&gt;
&lt;br /&gt;
[[Fichier:chargement_avec_VBO.png]]&lt;br /&gt;
&lt;br /&gt;
[[Fichier:affichage_avec_VBO.png]]&lt;br /&gt;
&lt;br /&gt;
Images prises sur : http://fr.openclassrooms.com/informatique/cours/developpez-vos-applications-3d-avec-opengl-3-3/c-est-quoi-un-vbo&lt;br /&gt;
&lt;br /&gt;
On économise ainsi le transfert de centaines de milliers de données à chaque affichage, la carte graphique peut travailler plus rapidement.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous avons aussi trouvé durant cette semaine ce site qui explique très bien la théorie de l'intersection rayon/triangle avec une traduction en code.&lt;br /&gt;
 &lt;br /&gt;
http://www.scratchapixel.com/lessons/3d-basic-lessons/lesson-9-ray-triangle-intersection/ray-triangle-intersection-geometric-solution/&lt;br /&gt;
&lt;br /&gt;
Nous avons grâce à ceci pu coder une méthode adaptée pour tester les triangles de la surface du foie et voir s'ils sont en intersection avec le rayon partant du barycentre de la tumeur et ayant pour vecteur directeur X, Y, ou Z. Une fois le bon triangle trouvé, la fonction se charge de renvoyer le point d'intersection, et il ne reste qu'a récupérer sa coordonnée en X,Y,ou Z (suivant le vecteur directeur précisé dans l'appel à la fonction) qui se trouve être la distance entre la tumeur et la surface du foie. Pour affiner un peu notre méthode, il faut d'abord l'appliquer à l'enveloppe de la tumeur elle même, puis faire de même avec la surface du foie, et soustraire les coordonnées obtenues pour les points d'intersections dans chacune des 3 direction afin d'obtenir une distance correcte pour chaque direction.&lt;br /&gt;
&lt;br /&gt;
== Semaine 51 ==&lt;br /&gt;
Rédaction du rapport d'avancement &lt;br /&gt;
&lt;br /&gt;
Rédaction de la présentation oral&lt;br /&gt;
&lt;br /&gt;
= Conclusion Première partie =&lt;/div&gt;</summary>
		<author><name>Cdelberg</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=R%C3%A9alit%C3%A9_Augment%C3%A9e_pour_la_chirurgie&amp;diff=8537</id>
		<title>Réalité Augmentée pour la chirurgie</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=R%C3%A9alit%C3%A9_Augment%C3%A9e_pour_la_chirurgie&amp;diff=8537"/>
				<updated>2013-12-18T11:56:12Z</updated>
		
		<summary type="html">&lt;p&gt;Cdelberg : /* Semaine 48 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Papa Momar MBOUP/ Calvin DELBERGHE&lt;br /&gt;
&lt;br /&gt;
= Présentation =&lt;br /&gt;
&lt;br /&gt;
== Description et Objectif: ==&lt;br /&gt;
&lt;br /&gt;
Notre projet consiste à assister les chirurgiens lors de chirurgies laparoscopiques. La chirurgie laparoscopique est une technique chirurgicale minimalement invasive où le chirurgien réalise une opération de l'abdomen par de petites incisions où sont placés des trocars qui permettent le passage de fins instruments chirurgicaux. Dans le cadre de ce projet, il s’agit de réaliser l’ablation de la(des) tumeur(s) présente(s) dans le foie du patient. La localisation des tumeurs ainsi que de l’ensemble du réseau vasculaire peut etre réalisé grâce à un scanner pré-opératoire et donc reconstruits en 3D. Cependant, ils ne peuvent pas être visualisés par la caméra lors de l’opération chirurgicale. &lt;br /&gt;
&lt;br /&gt;
Ainsi, le chirurgien ne peut en aucun cas connaitre la localisation de la tumeur et ne peut pas se représenter la distance qui la sépare des parois du foie. D’où le but de notre projet: aider les chirurgiens dans ces opérations. Des travaux récents de l'équipe de recherche Shacra ont permis de suivre avec une bonne précision le mouvement de structures internes du foie pendant une opération laparoscopique. Le projet consiste à utiliser ces travaux pour mélanger le flux vidéo fourni par l'endoscope aux informations calculées par la simulation pour fournir aux chirurgiens des informations utiles sur la position des structures internes du foie lors de la manipulation. Différentes pistes pourront être explorées pour ne pas surcharger le flux vidéo tout en fournissant les informations importantes (position, profondeur, distance à la surface du foie...)&lt;br /&gt;
&lt;br /&gt;
== Environnement de travail :==&lt;br /&gt;
1 ordinateur&lt;br /&gt;
&lt;br /&gt;
OpenGL 3.3 &lt;br /&gt;
&lt;br /&gt;
SDL 2.0&lt;br /&gt;
&lt;br /&gt;
IDE CodeBlocks&lt;br /&gt;
&lt;br /&gt;
= Plan d'action / Gestion de projet =&lt;br /&gt;
Dans un premier temps, nous allons commencer à suivre des tutoriaux sur le framework OpenGL. Quand on sera assez avancé, nous débuterons le codage du programme principal. Donc pour le premier semestre, le plan est de mettre en place la base du programme et de bien maîtriser OpenGL pour la suite quand on ajoutera des fonctions plus poussées dans le programme.&lt;br /&gt;
&lt;br /&gt;
= Réalisation =&lt;br /&gt;
&lt;br /&gt;
== Semaine 37 ==&lt;br /&gt;
Présentation et Choix du sujet.&lt;br /&gt;
&lt;br /&gt;
== Semaine 38 ==&lt;br /&gt;
Rencontre avec les encadrants du projet:&lt;br /&gt;
 Explication détaillée du sujet ainsi que les attentes du projet.&lt;br /&gt;
 Réception des premières données pour débuter quelques tests avec OpenGL.&lt;br /&gt;
== Semaine 39 ==&lt;br /&gt;
Installation d'OpenGL sous Windows avec CodeBlocks.&lt;br /&gt;
Début des tutoriaux sur le site du zéro:&lt;br /&gt;
&lt;br /&gt;
http://fr.openclassrooms.com/informatique/cours/developpez-vos-applications-3d-avec-opengl-3-3&lt;br /&gt;
&lt;br /&gt;
== Semaine 40 ==&lt;br /&gt;
Poursuite des tutoriaux.&lt;br /&gt;
&lt;br /&gt;
== Semaine 41 ==&lt;br /&gt;
Poursuite des tutoriaux.&lt;br /&gt;
&lt;br /&gt;
== Semaine 42 ==&lt;br /&gt;
Poursuite des tutoriaux.&lt;br /&gt;
&lt;br /&gt;
== Semaine 43 ==&lt;br /&gt;
Poursuite des tutoriaux&lt;br /&gt;
&lt;br /&gt;
== Semaine 44 ==&lt;br /&gt;
Poursuite des tutoriaux&lt;br /&gt;
&lt;br /&gt;
== Semaine 45 ==&lt;br /&gt;
Poursuite des tutoriaux&lt;br /&gt;
&lt;br /&gt;
== Semaine 46 ==&lt;br /&gt;
Poursuite des tutoriaux&lt;br /&gt;
&lt;br /&gt;
== Semaine 47 ==&lt;br /&gt;
Fin de la première partie des tutoriaux.&lt;br /&gt;
&lt;br /&gt;
== Semaine 48 ==&lt;br /&gt;
Démarrage du code du programme à partir du code réalisé pendant les tutoriels.&lt;br /&gt;
&lt;br /&gt;
== Semaine 49 ==&lt;br /&gt;
&lt;br /&gt;
== Semaine 50 ==&lt;br /&gt;
Nous sommes arrivé durant cette semaine à représenter une tumeur correctement en 3D.&lt;br /&gt;
&lt;br /&gt;
Cependant, nous rencontrons un problème quand on a un nombre de vertices élevés à représenter (de l'ordre de 20000 vertices). Une des pistes pour la résolution de ce problème est d'utiliser les display list. Cependant, les display List n'existent plus en OpenGL 3.3. Donc le problème reste irrésolu pour l'instant. On va regarder du coté des VBO (Vertex Buffer Object) et VBA(Vertex Buffer Array).&lt;br /&gt;
&lt;br /&gt;
Les &amp;quot;Display List&amp;quot; permettent un stockage des données sur la carte graphique mais ne permettent pas de mettre à jour ces données. Les &amp;quot;VertexArray&amp;quot; conservent les données dans des tampons en mémoire système ce qui permet de les modifier mais oblige à transférer toutes ces données à chaque fois qu'elles doivent être affichées.&lt;br /&gt;
&lt;br /&gt;
Un VBO est un objet OpenGL qui contient des données relatives à un modèle 3D comme les vertices, les coordonnées de texture, les normales (pour les lumières), ... Sa particularité vient du fait que les données qu'il contient se trouvent non pas dans la RAM mais directement dans la carte graphique.&lt;br /&gt;
&lt;br /&gt;
Les VBO permettent de gagner un temps considérable à OpenGL en évitant de faire des aller-retours inutiles entre la RAM et la mémoire graphique:&lt;br /&gt;
[[Fichier:interet_VBO.png]]&lt;br /&gt;
&lt;br /&gt;
[[Fichier:chargement_avec_VBO.png]]&lt;br /&gt;
&lt;br /&gt;
[[Fichier:affichage_avec_VBO.png]]&lt;br /&gt;
&lt;br /&gt;
Images prises sur : http://fr.openclassrooms.com/informatique/cours/developpez-vos-applications-3d-avec-opengl-3-3/c-est-quoi-un-vbo&lt;br /&gt;
&lt;br /&gt;
On économise ainsi le transfert de centaines de milliers de données à chaque affichage, la carte graphique peut travailler plus rapidement.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous avons aussi trouvé durant cette semaine ce site qui explique très bien la théorie de l'intersection rayon/triangle avec une traduction en code.&lt;br /&gt;
 &lt;br /&gt;
http://www.scratchapixel.com/lessons/3d-basic-lessons/lesson-9-ray-triangle-intersection/ray-triangle-intersection-geometric-solution/&lt;br /&gt;
&lt;br /&gt;
Nous avons grâce à ceci pu coder une méthode adaptée pour tester les triangles de la surface du foie et voir s'ils sont en intersection avec le rayon partant du barycentre de la tumeur et ayant pour vecteur directeur X, Y, ou Z. Une fois le bon triangle trouvé, la fonction se charge de renvoyer le point d'intersection, et il ne reste qu'a récupérer sa coordonnée en X,Y,ou Z (suivant le vecteur directeur précisé dans l'appel à la fonction) qui se trouve être la distance entre la tumeur et la surface du foie. Pour affiner un peu notre méthode, il faut d'abord l'appliquer à l'enveloppe de la tumeur elle même, puis faire de même avec la surface du foie, et soustraire les coordonnées obtenues pour les points d'intersections dans chacune des 3 direction afin d'obtenir une distance correcte pour chaque direction.&lt;br /&gt;
&lt;br /&gt;
== Semaine 51 ==&lt;br /&gt;
Rédaction du rapport d'avancement &lt;br /&gt;
&lt;br /&gt;
Rédaction de la présentation oral&lt;br /&gt;
&lt;br /&gt;
= Conclusion Première partie =&lt;/div&gt;</summary>
		<author><name>Cdelberg</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=R%C3%A9alit%C3%A9_Augment%C3%A9e_pour_la_chirurgie&amp;diff=8536</id>
		<title>Réalité Augmentée pour la chirurgie</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=R%C3%A9alit%C3%A9_Augment%C3%A9e_pour_la_chirurgie&amp;diff=8536"/>
				<updated>2013-12-18T11:54:24Z</updated>
		
		<summary type="html">&lt;p&gt;Cdelberg : /* Semaine 50 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Papa Momar MBOUP/ Calvin DELBERGHE&lt;br /&gt;
&lt;br /&gt;
= Présentation =&lt;br /&gt;
&lt;br /&gt;
== Description et Objectif: ==&lt;br /&gt;
&lt;br /&gt;
Notre projet consiste à assister les chirurgiens lors de chirurgies laparoscopiques. La chirurgie laparoscopique est une technique chirurgicale minimalement invasive où le chirurgien réalise une opération de l'abdomen par de petites incisions où sont placés des trocars qui permettent le passage de fins instruments chirurgicaux. Dans le cadre de ce projet, il s’agit de réaliser l’ablation de la(des) tumeur(s) présente(s) dans le foie du patient. La localisation des tumeurs ainsi que de l’ensemble du réseau vasculaire peut etre réalisé grâce à un scanner pré-opératoire et donc reconstruits en 3D. Cependant, ils ne peuvent pas être visualisés par la caméra lors de l’opération chirurgicale. &lt;br /&gt;
&lt;br /&gt;
Ainsi, le chirurgien ne peut en aucun cas connaitre la localisation de la tumeur et ne peut pas se représenter la distance qui la sépare des parois du foie. D’où le but de notre projet: aider les chirurgiens dans ces opérations. Des travaux récents de l'équipe de recherche Shacra ont permis de suivre avec une bonne précision le mouvement de structures internes du foie pendant une opération laparoscopique. Le projet consiste à utiliser ces travaux pour mélanger le flux vidéo fourni par l'endoscope aux informations calculées par la simulation pour fournir aux chirurgiens des informations utiles sur la position des structures internes du foie lors de la manipulation. Différentes pistes pourront être explorées pour ne pas surcharger le flux vidéo tout en fournissant les informations importantes (position, profondeur, distance à la surface du foie...)&lt;br /&gt;
&lt;br /&gt;
== Environnement de travail :==&lt;br /&gt;
1 ordinateur&lt;br /&gt;
&lt;br /&gt;
OpenGL 3.3 &lt;br /&gt;
&lt;br /&gt;
SDL 2.0&lt;br /&gt;
&lt;br /&gt;
IDE CodeBlocks&lt;br /&gt;
&lt;br /&gt;
= Plan d'action / Gestion de projet =&lt;br /&gt;
Dans un premier temps, nous allons commencer à suivre des tutoriaux sur le framework OpenGL. Quand on sera assez avancé, nous débuterons le codage du programme principal. Donc pour le premier semestre, le plan est de mettre en place la base du programme et de bien maîtriser OpenGL pour la suite quand on ajoutera des fonctions plus poussées dans le programme.&lt;br /&gt;
&lt;br /&gt;
= Réalisation =&lt;br /&gt;
&lt;br /&gt;
== Semaine 37 ==&lt;br /&gt;
Présentation et Choix du sujet.&lt;br /&gt;
&lt;br /&gt;
== Semaine 38 ==&lt;br /&gt;
Rencontre avec les encadrants du projet:&lt;br /&gt;
 Explication détaillée du sujet ainsi que les attentes du projet.&lt;br /&gt;
 Réception des premières données pour débuter quelques tests avec OpenGL.&lt;br /&gt;
== Semaine 39 ==&lt;br /&gt;
Installation d'OpenGL sous Windows avec CodeBlocks.&lt;br /&gt;
Début des tutoriaux sur le site du zéro:&lt;br /&gt;
&lt;br /&gt;
http://fr.openclassrooms.com/informatique/cours/developpez-vos-applications-3d-avec-opengl-3-3&lt;br /&gt;
&lt;br /&gt;
== Semaine 40 ==&lt;br /&gt;
Poursuite des tutoriaux.&lt;br /&gt;
&lt;br /&gt;
== Semaine 41 ==&lt;br /&gt;
Poursuite des tutoriaux.&lt;br /&gt;
&lt;br /&gt;
== Semaine 42 ==&lt;br /&gt;
Poursuite des tutoriaux.&lt;br /&gt;
&lt;br /&gt;
== Semaine 43 ==&lt;br /&gt;
Poursuite des tutoriaux&lt;br /&gt;
&lt;br /&gt;
== Semaine 44 ==&lt;br /&gt;
Poursuite des tutoriaux&lt;br /&gt;
&lt;br /&gt;
== Semaine 45 ==&lt;br /&gt;
Poursuite des tutoriaux&lt;br /&gt;
&lt;br /&gt;
== Semaine 46 ==&lt;br /&gt;
Poursuite des tutoriaux&lt;br /&gt;
&lt;br /&gt;
== Semaine 47 ==&lt;br /&gt;
Fin de la première partie des tutoriaux.&lt;br /&gt;
&lt;br /&gt;
== Semaine 48 ==&lt;br /&gt;
&lt;br /&gt;
== Semaine 49 ==&lt;br /&gt;
&lt;br /&gt;
== Semaine 50 ==&lt;br /&gt;
Nous sommes arrivé durant cette semaine à représenter une tumeur correctement en 3D.&lt;br /&gt;
&lt;br /&gt;
Cependant, nous rencontrons un problème quand on a un nombre de vertices élevés à représenter (de l'ordre de 20000 vertices). Une des pistes pour la résolution de ce problème est d'utiliser les display list. Cependant, les display List n'existent plus en OpenGL 3.3. Donc le problème reste irrésolu pour l'instant. On va regarder du coté des VBO (Vertex Buffer Object) et VBA(Vertex Buffer Array).&lt;br /&gt;
&lt;br /&gt;
Les &amp;quot;Display List&amp;quot; permettent un stockage des données sur la carte graphique mais ne permettent pas de mettre à jour ces données. Les &amp;quot;VertexArray&amp;quot; conservent les données dans des tampons en mémoire système ce qui permet de les modifier mais oblige à transférer toutes ces données à chaque fois qu'elles doivent être affichées.&lt;br /&gt;
&lt;br /&gt;
Un VBO est un objet OpenGL qui contient des données relatives à un modèle 3D comme les vertices, les coordonnées de texture, les normales (pour les lumières), ... Sa particularité vient du fait que les données qu'il contient se trouvent non pas dans la RAM mais directement dans la carte graphique.&lt;br /&gt;
&lt;br /&gt;
Les VBO permettent de gagner un temps considérable à OpenGL en évitant de faire des aller-retours inutiles entre la RAM et la mémoire graphique:&lt;br /&gt;
[[Fichier:interet_VBO.png]]&lt;br /&gt;
&lt;br /&gt;
[[Fichier:chargement_avec_VBO.png]]&lt;br /&gt;
&lt;br /&gt;
[[Fichier:affichage_avec_VBO.png]]&lt;br /&gt;
&lt;br /&gt;
Images prises sur : http://fr.openclassrooms.com/informatique/cours/developpez-vos-applications-3d-avec-opengl-3-3/c-est-quoi-un-vbo&lt;br /&gt;
&lt;br /&gt;
On économise ainsi le transfert de centaines de milliers de données à chaque affichage, la carte graphique peut travailler plus rapidement.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous avons aussi trouvé durant cette semaine ce site qui explique très bien la théorie de l'intersection rayon/triangle avec une traduction en code.&lt;br /&gt;
 &lt;br /&gt;
http://www.scratchapixel.com/lessons/3d-basic-lessons/lesson-9-ray-triangle-intersection/ray-triangle-intersection-geometric-solution/&lt;br /&gt;
&lt;br /&gt;
Nous avons grâce à ceci pu coder une méthode adaptée pour tester les triangles de la surface du foie et voir s'ils sont en intersection avec le rayon partant du barycentre de la tumeur et ayant pour vecteur directeur X, Y, ou Z. Une fois le bon triangle trouvé, la fonction se charge de renvoyer le point d'intersection, et il ne reste qu'a récupérer sa coordonnée en X,Y,ou Z (suivant le vecteur directeur précisé dans l'appel à la fonction) qui se trouve être la distance entre la tumeur et la surface du foie. Pour affiner un peu notre méthode, il faut d'abord l'appliquer à l'enveloppe de la tumeur elle même, puis faire de même avec la surface du foie, et soustraire les coordonnées obtenues pour les points d'intersections dans chacune des 3 direction afin d'obtenir une distance correcte pour chaque direction.&lt;br /&gt;
&lt;br /&gt;
== Semaine 51 ==&lt;br /&gt;
Rédaction du rapport d'avancement &lt;br /&gt;
&lt;br /&gt;
Rédaction de la présentation oral&lt;br /&gt;
&lt;br /&gt;
= Conclusion Première partie =&lt;/div&gt;</summary>
		<author><name>Cdelberg</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=Objets_communiquants_et_gestion_de_l%27%C3%A9nergie&amp;diff=4181</id>
		<title>Objets communiquants et gestion de l'énergie</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=Objets_communiquants_et_gestion_de_l%27%C3%A9nergie&amp;diff=4181"/>
				<updated>2013-02-25T07:14:26Z</updated>
		
		<summary type="html">&lt;p&gt;Cdelberg : /* Le code du Arduino */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Présentation du projet ==&lt;br /&gt;
&lt;br /&gt;
=== Planning prévisionnel provisoire (jusqu'à la pré-soutenance)===&lt;br /&gt;
&lt;br /&gt;
Ce planning pourrait être amené à être modifié.&lt;br /&gt;
&lt;br /&gt;
'''''I) Etat de l'art''''' ( ~2-3 semaines)&lt;br /&gt;
&lt;br /&gt;
-Energy harvesting (Calvin)&lt;br /&gt;
&lt;br /&gt;
-Batteries (Justin)&lt;br /&gt;
&lt;br /&gt;
'''''II) Mesure de puissance des différents appareil Arduino''''' ( ~2 semaines)&lt;br /&gt;
&lt;br /&gt;
'''''III) Confronter théorie/réalité''''' ( ~1 semaine)&lt;br /&gt;
-estimer consommation de puissance&lt;br /&gt;
&lt;br /&gt;
-vérifier en pratique&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Amené à être ajouté:'''&lt;br /&gt;
&lt;br /&gt;
Mesure du Arduino de sa propre consommation.&lt;br /&gt;
&lt;br /&gt;
Mesure de la consommation du code (?)&lt;br /&gt;
&lt;br /&gt;
Applications:&lt;br /&gt;
&lt;br /&gt;
-Envoi des valeurs de l'Arduino au serveur.&lt;br /&gt;
&lt;br /&gt;
-Interface web pour interagir avec l'objet.&lt;br /&gt;
&lt;br /&gt;
== Etat de l'art ==&lt;br /&gt;
&lt;br /&gt;
=== Energy Harvesting ===&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
* Mosquino:&lt;br /&gt;
&lt;br /&gt;
''Mosquino'' est un matériel compatible avec le développement logiciel et dérivé de ''Arduino'', il permet de récupérer de l'énergie des sources ambiantes (chaleur, luminosité, vibrations)&lt;br /&gt;
Il n'est destiné qu'aux faibles consommations électriques et n'est encore qu'en phase de développement, il n'a pas encore été véritablement testé. &amp;lt;br/&amp;gt;&lt;br /&gt;
http://tim.cexx.org/?page_id=760&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
* Breakout board BOB-o&amp;lt;sub&amp;gt;994&amp;lt;/sub&amp;gt;6 :&lt;br /&gt;
&lt;br /&gt;
Cette carte utilise le collecteur d'énergie piezoelectrique LTC&amp;lt;sub&amp;gt;35&amp;lt;/sub&amp;gt;88 de Linear Technologies et permet non seulement de récupérer l'énergie piezoélectrique mais aussi l'énergie solaire. Initialement prévu pour fonctionner à faible voltage, la capacité de sortie peut-être dimensionnée pour recevoir une salve de courant de sortie plus élevée. &amp;lt;br/&amp;gt;&lt;br /&gt;
https://www.sparkfun.com/products/9946&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
=== Batteries ===&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
* nouvelles technologies: &lt;br /&gt;
&lt;br /&gt;
ces dernières années, de nouvelles technologies sont apparues, sans être encore réellement utilisées. je pense notamment aux batteries contenues dans des câbles: &lt;br /&gt;
http://phys.org/news/2012-09-lg-chem-cable-batteries-reshape.html&lt;br /&gt;
&lt;br /&gt;
ainsi qu'aux batteries ultra fines dévellopées par thinergy: &lt;br /&gt;
http://www.infinitepowersolutions.com/products.html&lt;br /&gt;
&lt;br /&gt;
Néanmoins, les tensions pouvant etre délivrées par ces technologies naissantes sont loin de pouvoir alimenter le materiel qui nous interresse, à savoir des Arduino (necessitant une alimentation comprise entre 7V-12V)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
D'autres techno sont encore en phase de développement, comme les batteries lithium-Air d'IBM, les piles au graphène utilisant la chaleur pour produire de l’énergie (plutôt de l'energy harvesting pour le coup). Comme ces technologies sont encore en phase de développement, elles n’apparaîtrons pas sur le marché avant au moins 10 ans.&lt;br /&gt;
&lt;br /&gt;
http://www.metro.co.uk/tech/news/897731-technology-companies-charge-towards-next-generation-battery-future&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* technologies adaptée à notre usage:&lt;br /&gt;
&lt;br /&gt;
comme je l'ai rappelé plus haut, ce PFE tourne principalement autour d'Arduino. ces plates-formes nécessitant une tension d'alimentation supérieure à 7V, le choix le plus intéressant reste les piles rechargeable.&lt;br /&gt;
&lt;br /&gt;
Seulement, il existe plusieurs types de piles rechargeables. dans l'usage qu'il en sera fait, et si ces batteries sont couplées à des technologies de récupération d'énergie, il est important de choisir des piles Lithium-Ion.&lt;br /&gt;
&lt;br /&gt;
En effet, ces piles sont les plus intéressantes pour plusieurs raisons:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
tout d'abord, elles sont insensibles à l'effet mémoire. du coup elles ne perdent pas de leur capacité de stockage d’énergie au cours du temps.&lt;br /&gt;
&lt;br /&gt;
le circuit intégré à ces piles empêche toute surtension lors de la charge.&lt;br /&gt;
&lt;br /&gt;
elles peuvent être rechargée en même temps qu'elles sont utilisées.&lt;br /&gt;
&lt;br /&gt;
dans une époque ou la pollution est un sujet préoccupation, ces piles sont moins dangereuse pour l’environnement que leurs homologues au nickel-Cadmium&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
le seul problème pourrais venir du fait qu'elles ne supporte pas bien la chaleur, mais à moins de les coller à un radiateur, il ne devrais pas y avoir de soucis.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Mesure de la consommation énergétique ===&lt;br /&gt;
&lt;br /&gt;
WSIM permet la simulation de capteurs sans fil. Il permet notamment d'estimer la consommation électrique http://wsim.gforge.inria.fr/index.html&lt;br /&gt;
Pour l'instant il ne fonctionne qu'avec des microcontrolleurs TI. Le support des AVR est en cours.&lt;br /&gt;
L'estimation de la consommation énergétique utilise esimu http://esimu.gforge.inria.fr/index.html&lt;br /&gt;
&lt;br /&gt;
== Réalisation ==&lt;br /&gt;
===Le Arduino===&lt;br /&gt;
====Architecture de l'objet communiquant====&lt;br /&gt;
&lt;br /&gt;
*Un Arduino Mega 2560&lt;br /&gt;
*Un XBee&lt;br /&gt;
*Un capteur de température&lt;br /&gt;
*Un capteur de luminosité&lt;br /&gt;
&lt;br /&gt;
====Le code du Arduino====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 &amp;lt;span style=&amp;quot;color: blue;&amp;quot;&amp;gt;#include&amp;lt;/span&amp;gt; &amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;XBee.h&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;// Define variables, pins..&amp;lt;/span&amp;gt;&lt;br /&gt;
 int sensorTempPin = 0;&lt;br /&gt;
 int Temp;&lt;br /&gt;
 int sensorLightPin = 1;&lt;br /&gt;
 int Light;&lt;br /&gt;
 &lt;br /&gt;
 uint8_t values[] = { 0, 0, 0, 0 };&lt;br /&gt;
 XBee xbee =  &amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;XBee&amp;lt;/span&amp;gt;();&lt;br /&gt;
 XBeeResponse response = &amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;XBeeResponse&amp;lt;/span&amp;gt;();&lt;br /&gt;
 Rx16Response rx = &amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;Rx16Response&amp;lt;/span&amp;gt;();&lt;br /&gt;
 Tx16Request tx = &amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;Tx16Request&amp;lt;/span&amp;gt;(0x1111, values, &amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;sizeof&amp;lt;/span&amp;gt;(values));&lt;br /&gt;
 TxStatusResponse txStatus = &amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;TxStatusResponse&amp;lt;/span&amp;gt;();&lt;br /&gt;
 &lt;br /&gt;
  &amp;lt;span style=&amp;quot;color: blue;&amp;quot;&amp;gt;void&amp;lt;/span&amp;gt; &amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;setup&amp;lt;/span&amp;gt;()&lt;br /&gt;
 {&lt;br /&gt;
    &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;// Initialise xbee / serial&amp;lt;/span&amp;gt;&lt;br /&gt;
   xbee.&amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;begin&amp;lt;/span&amp;gt;(9600);&lt;br /&gt;
   Serial.&amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;begin&amp;lt;/span&amp;gt;(9600);&lt;br /&gt;
 } &lt;br /&gt;
 &lt;br /&gt;
  &amp;lt;span style=&amp;quot;color: blue;&amp;quot;&amp;gt;void&amp;lt;/span&amp;gt; &amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;loop&amp;lt;/span&amp;gt;()&lt;br /&gt;
 {&lt;br /&gt;
    &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;// Read the values on analog pins&amp;lt;/span&amp;gt;&lt;br /&gt;
   Light = &amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;analogRead&amp;lt;/span&amp;gt;(sensorLightPin);&lt;br /&gt;
   Temp = &amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;analogRead&amp;lt;/span&amp;gt;(sensorTempPin);&lt;br /&gt;
 &lt;br /&gt;
   &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;// Listens on the Xbee protocol for any packet incoming.&amp;lt;/span&amp;gt;&lt;br /&gt;
   xbee.&amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;readPacket&amp;lt;/span&amp;gt;();&lt;br /&gt;
 &lt;br /&gt;
   if(xbee.&amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;getResponse&amp;lt;/span&amp;gt;().&amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;isAvailable&amp;lt;/span&amp;gt;()){&lt;br /&gt;
      &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;// Got something&amp;lt;/span&amp;gt;&lt;br /&gt;
     Serial.&amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;print&amp;lt;/span&amp;gt;(&amp;quot;Got something\n&amp;quot;);&lt;br /&gt;
      &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;// Break the 10-bits of information retrieved from light&amp;lt;/span&amp;gt;&lt;br /&gt;
      &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;// and temperature into 2 bytes for each.&amp;lt;/span&amp;gt;&lt;br /&gt;
     values[0] = Temp &amp;gt;&amp;gt; 8 &amp;amp; 0xff;&lt;br /&gt;
     values[1] = Temp &amp;amp; 0xff;&lt;br /&gt;
     values[2] = Light &amp;gt;&amp;gt; 8 &amp;amp; 0xff;&lt;br /&gt;
     values[3] = Light &amp;amp; 0xff;&lt;br /&gt;
     Serial.&amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;print&amp;lt;/span&amp;gt;(values[0]);&lt;br /&gt;
     &lt;br /&gt;
      &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;// Sending values to server&amp;lt;/span&amp;gt;&lt;br /&gt;
     xbee.&amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;send&amp;lt;/span&amp;gt;(tx);&lt;br /&gt;
     &lt;br /&gt;
      &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;// After sending a tx request, we expect a status response&amp;lt;/span&amp;gt;&lt;br /&gt;
      &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;// from the server&amp;lt;/span&amp;gt;&lt;br /&gt;
      &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;// Wait up to 5 seconds for the status response&amp;lt;/span&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
     if (xbee.&amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;readPacket&amp;lt;/span&amp;gt;(5000)) {&lt;br /&gt;
        &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;// We got a response!&amp;lt;/span&amp;gt;&lt;br /&gt;
       Serial.&amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;print&amp;lt;/span&amp;gt;(&amp;quot;We got a response\n&amp;quot;);&lt;br /&gt;
       &lt;br /&gt;
        &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;// It should be a znet tx status&amp;lt;/span&amp;gt;&lt;br /&gt;
       if (xbee.&amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;getResponse&amp;lt;/span&amp;gt;().&amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;getApiId&amp;lt;/span&amp;gt;() == TX_STATUS_RESPONSE) {&lt;br /&gt;
         xbee.&amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;getResponse&amp;lt;/span&amp;gt;().&amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;getZBTxStatusResponse&amp;lt;/span&amp;gt;(txStatus);&lt;br /&gt;
         &lt;br /&gt;
          &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;// get the delivery status, the fifth byte&amp;lt;/span&amp;gt;&lt;br /&gt;
         if (txStatus.&amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;getStatus&amp;lt;/span&amp;gt;() == SUCCESS){&lt;br /&gt;
            &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;// Success! Time to celebrate&amp;lt;/span&amp;gt;&lt;br /&gt;
           Serial.&amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;print&amp;lt;/span&amp;gt;(&amp;quot;SUCCESS! Time to celebrate\n&amp;quot;);&lt;br /&gt;
         } else {&lt;br /&gt;
           &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;// The remote XBee did not receive our packet. Is it powered on?&amp;lt;/span&amp;gt;&lt;br /&gt;
          Serial.&amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;print&amp;lt;/span&amp;gt;(&amp;quot;The remote Xbee did not receive our packet\n&amp;quot;);&lt;br /&gt;
         }&lt;br /&gt;
       }&lt;br /&gt;
     } else {&lt;br /&gt;
       &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;// local XBee did not provide a timely TX Status Response -- should not happen&amp;lt;/span&amp;gt;&lt;br /&gt;
      Serial.&amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;print&amp;lt;/span&amp;gt;(&amp;quot;Local Xbee did not provide a timely TX Status Response\n&amp;quot;);&lt;br /&gt;
     }&lt;br /&gt;
     &lt;br /&gt;
   }&lt;br /&gt;
  &lt;br /&gt;
   &amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;delay&amp;lt;/span&amp;gt;(500);&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
Ce code fonctionne de la manière suivante:&lt;br /&gt;
=====Fonction &amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;setup&amp;lt;/span&amp;gt;():=====&lt;br /&gt;
Une fois implémenté sur le Arduino, la fonction setup va faire démarrer le protocole XBee et le protocole Série afin de pouvoir envoyer et recevoir des messages par XBee, et d'imprimer les messages d'erreur sur le port Série s'il y a lieu.&lt;br /&gt;
=====Fonction &amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;loop&amp;lt;/span&amp;gt;():=====&lt;br /&gt;
Cette fonction va réaliser une boucle toutes les 0.5s pour mettre a jour les données des différents capteurs et les envoyer au serveur au travers du protocole XBee. Pour plus de détails voir les commentaires expliquant chaque étape du déroulement de la boucle.&lt;br /&gt;
&lt;br /&gt;
===Le programme LINKER===&lt;br /&gt;
&lt;br /&gt;
Code du programme de liaison&lt;br /&gt;
&lt;br /&gt;
ce programme en java est constitué de 5 classes&lt;br /&gt;
&lt;br /&gt;
====Le Main====&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 public class main {&lt;br /&gt;
 &lt;br /&gt;
 	public static SQLinker linker;&lt;br /&gt;
 	public static Xbee xbee;&lt;br /&gt;
 	&lt;br /&gt;
 	public static void main(String[] args){&lt;br /&gt;
 		String address = new String(&amp;quot;jdbc:mysql://sitedb.polytech-lille.net/cdelberg?&amp;quot;);&lt;br /&gt;
 		String user = new String(&amp;quot;user=cdelberg&amp;amp;password=myLo9ufonese&amp;quot;);&lt;br /&gt;
 		String COM;&lt;br /&gt;
 		&lt;br /&gt;
 &lt;br /&gt;
                 &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;// We ask the user on the Communication Port to connect the XBee&amp;lt;/span&amp;gt;&lt;br /&gt;
 		System.out.println(&amp;quot;Please enter the Communication port of the Xbee&amp;quot;);&lt;br /&gt;
 		Scanner sc = new Scanner(System.in);&lt;br /&gt;
 		COM = sc.next();&lt;br /&gt;
 		System.out.println(&amp;quot;COM port changed to: &amp;quot;+COM);&lt;br /&gt;
 		&lt;br /&gt;
                 &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;//Creation of the Variables that will be used to connect to the Database and the Xbee&amp;lt;/span&amp;gt;&lt;br /&gt;
 		linker = new SQLinker(address, user);&lt;br /&gt;
 		linker.FillArdList();	&lt;br /&gt;
 		xbee = new Xbee(COM);&lt;br /&gt;
 		&lt;br /&gt;
                 &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;//Creating the Updates Threads&amp;lt;/span&amp;gt;&lt;br /&gt;
 		W8Thread thread1 = new W8Thread();&lt;br /&gt;
 		thread1.start();&lt;br /&gt;
 		UpTestThread thread2 = new UpTestThread();&lt;br /&gt;
 		thread2.start();&lt;br /&gt;
 		&lt;br /&gt;
                 &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;//We now allow the user to enter a command&amp;lt;/span&amp;gt;&lt;br /&gt;
 		String command;&lt;br /&gt;
 		System.out.println(&amp;quot;vous pouvez maintenant lancer une commande si vous le souhaitez&amp;quot;);&lt;br /&gt;
 		System.out.println(&amp;quot;tapez help pour plus d'informations&amp;quot;);&lt;br /&gt;
 		boolean exit=false;&lt;br /&gt;
 		&lt;br /&gt;
 		while(exit==false){&lt;br /&gt;
 			command=sc.next();&lt;br /&gt;
 			&lt;br /&gt;
 			if(command.equals(&amp;quot;help&amp;quot;)){&lt;br /&gt;
 				System.out.println(&amp;quot;print =&amp;gt; affiche la liste des arduinos&amp;quot;);&lt;br /&gt;
 				System.out.println(&amp;quot;exit =&amp;gt; ferme le programme&amp;quot;);&lt;br /&gt;
 			}&lt;br /&gt;
 			if(command.equals(&amp;quot;print&amp;quot;)){linker.PrintArdList();}&lt;br /&gt;
 			if(command.equals(&amp;quot;exit&amp;quot;)){exit=true;}&lt;br /&gt;
 		&lt;br /&gt;
 		}&lt;br /&gt;
 		&amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;//if the user ask to stop the program, it will do those final commands&amp;lt;/span&amp;gt;&lt;br /&gt;
 		sc.close();&lt;br /&gt;
 		thread1.stop();&lt;br /&gt;
 		thread2.stop();&lt;br /&gt;
 		xbee.XbeeClosing();	&lt;br /&gt;
 		//System.out.println(&amp;quot;Program finished successfully&amp;quot;);&lt;br /&gt;
 		&lt;br /&gt;
 	}&lt;br /&gt;
 &lt;br /&gt;
 } &lt;br /&gt;
 &lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le main est la racine du programme. Il va créer les ressources nécessaires pour la connexion à la base de donnée et au XBee lui même connecté au PC.&lt;br /&gt;
Il crée ensuite 2 threads, l'un faisant une MAJ des valeurs des Arduinos dans la base de donnée à intervalles réguliers.&lt;br /&gt;
L'autre regarde sur la base de donnée si un utilisateur a fait une demande de MAJ, et ce toute les secondes, puis y répond.&lt;br /&gt;
&lt;br /&gt;
====La classe SQLinker====&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 public class SQLinker {&lt;br /&gt;
  	&lt;br /&gt;
 	Connection connect;&lt;br /&gt;
 	Statement stmt;&lt;br /&gt;
 	PreparedStatement pst;&lt;br /&gt;
 	ResultSet rs;&lt;br /&gt;
 	int[] ArdList = new int[10];&lt;br /&gt;
 	int[][] ArdListMatrix = new int[10][2];&lt;br /&gt;
 	String[] table = {&amp;quot;Battery&amp;quot;, &amp;quot;Light&amp;quot;, &amp;quot;Temperature&amp;quot;, &amp;quot;Updating&amp;quot;};&lt;br /&gt;
 	&amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;//List of variables used to connect to the database and store some informations&amp;lt;/span&amp;gt;&lt;br /&gt;
 	&lt;br /&gt;
 	&amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;//Constructor, create a connection when called&amp;lt;/span&amp;gt;&lt;br /&gt;
 	public SQLinker(String address, String user){&lt;br /&gt;
 		&lt;br /&gt;
 		try{&lt;br /&gt;
 			Class.forName(&amp;quot;com.mysql.jdbc.Driver&amp;quot;).newInstance();&lt;br /&gt;
 		} catch(Exception ex){&lt;br /&gt;
 			System.out.println(&amp;quot;can't register the Driver&amp;quot;);&lt;br /&gt;
 		}&lt;br /&gt;
 		&lt;br /&gt;
 		try{&lt;br /&gt;
 			connect = DriverManager.getConnection(address+user);&lt;br /&gt;
 			stmt = connect.createStatement();&lt;br /&gt;
 		} catch(Exception ex){&lt;br /&gt;
 		    System.out.println(&amp;quot;connection issue&amp;quot;);&lt;br /&gt;
 			System.out.println(&amp;quot;SQLException: &amp;quot; + ex.getMessage());&lt;br /&gt;
 		}&lt;br /&gt;
 		if (connect!= null){&lt;br /&gt;
 			System.out.println(&amp;quot;connected to the database &amp;quot; + address);&lt;br /&gt;
 		}&lt;br /&gt;
 		&lt;br /&gt;
 	}&lt;br /&gt;
 	&amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;//Fill a matrix with the list of Arduinos stored in the database&amp;lt;/span&amp;gt;&lt;br /&gt;
 	public void FillArdList(){&lt;br /&gt;
 		try{&lt;br /&gt;
 			rs = stmt.executeQuery(&amp;quot;SELECT Arduino FROM Arduinos&amp;quot;);&lt;br /&gt;
 			int i=0;&lt;br /&gt;
 			int m,c,d,u;&lt;br /&gt;
 			while(rs.next()){&lt;br /&gt;
 				ArdList[i] = Integer.parseInt(rs.getString(1));&lt;br /&gt;
 				m=ArdList[i]/1000;&lt;br /&gt;
 				c=(ArdList[i]-m*1000)/100;&lt;br /&gt;
 				d=(ArdList[i]-m*1000-c*100)/10;&lt;br /&gt;
 				u=(ArdList[i]-m*1000-c*100-d*10);&lt;br /&gt;
 				ArdListMatrix[i][0]=(m*10+c);&lt;br /&gt;
 				ArdListMatrix[i][1]=(d*10+u);				&lt;br /&gt;
 				i++;&lt;br /&gt;
 			}&lt;br /&gt;
 			ArdList[i]=-1;&lt;br /&gt;
 		} catch (SQLException e){&lt;br /&gt;
 			System.out.println(&amp;quot;SQLException: &amp;quot; + e.getMessage());&lt;br /&gt;
 		    System.out.println(&amp;quot;SQLState: &amp;quot; + e.getSQLState());&lt;br /&gt;
 		    System.out.println(&amp;quot;VendorError: &amp;quot; + e.getErrorCode());&lt;br /&gt;
 		} &lt;br /&gt;
 	}&lt;br /&gt;
 	&lt;br /&gt;
 	&amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;//print the list of arduinos stored in the program&amp;lt;/span&amp;gt;&lt;br /&gt;
 	public void PrintArdList(){&lt;br /&gt;
 		int i=0;&lt;br /&gt;
 		while(ArdList[i]!=-1){&lt;br /&gt;
 			i++;&lt;br /&gt;
 			System.out.println(&amp;quot;Code Arduino n°&amp;quot;+i+&amp;quot;: &amp;quot;+ArdList[i]);&lt;br /&gt;
 &lt;br /&gt;
 		}&lt;br /&gt;
 	}&lt;br /&gt;
 	&lt;br /&gt;
 	&amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;//Print the values of a specific arduino&amp;lt;/span&amp;gt;&lt;br /&gt;
 	public void PrintArdValues(int ard){&lt;br /&gt;
 		for(int i=0; i&amp;lt;=2;i++){&lt;br /&gt;
 			&lt;br /&gt;
 			try {&lt;br /&gt;
 				rs = stmt.executeQuery(&amp;quot;SELECT &amp;quot; +table[i]+&amp;quot; FROM Arduinos WHERE Arduino =&amp;quot;+ard);&lt;br /&gt;
 			} catch (SQLException e) {&lt;br /&gt;
 				e.printStackTrace();&lt;br /&gt;
 			}&lt;br /&gt;
 			try {&lt;br /&gt;
 				while(rs.next()){&lt;br /&gt;
 					System.out.println(table[i] +&amp;quot;=&amp;quot; + rs.getString(1));&lt;br /&gt;
 				}&lt;br /&gt;
 			} catch (SQLException e) {&lt;br /&gt;
 				e.printStackTrace();&lt;br /&gt;
 			}&lt;br /&gt;
 &lt;br /&gt;
 		}&lt;br /&gt;
 	}&lt;br /&gt;
 &lt;br /&gt;
 	&amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;//print the values of every arduino stored in the program&amp;lt;/span&amp;gt;&lt;br /&gt;
 	public void PrintAllArdValues(){&lt;br /&gt;
 		int i=0;&lt;br /&gt;
 		while(ArdList[i]!=-1){&lt;br /&gt;
 			this.PrintArdValues(i);&lt;br /&gt;
 		}&lt;br /&gt;
 	}&lt;br /&gt;
 	&lt;br /&gt;
 	&amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;//set the values obtained from an arduino to the database&amp;lt;/span&amp;gt;&lt;br /&gt;
 	public void SetArdValues(int Ard, int[] values){&lt;br /&gt;
 		int i=0;&lt;br /&gt;
 		while(values[i]!=-1){&lt;br /&gt;
 			&lt;br /&gt;
 			try {&lt;br /&gt;
 				pst = connect.prepareStatement(&amp;quot;UPDATE Arduinos SET &amp;quot;+table[values[i]]+&amp;quot; = &amp;quot;+values[i+1] +&amp;quot;  WHERE Arduino =&amp;quot;+Ard);&lt;br /&gt;
 				pst.executeUpdate();&lt;br /&gt;
 			} catch (SQLException e){&lt;br /&gt;
 				e.printStackTrace();&lt;br /&gt;
 			}&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 			i+=2;&lt;br /&gt;
 		}&lt;br /&gt;
 	}&lt;br /&gt;
 &lt;br /&gt;
 	&amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;//verify if an update as been demanded by a user on the website&amp;lt;/span&amp;gt;&lt;br /&gt;
 	public int CheckUpdate(){&lt;br /&gt;
 		int i=0;&lt;br /&gt;
 		int ret=0;&lt;br /&gt;
 		while(ArdList[i]!=-1 &amp;amp;&amp;amp; ret!=1){&lt;br /&gt;
 			try {&lt;br /&gt;
 				rs = stmt.executeQuery(&amp;quot;SELECT Updating FROM Arduinos WHERE Arduino =&amp;quot;+ArdList[i]);&lt;br /&gt;
 				while(rs.next()){&lt;br /&gt;
 					ret = Integer.parseInt(rs.getString(1));&lt;br /&gt;
 				}&lt;br /&gt;
 			} catch (SQLException e) {&lt;br /&gt;
 				e.printStackTrace();&lt;br /&gt;
 			}&lt;br /&gt;
 			i++;&lt;br /&gt;
 		}&lt;br /&gt;
 		return ret; &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;//return 1 if update demanded&amp;lt;/span&amp;gt;&lt;br /&gt;
 		&lt;br /&gt;
 	}&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
Cette classe regroupe toutes les fonctions permettant de se connecter à une base de donnée et d'en traiter les données.&lt;br /&gt;
&lt;br /&gt;
=== Liste du matériel à acheter ===&lt;/div&gt;</summary>
		<author><name>Cdelberg</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=Objets_communiquants_et_gestion_de_l%27%C3%A9nergie&amp;diff=4180</id>
		<title>Objets communiquants et gestion de l'énergie</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=Objets_communiquants_et_gestion_de_l%27%C3%A9nergie&amp;diff=4180"/>
				<updated>2013-02-25T07:14:07Z</updated>
		
		<summary type="html">&lt;p&gt;Cdelberg : /* Le Arduino */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Présentation du projet ==&lt;br /&gt;
&lt;br /&gt;
=== Planning prévisionnel provisoire (jusqu'à la pré-soutenance)===&lt;br /&gt;
&lt;br /&gt;
Ce planning pourrait être amené à être modifié.&lt;br /&gt;
&lt;br /&gt;
'''''I) Etat de l'art''''' ( ~2-3 semaines)&lt;br /&gt;
&lt;br /&gt;
-Energy harvesting (Calvin)&lt;br /&gt;
&lt;br /&gt;
-Batteries (Justin)&lt;br /&gt;
&lt;br /&gt;
'''''II) Mesure de puissance des différents appareil Arduino''''' ( ~2 semaines)&lt;br /&gt;
&lt;br /&gt;
'''''III) Confronter théorie/réalité''''' ( ~1 semaine)&lt;br /&gt;
-estimer consommation de puissance&lt;br /&gt;
&lt;br /&gt;
-vérifier en pratique&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Amené à être ajouté:'''&lt;br /&gt;
&lt;br /&gt;
Mesure du Arduino de sa propre consommation.&lt;br /&gt;
&lt;br /&gt;
Mesure de la consommation du code (?)&lt;br /&gt;
&lt;br /&gt;
Applications:&lt;br /&gt;
&lt;br /&gt;
-Envoi des valeurs de l'Arduino au serveur.&lt;br /&gt;
&lt;br /&gt;
-Interface web pour interagir avec l'objet.&lt;br /&gt;
&lt;br /&gt;
== Etat de l'art ==&lt;br /&gt;
&lt;br /&gt;
=== Energy Harvesting ===&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
* Mosquino:&lt;br /&gt;
&lt;br /&gt;
''Mosquino'' est un matériel compatible avec le développement logiciel et dérivé de ''Arduino'', il permet de récupérer de l'énergie des sources ambiantes (chaleur, luminosité, vibrations)&lt;br /&gt;
Il n'est destiné qu'aux faibles consommations électriques et n'est encore qu'en phase de développement, il n'a pas encore été véritablement testé. &amp;lt;br/&amp;gt;&lt;br /&gt;
http://tim.cexx.org/?page_id=760&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
* Breakout board BOB-o&amp;lt;sub&amp;gt;994&amp;lt;/sub&amp;gt;6 :&lt;br /&gt;
&lt;br /&gt;
Cette carte utilise le collecteur d'énergie piezoelectrique LTC&amp;lt;sub&amp;gt;35&amp;lt;/sub&amp;gt;88 de Linear Technologies et permet non seulement de récupérer l'énergie piezoélectrique mais aussi l'énergie solaire. Initialement prévu pour fonctionner à faible voltage, la capacité de sortie peut-être dimensionnée pour recevoir une salve de courant de sortie plus élevée. &amp;lt;br/&amp;gt;&lt;br /&gt;
https://www.sparkfun.com/products/9946&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
=== Batteries ===&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
* nouvelles technologies: &lt;br /&gt;
&lt;br /&gt;
ces dernières années, de nouvelles technologies sont apparues, sans être encore réellement utilisées. je pense notamment aux batteries contenues dans des câbles: &lt;br /&gt;
http://phys.org/news/2012-09-lg-chem-cable-batteries-reshape.html&lt;br /&gt;
&lt;br /&gt;
ainsi qu'aux batteries ultra fines dévellopées par thinergy: &lt;br /&gt;
http://www.infinitepowersolutions.com/products.html&lt;br /&gt;
&lt;br /&gt;
Néanmoins, les tensions pouvant etre délivrées par ces technologies naissantes sont loin de pouvoir alimenter le materiel qui nous interresse, à savoir des Arduino (necessitant une alimentation comprise entre 7V-12V)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
D'autres techno sont encore en phase de développement, comme les batteries lithium-Air d'IBM, les piles au graphène utilisant la chaleur pour produire de l’énergie (plutôt de l'energy harvesting pour le coup). Comme ces technologies sont encore en phase de développement, elles n’apparaîtrons pas sur le marché avant au moins 10 ans.&lt;br /&gt;
&lt;br /&gt;
http://www.metro.co.uk/tech/news/897731-technology-companies-charge-towards-next-generation-battery-future&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* technologies adaptée à notre usage:&lt;br /&gt;
&lt;br /&gt;
comme je l'ai rappelé plus haut, ce PFE tourne principalement autour d'Arduino. ces plates-formes nécessitant une tension d'alimentation supérieure à 7V, le choix le plus intéressant reste les piles rechargeable.&lt;br /&gt;
&lt;br /&gt;
Seulement, il existe plusieurs types de piles rechargeables. dans l'usage qu'il en sera fait, et si ces batteries sont couplées à des technologies de récupération d'énergie, il est important de choisir des piles Lithium-Ion.&lt;br /&gt;
&lt;br /&gt;
En effet, ces piles sont les plus intéressantes pour plusieurs raisons:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
tout d'abord, elles sont insensibles à l'effet mémoire. du coup elles ne perdent pas de leur capacité de stockage d’énergie au cours du temps.&lt;br /&gt;
&lt;br /&gt;
le circuit intégré à ces piles empêche toute surtension lors de la charge.&lt;br /&gt;
&lt;br /&gt;
elles peuvent être rechargée en même temps qu'elles sont utilisées.&lt;br /&gt;
&lt;br /&gt;
dans une époque ou la pollution est un sujet préoccupation, ces piles sont moins dangereuse pour l’environnement que leurs homologues au nickel-Cadmium&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
le seul problème pourrais venir du fait qu'elles ne supporte pas bien la chaleur, mais à moins de les coller à un radiateur, il ne devrais pas y avoir de soucis.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Mesure de la consommation énergétique ===&lt;br /&gt;
&lt;br /&gt;
WSIM permet la simulation de capteurs sans fil. Il permet notamment d'estimer la consommation électrique http://wsim.gforge.inria.fr/index.html&lt;br /&gt;
Pour l'instant il ne fonctionne qu'avec des microcontrolleurs TI. Le support des AVR est en cours.&lt;br /&gt;
L'estimation de la consommation énergétique utilise esimu http://esimu.gforge.inria.fr/index.html&lt;br /&gt;
&lt;br /&gt;
== Réalisation ==&lt;br /&gt;
===Le Arduino===&lt;br /&gt;
====Architecture de l'objet communiquant====&lt;br /&gt;
&lt;br /&gt;
*Un Arduino Mega 2560&lt;br /&gt;
*Un XBee&lt;br /&gt;
*Un capteur de température&lt;br /&gt;
*Un capteur de luminosité&lt;br /&gt;
&lt;br /&gt;
====Le code du Arduino====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 &amp;lt;span style=&amp;quot;color: blue;&amp;quot;&amp;gt;#include&amp;lt;/span&amp;gt; &amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;XBee.h&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;// Define variables, pins..&amp;lt;/span&amp;gt;&lt;br /&gt;
 int sensorTempPin = 0;&lt;br /&gt;
 int Temp;&lt;br /&gt;
 int sensorLightPin = 1;&lt;br /&gt;
 int Light;&lt;br /&gt;
 int XPin = 2;&lt;br /&gt;
 int YPin = 3;&lt;br /&gt;
 int ZPin = 4;&lt;br /&gt;
 &lt;br /&gt;
 uint8_t values[] = { 0, 0, 0, 0 };&lt;br /&gt;
 XBee xbee =  &amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;XBee&amp;lt;/span&amp;gt;();&lt;br /&gt;
 XBeeResponse response = &amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;XBeeResponse&amp;lt;/span&amp;gt;();&lt;br /&gt;
 Rx16Response rx = &amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;Rx16Response&amp;lt;/span&amp;gt;();&lt;br /&gt;
 Tx16Request tx = &amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;Tx16Request&amp;lt;/span&amp;gt;(0x1111, values, &amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;sizeof&amp;lt;/span&amp;gt;(values));&lt;br /&gt;
 TxStatusResponse txStatus = &amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;TxStatusResponse&amp;lt;/span&amp;gt;();&lt;br /&gt;
 &lt;br /&gt;
  &amp;lt;span style=&amp;quot;color: blue;&amp;quot;&amp;gt;void&amp;lt;/span&amp;gt; &amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;setup&amp;lt;/span&amp;gt;()&lt;br /&gt;
 {&lt;br /&gt;
    &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;// Initialise xbee / serial&amp;lt;/span&amp;gt;&lt;br /&gt;
   xbee.&amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;begin&amp;lt;/span&amp;gt;(9600);&lt;br /&gt;
   Serial.&amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;begin&amp;lt;/span&amp;gt;(9600);&lt;br /&gt;
 } &lt;br /&gt;
 &lt;br /&gt;
  &amp;lt;span style=&amp;quot;color: blue;&amp;quot;&amp;gt;void&amp;lt;/span&amp;gt; &amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;loop&amp;lt;/span&amp;gt;()&lt;br /&gt;
 {&lt;br /&gt;
    &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;// Read the values on analog pins&amp;lt;/span&amp;gt;&lt;br /&gt;
   Light = &amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;analogRead&amp;lt;/span&amp;gt;(sensorLightPin);&lt;br /&gt;
   Temp = &amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;analogRead&amp;lt;/span&amp;gt;(sensorTempPin);&lt;br /&gt;
 &lt;br /&gt;
   &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;// Listens on the Xbee protocol for any packet incoming.&amp;lt;/span&amp;gt;&lt;br /&gt;
   xbee.&amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;readPacket&amp;lt;/span&amp;gt;();&lt;br /&gt;
 &lt;br /&gt;
   if(xbee.&amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;getResponse&amp;lt;/span&amp;gt;().&amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;isAvailable&amp;lt;/span&amp;gt;()){&lt;br /&gt;
      &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;// Got something&amp;lt;/span&amp;gt;&lt;br /&gt;
     Serial.&amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;print&amp;lt;/span&amp;gt;(&amp;quot;Got something\n&amp;quot;);&lt;br /&gt;
      &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;// Break the 10-bits of information retrieved from light&amp;lt;/span&amp;gt;&lt;br /&gt;
      &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;// and temperature into 2 bytes for each.&amp;lt;/span&amp;gt;&lt;br /&gt;
     values[0] = Temp &amp;gt;&amp;gt; 8 &amp;amp; 0xff;&lt;br /&gt;
     values[1] = Temp &amp;amp; 0xff;&lt;br /&gt;
     values[2] = Light &amp;gt;&amp;gt; 8 &amp;amp; 0xff;&lt;br /&gt;
     values[3] = Light &amp;amp; 0xff;&lt;br /&gt;
     Serial.&amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;print&amp;lt;/span&amp;gt;(values[0]);&lt;br /&gt;
     &lt;br /&gt;
      &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;// Sending values to server&amp;lt;/span&amp;gt;&lt;br /&gt;
     xbee.&amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;send&amp;lt;/span&amp;gt;(tx);&lt;br /&gt;
     &lt;br /&gt;
      &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;// After sending a tx request, we expect a status response&amp;lt;/span&amp;gt;&lt;br /&gt;
      &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;// from the server&amp;lt;/span&amp;gt;&lt;br /&gt;
      &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;// Wait up to 5 seconds for the status response&amp;lt;/span&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
     if (xbee.&amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;readPacket&amp;lt;/span&amp;gt;(5000)) {&lt;br /&gt;
        &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;// We got a response!&amp;lt;/span&amp;gt;&lt;br /&gt;
       Serial.&amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;print&amp;lt;/span&amp;gt;(&amp;quot;We got a response\n&amp;quot;);&lt;br /&gt;
       &lt;br /&gt;
        &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;// It should be a znet tx status&amp;lt;/span&amp;gt;&lt;br /&gt;
       if (xbee.&amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;getResponse&amp;lt;/span&amp;gt;().&amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;getApiId&amp;lt;/span&amp;gt;() == TX_STATUS_RESPONSE) {&lt;br /&gt;
         xbee.&amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;getResponse&amp;lt;/span&amp;gt;().&amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;getZBTxStatusResponse&amp;lt;/span&amp;gt;(txStatus);&lt;br /&gt;
         &lt;br /&gt;
          &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;// get the delivery status, the fifth byte&amp;lt;/span&amp;gt;&lt;br /&gt;
         if (txStatus.&amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;getStatus&amp;lt;/span&amp;gt;() == SUCCESS){&lt;br /&gt;
            &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;// Success! Time to celebrate&amp;lt;/span&amp;gt;&lt;br /&gt;
           Serial.&amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;print&amp;lt;/span&amp;gt;(&amp;quot;SUCCESS! Time to celebrate\n&amp;quot;);&lt;br /&gt;
         } else {&lt;br /&gt;
           &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;// The remote XBee did not receive our packet. Is it powered on?&amp;lt;/span&amp;gt;&lt;br /&gt;
          Serial.&amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;print&amp;lt;/span&amp;gt;(&amp;quot;The remote Xbee did not receive our packet\n&amp;quot;);&lt;br /&gt;
         }&lt;br /&gt;
       }&lt;br /&gt;
     } else {&lt;br /&gt;
       &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;// local XBee did not provide a timely TX Status Response -- should not happen&amp;lt;/span&amp;gt;&lt;br /&gt;
      Serial.&amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;print&amp;lt;/span&amp;gt;(&amp;quot;Local Xbee did not provide a timely TX Status Response\n&amp;quot;);&lt;br /&gt;
     }&lt;br /&gt;
     &lt;br /&gt;
   }&lt;br /&gt;
  &lt;br /&gt;
   &amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;delay&amp;lt;/span&amp;gt;(500);&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
Ce code fonctionne de la manière suivante:&lt;br /&gt;
=====Fonction &amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;setup&amp;lt;/span&amp;gt;():=====&lt;br /&gt;
Une fois implémenté sur le Arduino, la fonction setup va faire démarrer le protocole XBee et le protocole Série afin de pouvoir envoyer et recevoir des messages par XBee, et d'imprimer les messages d'erreur sur le port Série s'il y a lieu.&lt;br /&gt;
=====Fonction &amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;loop&amp;lt;/span&amp;gt;():=====&lt;br /&gt;
Cette fonction va réaliser une boucle toutes les 0.5s pour mettre a jour les données des différents capteurs et les envoyer au serveur au travers du protocole XBee. Pour plus de détails voir les commentaires expliquant chaque étape du déroulement de la boucle.&lt;br /&gt;
&lt;br /&gt;
===Le programme LINKER===&lt;br /&gt;
&lt;br /&gt;
Code du programme de liaison&lt;br /&gt;
&lt;br /&gt;
ce programme en java est constitué de 5 classes&lt;br /&gt;
&lt;br /&gt;
====Le Main====&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 public class main {&lt;br /&gt;
 &lt;br /&gt;
 	public static SQLinker linker;&lt;br /&gt;
 	public static Xbee xbee;&lt;br /&gt;
 	&lt;br /&gt;
 	public static void main(String[] args){&lt;br /&gt;
 		String address = new String(&amp;quot;jdbc:mysql://sitedb.polytech-lille.net/cdelberg?&amp;quot;);&lt;br /&gt;
 		String user = new String(&amp;quot;user=cdelberg&amp;amp;password=myLo9ufonese&amp;quot;);&lt;br /&gt;
 		String COM;&lt;br /&gt;
 		&lt;br /&gt;
 &lt;br /&gt;
                 &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;// We ask the user on the Communication Port to connect the XBee&amp;lt;/span&amp;gt;&lt;br /&gt;
 		System.out.println(&amp;quot;Please enter the Communication port of the Xbee&amp;quot;);&lt;br /&gt;
 		Scanner sc = new Scanner(System.in);&lt;br /&gt;
 		COM = sc.next();&lt;br /&gt;
 		System.out.println(&amp;quot;COM port changed to: &amp;quot;+COM);&lt;br /&gt;
 		&lt;br /&gt;
                 &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;//Creation of the Variables that will be used to connect to the Database and the Xbee&amp;lt;/span&amp;gt;&lt;br /&gt;
 		linker = new SQLinker(address, user);&lt;br /&gt;
 		linker.FillArdList();	&lt;br /&gt;
 		xbee = new Xbee(COM);&lt;br /&gt;
 		&lt;br /&gt;
                 &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;//Creating the Updates Threads&amp;lt;/span&amp;gt;&lt;br /&gt;
 		W8Thread thread1 = new W8Thread();&lt;br /&gt;
 		thread1.start();&lt;br /&gt;
 		UpTestThread thread2 = new UpTestThread();&lt;br /&gt;
 		thread2.start();&lt;br /&gt;
 		&lt;br /&gt;
                 &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;//We now allow the user to enter a command&amp;lt;/span&amp;gt;&lt;br /&gt;
 		String command;&lt;br /&gt;
 		System.out.println(&amp;quot;vous pouvez maintenant lancer une commande si vous le souhaitez&amp;quot;);&lt;br /&gt;
 		System.out.println(&amp;quot;tapez help pour plus d'informations&amp;quot;);&lt;br /&gt;
 		boolean exit=false;&lt;br /&gt;
 		&lt;br /&gt;
 		while(exit==false){&lt;br /&gt;
 			command=sc.next();&lt;br /&gt;
 			&lt;br /&gt;
 			if(command.equals(&amp;quot;help&amp;quot;)){&lt;br /&gt;
 				System.out.println(&amp;quot;print =&amp;gt; affiche la liste des arduinos&amp;quot;);&lt;br /&gt;
 				System.out.println(&amp;quot;exit =&amp;gt; ferme le programme&amp;quot;);&lt;br /&gt;
 			}&lt;br /&gt;
 			if(command.equals(&amp;quot;print&amp;quot;)){linker.PrintArdList();}&lt;br /&gt;
 			if(command.equals(&amp;quot;exit&amp;quot;)){exit=true;}&lt;br /&gt;
 		&lt;br /&gt;
 		}&lt;br /&gt;
 		&amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;//if the user ask to stop the program, it will do those final commands&amp;lt;/span&amp;gt;&lt;br /&gt;
 		sc.close();&lt;br /&gt;
 		thread1.stop();&lt;br /&gt;
 		thread2.stop();&lt;br /&gt;
 		xbee.XbeeClosing();	&lt;br /&gt;
 		//System.out.println(&amp;quot;Program finished successfully&amp;quot;);&lt;br /&gt;
 		&lt;br /&gt;
 	}&lt;br /&gt;
 &lt;br /&gt;
 } &lt;br /&gt;
 &lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le main est la racine du programme. Il va créer les ressources nécessaires pour la connexion à la base de donnée et au XBee lui même connecté au PC.&lt;br /&gt;
Il crée ensuite 2 threads, l'un faisant une MAJ des valeurs des Arduinos dans la base de donnée à intervalles réguliers.&lt;br /&gt;
L'autre regarde sur la base de donnée si un utilisateur a fait une demande de MAJ, et ce toute les secondes, puis y répond.&lt;br /&gt;
&lt;br /&gt;
====La classe SQLinker====&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 public class SQLinker {&lt;br /&gt;
  	&lt;br /&gt;
 	Connection connect;&lt;br /&gt;
 	Statement stmt;&lt;br /&gt;
 	PreparedStatement pst;&lt;br /&gt;
 	ResultSet rs;&lt;br /&gt;
 	int[] ArdList = new int[10];&lt;br /&gt;
 	int[][] ArdListMatrix = new int[10][2];&lt;br /&gt;
 	String[] table = {&amp;quot;Battery&amp;quot;, &amp;quot;Light&amp;quot;, &amp;quot;Temperature&amp;quot;, &amp;quot;Updating&amp;quot;};&lt;br /&gt;
 	&amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;//List of variables used to connect to the database and store some informations&amp;lt;/span&amp;gt;&lt;br /&gt;
 	&lt;br /&gt;
 	&amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;//Constructor, create a connection when called&amp;lt;/span&amp;gt;&lt;br /&gt;
 	public SQLinker(String address, String user){&lt;br /&gt;
 		&lt;br /&gt;
 		try{&lt;br /&gt;
 			Class.forName(&amp;quot;com.mysql.jdbc.Driver&amp;quot;).newInstance();&lt;br /&gt;
 		} catch(Exception ex){&lt;br /&gt;
 			System.out.println(&amp;quot;can't register the Driver&amp;quot;);&lt;br /&gt;
 		}&lt;br /&gt;
 		&lt;br /&gt;
 		try{&lt;br /&gt;
 			connect = DriverManager.getConnection(address+user);&lt;br /&gt;
 			stmt = connect.createStatement();&lt;br /&gt;
 		} catch(Exception ex){&lt;br /&gt;
 		    System.out.println(&amp;quot;connection issue&amp;quot;);&lt;br /&gt;
 			System.out.println(&amp;quot;SQLException: &amp;quot; + ex.getMessage());&lt;br /&gt;
 		}&lt;br /&gt;
 		if (connect!= null){&lt;br /&gt;
 			System.out.println(&amp;quot;connected to the database &amp;quot; + address);&lt;br /&gt;
 		}&lt;br /&gt;
 		&lt;br /&gt;
 	}&lt;br /&gt;
 	&amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;//Fill a matrix with the list of Arduinos stored in the database&amp;lt;/span&amp;gt;&lt;br /&gt;
 	public void FillArdList(){&lt;br /&gt;
 		try{&lt;br /&gt;
 			rs = stmt.executeQuery(&amp;quot;SELECT Arduino FROM Arduinos&amp;quot;);&lt;br /&gt;
 			int i=0;&lt;br /&gt;
 			int m,c,d,u;&lt;br /&gt;
 			while(rs.next()){&lt;br /&gt;
 				ArdList[i] = Integer.parseInt(rs.getString(1));&lt;br /&gt;
 				m=ArdList[i]/1000;&lt;br /&gt;
 				c=(ArdList[i]-m*1000)/100;&lt;br /&gt;
 				d=(ArdList[i]-m*1000-c*100)/10;&lt;br /&gt;
 				u=(ArdList[i]-m*1000-c*100-d*10);&lt;br /&gt;
 				ArdListMatrix[i][0]=(m*10+c);&lt;br /&gt;
 				ArdListMatrix[i][1]=(d*10+u);				&lt;br /&gt;
 				i++;&lt;br /&gt;
 			}&lt;br /&gt;
 			ArdList[i]=-1;&lt;br /&gt;
 		} catch (SQLException e){&lt;br /&gt;
 			System.out.println(&amp;quot;SQLException: &amp;quot; + e.getMessage());&lt;br /&gt;
 		    System.out.println(&amp;quot;SQLState: &amp;quot; + e.getSQLState());&lt;br /&gt;
 		    System.out.println(&amp;quot;VendorError: &amp;quot; + e.getErrorCode());&lt;br /&gt;
 		} &lt;br /&gt;
 	}&lt;br /&gt;
 	&lt;br /&gt;
 	&amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;//print the list of arduinos stored in the program&amp;lt;/span&amp;gt;&lt;br /&gt;
 	public void PrintArdList(){&lt;br /&gt;
 		int i=0;&lt;br /&gt;
 		while(ArdList[i]!=-1){&lt;br /&gt;
 			i++;&lt;br /&gt;
 			System.out.println(&amp;quot;Code Arduino n°&amp;quot;+i+&amp;quot;: &amp;quot;+ArdList[i]);&lt;br /&gt;
 &lt;br /&gt;
 		}&lt;br /&gt;
 	}&lt;br /&gt;
 	&lt;br /&gt;
 	&amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;//Print the values of a specific arduino&amp;lt;/span&amp;gt;&lt;br /&gt;
 	public void PrintArdValues(int ard){&lt;br /&gt;
 		for(int i=0; i&amp;lt;=2;i++){&lt;br /&gt;
 			&lt;br /&gt;
 			try {&lt;br /&gt;
 				rs = stmt.executeQuery(&amp;quot;SELECT &amp;quot; +table[i]+&amp;quot; FROM Arduinos WHERE Arduino =&amp;quot;+ard);&lt;br /&gt;
 			} catch (SQLException e) {&lt;br /&gt;
 				e.printStackTrace();&lt;br /&gt;
 			}&lt;br /&gt;
 			try {&lt;br /&gt;
 				while(rs.next()){&lt;br /&gt;
 					System.out.println(table[i] +&amp;quot;=&amp;quot; + rs.getString(1));&lt;br /&gt;
 				}&lt;br /&gt;
 			} catch (SQLException e) {&lt;br /&gt;
 				e.printStackTrace();&lt;br /&gt;
 			}&lt;br /&gt;
 &lt;br /&gt;
 		}&lt;br /&gt;
 	}&lt;br /&gt;
 &lt;br /&gt;
 	&amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;//print the values of every arduino stored in the program&amp;lt;/span&amp;gt;&lt;br /&gt;
 	public void PrintAllArdValues(){&lt;br /&gt;
 		int i=0;&lt;br /&gt;
 		while(ArdList[i]!=-1){&lt;br /&gt;
 			this.PrintArdValues(i);&lt;br /&gt;
 		}&lt;br /&gt;
 	}&lt;br /&gt;
 	&lt;br /&gt;
 	&amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;//set the values obtained from an arduino to the database&amp;lt;/span&amp;gt;&lt;br /&gt;
 	public void SetArdValues(int Ard, int[] values){&lt;br /&gt;
 		int i=0;&lt;br /&gt;
 		while(values[i]!=-1){&lt;br /&gt;
 			&lt;br /&gt;
 			try {&lt;br /&gt;
 				pst = connect.prepareStatement(&amp;quot;UPDATE Arduinos SET &amp;quot;+table[values[i]]+&amp;quot; = &amp;quot;+values[i+1] +&amp;quot;  WHERE Arduino =&amp;quot;+Ard);&lt;br /&gt;
 				pst.executeUpdate();&lt;br /&gt;
 			} catch (SQLException e){&lt;br /&gt;
 				e.printStackTrace();&lt;br /&gt;
 			}&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 			i+=2;&lt;br /&gt;
 		}&lt;br /&gt;
 	}&lt;br /&gt;
 &lt;br /&gt;
 	&amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;//verify if an update as been demanded by a user on the website&amp;lt;/span&amp;gt;&lt;br /&gt;
 	public int CheckUpdate(){&lt;br /&gt;
 		int i=0;&lt;br /&gt;
 		int ret=0;&lt;br /&gt;
 		while(ArdList[i]!=-1 &amp;amp;&amp;amp; ret!=1){&lt;br /&gt;
 			try {&lt;br /&gt;
 				rs = stmt.executeQuery(&amp;quot;SELECT Updating FROM Arduinos WHERE Arduino =&amp;quot;+ArdList[i]);&lt;br /&gt;
 				while(rs.next()){&lt;br /&gt;
 					ret = Integer.parseInt(rs.getString(1));&lt;br /&gt;
 				}&lt;br /&gt;
 			} catch (SQLException e) {&lt;br /&gt;
 				e.printStackTrace();&lt;br /&gt;
 			}&lt;br /&gt;
 			i++;&lt;br /&gt;
 		}&lt;br /&gt;
 		return ret; &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;//return 1 if update demanded&amp;lt;/span&amp;gt;&lt;br /&gt;
 		&lt;br /&gt;
 	}&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
Cette classe regroupe toutes les fonctions permettant de se connecter à une base de donnée et d'en traiter les données.&lt;br /&gt;
&lt;br /&gt;
=== Liste du matériel à acheter ===&lt;/div&gt;</summary>
		<author><name>Cdelberg</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=Objets_communiquants_et_gestion_de_l%27%C3%A9nergie&amp;diff=4171</id>
		<title>Objets communiquants et gestion de l'énergie</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=Objets_communiquants_et_gestion_de_l%27%C3%A9nergie&amp;diff=4171"/>
				<updated>2013-02-22T16:33:52Z</updated>
		
		<summary type="html">&lt;p&gt;Cdelberg : /* le programme LINKER */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Présentation du projet ==&lt;br /&gt;
&lt;br /&gt;
=== Planning prévisionnel provisoire (jusqu'à la pré-soutenance)===&lt;br /&gt;
&lt;br /&gt;
Ce planning pourrait être amené à être modifié.&lt;br /&gt;
&lt;br /&gt;
'''''I) Etat de l'art''''' ( ~2-3 semaines)&lt;br /&gt;
&lt;br /&gt;
-Energy harvesting (Calvin)&lt;br /&gt;
&lt;br /&gt;
-Batteries (Justin)&lt;br /&gt;
&lt;br /&gt;
'''''II) Mesure de puissance des différents appareil Arduino''''' ( ~2 semaines)&lt;br /&gt;
&lt;br /&gt;
'''''III) Confronter théorie/réalité''''' ( ~1 semaine)&lt;br /&gt;
-estimer consommation de puissance&lt;br /&gt;
&lt;br /&gt;
-vérifier en pratique&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Amené à être ajouté:'''&lt;br /&gt;
&lt;br /&gt;
Mesure du Arduino de sa propre consommation.&lt;br /&gt;
&lt;br /&gt;
Mesure de la consommation du code (?)&lt;br /&gt;
&lt;br /&gt;
Applications:&lt;br /&gt;
&lt;br /&gt;
-Envoi des valeurs de l'Arduino au serveur.&lt;br /&gt;
&lt;br /&gt;
-Interface web pour interagir avec l'objet.&lt;br /&gt;
&lt;br /&gt;
== Etat de l'art ==&lt;br /&gt;
&lt;br /&gt;
=== Energy Harvesting ===&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
* Mosquino:&lt;br /&gt;
&lt;br /&gt;
''Mosquino'' est un matériel compatible avec le développement logiciel et dérivé de ''Arduino'', il permet de récupérer de l'énergie des sources ambiantes (chaleur, luminosité, vibrations)&lt;br /&gt;
Il n'est destiné qu'aux faibles consommations électriques et n'est encore qu'en phase de développement, il n'a pas encore été véritablement testé. &amp;lt;br/&amp;gt;&lt;br /&gt;
http://tim.cexx.org/?page_id=760&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
* Breakout board BOB-o&amp;lt;sub&amp;gt;994&amp;lt;/sub&amp;gt;6 :&lt;br /&gt;
&lt;br /&gt;
Cette carte utilise le collecteur d'énergie piezoelectrique LTC&amp;lt;sub&amp;gt;35&amp;lt;/sub&amp;gt;88 de Linear Technologies et permet non seulement de récupérer l'énergie piezoélectrique mais aussi l'énergie solaire. Initialement prévu pour fonctionner à faible voltage, la capacité de sortie peut-être dimensionnée pour recevoir une salve de courant de sortie plus élevée. &amp;lt;br/&amp;gt;&lt;br /&gt;
https://www.sparkfun.com/products/9946&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
=== Batteries ===&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
* nouvelles technologies: &lt;br /&gt;
&lt;br /&gt;
ces dernières années, de nouvelles technologies sont apparues, sans être encore réellement utilisées. je pense notamment aux batteries contenues dans des câbles: &lt;br /&gt;
http://phys.org/news/2012-09-lg-chem-cable-batteries-reshape.html&lt;br /&gt;
&lt;br /&gt;
ainsi qu'aux batteries ultra fines dévellopées par thinergy: &lt;br /&gt;
http://www.infinitepowersolutions.com/products.html&lt;br /&gt;
&lt;br /&gt;
Néanmoins, les tensions pouvant etre délivrées par ces technologies naissantes sont loin de pouvoir alimenter le materiel qui nous interresse, à savoir des Arduino (necessitant une alimentation comprise entre 7V-12V)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
D'autres techno sont encore en phase de développement, comme les batteries lithium-Air d'IBM, les piles au graphène utilisant la chaleur pour produire de l’énergie (plutôt de l'energy harvesting pour le coup). Comme ces technologies sont encore en phase de développement, elles n’apparaîtrons pas sur le marché avant au moins 10 ans.&lt;br /&gt;
&lt;br /&gt;
http://www.metro.co.uk/tech/news/897731-technology-companies-charge-towards-next-generation-battery-future&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* technologies adaptée à notre usage:&lt;br /&gt;
&lt;br /&gt;
comme je l'ai rappelé plus haut, ce PFE tourne principalement autour d'Arduino. ces plates-formes nécessitant une tension d'alimentation supérieure à 7V, le choix le plus intéressant reste les piles rechargeable.&lt;br /&gt;
&lt;br /&gt;
Seulement, il existe plusieurs types de piles rechargeables. dans l'usage qu'il en sera fait, et si ces batteries sont couplées à des technologies de récupération d'énergie, il est important de choisir des piles Lithium-Ion.&lt;br /&gt;
&lt;br /&gt;
En effet, ces piles sont les plus intéressantes pour plusieurs raisons:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
tout d'abord, elles sont insensibles à l'effet mémoire. du coup elles ne perdent pas de leur capacité de stockage d’énergie au cours du temps.&lt;br /&gt;
&lt;br /&gt;
le circuit intégré à ces piles empêche toute surtension lors de la charge.&lt;br /&gt;
&lt;br /&gt;
elles peuvent être rechargée en même temps qu'elles sont utilisées.&lt;br /&gt;
&lt;br /&gt;
dans une époque ou la pollution est un sujet préoccupation, ces piles sont moins dangereuse pour l’environnement que leurs homologues au nickel-Cadmium&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
le seul problème pourrais venir du fait qu'elles ne supporte pas bien la chaleur, mais à moins de les coller à un radiateur, il ne devrais pas y avoir de soucis.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Mesure de la consommation énergétique ===&lt;br /&gt;
&lt;br /&gt;
WSIM permet la simulation de capteurs sans fil. Il permet notamment d'estimer la consommation électrique http://wsim.gforge.inria.fr/index.html&lt;br /&gt;
Pour l'instant il ne fonctionne qu'avec des microcontrolleurs TI. Le support des AVR est en cours.&lt;br /&gt;
L'estimation de la consommation énergétique utilise esimu http://esimu.gforge.inria.fr/index.html&lt;br /&gt;
&lt;br /&gt;
== Réalisation ==&lt;br /&gt;
===Le Arduino===&lt;br /&gt;
====Architecture de l'objet communiquant====&lt;br /&gt;
&lt;br /&gt;
*Un Arduino Mega 2560&lt;br /&gt;
*Un XBee&lt;br /&gt;
*Un capteur de température&lt;br /&gt;
*Un capteur de luminosité&lt;br /&gt;
*Un accéléromètre (dont les valeurs ne seront pas utilisées mais qui devait servir d'appareil supplémentaire pour la problématique de consommation)&lt;br /&gt;
&lt;br /&gt;
====Le code du Arduino====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 &amp;lt;span style=&amp;quot;color: blue;&amp;quot;&amp;gt;#include&amp;lt;/span&amp;gt; &amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;XBee.h&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;// Define variables, pins..&amp;lt;/span&amp;gt;&lt;br /&gt;
 int sensorTempPin = 0;&lt;br /&gt;
 int Temp;&lt;br /&gt;
 int sensorLightPin = 1;&lt;br /&gt;
 int Light;&lt;br /&gt;
 int XPin = 2;&lt;br /&gt;
 int YPin = 3;&lt;br /&gt;
 int ZPin = 4;&lt;br /&gt;
 int XValue;&lt;br /&gt;
 int YValue;&lt;br /&gt;
 int ZValue;&lt;br /&gt;
 &lt;br /&gt;
 uint8_t values[] = { 0, 0, 0, 0 };&lt;br /&gt;
 XBee xbee =  &amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;XBee&amp;lt;/span&amp;gt;();&lt;br /&gt;
 XBeeResponse response = &amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;XBeeResponse&amp;lt;/span&amp;gt;();&lt;br /&gt;
 Rx16Response rx = &amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;Rx16Response&amp;lt;/span&amp;gt;();&lt;br /&gt;
 Tx16Request tx = &amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;Tx16Request&amp;lt;/span&amp;gt;(0x1111, values, &amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;sizeof&amp;lt;/span&amp;gt;(values));&lt;br /&gt;
 TxStatusResponse txStatus = &amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;TxStatusResponse&amp;lt;/span&amp;gt;();&lt;br /&gt;
 &lt;br /&gt;
  &amp;lt;span style=&amp;quot;color: blue;&amp;quot;&amp;gt;void&amp;lt;/span&amp;gt; &amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;setup&amp;lt;/span&amp;gt;()&lt;br /&gt;
 {&lt;br /&gt;
    &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;// Initialise xbee / serial&amp;lt;/span&amp;gt;&lt;br /&gt;
   xbee.&amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;begin&amp;lt;/span&amp;gt;(9600);&lt;br /&gt;
   Serial.&amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;begin&amp;lt;/span&amp;gt;(9600);&lt;br /&gt;
 } &lt;br /&gt;
 &lt;br /&gt;
  &amp;lt;span style=&amp;quot;color: blue;&amp;quot;&amp;gt;void&amp;lt;/span&amp;gt; &amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;loop&amp;lt;/span&amp;gt;()&lt;br /&gt;
 {&lt;br /&gt;
    &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;// Read the values on analog pins&amp;lt;/span&amp;gt;&lt;br /&gt;
   Light = &amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;analogRead&amp;lt;/span&amp;gt;(sensorLightPin);&lt;br /&gt;
   Temp = &amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;analogRead&amp;lt;/span&amp;gt;(sensorTempPin);&lt;br /&gt;
   //XValue = &amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;analogRead&amp;lt;/span&amp;gt;(XPin);//&lt;br /&gt;
   //YValue = &amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;analogRead&amp;lt;/span&amp;gt;(YPin);&amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;//Not used&amp;lt;/span&amp;gt;&lt;br /&gt;
   //ZValue = &amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;analogRead&amp;lt;/span&amp;gt;(ZPin);//&lt;br /&gt;
 &lt;br /&gt;
   &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;// Listens on the Xbee protocol for any packet incoming.&amp;lt;/span&amp;gt;&lt;br /&gt;
   xbee.&amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;readPacket&amp;lt;/span&amp;gt;();&lt;br /&gt;
 &lt;br /&gt;
   if(xbee.&amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;getResponse&amp;lt;/span&amp;gt;().&amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;isAvailable&amp;lt;/span&amp;gt;()){&lt;br /&gt;
      &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;// Got something&amp;lt;/span&amp;gt;&lt;br /&gt;
     Serial.&amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;print&amp;lt;/span&amp;gt;(&amp;quot;Got something\n&amp;quot;);&lt;br /&gt;
      &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;// Break the 10-bits of information retrieved from light&amp;lt;/span&amp;gt;&lt;br /&gt;
      &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;// and temperature into 2 bytes for each.&amp;lt;/span&amp;gt;&lt;br /&gt;
     values[0] = Temp &amp;gt;&amp;gt; 8 &amp;amp; 0xff;&lt;br /&gt;
     values[1] = Temp &amp;amp; 0xff;&lt;br /&gt;
     values[2] = Light &amp;gt;&amp;gt; 8 &amp;amp; 0xff;&lt;br /&gt;
     values[3] = Light &amp;amp; 0xff;&lt;br /&gt;
     Serial.&amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;print&amp;lt;/span&amp;gt;(values[0]);&lt;br /&gt;
     &lt;br /&gt;
      &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;// Sending values to server&amp;lt;/span&amp;gt;&lt;br /&gt;
     xbee.&amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;send&amp;lt;/span&amp;gt;(tx);&lt;br /&gt;
     &lt;br /&gt;
      &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;// After sending a tx request, we expect a status response&amp;lt;/span&amp;gt;&lt;br /&gt;
      &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;// from the server&amp;lt;/span&amp;gt;&lt;br /&gt;
      &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;// Wait up to 5 seconds for the status response&amp;lt;/span&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
     if (xbee.&amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;readPacket&amp;lt;/span&amp;gt;(5000)) {&lt;br /&gt;
        &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;// We got a response!&amp;lt;/span&amp;gt;&lt;br /&gt;
       Serial.&amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;print&amp;lt;/span&amp;gt;(&amp;quot;We got a response\n&amp;quot;);&lt;br /&gt;
       &lt;br /&gt;
        &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;// It should be a znet tx status&amp;lt;/span&amp;gt;&lt;br /&gt;
       if (xbee.&amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;getResponse&amp;lt;/span&amp;gt;().&amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;getApiId&amp;lt;/span&amp;gt;() == TX_STATUS_RESPONSE) {&lt;br /&gt;
         xbee.&amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;getResponse&amp;lt;/span&amp;gt;().&amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;getZBTxStatusResponse&amp;lt;/span&amp;gt;(txStatus);&lt;br /&gt;
         &lt;br /&gt;
          &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;// get the delivery status, the fifth byte&amp;lt;/span&amp;gt;&lt;br /&gt;
         if (txStatus.&amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;getStatus&amp;lt;/span&amp;gt;() == SUCCESS){&lt;br /&gt;
            &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;// Success! Time to celebrate&amp;lt;/span&amp;gt;&lt;br /&gt;
           Serial.&amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;print&amp;lt;/span&amp;gt;(&amp;quot;SUCCESS! Time to celebrate\n&amp;quot;);&lt;br /&gt;
         } else {&lt;br /&gt;
           &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;// The remote XBee did not receive our packet. Is it powered on?&amp;lt;/span&amp;gt;&lt;br /&gt;
          Serial.&amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;print&amp;lt;/span&amp;gt;(&amp;quot;The remote Xbee did not receive our packet\n&amp;quot;);&lt;br /&gt;
         }&lt;br /&gt;
       }&lt;br /&gt;
     } else {&lt;br /&gt;
       &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;// local XBee did not provide a timely TX Status Response -- should not happen&amp;lt;/span&amp;gt;&lt;br /&gt;
      Serial.&amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;print&amp;lt;/span&amp;gt;(&amp;quot;Local Xbee did not provide a timely TX Status Response\n&amp;quot;);&lt;br /&gt;
     }&lt;br /&gt;
     &lt;br /&gt;
   }&lt;br /&gt;
  &lt;br /&gt;
   &amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;delay&amp;lt;/span&amp;gt;(500);&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
Ce code fonctionne de la manière suivante:&lt;br /&gt;
=====Fonction &amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;setup&amp;lt;/span&amp;gt;():=====&lt;br /&gt;
Une fois implémenté sur le Arduino, la fonction setup va faire démarrer le protocole XBee et le protocole Série afin de pouvoir envoyer et recevoir des messages par XBee, et d'imprimer les messages d'erreur sur le port Série s'il y a lieu.&lt;br /&gt;
=====Fonction &amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;loop&amp;lt;/span&amp;gt;():=====&lt;br /&gt;
Cette fonction va réaliser une boucle toutes les 0.5s pour mettre a jour les données des différents capteurs et les envoyer au serveur au travers du protocole XBee. Pour plus de détails voir les commentaires expliquant chaque étape du déroulement de la boucle.&lt;br /&gt;
&lt;br /&gt;
===Le programme LINKER===&lt;br /&gt;
&lt;br /&gt;
Code du programme de liaison&lt;br /&gt;
&lt;br /&gt;
ce programme en java est constitué de 5 classes&lt;br /&gt;
&lt;br /&gt;
====Le Main====&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 public class main {&lt;br /&gt;
 &lt;br /&gt;
 	public static SQLinker linker;&lt;br /&gt;
 	public static Xbee xbee;&lt;br /&gt;
 	&lt;br /&gt;
 	public static void main(String[] args){&lt;br /&gt;
 		String address = new String(&amp;quot;jdbc:mysql://sitedb.polytech-lille.net/cdelberg?&amp;quot;);&lt;br /&gt;
 		String user = new String(&amp;quot;user=cdelberg&amp;amp;password=myLo9ufonese&amp;quot;);&lt;br /&gt;
 		String COM;&lt;br /&gt;
 		&lt;br /&gt;
 &lt;br /&gt;
                 &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;// We ask the user on the Communication Port to connect the XBee&amp;lt;/span&amp;gt;&lt;br /&gt;
 		System.out.println(&amp;quot;Please enter the Communication port of the Xbee&amp;quot;);&lt;br /&gt;
 		Scanner sc = new Scanner(System.in);&lt;br /&gt;
 		COM = sc.next();&lt;br /&gt;
 		System.out.println(&amp;quot;COM port changed to: &amp;quot;+COM);&lt;br /&gt;
 		&lt;br /&gt;
                 &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;//Creation of the Variables that will be used to connect to the Database and the Xbee&amp;lt;/span&amp;gt;&lt;br /&gt;
 		linker = new SQLinker(address, user);&lt;br /&gt;
 		linker.FillArdList();	&lt;br /&gt;
 		xbee = new Xbee(COM);&lt;br /&gt;
 		&lt;br /&gt;
                 &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;//Creating the Updates Threads&amp;lt;/span&amp;gt;&lt;br /&gt;
 		W8Thread thread1 = new W8Thread();&lt;br /&gt;
 		thread1.start();&lt;br /&gt;
 		UpTestThread thread2 = new UpTestThread();&lt;br /&gt;
 		thread2.start();&lt;br /&gt;
 		&lt;br /&gt;
                 &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;//We now allow the user to enter a command&amp;lt;/span&amp;gt;&lt;br /&gt;
 		String command;&lt;br /&gt;
 		System.out.println(&amp;quot;vous pouvez maintenant lancer une commande si vous le souhaitez&amp;quot;);&lt;br /&gt;
 		System.out.println(&amp;quot;tapez help pour plus d'informations&amp;quot;);&lt;br /&gt;
 		boolean exit=false;&lt;br /&gt;
 		&lt;br /&gt;
 		while(exit==false){&lt;br /&gt;
 			command=sc.next();&lt;br /&gt;
 			&lt;br /&gt;
 			if(command.equals(&amp;quot;help&amp;quot;)){&lt;br /&gt;
 				System.out.println(&amp;quot;print =&amp;gt; affiche la liste des arduinos&amp;quot;);&lt;br /&gt;
 				System.out.println(&amp;quot;exit =&amp;gt; ferme le programme&amp;quot;);&lt;br /&gt;
 			}&lt;br /&gt;
 			if(command.equals(&amp;quot;print&amp;quot;)){linker.PrintArdList();}&lt;br /&gt;
 			if(command.equals(&amp;quot;exit&amp;quot;)){exit=true;}&lt;br /&gt;
 		&lt;br /&gt;
 		}&lt;br /&gt;
 		&amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;//if the user ask to stop the program, it will do those final commands&amp;lt;/span&amp;gt;&lt;br /&gt;
 		sc.close();&lt;br /&gt;
 		thread1.stop();&lt;br /&gt;
 		thread2.stop();&lt;br /&gt;
 		xbee.XbeeClosing();	&lt;br /&gt;
 		//System.out.println(&amp;quot;Program finished successfully&amp;quot;);&lt;br /&gt;
 		&lt;br /&gt;
 	}&lt;br /&gt;
 &lt;br /&gt;
 } &lt;br /&gt;
 &lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le main est la racine du programme. Il va créer les ressources nécessaires pour la connexion à la base de donnée et au XBee lui même connecté au PC.&lt;br /&gt;
Il crée ensuite 2 threads, l'un faisant une MAJ des valeurs des Arduinos dans la base de donnée à intervalles réguliers.&lt;br /&gt;
L'autre regarde sur la base de donnée si un utilisateur a fait une demande de MAJ, et ce toute les secondes, puis y répond.&lt;br /&gt;
&lt;br /&gt;
====La classe SQLinker====&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 public class SQLinker {&lt;br /&gt;
  	&lt;br /&gt;
 	Connection connect;&lt;br /&gt;
 	Statement stmt;&lt;br /&gt;
 	PreparedStatement pst;&lt;br /&gt;
 	ResultSet rs;&lt;br /&gt;
 	int[] ArdList = new int[10];&lt;br /&gt;
 	int[][] ArdListMatrix = new int[10][2];&lt;br /&gt;
 	String[] table = {&amp;quot;Battery&amp;quot;, &amp;quot;Light&amp;quot;, &amp;quot;Temperature&amp;quot;, &amp;quot;Updating&amp;quot;};&lt;br /&gt;
 	&amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;//List of variables used to connect to the database and store some informations&amp;lt;/span&amp;gt;&lt;br /&gt;
 	&lt;br /&gt;
 	&amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;//Constructor, create a connection when called&amp;lt;/span&amp;gt;&lt;br /&gt;
 	public SQLinker(String address, String user){&lt;br /&gt;
 		&lt;br /&gt;
 		try{&lt;br /&gt;
 			Class.forName(&amp;quot;com.mysql.jdbc.Driver&amp;quot;).newInstance();&lt;br /&gt;
 		} catch(Exception ex){&lt;br /&gt;
 			System.out.println(&amp;quot;can't register the Driver&amp;quot;);&lt;br /&gt;
 		}&lt;br /&gt;
 		&lt;br /&gt;
 		try{&lt;br /&gt;
 			connect = DriverManager.getConnection(address+user);&lt;br /&gt;
 			stmt = connect.createStatement();&lt;br /&gt;
 		} catch(Exception ex){&lt;br /&gt;
 		    System.out.println(&amp;quot;connection issue&amp;quot;);&lt;br /&gt;
 			System.out.println(&amp;quot;SQLException: &amp;quot; + ex.getMessage());&lt;br /&gt;
 		}&lt;br /&gt;
 		if (connect!= null){&lt;br /&gt;
 			System.out.println(&amp;quot;connected to the database &amp;quot; + address);&lt;br /&gt;
 		}&lt;br /&gt;
 		&lt;br /&gt;
 	}&lt;br /&gt;
 	&amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;//Fill a matrix with the list of Arduinos stored in the database&amp;lt;/span&amp;gt;&lt;br /&gt;
 	public void FillArdList(){&lt;br /&gt;
 		try{&lt;br /&gt;
 			rs = stmt.executeQuery(&amp;quot;SELECT Arduino FROM Arduinos&amp;quot;);&lt;br /&gt;
 			int i=0;&lt;br /&gt;
 			int m,c,d,u;&lt;br /&gt;
 			while(rs.next()){&lt;br /&gt;
 				ArdList[i] = Integer.parseInt(rs.getString(1));&lt;br /&gt;
 				m=ArdList[i]/1000;&lt;br /&gt;
 				c=(ArdList[i]-m*1000)/100;&lt;br /&gt;
 				d=(ArdList[i]-m*1000-c*100)/10;&lt;br /&gt;
 				u=(ArdList[i]-m*1000-c*100-d*10);&lt;br /&gt;
 				ArdListMatrix[i][0]=(m*10+c);&lt;br /&gt;
 				ArdListMatrix[i][1]=(d*10+u);				&lt;br /&gt;
 				i++;&lt;br /&gt;
 			}&lt;br /&gt;
 			ArdList[i]=-1;&lt;br /&gt;
 		} catch (SQLException e){&lt;br /&gt;
 			System.out.println(&amp;quot;SQLException: &amp;quot; + e.getMessage());&lt;br /&gt;
 		    System.out.println(&amp;quot;SQLState: &amp;quot; + e.getSQLState());&lt;br /&gt;
 		    System.out.println(&amp;quot;VendorError: &amp;quot; + e.getErrorCode());&lt;br /&gt;
 		} &lt;br /&gt;
 	}&lt;br /&gt;
 	&lt;br /&gt;
 	&amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;//print the list of arduinos stored in the program&amp;lt;/span&amp;gt;&lt;br /&gt;
 	public void PrintArdList(){&lt;br /&gt;
 		int i=0;&lt;br /&gt;
 		while(ArdList[i]!=-1){&lt;br /&gt;
 			i++;&lt;br /&gt;
 			System.out.println(&amp;quot;Code Arduino n°&amp;quot;+i+&amp;quot;: &amp;quot;+ArdList[i]);&lt;br /&gt;
 &lt;br /&gt;
 		}&lt;br /&gt;
 	}&lt;br /&gt;
 	&lt;br /&gt;
 	&amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;//Print the values of a specific arduino&amp;lt;/span&amp;gt;&lt;br /&gt;
 	public void PrintArdValues(int ard){&lt;br /&gt;
 		for(int i=0; i&amp;lt;=2;i++){&lt;br /&gt;
 			&lt;br /&gt;
 			try {&lt;br /&gt;
 				rs = stmt.executeQuery(&amp;quot;SELECT &amp;quot; +table[i]+&amp;quot; FROM Arduinos WHERE Arduino =&amp;quot;+ard);&lt;br /&gt;
 			} catch (SQLException e) {&lt;br /&gt;
 				e.printStackTrace();&lt;br /&gt;
 			}&lt;br /&gt;
 			try {&lt;br /&gt;
 				while(rs.next()){&lt;br /&gt;
 					System.out.println(table[i] +&amp;quot;=&amp;quot; + rs.getString(1));&lt;br /&gt;
 				}&lt;br /&gt;
 			} catch (SQLException e) {&lt;br /&gt;
 				e.printStackTrace();&lt;br /&gt;
 			}&lt;br /&gt;
 &lt;br /&gt;
 		}&lt;br /&gt;
 	}&lt;br /&gt;
 &lt;br /&gt;
 	&amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;//print the values of every arduino stored in the program&amp;lt;/span&amp;gt;&lt;br /&gt;
 	public void PrintAllArdValues(){&lt;br /&gt;
 		int i=0;&lt;br /&gt;
 		while(ArdList[i]!=-1){&lt;br /&gt;
 			this.PrintArdValues(i);&lt;br /&gt;
 		}&lt;br /&gt;
 	}&lt;br /&gt;
 	&lt;br /&gt;
 	&amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;//set the values obtained from an arduino to the database&amp;lt;/span&amp;gt;&lt;br /&gt;
 	public void SetArdValues(int Ard, int[] values){&lt;br /&gt;
 		int i=0;&lt;br /&gt;
 		while(values[i]!=-1){&lt;br /&gt;
 			&lt;br /&gt;
 			try {&lt;br /&gt;
 				pst = connect.prepareStatement(&amp;quot;UPDATE Arduinos SET &amp;quot;+table[values[i]]+&amp;quot; = &amp;quot;+values[i+1] +&amp;quot;  WHERE Arduino =&amp;quot;+Ard);&lt;br /&gt;
 				pst.executeUpdate();&lt;br /&gt;
 			} catch (SQLException e){&lt;br /&gt;
 				e.printStackTrace();&lt;br /&gt;
 			}&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 			i+=2;&lt;br /&gt;
 		}&lt;br /&gt;
 	}&lt;br /&gt;
 &lt;br /&gt;
 	&amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;//verify if an update as been demanded by a user on the website&amp;lt;/span&amp;gt;&lt;br /&gt;
 	public int CheckUpdate(){&lt;br /&gt;
 		int i=0;&lt;br /&gt;
 		int ret=0;&lt;br /&gt;
 		while(ArdList[i]!=-1 &amp;amp;&amp;amp; ret!=1){&lt;br /&gt;
 			try {&lt;br /&gt;
 				rs = stmt.executeQuery(&amp;quot;SELECT Updating FROM Arduinos WHERE Arduino =&amp;quot;+ArdList[i]);&lt;br /&gt;
 				while(rs.next()){&lt;br /&gt;
 					ret = Integer.parseInt(rs.getString(1));&lt;br /&gt;
 				}&lt;br /&gt;
 			} catch (SQLException e) {&lt;br /&gt;
 				e.printStackTrace();&lt;br /&gt;
 			}&lt;br /&gt;
 			i++;&lt;br /&gt;
 		}&lt;br /&gt;
 		return ret; &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;//return 1 if update demanded&amp;lt;/span&amp;gt;&lt;br /&gt;
 		&lt;br /&gt;
 	}&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
Cette classe regroupe toutes les fonctions permettant de se connecter à une base de donnée et d'en traiter les données.&lt;br /&gt;
&lt;br /&gt;
=== Liste du matériel à acheter ===&lt;/div&gt;</summary>
		<author><name>Cdelberg</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=Objets_communiquants_et_gestion_de_l%27%C3%A9nergie&amp;diff=4168</id>
		<title>Objets communiquants et gestion de l'énergie</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=Objets_communiquants_et_gestion_de_l%27%C3%A9nergie&amp;diff=4168"/>
				<updated>2013-02-22T15:35:23Z</updated>
		
		<summary type="html">&lt;p&gt;Cdelberg : /* Le code du Arduino */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Présentation du projet ==&lt;br /&gt;
&lt;br /&gt;
=== Planning prévisionnel provisoire (jusqu'à la pré-soutenance)===&lt;br /&gt;
&lt;br /&gt;
Ce planning pourrait être amené à être modifié.&lt;br /&gt;
&lt;br /&gt;
'''''I) Etat de l'art''''' ( ~2-3 semaines)&lt;br /&gt;
&lt;br /&gt;
-Energy harvesting (Calvin)&lt;br /&gt;
&lt;br /&gt;
-Batteries (Justin)&lt;br /&gt;
&lt;br /&gt;
'''''II) Mesure de puissance des différents appareil Arduino''''' ( ~2 semaines)&lt;br /&gt;
&lt;br /&gt;
'''''III) Confronter théorie/réalité''''' ( ~1 semaine)&lt;br /&gt;
-estimer consommation de puissance&lt;br /&gt;
&lt;br /&gt;
-vérifier en pratique&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Amené à être ajouté:'''&lt;br /&gt;
&lt;br /&gt;
Mesure du Arduino de sa propre consommation.&lt;br /&gt;
&lt;br /&gt;
Mesure de la consommation du code (?)&lt;br /&gt;
&lt;br /&gt;
Applications:&lt;br /&gt;
&lt;br /&gt;
-Envoi des valeurs de l'Arduino au serveur.&lt;br /&gt;
&lt;br /&gt;
-Interface web pour interagir avec l'objet.&lt;br /&gt;
&lt;br /&gt;
== Etat de l'art ==&lt;br /&gt;
&lt;br /&gt;
=== Energy Harvesting ===&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
* Mosquino:&lt;br /&gt;
&lt;br /&gt;
''Mosquino'' est un matériel compatible avec le développement logiciel et dérivé de ''Arduino'', il permet de récupérer de l'énergie des sources ambiantes (chaleur, luminosité, vibrations)&lt;br /&gt;
Il n'est destiné qu'aux faibles consommations électriques et n'est encore qu'en phase de développement, il n'a pas encore été véritablement testé. &amp;lt;br/&amp;gt;&lt;br /&gt;
http://tim.cexx.org/?page_id=760&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
* Breakout board BOB-o&amp;lt;sub&amp;gt;994&amp;lt;/sub&amp;gt;6 :&lt;br /&gt;
&lt;br /&gt;
Cette carte utilise le collecteur d'énergie piezoelectrique LTC&amp;lt;sub&amp;gt;35&amp;lt;/sub&amp;gt;88 de Linear Technologies et permet non seulement de récupérer l'énergie piezoélectrique mais aussi l'énergie solaire. Initialement prévu pour fonctionner à faible voltage, la capacité de sortie peut-être dimensionnée pour recevoir une salve de courant de sortie plus élevée. &amp;lt;br/&amp;gt;&lt;br /&gt;
https://www.sparkfun.com/products/9946&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
=== Batteries ===&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
* nouvelles technologies: &lt;br /&gt;
&lt;br /&gt;
ces dernières années, de nouvelles technologies sont apparues, sans être encore réellement utilisées. je pense notamment aux batteries contenues dans des câbles: &lt;br /&gt;
http://phys.org/news/2012-09-lg-chem-cable-batteries-reshape.html&lt;br /&gt;
&lt;br /&gt;
ainsi qu'aux batteries ultra fines dévellopées par thinergy: &lt;br /&gt;
http://www.infinitepowersolutions.com/products.html&lt;br /&gt;
&lt;br /&gt;
Néanmoins, les tensions pouvant etre délivrées par ces technologies naissantes sont loin de pouvoir alimenter le materiel qui nous interresse, à savoir des Arduino (necessitant une alimentation comprise entre 7V-12V)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
D'autres techno sont encore en phase de développement, comme les batteries lithium-Air d'IBM, les piles au graphène utilisant la chaleur pour produire de l’énergie (plutôt de l'energy harvesting pour le coup). Comme ces technologies sont encore en phase de développement, elles n’apparaîtrons pas sur le marché avant au moins 10 ans.&lt;br /&gt;
&lt;br /&gt;
http://www.metro.co.uk/tech/news/897731-technology-companies-charge-towards-next-generation-battery-future&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* technologies adaptée à notre usage:&lt;br /&gt;
&lt;br /&gt;
comme je l'ai rappelé plus haut, ce PFE tourne principalement autour d'Arduino. ces plates-formes nécessitant une tension d'alimentation supérieure à 7V, le choix le plus intéressant reste les piles rechargeable.&lt;br /&gt;
&lt;br /&gt;
Seulement, il existe plusieurs types de piles rechargeables. dans l'usage qu'il en sera fait, et si ces batteries sont couplées à des technologies de récupération d'énergie, il est important de choisir des piles Lithium-Ion.&lt;br /&gt;
&lt;br /&gt;
En effet, ces piles sont les plus intéressantes pour plusieurs raisons:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
tout d'abord, elles sont insensibles à l'effet mémoire. du coup elles ne perdent pas de leur capacité de stockage d’énergie au cours du temps.&lt;br /&gt;
&lt;br /&gt;
le circuit intégré à ces piles empêche toute surtension lors de la charge.&lt;br /&gt;
&lt;br /&gt;
elles peuvent être rechargée en même temps qu'elles sont utilisées.&lt;br /&gt;
&lt;br /&gt;
dans une époque ou la pollution est un sujet préoccupation, ces piles sont moins dangereuse pour l’environnement que leurs homologues au nickel-Cadmium&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
le seul problème pourrais venir du fait qu'elles ne supporte pas bien la chaleur, mais à moins de les coller à un radiateur, il ne devrais pas y avoir de soucis.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Mesure de la consommation énergétique ===&lt;br /&gt;
&lt;br /&gt;
WSIM permet la simulation de capteurs sans fil. Il permet notamment d'estimer la consommation électrique http://wsim.gforge.inria.fr/index.html&lt;br /&gt;
Pour l'instant il ne fonctionne qu'avec des microcontrolleurs TI. Le support des AVR est en cours.&lt;br /&gt;
L'estimation de la consommation énergétique utilise esimu http://esimu.gforge.inria.fr/index.html&lt;br /&gt;
&lt;br /&gt;
== Réalisation ==&lt;br /&gt;
===Le Arduino===&lt;br /&gt;
====Architecture de l'objet communiquant====&lt;br /&gt;
&lt;br /&gt;
*Un Arduino Mega 2560&lt;br /&gt;
*Un XBee&lt;br /&gt;
*Un capteur de température&lt;br /&gt;
*Un capteur de luminosité&lt;br /&gt;
*Un accéléromètre (dont les valeurs ne seront pas utilisées mais qui devait servir d'appareil supplémentaire pour la problématique de consommation)&lt;br /&gt;
&lt;br /&gt;
====Le code du Arduino====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 &amp;lt;span style=&amp;quot;color: blue;&amp;quot;&amp;gt;#include&amp;lt;/span&amp;gt; &amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;XBee.h&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;// Define variables, pins..&amp;lt;/span&amp;gt;&lt;br /&gt;
 int sensorTempPin = 0;&lt;br /&gt;
 int Temp;&lt;br /&gt;
 int sensorLightPin = 1;&lt;br /&gt;
 int Light;&lt;br /&gt;
 int XPin = 2;&lt;br /&gt;
 int YPin = 3;&lt;br /&gt;
 int ZPin = 4;&lt;br /&gt;
 int XValue;&lt;br /&gt;
 int YValue;&lt;br /&gt;
 int ZValue;&lt;br /&gt;
 &lt;br /&gt;
 uint8_t values[] = { 0, 0, 0, 0 };&lt;br /&gt;
 XBee xbee =  &amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;XBee&amp;lt;/span&amp;gt;();&lt;br /&gt;
 XBeeResponse response = &amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;XBeeResponse&amp;lt;/span&amp;gt;();&lt;br /&gt;
 Rx16Response rx = &amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;Rx16Response&amp;lt;/span&amp;gt;();&lt;br /&gt;
 Tx16Request tx = &amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;Tx16Request&amp;lt;/span&amp;gt;(0x1111, values, &amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;sizeof&amp;lt;/span&amp;gt;(values));&lt;br /&gt;
 TxStatusResponse txStatus = &amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;TxStatusResponse&amp;lt;/span&amp;gt;();&lt;br /&gt;
 &lt;br /&gt;
  &amp;lt;span style=&amp;quot;color: blue;&amp;quot;&amp;gt;void&amp;lt;/span&amp;gt; &amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;setup&amp;lt;/span&amp;gt;()&lt;br /&gt;
 {&lt;br /&gt;
    &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;// Initialise xbee / serial&amp;lt;/span&amp;gt;&lt;br /&gt;
   xbee.&amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;begin&amp;lt;/span&amp;gt;(9600);&lt;br /&gt;
   Serial.&amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;begin&amp;lt;/span&amp;gt;(9600);&lt;br /&gt;
 } &lt;br /&gt;
 &lt;br /&gt;
  &amp;lt;span style=&amp;quot;color: blue;&amp;quot;&amp;gt;void&amp;lt;/span&amp;gt; &amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;loop&amp;lt;/span&amp;gt;()&lt;br /&gt;
 {&lt;br /&gt;
    &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;// Read the values on analog pins&amp;lt;/span&amp;gt;&lt;br /&gt;
   Light = &amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;analogRead&amp;lt;/span&amp;gt;(sensorLightPin);&lt;br /&gt;
   Temp = &amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;analogRead&amp;lt;/span&amp;gt;(sensorTempPin);&lt;br /&gt;
   //XValue = &amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;analogRead&amp;lt;/span&amp;gt;(XPin);//&lt;br /&gt;
   //YValue = &amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;analogRead&amp;lt;/span&amp;gt;(YPin);&amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;//Not used&amp;lt;/span&amp;gt;&lt;br /&gt;
   //ZValue = &amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;analogRead&amp;lt;/span&amp;gt;(ZPin);//&lt;br /&gt;
 &lt;br /&gt;
   &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;// Listens on the Xbee protocol for any packet incoming.&amp;lt;/span&amp;gt;&lt;br /&gt;
   xbee.&amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;readPacket&amp;lt;/span&amp;gt;();&lt;br /&gt;
 &lt;br /&gt;
   if(xbee.&amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;getResponse&amp;lt;/span&amp;gt;().&amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;isAvailable&amp;lt;/span&amp;gt;()){&lt;br /&gt;
      &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;// Got something&amp;lt;/span&amp;gt;&lt;br /&gt;
     Serial.&amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;print&amp;lt;/span&amp;gt;(&amp;quot;Got something\n&amp;quot;);&lt;br /&gt;
      &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;// Break the 10-bits of information retrieved from light&amp;lt;/span&amp;gt;&lt;br /&gt;
      &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;// and temperature into 2 bytes for each.&amp;lt;/span&amp;gt;&lt;br /&gt;
     values[0] = Temp &amp;gt;&amp;gt; 8 &amp;amp; 0xff;&lt;br /&gt;
     values[1] = Temp &amp;amp; 0xff;&lt;br /&gt;
     values[2] = Light &amp;gt;&amp;gt; 8 &amp;amp; 0xff;&lt;br /&gt;
     values[3] = Light &amp;amp; 0xff;&lt;br /&gt;
     Serial.&amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;print&amp;lt;/span&amp;gt;(values[0]);&lt;br /&gt;
     &lt;br /&gt;
      &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;// Sending values to server&amp;lt;/span&amp;gt;&lt;br /&gt;
     xbee.&amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;send&amp;lt;/span&amp;gt;(tx);&lt;br /&gt;
     &lt;br /&gt;
      &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;// After sending a tx request, we expect a status response&amp;lt;/span&amp;gt;&lt;br /&gt;
      &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;// from the server&amp;lt;/span&amp;gt;&lt;br /&gt;
      &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;// Wait up to 5 seconds for the status response&amp;lt;/span&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
     if (xbee.&amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;readPacket&amp;lt;/span&amp;gt;(5000)) {&lt;br /&gt;
        &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;// We got a response!&amp;lt;/span&amp;gt;&lt;br /&gt;
       Serial.&amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;print&amp;lt;/span&amp;gt;(&amp;quot;We got a response\n&amp;quot;);&lt;br /&gt;
       &lt;br /&gt;
        &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;// It should be a znet tx status&amp;lt;/span&amp;gt;&lt;br /&gt;
       if (xbee.&amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;getResponse&amp;lt;/span&amp;gt;().&amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;getApiId&amp;lt;/span&amp;gt;() == TX_STATUS_RESPONSE) {&lt;br /&gt;
         xbee.&amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;getResponse&amp;lt;/span&amp;gt;().&amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;getZBTxStatusResponse&amp;lt;/span&amp;gt;(txStatus);&lt;br /&gt;
         &lt;br /&gt;
          &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;// get the delivery status, the fifth byte&amp;lt;/span&amp;gt;&lt;br /&gt;
         if (txStatus.&amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;getStatus&amp;lt;/span&amp;gt;() == SUCCESS){&lt;br /&gt;
            &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;// Success! Time to celebrate&amp;lt;/span&amp;gt;&lt;br /&gt;
           Serial.&amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;print&amp;lt;/span&amp;gt;(&amp;quot;SUCCESS! Time to celebrate\n&amp;quot;);&lt;br /&gt;
         } else {&lt;br /&gt;
           &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;// The remote XBee did not receive our packet. Is it powered on?&amp;lt;/span&amp;gt;&lt;br /&gt;
          Serial.&amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;print&amp;lt;/span&amp;gt;(&amp;quot;The remote Xbee did not receive our packet\n&amp;quot;);&lt;br /&gt;
         }&lt;br /&gt;
       }&lt;br /&gt;
     } else {&lt;br /&gt;
       &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;// local XBee did not provide a timely TX Status Response -- should not happen&amp;lt;/span&amp;gt;&lt;br /&gt;
      Serial.&amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;print&amp;lt;/span&amp;gt;(&amp;quot;Local Xbee did not provide a timely TX Status Response\n&amp;quot;);&lt;br /&gt;
     }&lt;br /&gt;
     &lt;br /&gt;
   }&lt;br /&gt;
  &lt;br /&gt;
   &amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;delay&amp;lt;/span&amp;gt;(500);&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
Ce code fonctionne de la manière suivante:&lt;br /&gt;
=====Fonction &amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;setup&amp;lt;/span&amp;gt;():=====&lt;br /&gt;
Une fois implémenté sur le Arduino, la fonction setup va faire démarrer le protocole XBee et le protocole Série afin de pouvoir envoyer et recevoir des messages par XBee, et d'imprimer les messages d'erreur sur le port Série s'il y a lieu.&lt;br /&gt;
=====Fonction &amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;loop&amp;lt;/span&amp;gt;():=====&lt;br /&gt;
Cette fonction va réaliser une boucle toutes les 0.5s pour mettre a jour les données des différents capteurs et les envoyer au serveur au travers du protocole XBee. Pour plus de détails voir les commentaires expliquant chaque étape du déroulement de la boucle.&lt;br /&gt;
&lt;br /&gt;
===le programme LINKER===&lt;br /&gt;
&lt;br /&gt;
Code du programme de liaison&lt;br /&gt;
&lt;br /&gt;
ce programme en java est constitué de 5 classes&lt;br /&gt;
&lt;br /&gt;
====Le Main====&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 public class main {&lt;br /&gt;
 &lt;br /&gt;
 	public static SQLinker linker;&lt;br /&gt;
 	public static Xbee xbee;&lt;br /&gt;
 	&lt;br /&gt;
 	public static void main(String[] args){&lt;br /&gt;
 		String address = new String(&amp;quot;jdbc:mysql://sitedb.polytech-lille.net/cdelberg?&amp;quot;);&lt;br /&gt;
 		String user = new String(&amp;quot;user=cdelberg&amp;amp;password=myLo9ufonese&amp;quot;);&lt;br /&gt;
 		String COM;&lt;br /&gt;
 		&lt;br /&gt;
 &lt;br /&gt;
                 &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;// We ask the user on the Communication Port to connect the XBee&amp;lt;/span&amp;gt;&lt;br /&gt;
 		System.out.println(&amp;quot;Please enter the Communication port of the Xbee&amp;quot;);&lt;br /&gt;
 		Scanner sc = new Scanner(System.in);&lt;br /&gt;
 		COM = sc.next();&lt;br /&gt;
 		System.out.println(&amp;quot;COM port changed to: &amp;quot;+COM);&lt;br /&gt;
 		&lt;br /&gt;
                 &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;//Creation of the Variables that will be used to connect to the Database and the Xbee&amp;lt;/span&amp;gt;&lt;br /&gt;
 		linker = new SQLinker(address, user);&lt;br /&gt;
 		linker.FillArdList();	&lt;br /&gt;
 		xbee = new Xbee(COM);&lt;br /&gt;
 		&lt;br /&gt;
                 &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;//Creating the Updates Threads&amp;lt;/span&amp;gt;&lt;br /&gt;
 		W8Thread thread1 = new W8Thread();&lt;br /&gt;
 		thread1.start();&lt;br /&gt;
 		UpTestThread thread2 = new UpTestThread();&lt;br /&gt;
 		thread2.start();&lt;br /&gt;
 		&lt;br /&gt;
                 &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;//We now allow the user to enter a command&amp;lt;/span&amp;gt;&lt;br /&gt;
 		String command;&lt;br /&gt;
 		System.out.println(&amp;quot;vous pouvez maintenant lancer une commande si vous le souhaitez&amp;quot;);&lt;br /&gt;
 		System.out.println(&amp;quot;tapez help pour plus d'informations&amp;quot;);&lt;br /&gt;
 		boolean exit=false;&lt;br /&gt;
 		&lt;br /&gt;
 		while(exit==false){&lt;br /&gt;
 			command=sc.next();&lt;br /&gt;
 			&lt;br /&gt;
 			if(command.equals(&amp;quot;help&amp;quot;)){&lt;br /&gt;
 				System.out.println(&amp;quot;print =&amp;gt; affiche la liste des arduinos&amp;quot;);&lt;br /&gt;
 				System.out.println(&amp;quot;exit =&amp;gt; ferme le programme&amp;quot;);&lt;br /&gt;
 			}&lt;br /&gt;
 			if(command.equals(&amp;quot;print&amp;quot;)){linker.PrintArdList();}&lt;br /&gt;
 			if(command.equals(&amp;quot;exit&amp;quot;)){exit=true;}&lt;br /&gt;
 		&lt;br /&gt;
 		}&lt;br /&gt;
 		&amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;//if the user ask to stop the program, it will do those final commands&amp;lt;/span&amp;gt;&lt;br /&gt;
 		sc.close();&lt;br /&gt;
 		thread1.stop();&lt;br /&gt;
 		thread2.stop();&lt;br /&gt;
 		xbee.XbeeClosing();	&lt;br /&gt;
 		//System.out.println(&amp;quot;Program finished successfully&amp;quot;);&lt;br /&gt;
 		&lt;br /&gt;
 	}&lt;br /&gt;
 &lt;br /&gt;
 } &lt;br /&gt;
 &lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Liste du matériel à acheter ===&lt;/div&gt;</summary>
		<author><name>Cdelberg</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=Objets_communiquants_et_gestion_de_l%27%C3%A9nergie&amp;diff=4166</id>
		<title>Objets communiquants et gestion de l'énergie</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=Objets_communiquants_et_gestion_de_l%27%C3%A9nergie&amp;diff=4166"/>
				<updated>2013-02-22T15:33:47Z</updated>
		
		<summary type="html">&lt;p&gt;Cdelberg : /* Fonction loop(): */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Présentation du projet ==&lt;br /&gt;
&lt;br /&gt;
=== Planning prévisionnel provisoire (jusqu'à la pré-soutenance)===&lt;br /&gt;
&lt;br /&gt;
Ce planning pourrait être amené à être modifié.&lt;br /&gt;
&lt;br /&gt;
'''''I) Etat de l'art''''' ( ~2-3 semaines)&lt;br /&gt;
&lt;br /&gt;
-Energy harvesting (Calvin)&lt;br /&gt;
&lt;br /&gt;
-Batteries (Justin)&lt;br /&gt;
&lt;br /&gt;
'''''II) Mesure de puissance des différents appareil Arduino''''' ( ~2 semaines)&lt;br /&gt;
&lt;br /&gt;
'''''III) Confronter théorie/réalité''''' ( ~1 semaine)&lt;br /&gt;
-estimer consommation de puissance&lt;br /&gt;
&lt;br /&gt;
-vérifier en pratique&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Amené à être ajouté:'''&lt;br /&gt;
&lt;br /&gt;
Mesure du Arduino de sa propre consommation.&lt;br /&gt;
&lt;br /&gt;
Mesure de la consommation du code (?)&lt;br /&gt;
&lt;br /&gt;
Applications:&lt;br /&gt;
&lt;br /&gt;
-Envoi des valeurs de l'Arduino au serveur.&lt;br /&gt;
&lt;br /&gt;
-Interface web pour interagir avec l'objet.&lt;br /&gt;
&lt;br /&gt;
== Etat de l'art ==&lt;br /&gt;
&lt;br /&gt;
=== Energy Harvesting ===&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
* Mosquino:&lt;br /&gt;
&lt;br /&gt;
''Mosquino'' est un matériel compatible avec le développement logiciel et dérivé de ''Arduino'', il permet de récupérer de l'énergie des sources ambiantes (chaleur, luminosité, vibrations)&lt;br /&gt;
Il n'est destiné qu'aux faibles consommations électriques et n'est encore qu'en phase de développement, il n'a pas encore été véritablement testé. &amp;lt;br/&amp;gt;&lt;br /&gt;
http://tim.cexx.org/?page_id=760&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
* Breakout board BOB-o&amp;lt;sub&amp;gt;994&amp;lt;/sub&amp;gt;6 :&lt;br /&gt;
&lt;br /&gt;
Cette carte utilise le collecteur d'énergie piezoelectrique LTC&amp;lt;sub&amp;gt;35&amp;lt;/sub&amp;gt;88 de Linear Technologies et permet non seulement de récupérer l'énergie piezoélectrique mais aussi l'énergie solaire. Initialement prévu pour fonctionner à faible voltage, la capacité de sortie peut-être dimensionnée pour recevoir une salve de courant de sortie plus élevée. &amp;lt;br/&amp;gt;&lt;br /&gt;
https://www.sparkfun.com/products/9946&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
=== Batteries ===&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
* nouvelles technologies: &lt;br /&gt;
&lt;br /&gt;
ces dernières années, de nouvelles technologies sont apparues, sans être encore réellement utilisées. je pense notamment aux batteries contenues dans des câbles: &lt;br /&gt;
http://phys.org/news/2012-09-lg-chem-cable-batteries-reshape.html&lt;br /&gt;
&lt;br /&gt;
ainsi qu'aux batteries ultra fines dévellopées par thinergy: &lt;br /&gt;
http://www.infinitepowersolutions.com/products.html&lt;br /&gt;
&lt;br /&gt;
Néanmoins, les tensions pouvant etre délivrées par ces technologies naissantes sont loin de pouvoir alimenter le materiel qui nous interresse, à savoir des Arduino (necessitant une alimentation comprise entre 7V-12V)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
D'autres techno sont encore en phase de développement, comme les batteries lithium-Air d'IBM, les piles au graphène utilisant la chaleur pour produire de l’énergie (plutôt de l'energy harvesting pour le coup). Comme ces technologies sont encore en phase de développement, elles n’apparaîtrons pas sur le marché avant au moins 10 ans.&lt;br /&gt;
&lt;br /&gt;
http://www.metro.co.uk/tech/news/897731-technology-companies-charge-towards-next-generation-battery-future&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* technologies adaptée à notre usage:&lt;br /&gt;
&lt;br /&gt;
comme je l'ai rappelé plus haut, ce PFE tourne principalement autour d'Arduino. ces plates-formes nécessitant une tension d'alimentation supérieure à 7V, le choix le plus intéressant reste les piles rechargeable.&lt;br /&gt;
&lt;br /&gt;
Seulement, il existe plusieurs types de piles rechargeables. dans l'usage qu'il en sera fait, et si ces batteries sont couplées à des technologies de récupération d'énergie, il est important de choisir des piles Lithium-Ion.&lt;br /&gt;
&lt;br /&gt;
En effet, ces piles sont les plus intéressantes pour plusieurs raisons:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
tout d'abord, elles sont insensibles à l'effet mémoire. du coup elles ne perdent pas de leur capacité de stockage d’énergie au cours du temps.&lt;br /&gt;
&lt;br /&gt;
le circuit intégré à ces piles empêche toute surtension lors de la charge.&lt;br /&gt;
&lt;br /&gt;
elles peuvent être rechargée en même temps qu'elles sont utilisées.&lt;br /&gt;
&lt;br /&gt;
dans une époque ou la pollution est un sujet préoccupation, ces piles sont moins dangereuse pour l’environnement que leurs homologues au nickel-Cadmium&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
le seul problème pourrais venir du fait qu'elles ne supporte pas bien la chaleur, mais à moins de les coller à un radiateur, il ne devrais pas y avoir de soucis.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Mesure de la consommation énergétique ===&lt;br /&gt;
&lt;br /&gt;
WSIM permet la simulation de capteurs sans fil. Il permet notamment d'estimer la consommation électrique http://wsim.gforge.inria.fr/index.html&lt;br /&gt;
Pour l'instant il ne fonctionne qu'avec des microcontrolleurs TI. Le support des AVR est en cours.&lt;br /&gt;
L'estimation de la consommation énergétique utilise esimu http://esimu.gforge.inria.fr/index.html&lt;br /&gt;
&lt;br /&gt;
== Réalisation ==&lt;br /&gt;
===Le Arduino===&lt;br /&gt;
====Architecture de l'objet communiquant====&lt;br /&gt;
&lt;br /&gt;
*Un Arduino Mega 2560&lt;br /&gt;
*Un XBee&lt;br /&gt;
*Un capteur de température&lt;br /&gt;
*Un capteur de luminosité&lt;br /&gt;
*Un accéléromètre (dont les valeurs ne seront pas utilisées mais qui devait servir d'appareil supplémentaire pour la problématique de consommation)&lt;br /&gt;
&lt;br /&gt;
====Le code du Arduino====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 &amp;lt;span style=&amp;quot;color: blue;&amp;quot;&amp;gt;#include&amp;lt;/span&amp;gt; &amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;XBee.h&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;// Define variables, pins..&amp;lt;/span&amp;gt;&lt;br /&gt;
 int sensorTempPin = 0;&lt;br /&gt;
 int Temp;&lt;br /&gt;
 int sensorLightPin = 1;&lt;br /&gt;
 int Light;&lt;br /&gt;
 int XPin = 2;&lt;br /&gt;
 int YPin = 3;&lt;br /&gt;
 int ZPin = 4;&lt;br /&gt;
 int XValue;&lt;br /&gt;
 int YValue;&lt;br /&gt;
 int ZValue;&lt;br /&gt;
 &lt;br /&gt;
 uint8_t values[] = { 0, 0, 0, 0 };&lt;br /&gt;
 XBee xbee =  &amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;XBee&amp;lt;/span&amp;gt;();&lt;br /&gt;
 XBeeResponse response = &amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;XBeeResponse&amp;lt;/span&amp;gt;();&lt;br /&gt;
 Rx16Response rx = &amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;Rx16Response&amp;lt;/span&amp;gt;();&lt;br /&gt;
 Tx16Request tx = &amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;Tx16Request&amp;lt;/span&amp;gt;(0x1111, values, &amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;sizeof&amp;lt;/span&amp;gt;(values));&lt;br /&gt;
 TxStatusResponse txStatus = &amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;TxStatusResponse&amp;lt;/span&amp;gt;();&lt;br /&gt;
 &lt;br /&gt;
  &amp;lt;span style=&amp;quot;color: blue;&amp;quot;&amp;gt;void&amp;lt;/span&amp;gt; &amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;setup&amp;lt;/span&amp;gt;()&lt;br /&gt;
 {&lt;br /&gt;
    &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;// Initialise xbee / serial&amp;lt;/span&amp;gt;&lt;br /&gt;
   xbee.&amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;begin&amp;lt;/span&amp;gt;(9600);&lt;br /&gt;
   Serial.&amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;begin&amp;lt;/span&amp;gt;(9600);&lt;br /&gt;
 } &lt;br /&gt;
 &lt;br /&gt;
  &amp;lt;span style=&amp;quot;color: blue;&amp;quot;&amp;gt;void&amp;lt;/span&amp;gt; &amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;loop&amp;lt;/span&amp;gt;()&lt;br /&gt;
 {&lt;br /&gt;
    &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;// Read the values on analog pins&amp;lt;/span&amp;gt;&lt;br /&gt;
   Light = &amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;analogRead&amp;lt;/span&amp;gt;(sensorLightPin);&lt;br /&gt;
   Temp = &amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;analogRead&amp;lt;/span&amp;gt;(sensorTempPin);&lt;br /&gt;
   XValue = &amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;analogRead&amp;lt;/span&amp;gt;(XPin);&lt;br /&gt;
   YValue = &amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;analogRead&amp;lt;/span&amp;gt;(YPin);&lt;br /&gt;
   ZValue = &amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;analogRead&amp;lt;/span&amp;gt;(ZPin);&lt;br /&gt;
 &lt;br /&gt;
   &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;// Listens on the Xbee protocol for any packet incoming.&amp;lt;/span&amp;gt;&lt;br /&gt;
   xbee.&amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;readPacket&amp;lt;/span&amp;gt;();&lt;br /&gt;
 &lt;br /&gt;
   if(xbee.&amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;getResponse&amp;lt;/span&amp;gt;().&amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;isAvailable&amp;lt;/span&amp;gt;()){&lt;br /&gt;
      &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;// Got something&amp;lt;/span&amp;gt;&lt;br /&gt;
     Serial.&amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;print&amp;lt;/span&amp;gt;(&amp;quot;Got something\n&amp;quot;);&lt;br /&gt;
      &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;// Break the 10-bits of information retrieved from light&amp;lt;/span&amp;gt;&lt;br /&gt;
      &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;// and temperature into 2 bytes for each.&amp;lt;/span&amp;gt;&lt;br /&gt;
     values[0] = Temp &amp;gt;&amp;gt; 8 &amp;amp; 0xff;&lt;br /&gt;
     values[1] = Temp &amp;amp; 0xff;&lt;br /&gt;
     values[2] = Light &amp;gt;&amp;gt; 8 &amp;amp; 0xff;&lt;br /&gt;
     values[3] = Light &amp;amp; 0xff;&lt;br /&gt;
     Serial.&amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;print&amp;lt;/span&amp;gt;(values[0]);&lt;br /&gt;
     &lt;br /&gt;
      &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;// Sending values to server&amp;lt;/span&amp;gt;&lt;br /&gt;
     xbee.&amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;send&amp;lt;/span&amp;gt;(tx);&lt;br /&gt;
     &lt;br /&gt;
      &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;// After sending a tx request, we expect a status response&amp;lt;/span&amp;gt;&lt;br /&gt;
      &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;// from the server&amp;lt;/span&amp;gt;&lt;br /&gt;
      &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;// Wait up to 5 seconds for the status response&amp;lt;/span&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
     if (xbee.&amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;readPacket&amp;lt;/span&amp;gt;(5000)) {&lt;br /&gt;
        &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;// We got a response!&amp;lt;/span&amp;gt;&lt;br /&gt;
       Serial.&amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;print&amp;lt;/span&amp;gt;(&amp;quot;We got a response\n&amp;quot;);&lt;br /&gt;
       &lt;br /&gt;
        &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;// It should be a znet tx status&amp;lt;/span&amp;gt;&lt;br /&gt;
       if (xbee.&amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;getResponse&amp;lt;/span&amp;gt;().&amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;getApiId&amp;lt;/span&amp;gt;() == TX_STATUS_RESPONSE) {&lt;br /&gt;
         xbee.&amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;getResponse&amp;lt;/span&amp;gt;().&amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;getZBTxStatusResponse&amp;lt;/span&amp;gt;(txStatus);&lt;br /&gt;
         &lt;br /&gt;
          &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;// get the delivery status, the fifth byte&amp;lt;/span&amp;gt;&lt;br /&gt;
         if (txStatus.&amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;getStatus&amp;lt;/span&amp;gt;() == SUCCESS){&lt;br /&gt;
            &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;// Success! Time to celebrate&amp;lt;/span&amp;gt;&lt;br /&gt;
           Serial.&amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;print&amp;lt;/span&amp;gt;(&amp;quot;SUCCESS! Time to celebrate\n&amp;quot;);&lt;br /&gt;
         } else {&lt;br /&gt;
           &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;// The remote XBee did not receive our packet. Is it powered on?&amp;lt;/span&amp;gt;&lt;br /&gt;
          Serial.&amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;print&amp;lt;/span&amp;gt;(&amp;quot;The remote Xbee did not receive our packet\n&amp;quot;);&lt;br /&gt;
         }&lt;br /&gt;
       }&lt;br /&gt;
     } else {&lt;br /&gt;
       &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;// local XBee did not provide a timely TX Status Response -- should not happen&amp;lt;/span&amp;gt;&lt;br /&gt;
      Serial.&amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;print&amp;lt;/span&amp;gt;(&amp;quot;Local Xbee did not provide a timely TX Status Response\n&amp;quot;);&lt;br /&gt;
     }&lt;br /&gt;
     &lt;br /&gt;
   }&lt;br /&gt;
  &lt;br /&gt;
   &amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;delay&amp;lt;/span&amp;gt;(500);&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
Ce code fonctionne de la manière suivante:&lt;br /&gt;
=====Fonction &amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;setup&amp;lt;/span&amp;gt;():=====&lt;br /&gt;
Une fois implémenté sur le Arduino, la fonction setup va faire démarrer le protocole XBee et le protocole Série afin de pouvoir envoyer et recevoir des messages par XBee, et d'imprimer les messages d'erreur sur le port Série s'il y a lieu.&lt;br /&gt;
=====Fonction &amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;loop&amp;lt;/span&amp;gt;():=====&lt;br /&gt;
Cette fonction va réaliser une boucle toutes les 0.5s pour mettre a jour les données des différents capteurs et les envoyer au serveur au travers du protocole XBee. Pour plus de détails voir les commentaires expliquant chaque étape du déroulement de la boucle.&lt;br /&gt;
&lt;br /&gt;
===le programme LINKER===&lt;br /&gt;
&lt;br /&gt;
Code du programme de liaison&lt;br /&gt;
&lt;br /&gt;
ce programme en java est constitué de 5 classes&lt;br /&gt;
&lt;br /&gt;
====Le Main====&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 public class main {&lt;br /&gt;
 &lt;br /&gt;
 	public static SQLinker linker;&lt;br /&gt;
 	public static Xbee xbee;&lt;br /&gt;
 	&lt;br /&gt;
 	public static void main(String[] args){&lt;br /&gt;
 		String address = new String(&amp;quot;jdbc:mysql://sitedb.polytech-lille.net/cdelberg?&amp;quot;);&lt;br /&gt;
 		String user = new String(&amp;quot;user=cdelberg&amp;amp;password=myLo9ufonese&amp;quot;);&lt;br /&gt;
 		String COM;&lt;br /&gt;
 		&lt;br /&gt;
 &lt;br /&gt;
                 &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;// We ask the user on the Communication Port to connect the XBee&amp;lt;/span&amp;gt;&lt;br /&gt;
 		System.out.println(&amp;quot;Please enter the Communication port of the Xbee&amp;quot;);&lt;br /&gt;
 		Scanner sc = new Scanner(System.in);&lt;br /&gt;
 		COM = sc.next();&lt;br /&gt;
 		System.out.println(&amp;quot;COM port changed to: &amp;quot;+COM);&lt;br /&gt;
 		&lt;br /&gt;
                 &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;//Creation of the Variables that will be used to connect to the Database and the Xbee&amp;lt;/span&amp;gt;&lt;br /&gt;
 		linker = new SQLinker(address, user);&lt;br /&gt;
 		linker.FillArdList();	&lt;br /&gt;
 		xbee = new Xbee(COM);&lt;br /&gt;
 		&lt;br /&gt;
                 &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;//Creating the Updates Threads&amp;lt;/span&amp;gt;&lt;br /&gt;
 		W8Thread thread1 = new W8Thread();&lt;br /&gt;
 		thread1.start();&lt;br /&gt;
 		UpTestThread thread2 = new UpTestThread();&lt;br /&gt;
 		thread2.start();&lt;br /&gt;
 		&lt;br /&gt;
                 &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;//We now allow the user to enter a command&amp;lt;/span&amp;gt;&lt;br /&gt;
 		String command;&lt;br /&gt;
 		System.out.println(&amp;quot;vous pouvez maintenant lancer une commande si vous le souhaitez&amp;quot;);&lt;br /&gt;
 		System.out.println(&amp;quot;tapez help pour plus d'informations&amp;quot;);&lt;br /&gt;
 		boolean exit=false;&lt;br /&gt;
 		&lt;br /&gt;
 		while(exit==false){&lt;br /&gt;
 			command=sc.next();&lt;br /&gt;
 			&lt;br /&gt;
 			if(command.equals(&amp;quot;help&amp;quot;)){&lt;br /&gt;
 				System.out.println(&amp;quot;print =&amp;gt; affiche la liste des arduinos&amp;quot;);&lt;br /&gt;
 				System.out.println(&amp;quot;exit =&amp;gt; ferme le programme&amp;quot;);&lt;br /&gt;
 			}&lt;br /&gt;
 			if(command.equals(&amp;quot;print&amp;quot;)){linker.PrintArdList();}&lt;br /&gt;
 			if(command.equals(&amp;quot;exit&amp;quot;)){exit=true;}&lt;br /&gt;
 		&lt;br /&gt;
 		}&lt;br /&gt;
 		&amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;//if the user ask to stop the program, it will do those final commands&amp;lt;/span&amp;gt;&lt;br /&gt;
 		sc.close();&lt;br /&gt;
 		thread1.stop();&lt;br /&gt;
 		thread2.stop();&lt;br /&gt;
 		xbee.XbeeClosing();	&lt;br /&gt;
 		//System.out.println(&amp;quot;Program finished successfully&amp;quot;);&lt;br /&gt;
 		&lt;br /&gt;
 	}&lt;br /&gt;
 &lt;br /&gt;
 } &lt;br /&gt;
 &lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Liste du matériel à acheter ===&lt;/div&gt;</summary>
		<author><name>Cdelberg</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=Objets_communiquants_et_gestion_de_l%27%C3%A9nergie&amp;diff=4165</id>
		<title>Objets communiquants et gestion de l'énergie</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=Objets_communiquants_et_gestion_de_l%27%C3%A9nergie&amp;diff=4165"/>
				<updated>2013-02-22T15:33:04Z</updated>
		
		<summary type="html">&lt;p&gt;Cdelberg : /* Le code du Arduino */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Présentation du projet ==&lt;br /&gt;
&lt;br /&gt;
=== Planning prévisionnel provisoire (jusqu'à la pré-soutenance)===&lt;br /&gt;
&lt;br /&gt;
Ce planning pourrait être amené à être modifié.&lt;br /&gt;
&lt;br /&gt;
'''''I) Etat de l'art''''' ( ~2-3 semaines)&lt;br /&gt;
&lt;br /&gt;
-Energy harvesting (Calvin)&lt;br /&gt;
&lt;br /&gt;
-Batteries (Justin)&lt;br /&gt;
&lt;br /&gt;
'''''II) Mesure de puissance des différents appareil Arduino''''' ( ~2 semaines)&lt;br /&gt;
&lt;br /&gt;
'''''III) Confronter théorie/réalité''''' ( ~1 semaine)&lt;br /&gt;
-estimer consommation de puissance&lt;br /&gt;
&lt;br /&gt;
-vérifier en pratique&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Amené à être ajouté:'''&lt;br /&gt;
&lt;br /&gt;
Mesure du Arduino de sa propre consommation.&lt;br /&gt;
&lt;br /&gt;
Mesure de la consommation du code (?)&lt;br /&gt;
&lt;br /&gt;
Applications:&lt;br /&gt;
&lt;br /&gt;
-Envoi des valeurs de l'Arduino au serveur.&lt;br /&gt;
&lt;br /&gt;
-Interface web pour interagir avec l'objet.&lt;br /&gt;
&lt;br /&gt;
== Etat de l'art ==&lt;br /&gt;
&lt;br /&gt;
=== Energy Harvesting ===&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
* Mosquino:&lt;br /&gt;
&lt;br /&gt;
''Mosquino'' est un matériel compatible avec le développement logiciel et dérivé de ''Arduino'', il permet de récupérer de l'énergie des sources ambiantes (chaleur, luminosité, vibrations)&lt;br /&gt;
Il n'est destiné qu'aux faibles consommations électriques et n'est encore qu'en phase de développement, il n'a pas encore été véritablement testé. &amp;lt;br/&amp;gt;&lt;br /&gt;
http://tim.cexx.org/?page_id=760&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
* Breakout board BOB-o&amp;lt;sub&amp;gt;994&amp;lt;/sub&amp;gt;6 :&lt;br /&gt;
&lt;br /&gt;
Cette carte utilise le collecteur d'énergie piezoelectrique LTC&amp;lt;sub&amp;gt;35&amp;lt;/sub&amp;gt;88 de Linear Technologies et permet non seulement de récupérer l'énergie piezoélectrique mais aussi l'énergie solaire. Initialement prévu pour fonctionner à faible voltage, la capacité de sortie peut-être dimensionnée pour recevoir une salve de courant de sortie plus élevée. &amp;lt;br/&amp;gt;&lt;br /&gt;
https://www.sparkfun.com/products/9946&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
=== Batteries ===&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
* nouvelles technologies: &lt;br /&gt;
&lt;br /&gt;
ces dernières années, de nouvelles technologies sont apparues, sans être encore réellement utilisées. je pense notamment aux batteries contenues dans des câbles: &lt;br /&gt;
http://phys.org/news/2012-09-lg-chem-cable-batteries-reshape.html&lt;br /&gt;
&lt;br /&gt;
ainsi qu'aux batteries ultra fines dévellopées par thinergy: &lt;br /&gt;
http://www.infinitepowersolutions.com/products.html&lt;br /&gt;
&lt;br /&gt;
Néanmoins, les tensions pouvant etre délivrées par ces technologies naissantes sont loin de pouvoir alimenter le materiel qui nous interresse, à savoir des Arduino (necessitant une alimentation comprise entre 7V-12V)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
D'autres techno sont encore en phase de développement, comme les batteries lithium-Air d'IBM, les piles au graphène utilisant la chaleur pour produire de l’énergie (plutôt de l'energy harvesting pour le coup). Comme ces technologies sont encore en phase de développement, elles n’apparaîtrons pas sur le marché avant au moins 10 ans.&lt;br /&gt;
&lt;br /&gt;
http://www.metro.co.uk/tech/news/897731-technology-companies-charge-towards-next-generation-battery-future&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* technologies adaptée à notre usage:&lt;br /&gt;
&lt;br /&gt;
comme je l'ai rappelé plus haut, ce PFE tourne principalement autour d'Arduino. ces plates-formes nécessitant une tension d'alimentation supérieure à 7V, le choix le plus intéressant reste les piles rechargeable.&lt;br /&gt;
&lt;br /&gt;
Seulement, il existe plusieurs types de piles rechargeables. dans l'usage qu'il en sera fait, et si ces batteries sont couplées à des technologies de récupération d'énergie, il est important de choisir des piles Lithium-Ion.&lt;br /&gt;
&lt;br /&gt;
En effet, ces piles sont les plus intéressantes pour plusieurs raisons:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
tout d'abord, elles sont insensibles à l'effet mémoire. du coup elles ne perdent pas de leur capacité de stockage d’énergie au cours du temps.&lt;br /&gt;
&lt;br /&gt;
le circuit intégré à ces piles empêche toute surtension lors de la charge.&lt;br /&gt;
&lt;br /&gt;
elles peuvent être rechargée en même temps qu'elles sont utilisées.&lt;br /&gt;
&lt;br /&gt;
dans une époque ou la pollution est un sujet préoccupation, ces piles sont moins dangereuse pour l’environnement que leurs homologues au nickel-Cadmium&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
le seul problème pourrais venir du fait qu'elles ne supporte pas bien la chaleur, mais à moins de les coller à un radiateur, il ne devrais pas y avoir de soucis.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Mesure de la consommation énergétique ===&lt;br /&gt;
&lt;br /&gt;
WSIM permet la simulation de capteurs sans fil. Il permet notamment d'estimer la consommation électrique http://wsim.gforge.inria.fr/index.html&lt;br /&gt;
Pour l'instant il ne fonctionne qu'avec des microcontrolleurs TI. Le support des AVR est en cours.&lt;br /&gt;
L'estimation de la consommation énergétique utilise esimu http://esimu.gforge.inria.fr/index.html&lt;br /&gt;
&lt;br /&gt;
== Réalisation ==&lt;br /&gt;
===Le Arduino===&lt;br /&gt;
====Architecture de l'objet communiquant====&lt;br /&gt;
&lt;br /&gt;
*Un Arduino Mega 2560&lt;br /&gt;
*Un XBee&lt;br /&gt;
*Un capteur de température&lt;br /&gt;
*Un capteur de luminosité&lt;br /&gt;
*Un accéléromètre (dont les valeurs ne seront pas utilisées mais qui devait servir d'appareil supplémentaire pour la problématique de consommation)&lt;br /&gt;
&lt;br /&gt;
====Le code du Arduino====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 &amp;lt;span style=&amp;quot;color: blue;&amp;quot;&amp;gt;#include&amp;lt;/span&amp;gt; &amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;XBee.h&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;// Define variables, pins..&amp;lt;/span&amp;gt;&lt;br /&gt;
 int sensorTempPin = 0;&lt;br /&gt;
 int Temp;&lt;br /&gt;
 int sensorLightPin = 1;&lt;br /&gt;
 int Light;&lt;br /&gt;
 int XPin = 2;&lt;br /&gt;
 int YPin = 3;&lt;br /&gt;
 int ZPin = 4;&lt;br /&gt;
 int XValue;&lt;br /&gt;
 int YValue;&lt;br /&gt;
 int ZValue;&lt;br /&gt;
 &lt;br /&gt;
 uint8_t values[] = { 0, 0, 0, 0 };&lt;br /&gt;
 XBee xbee =  &amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;XBee&amp;lt;/span&amp;gt;();&lt;br /&gt;
 XBeeResponse response = &amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;XBeeResponse&amp;lt;/span&amp;gt;();&lt;br /&gt;
 Rx16Response rx = &amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;Rx16Response&amp;lt;/span&amp;gt;();&lt;br /&gt;
 Tx16Request tx = &amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;Tx16Request&amp;lt;/span&amp;gt;(0x1111, values, &amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;sizeof&amp;lt;/span&amp;gt;(values));&lt;br /&gt;
 TxStatusResponse txStatus = &amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;TxStatusResponse&amp;lt;/span&amp;gt;();&lt;br /&gt;
 &lt;br /&gt;
  &amp;lt;span style=&amp;quot;color: blue;&amp;quot;&amp;gt;void&amp;lt;/span&amp;gt; &amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;setup&amp;lt;/span&amp;gt;()&lt;br /&gt;
 {&lt;br /&gt;
    &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;// Initialise xbee / serial&amp;lt;/span&amp;gt;&lt;br /&gt;
   xbee.&amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;begin&amp;lt;/span&amp;gt;(9600);&lt;br /&gt;
   Serial.&amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;begin&amp;lt;/span&amp;gt;(9600);&lt;br /&gt;
 } &lt;br /&gt;
 &lt;br /&gt;
  &amp;lt;span style=&amp;quot;color: blue;&amp;quot;&amp;gt;void&amp;lt;/span&amp;gt; &amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;loop&amp;lt;/span&amp;gt;()&lt;br /&gt;
 {&lt;br /&gt;
    &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;// Read the values on analog pins&amp;lt;/span&amp;gt;&lt;br /&gt;
   Light = &amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;analogRead&amp;lt;/span&amp;gt;(sensorLightPin);&lt;br /&gt;
   Temp = &amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;analogRead&amp;lt;/span&amp;gt;(sensorTempPin);&lt;br /&gt;
   XValue = &amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;analogRead&amp;lt;/span&amp;gt;(XPin);&lt;br /&gt;
   YValue = &amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;analogRead&amp;lt;/span&amp;gt;(YPin);&lt;br /&gt;
   ZValue = &amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;analogRead&amp;lt;/span&amp;gt;(ZPin);&lt;br /&gt;
 &lt;br /&gt;
   &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;// Listens on the Xbee protocol for any packet incoming.&amp;lt;/span&amp;gt;&lt;br /&gt;
   xbee.&amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;readPacket&amp;lt;/span&amp;gt;();&lt;br /&gt;
 &lt;br /&gt;
   if(xbee.&amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;getResponse&amp;lt;/span&amp;gt;().&amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;isAvailable&amp;lt;/span&amp;gt;()){&lt;br /&gt;
      &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;// Got something&amp;lt;/span&amp;gt;&lt;br /&gt;
     Serial.&amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;print&amp;lt;/span&amp;gt;(&amp;quot;Got something\n&amp;quot;);&lt;br /&gt;
      &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;// Break the 10-bits of information retrieved from light&amp;lt;/span&amp;gt;&lt;br /&gt;
      &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;// and temperature into 2 bytes for each.&amp;lt;/span&amp;gt;&lt;br /&gt;
     values[0] = Temp &amp;gt;&amp;gt; 8 &amp;amp; 0xff;&lt;br /&gt;
     values[1] = Temp &amp;amp; 0xff;&lt;br /&gt;
     values[2] = Light &amp;gt;&amp;gt; 8 &amp;amp; 0xff;&lt;br /&gt;
     values[3] = Light &amp;amp; 0xff;&lt;br /&gt;
     Serial.&amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;print&amp;lt;/span&amp;gt;(values[0]);&lt;br /&gt;
     &lt;br /&gt;
      &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;// Sending values to server&amp;lt;/span&amp;gt;&lt;br /&gt;
     xbee.&amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;send&amp;lt;/span&amp;gt;(tx);&lt;br /&gt;
     &lt;br /&gt;
      &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;// After sending a tx request, we expect a status response&amp;lt;/span&amp;gt;&lt;br /&gt;
      &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;// from the server&amp;lt;/span&amp;gt;&lt;br /&gt;
      &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;// Wait up to 5 seconds for the status response&amp;lt;/span&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
     if (xbee.&amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;readPacket&amp;lt;/span&amp;gt;(5000)) {&lt;br /&gt;
        &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;// We got a response!&amp;lt;/span&amp;gt;&lt;br /&gt;
       Serial.&amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;print&amp;lt;/span&amp;gt;(&amp;quot;We got a response\n&amp;quot;);&lt;br /&gt;
       &lt;br /&gt;
        &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;// It should be a znet tx status&amp;lt;/span&amp;gt;&lt;br /&gt;
       if (xbee.&amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;getResponse&amp;lt;/span&amp;gt;().&amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;getApiId&amp;lt;/span&amp;gt;() == TX_STATUS_RESPONSE) {&lt;br /&gt;
         xbee.&amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;getResponse&amp;lt;/span&amp;gt;().&amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;getZBTxStatusResponse&amp;lt;/span&amp;gt;(txStatus);&lt;br /&gt;
         &lt;br /&gt;
          &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;// get the delivery status, the fifth byte&amp;lt;/span&amp;gt;&lt;br /&gt;
         if (txStatus.&amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;getStatus&amp;lt;/span&amp;gt;() == SUCCESS){&lt;br /&gt;
            &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;// Success! Time to celebrate&amp;lt;/span&amp;gt;&lt;br /&gt;
           Serial.&amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;print&amp;lt;/span&amp;gt;(&amp;quot;SUCCESS! Time to celebrate\n&amp;quot;);&lt;br /&gt;
         } else {&lt;br /&gt;
           &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;// The remote XBee did not receive our packet. Is it powered on?&amp;lt;/span&amp;gt;&lt;br /&gt;
          Serial.&amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;print&amp;lt;/span&amp;gt;(&amp;quot;The remote Xbee did not receive our packet\n&amp;quot;);&lt;br /&gt;
         }&lt;br /&gt;
       }&lt;br /&gt;
     } else {&lt;br /&gt;
       &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;// local XBee did not provide a timely TX Status Response -- should not happen&amp;lt;/span&amp;gt;&lt;br /&gt;
      Serial.&amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;print&amp;lt;/span&amp;gt;(&amp;quot;Local Xbee did not provide a timely TX Status Response\n&amp;quot;);&lt;br /&gt;
     }&lt;br /&gt;
     &lt;br /&gt;
   }&lt;br /&gt;
  &lt;br /&gt;
   &amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;delay&amp;lt;/span&amp;gt;(500);&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
Ce code fonctionne de la manière suivante:&lt;br /&gt;
=====Fonction &amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;setup&amp;lt;/span&amp;gt;():=====&lt;br /&gt;
Une fois implémenté sur le Arduino, la fonction setup va faire démarrer le protocole XBee et le protocole Série afin de pouvoir envoyer et recevoir des messages par XBee, et d'imprimer les messages d'erreur sur le port Série s'il y a lieu.&lt;br /&gt;
=====Fonction &amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;loop&amp;lt;/span&amp;gt;():=====&lt;br /&gt;
Cette fonction va réaliser une boucle toutes les 0.5s pour mettre a jour les données des différents capteurs et les envoyer au serveur au travers du protocole XBee.&lt;br /&gt;
&lt;br /&gt;
===le programme LINKER===&lt;br /&gt;
&lt;br /&gt;
Code du programme de liaison&lt;br /&gt;
&lt;br /&gt;
ce programme en java est constitué de 5 classes&lt;br /&gt;
&lt;br /&gt;
====Le Main====&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 public class main {&lt;br /&gt;
 &lt;br /&gt;
 	public static SQLinker linker;&lt;br /&gt;
 	public static Xbee xbee;&lt;br /&gt;
 	&lt;br /&gt;
 	public static void main(String[] args){&lt;br /&gt;
 		String address = new String(&amp;quot;jdbc:mysql://sitedb.polytech-lille.net/cdelberg?&amp;quot;);&lt;br /&gt;
 		String user = new String(&amp;quot;user=cdelberg&amp;amp;password=myLo9ufonese&amp;quot;);&lt;br /&gt;
 		String COM;&lt;br /&gt;
 		&lt;br /&gt;
 &lt;br /&gt;
                 &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;// We ask the user on the Communication Port to connect the XBee&amp;lt;/span&amp;gt;&lt;br /&gt;
 		System.out.println(&amp;quot;Please enter the Communication port of the Xbee&amp;quot;);&lt;br /&gt;
 		Scanner sc = new Scanner(System.in);&lt;br /&gt;
 		COM = sc.next();&lt;br /&gt;
 		System.out.println(&amp;quot;COM port changed to: &amp;quot;+COM);&lt;br /&gt;
 		&lt;br /&gt;
                 &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;//Creation of the Variables that will be used to connect to the Database and the Xbee&amp;lt;/span&amp;gt;&lt;br /&gt;
 		linker = new SQLinker(address, user);&lt;br /&gt;
 		linker.FillArdList();	&lt;br /&gt;
 		xbee = new Xbee(COM);&lt;br /&gt;
 		&lt;br /&gt;
                 &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;//Creating the Updates Threads&amp;lt;/span&amp;gt;&lt;br /&gt;
 		W8Thread thread1 = new W8Thread();&lt;br /&gt;
 		thread1.start();&lt;br /&gt;
 		UpTestThread thread2 = new UpTestThread();&lt;br /&gt;
 		thread2.start();&lt;br /&gt;
 		&lt;br /&gt;
                 &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;//We now allow the user to enter a command&amp;lt;/span&amp;gt;&lt;br /&gt;
 		String command;&lt;br /&gt;
 		System.out.println(&amp;quot;vous pouvez maintenant lancer une commande si vous le souhaitez&amp;quot;);&lt;br /&gt;
 		System.out.println(&amp;quot;tapez help pour plus d'informations&amp;quot;);&lt;br /&gt;
 		boolean exit=false;&lt;br /&gt;
 		&lt;br /&gt;
 		while(exit==false){&lt;br /&gt;
 			command=sc.next();&lt;br /&gt;
 			&lt;br /&gt;
 			if(command.equals(&amp;quot;help&amp;quot;)){&lt;br /&gt;
 				System.out.println(&amp;quot;print =&amp;gt; affiche la liste des arduinos&amp;quot;);&lt;br /&gt;
 				System.out.println(&amp;quot;exit =&amp;gt; ferme le programme&amp;quot;);&lt;br /&gt;
 			}&lt;br /&gt;
 			if(command.equals(&amp;quot;print&amp;quot;)){linker.PrintArdList();}&lt;br /&gt;
 			if(command.equals(&amp;quot;exit&amp;quot;)){exit=true;}&lt;br /&gt;
 		&lt;br /&gt;
 		}&lt;br /&gt;
 		&amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;//if the user ask to stop the program, it will do those final commands&amp;lt;/span&amp;gt;&lt;br /&gt;
 		sc.close();&lt;br /&gt;
 		thread1.stop();&lt;br /&gt;
 		thread2.stop();&lt;br /&gt;
 		xbee.XbeeClosing();	&lt;br /&gt;
 		//System.out.println(&amp;quot;Program finished successfully&amp;quot;);&lt;br /&gt;
 		&lt;br /&gt;
 	}&lt;br /&gt;
 &lt;br /&gt;
 } &lt;br /&gt;
 &lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Liste du matériel à acheter ===&lt;/div&gt;</summary>
		<author><name>Cdelberg</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=Objets_communiquants_et_gestion_de_l%27%C3%A9nergie&amp;diff=4164</id>
		<title>Objets communiquants et gestion de l'énergie</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=Objets_communiquants_et_gestion_de_l%27%C3%A9nergie&amp;diff=4164"/>
				<updated>2013-02-22T15:31:05Z</updated>
		
		<summary type="html">&lt;p&gt;Cdelberg : /* Fonction loop(): */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Présentation du projet ==&lt;br /&gt;
&lt;br /&gt;
=== Planning prévisionnel provisoire (jusqu'à la pré-soutenance)===&lt;br /&gt;
&lt;br /&gt;
Ce planning pourrait être amené à être modifié.&lt;br /&gt;
&lt;br /&gt;
'''''I) Etat de l'art''''' ( ~2-3 semaines)&lt;br /&gt;
&lt;br /&gt;
-Energy harvesting (Calvin)&lt;br /&gt;
&lt;br /&gt;
-Batteries (Justin)&lt;br /&gt;
&lt;br /&gt;
'''''II) Mesure de puissance des différents appareil Arduino''''' ( ~2 semaines)&lt;br /&gt;
&lt;br /&gt;
'''''III) Confronter théorie/réalité''''' ( ~1 semaine)&lt;br /&gt;
-estimer consommation de puissance&lt;br /&gt;
&lt;br /&gt;
-vérifier en pratique&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Amené à être ajouté:'''&lt;br /&gt;
&lt;br /&gt;
Mesure du Arduino de sa propre consommation.&lt;br /&gt;
&lt;br /&gt;
Mesure de la consommation du code (?)&lt;br /&gt;
&lt;br /&gt;
Applications:&lt;br /&gt;
&lt;br /&gt;
-Envoi des valeurs de l'Arduino au serveur.&lt;br /&gt;
&lt;br /&gt;
-Interface web pour interagir avec l'objet.&lt;br /&gt;
&lt;br /&gt;
== Etat de l'art ==&lt;br /&gt;
&lt;br /&gt;
=== Energy Harvesting ===&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
* Mosquino:&lt;br /&gt;
&lt;br /&gt;
''Mosquino'' est un matériel compatible avec le développement logiciel et dérivé de ''Arduino'', il permet de récupérer de l'énergie des sources ambiantes (chaleur, luminosité, vibrations)&lt;br /&gt;
Il n'est destiné qu'aux faibles consommations électriques et n'est encore qu'en phase de développement, il n'a pas encore été véritablement testé. &amp;lt;br/&amp;gt;&lt;br /&gt;
http://tim.cexx.org/?page_id=760&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
* Breakout board BOB-o&amp;lt;sub&amp;gt;994&amp;lt;/sub&amp;gt;6 :&lt;br /&gt;
&lt;br /&gt;
Cette carte utilise le collecteur d'énergie piezoelectrique LTC&amp;lt;sub&amp;gt;35&amp;lt;/sub&amp;gt;88 de Linear Technologies et permet non seulement de récupérer l'énergie piezoélectrique mais aussi l'énergie solaire. Initialement prévu pour fonctionner à faible voltage, la capacité de sortie peut-être dimensionnée pour recevoir une salve de courant de sortie plus élevée. &amp;lt;br/&amp;gt;&lt;br /&gt;
https://www.sparkfun.com/products/9946&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
=== Batteries ===&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
* nouvelles technologies: &lt;br /&gt;
&lt;br /&gt;
ces dernières années, de nouvelles technologies sont apparues, sans être encore réellement utilisées. je pense notamment aux batteries contenues dans des câbles: &lt;br /&gt;
http://phys.org/news/2012-09-lg-chem-cable-batteries-reshape.html&lt;br /&gt;
&lt;br /&gt;
ainsi qu'aux batteries ultra fines dévellopées par thinergy: &lt;br /&gt;
http://www.infinitepowersolutions.com/products.html&lt;br /&gt;
&lt;br /&gt;
Néanmoins, les tensions pouvant etre délivrées par ces technologies naissantes sont loin de pouvoir alimenter le materiel qui nous interresse, à savoir des Arduino (necessitant une alimentation comprise entre 7V-12V)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
D'autres techno sont encore en phase de développement, comme les batteries lithium-Air d'IBM, les piles au graphène utilisant la chaleur pour produire de l’énergie (plutôt de l'energy harvesting pour le coup). Comme ces technologies sont encore en phase de développement, elles n’apparaîtrons pas sur le marché avant au moins 10 ans.&lt;br /&gt;
&lt;br /&gt;
http://www.metro.co.uk/tech/news/897731-technology-companies-charge-towards-next-generation-battery-future&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* technologies adaptée à notre usage:&lt;br /&gt;
&lt;br /&gt;
comme je l'ai rappelé plus haut, ce PFE tourne principalement autour d'Arduino. ces plates-formes nécessitant une tension d'alimentation supérieure à 7V, le choix le plus intéressant reste les piles rechargeable.&lt;br /&gt;
&lt;br /&gt;
Seulement, il existe plusieurs types de piles rechargeables. dans l'usage qu'il en sera fait, et si ces batteries sont couplées à des technologies de récupération d'énergie, il est important de choisir des piles Lithium-Ion.&lt;br /&gt;
&lt;br /&gt;
En effet, ces piles sont les plus intéressantes pour plusieurs raisons:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
tout d'abord, elles sont insensibles à l'effet mémoire. du coup elles ne perdent pas de leur capacité de stockage d’énergie au cours du temps.&lt;br /&gt;
&lt;br /&gt;
le circuit intégré à ces piles empêche toute surtension lors de la charge.&lt;br /&gt;
&lt;br /&gt;
elles peuvent être rechargée en même temps qu'elles sont utilisées.&lt;br /&gt;
&lt;br /&gt;
dans une époque ou la pollution est un sujet préoccupation, ces piles sont moins dangereuse pour l’environnement que leurs homologues au nickel-Cadmium&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
le seul problème pourrais venir du fait qu'elles ne supporte pas bien la chaleur, mais à moins de les coller à un radiateur, il ne devrais pas y avoir de soucis.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Mesure de la consommation énergétique ===&lt;br /&gt;
&lt;br /&gt;
WSIM permet la simulation de capteurs sans fil. Il permet notamment d'estimer la consommation électrique http://wsim.gforge.inria.fr/index.html&lt;br /&gt;
Pour l'instant il ne fonctionne qu'avec des microcontrolleurs TI. Le support des AVR est en cours.&lt;br /&gt;
L'estimation de la consommation énergétique utilise esimu http://esimu.gforge.inria.fr/index.html&lt;br /&gt;
&lt;br /&gt;
== Réalisation ==&lt;br /&gt;
===Le Arduino===&lt;br /&gt;
====Architecture de l'objet communiquant====&lt;br /&gt;
&lt;br /&gt;
*Un Arduino Mega 2560&lt;br /&gt;
*Un XBee&lt;br /&gt;
*Un capteur de température&lt;br /&gt;
*Un capteur de luminosité&lt;br /&gt;
*Un accéléromètre (dont les valeurs ne seront pas utilisées mais qui devait servir d'appareil supplémentaire pour la problématique de consommation)&lt;br /&gt;
&lt;br /&gt;
====Le code du Arduino====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 &amp;lt;span style=&amp;quot;color: blue;&amp;quot;&amp;gt;#include&amp;lt;/span&amp;gt; &amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;XBee.h&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;// Define variables, pins..&amp;lt;/span&amp;gt;&lt;br /&gt;
 int sensorTempPin = 0;&lt;br /&gt;
 int Temp;&lt;br /&gt;
 int sensorLightPin = 1;&lt;br /&gt;
 int Light;&lt;br /&gt;
 int XPin = 2;&lt;br /&gt;
 int YPin = 3;&lt;br /&gt;
 int ZPin = 4;&lt;br /&gt;
 int XValue;&lt;br /&gt;
 int YValue;&lt;br /&gt;
 int ZValue;&lt;br /&gt;
 &lt;br /&gt;
 uint8_t values[] = { 0, 0, 0, 0 };&lt;br /&gt;
 XBee xbee =  &amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;XBee&amp;lt;/span&amp;gt;();&lt;br /&gt;
 XBeeResponse response = &amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;XBeeResponse&amp;lt;/span&amp;gt;();&lt;br /&gt;
 Rx16Response rx = &amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;Rx16Response&amp;lt;/span&amp;gt;();&lt;br /&gt;
 Tx16Request tx = &amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;Tx16Request&amp;lt;/span&amp;gt;(0x1111, values, &amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;sizeof&amp;lt;/span&amp;gt;(values));&lt;br /&gt;
 TxStatusResponse txStatus = &amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;TxStatusResponse&amp;lt;/span&amp;gt;();&lt;br /&gt;
 &lt;br /&gt;
  &amp;lt;span style=&amp;quot;color: blue;&amp;quot;&amp;gt;void&amp;lt;/span&amp;gt; &amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;setup&amp;lt;/span&amp;gt;()&lt;br /&gt;
 {&lt;br /&gt;
    &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;// Initialise xbee / serial&amp;lt;/span&amp;gt;&lt;br /&gt;
   xbee.&amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;begin&amp;lt;/span&amp;gt;(9600);&lt;br /&gt;
   Serial.&amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;begin&amp;lt;/span&amp;gt;(9600);&lt;br /&gt;
 } &lt;br /&gt;
 &lt;br /&gt;
  &amp;lt;span style=&amp;quot;color: blue;&amp;quot;&amp;gt;void&amp;lt;/span&amp;gt; &amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;loop&amp;lt;/span&amp;gt;()&lt;br /&gt;
 {&lt;br /&gt;
    &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;// Read the values on analog pins&amp;lt;/span&amp;gt;&lt;br /&gt;
   Light = &amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;analogRead&amp;lt;/span&amp;gt;(sensorLightPin);&lt;br /&gt;
   Temp = &amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;analogRead&amp;lt;/span&amp;gt;(sensorTempPin);&lt;br /&gt;
   XValue = &amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;analogRead&amp;lt;/span&amp;gt;(XPin);&lt;br /&gt;
   YValue = &amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;analogRead&amp;lt;/span&amp;gt;(YPin);&lt;br /&gt;
   ZValue = &amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;analogRead&amp;lt;/span&amp;gt;(ZPin);&lt;br /&gt;
 &lt;br /&gt;
   xbee.&amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;readPacket&amp;lt;/span&amp;gt;();&lt;br /&gt;
 &lt;br /&gt;
   if(xbee.&amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;getResponse&amp;lt;/span&amp;gt;().&amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;isAvailable&amp;lt;/span&amp;gt;()){&lt;br /&gt;
      &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;// Got something&amp;lt;/span&amp;gt;&lt;br /&gt;
     Serial.&amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;print&amp;lt;/span&amp;gt;(&amp;quot;Got something\n&amp;quot;);&lt;br /&gt;
      &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;// Break the 10-bits of information retrieved from light&amp;lt;/span&amp;gt;&lt;br /&gt;
      &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;// and temperature into 2 bytes for each.&amp;lt;/span&amp;gt;&lt;br /&gt;
     values[0] = Temp &amp;gt;&amp;gt; 8 &amp;amp; 0xff;&lt;br /&gt;
     values[1] = Temp &amp;amp; 0xff;&lt;br /&gt;
     values[2] = Light &amp;gt;&amp;gt; 8 &amp;amp; 0xff;&lt;br /&gt;
     values[3] = Light &amp;amp; 0xff;&lt;br /&gt;
     Serial.&amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;print&amp;lt;/span&amp;gt;(values[0]);&lt;br /&gt;
     &lt;br /&gt;
      &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;// Sending values to server&amp;lt;/span&amp;gt;&lt;br /&gt;
     xbee.&amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;send&amp;lt;/span&amp;gt;(tx);&lt;br /&gt;
     &lt;br /&gt;
      &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;// After sending a tx request, we expect a status response&amp;lt;/span&amp;gt;&lt;br /&gt;
      &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;// from the server&amp;lt;/span&amp;gt;&lt;br /&gt;
      &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;// Wait up to 5 seconds for the status response&amp;lt;/span&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
     if (xbee.&amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;readPacket&amp;lt;/span&amp;gt;(5000)) {&lt;br /&gt;
        &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;// We got a response!&amp;lt;/span&amp;gt;&lt;br /&gt;
       Serial.&amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;print&amp;lt;/span&amp;gt;(&amp;quot;We got a response\n&amp;quot;);&lt;br /&gt;
       &lt;br /&gt;
        &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;// It should be a znet tx status&amp;lt;/span&amp;gt;&lt;br /&gt;
       if (xbee.&amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;getResponse&amp;lt;/span&amp;gt;().&amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;getApiId&amp;lt;/span&amp;gt;() == TX_STATUS_RESPONSE) {&lt;br /&gt;
         xbee.&amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;getResponse&amp;lt;/span&amp;gt;().&amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;getZBTxStatusResponse&amp;lt;/span&amp;gt;(txStatus);&lt;br /&gt;
         &lt;br /&gt;
          &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;// get the delivery status, the fifth byte&amp;lt;/span&amp;gt;&lt;br /&gt;
         if (txStatus.&amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;getStatus&amp;lt;/span&amp;gt;() == SUCCESS){&lt;br /&gt;
            &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;// Success! Time to celebrate&amp;lt;/span&amp;gt;&lt;br /&gt;
           Serial.&amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;print&amp;lt;/span&amp;gt;(&amp;quot;SUCCESS! Time to celebrate\n&amp;quot;);&lt;br /&gt;
         } else {&lt;br /&gt;
           &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;// The remote XBee did not receive our packet. Is it powered on?&amp;lt;/span&amp;gt;&lt;br /&gt;
          Serial.&amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;print&amp;lt;/span&amp;gt;(&amp;quot;The remote Xbee did not receive our packet\n&amp;quot;);&lt;br /&gt;
         }&lt;br /&gt;
       }&lt;br /&gt;
     } else {&lt;br /&gt;
       &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;// local XBee did not provide a timely TX Status Response -- should not happen&amp;lt;/span&amp;gt;&lt;br /&gt;
      Serial.&amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;print&amp;lt;/span&amp;gt;(&amp;quot;Local Xbee did not provide a timely TX Status Response\n&amp;quot;);&lt;br /&gt;
     }&lt;br /&gt;
     &lt;br /&gt;
   }&lt;br /&gt;
  &lt;br /&gt;
   &amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;delay&amp;lt;/span&amp;gt;(500);&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
Ce code fonctionne de la manière suivante:&lt;br /&gt;
=====Fonction &amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;setup&amp;lt;/span&amp;gt;():=====&lt;br /&gt;
Une fois implémenté sur le Arduino, la fonction setup va faire démarrer le protocole XBee et le protocole Série afin de pouvoir envoyer et recevoir des messages par XBee, et d'imprimer les messages d'erreur sur le port Série s'il y a lieu.&lt;br /&gt;
=====Fonction &amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;loop&amp;lt;/span&amp;gt;():=====&lt;br /&gt;
Cette fonction va réaliser une boucle toutes les 0.5s pour mettre a jour les données des différents capteurs et les envoyer au serveur au travers du protocole XBee.&lt;br /&gt;
&lt;br /&gt;
===le programme LINKER===&lt;br /&gt;
&lt;br /&gt;
Code du programme de liaison&lt;br /&gt;
&lt;br /&gt;
ce programme en java est constitué de 5 classes&lt;br /&gt;
&lt;br /&gt;
====Le Main====&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 public class main {&lt;br /&gt;
 &lt;br /&gt;
 	public static SQLinker linker;&lt;br /&gt;
 	public static Xbee xbee;&lt;br /&gt;
 	&lt;br /&gt;
 	public static void main(String[] args){&lt;br /&gt;
 		String address = new String(&amp;quot;jdbc:mysql://sitedb.polytech-lille.net/cdelberg?&amp;quot;);&lt;br /&gt;
 		String user = new String(&amp;quot;user=cdelberg&amp;amp;password=myLo9ufonese&amp;quot;);&lt;br /&gt;
 		String COM;&lt;br /&gt;
 		&lt;br /&gt;
 &lt;br /&gt;
                 &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;// We ask the user on the Communication Port to connect the XBee&amp;lt;/span&amp;gt;&lt;br /&gt;
 		System.out.println(&amp;quot;Please enter the Communication port of the Xbee&amp;quot;);&lt;br /&gt;
 		Scanner sc = new Scanner(System.in);&lt;br /&gt;
 		COM = sc.next();&lt;br /&gt;
 		System.out.println(&amp;quot;COM port changed to: &amp;quot;+COM);&lt;br /&gt;
 		&lt;br /&gt;
                 &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;//Creation of the Variables that will be used to connect to the Database and the Xbee&amp;lt;/span&amp;gt;&lt;br /&gt;
 		linker = new SQLinker(address, user);&lt;br /&gt;
 		linker.FillArdList();	&lt;br /&gt;
 		xbee = new Xbee(COM);&lt;br /&gt;
 		&lt;br /&gt;
                 &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;//Creating the Updates Threads&amp;lt;/span&amp;gt;&lt;br /&gt;
 		W8Thread thread1 = new W8Thread();&lt;br /&gt;
 		thread1.start();&lt;br /&gt;
 		UpTestThread thread2 = new UpTestThread();&lt;br /&gt;
 		thread2.start();&lt;br /&gt;
 		&lt;br /&gt;
                 &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;//We now allow the user to enter a command&amp;lt;/span&amp;gt;&lt;br /&gt;
 		String command;&lt;br /&gt;
 		System.out.println(&amp;quot;vous pouvez maintenant lancer une commande si vous le souhaitez&amp;quot;);&lt;br /&gt;
 		System.out.println(&amp;quot;tapez help pour plus d'informations&amp;quot;);&lt;br /&gt;
 		boolean exit=false;&lt;br /&gt;
 		&lt;br /&gt;
 		while(exit==false){&lt;br /&gt;
 			command=sc.next();&lt;br /&gt;
 			&lt;br /&gt;
 			if(command.equals(&amp;quot;help&amp;quot;)){&lt;br /&gt;
 				System.out.println(&amp;quot;print =&amp;gt; affiche la liste des arduinos&amp;quot;);&lt;br /&gt;
 				System.out.println(&amp;quot;exit =&amp;gt; ferme le programme&amp;quot;);&lt;br /&gt;
 			}&lt;br /&gt;
 			if(command.equals(&amp;quot;print&amp;quot;)){linker.PrintArdList();}&lt;br /&gt;
 			if(command.equals(&amp;quot;exit&amp;quot;)){exit=true;}&lt;br /&gt;
 		&lt;br /&gt;
 		}&lt;br /&gt;
 		&amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;//if the user ask to stop the program, it will do those final commands&amp;lt;/span&amp;gt;&lt;br /&gt;
 		sc.close();&lt;br /&gt;
 		thread1.stop();&lt;br /&gt;
 		thread2.stop();&lt;br /&gt;
 		xbee.XbeeClosing();	&lt;br /&gt;
 		//System.out.println(&amp;quot;Program finished successfully&amp;quot;);&lt;br /&gt;
 		&lt;br /&gt;
 	}&lt;br /&gt;
 &lt;br /&gt;
 } &lt;br /&gt;
 &lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Liste du matériel à acheter ===&lt;/div&gt;</summary>
		<author><name>Cdelberg</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=Objets_communiquants_et_gestion_de_l%27%C3%A9nergie&amp;diff=4163</id>
		<title>Objets communiquants et gestion de l'énergie</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=Objets_communiquants_et_gestion_de_l%27%C3%A9nergie&amp;diff=4163"/>
				<updated>2013-02-22T15:29:51Z</updated>
		
		<summary type="html">&lt;p&gt;Cdelberg : /* Le Arduino */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Présentation du projet ==&lt;br /&gt;
&lt;br /&gt;
=== Planning prévisionnel provisoire (jusqu'à la pré-soutenance)===&lt;br /&gt;
&lt;br /&gt;
Ce planning pourrait être amené à être modifié.&lt;br /&gt;
&lt;br /&gt;
'''''I) Etat de l'art''''' ( ~2-3 semaines)&lt;br /&gt;
&lt;br /&gt;
-Energy harvesting (Calvin)&lt;br /&gt;
&lt;br /&gt;
-Batteries (Justin)&lt;br /&gt;
&lt;br /&gt;
'''''II) Mesure de puissance des différents appareil Arduino''''' ( ~2 semaines)&lt;br /&gt;
&lt;br /&gt;
'''''III) Confronter théorie/réalité''''' ( ~1 semaine)&lt;br /&gt;
-estimer consommation de puissance&lt;br /&gt;
&lt;br /&gt;
-vérifier en pratique&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Amené à être ajouté:'''&lt;br /&gt;
&lt;br /&gt;
Mesure du Arduino de sa propre consommation.&lt;br /&gt;
&lt;br /&gt;
Mesure de la consommation du code (?)&lt;br /&gt;
&lt;br /&gt;
Applications:&lt;br /&gt;
&lt;br /&gt;
-Envoi des valeurs de l'Arduino au serveur.&lt;br /&gt;
&lt;br /&gt;
-Interface web pour interagir avec l'objet.&lt;br /&gt;
&lt;br /&gt;
== Etat de l'art ==&lt;br /&gt;
&lt;br /&gt;
=== Energy Harvesting ===&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
* Mosquino:&lt;br /&gt;
&lt;br /&gt;
''Mosquino'' est un matériel compatible avec le développement logiciel et dérivé de ''Arduino'', il permet de récupérer de l'énergie des sources ambiantes (chaleur, luminosité, vibrations)&lt;br /&gt;
Il n'est destiné qu'aux faibles consommations électriques et n'est encore qu'en phase de développement, il n'a pas encore été véritablement testé. &amp;lt;br/&amp;gt;&lt;br /&gt;
http://tim.cexx.org/?page_id=760&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
* Breakout board BOB-o&amp;lt;sub&amp;gt;994&amp;lt;/sub&amp;gt;6 :&lt;br /&gt;
&lt;br /&gt;
Cette carte utilise le collecteur d'énergie piezoelectrique LTC&amp;lt;sub&amp;gt;35&amp;lt;/sub&amp;gt;88 de Linear Technologies et permet non seulement de récupérer l'énergie piezoélectrique mais aussi l'énergie solaire. Initialement prévu pour fonctionner à faible voltage, la capacité de sortie peut-être dimensionnée pour recevoir une salve de courant de sortie plus élevée. &amp;lt;br/&amp;gt;&lt;br /&gt;
https://www.sparkfun.com/products/9946&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
=== Batteries ===&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
* nouvelles technologies: &lt;br /&gt;
&lt;br /&gt;
ces dernières années, de nouvelles technologies sont apparues, sans être encore réellement utilisées. je pense notamment aux batteries contenues dans des câbles: &lt;br /&gt;
http://phys.org/news/2012-09-lg-chem-cable-batteries-reshape.html&lt;br /&gt;
&lt;br /&gt;
ainsi qu'aux batteries ultra fines dévellopées par thinergy: &lt;br /&gt;
http://www.infinitepowersolutions.com/products.html&lt;br /&gt;
&lt;br /&gt;
Néanmoins, les tensions pouvant etre délivrées par ces technologies naissantes sont loin de pouvoir alimenter le materiel qui nous interresse, à savoir des Arduino (necessitant une alimentation comprise entre 7V-12V)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
D'autres techno sont encore en phase de développement, comme les batteries lithium-Air d'IBM, les piles au graphène utilisant la chaleur pour produire de l’énergie (plutôt de l'energy harvesting pour le coup). Comme ces technologies sont encore en phase de développement, elles n’apparaîtrons pas sur le marché avant au moins 10 ans.&lt;br /&gt;
&lt;br /&gt;
http://www.metro.co.uk/tech/news/897731-technology-companies-charge-towards-next-generation-battery-future&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* technologies adaptée à notre usage:&lt;br /&gt;
&lt;br /&gt;
comme je l'ai rappelé plus haut, ce PFE tourne principalement autour d'Arduino. ces plates-formes nécessitant une tension d'alimentation supérieure à 7V, le choix le plus intéressant reste les piles rechargeable.&lt;br /&gt;
&lt;br /&gt;
Seulement, il existe plusieurs types de piles rechargeables. dans l'usage qu'il en sera fait, et si ces batteries sont couplées à des technologies de récupération d'énergie, il est important de choisir des piles Lithium-Ion.&lt;br /&gt;
&lt;br /&gt;
En effet, ces piles sont les plus intéressantes pour plusieurs raisons:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
tout d'abord, elles sont insensibles à l'effet mémoire. du coup elles ne perdent pas de leur capacité de stockage d’énergie au cours du temps.&lt;br /&gt;
&lt;br /&gt;
le circuit intégré à ces piles empêche toute surtension lors de la charge.&lt;br /&gt;
&lt;br /&gt;
elles peuvent être rechargée en même temps qu'elles sont utilisées.&lt;br /&gt;
&lt;br /&gt;
dans une époque ou la pollution est un sujet préoccupation, ces piles sont moins dangereuse pour l’environnement que leurs homologues au nickel-Cadmium&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
le seul problème pourrais venir du fait qu'elles ne supporte pas bien la chaleur, mais à moins de les coller à un radiateur, il ne devrais pas y avoir de soucis.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Mesure de la consommation énergétique ===&lt;br /&gt;
&lt;br /&gt;
WSIM permet la simulation de capteurs sans fil. Il permet notamment d'estimer la consommation électrique http://wsim.gforge.inria.fr/index.html&lt;br /&gt;
Pour l'instant il ne fonctionne qu'avec des microcontrolleurs TI. Le support des AVR est en cours.&lt;br /&gt;
L'estimation de la consommation énergétique utilise esimu http://esimu.gforge.inria.fr/index.html&lt;br /&gt;
&lt;br /&gt;
== Réalisation ==&lt;br /&gt;
===Le Arduino===&lt;br /&gt;
====Architecture de l'objet communiquant====&lt;br /&gt;
&lt;br /&gt;
*Un Arduino Mega 2560&lt;br /&gt;
*Un XBee&lt;br /&gt;
*Un capteur de température&lt;br /&gt;
*Un capteur de luminosité&lt;br /&gt;
*Un accéléromètre (dont les valeurs ne seront pas utilisées mais qui devait servir d'appareil supplémentaire pour la problématique de consommation)&lt;br /&gt;
&lt;br /&gt;
====Le code du Arduino====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 &amp;lt;span style=&amp;quot;color: blue;&amp;quot;&amp;gt;#include&amp;lt;/span&amp;gt; &amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;XBee.h&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;// Define variables, pins..&amp;lt;/span&amp;gt;&lt;br /&gt;
 int sensorTempPin = 0;&lt;br /&gt;
 int Temp;&lt;br /&gt;
 int sensorLightPin = 1;&lt;br /&gt;
 int Light;&lt;br /&gt;
 int XPin = 2;&lt;br /&gt;
 int YPin = 3;&lt;br /&gt;
 int ZPin = 4;&lt;br /&gt;
 int XValue;&lt;br /&gt;
 int YValue;&lt;br /&gt;
 int ZValue;&lt;br /&gt;
 &lt;br /&gt;
 uint8_t values[] = { 0, 0, 0, 0 };&lt;br /&gt;
 XBee xbee =  &amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;XBee&amp;lt;/span&amp;gt;();&lt;br /&gt;
 XBeeResponse response = &amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;XBeeResponse&amp;lt;/span&amp;gt;();&lt;br /&gt;
 Rx16Response rx = &amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;Rx16Response&amp;lt;/span&amp;gt;();&lt;br /&gt;
 Tx16Request tx = &amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;Tx16Request&amp;lt;/span&amp;gt;(0x1111, values, &amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;sizeof&amp;lt;/span&amp;gt;(values));&lt;br /&gt;
 TxStatusResponse txStatus = &amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;TxStatusResponse&amp;lt;/span&amp;gt;();&lt;br /&gt;
 &lt;br /&gt;
  &amp;lt;span style=&amp;quot;color: blue;&amp;quot;&amp;gt;void&amp;lt;/span&amp;gt; &amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;setup&amp;lt;/span&amp;gt;()&lt;br /&gt;
 {&lt;br /&gt;
    &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;// Initialise xbee / serial&amp;lt;/span&amp;gt;&lt;br /&gt;
   xbee.&amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;begin&amp;lt;/span&amp;gt;(9600);&lt;br /&gt;
   Serial.&amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;begin&amp;lt;/span&amp;gt;(9600);&lt;br /&gt;
 } &lt;br /&gt;
 &lt;br /&gt;
  &amp;lt;span style=&amp;quot;color: blue;&amp;quot;&amp;gt;void&amp;lt;/span&amp;gt; &amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;loop&amp;lt;/span&amp;gt;()&lt;br /&gt;
 {&lt;br /&gt;
    &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;// Read the values on analog pins&amp;lt;/span&amp;gt;&lt;br /&gt;
   Light = &amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;analogRead&amp;lt;/span&amp;gt;(sensorLightPin);&lt;br /&gt;
   Temp = &amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;analogRead&amp;lt;/span&amp;gt;(sensorTempPin);&lt;br /&gt;
   XValue = &amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;analogRead&amp;lt;/span&amp;gt;(XPin);&lt;br /&gt;
   YValue = &amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;analogRead&amp;lt;/span&amp;gt;(YPin);&lt;br /&gt;
   ZValue = &amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;analogRead&amp;lt;/span&amp;gt;(ZPin);&lt;br /&gt;
 &lt;br /&gt;
   xbee.&amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;readPacket&amp;lt;/span&amp;gt;();&lt;br /&gt;
 &lt;br /&gt;
   if(xbee.&amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;getResponse&amp;lt;/span&amp;gt;().&amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;isAvailable&amp;lt;/span&amp;gt;()){&lt;br /&gt;
      &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;// Got something&amp;lt;/span&amp;gt;&lt;br /&gt;
     Serial.&amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;print&amp;lt;/span&amp;gt;(&amp;quot;Got something\n&amp;quot;);&lt;br /&gt;
      &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;// Break the 10-bits of information retrieved from light&amp;lt;/span&amp;gt;&lt;br /&gt;
      &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;// and temperature into 2 bytes for each.&amp;lt;/span&amp;gt;&lt;br /&gt;
     values[0] = Temp &amp;gt;&amp;gt; 8 &amp;amp; 0xff;&lt;br /&gt;
     values[1] = Temp &amp;amp; 0xff;&lt;br /&gt;
     values[2] = Light &amp;gt;&amp;gt; 8 &amp;amp; 0xff;&lt;br /&gt;
     values[3] = Light &amp;amp; 0xff;&lt;br /&gt;
     Serial.&amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;print&amp;lt;/span&amp;gt;(values[0]);&lt;br /&gt;
     &lt;br /&gt;
      &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;// Sending values to server&amp;lt;/span&amp;gt;&lt;br /&gt;
     xbee.&amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;send&amp;lt;/span&amp;gt;(tx);&lt;br /&gt;
     &lt;br /&gt;
      &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;// After sending a tx request, we expect a status response&amp;lt;/span&amp;gt;&lt;br /&gt;
      &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;// from the server&amp;lt;/span&amp;gt;&lt;br /&gt;
      &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;// Wait up to 5 seconds for the status response&amp;lt;/span&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
     if (xbee.&amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;readPacket&amp;lt;/span&amp;gt;(5000)) {&lt;br /&gt;
        &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;// We got a response!&amp;lt;/span&amp;gt;&lt;br /&gt;
       Serial.&amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;print&amp;lt;/span&amp;gt;(&amp;quot;We got a response\n&amp;quot;);&lt;br /&gt;
       &lt;br /&gt;
        &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;// It should be a znet tx status&amp;lt;/span&amp;gt;&lt;br /&gt;
       if (xbee.&amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;getResponse&amp;lt;/span&amp;gt;().&amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;getApiId&amp;lt;/span&amp;gt;() == TX_STATUS_RESPONSE) {&lt;br /&gt;
         xbee.&amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;getResponse&amp;lt;/span&amp;gt;().&amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;getZBTxStatusResponse&amp;lt;/span&amp;gt;(txStatus);&lt;br /&gt;
         &lt;br /&gt;
          &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;// get the delivery status, the fifth byte&amp;lt;/span&amp;gt;&lt;br /&gt;
         if (txStatus.&amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;getStatus&amp;lt;/span&amp;gt;() == SUCCESS){&lt;br /&gt;
            &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;// Success! Time to celebrate&amp;lt;/span&amp;gt;&lt;br /&gt;
           Serial.&amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;print&amp;lt;/span&amp;gt;(&amp;quot;SUCCESS! Time to celebrate\n&amp;quot;);&lt;br /&gt;
         } else {&lt;br /&gt;
           &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;// The remote XBee did not receive our packet. Is it powered on?&amp;lt;/span&amp;gt;&lt;br /&gt;
          Serial.&amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;print&amp;lt;/span&amp;gt;(&amp;quot;The remote Xbee did not receive our packet\n&amp;quot;);&lt;br /&gt;
         }&lt;br /&gt;
       }&lt;br /&gt;
     } else {&lt;br /&gt;
       &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;// local XBee did not provide a timely TX Status Response -- should not happen&amp;lt;/span&amp;gt;&lt;br /&gt;
      Serial.&amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;print&amp;lt;/span&amp;gt;(&amp;quot;Local Xbee did not provide a timely TX Status Response\n&amp;quot;);&lt;br /&gt;
     }&lt;br /&gt;
     &lt;br /&gt;
   }&lt;br /&gt;
  &lt;br /&gt;
   &amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;delay&amp;lt;/span&amp;gt;(500);&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
Ce code fonctionne de la manière suivante:&lt;br /&gt;
=====Fonction &amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;setup&amp;lt;/span&amp;gt;():=====&lt;br /&gt;
Une fois implémenté sur le Arduino, la fonction setup va faire démarrer le protocole XBee et le protocole Série afin de pouvoir envoyer et recevoir des messages par XBee, et d'imprimer les messages d'erreur sur le port Série s'il y a lieu.&lt;br /&gt;
=====Fonction &amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;loop&amp;lt;/span&amp;gt;():=====&lt;br /&gt;
&lt;br /&gt;
===le programme LINKER===&lt;br /&gt;
&lt;br /&gt;
Code du programme de liaison&lt;br /&gt;
&lt;br /&gt;
ce programme en java est constitué de 5 classes&lt;br /&gt;
&lt;br /&gt;
====Le Main====&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 public class main {&lt;br /&gt;
 &lt;br /&gt;
 	public static SQLinker linker;&lt;br /&gt;
 	public static Xbee xbee;&lt;br /&gt;
 	&lt;br /&gt;
 	public static void main(String[] args){&lt;br /&gt;
 		String address = new String(&amp;quot;jdbc:mysql://sitedb.polytech-lille.net/cdelberg?&amp;quot;);&lt;br /&gt;
 		String user = new String(&amp;quot;user=cdelberg&amp;amp;password=myLo9ufonese&amp;quot;);&lt;br /&gt;
 		String COM;&lt;br /&gt;
 		&lt;br /&gt;
 &lt;br /&gt;
                 &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;// We ask the user on the Communication Port to connect the XBee&amp;lt;/span&amp;gt;&lt;br /&gt;
 		System.out.println(&amp;quot;Please enter the Communication port of the Xbee&amp;quot;);&lt;br /&gt;
 		Scanner sc = new Scanner(System.in);&lt;br /&gt;
 		COM = sc.next();&lt;br /&gt;
 		System.out.println(&amp;quot;COM port changed to: &amp;quot;+COM);&lt;br /&gt;
 		&lt;br /&gt;
                 &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;//Creation of the Variables that will be used to connect to the Database and the Xbee&amp;lt;/span&amp;gt;&lt;br /&gt;
 		linker = new SQLinker(address, user);&lt;br /&gt;
 		linker.FillArdList();	&lt;br /&gt;
 		xbee = new Xbee(COM);&lt;br /&gt;
 		&lt;br /&gt;
                 &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;//Creating the Updates Threads&amp;lt;/span&amp;gt;&lt;br /&gt;
 		W8Thread thread1 = new W8Thread();&lt;br /&gt;
 		thread1.start();&lt;br /&gt;
 		UpTestThread thread2 = new UpTestThread();&lt;br /&gt;
 		thread2.start();&lt;br /&gt;
 		&lt;br /&gt;
                 &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;//We now allow the user to enter a command&amp;lt;/span&amp;gt;&lt;br /&gt;
 		String command;&lt;br /&gt;
 		System.out.println(&amp;quot;vous pouvez maintenant lancer une commande si vous le souhaitez&amp;quot;);&lt;br /&gt;
 		System.out.println(&amp;quot;tapez help pour plus d'informations&amp;quot;);&lt;br /&gt;
 		boolean exit=false;&lt;br /&gt;
 		&lt;br /&gt;
 		while(exit==false){&lt;br /&gt;
 			command=sc.next();&lt;br /&gt;
 			&lt;br /&gt;
 			if(command.equals(&amp;quot;help&amp;quot;)){&lt;br /&gt;
 				System.out.println(&amp;quot;print =&amp;gt; affiche la liste des arduinos&amp;quot;);&lt;br /&gt;
 				System.out.println(&amp;quot;exit =&amp;gt; ferme le programme&amp;quot;);&lt;br /&gt;
 			}&lt;br /&gt;
 			if(command.equals(&amp;quot;print&amp;quot;)){linker.PrintArdList();}&lt;br /&gt;
 			if(command.equals(&amp;quot;exit&amp;quot;)){exit=true;}&lt;br /&gt;
 		&lt;br /&gt;
 		}&lt;br /&gt;
 		&amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;//if the user ask to stop the program, it will do those final commands&amp;lt;/span&amp;gt;&lt;br /&gt;
 		sc.close();&lt;br /&gt;
 		thread1.stop();&lt;br /&gt;
 		thread2.stop();&lt;br /&gt;
 		xbee.XbeeClosing();	&lt;br /&gt;
 		//System.out.println(&amp;quot;Program finished successfully&amp;quot;);&lt;br /&gt;
 		&lt;br /&gt;
 	}&lt;br /&gt;
 &lt;br /&gt;
 } &lt;br /&gt;
 &lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Liste du matériel à acheter ===&lt;/div&gt;</summary>
		<author><name>Cdelberg</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=Objets_communiquants_et_gestion_de_l%27%C3%A9nergie&amp;diff=4162</id>
		<title>Objets communiquants et gestion de l'énergie</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=Objets_communiquants_et_gestion_de_l%27%C3%A9nergie&amp;diff=4162"/>
				<updated>2013-02-22T15:29:12Z</updated>
		
		<summary type="html">&lt;p&gt;Cdelberg : /* Le Arduino */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Présentation du projet ==&lt;br /&gt;
&lt;br /&gt;
=== Planning prévisionnel provisoire (jusqu'à la pré-soutenance)===&lt;br /&gt;
&lt;br /&gt;
Ce planning pourrait être amené à être modifié.&lt;br /&gt;
&lt;br /&gt;
'''''I) Etat de l'art''''' ( ~2-3 semaines)&lt;br /&gt;
&lt;br /&gt;
-Energy harvesting (Calvin)&lt;br /&gt;
&lt;br /&gt;
-Batteries (Justin)&lt;br /&gt;
&lt;br /&gt;
'''''II) Mesure de puissance des différents appareil Arduino''''' ( ~2 semaines)&lt;br /&gt;
&lt;br /&gt;
'''''III) Confronter théorie/réalité''''' ( ~1 semaine)&lt;br /&gt;
-estimer consommation de puissance&lt;br /&gt;
&lt;br /&gt;
-vérifier en pratique&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Amené à être ajouté:'''&lt;br /&gt;
&lt;br /&gt;
Mesure du Arduino de sa propre consommation.&lt;br /&gt;
&lt;br /&gt;
Mesure de la consommation du code (?)&lt;br /&gt;
&lt;br /&gt;
Applications:&lt;br /&gt;
&lt;br /&gt;
-Envoi des valeurs de l'Arduino au serveur.&lt;br /&gt;
&lt;br /&gt;
-Interface web pour interagir avec l'objet.&lt;br /&gt;
&lt;br /&gt;
== Etat de l'art ==&lt;br /&gt;
&lt;br /&gt;
=== Energy Harvesting ===&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
* Mosquino:&lt;br /&gt;
&lt;br /&gt;
''Mosquino'' est un matériel compatible avec le développement logiciel et dérivé de ''Arduino'', il permet de récupérer de l'énergie des sources ambiantes (chaleur, luminosité, vibrations)&lt;br /&gt;
Il n'est destiné qu'aux faibles consommations électriques et n'est encore qu'en phase de développement, il n'a pas encore été véritablement testé. &amp;lt;br/&amp;gt;&lt;br /&gt;
http://tim.cexx.org/?page_id=760&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
* Breakout board BOB-o&amp;lt;sub&amp;gt;994&amp;lt;/sub&amp;gt;6 :&lt;br /&gt;
&lt;br /&gt;
Cette carte utilise le collecteur d'énergie piezoelectrique LTC&amp;lt;sub&amp;gt;35&amp;lt;/sub&amp;gt;88 de Linear Technologies et permet non seulement de récupérer l'énergie piezoélectrique mais aussi l'énergie solaire. Initialement prévu pour fonctionner à faible voltage, la capacité de sortie peut-être dimensionnée pour recevoir une salve de courant de sortie plus élevée. &amp;lt;br/&amp;gt;&lt;br /&gt;
https://www.sparkfun.com/products/9946&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
=== Batteries ===&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
* nouvelles technologies: &lt;br /&gt;
&lt;br /&gt;
ces dernières années, de nouvelles technologies sont apparues, sans être encore réellement utilisées. je pense notamment aux batteries contenues dans des câbles: &lt;br /&gt;
http://phys.org/news/2012-09-lg-chem-cable-batteries-reshape.html&lt;br /&gt;
&lt;br /&gt;
ainsi qu'aux batteries ultra fines dévellopées par thinergy: &lt;br /&gt;
http://www.infinitepowersolutions.com/products.html&lt;br /&gt;
&lt;br /&gt;
Néanmoins, les tensions pouvant etre délivrées par ces technologies naissantes sont loin de pouvoir alimenter le materiel qui nous interresse, à savoir des Arduino (necessitant une alimentation comprise entre 7V-12V)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
D'autres techno sont encore en phase de développement, comme les batteries lithium-Air d'IBM, les piles au graphène utilisant la chaleur pour produire de l’énergie (plutôt de l'energy harvesting pour le coup). Comme ces technologies sont encore en phase de développement, elles n’apparaîtrons pas sur le marché avant au moins 10 ans.&lt;br /&gt;
&lt;br /&gt;
http://www.metro.co.uk/tech/news/897731-technology-companies-charge-towards-next-generation-battery-future&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* technologies adaptée à notre usage:&lt;br /&gt;
&lt;br /&gt;
comme je l'ai rappelé plus haut, ce PFE tourne principalement autour d'Arduino. ces plates-formes nécessitant une tension d'alimentation supérieure à 7V, le choix le plus intéressant reste les piles rechargeable.&lt;br /&gt;
&lt;br /&gt;
Seulement, il existe plusieurs types de piles rechargeables. dans l'usage qu'il en sera fait, et si ces batteries sont couplées à des technologies de récupération d'énergie, il est important de choisir des piles Lithium-Ion.&lt;br /&gt;
&lt;br /&gt;
En effet, ces piles sont les plus intéressantes pour plusieurs raisons:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
tout d'abord, elles sont insensibles à l'effet mémoire. du coup elles ne perdent pas de leur capacité de stockage d’énergie au cours du temps.&lt;br /&gt;
&lt;br /&gt;
le circuit intégré à ces piles empêche toute surtension lors de la charge.&lt;br /&gt;
&lt;br /&gt;
elles peuvent être rechargée en même temps qu'elles sont utilisées.&lt;br /&gt;
&lt;br /&gt;
dans une époque ou la pollution est un sujet préoccupation, ces piles sont moins dangereuse pour l’environnement que leurs homologues au nickel-Cadmium&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
le seul problème pourrais venir du fait qu'elles ne supporte pas bien la chaleur, mais à moins de les coller à un radiateur, il ne devrais pas y avoir de soucis.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Mesure de la consommation énergétique ===&lt;br /&gt;
&lt;br /&gt;
WSIM permet la simulation de capteurs sans fil. Il permet notamment d'estimer la consommation électrique http://wsim.gforge.inria.fr/index.html&lt;br /&gt;
Pour l'instant il ne fonctionne qu'avec des microcontrolleurs TI. Le support des AVR est en cours.&lt;br /&gt;
L'estimation de la consommation énergétique utilise esimu http://esimu.gforge.inria.fr/index.html&lt;br /&gt;
&lt;br /&gt;
== Réalisation ==&lt;br /&gt;
===Le Arduino===&lt;br /&gt;
====Architecture de l'objet communiquant====&lt;br /&gt;
&lt;br /&gt;
*Un Arduino Mega 2560&lt;br /&gt;
*Un XBee&lt;br /&gt;
*Un capteur de température&lt;br /&gt;
*Un capteur de luminosité&lt;br /&gt;
*Un accéléromètre (dont les valeurs ne seront pas utilisées mais qui devait servir d'appareil supplémentaire pour la problématique de consommation)&lt;br /&gt;
&lt;br /&gt;
====Le code du Arduino====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 &amp;lt;span style=&amp;quot;color: blue;&amp;quot;&amp;gt;#include&amp;lt;/span&amp;gt; &amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;XBee.h&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;// Define variables, pins..&amp;lt;/span&amp;gt;&lt;br /&gt;
 int sensorTempPin = 0;&lt;br /&gt;
 int Temp;&lt;br /&gt;
 int sensorLightPin = 1;&lt;br /&gt;
 int Light;&lt;br /&gt;
 int XPin = 2;&lt;br /&gt;
 int YPin = 3;&lt;br /&gt;
 int ZPin = 4;&lt;br /&gt;
 int XValue;&lt;br /&gt;
 int YValue;&lt;br /&gt;
 int ZValue;&lt;br /&gt;
 &lt;br /&gt;
 uint8_t values[] = { 0, 0, 0, 0 };&lt;br /&gt;
 XBee xbee =  &amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;XBee&amp;lt;/span&amp;gt;();&lt;br /&gt;
 XBeeResponse response = &amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;XBeeResponse&amp;lt;/span&amp;gt;();&lt;br /&gt;
 Rx16Response rx = &amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;Rx16Response&amp;lt;/span&amp;gt;();&lt;br /&gt;
 Tx16Request tx = &amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;Tx16Request&amp;lt;/span&amp;gt;(0x1111, values, &amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;sizeof&amp;lt;/span&amp;gt;(values));&lt;br /&gt;
 TxStatusResponse txStatus = &amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;TxStatusResponse&amp;lt;/span&amp;gt;();&lt;br /&gt;
 &lt;br /&gt;
  &amp;lt;span style=&amp;quot;color: blue;&amp;quot;&amp;gt;void&amp;lt;/span&amp;gt; &amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;setup&amp;lt;/span&amp;gt;()&lt;br /&gt;
 {&lt;br /&gt;
    &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;// Initialise xbee / serial&amp;lt;/span&amp;gt;&lt;br /&gt;
   xbee.&amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;begin&amp;lt;/span&amp;gt;(9600);&lt;br /&gt;
   Serial.&amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;begin&amp;lt;/span&amp;gt;(9600);&lt;br /&gt;
 } &lt;br /&gt;
 &lt;br /&gt;
  &amp;lt;span style=&amp;quot;color: blue;&amp;quot;&amp;gt;void&amp;lt;/span&amp;gt; &amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;loop&amp;lt;/span&amp;gt;()&lt;br /&gt;
 {&lt;br /&gt;
    &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;// Read the values on analog pins&amp;lt;/span&amp;gt;&lt;br /&gt;
   Light = &amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;analogRead&amp;lt;/span&amp;gt;(sensorLightPin);&lt;br /&gt;
   Temp = &amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;analogRead&amp;lt;/span&amp;gt;(sensorTempPin);&lt;br /&gt;
   XValue = &amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;analogRead&amp;lt;/span&amp;gt;(XPin);&lt;br /&gt;
   YValue = &amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;analogRead&amp;lt;/span&amp;gt;(YPin);&lt;br /&gt;
   ZValue = &amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;analogRead&amp;lt;/span&amp;gt;(ZPin);&lt;br /&gt;
 &lt;br /&gt;
   xbee.&amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;readPacket&amp;lt;/span&amp;gt;();&lt;br /&gt;
 &lt;br /&gt;
   if(xbee.&amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;getResponse&amp;lt;/span&amp;gt;().&amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;isAvailable&amp;lt;/span&amp;gt;()){&lt;br /&gt;
      &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;// Got something&amp;lt;/span&amp;gt;&lt;br /&gt;
     Serial.&amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;print&amp;lt;/span&amp;gt;(&amp;quot;Got something\n&amp;quot;);&lt;br /&gt;
      &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;// Break the 10-bits of information retrieved from light&amp;lt;/span&amp;gt;&lt;br /&gt;
      &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;// and temperature into 2 bytes for each.&amp;lt;/span&amp;gt;&lt;br /&gt;
     values[0] = Temp &amp;gt;&amp;gt; 8 &amp;amp; 0xff;&lt;br /&gt;
     values[1] = Temp &amp;amp; 0xff;&lt;br /&gt;
     values[2] = Light &amp;gt;&amp;gt; 8 &amp;amp; 0xff;&lt;br /&gt;
     values[3] = Light &amp;amp; 0xff;&lt;br /&gt;
     Serial.&amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;print&amp;lt;/span&amp;gt;(values[0]);&lt;br /&gt;
     &lt;br /&gt;
      &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;// Sending values to server&amp;lt;/span&amp;gt;&lt;br /&gt;
     xbee.&amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;send&amp;lt;/span&amp;gt;(tx);&lt;br /&gt;
     &lt;br /&gt;
      &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;// After sending a tx request, we expect a status response&amp;lt;/span&amp;gt;&lt;br /&gt;
      &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;// from the server&amp;lt;/span&amp;gt;&lt;br /&gt;
      &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;// Wait up to 5 seconds for the status response&amp;lt;/span&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
     if (xbee.&amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;readPacket&amp;lt;/span&amp;gt;(5000)) {&lt;br /&gt;
        &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;// We got a response!&amp;lt;/span&amp;gt;&lt;br /&gt;
       Serial.&amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;print&amp;lt;/span&amp;gt;(&amp;quot;We got a response\n&amp;quot;);&lt;br /&gt;
       &lt;br /&gt;
        &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;// It should be a znet tx status&amp;lt;/span&amp;gt;&lt;br /&gt;
       if (xbee.&amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;getResponse&amp;lt;/span&amp;gt;().&amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;getApiId&amp;lt;/span&amp;gt;() == TX_STATUS_RESPONSE) {&lt;br /&gt;
         xbee.&amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;getResponse&amp;lt;/span&amp;gt;().&amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;getZBTxStatusResponse&amp;lt;/span&amp;gt;(txStatus);&lt;br /&gt;
         &lt;br /&gt;
          &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;// get the delivery status, the fifth byte&amp;lt;/span&amp;gt;&lt;br /&gt;
         if (txStatus.&amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;getStatus&amp;lt;/span&amp;gt;() == SUCCESS){&lt;br /&gt;
            &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;// Success! Time to celebrate&amp;lt;/span&amp;gt;&lt;br /&gt;
           Serial.&amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;print&amp;lt;/span&amp;gt;(&amp;quot;SUCCESS! Time to celebrate\n&amp;quot;);&lt;br /&gt;
         } else {&lt;br /&gt;
           &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;// The remote XBee did not receive our packet. Is it powered on?&amp;lt;/span&amp;gt;&lt;br /&gt;
          Serial.&amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;print&amp;lt;/span&amp;gt;(&amp;quot;The remote Xbee did not receive our packet\n&amp;quot;);&lt;br /&gt;
         }&lt;br /&gt;
       }&lt;br /&gt;
     } else {&lt;br /&gt;
       &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;// local XBee did not provide a timely TX Status Response -- should not happen&amp;lt;/span&amp;gt;&lt;br /&gt;
      Serial.&amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;print&amp;lt;/span&amp;gt;(&amp;quot;Local Xbee did not provide a timely TX Status Response\n&amp;quot;);&lt;br /&gt;
     }&lt;br /&gt;
     &lt;br /&gt;
   }&lt;br /&gt;
  &lt;br /&gt;
   &amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;delay&amp;lt;/span&amp;gt;(500);&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
====Ce code fonctionne de la manière suivante:====&lt;br /&gt;
=====Fonction &amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;setup&amp;lt;/span&amp;gt;():=====&lt;br /&gt;
Une fois implémenté sur le Arduino, la fonction setup va faire démarrer le protocole XBee et le protocole Série afin de pouvoir envoyer et recevoir des messages par XBee, et d'imprimer les messages d'erreur sur le port Série s'il y a lieu.&lt;br /&gt;
=====Fonction &amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;loop&amp;lt;/span&amp;gt;():=====&lt;br /&gt;
&lt;br /&gt;
===le programme LINKER===&lt;br /&gt;
&lt;br /&gt;
Code du programme de liaison&lt;br /&gt;
&lt;br /&gt;
ce programme en java est constitué de 5 classes&lt;br /&gt;
&lt;br /&gt;
====Le Main====&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 public class main {&lt;br /&gt;
 &lt;br /&gt;
 	public static SQLinker linker;&lt;br /&gt;
 	public static Xbee xbee;&lt;br /&gt;
 	&lt;br /&gt;
 	public static void main(String[] args){&lt;br /&gt;
 		String address = new String(&amp;quot;jdbc:mysql://sitedb.polytech-lille.net/cdelberg?&amp;quot;);&lt;br /&gt;
 		String user = new String(&amp;quot;user=cdelberg&amp;amp;password=myLo9ufonese&amp;quot;);&lt;br /&gt;
 		String COM;&lt;br /&gt;
 		&lt;br /&gt;
 &lt;br /&gt;
                 &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;// We ask the user on the Communication Port to connect the XBee&amp;lt;/span&amp;gt;&lt;br /&gt;
 		System.out.println(&amp;quot;Please enter the Communication port of the Xbee&amp;quot;);&lt;br /&gt;
 		Scanner sc = new Scanner(System.in);&lt;br /&gt;
 		COM = sc.next();&lt;br /&gt;
 		System.out.println(&amp;quot;COM port changed to: &amp;quot;+COM);&lt;br /&gt;
 		&lt;br /&gt;
                 &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;//Creation of the Variables that will be used to connect to the Database and the Xbee&amp;lt;/span&amp;gt;&lt;br /&gt;
 		linker = new SQLinker(address, user);&lt;br /&gt;
 		linker.FillArdList();	&lt;br /&gt;
 		xbee = new Xbee(COM);&lt;br /&gt;
 		&lt;br /&gt;
                 &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;//Creating the Updates Threads&amp;lt;/span&amp;gt;&lt;br /&gt;
 		W8Thread thread1 = new W8Thread();&lt;br /&gt;
 		thread1.start();&lt;br /&gt;
 		UpTestThread thread2 = new UpTestThread();&lt;br /&gt;
 		thread2.start();&lt;br /&gt;
 		&lt;br /&gt;
                 &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;//We now allow the user to enter a command&amp;lt;/span&amp;gt;&lt;br /&gt;
 		String command;&lt;br /&gt;
 		System.out.println(&amp;quot;vous pouvez maintenant lancer une commande si vous le souhaitez&amp;quot;);&lt;br /&gt;
 		System.out.println(&amp;quot;tapez help pour plus d'informations&amp;quot;);&lt;br /&gt;
 		boolean exit=false;&lt;br /&gt;
 		&lt;br /&gt;
 		while(exit==false){&lt;br /&gt;
 			command=sc.next();&lt;br /&gt;
 			&lt;br /&gt;
 			if(command.equals(&amp;quot;help&amp;quot;)){&lt;br /&gt;
 				System.out.println(&amp;quot;print =&amp;gt; affiche la liste des arduinos&amp;quot;);&lt;br /&gt;
 				System.out.println(&amp;quot;exit =&amp;gt; ferme le programme&amp;quot;);&lt;br /&gt;
 			}&lt;br /&gt;
 			if(command.equals(&amp;quot;print&amp;quot;)){linker.PrintArdList();}&lt;br /&gt;
 			if(command.equals(&amp;quot;exit&amp;quot;)){exit=true;}&lt;br /&gt;
 		&lt;br /&gt;
 		}&lt;br /&gt;
 		&amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;//if the user ask to stop the program, it will do those final commands&amp;lt;/span&amp;gt;&lt;br /&gt;
 		sc.close();&lt;br /&gt;
 		thread1.stop();&lt;br /&gt;
 		thread2.stop();&lt;br /&gt;
 		xbee.XbeeClosing();	&lt;br /&gt;
 		//System.out.println(&amp;quot;Program finished successfully&amp;quot;);&lt;br /&gt;
 		&lt;br /&gt;
 	}&lt;br /&gt;
 &lt;br /&gt;
 } &lt;br /&gt;
 &lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Liste du matériel à acheter ===&lt;/div&gt;</summary>
		<author><name>Cdelberg</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=Objets_communiquants_et_gestion_de_l%27%C3%A9nergie&amp;diff=4161</id>
		<title>Objets communiquants et gestion de l'énergie</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=Objets_communiquants_et_gestion_de_l%27%C3%A9nergie&amp;diff=4161"/>
				<updated>2013-02-22T15:28:30Z</updated>
		
		<summary type="html">&lt;p&gt;Cdelberg : /* Le Arduino */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Présentation du projet ==&lt;br /&gt;
&lt;br /&gt;
=== Planning prévisionnel provisoire (jusqu'à la pré-soutenance)===&lt;br /&gt;
&lt;br /&gt;
Ce planning pourrait être amené à être modifié.&lt;br /&gt;
&lt;br /&gt;
'''''I) Etat de l'art''''' ( ~2-3 semaines)&lt;br /&gt;
&lt;br /&gt;
-Energy harvesting (Calvin)&lt;br /&gt;
&lt;br /&gt;
-Batteries (Justin)&lt;br /&gt;
&lt;br /&gt;
'''''II) Mesure de puissance des différents appareil Arduino''''' ( ~2 semaines)&lt;br /&gt;
&lt;br /&gt;
'''''III) Confronter théorie/réalité''''' ( ~1 semaine)&lt;br /&gt;
-estimer consommation de puissance&lt;br /&gt;
&lt;br /&gt;
-vérifier en pratique&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Amené à être ajouté:'''&lt;br /&gt;
&lt;br /&gt;
Mesure du Arduino de sa propre consommation.&lt;br /&gt;
&lt;br /&gt;
Mesure de la consommation du code (?)&lt;br /&gt;
&lt;br /&gt;
Applications:&lt;br /&gt;
&lt;br /&gt;
-Envoi des valeurs de l'Arduino au serveur.&lt;br /&gt;
&lt;br /&gt;
-Interface web pour interagir avec l'objet.&lt;br /&gt;
&lt;br /&gt;
== Etat de l'art ==&lt;br /&gt;
&lt;br /&gt;
=== Energy Harvesting ===&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
* Mosquino:&lt;br /&gt;
&lt;br /&gt;
''Mosquino'' est un matériel compatible avec le développement logiciel et dérivé de ''Arduino'', il permet de récupérer de l'énergie des sources ambiantes (chaleur, luminosité, vibrations)&lt;br /&gt;
Il n'est destiné qu'aux faibles consommations électriques et n'est encore qu'en phase de développement, il n'a pas encore été véritablement testé. &amp;lt;br/&amp;gt;&lt;br /&gt;
http://tim.cexx.org/?page_id=760&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
* Breakout board BOB-o&amp;lt;sub&amp;gt;994&amp;lt;/sub&amp;gt;6 :&lt;br /&gt;
&lt;br /&gt;
Cette carte utilise le collecteur d'énergie piezoelectrique LTC&amp;lt;sub&amp;gt;35&amp;lt;/sub&amp;gt;88 de Linear Technologies et permet non seulement de récupérer l'énergie piezoélectrique mais aussi l'énergie solaire. Initialement prévu pour fonctionner à faible voltage, la capacité de sortie peut-être dimensionnée pour recevoir une salve de courant de sortie plus élevée. &amp;lt;br/&amp;gt;&lt;br /&gt;
https://www.sparkfun.com/products/9946&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
=== Batteries ===&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
* nouvelles technologies: &lt;br /&gt;
&lt;br /&gt;
ces dernières années, de nouvelles technologies sont apparues, sans être encore réellement utilisées. je pense notamment aux batteries contenues dans des câbles: &lt;br /&gt;
http://phys.org/news/2012-09-lg-chem-cable-batteries-reshape.html&lt;br /&gt;
&lt;br /&gt;
ainsi qu'aux batteries ultra fines dévellopées par thinergy: &lt;br /&gt;
http://www.infinitepowersolutions.com/products.html&lt;br /&gt;
&lt;br /&gt;
Néanmoins, les tensions pouvant etre délivrées par ces technologies naissantes sont loin de pouvoir alimenter le materiel qui nous interresse, à savoir des Arduino (necessitant une alimentation comprise entre 7V-12V)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
D'autres techno sont encore en phase de développement, comme les batteries lithium-Air d'IBM, les piles au graphène utilisant la chaleur pour produire de l’énergie (plutôt de l'energy harvesting pour le coup). Comme ces technologies sont encore en phase de développement, elles n’apparaîtrons pas sur le marché avant au moins 10 ans.&lt;br /&gt;
&lt;br /&gt;
http://www.metro.co.uk/tech/news/897731-technology-companies-charge-towards-next-generation-battery-future&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* technologies adaptée à notre usage:&lt;br /&gt;
&lt;br /&gt;
comme je l'ai rappelé plus haut, ce PFE tourne principalement autour d'Arduino. ces plates-formes nécessitant une tension d'alimentation supérieure à 7V, le choix le plus intéressant reste les piles rechargeable.&lt;br /&gt;
&lt;br /&gt;
Seulement, il existe plusieurs types de piles rechargeables. dans l'usage qu'il en sera fait, et si ces batteries sont couplées à des technologies de récupération d'énergie, il est important de choisir des piles Lithium-Ion.&lt;br /&gt;
&lt;br /&gt;
En effet, ces piles sont les plus intéressantes pour plusieurs raisons:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
tout d'abord, elles sont insensibles à l'effet mémoire. du coup elles ne perdent pas de leur capacité de stockage d’énergie au cours du temps.&lt;br /&gt;
&lt;br /&gt;
le circuit intégré à ces piles empêche toute surtension lors de la charge.&lt;br /&gt;
&lt;br /&gt;
elles peuvent être rechargée en même temps qu'elles sont utilisées.&lt;br /&gt;
&lt;br /&gt;
dans une époque ou la pollution est un sujet préoccupation, ces piles sont moins dangereuse pour l’environnement que leurs homologues au nickel-Cadmium&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
le seul problème pourrais venir du fait qu'elles ne supporte pas bien la chaleur, mais à moins de les coller à un radiateur, il ne devrais pas y avoir de soucis.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Mesure de la consommation énergétique ===&lt;br /&gt;
&lt;br /&gt;
WSIM permet la simulation de capteurs sans fil. Il permet notamment d'estimer la consommation électrique http://wsim.gforge.inria.fr/index.html&lt;br /&gt;
Pour l'instant il ne fonctionne qu'avec des microcontrolleurs TI. Le support des AVR est en cours.&lt;br /&gt;
L'estimation de la consommation énergétique utilise esimu http://esimu.gforge.inria.fr/index.html&lt;br /&gt;
&lt;br /&gt;
== Réalisation ==&lt;br /&gt;
===Le Arduino===&lt;br /&gt;
====Architecture de l'objet communiquant====&lt;br /&gt;
&lt;br /&gt;
*Un Arduino Mega 2560&lt;br /&gt;
*Un XBee&lt;br /&gt;
*Un capteur de température&lt;br /&gt;
*Un capteur de luminosité&lt;br /&gt;
*Un accéléromètre (dont les valeurs ne seront pas utilisées mais qui devait servir d'appareil supplémentaire pour la problématique de consommation)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 &amp;lt;span style=&amp;quot;color: blue;&amp;quot;&amp;gt;#include&amp;lt;/span&amp;gt; &amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;XBee.h&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;// Define variables, pins..&amp;lt;/span&amp;gt;&lt;br /&gt;
 int sensorTempPin = 0;&lt;br /&gt;
 int Temp;&lt;br /&gt;
 int sensorLightPin = 1;&lt;br /&gt;
 int Light;&lt;br /&gt;
 int XPin = 2;&lt;br /&gt;
 int YPin = 3;&lt;br /&gt;
 int ZPin = 4;&lt;br /&gt;
 int XValue;&lt;br /&gt;
 int YValue;&lt;br /&gt;
 int ZValue;&lt;br /&gt;
 &lt;br /&gt;
 uint8_t values[] = { 0, 0, 0, 0 };&lt;br /&gt;
 XBee xbee =  &amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;XBee&amp;lt;/span&amp;gt;();&lt;br /&gt;
 XBeeResponse response = &amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;XBeeResponse&amp;lt;/span&amp;gt;();&lt;br /&gt;
 Rx16Response rx = &amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;Rx16Response&amp;lt;/span&amp;gt;();&lt;br /&gt;
 Tx16Request tx = &amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;Tx16Request&amp;lt;/span&amp;gt;(0x1111, values, &amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;sizeof&amp;lt;/span&amp;gt;(values));&lt;br /&gt;
 TxStatusResponse txStatus = &amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;TxStatusResponse&amp;lt;/span&amp;gt;();&lt;br /&gt;
 &lt;br /&gt;
  &amp;lt;span style=&amp;quot;color: blue;&amp;quot;&amp;gt;void&amp;lt;/span&amp;gt; &amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;setup&amp;lt;/span&amp;gt;()&lt;br /&gt;
 {&lt;br /&gt;
    &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;// Initialise xbee / serial&amp;lt;/span&amp;gt;&lt;br /&gt;
   xbee.&amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;begin&amp;lt;/span&amp;gt;(9600);&lt;br /&gt;
   Serial.&amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;begin&amp;lt;/span&amp;gt;(9600);&lt;br /&gt;
 } &lt;br /&gt;
 &lt;br /&gt;
  &amp;lt;span style=&amp;quot;color: blue;&amp;quot;&amp;gt;void&amp;lt;/span&amp;gt; &amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;loop&amp;lt;/span&amp;gt;()&lt;br /&gt;
 {&lt;br /&gt;
    &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;// Read the values on analog pins&amp;lt;/span&amp;gt;&lt;br /&gt;
   Light = &amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;analogRead&amp;lt;/span&amp;gt;(sensorLightPin);&lt;br /&gt;
   Temp = &amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;analogRead&amp;lt;/span&amp;gt;(sensorTempPin);&lt;br /&gt;
   XValue = &amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;analogRead&amp;lt;/span&amp;gt;(XPin);&lt;br /&gt;
   YValue = &amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;analogRead&amp;lt;/span&amp;gt;(YPin);&lt;br /&gt;
   ZValue = &amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;analogRead&amp;lt;/span&amp;gt;(ZPin);&lt;br /&gt;
 &lt;br /&gt;
   xbee.&amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;readPacket&amp;lt;/span&amp;gt;();&lt;br /&gt;
 &lt;br /&gt;
   if(xbee.&amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;getResponse&amp;lt;/span&amp;gt;().&amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;isAvailable&amp;lt;/span&amp;gt;()){&lt;br /&gt;
      &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;// Got something&amp;lt;/span&amp;gt;&lt;br /&gt;
     Serial.&amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;print&amp;lt;/span&amp;gt;(&amp;quot;Got something\n&amp;quot;);&lt;br /&gt;
      &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;// Break the 10-bits of information retrieved from light&amp;lt;/span&amp;gt;&lt;br /&gt;
      &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;// and temperature into 2 bytes for each.&amp;lt;/span&amp;gt;&lt;br /&gt;
     values[0] = Temp &amp;gt;&amp;gt; 8 &amp;amp; 0xff;&lt;br /&gt;
     values[1] = Temp &amp;amp; 0xff;&lt;br /&gt;
     values[2] = Light &amp;gt;&amp;gt; 8 &amp;amp; 0xff;&lt;br /&gt;
     values[3] = Light &amp;amp; 0xff;&lt;br /&gt;
     Serial.&amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;print&amp;lt;/span&amp;gt;(values[0]);&lt;br /&gt;
     &lt;br /&gt;
      &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;// Sending values to server&amp;lt;/span&amp;gt;&lt;br /&gt;
     xbee.&amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;send&amp;lt;/span&amp;gt;(tx);&lt;br /&gt;
     &lt;br /&gt;
      &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;// After sending a tx request, we expect a status response&amp;lt;/span&amp;gt;&lt;br /&gt;
      &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;// from the server&amp;lt;/span&amp;gt;&lt;br /&gt;
      &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;// Wait up to 5 seconds for the status response&amp;lt;/span&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
     if (xbee.&amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;readPacket&amp;lt;/span&amp;gt;(5000)) {&lt;br /&gt;
        &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;// We got a response!&amp;lt;/span&amp;gt;&lt;br /&gt;
       Serial.&amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;print&amp;lt;/span&amp;gt;(&amp;quot;We got a response\n&amp;quot;);&lt;br /&gt;
       &lt;br /&gt;
        &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;// It should be a znet tx status&amp;lt;/span&amp;gt;&lt;br /&gt;
       if (xbee.&amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;getResponse&amp;lt;/span&amp;gt;().&amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;getApiId&amp;lt;/span&amp;gt;() == TX_STATUS_RESPONSE) {&lt;br /&gt;
         xbee.&amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;getResponse&amp;lt;/span&amp;gt;().&amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;getZBTxStatusResponse&amp;lt;/span&amp;gt;(txStatus);&lt;br /&gt;
         &lt;br /&gt;
          &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;// get the delivery status, the fifth byte&amp;lt;/span&amp;gt;&lt;br /&gt;
         if (txStatus.&amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;getStatus&amp;lt;/span&amp;gt;() == SUCCESS){&lt;br /&gt;
            &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;// Success! Time to celebrate&amp;lt;/span&amp;gt;&lt;br /&gt;
           Serial.&amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;print&amp;lt;/span&amp;gt;(&amp;quot;SUCCESS! Time to celebrate\n&amp;quot;);&lt;br /&gt;
         } else {&lt;br /&gt;
           &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;// The remote XBee did not receive our packet. Is it powered on?&amp;lt;/span&amp;gt;&lt;br /&gt;
          Serial.&amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;print&amp;lt;/span&amp;gt;(&amp;quot;The remote Xbee did not receive our packet\n&amp;quot;);&lt;br /&gt;
         }&lt;br /&gt;
       }&lt;br /&gt;
     } else {&lt;br /&gt;
       &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;// local XBee did not provide a timely TX Status Response -- should not happen&amp;lt;/span&amp;gt;&lt;br /&gt;
      Serial.&amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;print&amp;lt;/span&amp;gt;(&amp;quot;Local Xbee did not provide a timely TX Status Response\n&amp;quot;);&lt;br /&gt;
     }&lt;br /&gt;
     &lt;br /&gt;
   }&lt;br /&gt;
  &lt;br /&gt;
   &amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;delay&amp;lt;/span&amp;gt;(500);&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
====Ce code fonctionne de la manière suivante:====&lt;br /&gt;
=====Fonction &amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;setup&amp;lt;/span&amp;gt;():=====&lt;br /&gt;
Une fois implémenté sur le Arduino, la fonction setup va faire démarrer le protocole XBee et le protocole Série afin de pouvoir envoyer et recevoir des messages par XBee, et d'imprimer les messages d'erreur sur le port Série s'il y a lieu.&lt;br /&gt;
=====Fonction &amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;loop&amp;lt;/span&amp;gt;():=====&lt;br /&gt;
&lt;br /&gt;
===le programme LINKER===&lt;br /&gt;
&lt;br /&gt;
Code du programme de liaison&lt;br /&gt;
&lt;br /&gt;
ce programme en java est constitué de 5 classes&lt;br /&gt;
&lt;br /&gt;
====Le Main====&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 public class main {&lt;br /&gt;
 &lt;br /&gt;
 	public static SQLinker linker;&lt;br /&gt;
 	public static Xbee xbee;&lt;br /&gt;
 	&lt;br /&gt;
 	public static void main(String[] args){&lt;br /&gt;
 		String address = new String(&amp;quot;jdbc:mysql://sitedb.polytech-lille.net/cdelberg?&amp;quot;);&lt;br /&gt;
 		String user = new String(&amp;quot;user=cdelberg&amp;amp;password=myLo9ufonese&amp;quot;);&lt;br /&gt;
 		String COM;&lt;br /&gt;
 		&lt;br /&gt;
 &lt;br /&gt;
                 &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;// We ask the user on the Communication Port to connect the XBee&amp;lt;/span&amp;gt;&lt;br /&gt;
 		System.out.println(&amp;quot;Please enter the Communication port of the Xbee&amp;quot;);&lt;br /&gt;
 		Scanner sc = new Scanner(System.in);&lt;br /&gt;
 		COM = sc.next();&lt;br /&gt;
 		System.out.println(&amp;quot;COM port changed to: &amp;quot;+COM);&lt;br /&gt;
 		&lt;br /&gt;
                 &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;//Creation of the Variables that will be used to connect to the Database and the Xbee&amp;lt;/span&amp;gt;&lt;br /&gt;
 		linker = new SQLinker(address, user);&lt;br /&gt;
 		linker.FillArdList();	&lt;br /&gt;
 		xbee = new Xbee(COM);&lt;br /&gt;
 		&lt;br /&gt;
                 &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;//Creating the Updates Threads&amp;lt;/span&amp;gt;&lt;br /&gt;
 		W8Thread thread1 = new W8Thread();&lt;br /&gt;
 		thread1.start();&lt;br /&gt;
 		UpTestThread thread2 = new UpTestThread();&lt;br /&gt;
 		thread2.start();&lt;br /&gt;
 		&lt;br /&gt;
                 &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;//We now allow the user to enter a command&amp;lt;/span&amp;gt;&lt;br /&gt;
 		String command;&lt;br /&gt;
 		System.out.println(&amp;quot;vous pouvez maintenant lancer une commande si vous le souhaitez&amp;quot;);&lt;br /&gt;
 		System.out.println(&amp;quot;tapez help pour plus d'informations&amp;quot;);&lt;br /&gt;
 		boolean exit=false;&lt;br /&gt;
 		&lt;br /&gt;
 		while(exit==false){&lt;br /&gt;
 			command=sc.next();&lt;br /&gt;
 			&lt;br /&gt;
 			if(command.equals(&amp;quot;help&amp;quot;)){&lt;br /&gt;
 				System.out.println(&amp;quot;print =&amp;gt; affiche la liste des arduinos&amp;quot;);&lt;br /&gt;
 				System.out.println(&amp;quot;exit =&amp;gt; ferme le programme&amp;quot;);&lt;br /&gt;
 			}&lt;br /&gt;
 			if(command.equals(&amp;quot;print&amp;quot;)){linker.PrintArdList();}&lt;br /&gt;
 			if(command.equals(&amp;quot;exit&amp;quot;)){exit=true;}&lt;br /&gt;
 		&lt;br /&gt;
 		}&lt;br /&gt;
 		&amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;//if the user ask to stop the program, it will do those final commands&amp;lt;/span&amp;gt;&lt;br /&gt;
 		sc.close();&lt;br /&gt;
 		thread1.stop();&lt;br /&gt;
 		thread2.stop();&lt;br /&gt;
 		xbee.XbeeClosing();	&lt;br /&gt;
 		//System.out.println(&amp;quot;Program finished successfully&amp;quot;);&lt;br /&gt;
 		&lt;br /&gt;
 	}&lt;br /&gt;
 &lt;br /&gt;
 } &lt;br /&gt;
 &lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Liste du matériel à acheter ===&lt;/div&gt;</summary>
		<author><name>Cdelberg</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=Objets_communiquants_et_gestion_de_l%27%C3%A9nergie&amp;diff=4156</id>
		<title>Objets communiquants et gestion de l'énergie</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=Objets_communiquants_et_gestion_de_l%27%C3%A9nergie&amp;diff=4156"/>
				<updated>2013-02-22T15:23:51Z</updated>
		
		<summary type="html">&lt;p&gt;Cdelberg : /* Code du Arduino */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Présentation du projet ==&lt;br /&gt;
&lt;br /&gt;
=== Planning prévisionnel provisoire (jusqu'à la pré-soutenance)===&lt;br /&gt;
&lt;br /&gt;
Ce planning pourrait être amené à être modifié.&lt;br /&gt;
&lt;br /&gt;
'''''I) Etat de l'art''''' ( ~2-3 semaines)&lt;br /&gt;
&lt;br /&gt;
-Energy harvesting (Calvin)&lt;br /&gt;
&lt;br /&gt;
-Batteries (Justin)&lt;br /&gt;
&lt;br /&gt;
'''''II) Mesure de puissance des différents appareil Arduino''''' ( ~2 semaines)&lt;br /&gt;
&lt;br /&gt;
'''''III) Confronter théorie/réalité''''' ( ~1 semaine)&lt;br /&gt;
-estimer consommation de puissance&lt;br /&gt;
&lt;br /&gt;
-vérifier en pratique&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Amené à être ajouté:'''&lt;br /&gt;
&lt;br /&gt;
Mesure du Arduino de sa propre consommation.&lt;br /&gt;
&lt;br /&gt;
Mesure de la consommation du code (?)&lt;br /&gt;
&lt;br /&gt;
Applications:&lt;br /&gt;
&lt;br /&gt;
-Envoi des valeurs de l'Arduino au serveur.&lt;br /&gt;
&lt;br /&gt;
-Interface web pour interagir avec l'objet.&lt;br /&gt;
&lt;br /&gt;
== Etat de l'art ==&lt;br /&gt;
&lt;br /&gt;
=== Energy Harvesting ===&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
* Mosquino:&lt;br /&gt;
&lt;br /&gt;
''Mosquino'' est un matériel compatible avec le développement logiciel et dérivé de ''Arduino'', il permet de récupérer de l'énergie des sources ambiantes (chaleur, luminosité, vibrations)&lt;br /&gt;
Il n'est destiné qu'aux faibles consommations électriques et n'est encore qu'en phase de développement, il n'a pas encore été véritablement testé. &amp;lt;br/&amp;gt;&lt;br /&gt;
http://tim.cexx.org/?page_id=760&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
* Breakout board BOB-o&amp;lt;sub&amp;gt;994&amp;lt;/sub&amp;gt;6 :&lt;br /&gt;
&lt;br /&gt;
Cette carte utilise le collecteur d'énergie piezoelectrique LTC&amp;lt;sub&amp;gt;35&amp;lt;/sub&amp;gt;88 de Linear Technologies et permet non seulement de récupérer l'énergie piezoélectrique mais aussi l'énergie solaire. Initialement prévu pour fonctionner à faible voltage, la capacité de sortie peut-être dimensionnée pour recevoir une salve de courant de sortie plus élevée. &amp;lt;br/&amp;gt;&lt;br /&gt;
https://www.sparkfun.com/products/9946&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
=== Batteries ===&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
* nouvelles technologies: &lt;br /&gt;
&lt;br /&gt;
ces dernières années, de nouvelles technologies sont apparues, sans être encore réellement utilisées. je pense notamment aux batteries contenues dans des câbles: &lt;br /&gt;
http://phys.org/news/2012-09-lg-chem-cable-batteries-reshape.html&lt;br /&gt;
&lt;br /&gt;
ainsi qu'aux batteries ultra fines dévellopées par thinergy: &lt;br /&gt;
http://www.infinitepowersolutions.com/products.html&lt;br /&gt;
&lt;br /&gt;
Néanmoins, les tensions pouvant etre délivrées par ces technologies naissantes sont loin de pouvoir alimenter le materiel qui nous interresse, à savoir des Arduino (necessitant une alimentation comprise entre 7V-12V)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
D'autres techno sont encore en phase de développement, comme les batteries lithium-Air d'IBM, les piles au graphène utilisant la chaleur pour produire de l’énergie (plutôt de l'energy harvesting pour le coup). Comme ces technologies sont encore en phase de développement, elles n’apparaîtrons pas sur le marché avant au moins 10 ans.&lt;br /&gt;
&lt;br /&gt;
http://www.metro.co.uk/tech/news/897731-technology-companies-charge-towards-next-generation-battery-future&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* technologies adaptée à notre usage:&lt;br /&gt;
&lt;br /&gt;
comme je l'ai rappelé plus haut, ce PFE tourne principalement autour d'Arduino. ces plates-formes nécessitant une tension d'alimentation supérieure à 7V, le choix le plus intéressant reste les piles rechargeable.&lt;br /&gt;
&lt;br /&gt;
Seulement, il existe plusieurs types de piles rechargeables. dans l'usage qu'il en sera fait, et si ces batteries sont couplées à des technologies de récupération d'énergie, il est important de choisir des piles Lithium-Ion.&lt;br /&gt;
&lt;br /&gt;
En effet, ces piles sont les plus intéressantes pour plusieurs raisons:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
tout d'abord, elles sont insensibles à l'effet mémoire. du coup elles ne perdent pas de leur capacité de stockage d’énergie au cours du temps.&lt;br /&gt;
&lt;br /&gt;
le circuit intégré à ces piles empêche toute surtension lors de la charge.&lt;br /&gt;
&lt;br /&gt;
elles peuvent être rechargée en même temps qu'elles sont utilisées.&lt;br /&gt;
&lt;br /&gt;
dans une époque ou la pollution est un sujet préoccupation, ces piles sont moins dangereuse pour l’environnement que leurs homologues au nickel-Cadmium&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
le seul problème pourrais venir du fait qu'elles ne supporte pas bien la chaleur, mais à moins de les coller à un radiateur, il ne devrais pas y avoir de soucis.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Mesure de la consommation énergétique ===&lt;br /&gt;
&lt;br /&gt;
WSIM permet la simulation de capteurs sans fil. Il permet notamment d'estimer la consommation électrique http://wsim.gforge.inria.fr/index.html&lt;br /&gt;
Pour l'instant il ne fonctionne qu'avec des microcontrolleurs TI. Le support des AVR est en cours.&lt;br /&gt;
L'estimation de la consommation énergétique utilise esimu http://esimu.gforge.inria.fr/index.html&lt;br /&gt;
&lt;br /&gt;
== Réalisation ==&lt;br /&gt;
===Le Arduino===&lt;br /&gt;
====Architecture de l'objet communiquant====&lt;br /&gt;
&lt;br /&gt;
**Un Arduino Mega 2560&lt;br /&gt;
**Un XBee&lt;br /&gt;
**Un capteur de température&lt;br /&gt;
**Un capteur de luminosité&lt;br /&gt;
**Un accéléromètre (dont les valeurs ne seront pas utilisées et qui devait servir d'appareil supplémentaire pour la problématique de consommation)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 &amp;lt;span style=&amp;quot;color: blue;&amp;quot;&amp;gt;#include&amp;lt;/span&amp;gt; &amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;XBee.h&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;// Define variables, pins..&amp;lt;/span&amp;gt;&lt;br /&gt;
 int sensorTempPin = 0;&lt;br /&gt;
 int Temp;&lt;br /&gt;
 int sensorLightPin = 1;&lt;br /&gt;
 int Light;&lt;br /&gt;
 int XPin = 2;&lt;br /&gt;
 int YPin = 3;&lt;br /&gt;
 int ZPin = 4;&lt;br /&gt;
 int XValue;&lt;br /&gt;
 int YValue;&lt;br /&gt;
 int ZValue;&lt;br /&gt;
 &lt;br /&gt;
 uint8_t values[] = { 0, 0, 0, 0 };&lt;br /&gt;
 XBee xbee =  &amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;XBee&amp;lt;/span&amp;gt;();&lt;br /&gt;
 XBeeResponse response = &amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;XBeeResponse&amp;lt;/span&amp;gt;();&lt;br /&gt;
 Rx16Response rx = &amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;Rx16Response&amp;lt;/span&amp;gt;();&lt;br /&gt;
 Tx16Request tx = &amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;Tx16Request&amp;lt;/span&amp;gt;(0x1111, values, &amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;sizeof&amp;lt;/span&amp;gt;(values));&lt;br /&gt;
 TxStatusResponse txStatus = &amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;TxStatusResponse&amp;lt;/span&amp;gt;();&lt;br /&gt;
 &lt;br /&gt;
  &amp;lt;span style=&amp;quot;color: blue;&amp;quot;&amp;gt;void&amp;lt;/span&amp;gt; &amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;setup&amp;lt;/span&amp;gt;()&lt;br /&gt;
 {&lt;br /&gt;
    &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;// Initialise xbee / serial&amp;lt;/span&amp;gt;&lt;br /&gt;
   xbee.&amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;begin&amp;lt;/span&amp;gt;(9600);&lt;br /&gt;
   Serial.&amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;begin&amp;lt;/span&amp;gt;(9600);&lt;br /&gt;
 } &lt;br /&gt;
 &lt;br /&gt;
  &amp;lt;span style=&amp;quot;color: blue;&amp;quot;&amp;gt;void&amp;lt;/span&amp;gt; &amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;loop&amp;lt;/span&amp;gt;()&lt;br /&gt;
 {&lt;br /&gt;
    &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;// Read the values on analog pins&amp;lt;/span&amp;gt;&lt;br /&gt;
   Light = &amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;analogRead&amp;lt;/span&amp;gt;(sensorLightPin);&lt;br /&gt;
   Temp = &amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;analogRead&amp;lt;/span&amp;gt;(sensorTempPin);&lt;br /&gt;
   XValue = &amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;analogRead&amp;lt;/span&amp;gt;(XPin);&lt;br /&gt;
   YValue = &amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;analogRead&amp;lt;/span&amp;gt;(YPin);&lt;br /&gt;
   ZValue = &amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;analogRead&amp;lt;/span&amp;gt;(ZPin);&lt;br /&gt;
 &lt;br /&gt;
   xbee.&amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;readPacket&amp;lt;/span&amp;gt;();&lt;br /&gt;
 &lt;br /&gt;
   if(xbee.&amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;getResponse&amp;lt;/span&amp;gt;().&amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;isAvailable&amp;lt;/span&amp;gt;()){&lt;br /&gt;
      &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;// Got something&amp;lt;/span&amp;gt;&lt;br /&gt;
     Serial.&amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;print&amp;lt;/span&amp;gt;(&amp;quot;Got something\n&amp;quot;);&lt;br /&gt;
      &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;// Break the 10-bits of information retrieved from light&amp;lt;/span&amp;gt;&lt;br /&gt;
      &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;// and temperature into 2 bytes for each.&amp;lt;/span&amp;gt;&lt;br /&gt;
     values[0] = Temp &amp;gt;&amp;gt; 8 &amp;amp; 0xff;&lt;br /&gt;
     values[1] = Temp &amp;amp; 0xff;&lt;br /&gt;
     values[2] = Light &amp;gt;&amp;gt; 8 &amp;amp; 0xff;&lt;br /&gt;
     values[3] = Light &amp;amp; 0xff;&lt;br /&gt;
     Serial.&amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;print&amp;lt;/span&amp;gt;(values[0]);&lt;br /&gt;
     &lt;br /&gt;
      &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;// Sending values to server&amp;lt;/span&amp;gt;&lt;br /&gt;
     xbee.&amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;send&amp;lt;/span&amp;gt;(tx);&lt;br /&gt;
     &lt;br /&gt;
      &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;// After sending a tx request, we expect a status response&amp;lt;/span&amp;gt;&lt;br /&gt;
      &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;// from the server&amp;lt;/span&amp;gt;&lt;br /&gt;
      &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;// Wait up to 5 seconds for the status response&amp;lt;/span&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
     if (xbee.&amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;readPacket&amp;lt;/span&amp;gt;(5000)) {&lt;br /&gt;
        &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;// We got a response!&amp;lt;/span&amp;gt;&lt;br /&gt;
       Serial.&amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;print&amp;lt;/span&amp;gt;(&amp;quot;We got a response\n&amp;quot;);&lt;br /&gt;
       &lt;br /&gt;
        &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;// It should be a znet tx status&amp;lt;/span&amp;gt;&lt;br /&gt;
       if (xbee.&amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;getResponse&amp;lt;/span&amp;gt;().&amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;getApiId&amp;lt;/span&amp;gt;() == TX_STATUS_RESPONSE) {&lt;br /&gt;
         xbee.&amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;getResponse&amp;lt;/span&amp;gt;().&amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;getZBTxStatusResponse&amp;lt;/span&amp;gt;(txStatus);&lt;br /&gt;
         &lt;br /&gt;
          &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;// get the delivery status, the fifth byte&amp;lt;/span&amp;gt;&lt;br /&gt;
         if (txStatus.&amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;getStatus&amp;lt;/span&amp;gt;() == SUCCESS){&lt;br /&gt;
            &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;// Success! Time to celebrate&amp;lt;/span&amp;gt;&lt;br /&gt;
           Serial.&amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;print&amp;lt;/span&amp;gt;(&amp;quot;SUCCESS! Time to celebrate\n&amp;quot;);&lt;br /&gt;
         } else {&lt;br /&gt;
           &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;// The remote XBee did not receive our packet. Is it powered on?&amp;lt;/span&amp;gt;&lt;br /&gt;
          Serial.&amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;print&amp;lt;/span&amp;gt;(&amp;quot;The remote Xbee did not receive our packet\n&amp;quot;);&lt;br /&gt;
         }&lt;br /&gt;
       }&lt;br /&gt;
     } else {&lt;br /&gt;
       &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;// local XBee did not provide a timely TX Status Response -- should not happen&amp;lt;/span&amp;gt;&lt;br /&gt;
      Serial.&amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;print&amp;lt;/span&amp;gt;(&amp;quot;Local Xbee did not provide a timely TX Status Response\n&amp;quot;);&lt;br /&gt;
     }&lt;br /&gt;
     &lt;br /&gt;
   }&lt;br /&gt;
  &lt;br /&gt;
   &amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;delay&amp;lt;/span&amp;gt;(500);&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
====Ce code fonctionne de la manière suivante:====&lt;br /&gt;
=====Fonction &amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;setup&amp;lt;/span&amp;gt;():=====&lt;br /&gt;
Une fois implémenté sur le Arduino, la fonction setup va faire démarrer le protocole XBee et le protocole Série afin de pouvoir envoyer et recevoir des messages par XBee, et d'imprimer les messages d'erreur sur le port Série s'il y a lieu.&lt;br /&gt;
=====Fonction &amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;loop&amp;lt;/span&amp;gt;():=====&lt;br /&gt;
&lt;br /&gt;
=== Liste du matériel à acheter ===&lt;/div&gt;</summary>
		<author><name>Cdelberg</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=Objets_communiquants_et_gestion_de_l%27%C3%A9nergie&amp;diff=4155</id>
		<title>Objets communiquants et gestion de l'énergie</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=Objets_communiquants_et_gestion_de_l%27%C3%A9nergie&amp;diff=4155"/>
				<updated>2013-02-22T15:12:10Z</updated>
		
		<summary type="html">&lt;p&gt;Cdelberg : /* Code du Arduino */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Présentation du projet ==&lt;br /&gt;
&lt;br /&gt;
=== Planning prévisionnel provisoire (jusqu'à la pré-soutenance)===&lt;br /&gt;
&lt;br /&gt;
Ce planning pourrait être amené à être modifié.&lt;br /&gt;
&lt;br /&gt;
'''''I) Etat de l'art''''' ( ~2-3 semaines)&lt;br /&gt;
&lt;br /&gt;
-Energy harvesting (Calvin)&lt;br /&gt;
&lt;br /&gt;
-Batteries (Justin)&lt;br /&gt;
&lt;br /&gt;
'''''II) Mesure de puissance des différents appareil Arduino''''' ( ~2 semaines)&lt;br /&gt;
&lt;br /&gt;
'''''III) Confronter théorie/réalité''''' ( ~1 semaine)&lt;br /&gt;
-estimer consommation de puissance&lt;br /&gt;
&lt;br /&gt;
-vérifier en pratique&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Amené à être ajouté:'''&lt;br /&gt;
&lt;br /&gt;
Mesure du Arduino de sa propre consommation.&lt;br /&gt;
&lt;br /&gt;
Mesure de la consommation du code (?)&lt;br /&gt;
&lt;br /&gt;
Applications:&lt;br /&gt;
&lt;br /&gt;
-Envoi des valeurs de l'Arduino au serveur.&lt;br /&gt;
&lt;br /&gt;
-Interface web pour interagir avec l'objet.&lt;br /&gt;
&lt;br /&gt;
== Etat de l'art ==&lt;br /&gt;
&lt;br /&gt;
=== Energy Harvesting ===&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
* Mosquino:&lt;br /&gt;
&lt;br /&gt;
''Mosquino'' est un matériel compatible avec le développement logiciel et dérivé de ''Arduino'', il permet de récupérer de l'énergie des sources ambiantes (chaleur, luminosité, vibrations)&lt;br /&gt;
Il n'est destiné qu'aux faibles consommations électriques et n'est encore qu'en phase de développement, il n'a pas encore été véritablement testé. &amp;lt;br/&amp;gt;&lt;br /&gt;
http://tim.cexx.org/?page_id=760&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
* Breakout board BOB-o&amp;lt;sub&amp;gt;994&amp;lt;/sub&amp;gt;6 :&lt;br /&gt;
&lt;br /&gt;
Cette carte utilise le collecteur d'énergie piezoelectrique LTC&amp;lt;sub&amp;gt;35&amp;lt;/sub&amp;gt;88 de Linear Technologies et permet non seulement de récupérer l'énergie piezoélectrique mais aussi l'énergie solaire. Initialement prévu pour fonctionner à faible voltage, la capacité de sortie peut-être dimensionnée pour recevoir une salve de courant de sortie plus élevée. &amp;lt;br/&amp;gt;&lt;br /&gt;
https://www.sparkfun.com/products/9946&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
=== Batteries ===&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
* nouvelles technologies: &lt;br /&gt;
&lt;br /&gt;
ces dernières années, de nouvelles technologies sont apparues, sans être encore réellement utilisées. je pense notamment aux batteries contenues dans des câbles: &lt;br /&gt;
http://phys.org/news/2012-09-lg-chem-cable-batteries-reshape.html&lt;br /&gt;
&lt;br /&gt;
ainsi qu'aux batteries ultra fines dévellopées par thinergy: &lt;br /&gt;
http://www.infinitepowersolutions.com/products.html&lt;br /&gt;
&lt;br /&gt;
Néanmoins, les tensions pouvant etre délivrées par ces technologies naissantes sont loin de pouvoir alimenter le materiel qui nous interresse, à savoir des Arduino (necessitant une alimentation comprise entre 7V-12V)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
D'autres techno sont encore en phase de développement, comme les batteries lithium-Air d'IBM, les piles au graphène utilisant la chaleur pour produire de l’énergie (plutôt de l'energy harvesting pour le coup). Comme ces technologies sont encore en phase de développement, elles n’apparaîtrons pas sur le marché avant au moins 10 ans.&lt;br /&gt;
&lt;br /&gt;
http://www.metro.co.uk/tech/news/897731-technology-companies-charge-towards-next-generation-battery-future&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* technologies adaptée à notre usage:&lt;br /&gt;
&lt;br /&gt;
comme je l'ai rappelé plus haut, ce PFE tourne principalement autour d'Arduino. ces plates-formes nécessitant une tension d'alimentation supérieure à 7V, le choix le plus intéressant reste les piles rechargeable.&lt;br /&gt;
&lt;br /&gt;
Seulement, il existe plusieurs types de piles rechargeables. dans l'usage qu'il en sera fait, et si ces batteries sont couplées à des technologies de récupération d'énergie, il est important de choisir des piles Lithium-Ion.&lt;br /&gt;
&lt;br /&gt;
En effet, ces piles sont les plus intéressantes pour plusieurs raisons:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
tout d'abord, elles sont insensibles à l'effet mémoire. du coup elles ne perdent pas de leur capacité de stockage d’énergie au cours du temps.&lt;br /&gt;
&lt;br /&gt;
le circuit intégré à ces piles empêche toute surtension lors de la charge.&lt;br /&gt;
&lt;br /&gt;
elles peuvent être rechargée en même temps qu'elles sont utilisées.&lt;br /&gt;
&lt;br /&gt;
dans une époque ou la pollution est un sujet préoccupation, ces piles sont moins dangereuse pour l’environnement que leurs homologues au nickel-Cadmium&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
le seul problème pourrais venir du fait qu'elles ne supporte pas bien la chaleur, mais à moins de les coller à un radiateur, il ne devrais pas y avoir de soucis.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Mesure de la consommation énergétique ===&lt;br /&gt;
&lt;br /&gt;
WSIM permet la simulation de capteurs sans fil. Il permet notamment d'estimer la consommation électrique http://wsim.gforge.inria.fr/index.html&lt;br /&gt;
Pour l'instant il ne fonctionne qu'avec des microcontrolleurs TI. Le support des AVR est en cours.&lt;br /&gt;
L'estimation de la consommation énergétique utilise esimu http://esimu.gforge.inria.fr/index.html&lt;br /&gt;
&lt;br /&gt;
== Réalisation ==&lt;br /&gt;
===Code du Arduino===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 &amp;lt;span style=&amp;quot;color: blue;&amp;quot;&amp;gt;#include&amp;lt;/span&amp;gt; &amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;XBee.h&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;// Define variables, pins..&amp;lt;/span&amp;gt;&lt;br /&gt;
 int sensorTempPin = 0;&lt;br /&gt;
 int Temp;&lt;br /&gt;
 int sensorLightPin = 1;&lt;br /&gt;
 int Light;&lt;br /&gt;
 int XPin = 2;&lt;br /&gt;
 int YPin = 3;&lt;br /&gt;
 int ZPin = 4;&lt;br /&gt;
 int XValue;&lt;br /&gt;
 int YValue;&lt;br /&gt;
 int ZValue;&lt;br /&gt;
 &lt;br /&gt;
 uint8_t values[] = { 0, 0, 0, 0 };&lt;br /&gt;
 XBee xbee =  &amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;XBee&amp;lt;/span&amp;gt;();&lt;br /&gt;
 XBeeResponse response = &amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;XBeeResponse&amp;lt;/span&amp;gt;();&lt;br /&gt;
 Rx16Response rx = &amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;Rx16Response&amp;lt;/span&amp;gt;();&lt;br /&gt;
 Tx16Request tx = &amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;Tx16Request&amp;lt;/span&amp;gt;(0x1111, values, &amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;sizeof&amp;lt;/span&amp;gt;(values));&lt;br /&gt;
 TxStatusResponse txStatus = &amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;TxStatusResponse&amp;lt;/span&amp;gt;();&lt;br /&gt;
 &lt;br /&gt;
  &amp;lt;span style=&amp;quot;color: blue;&amp;quot;&amp;gt;void&amp;lt;/span&amp;gt; &amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;setup&amp;lt;/span&amp;gt;()&lt;br /&gt;
 {&lt;br /&gt;
    &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;// Initialise xbee / serial&amp;lt;/span&amp;gt;&lt;br /&gt;
   xbee.&amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;begin&amp;lt;/span&amp;gt;(9600);&lt;br /&gt;
   Serial.&amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;begin&amp;lt;/span&amp;gt;(9600);&lt;br /&gt;
 } &lt;br /&gt;
 &lt;br /&gt;
  &amp;lt;span style=&amp;quot;color: blue;&amp;quot;&amp;gt;void&amp;lt;/span&amp;gt; &amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;loop&amp;lt;/span&amp;gt;()&lt;br /&gt;
 {&lt;br /&gt;
    &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;// Read the values on analog pins&amp;lt;/span&amp;gt;&lt;br /&gt;
   Light = &amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;analogRead&amp;lt;/span&amp;gt;(sensorLightPin);&lt;br /&gt;
   Temp = &amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;analogRead&amp;lt;/span&amp;gt;(sensorTempPin);&lt;br /&gt;
   XValue = &amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;analogRead&amp;lt;/span&amp;gt;(XPin);&lt;br /&gt;
   YValue = &amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;analogRead&amp;lt;/span&amp;gt;(YPin);&lt;br /&gt;
   ZValue = &amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;analogRead&amp;lt;/span&amp;gt;(ZPin);&lt;br /&gt;
 &lt;br /&gt;
   xbee.&amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;readPacket&amp;lt;/span&amp;gt;();&lt;br /&gt;
 &lt;br /&gt;
   if(xbee.&amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;getResponse&amp;lt;/span&amp;gt;().&amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;isAvailable&amp;lt;/span&amp;gt;()){&lt;br /&gt;
      &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;// Got something&amp;lt;/span&amp;gt;&lt;br /&gt;
     Serial.&amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;print&amp;lt;/span&amp;gt;(&amp;quot;Got something\n&amp;quot;);&lt;br /&gt;
      &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;// Break the 10-bits of information retrieved from light&amp;lt;/span&amp;gt;&lt;br /&gt;
      &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;// and temperature into 2 bytes for each.&amp;lt;/span&amp;gt;&lt;br /&gt;
     values[0] = Temp &amp;gt;&amp;gt; 8 &amp;amp; 0xff;&lt;br /&gt;
     values[1] = Temp &amp;amp; 0xff;&lt;br /&gt;
     values[2] = Light &amp;gt;&amp;gt; 8 &amp;amp; 0xff;&lt;br /&gt;
     values[3] = Light &amp;amp; 0xff;&lt;br /&gt;
     Serial.&amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;print&amp;lt;/span&amp;gt;(values[0]);&lt;br /&gt;
     &lt;br /&gt;
      &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;// Sending values to server&amp;lt;/span&amp;gt;&lt;br /&gt;
     xbee.&amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;send&amp;lt;/span&amp;gt;(tx);&lt;br /&gt;
     &lt;br /&gt;
      &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;// After sending a tx request, we expect a status response&amp;lt;/span&amp;gt;&lt;br /&gt;
      &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;// from the server&amp;lt;/span&amp;gt;&lt;br /&gt;
      &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;// Wait up to 5 seconds for the status response&amp;lt;/span&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
     if (xbee.&amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;readPacket&amp;lt;/span&amp;gt;(5000)) {&lt;br /&gt;
        &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;// We got a response!&amp;lt;/span&amp;gt;&lt;br /&gt;
       Serial.&amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;print&amp;lt;/span&amp;gt;(&amp;quot;We got a response\n&amp;quot;);&lt;br /&gt;
       &lt;br /&gt;
        &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;// It should be a znet tx status&amp;lt;/span&amp;gt;&lt;br /&gt;
       if (xbee.&amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;getResponse&amp;lt;/span&amp;gt;().&amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;getApiId&amp;lt;/span&amp;gt;() == TX_STATUS_RESPONSE) {&lt;br /&gt;
         xbee.&amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;getResponse&amp;lt;/span&amp;gt;().&amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;getZBTxStatusResponse&amp;lt;/span&amp;gt;(txStatus);&lt;br /&gt;
         &lt;br /&gt;
          &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;// get the delivery status, the fifth byte&amp;lt;/span&amp;gt;&lt;br /&gt;
         if (txStatus.&amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;getStatus&amp;lt;/span&amp;gt;() == SUCCESS){&lt;br /&gt;
            &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;// Success! Time to celebrate&amp;lt;/span&amp;gt;&lt;br /&gt;
           Serial.&amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;print&amp;lt;/span&amp;gt;(&amp;quot;SUCCESS! Time to celebrate\n&amp;quot;);&lt;br /&gt;
         } else {&lt;br /&gt;
           &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;// The remote XBee did not receive our packet. Is it powered on?&amp;lt;/span&amp;gt;&lt;br /&gt;
          Serial.&amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;print&amp;lt;/span&amp;gt;(&amp;quot;The remote Xbee did not receive our packet\n&amp;quot;);&lt;br /&gt;
         }&lt;br /&gt;
       }&lt;br /&gt;
     } else {&lt;br /&gt;
       &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;// local XBee did not provide a timely TX Status Response -- should not happen&amp;lt;/span&amp;gt;&lt;br /&gt;
      Serial.&amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;print&amp;lt;/span&amp;gt;(&amp;quot;Local Xbee did not provide a timely TX Status Response\n&amp;quot;);&lt;br /&gt;
     }&lt;br /&gt;
     &lt;br /&gt;
   }&lt;br /&gt;
  &lt;br /&gt;
   &amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;delay&amp;lt;/span&amp;gt;(500);&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
=== Liste du matériel à acheter ===&lt;/div&gt;</summary>
		<author><name>Cdelberg</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=Objets_communiquants_et_gestion_de_l%27%C3%A9nergie&amp;diff=4154</id>
		<title>Objets communiquants et gestion de l'énergie</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=Objets_communiquants_et_gestion_de_l%27%C3%A9nergie&amp;diff=4154"/>
				<updated>2013-02-22T15:11:43Z</updated>
		
		<summary type="html">&lt;p&gt;Cdelberg : /* Réalisation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Présentation du projet ==&lt;br /&gt;
&lt;br /&gt;
=== Planning prévisionnel provisoire (jusqu'à la pré-soutenance)===&lt;br /&gt;
&lt;br /&gt;
Ce planning pourrait être amené à être modifié.&lt;br /&gt;
&lt;br /&gt;
'''''I) Etat de l'art''''' ( ~2-3 semaines)&lt;br /&gt;
&lt;br /&gt;
-Energy harvesting (Calvin)&lt;br /&gt;
&lt;br /&gt;
-Batteries (Justin)&lt;br /&gt;
&lt;br /&gt;
'''''II) Mesure de puissance des différents appareil Arduino''''' ( ~2 semaines)&lt;br /&gt;
&lt;br /&gt;
'''''III) Confronter théorie/réalité''''' ( ~1 semaine)&lt;br /&gt;
-estimer consommation de puissance&lt;br /&gt;
&lt;br /&gt;
-vérifier en pratique&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Amené à être ajouté:'''&lt;br /&gt;
&lt;br /&gt;
Mesure du Arduino de sa propre consommation.&lt;br /&gt;
&lt;br /&gt;
Mesure de la consommation du code (?)&lt;br /&gt;
&lt;br /&gt;
Applications:&lt;br /&gt;
&lt;br /&gt;
-Envoi des valeurs de l'Arduino au serveur.&lt;br /&gt;
&lt;br /&gt;
-Interface web pour interagir avec l'objet.&lt;br /&gt;
&lt;br /&gt;
== Etat de l'art ==&lt;br /&gt;
&lt;br /&gt;
=== Energy Harvesting ===&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
* Mosquino:&lt;br /&gt;
&lt;br /&gt;
''Mosquino'' est un matériel compatible avec le développement logiciel et dérivé de ''Arduino'', il permet de récupérer de l'énergie des sources ambiantes (chaleur, luminosité, vibrations)&lt;br /&gt;
Il n'est destiné qu'aux faibles consommations électriques et n'est encore qu'en phase de développement, il n'a pas encore été véritablement testé. &amp;lt;br/&amp;gt;&lt;br /&gt;
http://tim.cexx.org/?page_id=760&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
* Breakout board BOB-o&amp;lt;sub&amp;gt;994&amp;lt;/sub&amp;gt;6 :&lt;br /&gt;
&lt;br /&gt;
Cette carte utilise le collecteur d'énergie piezoelectrique LTC&amp;lt;sub&amp;gt;35&amp;lt;/sub&amp;gt;88 de Linear Technologies et permet non seulement de récupérer l'énergie piezoélectrique mais aussi l'énergie solaire. Initialement prévu pour fonctionner à faible voltage, la capacité de sortie peut-être dimensionnée pour recevoir une salve de courant de sortie plus élevée. &amp;lt;br/&amp;gt;&lt;br /&gt;
https://www.sparkfun.com/products/9946&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
=== Batteries ===&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
* nouvelles technologies: &lt;br /&gt;
&lt;br /&gt;
ces dernières années, de nouvelles technologies sont apparues, sans être encore réellement utilisées. je pense notamment aux batteries contenues dans des câbles: &lt;br /&gt;
http://phys.org/news/2012-09-lg-chem-cable-batteries-reshape.html&lt;br /&gt;
&lt;br /&gt;
ainsi qu'aux batteries ultra fines dévellopées par thinergy: &lt;br /&gt;
http://www.infinitepowersolutions.com/products.html&lt;br /&gt;
&lt;br /&gt;
Néanmoins, les tensions pouvant etre délivrées par ces technologies naissantes sont loin de pouvoir alimenter le materiel qui nous interresse, à savoir des Arduino (necessitant une alimentation comprise entre 7V-12V)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
D'autres techno sont encore en phase de développement, comme les batteries lithium-Air d'IBM, les piles au graphène utilisant la chaleur pour produire de l’énergie (plutôt de l'energy harvesting pour le coup). Comme ces technologies sont encore en phase de développement, elles n’apparaîtrons pas sur le marché avant au moins 10 ans.&lt;br /&gt;
&lt;br /&gt;
http://www.metro.co.uk/tech/news/897731-technology-companies-charge-towards-next-generation-battery-future&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* technologies adaptée à notre usage:&lt;br /&gt;
&lt;br /&gt;
comme je l'ai rappelé plus haut, ce PFE tourne principalement autour d'Arduino. ces plates-formes nécessitant une tension d'alimentation supérieure à 7V, le choix le plus intéressant reste les piles rechargeable.&lt;br /&gt;
&lt;br /&gt;
Seulement, il existe plusieurs types de piles rechargeables. dans l'usage qu'il en sera fait, et si ces batteries sont couplées à des technologies de récupération d'énergie, il est important de choisir des piles Lithium-Ion.&lt;br /&gt;
&lt;br /&gt;
En effet, ces piles sont les plus intéressantes pour plusieurs raisons:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
tout d'abord, elles sont insensibles à l'effet mémoire. du coup elles ne perdent pas de leur capacité de stockage d’énergie au cours du temps.&lt;br /&gt;
&lt;br /&gt;
le circuit intégré à ces piles empêche toute surtension lors de la charge.&lt;br /&gt;
&lt;br /&gt;
elles peuvent être rechargée en même temps qu'elles sont utilisées.&lt;br /&gt;
&lt;br /&gt;
dans une époque ou la pollution est un sujet préoccupation, ces piles sont moins dangereuse pour l’environnement que leurs homologues au nickel-Cadmium&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
le seul problème pourrais venir du fait qu'elles ne supporte pas bien la chaleur, mais à moins de les coller à un radiateur, il ne devrais pas y avoir de soucis.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Mesure de la consommation énergétique ===&lt;br /&gt;
&lt;br /&gt;
WSIM permet la simulation de capteurs sans fil. Il permet notamment d'estimer la consommation électrique http://wsim.gforge.inria.fr/index.html&lt;br /&gt;
Pour l'instant il ne fonctionne qu'avec des microcontrolleurs TI. Le support des AVR est en cours.&lt;br /&gt;
L'estimation de la consommation énergétique utilise esimu http://esimu.gforge.inria.fr/index.html&lt;br /&gt;
&lt;br /&gt;
== Réalisation ==&lt;br /&gt;
=Code du Arduino=&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 &amp;lt;span style=&amp;quot;color: blue;&amp;quot;&amp;gt;#include&amp;lt;/span&amp;gt; &amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;XBee.h&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;// Define variables, pins..&amp;lt;/span&amp;gt;&lt;br /&gt;
 int sensorTempPin = 0;&lt;br /&gt;
 int Temp;&lt;br /&gt;
 int sensorLightPin = 1;&lt;br /&gt;
 int Light;&lt;br /&gt;
 int XPin = 2;&lt;br /&gt;
 int YPin = 3;&lt;br /&gt;
 int ZPin = 4;&lt;br /&gt;
 int XValue;&lt;br /&gt;
 int YValue;&lt;br /&gt;
 int ZValue;&lt;br /&gt;
 &lt;br /&gt;
 uint8_t values[] = { 0, 0, 0, 0 };&lt;br /&gt;
 XBee xbee =  &amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;XBee&amp;lt;/span&amp;gt;();&lt;br /&gt;
 XBeeResponse response = &amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;XBeeResponse&amp;lt;/span&amp;gt;();&lt;br /&gt;
 Rx16Response rx = &amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;Rx16Response&amp;lt;/span&amp;gt;();&lt;br /&gt;
 Tx16Request tx = &amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;Tx16Request&amp;lt;/span&amp;gt;(0x1111, values, &amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;sizeof&amp;lt;/span&amp;gt;(values));&lt;br /&gt;
 TxStatusResponse txStatus = &amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;TxStatusResponse&amp;lt;/span&amp;gt;();&lt;br /&gt;
 &lt;br /&gt;
  &amp;lt;span style=&amp;quot;color: blue;&amp;quot;&amp;gt;void&amp;lt;/span&amp;gt; &amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;setup&amp;lt;/span&amp;gt;()&lt;br /&gt;
 {&lt;br /&gt;
    &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;// Initialise xbee / serial&amp;lt;/span&amp;gt;&lt;br /&gt;
   xbee.&amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;begin&amp;lt;/span&amp;gt;(9600);&lt;br /&gt;
   Serial.&amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;begin&amp;lt;/span&amp;gt;(9600);&lt;br /&gt;
 } &lt;br /&gt;
 &lt;br /&gt;
  &amp;lt;span style=&amp;quot;color: blue;&amp;quot;&amp;gt;void&amp;lt;/span&amp;gt; &amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;loop&amp;lt;/span&amp;gt;()&lt;br /&gt;
 {&lt;br /&gt;
    &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;// Read the values on analog pins&amp;lt;/span&amp;gt;&lt;br /&gt;
   Light = &amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;analogRead&amp;lt;/span&amp;gt;(sensorLightPin);&lt;br /&gt;
   Temp = &amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;analogRead&amp;lt;/span&amp;gt;(sensorTempPin);&lt;br /&gt;
   XValue = &amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;analogRead&amp;lt;/span&amp;gt;(XPin);&lt;br /&gt;
   YValue = &amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;analogRead&amp;lt;/span&amp;gt;(YPin);&lt;br /&gt;
   ZValue = &amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;analogRead&amp;lt;/span&amp;gt;(ZPin);&lt;br /&gt;
 &lt;br /&gt;
   xbee.&amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;readPacket&amp;lt;/span&amp;gt;();&lt;br /&gt;
 &lt;br /&gt;
   if(xbee.&amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;getResponse&amp;lt;/span&amp;gt;().&amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;isAvailable&amp;lt;/span&amp;gt;()){&lt;br /&gt;
      &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;// Got something&amp;lt;/span&amp;gt;&lt;br /&gt;
     Serial.&amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;print&amp;lt;/span&amp;gt;(&amp;quot;Got something\n&amp;quot;);&lt;br /&gt;
      &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;// Break the 10-bits of information retrieved from light&amp;lt;/span&amp;gt;&lt;br /&gt;
      &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;// and temperature into 2 bytes for each.&amp;lt;/span&amp;gt;&lt;br /&gt;
     values[0] = Temp &amp;gt;&amp;gt; 8 &amp;amp; 0xff;&lt;br /&gt;
     values[1] = Temp &amp;amp; 0xff;&lt;br /&gt;
     values[2] = Light &amp;gt;&amp;gt; 8 &amp;amp; 0xff;&lt;br /&gt;
     values[3] = Light &amp;amp; 0xff;&lt;br /&gt;
     Serial.&amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;print&amp;lt;/span&amp;gt;(values[0]);&lt;br /&gt;
     &lt;br /&gt;
      &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;// Sending values to server&amp;lt;/span&amp;gt;&lt;br /&gt;
     xbee.&amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;send&amp;lt;/span&amp;gt;(tx);&lt;br /&gt;
     &lt;br /&gt;
      &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;// After sending a tx request, we expect a status response&amp;lt;/span&amp;gt;&lt;br /&gt;
      &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;// from the server&amp;lt;/span&amp;gt;&lt;br /&gt;
      &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;// Wait up to 5 seconds for the status response&amp;lt;/span&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
     if (xbee.&amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;readPacket&amp;lt;/span&amp;gt;(5000)) {&lt;br /&gt;
        &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;// We got a response!&amp;lt;/span&amp;gt;&lt;br /&gt;
       Serial.&amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;print&amp;lt;/span&amp;gt;(&amp;quot;We got a response\n&amp;quot;);&lt;br /&gt;
       &lt;br /&gt;
        &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;// It should be a znet tx status&amp;lt;/span&amp;gt;&lt;br /&gt;
       if (xbee.&amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;getResponse&amp;lt;/span&amp;gt;().&amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;getApiId&amp;lt;/span&amp;gt;() == TX_STATUS_RESPONSE) {&lt;br /&gt;
         xbee.&amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;getResponse&amp;lt;/span&amp;gt;().&amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;getZBTxStatusResponse&amp;lt;/span&amp;gt;(txStatus);&lt;br /&gt;
         &lt;br /&gt;
          &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;// get the delivery status, the fifth byte&amp;lt;/span&amp;gt;&lt;br /&gt;
         if (txStatus.&amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;getStatus&amp;lt;/span&amp;gt;() == SUCCESS){&lt;br /&gt;
            &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;// Success! Time to celebrate&amp;lt;/span&amp;gt;&lt;br /&gt;
           Serial.&amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;print&amp;lt;/span&amp;gt;(&amp;quot;SUCCESS! Time to celebrate\n&amp;quot;);&lt;br /&gt;
         } else {&lt;br /&gt;
           &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;// The remote XBee did not receive our packet. Is it powered on?&amp;lt;/span&amp;gt;&lt;br /&gt;
          Serial.&amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;print&amp;lt;/span&amp;gt;(&amp;quot;The remote Xbee did not receive our packet\n&amp;quot;);&lt;br /&gt;
         }&lt;br /&gt;
       }&lt;br /&gt;
     } else {&lt;br /&gt;
       &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;// local XBee did not provide a timely TX Status Response -- should not happen&amp;lt;/span&amp;gt;&lt;br /&gt;
      Serial.&amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;print&amp;lt;/span&amp;gt;(&amp;quot;Local Xbee did not provide a timely TX Status Response\n&amp;quot;);&lt;br /&gt;
     }&lt;br /&gt;
     &lt;br /&gt;
   }&lt;br /&gt;
  &lt;br /&gt;
   &amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;delay&amp;lt;/span&amp;gt;(500);&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
=== Liste du matériel à acheter ===&lt;/div&gt;</summary>
		<author><name>Cdelberg</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=Objets_communiquants_et_gestion_de_l%27%C3%A9nergie&amp;diff=4153</id>
		<title>Objets communiquants et gestion de l'énergie</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=Objets_communiquants_et_gestion_de_l%27%C3%A9nergie&amp;diff=4153"/>
				<updated>2013-02-22T15:10:48Z</updated>
		
		<summary type="html">&lt;p&gt;Cdelberg : /* Réalisation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Présentation du projet ==&lt;br /&gt;
&lt;br /&gt;
=== Planning prévisionnel provisoire (jusqu'à la pré-soutenance)===&lt;br /&gt;
&lt;br /&gt;
Ce planning pourrait être amené à être modifié.&lt;br /&gt;
&lt;br /&gt;
'''''I) Etat de l'art''''' ( ~2-3 semaines)&lt;br /&gt;
&lt;br /&gt;
-Energy harvesting (Calvin)&lt;br /&gt;
&lt;br /&gt;
-Batteries (Justin)&lt;br /&gt;
&lt;br /&gt;
'''''II) Mesure de puissance des différents appareil Arduino''''' ( ~2 semaines)&lt;br /&gt;
&lt;br /&gt;
'''''III) Confronter théorie/réalité''''' ( ~1 semaine)&lt;br /&gt;
-estimer consommation de puissance&lt;br /&gt;
&lt;br /&gt;
-vérifier en pratique&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Amené à être ajouté:'''&lt;br /&gt;
&lt;br /&gt;
Mesure du Arduino de sa propre consommation.&lt;br /&gt;
&lt;br /&gt;
Mesure de la consommation du code (?)&lt;br /&gt;
&lt;br /&gt;
Applications:&lt;br /&gt;
&lt;br /&gt;
-Envoi des valeurs de l'Arduino au serveur.&lt;br /&gt;
&lt;br /&gt;
-Interface web pour interagir avec l'objet.&lt;br /&gt;
&lt;br /&gt;
== Etat de l'art ==&lt;br /&gt;
&lt;br /&gt;
=== Energy Harvesting ===&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
* Mosquino:&lt;br /&gt;
&lt;br /&gt;
''Mosquino'' est un matériel compatible avec le développement logiciel et dérivé de ''Arduino'', il permet de récupérer de l'énergie des sources ambiantes (chaleur, luminosité, vibrations)&lt;br /&gt;
Il n'est destiné qu'aux faibles consommations électriques et n'est encore qu'en phase de développement, il n'a pas encore été véritablement testé. &amp;lt;br/&amp;gt;&lt;br /&gt;
http://tim.cexx.org/?page_id=760&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
* Breakout board BOB-o&amp;lt;sub&amp;gt;994&amp;lt;/sub&amp;gt;6 :&lt;br /&gt;
&lt;br /&gt;
Cette carte utilise le collecteur d'énergie piezoelectrique LTC&amp;lt;sub&amp;gt;35&amp;lt;/sub&amp;gt;88 de Linear Technologies et permet non seulement de récupérer l'énergie piezoélectrique mais aussi l'énergie solaire. Initialement prévu pour fonctionner à faible voltage, la capacité de sortie peut-être dimensionnée pour recevoir une salve de courant de sortie plus élevée. &amp;lt;br/&amp;gt;&lt;br /&gt;
https://www.sparkfun.com/products/9946&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
=== Batteries ===&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
* nouvelles technologies: &lt;br /&gt;
&lt;br /&gt;
ces dernières années, de nouvelles technologies sont apparues, sans être encore réellement utilisées. je pense notamment aux batteries contenues dans des câbles: &lt;br /&gt;
http://phys.org/news/2012-09-lg-chem-cable-batteries-reshape.html&lt;br /&gt;
&lt;br /&gt;
ainsi qu'aux batteries ultra fines dévellopées par thinergy: &lt;br /&gt;
http://www.infinitepowersolutions.com/products.html&lt;br /&gt;
&lt;br /&gt;
Néanmoins, les tensions pouvant etre délivrées par ces technologies naissantes sont loin de pouvoir alimenter le materiel qui nous interresse, à savoir des Arduino (necessitant une alimentation comprise entre 7V-12V)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
D'autres techno sont encore en phase de développement, comme les batteries lithium-Air d'IBM, les piles au graphène utilisant la chaleur pour produire de l’énergie (plutôt de l'energy harvesting pour le coup). Comme ces technologies sont encore en phase de développement, elles n’apparaîtrons pas sur le marché avant au moins 10 ans.&lt;br /&gt;
&lt;br /&gt;
http://www.metro.co.uk/tech/news/897731-technology-companies-charge-towards-next-generation-battery-future&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* technologies adaptée à notre usage:&lt;br /&gt;
&lt;br /&gt;
comme je l'ai rappelé plus haut, ce PFE tourne principalement autour d'Arduino. ces plates-formes nécessitant une tension d'alimentation supérieure à 7V, le choix le plus intéressant reste les piles rechargeable.&lt;br /&gt;
&lt;br /&gt;
Seulement, il existe plusieurs types de piles rechargeables. dans l'usage qu'il en sera fait, et si ces batteries sont couplées à des technologies de récupération d'énergie, il est important de choisir des piles Lithium-Ion.&lt;br /&gt;
&lt;br /&gt;
En effet, ces piles sont les plus intéressantes pour plusieurs raisons:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
tout d'abord, elles sont insensibles à l'effet mémoire. du coup elles ne perdent pas de leur capacité de stockage d’énergie au cours du temps.&lt;br /&gt;
&lt;br /&gt;
le circuit intégré à ces piles empêche toute surtension lors de la charge.&lt;br /&gt;
&lt;br /&gt;
elles peuvent être rechargée en même temps qu'elles sont utilisées.&lt;br /&gt;
&lt;br /&gt;
dans une époque ou la pollution est un sujet préoccupation, ces piles sont moins dangereuse pour l’environnement que leurs homologues au nickel-Cadmium&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
le seul problème pourrais venir du fait qu'elles ne supporte pas bien la chaleur, mais à moins de les coller à un radiateur, il ne devrais pas y avoir de soucis.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Mesure de la consommation énergétique ===&lt;br /&gt;
&lt;br /&gt;
WSIM permet la simulation de capteurs sans fil. Il permet notamment d'estimer la consommation électrique http://wsim.gforge.inria.fr/index.html&lt;br /&gt;
Pour l'instant il ne fonctionne qu'avec des microcontrolleurs TI. Le support des AVR est en cours.&lt;br /&gt;
L'estimation de la consommation énergétique utilise esimu http://esimu.gforge.inria.fr/index.html&lt;br /&gt;
&lt;br /&gt;
== Réalisation ==&lt;br /&gt;
Code du Arduino&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 &amp;lt;span style=&amp;quot;color: blue;&amp;quot;&amp;gt;#include&amp;lt;/span&amp;gt; &amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;XBee.h&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;// Define variables, pins..&amp;lt;/span&amp;gt;&lt;br /&gt;
 int sensorTempPin = 0;&lt;br /&gt;
 int Temp;&lt;br /&gt;
 int sensorLightPin = 1;&lt;br /&gt;
 int Light;&lt;br /&gt;
 int XPin = 2;&lt;br /&gt;
 int YPin = 3;&lt;br /&gt;
 int ZPin = 4;&lt;br /&gt;
 int XValue;&lt;br /&gt;
 int YValue;&lt;br /&gt;
 int ZValue;&lt;br /&gt;
 &lt;br /&gt;
 uint8_t values[] = { 0, 0, 0, 0 };&lt;br /&gt;
 XBee xbee =  &amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;XBee&amp;lt;/span&amp;gt;();&lt;br /&gt;
 XBeeResponse response = &amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;XBeeResponse&amp;lt;/span&amp;gt;();&lt;br /&gt;
 Rx16Response rx = &amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;Rx16Response&amp;lt;/span&amp;gt;();&lt;br /&gt;
 Tx16Request tx = &amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;Tx16Request&amp;lt;/span&amp;gt;(0x1111, values, &amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;sizeof&amp;lt;/span&amp;gt;(values));&lt;br /&gt;
 TxStatusResponse txStatus = &amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;TxStatusResponse&amp;lt;/span&amp;gt;();&lt;br /&gt;
 &lt;br /&gt;
  &amp;lt;span style=&amp;quot;color: blue;&amp;quot;&amp;gt;void&amp;lt;/span&amp;gt; &amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;setup&amp;lt;/span&amp;gt;()&lt;br /&gt;
 {&lt;br /&gt;
    &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;// Initialise xbee / serial&amp;lt;/span&amp;gt;&lt;br /&gt;
   xbee.&amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;begin&amp;lt;/span&amp;gt;(9600);&lt;br /&gt;
   Serial.&amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;begin&amp;lt;/span&amp;gt;(9600);&lt;br /&gt;
 } &lt;br /&gt;
 &lt;br /&gt;
  &amp;lt;span style=&amp;quot;color: blue;&amp;quot;&amp;gt;void&amp;lt;/span&amp;gt; &amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;loop&amp;lt;/span&amp;gt;()&lt;br /&gt;
 {&lt;br /&gt;
    &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;// Read the values on analog pins&amp;lt;/span&amp;gt;&lt;br /&gt;
   Light = &amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;analogRead&amp;lt;/span&amp;gt;(sensorLightPin);&lt;br /&gt;
   Temp = &amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;analogRead&amp;lt;/span&amp;gt;(sensorTempPin);&lt;br /&gt;
   XValue = &amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;analogRead&amp;lt;/span&amp;gt;(XPin);&lt;br /&gt;
   YValue = &amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;analogRead&amp;lt;/span&amp;gt;(YPin);&lt;br /&gt;
   ZValue = &amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;analogRead&amp;lt;/span&amp;gt;(ZPin);&lt;br /&gt;
 &lt;br /&gt;
   xbee.&amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;readPacket&amp;lt;/span&amp;gt;();&lt;br /&gt;
 &lt;br /&gt;
   if(xbee.&amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;getResponse&amp;lt;/span&amp;gt;().&amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;isAvailable&amp;lt;/span&amp;gt;()){&lt;br /&gt;
      &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;// Got something&amp;lt;/span&amp;gt;&lt;br /&gt;
     Serial.&amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;print&amp;lt;/span&amp;gt;(&amp;quot;Got something\n&amp;quot;);&lt;br /&gt;
      &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;// Break the 10-bits of information retrieved from light&amp;lt;/span&amp;gt;&lt;br /&gt;
      &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;// and temperature into 2 bytes for each.&amp;lt;/span&amp;gt;&lt;br /&gt;
     values[0] = Temp &amp;gt;&amp;gt; 8 &amp;amp; 0xff;&lt;br /&gt;
     values[1] = Temp &amp;amp; 0xff;&lt;br /&gt;
     values[2] = Light &amp;gt;&amp;gt; 8 &amp;amp; 0xff;&lt;br /&gt;
     values[3] = Light &amp;amp; 0xff;&lt;br /&gt;
     Serial.&amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;print&amp;lt;/span&amp;gt;(values[0]);&lt;br /&gt;
     &lt;br /&gt;
      &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;// Sending values to server&amp;lt;/span&amp;gt;&lt;br /&gt;
     xbee.&amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;send&amp;lt;/span&amp;gt;(tx);&lt;br /&gt;
     &lt;br /&gt;
      &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;// After sending a tx request, we expect a status response&amp;lt;/span&amp;gt;&lt;br /&gt;
      &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;// from the server&amp;lt;/span&amp;gt;&lt;br /&gt;
      &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;// Wait up to 5 seconds for the status response&amp;lt;/span&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
     if (xbee.&amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;readPacket&amp;lt;/span&amp;gt;(5000)) {&lt;br /&gt;
        &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;// We got a response!&amp;lt;/span&amp;gt;&lt;br /&gt;
       Serial.&amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;print&amp;lt;/span&amp;gt;(&amp;quot;We got a response\n&amp;quot;);&lt;br /&gt;
       &lt;br /&gt;
        &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;// It should be a znet tx status&amp;lt;/span&amp;gt;&lt;br /&gt;
       if (xbee.&amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;getResponse&amp;lt;/span&amp;gt;().&amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;getApiId&amp;lt;/span&amp;gt;() == TX_STATUS_RESPONSE) {&lt;br /&gt;
         xbee.&amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;getResponse&amp;lt;/span&amp;gt;().&amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;getZBTxStatusResponse&amp;lt;/span&amp;gt;(txStatus);&lt;br /&gt;
         &lt;br /&gt;
          &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;// get the delivery status, the fifth byte&amp;lt;/span&amp;gt;&lt;br /&gt;
         if (txStatus.&amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;getStatus&amp;lt;/span&amp;gt;() == SUCCESS){&lt;br /&gt;
            &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;// Success! Time to celebrate&amp;lt;/span&amp;gt;&lt;br /&gt;
           Serial.&amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;print&amp;lt;/span&amp;gt;(&amp;quot;SUCCESS! Time to celebrate\n&amp;quot;);&lt;br /&gt;
         } else {&lt;br /&gt;
           &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;// The remote XBee did not receive our packet. Is it powered on?&amp;lt;/span&amp;gt;&lt;br /&gt;
          Serial.&amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;print&amp;lt;/span&amp;gt;(&amp;quot;The remote Xbee did not receive our packet\n&amp;quot;);&lt;br /&gt;
         }&lt;br /&gt;
       }&lt;br /&gt;
     } else {&lt;br /&gt;
       &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;// local XBee did not provide a timely TX Status Response -- should not happen&amp;lt;/span&amp;gt;&lt;br /&gt;
      Serial.&amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;print&amp;lt;/span&amp;gt;(&amp;quot;Local Xbee did not provide a timely TX Status Response\n&amp;quot;);&lt;br /&gt;
     }&lt;br /&gt;
     &lt;br /&gt;
   }&lt;br /&gt;
  &lt;br /&gt;
   &amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;delay&amp;lt;/span&amp;gt;(500);&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
=== Liste du matériel à acheter ===&lt;/div&gt;</summary>
		<author><name>Cdelberg</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=Objets_communiquants_et_gestion_de_l%27%C3%A9nergie&amp;diff=3748</id>
		<title>Objets communiquants et gestion de l'énergie</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=Objets_communiquants_et_gestion_de_l%27%C3%A9nergie&amp;diff=3748"/>
				<updated>2012-11-28T18:26:56Z</updated>
		
		<summary type="html">&lt;p&gt;Cdelberg : /* Energy Harvesting */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Présentation du projet ==&lt;br /&gt;
&lt;br /&gt;
=== Planning prévisionnel provisoire (jusqu'à la pré-soutenance)===&lt;br /&gt;
&lt;br /&gt;
Ce planning pourrait être amené à être modifié.&lt;br /&gt;
&lt;br /&gt;
'''''I) Etat de l'art''''' ( ~2-3 semaines)&lt;br /&gt;
&lt;br /&gt;
-Energy harvesting (Calvin)&lt;br /&gt;
&lt;br /&gt;
-Batteries (Justin)&lt;br /&gt;
&lt;br /&gt;
'''''II) Mesure de puissance des différents appareil Arduino''''' ( ~2 semaines)&lt;br /&gt;
&lt;br /&gt;
'''''III) Confronter théorie/réalité''''' ( ~1 semaine)&lt;br /&gt;
-estimer consommation de puissance&lt;br /&gt;
&lt;br /&gt;
-vérifier en pratique&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Amené à être ajouté:'''&lt;br /&gt;
&lt;br /&gt;
Mesure du Arduino de sa propre consommation.&lt;br /&gt;
&lt;br /&gt;
Mesure de la consommation du code (?)&lt;br /&gt;
&lt;br /&gt;
Applications:&lt;br /&gt;
&lt;br /&gt;
-Envoi des valeurs de l'Arduino au serveur.&lt;br /&gt;
&lt;br /&gt;
-Interface web pour interagir avec l'objet.&lt;br /&gt;
&lt;br /&gt;
== Etat de l'art ==&lt;br /&gt;
&lt;br /&gt;
=== Energy Harvesting ===&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
* Mosquino:&lt;br /&gt;
&lt;br /&gt;
''Mosquino'' est un matériel compatible avec le développement logiciel et dérivé de ''Arduino'', il permet de récupérer de l'énergie des sources ambiantes (chaleur, luminosité, vibrations)&lt;br /&gt;
Il n'est destiné qu'aux faibles consommations électriques et n'est encore qu'en phase de développement, il n'a pas encore été véritablement testé. &amp;lt;br/&amp;gt;&lt;br /&gt;
http://tim.cexx.org/?page_id=760&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
* Breakout board BOB-o&amp;lt;sub&amp;gt;994&amp;lt;/sub&amp;gt;6 :&lt;br /&gt;
&lt;br /&gt;
Cette carte utilise le collecteur d'énergie piezoelectrique LTC&amp;lt;sub&amp;gt;35&amp;lt;/sub&amp;gt;88 de Linear Technologies et permet non seulement de récupérer l'énergie piezoélectrique mais aussi l'énergie solaire. Initialement prévu pour fonctionner à faible voltage, la capacité de sortie peut-être dimensionnée pour recevoir une salve de courant de sortie plus élevée. &amp;lt;br/&amp;gt;&lt;br /&gt;
https://www.sparkfun.com/products/9946&lt;br /&gt;
&lt;br /&gt;
=== Mesure de la consommation énergétique ===&lt;br /&gt;
&lt;br /&gt;
WSIM permet la simulation de capteurs sans fil. Il permet notamment d'estimer la consommation électrique http://wsim.gforge.inria.fr/index.html&lt;br /&gt;
Pour l'instant il ne fonctionne qu'avec des microcontrolleurs TI. Le support des AVR est en cours.&lt;br /&gt;
L'estimation de la consommation énergétique utilise esimu http://esimu.gforge.inria.fr/index.html&lt;br /&gt;
&lt;br /&gt;
== Réalisation ==&lt;br /&gt;
&lt;br /&gt;
=== Liste du matériel à acheter ===&lt;/div&gt;</summary>
		<author><name>Cdelberg</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=Objets_communiquants_et_gestion_de_l%27%C3%A9nergie&amp;diff=3747</id>
		<title>Objets communiquants et gestion de l'énergie</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=Objets_communiquants_et_gestion_de_l%27%C3%A9nergie&amp;diff=3747"/>
				<updated>2012-11-28T18:08:32Z</updated>
		
		<summary type="html">&lt;p&gt;Cdelberg : /* Etat de l'art */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Présentation du projet ==&lt;br /&gt;
&lt;br /&gt;
=== Planning prévisionnel provisoire (jusqu'à la pré-soutenance)===&lt;br /&gt;
&lt;br /&gt;
Ce planning pourrait être amené à être modifié.&lt;br /&gt;
&lt;br /&gt;
'''''I) Etat de l'art''''' ( ~2-3 semaines)&lt;br /&gt;
&lt;br /&gt;
-Energy harvesting (Calvin)&lt;br /&gt;
&lt;br /&gt;
-Batteries (Justin)&lt;br /&gt;
&lt;br /&gt;
'''''II) Mesure de puissance des différents appareil Arduino''''' ( ~2 semaines)&lt;br /&gt;
&lt;br /&gt;
'''''III) Confronter théorie/réalité''''' ( ~1 semaine)&lt;br /&gt;
-estimer consommation de puissance&lt;br /&gt;
&lt;br /&gt;
-vérifier en pratique&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Amené à être ajouté:'''&lt;br /&gt;
&lt;br /&gt;
Mesure du Arduino de sa propre consommation.&lt;br /&gt;
&lt;br /&gt;
Mesure de la consommation du code (?)&lt;br /&gt;
&lt;br /&gt;
Applications:&lt;br /&gt;
&lt;br /&gt;
-Envoi des valeurs de l'Arduino au serveur.&lt;br /&gt;
&lt;br /&gt;
-Interface web pour interagir avec l'objet.&lt;br /&gt;
&lt;br /&gt;
== Etat de l'art ==&lt;br /&gt;
&lt;br /&gt;
=== Energy Harvesting ===&lt;br /&gt;
&lt;br /&gt;
Mosquino est un matériel compatible avec le développement logiciel et dérivé de Arduino, il permet de récupérer de l'énergie des sources ambiantes (chaleur, luminosité, vibrations)&lt;br /&gt;
Il n'est destiné qu'aux faibles consommations électriques et n'est encore qu'en phase de développement, il n'a pas encore été véritablement testé. http://tim.cexx.org/?page_id=760&lt;br /&gt;
&lt;br /&gt;
=== Mesure de la consommation énergétique ===&lt;br /&gt;
&lt;br /&gt;
WSIM permet la simulation de capteurs sans fil. Il permet notamment d'estimer la consommation électrique http://wsim.gforge.inria.fr/index.html&lt;br /&gt;
Pour l'instant il ne fonctionne qu'avec des microcontrolleurs TI. Le support des AVR est en cours.&lt;br /&gt;
L'estimation de la consommation énergétique utilise esimu http://esimu.gforge.inria.fr/index.html&lt;br /&gt;
&lt;br /&gt;
== Réalisation ==&lt;br /&gt;
&lt;br /&gt;
=== Liste du matériel à acheter ===&lt;/div&gt;</summary>
		<author><name>Cdelberg</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=Kinect2012&amp;diff=2426</id>
		<title>Kinect2012</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=Kinect2012&amp;diff=2426"/>
				<updated>2012-05-08T22:24:54Z</updated>
		
		<summary type="html">&lt;p&gt;Cdelberg : /* Avancement du projet */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Liste du matériel =&lt;br /&gt;
&lt;br /&gt;
== Présent == &lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
   &amp;lt;li&amp;gt;Kinect&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== A acheter ==&lt;br /&gt;
&lt;br /&gt;
= Présentation =&lt;br /&gt;
&lt;br /&gt;
Ce projet a pour objectif de mettre en place un système de choix d'appareil en espace commercial. Il s'agit, sur la base d'un système existant, d'améliorer le système de sélection des produits afin de le rendre plus ergonomique, de pouvoir le paramétrer plus simplement (par un vendeur), eventuellement d'augmenter le nombre de gestes reconnaissable. La situation d'usage pressentie est une catégorie de vente de produits difficilement déplacable par un client, pour des raisons de poids (par exemple un appareil de musculation) ou de taille (par exemple une tente).&lt;br /&gt;
&lt;br /&gt;
== Avancement du projet==&lt;br /&gt;
&lt;br /&gt;
=== Objectifs suggérés par les encadrants ===&lt;br /&gt;
&lt;br /&gt;
*Objectif principal : Améliorer un dispositif de sélection d'articles par gestes&lt;br /&gt;
&lt;br /&gt;
* Objectifs détaillés : &lt;br /&gt;
**Passer à la nouvelle version du SDK&lt;br /&gt;
**Enlever la calibration du squelette&lt;br /&gt;
**Interface pour un utilisateur lambda&lt;br /&gt;
&lt;br /&gt;
=== Réalisations concrètes ===&lt;br /&gt;
&lt;br /&gt;
=== Séances ===&lt;br /&gt;
&lt;br /&gt;
==== Séance du 08/02/2012 ==== &lt;br /&gt;
*Récupération des sources stables de OpenNI,PrimeSense Sensor Module for OpenNI et NITE &lt;br /&gt;
*Installation des dépendances requises pour installer OpenNI, PrimesSense et NITE d'après les README&lt;br /&gt;
*Compilation des sources&lt;br /&gt;
*Essais de compilation de quelques samples en java pour reconnaitre une personne ou une main&lt;br /&gt;
**Erreurs dans la compilation =&amp;gt; Manque de fichiers JAR ?&lt;br /&gt;
&lt;br /&gt;
==== Séance du 13/02/2012 ====&lt;br /&gt;
&lt;br /&gt;
*Installation terminé, la Kinect fonctionne et est reconnue.&lt;br /&gt;
*Installation de SensorKinect à la place de PrimeSense Sensor qui n’était pas le driver associé à la kinect (avin2-SensorKinect-faf4994)&lt;br /&gt;
*Test des samplesfournis avec OpenNi &lt;br /&gt;
&lt;br /&gt;
==== Séance du 15/02/2012 ====&lt;br /&gt;
&lt;br /&gt;
*Création d'un makefile pour compiler nos projet cpp&lt;br /&gt;
*Prise en main de Simpleread (profondeur, largeur, hauteur)&lt;br /&gt;
*Développement d'un petit soft &amp;quot;salut ça va&amp;quot; en fonction juste de la position en x,y,z qui marche entre  500 et 800 mm de profondeur&lt;br /&gt;
   (en dirigeant la main en haut à gauche, le terminal affiche &amp;quot;Salut !&amp;quot;, en dirigeant la main en haut à droite, le terminal affiche&amp;quot;ca va&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
==== Séance du 20/02/2012 ====&lt;br /&gt;
&lt;br /&gt;
*Récupération du projet de l'an passé ainsi que le rapport rapport de l’an dernier&lt;br /&gt;
*Installation de librairie SDL&lt;br /&gt;
*Modification du Makefile afin de pouvoir compiler le projet sur un PC&lt;br /&gt;
*Test du programme =&amp;gt; fonctionne mis à part petit problème de résolution sur l’image d’instruction&lt;br /&gt;
*Regarder les exemples de NITE =&amp;gt; rien de concluant pour le moment&lt;br /&gt;
*Sur le projet de l’an dernier =&amp;gt; pas forcément besoin de psy pose pour calibration mais calibration néanmoins nécéssaire.&lt;br /&gt;
&lt;br /&gt;
==== Séance du 22/02/2012 ====&lt;br /&gt;
&lt;br /&gt;
*Résolution du problème d'affichage du programme de l’ancien projet, test du programme.&lt;br /&gt;
*Calibration automatique avec la nouvelle version de nite (doc, sans “psi” pose)&lt;br /&gt;
? comment intégrer Player-sample au projet ?&lt;br /&gt;
&lt;br /&gt;
==== Séance du 07/03/2012 ====&lt;br /&gt;
&lt;br /&gt;
*Réinstallation compléte de OpenNi, Nite, KinectSensor, ainsi que leurs dépendances respectives et des librairies nécessaires à l'ancien projet car changement d'ordinateur...&lt;br /&gt;
*Problème pour lancer les Sample de OpenNi : &lt;br /&gt;
''Open failed: Failed to set USB interface!&lt;br /&gt;
Press any key to continue . . .''&lt;br /&gt;
&lt;br /&gt;
  Résolution : rmmod gspca_kinect &lt;br /&gt;
&lt;br /&gt;
*Création du Makefile pour déveloper avec Nite (Makefile à executer dans Sample Tests du dossier de Nite)&lt;br /&gt;
*Aucune idée sur comment aborder l'intégration de NITE au projet de l'an dernier...&lt;br /&gt;
&lt;br /&gt;
==== Séance du 12/03/2012 ====&lt;br /&gt;
&lt;br /&gt;
*Fonction pour sauvegarder et charger des squelette vers / depuis un fichier trouvée et en attente de test faute de kinect accessible.&lt;br /&gt;
&lt;br /&gt;
==== Séance du 14/03/2012 ====&lt;br /&gt;
&lt;br /&gt;
*Ajout de la fonction permettant de sauvegarder un squelette&lt;br /&gt;
*La fonction de chargement d’un fichier de squelette nous retourne une erreur :&lt;br /&gt;
    Function was not implemented!&lt;br /&gt;
&lt;br /&gt;
==== Séance du 19/03/2012 ====&lt;br /&gt;
&lt;br /&gt;
*Bloqué à Loadcalibrationdatatofile&lt;br /&gt;
*Confirmation de Laurent Grisoni, ces fonctions ne sont plus implémenter. Il faut installer une version de NITE antérieur pour pouvoir les utiliser.&lt;br /&gt;
&lt;br /&gt;
==== Séance du 21/03/2012 ====&lt;br /&gt;
*Installation de libmagick++-dev pour manipuler des images&lt;br /&gt;
*Création du programme permettant de prendre une image et un fichier texte en paramètre&lt;br /&gt;
l’image peut être un article du magasin tel qu’une tente, le texte correspond à la description de l’article précédemment cité.&lt;br /&gt;
&lt;br /&gt;
Compilation et utilisation : &lt;br /&gt;
#gcc -o image image.cpp `Magick++-config --cppflags --cxxflags --ldflags --libs`&lt;br /&gt;
#./image&lt;br /&gt;
Impossible d'ouvrir le fichier !&lt;br /&gt;
Utilisation :&lt;br /&gt;
./image nomImage.xxx nomFichier.xxx&lt;br /&gt;
# ./image tente.JPG description_tente.txt&lt;br /&gt;
&lt;br /&gt;
==== Séance du 28/03/2012 ====&lt;br /&gt;
&lt;br /&gt;
Réflexions  quant à une réelle amélioration du projet : &lt;br /&gt;
&lt;br /&gt;
* Pouvoir calibrer la position d'un objet dans un environnement 3D. Pour l'instant les objets sont définis statiquement dans un tableau du programme. Si on veut changer l'objet de place, il faut que le développeur entre dans les sources et recompose le projet.&lt;br /&gt;
&lt;br /&gt;
* Faire une interface graphique simple en qt en partant un projet/exemple dans qt creator. Cette interface est surtout écrite en qml. Il s'agit d'une grille de rectangle contenant chacun une image. On pourrait ainsi faire un menu avec deux rectangle :&lt;br /&gt;
 •un menu catalogue&lt;br /&gt;
 •un menu qui lance le projet de l'an passé&lt;br /&gt;
&lt;br /&gt;
Dans le catalogue on aurait une liste de filtres : sport, randonné, camping etc et les images des objets à vendre par décathlon dans une grille de rectangle.&lt;br /&gt;
&lt;br /&gt;
L'exemple dont je parle plus haut est navigable entièrement avec les flèches du clavier.&lt;br /&gt;
Aussi, on pourrait simuler l'appui sur une touche directionnelle des qu'un mouvement spécifique est reconnu par nite.&lt;br /&gt;
&lt;br /&gt;
Travail réalisé lors de la séance : &lt;br /&gt;
&lt;br /&gt;
*Compréhension du placement des items et de comment le modifier dans le cadre du programme que nous voulons créer. (itemsset.cpp, itemsset.hpp)&lt;br /&gt;
&lt;br /&gt;
*Révision du programme de création des images (presque terminé)&lt;br /&gt;
&lt;br /&gt;
*Le vendeur pourra bientôt, depuis le programme principal de la Kinect, afficher ses 8 images/textes, qu'il aura au préalable placés dans un dossier spécifique. Le programme est appelé lors de de l'initialisation du tableau d'items &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Séance du 04/04/2012 ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Exemple pour utiliser la Kinect comme une souris trouvé&lt;br /&gt;
http://www.keyboardmods.com/2010/12/howto-use-kinect-as-mouse-in-linux.html&lt;br /&gt;
Ce programme permet de simuler le déplacement d'une souris sous linux via la librairie ioinput&lt;br /&gt;
&lt;br /&gt;
*Adaptation du code pour simuler les touches d’un clavier : &lt;br /&gt;
gestes reconnus : &lt;br /&gt;
** swipe left associé à la touche gauche&lt;br /&gt;
** swipe right associé à la touche droite&lt;br /&gt;
** swipe up associé à la touche haut&lt;br /&gt;
** swipe down associé à la touche bas&lt;br /&gt;
&lt;br /&gt;
Problème : dès qu’un mouvement est reconnu, exemple swipe left, alors le curseur se ballade vers la gauche sans s’arrêter.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Commencement de la programmation de l’interface à partir d’un exemple sur QTcreator en Qt Quick (focus), pour l’instant possibilité de mettre plusieurs noms rentrés a la main dans une liste, ainsi que différentes images nommées de la façon suivante: “&amp;lt;nom&amp;gt;+(index+1)+&amp;lt;.extension&amp;gt;”.&lt;br /&gt;
*En attente d’une solution pour associer une grille d’image différente pour chaque instance de cette liste.&lt;br /&gt;
Projet d’interface pouvant être lancé depuis n’importe quel ordinateur sur lequel QTCreator est installé.&lt;br /&gt;
&lt;br /&gt;
==== Séance du 05/04/2012 ====&lt;br /&gt;
&lt;br /&gt;
*Problème d’appui long sur les touches résolu, mais touche entrée (push) et steady toujours pas reconnus.&lt;br /&gt;
&lt;br /&gt;
==== Séance du 11/04/2012 ====&lt;br /&gt;
&lt;br /&gt;
*Le programme reconnait maintenant l’appui sur la touche entrée quand on fait le mouvement push.&lt;br /&gt;
*Tentative d’implémenter la combinaison de touche LEFTALT+TAB pour changer de fenêtre mais inefficace. Pourtant le mouvement Circle qui lui est associé est bien reconnu.&lt;br /&gt;
&lt;br /&gt;
==== Séance du 16/04/2012 ====&lt;br /&gt;
&lt;br /&gt;
*Interface opérationnelle sous linux. Problème : reconnaissance des gestes hasardeuse …&lt;br /&gt;
&lt;br /&gt;
*Le programme qui reconnaît les mouvements de la main est capable de lancer en tâche de fond l’interface graphique&lt;br /&gt;
&lt;br /&gt;
*A faire : &lt;br /&gt;
**Lier les 2 projets ainsi que le programme utilisant la librairie imagemagick&lt;br /&gt;
**Surtout : Comment revenir du projet de l’an passé à celui de cet année : dessiner un cercle avec la main qui enverrait un signal pour tuer le processus ?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Le context menu : &lt;br /&gt;
**Aide sur comment utiliser l’interface ?&lt;br /&gt;
**Lancer le projet de l’an passé (javascript?)&lt;br /&gt;
&lt;br /&gt;
*Il faut étoffer aussi le catalogue car pour l’instant, il n’y a que 3 élement dans la liste =&amp;gt; télécharger et classer des articles depuis le site de décathlon (faute de base de donnée en ligne)&lt;br /&gt;
&lt;br /&gt;
=== Résultats ===&lt;br /&gt;
&lt;br /&gt;
*Le programme principal:&lt;br /&gt;
**On le lance et il lance l'interface graphique créée avec QT dans un fork et il gère la Kinect dans le même temps.&lt;br /&gt;
**En faisant un cercle avec la main, on peut passer au programme créé lors du projet de l'an dernier, lorsque l'on fait ce mouvement, le programme principal tue le processus de l'interface et lance celui de l'ancien projet à l'aide d'un nouveau fork.&lt;br /&gt;
**De même, lorsque le projet de l'an dernier est lancé, un mouvement circulaire de la main permet de revenir à l'interface.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Le programme de l'interface:&lt;br /&gt;
**On peut naviguer avec le clavier (Touches Haut,Bas,Droite,Gauche pour se déplacer et Tab pour valider) ou en faisant des mouvements avec la main reconnus par la Kinect et le programme(On pousse pour Tab(Push), on bouge la main dans la direction souhaitée pour se déplacer)&lt;br /&gt;
**Une aide sur l'utilisation peut être affichée si l'on va a gauche de la liste du catalogue.&lt;br /&gt;
**Le programme détecte lorsque l'utilisateur a fini un mouvement et est revenu dans sa position initiale en envoyant le signal de touche y pressée, autorise un autre mouvement et affiche le contour de l'objet selectionné en rouge lorsque c'est le cas.&lt;/div&gt;</summary>
		<author><name>Cdelberg</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=Controle_LED_256_couleurs&amp;diff=994</id>
		<title>Controle LED 256 couleurs</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=Controle_LED_256_couleurs&amp;diff=994"/>
				<updated>2011-05-13T16:17:21Z</updated>
		
		<summary type="html">&lt;p&gt;Cdelberg : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;FONT SIZE=4&amp;gt;&amp;lt;u&amp;gt;1ere scéance:&amp;lt;/u&amp;gt;&amp;lt;/FONT SIZE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;FONT COLOR=#444444&amp;gt;&amp;lt;u&amp;gt;'''Objectifs :'''&amp;lt;/u&amp;gt;&amp;lt;/FONT COLOR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt; Étude de la nanoboard &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt; Prise en main de la nanoboard. &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt; Mise en place du travail à effectuer. &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt; Partie FPGA &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt; Commencer la création de l'interface web &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;FONT COLOR=#444444&amp;gt;&amp;lt;u&amp;gt;'''Fin de la scéance :'''&amp;lt;/u&amp;gt;&amp;lt;/FONT COLOR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous avons compris et presque terminé la partie FPGA, mais n'avons pas encore travaillé sur la partie analogique,&lt;br /&gt;
&lt;br /&gt;
ni sur la création de l'interface web.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;FONT SIZE=4&amp;gt;&amp;lt;u&amp;gt;2eme scéance:&amp;lt;/u&amp;gt;&amp;lt;/FONT SIZE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;FONT COLOR=#444444&amp;gt;&amp;lt;u&amp;gt;'''Objectifs :'''&amp;lt;/u&amp;gt;&amp;lt;/FONT COLOR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt; Fin partie FPGA &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt; Partie analogique &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt; Réalisation de l'interface web &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;FONT COLOR=#444444&amp;gt;&amp;lt;u&amp;gt;'''Fin de la scéance :'''&amp;lt;/u&amp;gt;&amp;lt;/FONT COLOR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Concernant la partie électronique, nous avons testé le PWM mais elle ne fonctionnait pas et nous avons calculé les valeurs des composants nécessaires au filtre passe-bas.&lt;br /&gt;
&lt;br /&gt;
Pour la partie informatique, commencement de la page HTML, recherche de la syntaxe javascript pour faire des sliders sur internet et test du démon série a l'aide du prototype arduino.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;FONT SIZE=4&amp;gt;&amp;lt;u&amp;gt;3eme scéance:&amp;lt;/u&amp;gt;&amp;lt;/FONT SIZE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;FONT COLOR=#444444&amp;gt;&amp;lt;u&amp;gt;'''Objectifs :'''&amp;lt;/u&amp;gt;&amp;lt;/FONT COLOR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt; Finaliser le PWM &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt; Tester le PWM avec le montage du filtre &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt; Tester la page HTML et le code php/javascript fait chez nous &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt; Implantation sur la FoxBoard &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====================================FOXBOARD===================================&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;  Adresse ip : 172.26.79.103 &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Password : netusg20 &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt; Les fichiers implantés :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt; root/serie &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt; var/www/index2.html &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt; var/www/toC.php &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt; var/www/js/jquery-1.5.1.min.js &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt; var/www/js/jquery-ui-1.8.12.custom.min.js &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt; var/www/css/smoothness/jquery-ui-1.8.12.custom.css &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt; Les commandes pour executer le démon sur la foxboard : &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt; ssh -l root 172.26.79.103 &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt; netusg20 &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt; su www-data &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt; ./a.out /tmp/serie &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt; la page : http://172.26.79.103/ fonctionne désormais ! &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;/div&gt;</summary>
		<author><name>Cdelberg</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=Controle_LED_256_couleurs&amp;diff=989</id>
		<title>Controle LED 256 couleurs</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=Controle_LED_256_couleurs&amp;diff=989"/>
				<updated>2011-05-13T16:06:49Z</updated>
		
		<summary type="html">&lt;p&gt;Cdelberg : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;FONT SIZE=4&amp;gt;&amp;lt;u&amp;gt;1ere scéance:&amp;lt;/u&amp;gt;&amp;lt;/FONT SIZE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;FONT COLOR=#444444&amp;gt;&amp;lt;u&amp;gt;'''Objectifs :'''&amp;lt;/u&amp;gt;&amp;lt;/FONT COLOR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt; Étude de la nanoboard &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt; Prise en main de la nanoboard. &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt; Mise en place du travail à effectuer. &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt; Partie FPGA &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt; Commencer la création de l'interface web &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;FONT COLOR=#444444&amp;gt;&amp;lt;u&amp;gt;'''Fin de la scéance :'''&amp;lt;/u&amp;gt;&amp;lt;/FONT COLOR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous avons compris et presque terminé la partie FPGA, mais n'avons pas encore travaillé sur la partie analogique,&lt;br /&gt;
&lt;br /&gt;
ni sur la création de l'interface web.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;FONT SIZE=4&amp;gt;&amp;lt;u&amp;gt;2eme scéance:&amp;lt;/u&amp;gt;&amp;lt;/FONT SIZE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;FONT COLOR=#444444&amp;gt;&amp;lt;u&amp;gt;'''Objectifs :'''&amp;lt;/u&amp;gt;&amp;lt;/FONT COLOR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt; Fin partie FPGA &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt; Partie analogique &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt; Réalisation de l'interface web &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;FONT COLOR=#444444&amp;gt;&amp;lt;u&amp;gt;'''Fin de la scéance :'''&amp;lt;/u&amp;gt;&amp;lt;/FONT COLOR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Concernant la partie électronique, nous avons testé le PWM mais elle ne fonctionnait pas et nous avons calculé les valeurs des composants nécessaires au filtre passe-bas.&lt;br /&gt;
&lt;br /&gt;
Pour la partie informatique, commencement de la page HTML, recherche de la syntaxe javascript pour faire des sliders sur internet et test du démon série a l'aide du prototype arduino.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;FONT SIZE=4&amp;gt;&amp;lt;u&amp;gt;3eme scéance:&amp;lt;/u&amp;gt;&amp;lt;/FONT SIZE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;FONT COLOR=#444444&amp;gt;&amp;lt;u&amp;gt;'''Objectifs :'''&amp;lt;/u&amp;gt;&amp;lt;/FONT COLOR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt; Finaliser le PWM &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt; Tester le PWM avec le montage du filtre &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt; Tester la page HTML et le code php/javascript fait chez nous &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt; Implantation sur la FoxBoard &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;/div&gt;</summary>
		<author><name>Cdelberg</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=Controle_LED_256_couleurs&amp;diff=972</id>
		<title>Controle LED 256 couleurs</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=Controle_LED_256_couleurs&amp;diff=972"/>
				<updated>2011-05-13T12:05:31Z</updated>
		
		<summary type="html">&lt;p&gt;Cdelberg : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;FONT SIZE=4&amp;gt;&amp;lt;u&amp;gt;1ere scéance:&amp;lt;/u&amp;gt;&amp;lt;/FONT SIZE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;FONT COLOR=#444444&amp;gt;&amp;lt;u&amp;gt;'''Objectifs :'''&amp;lt;/u&amp;gt;&amp;lt;/FONT COLOR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt; Étude de la nanoboard &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt; Prise en main de la nanoboard. &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt; Mise en place du travail à effectuer. &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt; Partie FPGA &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt; Commencer la création de l'interface web &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;FONT COLOR=#444444&amp;gt;&amp;lt;u&amp;gt;'''Fin de la scéance :'''&amp;lt;/u&amp;gt;&amp;lt;/FONT COLOR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous avons compris et presque terminé la partie FPGA, mais n'avons pas encore travaillé sur la partie analogique,&lt;br /&gt;
&lt;br /&gt;
ni sur la création de l'interface web.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;FONT SIZE=4&amp;gt;&amp;lt;u&amp;gt;2eme scéance:&amp;lt;/u&amp;gt;&amp;lt;/FONT SIZE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;FONT COLOR=#444444&amp;gt;&amp;lt;u&amp;gt;'''Objectifs :'''&amp;lt;/u&amp;gt;&amp;lt;/FONT COLOR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt; Fin partie FPGA &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt; Partie analogique &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt; Réalisation de l'interface web &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;FONT COLOR=#444444&amp;gt;&amp;lt;u&amp;gt;'''Fin de la scéance :'''&amp;lt;/u&amp;gt;&amp;lt;/FONT COLOR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Concernant la partie électronique, nous avons testé le PWM mais elle ne fonctionnait pas et nous avons calculé les valeurs des composants nécessaires au filtre passe-bas.&lt;br /&gt;
&lt;br /&gt;
Pour la partie informatique, commencement de la page HTML, recherche de la syntaxe javascript pour faire des sliders sur internet et test du démon série a l'aide du prototype arduino.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;FONT SIZE=4&amp;gt;&amp;lt;u&amp;gt;3eme scéance:&amp;lt;/u&amp;gt;&amp;lt;/FONT SIZE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;FONT COLOR=#444444&amp;gt;&amp;lt;u&amp;gt;'''Objectifs :'''&amp;lt;/u&amp;gt;&amp;lt;/FONT COLOR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt; Finaliser le PWM &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt; Tester le PWM avec le montage du filtre &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt; Tester la page HTML et le code php/javascript fait chez nous &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt; Implantation sur la FoxBoard &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;/div&gt;</summary>
		<author><name>Cdelberg</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=Controle_LED_256_couleurs&amp;diff=956</id>
		<title>Controle LED 256 couleurs</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=Controle_LED_256_couleurs&amp;diff=956"/>
				<updated>2011-05-11T12:18:25Z</updated>
		
		<summary type="html">&lt;p&gt;Cdelberg : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;FONT SIZE=4&amp;gt;&amp;lt;u&amp;gt;1ere scéance:&amp;lt;/u&amp;gt;&amp;lt;/FONT SIZE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;FONT COLOR=#444444&amp;gt;&amp;lt;u&amp;gt;'''Objectifs :'''&amp;lt;/u&amp;gt;&amp;lt;/FONT COLOR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt; Étude de la nanoboard &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt; Prise en main de la nanoboard. &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt; Mise en place du travail à effectuer. &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt; Partie FPGA &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt; Commencer la création de l'interface web &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;FONT COLOR=#444444&amp;gt;&amp;lt;u&amp;gt;'''Fin de la scéance :'''&amp;lt;/u&amp;gt;&amp;lt;/FONT COLOR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous avons compris et presque terminé la partie FPGA, mais n'avons pas encore travaillé sur la partie analogique,&lt;br /&gt;
&lt;br /&gt;
ni sur la création de l'interface web.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;FONT SIZE=4&amp;gt;&amp;lt;u&amp;gt;2eme scéance:&amp;lt;/u&amp;gt;&amp;lt;/FONT SIZE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;FONT COLOR=#444444&amp;gt;&amp;lt;u&amp;gt;'''Objectifs :'''&amp;lt;/u&amp;gt;&amp;lt;/FONT COLOR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt; Fin partie FPGA &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt; Partie analogique &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt; Réalisation de l'interface web &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;/div&gt;</summary>
		<author><name>Cdelberg</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=Controle_LED_256_couleurs&amp;diff=955</id>
		<title>Controle LED 256 couleurs</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=Controle_LED_256_couleurs&amp;diff=955"/>
				<updated>2011-05-11T12:09:46Z</updated>
		
		<summary type="html">&lt;p&gt;Cdelberg : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;FONT SIZE=4&amp;gt;&amp;lt;u&amp;gt;1ere scéance:&amp;lt;/u&amp;gt;&amp;lt;/FONT SIZE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;FONT COLOR=#444444&amp;gt;&amp;lt;u&amp;gt;'''Objectifs :'''&amp;lt;/u&amp;gt;&amp;lt;/FONT COLOR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous nous interesserons surtout à la partie FPGA (passe-bas et PWM) puis si le temps nous le permet nous nous pencherons sur la création de l'interface web.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;FONT SIZE=4&amp;gt;&amp;lt;u&amp;gt;2eme scéance:&amp;lt;/u&amp;gt;&amp;lt;/FONT SIZE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;FONT COLOR=#444444&amp;gt;&amp;lt;u&amp;gt;'''Objectifs :'''&amp;lt;/u&amp;gt;&amp;lt;/FONT COLOR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt; Fin partie FPGA &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt; Partie analogique &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt; Réalisation de l'interface web &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;/div&gt;</summary>
		<author><name>Cdelberg</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=Controle_LED_256_couleurs&amp;diff=815</id>
		<title>Controle LED 256 couleurs</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=Controle_LED_256_couleurs&amp;diff=815"/>
				<updated>2011-05-06T12:42:20Z</updated>
		
		<summary type="html">&lt;p&gt;Cdelberg : Page créée avec « 1ere scéance:  &amp;lt;s&amp;gt;'''Objectifs :'''&amp;lt;/s&amp;gt; Nous nous interesserons surtout à la partie FPGA (passe-bas et PWM) puis si le temps nous le permet nous nous pencherons sur la cré... »&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;1ere scéance:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;s&amp;gt;'''Objectifs :'''&amp;lt;/s&amp;gt;&lt;br /&gt;
Nous nous interesserons surtout à la partie FPGA (passe-bas et PWM) puis si le temps nous le permet nous nous pencherons sur la création de l'interface web.&lt;/div&gt;</summary>
		<author><name>Cdelberg</name></author>	</entry>

	</feed>