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

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Implantation_d%27un_filtre_FIR-FX-LMS_sur_FPGA_pour_l%27annulation_de_Bruit_Acoustique&amp;diff=27800</id>
		<title>Implantation d'un filtre FIR-FX-LMS sur FPGA pour l'annulation de Bruit Acoustique</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Implantation_d%27un_filtre_FIR-FX-LMS_sur_FPGA_pour_l%27annulation_de_Bruit_Acoustique&amp;diff=27800"/>
				<updated>2016-02-24T15:49:52Z</updated>
		
		<summary type="html">&lt;p&gt;Vpiat : /* Semaine 6 : du 22/02 au 27/02 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=='''Cahier des Charges'''==&lt;br /&gt;
===Présentation générale du projet===&lt;br /&gt;
&lt;br /&gt;
====Contexte====&lt;br /&gt;
Les problèmes de bruit acoustiques sont de plus en plus présents en industrie avec de plus en plus de moteurs, de transformateurs, de compresseurs, de ventilateur, etc… La plus part du temps, on utilise des moyens passifs pour réduire le bruit, comme des murs, des enclos, des silencieux… Ces systèmes passifs sont utilisés pour leur forte atténuation de bruit sur une large gamme de fréquence. Cependant, ils sont relativement imposants, coûteux et inefficace dans les basses fréquences.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
L'utilisation d'un filtre actif permet de résoudre ces problèmes. En effet, grâce au système de Contrôle Actif du bruit (Active Noise Control – ANC), on peut annuler les bruits primaires en superposant un signal inverse à ce bruit primaire. Ce signal inverse possède la même amplitude avec une opposition de phase. La conception d’un ANC est rapide et efficace, il suffit d’un micro pour recueillir le bruit primaire et d’un haut-parleur pour envoyer l’inverse de ce bruit. &lt;br /&gt;
&lt;br /&gt;
====Description du projet====&lt;br /&gt;
&lt;br /&gt;
On propose ici de réaliser un filtre actif (ANC) permettant d'annuler une source de bruit. Pour cela, nous utiliserons un filtre numérique de type FIR (Finite Impulse Response) avec une adaptation des coefficients par l'algorithme Filtered X Least Mean Square (FX-LMS). Ce filtre sera implémenté sur FPGA permettant de traiter les données en temps réel.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Objectif ====&lt;br /&gt;
&lt;br /&gt;
Notre objectif est d'annuler un bruit primaire envoyé par un Haut-parleur grâce à un second Haut parleur :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Schéma_maquette.PNG]]&lt;br /&gt;
&lt;br /&gt;
Le Haut-parleur 2 envoi un bruit primaire qui sera déformé par le tube. Le Haut-parleur 1 devra donc envoyé l'inverse du son du Haut-parleur 2 déformé.&lt;br /&gt;
Le micro 2 permet de récupérer le bruit primaire et le micro 1 permet de récupéré le son déformé moins le son inverse, c'est à dire à notre erreur de notre filtre.&lt;br /&gt;
&lt;br /&gt;
Le son réceptionné par les micros devra être échantillonné à une fréquence de 48kHz, ainsi une grande partie de l'information sera récupéré et le traitement des signaux aura le temps de s'effectuer.&lt;br /&gt;
&lt;br /&gt;
Nous devrons pouvoir modifier le pas de convergence à distance à l'aide d'une communication filaire, soit à l'aide du protocole SPI, I2C ou UART, nous verrons cela en fonction du matériel disponible. L'envoi des données se fera via mathlab. De plus le FPGA devra envoyer les valeurs des coefficients du filtre que nous afficherons sur mathlab.&lt;br /&gt;
&lt;br /&gt;
== '''Etapes du Projet''' ==&lt;br /&gt;
&lt;br /&gt;
=== Choix techniques : matériel, logiciels, sources === &lt;br /&gt;
&lt;br /&gt;
- Board Basys3 contenant un FPGA Artix7 xc7a35t cpg236 -1&lt;br /&gt;
&lt;br /&gt;
- 2 Convertisseur Analogique to Digital : PmodAD2&lt;br /&gt;
&lt;br /&gt;
- 1 Convertisseur Digital to Analogique : PmodDA4&lt;br /&gt;
&lt;br /&gt;
- 2 Haut Parleurs AD2071Z (8ohm/64mm de diamètre)&lt;br /&gt;
&lt;br /&gt;
- 2 microphones&lt;br /&gt;
&lt;br /&gt;
- Matlab&lt;br /&gt;
&lt;br /&gt;
- Vivado 2015.4 Xilinx&lt;br /&gt;
&lt;br /&gt;
=== Plan de Travail ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;Semaine&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;du 11/01 au 17/01&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;du 18/01 au 24/01&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;du 25/01 au 31/01&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;du 1/02 au 7/02&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;du 8/02 au 14/02&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;du 15/02 au 21/02&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;du 22/02 au 25/02&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;Réalisation&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;Etude bibliographique et théorique du Filtre FIR avec l'adaptation par FX-LMS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;Simulation des algorithmes sous Matlab&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;Codage du programme en VHDL et test sur le FPGA Artix7&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;Implémentation du code sur Artix7 avec essai pratique&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;Implémentation du code sur Artix7 avec essai pratique&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;Développement de la partie communication avec une IHM&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;Rédaction du rapport de projet&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Tableau de bord''' ==&lt;br /&gt;
&lt;br /&gt;
===Semaine 1 : du 11/01 au 17/01 ===&lt;br /&gt;
====Etude théorique du filtre FIR avec adaptation par l'algorithme FX-LMS====&lt;br /&gt;
'''1) Le filtre FIR'''&lt;br /&gt;
&lt;br /&gt;
Un filtre FIR (Finite Impulse Response) est un filtre numérique qui est caractérisé par une réponse basée sur un nombre fini de valeurs du signal d’entrées. Un filtre FIR est décrit par une somme de coefficient multiplié par les valeurs d’entrées.&lt;br /&gt;
Si 〖x[i]〗_(1≤i≤n) représente les valeurs du signal d'entrée, bk les valeurs des coefficients et 〖y[i]〗_(1≤i≤n) les valeurs du signal de sortie pour n échantillons, alors un filtre FIR se défit par la combinaison linéaire :&lt;br /&gt;
[[Fichier:Equation_fir.PNG]]&lt;br /&gt;
&lt;br /&gt;
'''2) Algorithme d'adaptation LMS (Least MeanSqare)'''&lt;br /&gt;
&lt;br /&gt;
Nous allons utiliser un algorithme adaptatif de type LMS (Least MeanSqare). Cet algorithme est le plus utilisé dans le milieu de l’industrie en raison de sa simplicité. Cet algorithme est une approximation de l’algorithme du gradient déterministe. Le principe de cet algorithme est de trouver les coefficients optimums permettant de décrire le système à modéliser. Il commence par mettre tous les coefficients à zéro puis à chaque étape, calcule les nouveaux coefficients en fonction de l’erreur. Si l’erreur est nulle, alors les coefficients modélisent le système. Voici les équations de cet algorithme :&lt;br /&gt;
&lt;br /&gt;
y(n)=w^T (n)×x(n)&lt;br /&gt;
&lt;br /&gt;
e(n)=d(n)-y(n)&lt;br /&gt;
&lt;br /&gt;
w(n+1)=w(n)+ μ×x(n)×e(n)&lt;br /&gt;
&lt;br /&gt;
Avec : &lt;br /&gt;
&lt;br /&gt;
y : signal de sortie du filtre&lt;br /&gt;
&lt;br /&gt;
x : signal d’entrée du filtre&lt;br /&gt;
&lt;br /&gt;
w : les coefficients du filtre&lt;br /&gt;
&lt;br /&gt;
e : l’erreur récupérée&lt;br /&gt;
&lt;br /&gt;
d : le signal désiré&lt;br /&gt;
&lt;br /&gt;
µ : pas d’adaptation de l’algorithme&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Schema_adaptation_lms.PNG|600px]]&lt;br /&gt;
&lt;br /&gt;
Cet algorithme est très efficace mais ne nous permet pas de modéliser correctement notre système&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''3) Algorithme d'adaptation FX-LMS'''&lt;br /&gt;
&lt;br /&gt;
Reprenons notre système :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Schéma_canaux.PNG|800px]]&lt;br /&gt;
&lt;br /&gt;
Sur ce schéma, on retrouve deux canaux de propagation du son. Or l'algorithme LMS ne prend en compte un seul canal de propagation. Nous allons donc utiliser l’algorithme FX-LMS.&lt;br /&gt;
L’introduction du nouveau canal dans notre algorithme peut être traitée de plusieurs manières. Dans notre cas, nous allons procéder en deux : une estimation du canal S puis une modélisation du canal P. &lt;br /&gt;
Cette méthode engendre une hypothèse :&lt;br /&gt;
Le canal S est considéré comme stable et ne change jamais&lt;br /&gt;
Du coup, on pourra modéliser le canal S avec un premier filtre FIR-LMS en mode identification de système puis on utilisera un filtre FIR-FX-LMS en mode modélisation inverse.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Schema_fx-lms1.PNG|800px]]&lt;br /&gt;
&lt;br /&gt;
La partie verte correspond au domaine acoustique et la partie bleue correspond au domaine électronique, c’est le système que l’on va implanter dans notre FPGA. Le bloc Ŝ(z) correspond à notre canal de propagation S(z) estimé. L’ajout de ce bloc entraine donc une modification de l’équation de l’algorithme :&lt;br /&gt;
&lt;br /&gt;
d(n)=X(n)×P(z)&lt;br /&gt;
&lt;br /&gt;
e(n)=d(n)-S(z)×W(n)×X(n)&lt;br /&gt;
&lt;br /&gt;
W(n+1)=W(n)+ μ ×e(n)×X'(n)&lt;br /&gt;
&lt;br /&gt;
X'(n)= Ŝ(z)×X(n)&lt;br /&gt;
&lt;br /&gt;
Il va à présent nous falloir décrire ces équations dans notre FPGA.&lt;br /&gt;
&lt;br /&gt;
===Semaine 2 : du 18/01 au 24/01 ===&lt;br /&gt;
====Simulation du filtre sous Matlab====&lt;br /&gt;
&lt;br /&gt;
Pour simuler notre filtre, nous allons coder les équations de notre filtre dans Matlab en appliquant des signaux théoriques. Le code va se décomposer en deux parties : la première partie permettra de simuler notre filtre en virgule flottante, c’est-à-dire de garder une précisions maximales sur les chiffres puis la deuxième partie sera de simuler cette fois ci en virgule fixe, cela nous permet d’arrondir nos chiffres en fonction d’un nombre de bit prédéfini. La simulation en virgule fixe nous permet de simuler notre schéma électrique, cela dans le but de générer des fichiers de résultats que nous pourrons comparer avec notre code VHDL grâce à un transfert de fichier.&lt;br /&gt;
&lt;br /&gt;
'''1) Simulation en virgule flotante'''&lt;br /&gt;
&lt;br /&gt;
Pour simuler notre système, nous allons utiliser des signaux sinusoïdaux. Les canaux de propagation seront modéliser par des tableaux de coefficients générés aléatoirement par Matlab. Nous allons donc faire passer nos signaux d'entrés dans les canaux de propagation grâce à un produit de convolution puis ensuite nous allons utiliser notre algorithme pour modéliser notre système. Voici les résultats des Simulations :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Resultat_sim_virgule_flotante_1.PNG|900px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Sur le premier graphique, on retrouve le signal déformé par le canal en rouge et le signal multiplier par les coefficients modélisé en bleue. Sur le deuxième graphique, on retrouve l’erreur entre le signal modélisé et le signal déformé.&lt;br /&gt;
On remarque bien la convergence entre notre signal modélisé et notre signal réel ainsi que la valeur extrêmement faible de notre erreur.&lt;br /&gt;
Maintenant que la modélisation de notre canal S est validée, nous pouvons utiliser l’algorithme du FX-LMS, voici le résultat :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Resultat_sim_virgule_flotante_2.PNG|900px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Sur le premier graphique, le signal rouge correspond à notre signal déformé par le canal P et le signal bleu le signal envoyé à notre haut-parleur1. Sur le deuxième graphique, on retrouve notre erreur entre les deux signaux.&lt;br /&gt;
&lt;br /&gt;
'''2) Simulation en virgule flotante'''&lt;br /&gt;
&lt;br /&gt;
Le but de cette simulation est de se placer en situation réelle, c’est-à-dire de simuler le même comportement que ce qu’il va se passer dans notre FPGA. Pour cela, nous allons fixer chaque valeur sur 16 bits. Cela nous permet de traiter les valeurs avec la même précision que notre FPGA.&lt;br /&gt;
&lt;br /&gt;
De même que précédemment, voici les résultats de la modélisation du canal S :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Resultat_sim_virgule_fixe1.PNG|900px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Et le résultat de simulation de l'algorithme total :&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Resultat_sim_virgule_fixe2.PNG|900px]]&lt;br /&gt;
&lt;br /&gt;
===Semaine 3 : du 25/01 au 31/01 ===&lt;br /&gt;
&lt;br /&gt;
- Prise de connaissance avec la board Basys3 et son FPGA Artix 7 sur le logiciel Vivado. Nous avons récupéré une IP pour le protocole SPI afin de communiquer avec le DAC.&lt;br /&gt;
&lt;br /&gt;
'''-Protocole Serial Peripheral Interface (SPI)'''&lt;br /&gt;
&lt;br /&gt;
Le SPI est une interface série permettant d'interconnecter les composantes d'un système périphérique avec une minimum de fils. Sur le bus, il y a un maître qui initie toutes les communications et plusieurs esclaves qui transmette des données uniquement lorsque le maître les actives. Le principale avantage de ce protocole est qu'il est en full-duplex, le maître et l'esclave peuvent communiquer simultanément dans les deux sens.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Le bus est composé de quatre fils: &lt;br /&gt;
&lt;br /&gt;
&amp;quot;sclk&amp;quot; pour l'horloge du bus&lt;br /&gt;
&lt;br /&gt;
&amp;quot;mosi&amp;quot; pour les données du maître vers l'esclave&lt;br /&gt;
 &lt;br /&gt;
&amp;quot;miso&amp;quot; pour véhiculer les données de l'esclave au maître&lt;br /&gt;
 &lt;br /&gt;
&amp;quot;ss&amp;quot; pour activer l'esclave voulu.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:SPI protocole.png]]&lt;br /&gt;
&lt;br /&gt;
'''-Transfert SPI et communication avec le convertisseur PMOD DA4'''&lt;br /&gt;
&lt;br /&gt;
Afin de communiquer avec le PMOD DA4, le maître (le fpga) active la ligne SS de l'esclave (le PMOD) avec lequel il veut parler puis génère le signal d'horloge pour 32 bits. La polarité et la phase du signal sont tel que les données sont lues dès le premier front descendant de l'horloge avec une fréquence de 50MHz (clock du fpga divisé par deux).&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Transfert donnee SPI.png]]&lt;br /&gt;
&lt;br /&gt;
Avant de pouvoir convertir les données il faut initialiser le PMOD en lui envoyant une série de commande. C'est pour cela qu'il y a 32 bits d'informations à envoyé: 4 bits sont dédiés aux commandes, 4 bits pour les adresses des DACs à sélectionner puis 12 bits pour les données à convertir. La première commande envoyé sélectionne la référence interne du PMOD (qui est à 2.5V), la deuxième allume les 8 DACs disponible sur le PMOD puis enfin nous pouvons envoyer les données en continue avec une troisième commande qui écrira et mettra à jours les DACs.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Commandes pmodDA4.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Voici la simulation sur vivado de l'envoie de la donnée &amp;quot;aa&amp;quot; (en hexadécimal) avec ce protocole:&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Protocole spi fpga.png]]&lt;br /&gt;
&lt;br /&gt;
Sur le fil MOSI nous pouvons remarquer que cette série de bits a été envoyé: xxxx 0011 1111 Data xxxx xxxx avec Data = aah&lt;br /&gt;
&lt;br /&gt;
Avec pour commande : &amp;quot;0011&amp;quot; qui demande à écrire et mettre à jours tous les DACs car l'adresse envoyé est &amp;quot;1111&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''- Codage du filtre avec adaptation en VHDL :'''&lt;br /&gt;
&lt;br /&gt;
Nous avons commencé par définir l'architecture de notre composant. Voici cette architecture :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Architecture_FIR.PNG|900px]]&lt;br /&gt;
&lt;br /&gt;
Puis nous avons coder les différents composants que nous avons connecter suivant l'architecture. Il nous a également fallut créer une machine à état permettant de synchroniser les signaux. &lt;br /&gt;
&lt;br /&gt;
Une fois notre Filtre coder, nous avons utilisé un transfert de fichier entre Matlab et Modelsim (Logiciel de simulation de circuit VHDL) pour comparer les résultats :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Resultat_sim_filtre.PNG|900px]]&lt;br /&gt;
&lt;br /&gt;
Nous voyons donc que les courbes ne correspondent pas... Cependant, on remarque que le filtre en VHDL s'adapte par rapport à un signal mais pas par rapport au bon. Cela vient peut-être de la méthode utilisé. C'est à dire que l'erreur de notre filtre est généré par Matlab or Modelsim enregistre normalement une autre erreur. Nous allons donc passer à l'implémentation du Filtre dans le FPGA pour voir si l'erreur vient de la méthode utilisé ou de notre code.&lt;br /&gt;
&lt;br /&gt;
===Semaine 3 : du 01/02 au 7/02 ===&lt;br /&gt;
&lt;br /&gt;
- Création de l'amplificateur pour le micro :&lt;br /&gt;
&lt;br /&gt;
Nous utilisons un microphone electret, nous avons donc besoin d'un circuit permettant l'utilisation du micro. Voici son schéma que nous allons réaliser :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Sch_ampli_mic.PNG|900px]]&lt;br /&gt;
&lt;br /&gt;
- Création du tube pour notre expérience&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Utilisation du XADC sur la carte Basys3'''&lt;br /&gt;
&lt;br /&gt;
Nous avons décidé d'utiliser le bloc XADC qui se trouve sur la carte Basys3 plutôt que d'utiliser le PMOD AD2. Ceci nous permet d'aller plus vite dans la conversion du signal (qui est à 100MHz avec le XADC) car nous ne perdons moins de temps avec la communication entre les composants (pas de protocole SPI à utiliser).&lt;br /&gt;
&lt;br /&gt;
Le bloc XADC contient deux ADC de 12bits à 1 MSPS (Mega Sample Per Seconde) que nous pouvons utiliser simultanément, nous les utiliserons donc pour pouvoir convertir les signaux reçu des deux micros. Le signal analogique à convertir doit se trouver entre 0 et 1V, les datas en sortie de l'XADC iront de 000h à FFFh. En sachant que 1 LSB = 1V / 4096, la précision sera de 244µV par bit.&lt;br /&gt;
&lt;br /&gt;
===Semaine 6 : du 22/02 au 27/02 ===&lt;br /&gt;
&lt;br /&gt;
Nous avons passé le début de semaine à construire la maquette et à effectuer les premiers tests :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Maquette_tube.jpg||300px]]&lt;br /&gt;
&lt;br /&gt;
'''ERRATUM'''&lt;br /&gt;
&lt;br /&gt;
Après vérification des comparaison entre modelsim et matlab, nous avons remarqué que nous ne faisions pas les bonnes comparaisons. Nous comparions le signal déformé par le canal de propagation S et le signal non déformé. Après correction, voici les résultats :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Resultat_sim_filtre_correc.PNG]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Finalement, le code VHDL de notre filtre est fonctionnel et devrais fonctionner. Suite au premier test, nous avons des problèmes de calibrage des modules de conversion analogique numérique que nous allons essayer de résoudre.&lt;br /&gt;
&lt;br /&gt;
==''' Sources, Tuto &amp;amp; Datasheet '''==&lt;br /&gt;
&lt;br /&gt;
Liens Basys3: [https://reference.digilentinc.com/basys3:basys3]&lt;br /&gt;
&lt;br /&gt;
Comment programmer un Basys3 [https://reference.digilentinc.com/basys3:gsg#dokuwiki__top]&lt;br /&gt;
&lt;br /&gt;
Basys3: Référence [https://reference.digilentinc.com/_media/basys3:basys3_rm.pdf] Schematic [https://reference.digilentinc.com/_media/basys3:basys3_sch.pdf]&lt;br /&gt;
&lt;br /&gt;
PmodDA4: Datasheet du AD5628 [http://www.analog.com/media/en/technical-documentation/data-sheets/AD5628_5648_5668.pdf] Référence [https://reference.digilentinc.com/_media/pmod:pmod:pmodDA4_rm.pdf] Schematic [https://reference.digilentinc.com/_media/pmod:pmod:pmodDA4_sch.pdf]&lt;br /&gt;
&lt;br /&gt;
PmodAD2: Référence [https://reference.digilentinc.com/_media/pmod:pmod:pmodAD2_rm.pdf] Schematic [https://reference.digilentinc.com/_media/pmod:pmod:pmodAD2_sch.pdf]&lt;br /&gt;
&lt;br /&gt;
IP(Intellectual Property) VHDL pour protocole SPI: [https://eewiki.net/pages/viewpage.action?pageId=4096096]&lt;br /&gt;
&lt;br /&gt;
Datasheet Memory ressources [http://www.xilinx.com/support/documentation/user_guides/ug473_7Series_Memory_Resources.pdf]&lt;/div&gt;</summary>
		<author><name>Vpiat</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Implantation_d%27un_filtre_FIR-FX-LMS_sur_FPGA_pour_l%27annulation_de_Bruit_Acoustique&amp;diff=27799</id>
		<title>Implantation d'un filtre FIR-FX-LMS sur FPGA pour l'annulation de Bruit Acoustique</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Implantation_d%27un_filtre_FIR-FX-LMS_sur_FPGA_pour_l%27annulation_de_Bruit_Acoustique&amp;diff=27799"/>
				<updated>2016-02-24T15:48:32Z</updated>
		
		<summary type="html">&lt;p&gt;Vpiat : /* Semaine 6 : du 22/02 au 27/02 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=='''Cahier des Charges'''==&lt;br /&gt;
===Présentation générale du projet===&lt;br /&gt;
&lt;br /&gt;
====Contexte====&lt;br /&gt;
Les problèmes de bruit acoustiques sont de plus en plus présents en industrie avec de plus en plus de moteurs, de transformateurs, de compresseurs, de ventilateur, etc… La plus part du temps, on utilise des moyens passifs pour réduire le bruit, comme des murs, des enclos, des silencieux… Ces systèmes passifs sont utilisés pour leur forte atténuation de bruit sur une large gamme de fréquence. Cependant, ils sont relativement imposants, coûteux et inefficace dans les basses fréquences.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
L'utilisation d'un filtre actif permet de résoudre ces problèmes. En effet, grâce au système de Contrôle Actif du bruit (Active Noise Control – ANC), on peut annuler les bruits primaires en superposant un signal inverse à ce bruit primaire. Ce signal inverse possède la même amplitude avec une opposition de phase. La conception d’un ANC est rapide et efficace, il suffit d’un micro pour recueillir le bruit primaire et d’un haut-parleur pour envoyer l’inverse de ce bruit. &lt;br /&gt;
&lt;br /&gt;
====Description du projet====&lt;br /&gt;
&lt;br /&gt;
On propose ici de réaliser un filtre actif (ANC) permettant d'annuler une source de bruit. Pour cela, nous utiliserons un filtre numérique de type FIR (Finite Impulse Response) avec une adaptation des coefficients par l'algorithme Filtered X Least Mean Square (FX-LMS). Ce filtre sera implémenté sur FPGA permettant de traiter les données en temps réel.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Objectif ====&lt;br /&gt;
&lt;br /&gt;
Notre objectif est d'annuler un bruit primaire envoyé par un Haut-parleur grâce à un second Haut parleur :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Schéma_maquette.PNG]]&lt;br /&gt;
&lt;br /&gt;
Le Haut-parleur 2 envoi un bruit primaire qui sera déformé par le tube. Le Haut-parleur 1 devra donc envoyé l'inverse du son du Haut-parleur 2 déformé.&lt;br /&gt;
Le micro 2 permet de récupérer le bruit primaire et le micro 1 permet de récupéré le son déformé moins le son inverse, c'est à dire à notre erreur de notre filtre.&lt;br /&gt;
&lt;br /&gt;
Le son réceptionné par les micros devra être échantillonné à une fréquence de 48kHz, ainsi une grande partie de l'information sera récupéré et le traitement des signaux aura le temps de s'effectuer.&lt;br /&gt;
&lt;br /&gt;
Nous devrons pouvoir modifier le pas de convergence à distance à l'aide d'une communication filaire, soit à l'aide du protocole SPI, I2C ou UART, nous verrons cela en fonction du matériel disponible. L'envoi des données se fera via mathlab. De plus le FPGA devra envoyer les valeurs des coefficients du filtre que nous afficherons sur mathlab.&lt;br /&gt;
&lt;br /&gt;
== '''Etapes du Projet''' ==&lt;br /&gt;
&lt;br /&gt;
=== Choix techniques : matériel, logiciels, sources === &lt;br /&gt;
&lt;br /&gt;
- Board Basys3 contenant un FPGA Artix7 xc7a35t cpg236 -1&lt;br /&gt;
&lt;br /&gt;
- 2 Convertisseur Analogique to Digital : PmodAD2&lt;br /&gt;
&lt;br /&gt;
- 1 Convertisseur Digital to Analogique : PmodDA4&lt;br /&gt;
&lt;br /&gt;
- 2 Haut Parleurs AD2071Z (8ohm/64mm de diamètre)&lt;br /&gt;
&lt;br /&gt;
- 2 microphones&lt;br /&gt;
&lt;br /&gt;
- Matlab&lt;br /&gt;
&lt;br /&gt;
- Vivado 2015.4 Xilinx&lt;br /&gt;
&lt;br /&gt;
=== Plan de Travail ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;Semaine&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;du 11/01 au 17/01&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;du 18/01 au 24/01&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;du 25/01 au 31/01&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;du 1/02 au 7/02&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;du 8/02 au 14/02&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;du 15/02 au 21/02&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;du 22/02 au 25/02&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;Réalisation&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;Etude bibliographique et théorique du Filtre FIR avec l'adaptation par FX-LMS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;Simulation des algorithmes sous Matlab&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;Codage du programme en VHDL et test sur le FPGA Artix7&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;Implémentation du code sur Artix7 avec essai pratique&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;Implémentation du code sur Artix7 avec essai pratique&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;Développement de la partie communication avec une IHM&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;Rédaction du rapport de projet&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Tableau de bord''' ==&lt;br /&gt;
&lt;br /&gt;
===Semaine 1 : du 11/01 au 17/01 ===&lt;br /&gt;
====Etude théorique du filtre FIR avec adaptation par l'algorithme FX-LMS====&lt;br /&gt;
'''1) Le filtre FIR'''&lt;br /&gt;
&lt;br /&gt;
Un filtre FIR (Finite Impulse Response) est un filtre numérique qui est caractérisé par une réponse basée sur un nombre fini de valeurs du signal d’entrées. Un filtre FIR est décrit par une somme de coefficient multiplié par les valeurs d’entrées.&lt;br /&gt;
Si 〖x[i]〗_(1≤i≤n) représente les valeurs du signal d'entrée, bk les valeurs des coefficients et 〖y[i]〗_(1≤i≤n) les valeurs du signal de sortie pour n échantillons, alors un filtre FIR se défit par la combinaison linéaire :&lt;br /&gt;
[[Fichier:Equation_fir.PNG]]&lt;br /&gt;
&lt;br /&gt;
'''2) Algorithme d'adaptation LMS (Least MeanSqare)'''&lt;br /&gt;
&lt;br /&gt;
Nous allons utiliser un algorithme adaptatif de type LMS (Least MeanSqare). Cet algorithme est le plus utilisé dans le milieu de l’industrie en raison de sa simplicité. Cet algorithme est une approximation de l’algorithme du gradient déterministe. Le principe de cet algorithme est de trouver les coefficients optimums permettant de décrire le système à modéliser. Il commence par mettre tous les coefficients à zéro puis à chaque étape, calcule les nouveaux coefficients en fonction de l’erreur. Si l’erreur est nulle, alors les coefficients modélisent le système. Voici les équations de cet algorithme :&lt;br /&gt;
&lt;br /&gt;
y(n)=w^T (n)×x(n)&lt;br /&gt;
&lt;br /&gt;
e(n)=d(n)-y(n)&lt;br /&gt;
&lt;br /&gt;
w(n+1)=w(n)+ μ×x(n)×e(n)&lt;br /&gt;
&lt;br /&gt;
Avec : &lt;br /&gt;
&lt;br /&gt;
y : signal de sortie du filtre&lt;br /&gt;
&lt;br /&gt;
x : signal d’entrée du filtre&lt;br /&gt;
&lt;br /&gt;
w : les coefficients du filtre&lt;br /&gt;
&lt;br /&gt;
e : l’erreur récupérée&lt;br /&gt;
&lt;br /&gt;
d : le signal désiré&lt;br /&gt;
&lt;br /&gt;
µ : pas d’adaptation de l’algorithme&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Schema_adaptation_lms.PNG|600px]]&lt;br /&gt;
&lt;br /&gt;
Cet algorithme est très efficace mais ne nous permet pas de modéliser correctement notre système&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''3) Algorithme d'adaptation FX-LMS'''&lt;br /&gt;
&lt;br /&gt;
Reprenons notre système :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Schéma_canaux.PNG|800px]]&lt;br /&gt;
&lt;br /&gt;
Sur ce schéma, on retrouve deux canaux de propagation du son. Or l'algorithme LMS ne prend en compte un seul canal de propagation. Nous allons donc utiliser l’algorithme FX-LMS.&lt;br /&gt;
L’introduction du nouveau canal dans notre algorithme peut être traitée de plusieurs manières. Dans notre cas, nous allons procéder en deux : une estimation du canal S puis une modélisation du canal P. &lt;br /&gt;
Cette méthode engendre une hypothèse :&lt;br /&gt;
Le canal S est considéré comme stable et ne change jamais&lt;br /&gt;
Du coup, on pourra modéliser le canal S avec un premier filtre FIR-LMS en mode identification de système puis on utilisera un filtre FIR-FX-LMS en mode modélisation inverse.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Schema_fx-lms1.PNG|800px]]&lt;br /&gt;
&lt;br /&gt;
La partie verte correspond au domaine acoustique et la partie bleue correspond au domaine électronique, c’est le système que l’on va implanter dans notre FPGA. Le bloc Ŝ(z) correspond à notre canal de propagation S(z) estimé. L’ajout de ce bloc entraine donc une modification de l’équation de l’algorithme :&lt;br /&gt;
&lt;br /&gt;
d(n)=X(n)×P(z)&lt;br /&gt;
&lt;br /&gt;
e(n)=d(n)-S(z)×W(n)×X(n)&lt;br /&gt;
&lt;br /&gt;
W(n+1)=W(n)+ μ ×e(n)×X'(n)&lt;br /&gt;
&lt;br /&gt;
X'(n)= Ŝ(z)×X(n)&lt;br /&gt;
&lt;br /&gt;
Il va à présent nous falloir décrire ces équations dans notre FPGA.&lt;br /&gt;
&lt;br /&gt;
===Semaine 2 : du 18/01 au 24/01 ===&lt;br /&gt;
====Simulation du filtre sous Matlab====&lt;br /&gt;
&lt;br /&gt;
Pour simuler notre filtre, nous allons coder les équations de notre filtre dans Matlab en appliquant des signaux théoriques. Le code va se décomposer en deux parties : la première partie permettra de simuler notre filtre en virgule flottante, c’est-à-dire de garder une précisions maximales sur les chiffres puis la deuxième partie sera de simuler cette fois ci en virgule fixe, cela nous permet d’arrondir nos chiffres en fonction d’un nombre de bit prédéfini. La simulation en virgule fixe nous permet de simuler notre schéma électrique, cela dans le but de générer des fichiers de résultats que nous pourrons comparer avec notre code VHDL grâce à un transfert de fichier.&lt;br /&gt;
&lt;br /&gt;
'''1) Simulation en virgule flotante'''&lt;br /&gt;
&lt;br /&gt;
Pour simuler notre système, nous allons utiliser des signaux sinusoïdaux. Les canaux de propagation seront modéliser par des tableaux de coefficients générés aléatoirement par Matlab. Nous allons donc faire passer nos signaux d'entrés dans les canaux de propagation grâce à un produit de convolution puis ensuite nous allons utiliser notre algorithme pour modéliser notre système. Voici les résultats des Simulations :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Resultat_sim_virgule_flotante_1.PNG|900px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Sur le premier graphique, on retrouve le signal déformé par le canal en rouge et le signal multiplier par les coefficients modélisé en bleue. Sur le deuxième graphique, on retrouve l’erreur entre le signal modélisé et le signal déformé.&lt;br /&gt;
On remarque bien la convergence entre notre signal modélisé et notre signal réel ainsi que la valeur extrêmement faible de notre erreur.&lt;br /&gt;
Maintenant que la modélisation de notre canal S est validée, nous pouvons utiliser l’algorithme du FX-LMS, voici le résultat :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Resultat_sim_virgule_flotante_2.PNG|900px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Sur le premier graphique, le signal rouge correspond à notre signal déformé par le canal P et le signal bleu le signal envoyé à notre haut-parleur1. Sur le deuxième graphique, on retrouve notre erreur entre les deux signaux.&lt;br /&gt;
&lt;br /&gt;
'''2) Simulation en virgule flotante'''&lt;br /&gt;
&lt;br /&gt;
Le but de cette simulation est de se placer en situation réelle, c’est-à-dire de simuler le même comportement que ce qu’il va se passer dans notre FPGA. Pour cela, nous allons fixer chaque valeur sur 16 bits. Cela nous permet de traiter les valeurs avec la même précision que notre FPGA.&lt;br /&gt;
&lt;br /&gt;
De même que précédemment, voici les résultats de la modélisation du canal S :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Resultat_sim_virgule_fixe1.PNG|900px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Et le résultat de simulation de l'algorithme total :&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Resultat_sim_virgule_fixe2.PNG|900px]]&lt;br /&gt;
&lt;br /&gt;
===Semaine 3 : du 25/01 au 31/01 ===&lt;br /&gt;
&lt;br /&gt;
- Prise de connaissance avec la board Basys3 et son FPGA Artix 7 sur le logiciel Vivado. Nous avons récupéré une IP pour le protocole SPI afin de communiquer avec le DAC.&lt;br /&gt;
&lt;br /&gt;
'''-Protocole Serial Peripheral Interface (SPI)'''&lt;br /&gt;
&lt;br /&gt;
Le SPI est une interface série permettant d'interconnecter les composantes d'un système périphérique avec une minimum de fils. Sur le bus, il y a un maître qui initie toutes les communications et plusieurs esclaves qui transmette des données uniquement lorsque le maître les actives. Le principale avantage de ce protocole est qu'il est en full-duplex, le maître et l'esclave peuvent communiquer simultanément dans les deux sens.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Le bus est composé de quatre fils: &lt;br /&gt;
&lt;br /&gt;
&amp;quot;sclk&amp;quot; pour l'horloge du bus&lt;br /&gt;
&lt;br /&gt;
&amp;quot;mosi&amp;quot; pour les données du maître vers l'esclave&lt;br /&gt;
 &lt;br /&gt;
&amp;quot;miso&amp;quot; pour véhiculer les données de l'esclave au maître&lt;br /&gt;
 &lt;br /&gt;
&amp;quot;ss&amp;quot; pour activer l'esclave voulu.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:SPI protocole.png]]&lt;br /&gt;
&lt;br /&gt;
'''-Transfert SPI et communication avec le convertisseur PMOD DA4'''&lt;br /&gt;
&lt;br /&gt;
Afin de communiquer avec le PMOD DA4, le maître (le fpga) active la ligne SS de l'esclave (le PMOD) avec lequel il veut parler puis génère le signal d'horloge pour 32 bits. La polarité et la phase du signal sont tel que les données sont lues dès le premier front descendant de l'horloge avec une fréquence de 50MHz (clock du fpga divisé par deux).&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Transfert donnee SPI.png]]&lt;br /&gt;
&lt;br /&gt;
Avant de pouvoir convertir les données il faut initialiser le PMOD en lui envoyant une série de commande. C'est pour cela qu'il y a 32 bits d'informations à envoyé: 4 bits sont dédiés aux commandes, 4 bits pour les adresses des DACs à sélectionner puis 12 bits pour les données à convertir. La première commande envoyé sélectionne la référence interne du PMOD (qui est à 2.5V), la deuxième allume les 8 DACs disponible sur le PMOD puis enfin nous pouvons envoyer les données en continue avec une troisième commande qui écrira et mettra à jours les DACs.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Commandes pmodDA4.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Voici la simulation sur vivado de l'envoie de la donnée &amp;quot;aa&amp;quot; (en hexadécimal) avec ce protocole:&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Protocole spi fpga.png]]&lt;br /&gt;
&lt;br /&gt;
Sur le fil MOSI nous pouvons remarquer que cette série de bits a été envoyé: xxxx 0011 1111 Data xxxx xxxx avec Data = aah&lt;br /&gt;
&lt;br /&gt;
Avec pour commande : &amp;quot;0011&amp;quot; qui demande à écrire et mettre à jours tous les DACs car l'adresse envoyé est &amp;quot;1111&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''- Codage du filtre avec adaptation en VHDL :'''&lt;br /&gt;
&lt;br /&gt;
Nous avons commencé par définir l'architecture de notre composant. Voici cette architecture :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Architecture_FIR.PNG|900px]]&lt;br /&gt;
&lt;br /&gt;
Puis nous avons coder les différents composants que nous avons connecter suivant l'architecture. Il nous a également fallut créer une machine à état permettant de synchroniser les signaux. &lt;br /&gt;
&lt;br /&gt;
Une fois notre Filtre coder, nous avons utilisé un transfert de fichier entre Matlab et Modelsim (Logiciel de simulation de circuit VHDL) pour comparer les résultats :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Resultat_sim_filtre.PNG|900px]]&lt;br /&gt;
&lt;br /&gt;
Nous voyons donc que les courbes ne correspondent pas... Cependant, on remarque que le filtre en VHDL s'adapte par rapport à un signal mais pas par rapport au bon. Cela vient peut-être de la méthode utilisé. C'est à dire que l'erreur de notre filtre est généré par Matlab or Modelsim enregistre normalement une autre erreur. Nous allons donc passer à l'implémentation du Filtre dans le FPGA pour voir si l'erreur vient de la méthode utilisé ou de notre code.&lt;br /&gt;
&lt;br /&gt;
===Semaine 3 : du 01/02 au 7/02 ===&lt;br /&gt;
&lt;br /&gt;
- Création de l'amplificateur pour le micro :&lt;br /&gt;
&lt;br /&gt;
Nous utilisons un microphone electret, nous avons donc besoin d'un circuit permettant l'utilisation du micro. Voici son schéma que nous allons réaliser :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Sch_ampli_mic.PNG|900px]]&lt;br /&gt;
&lt;br /&gt;
- Création du tube pour notre expérience&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Utilisation du XADC sur la carte Basys3'''&lt;br /&gt;
&lt;br /&gt;
Nous avons décidé d'utiliser le bloc XADC qui se trouve sur la carte Basys3 plutôt que d'utiliser le PMOD AD2. Ceci nous permet d'aller plus vite dans la conversion du signal (qui est à 100MHz avec le XADC) car nous ne perdons moins de temps avec la communication entre les composants (pas de protocole SPI à utiliser).&lt;br /&gt;
&lt;br /&gt;
Le bloc XADC contient deux ADC de 12bits à 1 MSPS (Mega Sample Per Seconde) que nous pouvons utiliser simultanément, nous les utiliserons donc pour pouvoir convertir les signaux reçu des deux micros. Le signal analogique à convertir doit se trouver entre 0 et 1V, les datas en sortie de l'XADC iront de 000h à FFFh. En sachant que 1 LSB = 1V / 4096, la précision sera de 244µV par bit.&lt;br /&gt;
&lt;br /&gt;
===Semaine 6 : du 22/02 au 27/02 ===&lt;br /&gt;
&lt;br /&gt;
Nous avons passé le début de semaine à construire la maquette et à effectuer les premiers tests :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Maquette_tube.jpg||300px]]&lt;br /&gt;
&lt;br /&gt;
'''ERRATUM'''&lt;br /&gt;
&lt;br /&gt;
Après vérification des comparaison entre modelsim et matlab, nous avons remarqué que nous ne faisions pas les bonnes comparaisons. Nous comparions le signal déformé par le canal de propagation S et le signal non déformé. Après correction, voici les résultats :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Resultat_sim_filtre_correc.PNG]]&lt;br /&gt;
&lt;br /&gt;
==''' Sources, Tuto &amp;amp; Datasheet '''==&lt;br /&gt;
&lt;br /&gt;
Liens Basys3: [https://reference.digilentinc.com/basys3:basys3]&lt;br /&gt;
&lt;br /&gt;
Comment programmer un Basys3 [https://reference.digilentinc.com/basys3:gsg#dokuwiki__top]&lt;br /&gt;
&lt;br /&gt;
Basys3: Référence [https://reference.digilentinc.com/_media/basys3:basys3_rm.pdf] Schematic [https://reference.digilentinc.com/_media/basys3:basys3_sch.pdf]&lt;br /&gt;
&lt;br /&gt;
PmodDA4: Datasheet du AD5628 [http://www.analog.com/media/en/technical-documentation/data-sheets/AD5628_5648_5668.pdf] Référence [https://reference.digilentinc.com/_media/pmod:pmod:pmodDA4_rm.pdf] Schematic [https://reference.digilentinc.com/_media/pmod:pmod:pmodDA4_sch.pdf]&lt;br /&gt;
&lt;br /&gt;
PmodAD2: Référence [https://reference.digilentinc.com/_media/pmod:pmod:pmodAD2_rm.pdf] Schematic [https://reference.digilentinc.com/_media/pmod:pmod:pmodAD2_sch.pdf]&lt;br /&gt;
&lt;br /&gt;
IP(Intellectual Property) VHDL pour protocole SPI: [https://eewiki.net/pages/viewpage.action?pageId=4096096]&lt;br /&gt;
&lt;br /&gt;
Datasheet Memory ressources [http://www.xilinx.com/support/documentation/user_guides/ug473_7Series_Memory_Resources.pdf]&lt;/div&gt;</summary>
		<author><name>Vpiat</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Implantation_d%27un_filtre_FIR-FX-LMS_sur_FPGA_pour_l%27annulation_de_Bruit_Acoustique&amp;diff=27798</id>
		<title>Implantation d'un filtre FIR-FX-LMS sur FPGA pour l'annulation de Bruit Acoustique</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Implantation_d%27un_filtre_FIR-FX-LMS_sur_FPGA_pour_l%27annulation_de_Bruit_Acoustique&amp;diff=27798"/>
				<updated>2016-02-24T15:48:00Z</updated>
		
		<summary type="html">&lt;p&gt;Vpiat : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=='''Cahier des Charges'''==&lt;br /&gt;
===Présentation générale du projet===&lt;br /&gt;
&lt;br /&gt;
====Contexte====&lt;br /&gt;
Les problèmes de bruit acoustiques sont de plus en plus présents en industrie avec de plus en plus de moteurs, de transformateurs, de compresseurs, de ventilateur, etc… La plus part du temps, on utilise des moyens passifs pour réduire le bruit, comme des murs, des enclos, des silencieux… Ces systèmes passifs sont utilisés pour leur forte atténuation de bruit sur une large gamme de fréquence. Cependant, ils sont relativement imposants, coûteux et inefficace dans les basses fréquences.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
L'utilisation d'un filtre actif permet de résoudre ces problèmes. En effet, grâce au système de Contrôle Actif du bruit (Active Noise Control – ANC), on peut annuler les bruits primaires en superposant un signal inverse à ce bruit primaire. Ce signal inverse possède la même amplitude avec une opposition de phase. La conception d’un ANC est rapide et efficace, il suffit d’un micro pour recueillir le bruit primaire et d’un haut-parleur pour envoyer l’inverse de ce bruit. &lt;br /&gt;
&lt;br /&gt;
====Description du projet====&lt;br /&gt;
&lt;br /&gt;
On propose ici de réaliser un filtre actif (ANC) permettant d'annuler une source de bruit. Pour cela, nous utiliserons un filtre numérique de type FIR (Finite Impulse Response) avec une adaptation des coefficients par l'algorithme Filtered X Least Mean Square (FX-LMS). Ce filtre sera implémenté sur FPGA permettant de traiter les données en temps réel.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Objectif ====&lt;br /&gt;
&lt;br /&gt;
Notre objectif est d'annuler un bruit primaire envoyé par un Haut-parleur grâce à un second Haut parleur :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Schéma_maquette.PNG]]&lt;br /&gt;
&lt;br /&gt;
Le Haut-parleur 2 envoi un bruit primaire qui sera déformé par le tube. Le Haut-parleur 1 devra donc envoyé l'inverse du son du Haut-parleur 2 déformé.&lt;br /&gt;
Le micro 2 permet de récupérer le bruit primaire et le micro 1 permet de récupéré le son déformé moins le son inverse, c'est à dire à notre erreur de notre filtre.&lt;br /&gt;
&lt;br /&gt;
Le son réceptionné par les micros devra être échantillonné à une fréquence de 48kHz, ainsi une grande partie de l'information sera récupéré et le traitement des signaux aura le temps de s'effectuer.&lt;br /&gt;
&lt;br /&gt;
Nous devrons pouvoir modifier le pas de convergence à distance à l'aide d'une communication filaire, soit à l'aide du protocole SPI, I2C ou UART, nous verrons cela en fonction du matériel disponible. L'envoi des données se fera via mathlab. De plus le FPGA devra envoyer les valeurs des coefficients du filtre que nous afficherons sur mathlab.&lt;br /&gt;
&lt;br /&gt;
== '''Etapes du Projet''' ==&lt;br /&gt;
&lt;br /&gt;
=== Choix techniques : matériel, logiciels, sources === &lt;br /&gt;
&lt;br /&gt;
- Board Basys3 contenant un FPGA Artix7 xc7a35t cpg236 -1&lt;br /&gt;
&lt;br /&gt;
- 2 Convertisseur Analogique to Digital : PmodAD2&lt;br /&gt;
&lt;br /&gt;
- 1 Convertisseur Digital to Analogique : PmodDA4&lt;br /&gt;
&lt;br /&gt;
- 2 Haut Parleurs AD2071Z (8ohm/64mm de diamètre)&lt;br /&gt;
&lt;br /&gt;
- 2 microphones&lt;br /&gt;
&lt;br /&gt;
- Matlab&lt;br /&gt;
&lt;br /&gt;
- Vivado 2015.4 Xilinx&lt;br /&gt;
&lt;br /&gt;
=== Plan de Travail ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;Semaine&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;du 11/01 au 17/01&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;du 18/01 au 24/01&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;du 25/01 au 31/01&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;du 1/02 au 7/02&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;du 8/02 au 14/02&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;du 15/02 au 21/02&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;du 22/02 au 25/02&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;Réalisation&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;Etude bibliographique et théorique du Filtre FIR avec l'adaptation par FX-LMS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;Simulation des algorithmes sous Matlab&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;Codage du programme en VHDL et test sur le FPGA Artix7&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;Implémentation du code sur Artix7 avec essai pratique&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;Implémentation du code sur Artix7 avec essai pratique&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;Développement de la partie communication avec une IHM&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;Rédaction du rapport de projet&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Tableau de bord''' ==&lt;br /&gt;
&lt;br /&gt;
===Semaine 1 : du 11/01 au 17/01 ===&lt;br /&gt;
====Etude théorique du filtre FIR avec adaptation par l'algorithme FX-LMS====&lt;br /&gt;
'''1) Le filtre FIR'''&lt;br /&gt;
&lt;br /&gt;
Un filtre FIR (Finite Impulse Response) est un filtre numérique qui est caractérisé par une réponse basée sur un nombre fini de valeurs du signal d’entrées. Un filtre FIR est décrit par une somme de coefficient multiplié par les valeurs d’entrées.&lt;br /&gt;
Si 〖x[i]〗_(1≤i≤n) représente les valeurs du signal d'entrée, bk les valeurs des coefficients et 〖y[i]〗_(1≤i≤n) les valeurs du signal de sortie pour n échantillons, alors un filtre FIR se défit par la combinaison linéaire :&lt;br /&gt;
[[Fichier:Equation_fir.PNG]]&lt;br /&gt;
&lt;br /&gt;
'''2) Algorithme d'adaptation LMS (Least MeanSqare)'''&lt;br /&gt;
&lt;br /&gt;
Nous allons utiliser un algorithme adaptatif de type LMS (Least MeanSqare). Cet algorithme est le plus utilisé dans le milieu de l’industrie en raison de sa simplicité. Cet algorithme est une approximation de l’algorithme du gradient déterministe. Le principe de cet algorithme est de trouver les coefficients optimums permettant de décrire le système à modéliser. Il commence par mettre tous les coefficients à zéro puis à chaque étape, calcule les nouveaux coefficients en fonction de l’erreur. Si l’erreur est nulle, alors les coefficients modélisent le système. Voici les équations de cet algorithme :&lt;br /&gt;
&lt;br /&gt;
y(n)=w^T (n)×x(n)&lt;br /&gt;
&lt;br /&gt;
e(n)=d(n)-y(n)&lt;br /&gt;
&lt;br /&gt;
w(n+1)=w(n)+ μ×x(n)×e(n)&lt;br /&gt;
&lt;br /&gt;
Avec : &lt;br /&gt;
&lt;br /&gt;
y : signal de sortie du filtre&lt;br /&gt;
&lt;br /&gt;
x : signal d’entrée du filtre&lt;br /&gt;
&lt;br /&gt;
w : les coefficients du filtre&lt;br /&gt;
&lt;br /&gt;
e : l’erreur récupérée&lt;br /&gt;
&lt;br /&gt;
d : le signal désiré&lt;br /&gt;
&lt;br /&gt;
µ : pas d’adaptation de l’algorithme&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Schema_adaptation_lms.PNG|600px]]&lt;br /&gt;
&lt;br /&gt;
Cet algorithme est très efficace mais ne nous permet pas de modéliser correctement notre système&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''3) Algorithme d'adaptation FX-LMS'''&lt;br /&gt;
&lt;br /&gt;
Reprenons notre système :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Schéma_canaux.PNG|800px]]&lt;br /&gt;
&lt;br /&gt;
Sur ce schéma, on retrouve deux canaux de propagation du son. Or l'algorithme LMS ne prend en compte un seul canal de propagation. Nous allons donc utiliser l’algorithme FX-LMS.&lt;br /&gt;
L’introduction du nouveau canal dans notre algorithme peut être traitée de plusieurs manières. Dans notre cas, nous allons procéder en deux : une estimation du canal S puis une modélisation du canal P. &lt;br /&gt;
Cette méthode engendre une hypothèse :&lt;br /&gt;
Le canal S est considéré comme stable et ne change jamais&lt;br /&gt;
Du coup, on pourra modéliser le canal S avec un premier filtre FIR-LMS en mode identification de système puis on utilisera un filtre FIR-FX-LMS en mode modélisation inverse.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Schema_fx-lms1.PNG|800px]]&lt;br /&gt;
&lt;br /&gt;
La partie verte correspond au domaine acoustique et la partie bleue correspond au domaine électronique, c’est le système que l’on va implanter dans notre FPGA. Le bloc Ŝ(z) correspond à notre canal de propagation S(z) estimé. L’ajout de ce bloc entraine donc une modification de l’équation de l’algorithme :&lt;br /&gt;
&lt;br /&gt;
d(n)=X(n)×P(z)&lt;br /&gt;
&lt;br /&gt;
e(n)=d(n)-S(z)×W(n)×X(n)&lt;br /&gt;
&lt;br /&gt;
W(n+1)=W(n)+ μ ×e(n)×X'(n)&lt;br /&gt;
&lt;br /&gt;
X'(n)= Ŝ(z)×X(n)&lt;br /&gt;
&lt;br /&gt;
Il va à présent nous falloir décrire ces équations dans notre FPGA.&lt;br /&gt;
&lt;br /&gt;
===Semaine 2 : du 18/01 au 24/01 ===&lt;br /&gt;
====Simulation du filtre sous Matlab====&lt;br /&gt;
&lt;br /&gt;
Pour simuler notre filtre, nous allons coder les équations de notre filtre dans Matlab en appliquant des signaux théoriques. Le code va se décomposer en deux parties : la première partie permettra de simuler notre filtre en virgule flottante, c’est-à-dire de garder une précisions maximales sur les chiffres puis la deuxième partie sera de simuler cette fois ci en virgule fixe, cela nous permet d’arrondir nos chiffres en fonction d’un nombre de bit prédéfini. La simulation en virgule fixe nous permet de simuler notre schéma électrique, cela dans le but de générer des fichiers de résultats que nous pourrons comparer avec notre code VHDL grâce à un transfert de fichier.&lt;br /&gt;
&lt;br /&gt;
'''1) Simulation en virgule flotante'''&lt;br /&gt;
&lt;br /&gt;
Pour simuler notre système, nous allons utiliser des signaux sinusoïdaux. Les canaux de propagation seront modéliser par des tableaux de coefficients générés aléatoirement par Matlab. Nous allons donc faire passer nos signaux d'entrés dans les canaux de propagation grâce à un produit de convolution puis ensuite nous allons utiliser notre algorithme pour modéliser notre système. Voici les résultats des Simulations :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Resultat_sim_virgule_flotante_1.PNG|900px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Sur le premier graphique, on retrouve le signal déformé par le canal en rouge et le signal multiplier par les coefficients modélisé en bleue. Sur le deuxième graphique, on retrouve l’erreur entre le signal modélisé et le signal déformé.&lt;br /&gt;
On remarque bien la convergence entre notre signal modélisé et notre signal réel ainsi que la valeur extrêmement faible de notre erreur.&lt;br /&gt;
Maintenant que la modélisation de notre canal S est validée, nous pouvons utiliser l’algorithme du FX-LMS, voici le résultat :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Resultat_sim_virgule_flotante_2.PNG|900px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Sur le premier graphique, le signal rouge correspond à notre signal déformé par le canal P et le signal bleu le signal envoyé à notre haut-parleur1. Sur le deuxième graphique, on retrouve notre erreur entre les deux signaux.&lt;br /&gt;
&lt;br /&gt;
'''2) Simulation en virgule flotante'''&lt;br /&gt;
&lt;br /&gt;
Le but de cette simulation est de se placer en situation réelle, c’est-à-dire de simuler le même comportement que ce qu’il va se passer dans notre FPGA. Pour cela, nous allons fixer chaque valeur sur 16 bits. Cela nous permet de traiter les valeurs avec la même précision que notre FPGA.&lt;br /&gt;
&lt;br /&gt;
De même que précédemment, voici les résultats de la modélisation du canal S :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Resultat_sim_virgule_fixe1.PNG|900px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Et le résultat de simulation de l'algorithme total :&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Resultat_sim_virgule_fixe2.PNG|900px]]&lt;br /&gt;
&lt;br /&gt;
===Semaine 3 : du 25/01 au 31/01 ===&lt;br /&gt;
&lt;br /&gt;
- Prise de connaissance avec la board Basys3 et son FPGA Artix 7 sur le logiciel Vivado. Nous avons récupéré une IP pour le protocole SPI afin de communiquer avec le DAC.&lt;br /&gt;
&lt;br /&gt;
'''-Protocole Serial Peripheral Interface (SPI)'''&lt;br /&gt;
&lt;br /&gt;
Le SPI est une interface série permettant d'interconnecter les composantes d'un système périphérique avec une minimum de fils. Sur le bus, il y a un maître qui initie toutes les communications et plusieurs esclaves qui transmette des données uniquement lorsque le maître les actives. Le principale avantage de ce protocole est qu'il est en full-duplex, le maître et l'esclave peuvent communiquer simultanément dans les deux sens.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Le bus est composé de quatre fils: &lt;br /&gt;
&lt;br /&gt;
&amp;quot;sclk&amp;quot; pour l'horloge du bus&lt;br /&gt;
&lt;br /&gt;
&amp;quot;mosi&amp;quot; pour les données du maître vers l'esclave&lt;br /&gt;
 &lt;br /&gt;
&amp;quot;miso&amp;quot; pour véhiculer les données de l'esclave au maître&lt;br /&gt;
 &lt;br /&gt;
&amp;quot;ss&amp;quot; pour activer l'esclave voulu.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:SPI protocole.png]]&lt;br /&gt;
&lt;br /&gt;
'''-Transfert SPI et communication avec le convertisseur PMOD DA4'''&lt;br /&gt;
&lt;br /&gt;
Afin de communiquer avec le PMOD DA4, le maître (le fpga) active la ligne SS de l'esclave (le PMOD) avec lequel il veut parler puis génère le signal d'horloge pour 32 bits. La polarité et la phase du signal sont tel que les données sont lues dès le premier front descendant de l'horloge avec une fréquence de 50MHz (clock du fpga divisé par deux).&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Transfert donnee SPI.png]]&lt;br /&gt;
&lt;br /&gt;
Avant de pouvoir convertir les données il faut initialiser le PMOD en lui envoyant une série de commande. C'est pour cela qu'il y a 32 bits d'informations à envoyé: 4 bits sont dédiés aux commandes, 4 bits pour les adresses des DACs à sélectionner puis 12 bits pour les données à convertir. La première commande envoyé sélectionne la référence interne du PMOD (qui est à 2.5V), la deuxième allume les 8 DACs disponible sur le PMOD puis enfin nous pouvons envoyer les données en continue avec une troisième commande qui écrira et mettra à jours les DACs.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Commandes pmodDA4.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Voici la simulation sur vivado de l'envoie de la donnée &amp;quot;aa&amp;quot; (en hexadécimal) avec ce protocole:&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Protocole spi fpga.png]]&lt;br /&gt;
&lt;br /&gt;
Sur le fil MOSI nous pouvons remarquer que cette série de bits a été envoyé: xxxx 0011 1111 Data xxxx xxxx avec Data = aah&lt;br /&gt;
&lt;br /&gt;
Avec pour commande : &amp;quot;0011&amp;quot; qui demande à écrire et mettre à jours tous les DACs car l'adresse envoyé est &amp;quot;1111&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''- Codage du filtre avec adaptation en VHDL :'''&lt;br /&gt;
&lt;br /&gt;
Nous avons commencé par définir l'architecture de notre composant. Voici cette architecture :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Architecture_FIR.PNG|900px]]&lt;br /&gt;
&lt;br /&gt;
Puis nous avons coder les différents composants que nous avons connecter suivant l'architecture. Il nous a également fallut créer une machine à état permettant de synchroniser les signaux. &lt;br /&gt;
&lt;br /&gt;
Une fois notre Filtre coder, nous avons utilisé un transfert de fichier entre Matlab et Modelsim (Logiciel de simulation de circuit VHDL) pour comparer les résultats :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Resultat_sim_filtre.PNG|900px]]&lt;br /&gt;
&lt;br /&gt;
Nous voyons donc que les courbes ne correspondent pas... Cependant, on remarque que le filtre en VHDL s'adapte par rapport à un signal mais pas par rapport au bon. Cela vient peut-être de la méthode utilisé. C'est à dire que l'erreur de notre filtre est généré par Matlab or Modelsim enregistre normalement une autre erreur. Nous allons donc passer à l'implémentation du Filtre dans le FPGA pour voir si l'erreur vient de la méthode utilisé ou de notre code.&lt;br /&gt;
&lt;br /&gt;
===Semaine 3 : du 01/02 au 7/02 ===&lt;br /&gt;
&lt;br /&gt;
- Création de l'amplificateur pour le micro :&lt;br /&gt;
&lt;br /&gt;
Nous utilisons un microphone electret, nous avons donc besoin d'un circuit permettant l'utilisation du micro. Voici son schéma que nous allons réaliser :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Sch_ampli_mic.PNG|900px]]&lt;br /&gt;
&lt;br /&gt;
- Création du tube pour notre expérience&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Utilisation du XADC sur la carte Basys3'''&lt;br /&gt;
&lt;br /&gt;
Nous avons décidé d'utiliser le bloc XADC qui se trouve sur la carte Basys3 plutôt que d'utiliser le PMOD AD2. Ceci nous permet d'aller plus vite dans la conversion du signal (qui est à 100MHz avec le XADC) car nous ne perdons moins de temps avec la communication entre les composants (pas de protocole SPI à utiliser).&lt;br /&gt;
&lt;br /&gt;
Le bloc XADC contient deux ADC de 12bits à 1 MSPS (Mega Sample Per Seconde) que nous pouvons utiliser simultanément, nous les utiliserons donc pour pouvoir convertir les signaux reçu des deux micros. Le signal analogique à convertir doit se trouver entre 0 et 1V, les datas en sortie de l'XADC iront de 000h à FFFh. En sachant que 1 LSB = 1V / 4096, la précision sera de 244µV par bit.&lt;br /&gt;
&lt;br /&gt;
===Semaine 6 : du 22/02 au 27/02 ===&lt;br /&gt;
&lt;br /&gt;
Nous avons passé le début de semaine à construire la maquette et à effectuer les premiers tests :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Maquette_tube.jpg]]&lt;br /&gt;
&lt;br /&gt;
'''ERRATUM'''&lt;br /&gt;
&lt;br /&gt;
Après vérification des comparaison entre modelsim et matlab, nous avons remarqué que nous ne faisions pas les bonnes comparaisons. Nous comparions le signal déformé par le canal de propagation S et le signal non déformé. Après correction, voici les résultats :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Resultat_sim_filtre_correc.PNG]]&lt;br /&gt;
&lt;br /&gt;
==''' Sources, Tuto &amp;amp; Datasheet '''==&lt;br /&gt;
&lt;br /&gt;
Liens Basys3: [https://reference.digilentinc.com/basys3:basys3]&lt;br /&gt;
&lt;br /&gt;
Comment programmer un Basys3 [https://reference.digilentinc.com/basys3:gsg#dokuwiki__top]&lt;br /&gt;
&lt;br /&gt;
Basys3: Référence [https://reference.digilentinc.com/_media/basys3:basys3_rm.pdf] Schematic [https://reference.digilentinc.com/_media/basys3:basys3_sch.pdf]&lt;br /&gt;
&lt;br /&gt;
PmodDA4: Datasheet du AD5628 [http://www.analog.com/media/en/technical-documentation/data-sheets/AD5628_5648_5668.pdf] Référence [https://reference.digilentinc.com/_media/pmod:pmod:pmodDA4_rm.pdf] Schematic [https://reference.digilentinc.com/_media/pmod:pmod:pmodDA4_sch.pdf]&lt;br /&gt;
&lt;br /&gt;
PmodAD2: Référence [https://reference.digilentinc.com/_media/pmod:pmod:pmodAD2_rm.pdf] Schematic [https://reference.digilentinc.com/_media/pmod:pmod:pmodAD2_sch.pdf]&lt;br /&gt;
&lt;br /&gt;
IP(Intellectual Property) VHDL pour protocole SPI: [https://eewiki.net/pages/viewpage.action?pageId=4096096]&lt;br /&gt;
&lt;br /&gt;
Datasheet Memory ressources [http://www.xilinx.com/support/documentation/user_guides/ug473_7Series_Memory_Resources.pdf]&lt;/div&gt;</summary>
		<author><name>Vpiat</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Fichier:Maquette_tube.jpg&amp;diff=27797</id>
		<title>Fichier:Maquette tube.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Fichier:Maquette_tube.jpg&amp;diff=27797"/>
				<updated>2016-02-24T15:47:40Z</updated>
		
		<summary type="html">&lt;p&gt;Vpiat : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Vpiat</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Fichier:Resultat_sim_filtre_correc.PNG&amp;diff=27796</id>
		<title>Fichier:Resultat sim filtre correc.PNG</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Fichier:Resultat_sim_filtre_correc.PNG&amp;diff=27796"/>
				<updated>2016-02-24T15:46:49Z</updated>
		
		<summary type="html">&lt;p&gt;Vpiat : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Vpiat</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Implantation_d%27un_filtre_FIR-FX-LMS_sur_FPGA_pour_l%27annulation_de_Bruit_Acoustique&amp;diff=26817</id>
		<title>Implantation d'un filtre FIR-FX-LMS sur FPGA pour l'annulation de Bruit Acoustique</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Implantation_d%27un_filtre_FIR-FX-LMS_sur_FPGA_pour_l%27annulation_de_Bruit_Acoustique&amp;diff=26817"/>
				<updated>2016-02-09T16:48:50Z</updated>
		
		<summary type="html">&lt;p&gt;Vpiat : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=='''Cahier des Charges'''==&lt;br /&gt;
===Présentation générale du projet===&lt;br /&gt;
&lt;br /&gt;
====Contexte====&lt;br /&gt;
Les problèmes de bruit acoustiques sont de plus en plus présents en industrie avec de plus en plus de moteurs, de transformateurs, de compresseurs, de ventilateur, etc… La plus part du temps, on utilise des moyens passifs pour réduire le bruit, comme des murs, des enclos, des silencieux… Ces systèmes passifs sont utilisés pour leur forte atténuation de bruit sur une large gamme de fréquence. Cependant, ils sont relativement imposants, coûteux et inefficace dans les basses fréquences.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
L'utilisation d'un filtre actif permet de résoudre ces problèmes. En effet, grâce au système de Contrôle Actif du bruit (Active Noise Control – ANC), on peut annuler les bruits primaires en superposant un signal inverse à ce bruit primaire. Ce signal inverse possède la même amplitude avec une opposition de phase. La conception d’un ANC est rapide et efficace, il suffit d’un micro pour recueillir le bruit primaire et d’un haut-parleur pour envoyer l’inverse de ce bruit. &lt;br /&gt;
&lt;br /&gt;
====Description du projet====&lt;br /&gt;
&lt;br /&gt;
On propose ici de réaliser un filtre actif (ANC) permettant d'annuler une source de bruit. Pour cela, nous utiliserons un filtre numérique de type FIR (Finite Impulse Response) avec une adaptation des coefficients par l'algorithme Filtered X Least Mean Square (FX-LMS). Ce filtre sera implémenté sur FPGA permettant de traiter les données en temps réel.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Objectif ====&lt;br /&gt;
&lt;br /&gt;
Notre objectif est d'annuler un bruit primaire envoyé par un Haut-parleur grâce à un second Haut parleur :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Schéma_maquette.PNG]]&lt;br /&gt;
&lt;br /&gt;
Le Haut-parleur 2 envoi un bruit primaire qui sera déformé par le tube. Le Haut-parleur 1 devra donc envoyé l'inverse du son du Haut-parleur 2 déformé.&lt;br /&gt;
Le micro 2 permet de récupérer le bruit primaire et le micro 1 permet de récupéré le son déformé moins le son inverse, c'est à dire à notre erreur de notre filtre.&lt;br /&gt;
&lt;br /&gt;
Le son réceptionné par les micros devra être échantillonné à une fréquence de 48kHz, ainsi une grande partie de l'information sera récupéré et le traitement des signaux aura le temps de s'effectuer.&lt;br /&gt;
&lt;br /&gt;
Nous devrons pouvoir modifier le pas de convergence à distance à l'aide d'une communication filaire, soit à l'aide du protocole SPI, I2C ou UART, nous verrons cela en fonction du matériel disponible. L'envoi des données se fera via mathlab. De plus le FPGA devra envoyer les valeurs des coefficients du filtre que nous afficherons sur mathlab.&lt;br /&gt;
&lt;br /&gt;
== '''Etapes du Projet''' ==&lt;br /&gt;
&lt;br /&gt;
=== Choix techniques : matériel, logiciels, sources === &lt;br /&gt;
&lt;br /&gt;
- Board Basys3 contenant un FPGA Artix7 xc7a35t cpg236 -1&lt;br /&gt;
&lt;br /&gt;
- 2 Convertisseur Analogique to Digital : PmodAD2&lt;br /&gt;
&lt;br /&gt;
- 1 Convertisseur Digital to Analogique : PmodDA4&lt;br /&gt;
&lt;br /&gt;
- 2 Haut Parleurs AD2071Z (8ohm/64mm de diamètre)&lt;br /&gt;
&lt;br /&gt;
- 2 microphones&lt;br /&gt;
&lt;br /&gt;
- Matlab&lt;br /&gt;
&lt;br /&gt;
- Vivado 2015.4 Xilinx&lt;br /&gt;
&lt;br /&gt;
=== Plan de Travail ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;Semaine&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;du 11/01 au 17/01&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;du 18/01 au 24/01&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;du 25/01 au 31/01&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;du 1/02 au 7/02&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;du 8/02 au 14/02&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;du 15/02 au 21/02&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;du 22/02 au 25/02&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;Réalisation&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;Etude bibliographique et théorique du Filtre FIR avec l'adaptation par FX-LMS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;Simulation des algorithmes sous Matlab&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;Codage du programme en VHDL et test sur le FPGA Artix7&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;Implémentation du code sur Artix7 avec essai pratique&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;Implémentation du code sur Artix7 avec essai pratique&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;Développement de la partie communication avec une IHM&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;Rédaction du rapport de projet&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Tableau de bord''' ==&lt;br /&gt;
&lt;br /&gt;
===Semaine 1 : du 11/01 au 17/01 ===&lt;br /&gt;
====Etude théorique du filtre FIR avec adaptation par l'algorithme FX-LMS====&lt;br /&gt;
'''1) Le filtre FIR'''&lt;br /&gt;
&lt;br /&gt;
Un filtre FIR (Finite Impulse Response) est un filtre numérique qui est caractérisé par une réponse basée sur un nombre fini de valeurs du signal d’entrées. Un filtre FIR est décrit par une somme de coefficient multiplié par les valeurs d’entrées.&lt;br /&gt;
Si 〖x[i]〗_(1≤i≤n) représente les valeurs du signal d'entrée, bk les valeurs des coefficients et 〖y[i]〗_(1≤i≤n) les valeurs du signal de sortie pour n échantillons, alors un filtre FIR se défit par la combinaison linéaire :&lt;br /&gt;
[[Fichier:Equation_fir.PNG]]&lt;br /&gt;
&lt;br /&gt;
'''2) Algorithme d'adaptation LMS (Least MeanSqare)'''&lt;br /&gt;
&lt;br /&gt;
Nous allons utiliser un algorithme adaptatif de type LMS (Least MeanSqare). Cet algorithme est le plus utilisé dans le milieu de l’industrie en raison de sa simplicité. Cet algorithme est une approximation de l’algorithme du gradient déterministe. Le principe de cet algorithme est de trouver les coefficients optimums permettant de décrire le système à modéliser. Il commence par mettre tous les coefficients à zéro puis à chaque étape, calcule les nouveaux coefficients en fonction de l’erreur. Si l’erreur est nulle, alors les coefficients modélisent le système. Voici les équations de cet algorithme :&lt;br /&gt;
&lt;br /&gt;
y(n)=w^T (n)×x(n)&lt;br /&gt;
&lt;br /&gt;
e(n)=d(n)-y(n)&lt;br /&gt;
&lt;br /&gt;
w(n+1)=w(n)+ μ×x(n)×e(n)&lt;br /&gt;
&lt;br /&gt;
Avec : &lt;br /&gt;
&lt;br /&gt;
y : signal de sortie du filtre&lt;br /&gt;
&lt;br /&gt;
x : signal d’entrée du filtre&lt;br /&gt;
&lt;br /&gt;
w : les coefficients du filtre&lt;br /&gt;
&lt;br /&gt;
e : l’erreur récupérée&lt;br /&gt;
&lt;br /&gt;
d : le signal désiré&lt;br /&gt;
&lt;br /&gt;
µ : pas d’adaptation de l’algorithme&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Schema_adaptation_lms.PNG]]&lt;br /&gt;
&lt;br /&gt;
Cet algorithme est très efficace mais ne nous permet pas de modéliser correctement notre système&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''3) Algorithme d'adaptation FX-LMS'''&lt;br /&gt;
&lt;br /&gt;
Reprenons notre système :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Schéma_canaux.PNG]]&lt;br /&gt;
&lt;br /&gt;
Sur ce schéma, on retrouve deux canaux de propagation du son. Or l'algorithme LMS ne prend en compte un seul canal de propagation. Nous allons donc utiliser l’algorithme FX-LMS.&lt;br /&gt;
L’introduction du nouveau canal dans notre algorithme peut être traitée de plusieurs manières. Dans notre cas, nous allons procéder en deux : une estimation du canal S puis une modélisation du canal P. &lt;br /&gt;
Cette méthode engendre une hypothèse :&lt;br /&gt;
Le canal S est considéré comme stable et ne change jamais&lt;br /&gt;
Du coup, on pourra modéliser le canal S avec un premier filtre FIR-LMS en mode identification de système puis on utilisera un filtre FIR-FX-LMS en mode modélisation inverse.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Schema_fx-lms1.PNG]]&lt;br /&gt;
&lt;br /&gt;
La partie verte correspond au domaine acoustique et la partie bleue correspond au domaine électronique, c’est le système que l’on va implanter dans notre FPGA. Le bloc Ŝ(z) correspond à notre canal de propagation S(z) estimé. L’ajout de ce bloc entraine donc une modification de l’équation de l’algorithme :&lt;br /&gt;
&lt;br /&gt;
d(n)=X(n)×P(z)&lt;br /&gt;
&lt;br /&gt;
e(n)=d(n)-S(z)×W(n)×X(n)&lt;br /&gt;
&lt;br /&gt;
W(n+1)=W(n)+ μ ×e(n)×X'(n)&lt;br /&gt;
&lt;br /&gt;
X'(n)= Ŝ(z)×X(n)&lt;br /&gt;
&lt;br /&gt;
Il va à présent nous falloir décrire ces équations dans notre FPGA.&lt;br /&gt;
&lt;br /&gt;
===Semaine 2 : du 18/01 au 24/01 ===&lt;br /&gt;
====Simulation du filtre sous Matlab====&lt;br /&gt;
&lt;br /&gt;
Pour simuler notre filtre, nous allons coder les équations de notre filtre dans Matlab en appliquant des signaux théoriques. Le code va se décomposer en deux parties : la première partie permettra de simuler notre filtre en virgule flottante, c’est-à-dire de garder une précisions maximales sur les chiffres puis la deuxième partie sera de simuler cette fois ci en virgule fixe, cela nous permet d’arrondir nos chiffres en fonction d’un nombre de bit prédéfini. La simulation en virgule fixe nous permet de simuler notre schéma électrique, cela dans le but de générer des fichiers de résultats que nous pourrons comparer avec notre code VHDL grâce à un transfert de fichier.&lt;br /&gt;
&lt;br /&gt;
'''1) Simulation en virgule flotante'''&lt;br /&gt;
&lt;br /&gt;
Pour simuler notre système, nous allons utiliser des signaux sinusoïdaux. Les canaux de propagation seront modéliser par des tableaux de coefficients générés aléatoirement par Matlab. Nous allons donc faire passer nos signaux d'entrés dans les canaux de propagation grâce à un produit de convolution puis ensuite nous allons utiliser notre algorithme pour modéliser notre système. Voici les résultats des Simulations :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Resultat_sim_virgule_flotante_1.PNG]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Sur le premier graphique, on retrouve le signal déformé par le canal en rouge et le signal multiplier par les coefficients modélisé en bleue. Sur le deuxième graphique, on retrouve l’erreur entre le signal modélisé et le signal déformé.&lt;br /&gt;
On remarque bien la convergence entre notre signal modélisé et notre signal réel ainsi que la valeur extrêmement faible de notre erreur.&lt;br /&gt;
Maintenant que la modélisation de notre canal S est validée, nous pouvons utiliser l’algorithme du FX-LMS, voici le résultat :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Resultat_sim_virgule_flotante_2.PNG]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Sur le premier graphique, le signal rouge correspond à notre signal déformé par le canal P et le signal bleu le signal envoyé à notre haut-parleur1. Sur le deuxième graphique, on retrouve notre erreur entre les deux signaux.&lt;br /&gt;
&lt;br /&gt;
'''2) Simulation en virgule flotante'''&lt;br /&gt;
&lt;br /&gt;
Le but de cette simulation est de se placer en situation réelle, c’est-à-dire de simuler le même comportement que ce qu’il va se passer dans notre FPGA. Pour cela, nous allons fixer chaque valeur sur 16 bits. Cela nous permet de traiter les valeurs avec la même précision que notre FPGA.&lt;br /&gt;
&lt;br /&gt;
De même que précédemment, voici les résultats de la modélisation du canal S :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Resultat_sim_virgule_fixe1.PNG]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Et le résultat de simulation de l'algorithme total :&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Resultat_sim_virgule_fixe2.PNG]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Semaine 3 : du 25/01 au 31/01 ===&lt;br /&gt;
&lt;br /&gt;
- Prise de connaissance avec la board Basys3 et son FPGA Artix 7 sur le logiciel Vivado. Nous avons récupéré une IP pour le protocole SPI afin de communiquer avec les ADC et DAC.&lt;br /&gt;
&lt;br /&gt;
- Codage du filtre avec adaptation en VHDL :&lt;br /&gt;
&lt;br /&gt;
Nous avons commencé par définir l'architecture de notre composant. Voici cette architecture :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Architecture_FIR.PNG|1000px]]&lt;br /&gt;
&lt;br /&gt;
Puis nous avons coder les différents composants que nous avons connecter suivant l'architecture. Il nous a également fallut créer une machine à état permettant de synchroniser les signaux. &lt;br /&gt;
&lt;br /&gt;
Une fois notre Filtre coder, nous avons utilisé un transfert de fichier entre Matlab et Modelsim (Logiciel de simulation de circuit VHDL) pour comparer les résultats :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Resultat_sim_filtre.PNG|1000px]]&lt;br /&gt;
&lt;br /&gt;
Nous voyons donc que les courbes ne correspondent pas... Cependant, on remarque que le filtre en VHDL s'adapte par rapport à un signal mais pas par rapport au bon. Cela vient peut-être de la méthode utilisé. C'est à dire que l'erreur de notre filtre est généré par Matlab or Modelsim enregistre normalement une autre erreur. Nous allons donc passer à l'implémentation du Filtre dans le FPGA pour voir si l'erreur vient de la méthode utilisé ou de notre code.&lt;br /&gt;
&lt;br /&gt;
===Semaine 3 : du 01/02 au 7/02 ===&lt;br /&gt;
&lt;br /&gt;
- Création de l'amplificateur pour le micro :&lt;br /&gt;
&lt;br /&gt;
Nous utilisons un microphone electret, nous avons donc besoin d'un circuit permettant l'utilisation du micro. Voici son schéma que nous allons réaliser :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Sch_ampli_mic.PNG]]&lt;br /&gt;
&lt;br /&gt;
- Création du tube pour notre expérience&lt;br /&gt;
&lt;br /&gt;
==''' Sources, Tuto &amp;amp; Datasheet '''==&lt;br /&gt;
&lt;br /&gt;
Liens Basys3: [https://reference.digilentinc.com/basys3:basys3]&lt;br /&gt;
&lt;br /&gt;
Comment programmer un Basys3 [https://reference.digilentinc.com/basys3:gsg#dokuwiki__top]&lt;br /&gt;
&lt;br /&gt;
Basys3: Rédérence [https://reference.digilentinc.com/_media/basys3:basys3_rm.pdf] Schematic [https://reference.digilentinc.com/_media/basys3:basys3_sch.pdf]&lt;br /&gt;
&lt;br /&gt;
PmodDA4: Datasheet du AD5628 [http://www.analog.com/media/en/technical-documentation/data-sheets/AD5628_5648_5668.pdf] Référence [https://reference.digilentinc.com/_media/pmod:pmod:pmodDA4_rm.pdf] Schematic [https://reference.digilentinc.com/_media/pmod:pmod:pmodDA4_sch.pdf]&lt;br /&gt;
&lt;br /&gt;
PmodAD2: Référence [https://reference.digilentinc.com/_media/pmod:pmod:pmodAD2_rm.pdf] Schematic [https://reference.digilentinc.com/_media/pmod:pmod:pmodAD2_sch.pdf]&lt;br /&gt;
&lt;br /&gt;
IP(Intellectual Property) VHDL pour protocole SPI: [https://eewiki.net/pages/viewpage.action?pageId=4096096]&lt;br /&gt;
&lt;br /&gt;
Datasheet Memory ressources [http://www.xilinx.com/support/documentation/user_guides/ug473_7Series_Memory_Resources.pdf]&lt;/div&gt;</summary>
		<author><name>Vpiat</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Fichier:Sch_ampli_mic.PNG&amp;diff=26816</id>
		<title>Fichier:Sch ampli mic.PNG</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Fichier:Sch_ampli_mic.PNG&amp;diff=26816"/>
				<updated>2016-02-09T16:48:29Z</updated>
		
		<summary type="html">&lt;p&gt;Vpiat : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Vpiat</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Implantation_d%27un_filtre_FIR-FX-LMS_sur_FPGA_pour_l%27annulation_de_Bruit_Acoustique&amp;diff=25928</id>
		<title>Implantation d'un filtre FIR-FX-LMS sur FPGA pour l'annulation de Bruit Acoustique</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Implantation_d%27un_filtre_FIR-FX-LMS_sur_FPGA_pour_l%27annulation_de_Bruit_Acoustique&amp;diff=25928"/>
				<updated>2016-02-02T09:49:59Z</updated>
		
		<summary type="html">&lt;p&gt;Vpiat : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=='''Cahier des Charges'''==&lt;br /&gt;
===Présentation générale du projet===&lt;br /&gt;
&lt;br /&gt;
====Contexte====&lt;br /&gt;
Les problèmes de bruit acoustiques sont de plus en plus présents en industrie avec de plus en plus de moteurs, de transformateurs, de compresseurs, de ventilateur, etc… La plus part du temps, on utilise des moyens passifs pour réduire le bruit, comme des murs, des enclos, des silencieux… Ces systèmes passifs sont utilisés pour leur forte atténuation de bruit sur une large gamme de fréquence. Cependant, ils sont relativement imposants, coûteux et inefficace dans les basses fréquences.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
L'utilisation d'un filtre actif permet de résoudre ces problèmes. En effet, grâce au système de Contrôle Actif du bruit (Active Noise Control – ANC), on peut annuler les bruits primaires en superposant un signal inverse à ce bruit primaire. Ce signal inverse possède la même amplitude avec une opposition de phase. La conception d’un ANC est rapide et efficace, il suffit d’un micro pour recueillir le bruit primaire et d’un haut-parleur pour envoyer l’inverse de ce bruit. &lt;br /&gt;
&lt;br /&gt;
====Description du projet====&lt;br /&gt;
&lt;br /&gt;
On propose ici de réaliser un filtre actif (ANC) permettant d'annuler une source de bruit. Pour cela, nous utiliserons un filtre numérique de type FIR (Finite Impulse Response) avec une adaptation des coefficients par l'algorithme Filtered X Least Mean Square (FX-LMS). Ce filtre sera implémenté sur FPGA permettant de traiter les données en temps réel.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Objectif ====&lt;br /&gt;
&lt;br /&gt;
Notre objectif est d'annuler un bruit primaire envoyé par un Haut-parleur grâce à un second Haut parleur :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Schéma_maquette.PNG]]&lt;br /&gt;
&lt;br /&gt;
Le Haut-parleur 2 envoi un bruit primaire qui sera déformé par le tube. Le Haut-parleur 1 devra donc envoyé l'inverse du son du Haut-parleur 2 déformé.&lt;br /&gt;
Le micro 2 permet de récupérer le bruit primaire et le micro 1 permet de récupéré le son déformé moins le son inverse, c'est à dire à notre erreur de notre filtre.&lt;br /&gt;
&lt;br /&gt;
Le son réceptionné par les micros devra être échantillonné à une fréquence de 48kHz, ainsi une grande partie de l'information sera récupéré et le traitement des signaux aura le temps de s'effectuer.&lt;br /&gt;
&lt;br /&gt;
Nous devrons pouvoir modifier le pas de convergence à distance à l'aide d'une communication filaire, soit à l'aide du protocole SPI, I2C ou UART, nous verrons cela en fonction du matériel disponible. L'envoi des données se fera via mathlab. De plus le FPGA devra envoyer les valeurs des coefficients du filtre que nous afficherons sur mathlab.&lt;br /&gt;
&lt;br /&gt;
== '''Etapes du Projet''' ==&lt;br /&gt;
&lt;br /&gt;
=== Choix techniques : matériel, logiciels, sources === &lt;br /&gt;
&lt;br /&gt;
- Board Basys3 contenant un FPGA Artix7 xc7a35t cpg236 -1&lt;br /&gt;
&lt;br /&gt;
- 2 Convertisseur Analogique to Digital : PmodAD2&lt;br /&gt;
&lt;br /&gt;
- 1 Convertisseur Digital to Analogique : PmodDA4&lt;br /&gt;
&lt;br /&gt;
- 2 Haut Parleurs AD2071Z (8ohm/64mm de diamètre)&lt;br /&gt;
&lt;br /&gt;
- 2 microphones&lt;br /&gt;
&lt;br /&gt;
- Matlab&lt;br /&gt;
&lt;br /&gt;
- Vivado 2015.4 Xilinx&lt;br /&gt;
&lt;br /&gt;
=== Plan de Travail ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;Semaine&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;du 11/01 au 17/01&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;du 18/01 au 24/01&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;du 25/01 au 31/01&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;du 1/02 au 7/02&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;du 8/02 au 14/02&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;du 15/02 au 21/02&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;du 22/02 au 25/02&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;Réalisation&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;Etude bibliographique et théorique du Filtre FIR avec l'adaptation par FX-LMS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;Simulation des algorithmes sous Matlab&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;Codage du programme en VHDL et test sur le FPGA Artix7&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;Implémentation du code sur Artix7 avec essai pratique&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;Implémentation du code sur Artix7 avec essai pratique&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;Développement de la partie communication avec une IHM&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;Rédaction du rapport de projet&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Tableau de bord''' ==&lt;br /&gt;
&lt;br /&gt;
===Semaine 1 : du 11/01 au 17/01 ===&lt;br /&gt;
====Etude théorique du filtre FIR avec adaptation par l'algorithme FX-LMS====&lt;br /&gt;
'''1) Le filtre FIR'''&lt;br /&gt;
&lt;br /&gt;
Un filtre FIR (Finite Impulse Response) est un filtre numérique qui est caractérisé par une réponse basée sur un nombre fini de valeurs du signal d’entrées. Un filtre FIR est décrit par une somme de coefficient multiplié par les valeurs d’entrées.&lt;br /&gt;
Si 〖x[i]〗_(1≤i≤n) représente les valeurs du signal d'entrée, bk les valeurs des coefficients et 〖y[i]〗_(1≤i≤n) les valeurs du signal de sortie pour n échantillons, alors un filtre FIR se défit par la combinaison linéaire :&lt;br /&gt;
[[Fichier:Equation_fir.PNG]]&lt;br /&gt;
&lt;br /&gt;
'''2) Algorithme d'adaptation LMS (Least MeanSqare)'''&lt;br /&gt;
&lt;br /&gt;
Nous allons utiliser un algorithme adaptatif de type LMS (Least MeanSqare). Cet algorithme est le plus utilisé dans le milieu de l’industrie en raison de sa simplicité. Cet algorithme est une approximation de l’algorithme du gradient déterministe. Le principe de cet algorithme est de trouver les coefficients optimums permettant de décrire le système à modéliser. Il commence par mettre tous les coefficients à zéro puis à chaque étape, calcule les nouveaux coefficients en fonction de l’erreur. Si l’erreur est nulle, alors les coefficients modélisent le système. Voici les équations de cet algorithme :&lt;br /&gt;
&lt;br /&gt;
y(n)=w^T (n)×x(n)&lt;br /&gt;
&lt;br /&gt;
e(n)=d(n)-y(n)&lt;br /&gt;
&lt;br /&gt;
w(n+1)=w(n)+ μ×x(n)×e(n)&lt;br /&gt;
&lt;br /&gt;
Avec : &lt;br /&gt;
&lt;br /&gt;
y : signal de sortie du filtre&lt;br /&gt;
&lt;br /&gt;
x : signal d’entrée du filtre&lt;br /&gt;
&lt;br /&gt;
w : les coefficients du filtre&lt;br /&gt;
&lt;br /&gt;
e : l’erreur récupérée&lt;br /&gt;
&lt;br /&gt;
d : le signal désiré&lt;br /&gt;
&lt;br /&gt;
µ : pas d’adaptation de l’algorithme&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Schema_adaptation_lms.PNG]]&lt;br /&gt;
&lt;br /&gt;
Cet algorithme est très efficace mais ne nous permet pas de modéliser correctement notre système&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''3) Algorithme d'adaptation FX-LMS'''&lt;br /&gt;
&lt;br /&gt;
Reprenons notre système :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Schéma_canaux.PNG]]&lt;br /&gt;
&lt;br /&gt;
Sur ce schéma, on retrouve deux canaux de propagation du son. Or l'algorithme LMS ne prend en compte un seul canal de propagation. Nous allons donc utiliser l’algorithme FX-LMS.&lt;br /&gt;
L’introduction du nouveau canal dans notre algorithme peut être traitée de plusieurs manières. Dans notre cas, nous allons procéder en deux : une estimation du canal S puis une modélisation du canal P. &lt;br /&gt;
Cette méthode engendre une hypothèse :&lt;br /&gt;
Le canal S est considéré comme stable et ne change jamais&lt;br /&gt;
Du coup, on pourra modéliser le canal S avec un premier filtre FIR-LMS en mode identification de système puis on utilisera un filtre FIR-FX-LMS en mode modélisation inverse.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Schema_fx-lms1.PNG]]&lt;br /&gt;
&lt;br /&gt;
La partie verte correspond au domaine acoustique et la partie bleue correspond au domaine électronique, c’est le système que l’on va implanter dans notre FPGA. Le bloc Ŝ(z) correspond à notre canal de propagation S(z) estimé. L’ajout de ce bloc entraine donc une modification de l’équation de l’algorithme :&lt;br /&gt;
&lt;br /&gt;
d(n)=X(n)×P(z)&lt;br /&gt;
&lt;br /&gt;
e(n)=d(n)-S(z)×W(n)×X(n)&lt;br /&gt;
&lt;br /&gt;
W(n+1)=W(n)+ μ ×e(n)×X'(n)&lt;br /&gt;
&lt;br /&gt;
X'(n)= Ŝ(z)×X(n)&lt;br /&gt;
&lt;br /&gt;
Il va à présent nous falloir décrire ces équations dans notre FPGA.&lt;br /&gt;
&lt;br /&gt;
===Semaine 2 : du 18/01 au 24/01 ===&lt;br /&gt;
====Simulation du filtre sous Matlab====&lt;br /&gt;
&lt;br /&gt;
Pour simuler notre filtre, nous allons coder les équations de notre filtre dans Matlab en appliquant des signaux théoriques. Le code va se décomposer en deux parties : la première partie permettra de simuler notre filtre en virgule flottante, c’est-à-dire de garder une précisions maximales sur les chiffres puis la deuxième partie sera de simuler cette fois ci en virgule fixe, cela nous permet d’arrondir nos chiffres en fonction d’un nombre de bit prédéfini. La simulation en virgule fixe nous permet de simuler notre schéma électrique, cela dans le but de générer des fichiers de résultats que nous pourrons comparer avec notre code VHDL grâce à un transfert de fichier.&lt;br /&gt;
&lt;br /&gt;
'''1) Simulation en virgule flotante'''&lt;br /&gt;
&lt;br /&gt;
Pour simuler notre système, nous allons utiliser des signaux sinusoïdaux. Les canaux de propagation seront modéliser par des tableaux de coefficients générés aléatoirement par Matlab. Nous allons donc faire passer nos signaux d'entrés dans les canaux de propagation grâce à un produit de convolution puis ensuite nous allons utiliser notre algorithme pour modéliser notre système. Voici les résultats des Simulations :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Resultat_sim_virgule_flotante_1.PNG]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Sur le premier graphique, on retrouve le signal déformé par le canal en rouge et le signal multiplier par les coefficients modélisé en bleue. Sur le deuxième graphique, on retrouve l’erreur entre le signal modélisé et le signal déformé.&lt;br /&gt;
On remarque bien la convergence entre notre signal modélisé et notre signal réel ainsi que la valeur extrêmement faible de notre erreur.&lt;br /&gt;
Maintenant que la modélisation de notre canal S est validée, nous pouvons utiliser l’algorithme du FX-LMS, voici le résultat :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Resultat_sim_virgule_flotante_2.PNG]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Sur le premier graphique, le signal rouge correspond à notre signal déformé par le canal P et le signal bleu le signal envoyé à notre haut-parleur1. Sur le deuxième graphique, on retrouve notre erreur entre les deux signaux.&lt;br /&gt;
&lt;br /&gt;
'''2) Simulation en virgule flotante'''&lt;br /&gt;
&lt;br /&gt;
Le but de cette simulation est de se placer en situation réelle, c’est-à-dire de simuler le même comportement que ce qu’il va se passer dans notre FPGA. Pour cela, nous allons fixer chaque valeur sur 16 bits. Cela nous permet de traiter les valeurs avec la même précision que notre FPGA.&lt;br /&gt;
&lt;br /&gt;
De même que précédemment, voici les résultats de la modélisation du canal S :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Resultat_sim_virgule_fixe1.PNG]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Et le résultat de simulation de l'algorithme total :&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Resultat_sim_virgule_fixe2.PNG]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Semaine 3 : du 25/01 au 31/01 ===&lt;br /&gt;
&lt;br /&gt;
- Prise de connaissance avec la board Basys3 et son FPGA Artix 7 sur le logiciel Vivado. Nous avons récupéré une IP pour le protocole SPI afin de communiquer avec les ADC et DAC.&lt;br /&gt;
&lt;br /&gt;
- Codage du filtre avec adaptation en VHDL :&lt;br /&gt;
&lt;br /&gt;
Nous avons commencé par définir l'architecture de notre composant. Voici cette architecture :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Architecture_FIR.PNG|1000px]]&lt;br /&gt;
&lt;br /&gt;
Puis nous avons coder les différents composants que nous avons connecter suivant l'architecture. Il nous a également fallut créer une machine à état permettant de synchroniser les signaux. &lt;br /&gt;
&lt;br /&gt;
Une fois notre Filtre coder, nous avons utilisé un transfert de fichier entre Matlab et Modelsim (Logiciel de simulation de circuit VHDL) pour comparer les résultats :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Resultat_sim_filtre.PNG|1000px]]&lt;br /&gt;
&lt;br /&gt;
Nous voyons donc que les courbes ne correspondent pas... Cependant, on remarque que le filtre en VHDL s'adapte par rapport à un signal mais pas par rapport au bon. Cela vient peut-être de la méthode utilisé. C'est à dire que l'erreur de notre filtre est généré par Matlab or Modelsim enregistre normalement une autre erreur. Nous allons donc passer à l'implémentation du Filtre dans le FPGA pour voir si l'erreur vient de la méthode utilisé ou de notre code.&lt;br /&gt;
&lt;br /&gt;
==''' Sources, Tuto &amp;amp; Datasheet '''==&lt;br /&gt;
&lt;br /&gt;
Liens Basys3: [https://reference.digilentinc.com/basys3:basys3]&lt;br /&gt;
&lt;br /&gt;
Comment programmer un Basys3 [https://reference.digilentinc.com/basys3:gsg#dokuwiki__top]&lt;br /&gt;
&lt;br /&gt;
PmodDA4: Datasheet du AD5628 [http://www.analog.com/media/en/technical-documentation/data-sheets/AD5628_5648_5668.pdf] Référence [https://reference.digilentinc.com/_media/pmod:pmod:pmodDA4_rm.pdf] Schematic [https://reference.digilentinc.com/_media/pmod:pmod:pmodDA4_sch.pdf]&lt;br /&gt;
&lt;br /&gt;
IP(Intellectual Property) VHDL pour protocole SPI: [https://eewiki.net/pages/viewpage.action?pageId=4096096]&lt;/div&gt;</summary>
		<author><name>Vpiat</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Fichier:Architecture_FIR.PNG&amp;diff=25927</id>
		<title>Fichier:Architecture FIR.PNG</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Fichier:Architecture_FIR.PNG&amp;diff=25927"/>
				<updated>2016-02-02T09:47:08Z</updated>
		
		<summary type="html">&lt;p&gt;Vpiat : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Vpiat</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Implantation_d%27un_filtre_FIR-FX-LMS_sur_FPGA_pour_l%27annulation_de_Bruit_Acoustique&amp;diff=25926</id>
		<title>Implantation d'un filtre FIR-FX-LMS sur FPGA pour l'annulation de Bruit Acoustique</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Implantation_d%27un_filtre_FIR-FX-LMS_sur_FPGA_pour_l%27annulation_de_Bruit_Acoustique&amp;diff=25926"/>
				<updated>2016-02-02T09:45:18Z</updated>
		
		<summary type="html">&lt;p&gt;Vpiat : /* Semaine 3 : du 25/01 au 31/01 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=='''Cahier des Charges'''==&lt;br /&gt;
===Présentation générale du projet===&lt;br /&gt;
&lt;br /&gt;
====Contexte====&lt;br /&gt;
Les problèmes de bruit acoustiques sont de plus en plus présents en industrie avec de plus en plus de moteurs, de transformateurs, de compresseurs, de ventilateur, etc… La plus part du temps, on utilise des moyens passifs pour réduire le bruit, comme des murs, des enclos, des silencieux… Ces systèmes passifs sont utilisés pour leur forte atténuation de bruit sur une large gamme de fréquence. Cependant, ils sont relativement imposants, coûteux et inefficace dans les basses fréquences.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
L'utilisation d'un filtre actif permet de résoudre ces problèmes. En effet, grâce au système de Contrôle Actif du bruit (Active Noise Control – ANC), on peut annuler les bruits primaires en superposant un signal inverse à ce bruit primaire. Ce signal inverse possède la même amplitude avec une opposition de phase. La conception d’un ANC est rapide et efficace, il suffit d’un micro pour recueillir le bruit primaire et d’un haut-parleur pour envoyer l’inverse de ce bruit. &lt;br /&gt;
&lt;br /&gt;
====Description du projet====&lt;br /&gt;
&lt;br /&gt;
On propose ici de réaliser un filtre actif (ANC) permettant d'annuler une source de bruit. Pour cela, nous utiliserons un filtre numérique de type FIR (Finite Impulse Response) avec une adaptation des coefficients par l'algorithme Filtered X Least Mean Square (FX-LMS). Ce filtre sera implémenté sur FPGA permettant de traiter les données en temps réel.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Objectif ====&lt;br /&gt;
&lt;br /&gt;
Notre objectif est d'annuler un bruit primaire envoyé par un Haut-parleur grâce à un second Haut parleur :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Schéma_maquette.PNG]]&lt;br /&gt;
&lt;br /&gt;
Le Haut-parleur 2 envoi un bruit primaire qui sera déformé par le tube. Le Haut-parleur 1 devra donc envoyé l'inverse du son du Haut-parleur 2 déformé.&lt;br /&gt;
Le micro 2 permet de récupérer le bruit primaire et le micro 1 permet de récupéré le son déformé moins le son inverse, c'est à dire à notre erreur de notre filtre.&lt;br /&gt;
&lt;br /&gt;
Le son réceptionné par les micros devra être échantillonné à une fréquence de 48kHz, ainsi une grande partie de l'information sera récupéré et le traitement des signaux aura le temps de s'effectuer.&lt;br /&gt;
&lt;br /&gt;
Nous devrons pouvoir modifier le pas de convergence à distance à l'aide d'une communication filaire, soit à l'aide du protocole SPI, I2C ou UART, nous verrons cela en fonction du matériel disponible. L'envoi des données se fera via mathlab. De plus le FPGA devra envoyer les valeurs des coefficients du filtre que nous afficherons sur mathlab.&lt;br /&gt;
&lt;br /&gt;
== '''Etapes du Projet''' ==&lt;br /&gt;
&lt;br /&gt;
=== Choix techniques : matériel, logiciels, sources === &lt;br /&gt;
&lt;br /&gt;
- Board Basys3 contenant un FPGA Artix7 xc7a35t cpg236 -1&lt;br /&gt;
&lt;br /&gt;
- 2 Convertisseur Analogique to Digital : PmodAD2&lt;br /&gt;
&lt;br /&gt;
- 1 Convertisseur Digital to Analogique : PmodDA4&lt;br /&gt;
&lt;br /&gt;
- 2 Haut Parleurs AD2071Z (8ohm/64mm de diamètre)&lt;br /&gt;
&lt;br /&gt;
- 2 microphones&lt;br /&gt;
&lt;br /&gt;
- Matlab&lt;br /&gt;
&lt;br /&gt;
- Vivado 2015.4 Xilinx&lt;br /&gt;
&lt;br /&gt;
=== Plan de Travail ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;Semaine&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;du 11/01 au 17/01&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;du 18/01 au 24/01&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;du 25/01 au 31/01&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;du 1/02 au 7/02&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;du 8/02 au 14/02&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;du 15/02 au 21/02&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;du 22/02 au 25/02&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;Réalisation&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;Etude bibliographique et théorique du Filtre FIR avec l'adaptation par FX-LMS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;Simulation des algorithmes sous Matlab&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;Codage du programme en VHDL et test sur le FPGA Artix7&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;Implémentation du code sur Artix7 avec essai pratique&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;Implémentation du code sur Artix7 avec essai pratique&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;Développement de la partie communication avec une IHM&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;Rédaction du rapport de projet&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Tableau de bord''' ==&lt;br /&gt;
&lt;br /&gt;
===Semaine 1 : du 11/01 au 17/01 ===&lt;br /&gt;
====Etude théorique du filtre FIR avec adaptation par l'algorithme FX-LMS====&lt;br /&gt;
'''1) Le filtre FIR'''&lt;br /&gt;
&lt;br /&gt;
Un filtre FIR (Finite Impulse Response) est un filtre numérique qui est caractérisé par une réponse basée sur un nombre fini de valeurs du signal d’entrées. Un filtre FIR est décrit par une somme de coefficient multiplié par les valeurs d’entrées.&lt;br /&gt;
Si 〖x[i]〗_(1≤i≤n) représente les valeurs du signal d'entrée, bk les valeurs des coefficients et 〖y[i]〗_(1≤i≤n) les valeurs du signal de sortie pour n échantillons, alors un filtre FIR se défit par la combinaison linéaire :&lt;br /&gt;
[[Fichier:Equation_fir.PNG]]&lt;br /&gt;
&lt;br /&gt;
'''2) Algorithme d'adaptation LMS (Least MeanSqare)'''&lt;br /&gt;
&lt;br /&gt;
Nous allons utiliser un algorithme adaptatif de type LMS (Least MeanSqare). Cet algorithme est le plus utilisé dans le milieu de l’industrie en raison de sa simplicité. Cet algorithme est une approximation de l’algorithme du gradient déterministe. Le principe de cet algorithme est de trouver les coefficients optimums permettant de décrire le système à modéliser. Il commence par mettre tous les coefficients à zéro puis à chaque étape, calcule les nouveaux coefficients en fonction de l’erreur. Si l’erreur est nulle, alors les coefficients modélisent le système. Voici les équations de cet algorithme :&lt;br /&gt;
&lt;br /&gt;
y(n)=w^T (n)×x(n)&lt;br /&gt;
&lt;br /&gt;
e(n)=d(n)-y(n)&lt;br /&gt;
&lt;br /&gt;
w(n+1)=w(n)+ μ×x(n)×e(n)&lt;br /&gt;
&lt;br /&gt;
Avec : &lt;br /&gt;
&lt;br /&gt;
y : signal de sortie du filtre&lt;br /&gt;
&lt;br /&gt;
x : signal d’entrée du filtre&lt;br /&gt;
&lt;br /&gt;
w : les coefficients du filtre&lt;br /&gt;
&lt;br /&gt;
e : l’erreur récupérée&lt;br /&gt;
&lt;br /&gt;
d : le signal désiré&lt;br /&gt;
&lt;br /&gt;
µ : pas d’adaptation de l’algorithme&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Schema_adaptation_lms.PNG]]&lt;br /&gt;
&lt;br /&gt;
Cet algorithme est très efficace mais ne nous permet pas de modéliser correctement notre système&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''3) Algorithme d'adaptation FX-LMS'''&lt;br /&gt;
&lt;br /&gt;
Reprenons notre système :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Schéma_canaux.PNG]]&lt;br /&gt;
&lt;br /&gt;
Sur ce schéma, on retrouve deux canaux de propagation du son. Or l'algorithme LMS ne prend en compte un seul canal de propagation. Nous allons donc utiliser l’algorithme FX-LMS.&lt;br /&gt;
L’introduction du nouveau canal dans notre algorithme peut être traitée de plusieurs manières. Dans notre cas, nous allons procéder en deux : une estimation du canal S puis une modélisation du canal P. &lt;br /&gt;
Cette méthode engendre une hypothèse :&lt;br /&gt;
Le canal S est considéré comme stable et ne change jamais&lt;br /&gt;
Du coup, on pourra modéliser le canal S avec un premier filtre FIR-LMS en mode identification de système puis on utilisera un filtre FIR-FX-LMS en mode modélisation inverse.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Schema_fx-lms1.PNG]]&lt;br /&gt;
&lt;br /&gt;
La partie verte correspond au domaine acoustique et la partie bleue correspond au domaine électronique, c’est le système que l’on va implanter dans notre FPGA. Le bloc Ŝ(z) correspond à notre canal de propagation S(z) estimé. L’ajout de ce bloc entraine donc une modification de l’équation de l’algorithme :&lt;br /&gt;
&lt;br /&gt;
d(n)=X(n)×P(z)&lt;br /&gt;
&lt;br /&gt;
e(n)=d(n)-S(z)×W(n)×X(n)&lt;br /&gt;
&lt;br /&gt;
W(n+1)=W(n)+ μ ×e(n)×X'(n)&lt;br /&gt;
&lt;br /&gt;
X'(n)= Ŝ(z)×X(n)&lt;br /&gt;
&lt;br /&gt;
Il va à présent nous falloir décrire ces équations dans notre FPGA.&lt;br /&gt;
&lt;br /&gt;
===Semaine 2 : du 18/01 au 24/01 ===&lt;br /&gt;
====Simulation du filtre sous Matlab====&lt;br /&gt;
&lt;br /&gt;
Pour simuler notre filtre, nous allons coder les équations de notre filtre dans Matlab en appliquant des signaux théoriques. Le code va se décomposer en deux parties : la première partie permettra de simuler notre filtre en virgule flottante, c’est-à-dire de garder une précisions maximales sur les chiffres puis la deuxième partie sera de simuler cette fois ci en virgule fixe, cela nous permet d’arrondir nos chiffres en fonction d’un nombre de bit prédéfini. La simulation en virgule fixe nous permet de simuler notre schéma électrique, cela dans le but de générer des fichiers de résultats que nous pourrons comparer avec notre code VHDL grâce à un transfert de fichier.&lt;br /&gt;
&lt;br /&gt;
'''1) Simulation en virgule flotante'''&lt;br /&gt;
&lt;br /&gt;
Pour simuler notre système, nous allons utiliser des signaux sinusoïdaux. Les canaux de propagation seront modéliser par des tableaux de coefficients générés aléatoirement par Matlab. Nous allons donc faire passer nos signaux d'entrés dans les canaux de propagation grâce à un produit de convolution puis ensuite nous allons utiliser notre algorithme pour modéliser notre système. Voici les résultats des Simulations :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Resultat_sim_virgule_flotante_1.PNG]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Sur le premier graphique, on retrouve le signal déformé par le canal en rouge et le signal multiplier par les coefficients modélisé en bleue. Sur le deuxième graphique, on retrouve l’erreur entre le signal modélisé et le signal déformé.&lt;br /&gt;
On remarque bien la convergence entre notre signal modélisé et notre signal réel ainsi que la valeur extrêmement faible de notre erreur.&lt;br /&gt;
Maintenant que la modélisation de notre canal S est validée, nous pouvons utiliser l’algorithme du FX-LMS, voici le résultat :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Resultat_sim_virgule_flotante_2.PNG]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Sur le premier graphique, le signal rouge correspond à notre signal déformé par le canal P et le signal bleu le signal envoyé à notre haut-parleur1. Sur le deuxième graphique, on retrouve notre erreur entre les deux signaux.&lt;br /&gt;
&lt;br /&gt;
'''2) Simulation en virgule flotante'''&lt;br /&gt;
&lt;br /&gt;
Le but de cette simulation est de se placer en situation réelle, c’est-à-dire de simuler le même comportement que ce qu’il va se passer dans notre FPGA. Pour cela, nous allons fixer chaque valeur sur 16 bits. Cela nous permet de traiter les valeurs avec la même précision que notre FPGA.&lt;br /&gt;
&lt;br /&gt;
De même que précédemment, voici les résultats de la modélisation du canal S :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Resultat_sim_virgule_fixe1.PNG]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Et le résultat de simulation de l'algorithme total :&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Resultat_sim_virgule_fixe2.PNG]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Semaine 3 : du 25/01 au 31/01 ===&lt;br /&gt;
&lt;br /&gt;
- Prise de connaissance avec la board Basys3 et son FPGA Artix 7 sur le logiciel Vivado. Nous avons récupéré une IP pour le protocole SPI afin de communiquer avec les ADC et DAC.&lt;br /&gt;
&lt;br /&gt;
- Codage du filtre avec adaptation en VHDL :&lt;br /&gt;
&lt;br /&gt;
Nous avons commencé par définir l'architecture de notre composant. Voici cette architecture :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Architecture_FIR.PNG]]&lt;br /&gt;
&lt;br /&gt;
Puis nous avons coder les différents composants que nous avons connecter suivant l'architecture. Il nous a également fallut créer une machine à état permettant de synchroniser les signaux. &lt;br /&gt;
&lt;br /&gt;
Une fois notre Filtre coder, nous avons utilisé un transfert de fichier entre Matlab et Modelsim (Logiciel de simulation de circuit VHDL) pour comparer les résultats :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Resultat_sim_filtre.PNG]]&lt;br /&gt;
&lt;br /&gt;
Nous voyons donc que les courbes ne correspondent pas... Cependant, on remarque que le filtre en VHDL s'adapte par rapport à un signal mais pas par rapport au bon. Cela vient peut-être de la méthode utilisé. C'est à dire que l'erreur de notre filtre est généré par Matlab or Modelsim enregistre normalement une autre erreur. Nous allons donc passer à l'implémentation du Filtre dans le FPGA pour voir si l'erreur vient de la méthode utilisé ou de notre code.&lt;br /&gt;
&lt;br /&gt;
==''' Sources, Tuto &amp;amp; Datasheet '''==&lt;br /&gt;
&lt;br /&gt;
Liens Basys3: [https://reference.digilentinc.com/basys3:basys3]&lt;br /&gt;
&lt;br /&gt;
Comment programmer un Basys3 [https://reference.digilentinc.com/basys3:gsg#dokuwiki__top]&lt;br /&gt;
&lt;br /&gt;
PmodDA4: Datasheet du AD5628 [http://www.analog.com/media/en/technical-documentation/data-sheets/AD5628_5648_5668.pdf] Référence [https://reference.digilentinc.com/_media/pmod:pmod:pmodDA4_rm.pdf] Schematic [https://reference.digilentinc.com/_media/pmod:pmod:pmodDA4_sch.pdf]&lt;br /&gt;
&lt;br /&gt;
IP(Intellectual Property) VHDL pour protocole SPI: [https://eewiki.net/pages/viewpage.action?pageId=4096096]&lt;/div&gt;</summary>
		<author><name>Vpiat</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Fichier:Resultat_sim_filtre.PNG&amp;diff=25925</id>
		<title>Fichier:Resultat sim filtre.PNG</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Fichier:Resultat_sim_filtre.PNG&amp;diff=25925"/>
				<updated>2016-02-02T09:42:36Z</updated>
		
		<summary type="html">&lt;p&gt;Vpiat : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Vpiat</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Fichier:Architecture.PNG&amp;diff=25924</id>
		<title>Fichier:Architecture.PNG</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Fichier:Architecture.PNG&amp;diff=25924"/>
				<updated>2016-02-02T09:39:09Z</updated>
		
		<summary type="html">&lt;p&gt;Vpiat : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Vpiat</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Implantation_d%27un_filtre_FIR-FX-LMS_sur_FPGA_pour_l%27annulation_de_Bruit_Acoustique&amp;diff=25923</id>
		<title>Implantation d'un filtre FIR-FX-LMS sur FPGA pour l'annulation de Bruit Acoustique</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Implantation_d%27un_filtre_FIR-FX-LMS_sur_FPGA_pour_l%27annulation_de_Bruit_Acoustique&amp;diff=25923"/>
				<updated>2016-02-02T09:33:28Z</updated>
		
		<summary type="html">&lt;p&gt;Vpiat : /* Semaine 3 : du 25/01 au 31/01 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=='''Cahier des Charges'''==&lt;br /&gt;
===Présentation générale du projet===&lt;br /&gt;
&lt;br /&gt;
====Contexte====&lt;br /&gt;
Les problèmes de bruit acoustiques sont de plus en plus présents en industrie avec de plus en plus de moteurs, de transformateurs, de compresseurs, de ventilateur, etc… La plus part du temps, on utilise des moyens passifs pour réduire le bruit, comme des murs, des enclos, des silencieux… Ces systèmes passifs sont utilisés pour leur forte atténuation de bruit sur une large gamme de fréquence. Cependant, ils sont relativement imposants, coûteux et inefficace dans les basses fréquences.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
L'utilisation d'un filtre actif permet de résoudre ces problèmes. En effet, grâce au système de Contrôle Actif du bruit (Active Noise Control – ANC), on peut annuler les bruits primaires en superposant un signal inverse à ce bruit primaire. Ce signal inverse possède la même amplitude avec une opposition de phase. La conception d’un ANC est rapide et efficace, il suffit d’un micro pour recueillir le bruit primaire et d’un haut-parleur pour envoyer l’inverse de ce bruit. &lt;br /&gt;
&lt;br /&gt;
====Description du projet====&lt;br /&gt;
&lt;br /&gt;
On propose ici de réaliser un filtre actif (ANC) permettant d'annuler une source de bruit. Pour cela, nous utiliserons un filtre numérique de type FIR (Finite Impulse Response) avec une adaptation des coefficients par l'algorithme Filtered X Least Mean Square (FX-LMS). Ce filtre sera implémenté sur FPGA permettant de traiter les données en temps réel.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Objectif ====&lt;br /&gt;
&lt;br /&gt;
Notre objectif est d'annuler un bruit primaire envoyé par un Haut-parleur grâce à un second Haut parleur :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Schéma_maquette.PNG]]&lt;br /&gt;
&lt;br /&gt;
Le Haut-parleur 2 envoi un bruit primaire qui sera déformé par le tube. Le Haut-parleur 1 devra donc envoyé l'inverse du son du Haut-parleur 2 déformé.&lt;br /&gt;
Le micro 2 permet de récupérer le bruit primaire et le micro 1 permet de récupéré le son déformé moins le son inverse, c'est à dire à notre erreur de notre filtre.&lt;br /&gt;
&lt;br /&gt;
Le son réceptionné par les micros devra être échantillonné à une fréquence de 48kHz, ainsi une grande partie de l'information sera récupéré et le traitement des signaux aura le temps de s'effectuer.&lt;br /&gt;
&lt;br /&gt;
Nous devrons pouvoir modifier le pas de convergence à distance à l'aide d'une communication filaire, soit à l'aide du protocole SPI, I2C ou UART, nous verrons cela en fonction du matériel disponible. L'envoi des données se fera via mathlab. De plus le FPGA devra envoyer les valeurs des coefficients du filtre que nous afficherons sur mathlab.&lt;br /&gt;
&lt;br /&gt;
== '''Etapes du Projet''' ==&lt;br /&gt;
&lt;br /&gt;
=== Choix techniques : matériel, logiciels, sources === &lt;br /&gt;
&lt;br /&gt;
- Board Basys3 contenant un FPGA Artix7 xc7a35t cpg236 -1&lt;br /&gt;
&lt;br /&gt;
- 2 Convertisseur Analogique to Digital : PmodAD2&lt;br /&gt;
&lt;br /&gt;
- 1 Convertisseur Digital to Analogique : PmodDA4&lt;br /&gt;
&lt;br /&gt;
- 2 Haut Parleurs AD2071Z (8ohm/64mm de diamètre)&lt;br /&gt;
&lt;br /&gt;
- 2 microphones&lt;br /&gt;
&lt;br /&gt;
- Matlab&lt;br /&gt;
&lt;br /&gt;
- Vivado 2015.4 Xilinx&lt;br /&gt;
&lt;br /&gt;
=== Plan de Travail ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;Semaine&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;du 11/01 au 17/01&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;du 18/01 au 24/01&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;du 25/01 au 31/01&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;du 1/02 au 7/02&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;du 8/02 au 14/02&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;du 15/02 au 21/02&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;du 22/02 au 25/02&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;Réalisation&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;Etude bibliographique et théorique du Filtre FIR avec l'adaptation par FX-LMS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;Simulation des algorithmes sous Matlab&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;Codage du programme en VHDL et test sur le FPGA Artix7&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;Implémentation du code sur Artix7 avec essai pratique&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;Implémentation du code sur Artix7 avec essai pratique&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;Développement de la partie communication avec une IHM&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;Rédaction du rapport de projet&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Tableau de bord''' ==&lt;br /&gt;
&lt;br /&gt;
===Semaine 1 : du 11/01 au 17/01 ===&lt;br /&gt;
====Etude théorique du filtre FIR avec adaptation par l'algorithme FX-LMS====&lt;br /&gt;
'''1) Le filtre FIR'''&lt;br /&gt;
&lt;br /&gt;
Un filtre FIR (Finite Impulse Response) est un filtre numérique qui est caractérisé par une réponse basée sur un nombre fini de valeurs du signal d’entrées. Un filtre FIR est décrit par une somme de coefficient multiplié par les valeurs d’entrées.&lt;br /&gt;
Si 〖x[i]〗_(1≤i≤n) représente les valeurs du signal d'entrée, bk les valeurs des coefficients et 〖y[i]〗_(1≤i≤n) les valeurs du signal de sortie pour n échantillons, alors un filtre FIR se défit par la combinaison linéaire :&lt;br /&gt;
[[Fichier:Equation_fir.PNG]]&lt;br /&gt;
&lt;br /&gt;
'''2) Algorithme d'adaptation LMS (Least MeanSqare)'''&lt;br /&gt;
&lt;br /&gt;
Nous allons utiliser un algorithme adaptatif de type LMS (Least MeanSqare). Cet algorithme est le plus utilisé dans le milieu de l’industrie en raison de sa simplicité. Cet algorithme est une approximation de l’algorithme du gradient déterministe. Le principe de cet algorithme est de trouver les coefficients optimums permettant de décrire le système à modéliser. Il commence par mettre tous les coefficients à zéro puis à chaque étape, calcule les nouveaux coefficients en fonction de l’erreur. Si l’erreur est nulle, alors les coefficients modélisent le système. Voici les équations de cet algorithme :&lt;br /&gt;
&lt;br /&gt;
y(n)=w^T (n)×x(n)&lt;br /&gt;
&lt;br /&gt;
e(n)=d(n)-y(n)&lt;br /&gt;
&lt;br /&gt;
w(n+1)=w(n)+ μ×x(n)×e(n)&lt;br /&gt;
&lt;br /&gt;
Avec : &lt;br /&gt;
&lt;br /&gt;
y : signal de sortie du filtre&lt;br /&gt;
&lt;br /&gt;
x : signal d’entrée du filtre&lt;br /&gt;
&lt;br /&gt;
w : les coefficients du filtre&lt;br /&gt;
&lt;br /&gt;
e : l’erreur récupérée&lt;br /&gt;
&lt;br /&gt;
d : le signal désiré&lt;br /&gt;
&lt;br /&gt;
µ : pas d’adaptation de l’algorithme&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Schema_adaptation_lms.PNG]]&lt;br /&gt;
&lt;br /&gt;
Cet algorithme est très efficace mais ne nous permet pas de modéliser correctement notre système&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''3) Algorithme d'adaptation FX-LMS'''&lt;br /&gt;
&lt;br /&gt;
Reprenons notre système :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Schéma_canaux.PNG]]&lt;br /&gt;
&lt;br /&gt;
Sur ce schéma, on retrouve deux canaux de propagation du son. Or l'algorithme LMS ne prend en compte un seul canal de propagation. Nous allons donc utiliser l’algorithme FX-LMS.&lt;br /&gt;
L’introduction du nouveau canal dans notre algorithme peut être traitée de plusieurs manières. Dans notre cas, nous allons procéder en deux : une estimation du canal S puis une modélisation du canal P. &lt;br /&gt;
Cette méthode engendre une hypothèse :&lt;br /&gt;
Le canal S est considéré comme stable et ne change jamais&lt;br /&gt;
Du coup, on pourra modéliser le canal S avec un premier filtre FIR-LMS en mode identification de système puis on utilisera un filtre FIR-FX-LMS en mode modélisation inverse.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Schema_fx-lms1.PNG]]&lt;br /&gt;
&lt;br /&gt;
La partie verte correspond au domaine acoustique et la partie bleue correspond au domaine électronique, c’est le système que l’on va implanter dans notre FPGA. Le bloc Ŝ(z) correspond à notre canal de propagation S(z) estimé. L’ajout de ce bloc entraine donc une modification de l’équation de l’algorithme :&lt;br /&gt;
&lt;br /&gt;
d(n)=X(n)×P(z)&lt;br /&gt;
&lt;br /&gt;
e(n)=d(n)-S(z)×W(n)×X(n)&lt;br /&gt;
&lt;br /&gt;
W(n+1)=W(n)+ μ ×e(n)×X'(n)&lt;br /&gt;
&lt;br /&gt;
X'(n)= Ŝ(z)×X(n)&lt;br /&gt;
&lt;br /&gt;
Il va à présent nous falloir décrire ces équations dans notre FPGA.&lt;br /&gt;
&lt;br /&gt;
===Semaine 2 : du 18/01 au 24/01 ===&lt;br /&gt;
====Simulation du filtre sous Matlab====&lt;br /&gt;
&lt;br /&gt;
Pour simuler notre filtre, nous allons coder les équations de notre filtre dans Matlab en appliquant des signaux théoriques. Le code va se décomposer en deux parties : la première partie permettra de simuler notre filtre en virgule flottante, c’est-à-dire de garder une précisions maximales sur les chiffres puis la deuxième partie sera de simuler cette fois ci en virgule fixe, cela nous permet d’arrondir nos chiffres en fonction d’un nombre de bit prédéfini. La simulation en virgule fixe nous permet de simuler notre schéma électrique, cela dans le but de générer des fichiers de résultats que nous pourrons comparer avec notre code VHDL grâce à un transfert de fichier.&lt;br /&gt;
&lt;br /&gt;
'''1) Simulation en virgule flotante'''&lt;br /&gt;
&lt;br /&gt;
Pour simuler notre système, nous allons utiliser des signaux sinusoïdaux. Les canaux de propagation seront modéliser par des tableaux de coefficients générés aléatoirement par Matlab. Nous allons donc faire passer nos signaux d'entrés dans les canaux de propagation grâce à un produit de convolution puis ensuite nous allons utiliser notre algorithme pour modéliser notre système. Voici les résultats des Simulations :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Resultat_sim_virgule_flotante_1.PNG]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Sur le premier graphique, on retrouve le signal déformé par le canal en rouge et le signal multiplier par les coefficients modélisé en bleue. Sur le deuxième graphique, on retrouve l’erreur entre le signal modélisé et le signal déformé.&lt;br /&gt;
On remarque bien la convergence entre notre signal modélisé et notre signal réel ainsi que la valeur extrêmement faible de notre erreur.&lt;br /&gt;
Maintenant que la modélisation de notre canal S est validée, nous pouvons utiliser l’algorithme du FX-LMS, voici le résultat :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Resultat_sim_virgule_flotante_2.PNG]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Sur le premier graphique, le signal rouge correspond à notre signal déformé par le canal P et le signal bleu le signal envoyé à notre haut-parleur1. Sur le deuxième graphique, on retrouve notre erreur entre les deux signaux.&lt;br /&gt;
&lt;br /&gt;
'''2) Simulation en virgule flotante'''&lt;br /&gt;
&lt;br /&gt;
Le but de cette simulation est de se placer en situation réelle, c’est-à-dire de simuler le même comportement que ce qu’il va se passer dans notre FPGA. Pour cela, nous allons fixer chaque valeur sur 16 bits. Cela nous permet de traiter les valeurs avec la même précision que notre FPGA.&lt;br /&gt;
&lt;br /&gt;
De même que précédemment, voici les résultats de la modélisation du canal S :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Resultat_sim_virgule_fixe1.PNG]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Et le résultat de simulation de l'algorithme total :&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Resultat_sim_virgule_fixe2.PNG]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Semaine 3 : du 25/01 au 31/01 ===&lt;br /&gt;
&lt;br /&gt;
- Prise de connaissance avec la board Basys3 et son FPGA Artix 7 sur le logiciel Vivado. Nous avons récupéré une IP pour le protocole SPI afin de communiquer avec les ADC et DAC.&lt;br /&gt;
&lt;br /&gt;
- Codage du filtre avec adaptation en VHDL :&lt;br /&gt;
&lt;br /&gt;
Nous avons commencé par définir l'architecture de notre composant. Voici cette architecture :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:]]&lt;br /&gt;
&lt;br /&gt;
Puis nous avons coder les différents composants que nous avons connecter suivant l'architecture. Il nous a également fallut créer une machine à état permettant de synchroniser les signaux. &lt;br /&gt;
&lt;br /&gt;
Une fois notre Filtre coder, nous avons utilisé un transfert de fichier entre Matlab et Modelsim (Logiciel de simulation de circuit VHDL) pour comparer les résultats :&lt;br /&gt;
&lt;br /&gt;
==''' Sources, Tuto &amp;amp; Datasheet '''==&lt;br /&gt;
&lt;br /&gt;
Liens Basys3: [https://reference.digilentinc.com/basys3:basys3]&lt;br /&gt;
&lt;br /&gt;
Comment programmer un Basys3 [https://reference.digilentinc.com/basys3:gsg#dokuwiki__top]&lt;br /&gt;
&lt;br /&gt;
PmodDA4: Datasheet du AD5628 [http://www.analog.com/media/en/technical-documentation/data-sheets/AD5628_5648_5668.pdf] Référence [https://reference.digilentinc.com/_media/pmod:pmod:pmodDA4_rm.pdf] Schematic [https://reference.digilentinc.com/_media/pmod:pmod:pmodDA4_sch.pdf]&lt;br /&gt;
&lt;br /&gt;
IP(Intellectual Property) VHDL pour protocole SPI: [https://eewiki.net/pages/viewpage.action?pageId=4096096]&lt;/div&gt;</summary>
		<author><name>Vpiat</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Implantation_d%27un_filtre_FIR-FX-LMS_sur_FPGA_pour_l%27annulation_de_Bruit_Acoustique&amp;diff=25436</id>
		<title>Implantation d'un filtre FIR-FX-LMS sur FPGA pour l'annulation de Bruit Acoustique</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Implantation_d%27un_filtre_FIR-FX-LMS_sur_FPGA_pour_l%27annulation_de_Bruit_Acoustique&amp;diff=25436"/>
				<updated>2016-01-26T15:28:37Z</updated>
		
		<summary type="html">&lt;p&gt;Vpiat : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=='''Cahier des Charges'''==&lt;br /&gt;
===Présentation générale du projet===&lt;br /&gt;
&lt;br /&gt;
====Contexte====&lt;br /&gt;
Les problèmes de bruit acoustiques sont de plus en plus présents en industrie avec de plus en plus de moteurs, de transformateurs, de compresseurs, de ventilateur, etc… La plus part du temps, on utilise des moyens passifs pour réduire le bruit, comme des murs, des enclos, des silencieux… Ces systèmes passifs sont utilisés pour leur forte atténuation de bruit sur une large gamme de fréquence. Cependant, ils sont relativement imposants, coûteux et inefficace dans les basses fréquences.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
L'utilisation d'un filtre actif permet de résoudre ces problèmes. En effet, grâce au système de Contrôle Actif du bruit (Active Noise Control – ANC), on peut annuler les bruits primaires en superposant un signal inverse à ce bruit primaire. Ce signal inverse possède la même amplitude avec une opposition de phase. La conception d’un ANC est rapide et efficace, il suffit d’un micro pour recueillir le bruit primaire et d’un haut-parleur pour envoyer l’inverse de ce bruit. &lt;br /&gt;
&lt;br /&gt;
====Description du projet====&lt;br /&gt;
&lt;br /&gt;
On propose ici de réaliser un filtre actif (ANC) permettant d'annuler une source de bruit. Pour cela, nous utiliserons un filtre numérique de type FIR (Finite Impulse Response) avec une adaptation des coefficients par l'algorithme Filtered X Least Mean Square (FX-LMS). Ce filtre sera implémenté sur FPGA permettant de traiter les données en temps réel.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Objectif ====&lt;br /&gt;
&lt;br /&gt;
Notre objectif est d'annuler un bruit primaire envoyé par un Haut-parleur grâce à un second Haut parleur :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Schéma_maquette.PNG]]&lt;br /&gt;
&lt;br /&gt;
Le Haut-parleur 2 envoi un bruit primaire qui sera déformé par le tube. Le Haut-parleur 1 devra donc envoyé l'inverse du son du Haut-parleur 2 déformé.&lt;br /&gt;
Le micro 2 permet de récupérer le bruit primaire et le micro 1 permet de récupéré le son déformé moins le son inverse, c'est à dire à notre erreur de notre filtre.&lt;br /&gt;
&lt;br /&gt;
Le son réceptionné par les micros devra être échantillonné à une fréquence de 48kHz, ainsi une grande partie de l'information sera récupéré et le traitement des signaux aura le temps de s'effectuer.&lt;br /&gt;
&lt;br /&gt;
Nous devrons pouvoir modifier le pas de convergence à distance à l'aide d'une communication filaire, soit à l'aide du protocole SPI, I2C ou UART, nous verrons cela en fonction du matériel disponible. L'envoi des données se fera via mathlab. De plus le FPGA devra envoyer les valeurs des coefficients du filtre que nous afficherons sur mathlab.&lt;br /&gt;
&lt;br /&gt;
== '''Etapes du Projet''' ==&lt;br /&gt;
&lt;br /&gt;
=== Choix techniques : matériel, logiciels, sources === &lt;br /&gt;
&lt;br /&gt;
- FPGA Artix7&lt;br /&gt;
- 2 Haut Parleurs AD2071Z (8ohm/64mm de diamètre)&lt;br /&gt;
- 2 microphones&lt;br /&gt;
- Matlab&lt;br /&gt;
- ISE Xilinx&lt;br /&gt;
&lt;br /&gt;
=== Plan de Travail ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;Semaine&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;du 11/01 au 17/01&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;du 18/01 au 24/01&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;du 25/01 au 31/01&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;du 1/02 au 7/02&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;du 8/02 au 14/02&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;du 15/02 au 21/02&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;du 22/02 au 25/02&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;Réalisation&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;Etude bibliographique et théorique du Filtre FIR avec l'adaptation par FX-LMS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;Simulation des algorithmes sous Matlab&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;Codage du programme en VHDL et test sur le FPGA Artix7&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;Implémentation du code sur Artix7 avec essai pratique&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;Implémentation du code sur Artix7 avec essai pratique&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;Développement de la partie communication avec une IHM&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;Rédaction du rapport de projet&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Tableau de bord''' ==&lt;br /&gt;
&lt;br /&gt;
===Semaine 1 : du 11/01 au 17/01 ===&lt;br /&gt;
====Etude théorique du filtre FIR avec adaptation par l'algorithme FX-LMS====&lt;br /&gt;
'''1) Le filtre FIR'''&lt;br /&gt;
&lt;br /&gt;
Un filtre FIR (Finite Impulse Response) est un filtre numérique qui est caractérisé par une réponse basée sur un nombre fini de valeurs du signal d’entrées. Un filtre FIR est décrit par une somme de coefficient multiplié par les valeurs d’entrées.&lt;br /&gt;
Si 〖x[i]〗_(1≤i≤n) représente les valeurs du signal d'entrée, bk les valeurs des coefficients et 〖y[i]〗_(1≤i≤n) les valeurs du signal de sortie pour n échantillons, alors un filtre FIR se défit par la combinaison linéaire :&lt;br /&gt;
[[Fichier:Equation_fir.PNG]]&lt;br /&gt;
&lt;br /&gt;
'''2) Algorithme d'adaptation LMS (Least MeanSqare)'''&lt;br /&gt;
&lt;br /&gt;
Nous allons utiliser un algorithme adaptatif de type LMS (Least MeanSqare). Cet algorithme est le plus utilisé dans le milieu de l’industrie en raison de sa simplicité. Cet algorithme est une approximation de l’algorithme du gradient déterministe. Le principe de cet algorithme est de trouver les coefficients optimums permettant de décrire le système à modéliser. Il commence par mettre tous les coefficients à zéro puis à chaque étape, calcule les nouveaux coefficients en fonction de l’erreur. Si l’erreur est nulle, alors les coefficients modélisent le système. Voici les équations de cet algorithme :&lt;br /&gt;
&lt;br /&gt;
y(n)=w^T (n)×x(n)&lt;br /&gt;
&lt;br /&gt;
e(n)=d(n)-y(n)&lt;br /&gt;
&lt;br /&gt;
w(n+1)=w(n)+ μ×x(n)×e(n)&lt;br /&gt;
&lt;br /&gt;
Avec : &lt;br /&gt;
&lt;br /&gt;
y : signal de sortie du filtre&lt;br /&gt;
&lt;br /&gt;
x : signal d’entrée du filtre&lt;br /&gt;
&lt;br /&gt;
w : les coefficients du filtre&lt;br /&gt;
&lt;br /&gt;
e : l’erreur récupérée&lt;br /&gt;
&lt;br /&gt;
d : le signal désiré&lt;br /&gt;
&lt;br /&gt;
µ : pas d’adaptation de l’algorithme&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Schema_adaptation_lms.PNG]]&lt;br /&gt;
&lt;br /&gt;
Cet algorithme est très efficace mais ne nous permet pas de modéliser correctement notre système&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''3) Algorithme d'adaptation FX-LMS'''&lt;br /&gt;
&lt;br /&gt;
Reprenons notre système :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Schéma_canaux.PNG]]&lt;br /&gt;
&lt;br /&gt;
Sur ce schéma, on retrouve deux canaux de propagation du son. Or l'algorithme LMS ne prend en compte un seul canal de propagation. Nous allons donc utiliser l’algorithme FX-LMS.&lt;br /&gt;
L’introduction du nouveau canal dans notre algorithme peut être traitée de plusieurs manières. Dans notre cas, nous allons procéder en deux : une estimation du canal S puis une modélisation du canal P. &lt;br /&gt;
Cette méthode engendre une hypothèse :&lt;br /&gt;
Le canal S est considéré comme stable et ne change jamais&lt;br /&gt;
Du coup, on pourra modéliser le canal S avec un premier filtre FIR-LMS en mode identification de système puis on utilisera un filtre FIR-FX-LMS en mode modélisation inverse.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Schema_fx-lms1.PNG]]&lt;br /&gt;
&lt;br /&gt;
La partie verte correspond au domaine acoustique et la partie bleue correspond au domaine électronique, c’est le système que l’on va implanter dans notre FPGA. Le bloc Ŝ(z) correspond à notre canal de propagation S(z) estimé. L’ajout de ce bloc entraine donc une modification de l’équation de l’algorithme :&lt;br /&gt;
&lt;br /&gt;
d(n)=X(n)×P(z)&lt;br /&gt;
&lt;br /&gt;
e(n)=d(n)-S(z)×W(n)×X(n)&lt;br /&gt;
&lt;br /&gt;
W(n+1)=W(n)+ μ ×e(n)×X'(n)&lt;br /&gt;
&lt;br /&gt;
X'(n)= Ŝ(z)×X(n)&lt;br /&gt;
&lt;br /&gt;
Il va à présent nous falloir décrire ces équations dans notre FPGA.&lt;br /&gt;
&lt;br /&gt;
===Semaine 2 : du 18/01 au 24/01 ===&lt;br /&gt;
====Simulation du filtre sous Matlab====&lt;br /&gt;
&lt;br /&gt;
Pour simuler notre filtre, nous allons coder les équations de notre filtre dans Matlab en appliquant des signaux théoriques. Le code va se décomposer en deux parties : la première partie permettra de simuler notre filtre en virgule flottante, c’est-à-dire de garder une précisions maximales sur les chiffres puis la deuxième partie sera de simuler cette fois ci en virgule fixe, cela nous permet d’arrondir nos chiffres en fonction d’un nombre de bit prédéfini. La simulation en virgule fixe nous permet de simuler notre schéma électrique, cela dans le but de générer des fichiers de résultats que nous pourrons comparer avec notre code VHDL grâce à un transfert de fichier.&lt;br /&gt;
&lt;br /&gt;
'''1) Simulation en virgule flotante'''&lt;br /&gt;
&lt;br /&gt;
Pour simuler notre système, nous allons utiliser des signaux sinusoïdaux. Les canaux de propagation seront modéliser par des tableaux de coefficients générés aléatoirement par Matlab. Nous allons donc faire passer nos signaux d'entrés dans les canaux de propagation grâce à un produit de convolution puis ensuite nous allons utiliser notre algorithme pour modéliser notre système. Voici les résultats des Simulations :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Resultat_sim_virgule_flotante_1.PNG]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Sur le premier graphique, on retrouve le signal déformé par le canal en rouge et le signal multiplier par les coefficients modélisé en bleue. Sur le deuxième graphique, on retrouve l’erreur entre le signal modélisé et le signal déformé.&lt;br /&gt;
On remarque bien la convergence entre notre signal modélisé et notre signal réel ainsi que la valeur extrêmement faible de notre erreur.&lt;br /&gt;
Maintenant que la modélisation de notre canal S est validée, nous pouvons utiliser l’algorithme du FX-LMS, voici le résultat :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Resultat_sim_virgule_flotante_2.PNG]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Sur le premier graphique, le signal rouge correspond à notre signal déformé par le canal P et le signal bleu le signal envoyé à notre haut-parleur1. Sur le deuxième graphique, on retrouve notre erreur entre les deux signaux.&lt;br /&gt;
&lt;br /&gt;
'''2) Simulation en virgule flotante'''&lt;br /&gt;
&lt;br /&gt;
Le but de cette simulation est de se placer en situation réelle, c’est-à-dire de simuler le même comportement que ce qu’il va se passer dans notre FPGA. Pour cela, nous allons fixer chaque valeur sur 16 bits. Cela nous permet de traiter les valeurs avec la même précision que notre FPGA.&lt;br /&gt;
&lt;br /&gt;
De même que précédemment, voici les résultats de la modélisation du canal S :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Resultat_sim_virgule_fixe1.PNG]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Et le résultat de simulation de l'algorithme total :&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Resultat_sim_virgule_fixe2.PNG]]&lt;/div&gt;</summary>
		<author><name>Vpiat</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Implantation_d%27un_filtre_FIR-FX-LMS_sur_FPGA_pour_l%27annulation_de_Bruit_Acoustique&amp;diff=25435</id>
		<title>Implantation d'un filtre FIR-FX-LMS sur FPGA pour l'annulation de Bruit Acoustique</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Implantation_d%27un_filtre_FIR-FX-LMS_sur_FPGA_pour_l%27annulation_de_Bruit_Acoustique&amp;diff=25435"/>
				<updated>2016-01-26T15:24:07Z</updated>
		
		<summary type="html">&lt;p&gt;Vpiat : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=='''Cahier des Charges'''==&lt;br /&gt;
===Présentation générale du projet===&lt;br /&gt;
&lt;br /&gt;
====Contexte====&lt;br /&gt;
Les problèmes de bruit acoustiques sont de plus en plus présents en industrie avec de plus en plus de moteurs, de transformateurs, de compresseurs, de ventilateur, etc… La plus part du temps, on utilise des moyens passifs pour réduire le bruit, comme des murs, des enclos, des silencieux… Ces systèmes passifs sont utilisés pour leur forte atténuation de bruit sur une large gamme de fréquence. Cependant, ils sont relativement imposants, coûteux et inefficace dans les basses fréquences.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
L'utilisation d'un filtre actif permet de résoudre ces problèmes. En effet, grâce au système de Contrôle Actif du bruit (Active Noise Control – ANC), on peut annuler les bruits primaires en superposant un signal inverse à ce bruit primaire. Ce signal inverse possède la même amplitude avec une opposition de phase. La conception d’un ANC est rapide et efficace, il suffit d’un micro pour recueillir le bruit primaire et d’un haut-parleur pour envoyer l’inverse de ce bruit. &lt;br /&gt;
&lt;br /&gt;
====Description du projet====&lt;br /&gt;
&lt;br /&gt;
On propose ici de réaliser un filtre actif (ANC) permettant d'annuler une source de bruit. Pour cela, nous utiliserons un filtre numérique de type FIR (Finite Impulse Response) avec une adaptation des coefficients par l'algorithme Filtered X Least Mean Square (FX-LMS). Ce filtre sera implémenté sur FPGA permettant de traiter les données en temps réel.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Objectif ====&lt;br /&gt;
&lt;br /&gt;
Notre objectif est d'annuler un bruit primaire envoyé par un Haut-parleur grâce à un second Haut parleur :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Schéma_maquette.PNG]]&lt;br /&gt;
&lt;br /&gt;
Le Haut-parleur 2 envoi un bruit primaire qui sera déformé par le tube. Le Haut-parleur 1 devra donc envoyé l'inverse du son du Haut-parleur 2 déformé.&lt;br /&gt;
Le micro 2 permet de récupérer le bruit primaire et le micro 1 permet de récupéré le son déformé moins le son inverse, c'est à dire à notre erreur de notre filtre.&lt;br /&gt;
&lt;br /&gt;
Le son réceptionné par les micros devra être échantillonné à une fréquence de 48kHz, ainsi une grande partie de l'information sera récupéré et le traitement des signaux aura le temps de s'effectuer.&lt;br /&gt;
&lt;br /&gt;
Nous devrons pouvoir modifier le pas de convergence à distance à l'aide d'une communication filaire, soit à l'aide du protocole SPI, I2C ou UART, nous verrons cela en fonction du matériel disponible. L'envoi des données se fera via mathlab. De plus le FPGA devra envoyer les valeurs des coefficients du filtre que nous afficherons sur mathlab.&lt;br /&gt;
&lt;br /&gt;
== '''Etapes du Projet''' ==&lt;br /&gt;
&lt;br /&gt;
=== Choix techniques : matériel, logiciels, sources === &lt;br /&gt;
&lt;br /&gt;
=== Plan de Travail ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;Semaine&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;du 11/01 au 17/01&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;du 18/01 au 24/01&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;du 25/01 au 31/01&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;du 1/02 au 7/02&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;du 8/02 au 14/02&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;du 15/02 au 21/02&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;du 22/02 au 25/02&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;Réalisation&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;Etude bibliographique et théorique du Filtre FIR avec l'adaptation par FX-LMS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;Simulation des algorithmes sous Matlab&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;Codage du programme en VHDL et test sur le FPGA Artix7&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;Implémentation du code sur Artix7 avec essai pratique&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;Implémentation du code sur Artix7 avec essai pratique&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;Développement de la partie communication avec une IHM&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;Rédaction du rapport de projet&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Tableau de bord''' ==&lt;br /&gt;
&lt;br /&gt;
===Semaine 1 : du 11/01 au 17/01 ===&lt;br /&gt;
====Etude théorique du filtre FIR avec adaptation par l'algorithme FX-LMS====&lt;br /&gt;
'''1) Le filtre FIR'''&lt;br /&gt;
&lt;br /&gt;
Un filtre FIR (Finite Impulse Response) est un filtre numérique qui est caractérisé par une réponse basée sur un nombre fini de valeurs du signal d’entrées. Un filtre FIR est décrit par une somme de coefficient multiplié par les valeurs d’entrées.&lt;br /&gt;
Si 〖x[i]〗_(1≤i≤n) représente les valeurs du signal d'entrée, bk les valeurs des coefficients et 〖y[i]〗_(1≤i≤n) les valeurs du signal de sortie pour n échantillons, alors un filtre FIR se défit par la combinaison linéaire :&lt;br /&gt;
[[Fichier:Equation_fir.PNG]]&lt;br /&gt;
&lt;br /&gt;
'''2) Algorithme d'adaptation LMS (Least MeanSqare)'''&lt;br /&gt;
&lt;br /&gt;
Nous allons utiliser un algorithme adaptatif de type LMS (Least MeanSqare). Cet algorithme est le plus utilisé dans le milieu de l’industrie en raison de sa simplicité. Cet algorithme est une approximation de l’algorithme du gradient déterministe. Le principe de cet algorithme est de trouver les coefficients optimums permettant de décrire le système à modéliser. Il commence par mettre tous les coefficients à zéro puis à chaque étape, calcule les nouveaux coefficients en fonction de l’erreur. Si l’erreur est nulle, alors les coefficients modélisent le système. Voici les équations de cet algorithme :&lt;br /&gt;
&lt;br /&gt;
y(n)=w^T (n)×x(n)&lt;br /&gt;
&lt;br /&gt;
e(n)=d(n)-y(n)&lt;br /&gt;
&lt;br /&gt;
w(n+1)=w(n)+ μ×x(n)×e(n)&lt;br /&gt;
&lt;br /&gt;
Avec : &lt;br /&gt;
&lt;br /&gt;
y : signal de sortie du filtre&lt;br /&gt;
&lt;br /&gt;
x : signal d’entrée du filtre&lt;br /&gt;
&lt;br /&gt;
w : les coefficients du filtre&lt;br /&gt;
&lt;br /&gt;
e : l’erreur récupérée&lt;br /&gt;
&lt;br /&gt;
d : le signal désiré&lt;br /&gt;
&lt;br /&gt;
µ : pas d’adaptation de l’algorithme&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Schema_adaptation_lms.PNG]]&lt;br /&gt;
&lt;br /&gt;
Cet algorithme est très efficace mais ne nous permet pas de modéliser correctement notre système&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''3) Algorithme d'adaptation FX-LMS'''&lt;br /&gt;
&lt;br /&gt;
Reprenons notre système :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Schéma_canaux.PNG]]&lt;br /&gt;
&lt;br /&gt;
Sur ce schéma, on retrouve deux canaux de propagation du son. Or l'algorithme LMS ne prend en compte un seul canal de propagation. Nous allons donc utiliser l’algorithme FX-LMS.&lt;br /&gt;
L’introduction du nouveau canal dans notre algorithme peut être traitée de plusieurs manières. Dans notre cas, nous allons procéder en deux : une estimation du canal S puis une modélisation du canal P. &lt;br /&gt;
Cette méthode engendre une hypothèse :&lt;br /&gt;
Le canal S est considéré comme stable et ne change jamais&lt;br /&gt;
Du coup, on pourra modéliser le canal S avec un premier filtre FIR-LMS en mode identification de système puis on utilisera un filtre FIR-FX-LMS en mode modélisation inverse.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Schema_fx-lms1.PNG]]&lt;br /&gt;
&lt;br /&gt;
La partie verte correspond au domaine acoustique et la partie bleue correspond au domaine électronique, c’est le système que l’on va implanter dans notre FPGA. Le bloc Ŝ(z) correspond à notre canal de propagation S(z) estimé. L’ajout de ce bloc entraine donc une modification de l’équation de l’algorithme :&lt;br /&gt;
&lt;br /&gt;
d(n)=X(n)×P(z)&lt;br /&gt;
&lt;br /&gt;
e(n)=d(n)-S(z)×W(n)×X(n)&lt;br /&gt;
&lt;br /&gt;
W(n+1)=W(n)+ μ ×e(n)×X'(n)&lt;br /&gt;
&lt;br /&gt;
X'(n)= Ŝ(z)×X(n)&lt;br /&gt;
&lt;br /&gt;
Il va à présent nous falloir décrire ces équations dans notre FPGA.&lt;br /&gt;
&lt;br /&gt;
===Semaine 2 : du 18/01 au 24/01 ===&lt;br /&gt;
====Simulation du filtre sous Matlab====&lt;br /&gt;
&lt;br /&gt;
Pour simuler notre filtre, nous allons coder les équations de notre filtre dans Matlab en appliquant des signaux théoriques. Le code va se décomposer en deux parties : la première partie permettra de simuler notre filtre en virgule flottante, c’est-à-dire de garder une précisions maximales sur les chiffres puis la deuxième partie sera de simuler cette fois ci en virgule fixe, cela nous permet d’arrondir nos chiffres en fonction d’un nombre de bit prédéfini. La simulation en virgule fixe nous permet de simuler notre schéma électrique, cela dans le but de générer des fichiers de résultats que nous pourrons comparer avec notre code VHDL grâce à un transfert de fichier.&lt;br /&gt;
&lt;br /&gt;
'''1) Simulation en virgule flotante'''&lt;br /&gt;
&lt;br /&gt;
Pour simuler notre système, nous allons utiliser des signaux sinusoïdaux. Les canaux de propagation seront modéliser par des tableaux de coefficients générés aléatoirement par Matlab. Nous allons donc faire passer nos signaux d'entrés dans les canaux de propagation grâce à un produit de convolution puis ensuite nous allons utiliser notre algorithme pour modéliser notre système. Voici les résultats des Simulations :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Resultat_sim_virgule_flotante_1.PNG]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Sur le premier graphique, on retrouve le signal déformé par le canal en rouge et le signal multiplier par les coefficients modélisé en bleue. Sur le deuxième graphique, on retrouve l’erreur entre le signal modélisé et le signal déformé.&lt;br /&gt;
On remarque bien la convergence entre notre signal modélisé et notre signal réel ainsi que la valeur extrêmement faible de notre erreur.&lt;br /&gt;
Maintenant que la modélisation de notre canal S est validée, nous pouvons utiliser l’algorithme du FX-LMS, voici le résultat :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Resultat_sim_virgule_flotante_2.PNG]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Sur le premier graphique, le signal rouge correspond à notre signal déformé par le canal P et le signal bleu le signal envoyé à notre haut-parleur1. Sur le deuxième graphique, on retrouve notre erreur entre les deux signaux.&lt;br /&gt;
&lt;br /&gt;
'''2) Simulation en virgule flotante'''&lt;br /&gt;
&lt;br /&gt;
Le but de cette simulation est de se placer en situation réelle, c’est-à-dire de simuler le même comportement que ce qu’il va se passer dans notre FPGA. Pour cela, nous allons fixer chaque valeur sur 16 bits. Cela nous permet de traiter les valeurs avec la même précision que notre FPGA.&lt;br /&gt;
&lt;br /&gt;
De même que précédemment, voici les résultats de la modélisation du canal S :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Resultat_sim_virgule_fixe1.PNG]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Et le résultat de simulation de l'algorithme total :&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Resultat_sim_virgule_fixe2.PNG]]&lt;/div&gt;</summary>
		<author><name>Vpiat</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Fichier:Resultat_sim_virgule_fixe2.PNG&amp;diff=25430</id>
		<title>Fichier:Resultat sim virgule fixe2.PNG</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Fichier:Resultat_sim_virgule_fixe2.PNG&amp;diff=25430"/>
				<updated>2016-01-26T14:49:38Z</updated>
		
		<summary type="html">&lt;p&gt;Vpiat : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Vpiat</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Implantation_d%27un_filtre_FIR-FX-LMS_sur_FPGA_pour_l%27annulation_de_Bruit_Acoustique&amp;diff=25429</id>
		<title>Implantation d'un filtre FIR-FX-LMS sur FPGA pour l'annulation de Bruit Acoustique</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Implantation_d%27un_filtre_FIR-FX-LMS_sur_FPGA_pour_l%27annulation_de_Bruit_Acoustique&amp;diff=25429"/>
				<updated>2016-01-26T14:49:28Z</updated>
		
		<summary type="html">&lt;p&gt;Vpiat : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=='''Cahier des Charges'''==&lt;br /&gt;
===Présentation générale du projet===&lt;br /&gt;
&lt;br /&gt;
====Contexte====&lt;br /&gt;
Les problèmes de bruit acoustiques sont de plus en plus présents en industrie avec de plus en plus de moteurs, de transformateurs, de compresseurs, de ventilateur, etc… La plus part du temps, on utilise des moyens passifs pour réduire le bruit, comme des murs, des enclos, des silencieux… Ces systèmes passifs sont utilisés pour leur forte atténuation de bruit sur une large gamme de fréquence. Cependant, ils sont relativement imposants, coûteux et inefficace dans les basses fréquences.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
L'utilisation d'un filtre actif permet de résoudre ces problèmes. En effet, grâce au système de Contrôle Actif du bruit (Active Noise Control – ANC), on peut annuler les bruits primaires en superposant un signal inverse à ce bruit primaire. Ce signal inverse possède la même amplitude avec une opposition de phase. La conception d’un ANC est rapide et efficace, il suffit d’un micro pour recueillir le bruit primaire et d’un haut-parleur pour envoyer l’inverse de ce bruit. &lt;br /&gt;
&lt;br /&gt;
====Description du projet====&lt;br /&gt;
&lt;br /&gt;
On propose ici de réaliser un filtre actif (ANC) permettant d'annuler une source de bruit. Pour cela, nous utiliserons un filtre numérique de type FIR (Finite Impulse Response) avec une adaptation des coefficients par l'algorithme Filtered X Least Mean Square (FX-LMS). Ce filtre sera implémenté sur FPGA permettant de traiter les données en temps réel.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Objectif ====&lt;br /&gt;
&lt;br /&gt;
Notre objectif est d'annuler un bruit primaire envoyé par un Haut-parleur grâce à un second Haut parleur :&lt;br /&gt;
[[Fichier:Schéma_maquette.PNG]]&lt;br /&gt;
&lt;br /&gt;
Le Haut-parleur 2 envoi un bruit primaire qui sera déformé par le tube. Le Haut-parleur 1 devra donc envoyé l'inverse du son du Haut-parleur 2 déformé.&lt;br /&gt;
Le micro 2 permet de récupérer le bruit primaire et le micro 1 permet de récupéré le son déformé moins le son inverse, c'est à dire à notre erreur de notre filtre.&lt;br /&gt;
&lt;br /&gt;
== '''Etapes du Projet''' ==&lt;br /&gt;
&lt;br /&gt;
=== Choix techniques : matériel, logiciels, sources === &lt;br /&gt;
&lt;br /&gt;
== '''Tableau de bord''' ==&lt;br /&gt;
&lt;br /&gt;
===Semaine 1 : du 11/01 au 17/01 ===&lt;br /&gt;
====Etude théorique du filtre FIR avec adaptation par l'algorithme FX-LMS====&lt;br /&gt;
1) Le filtre FIR&lt;br /&gt;
&lt;br /&gt;
Un filtre FIR (Finite Impulse Response) est un filtre numérique qui est caractérisé par une réponse basée sur un nombre fini de valeurs du signal d’entrées. Un filtre FIR est décrit par une somme de coefficient multiplié par les valeurs d’entrées.&lt;br /&gt;
Si 〖x[i]〗_(1≤i≤n) représente les valeurs du signal d'entrée, bk les valeurs des coefficients et 〖y[i]〗_(1≤i≤n) les valeurs du signal de sortie pour n échantillons, alors un filtre FIR se défit par la combinaison linéaire :&lt;br /&gt;
[[Fichier:Equation_fir.PNG]]&lt;br /&gt;
&lt;br /&gt;
2) Algorithme d'adaptation LMS (Least MeanSqare)&lt;br /&gt;
&lt;br /&gt;
Nous allons utiliser un algorithme adaptatif de type LMS (Least MeanSqare). Cet algorithme est le plus utilisé dans le milieu de l’industrie en raison de sa simplicité. Cet algorithme est une approximation de l’algorithme du gradient déterministe. Le principe de cet algorithme est de trouver les coefficients optimums permettant de décrire le système à modéliser. Il commence par mettre tous les coefficients à zéro puis à chaque étape, calcule les nouveaux coefficients en fonction de l’erreur. Si l’erreur est nulle, alors les coefficients modélisent le système. Voici les équations de cet algorithme :&lt;br /&gt;
&lt;br /&gt;
y(n)=w^T (n)×x(n)&lt;br /&gt;
&lt;br /&gt;
e(n)=d(n)-y(n)&lt;br /&gt;
&lt;br /&gt;
w(n+1)=w(n)+ μ×x(n)×e(n)&lt;br /&gt;
&lt;br /&gt;
Avec : &lt;br /&gt;
&lt;br /&gt;
y : signal de sortie du filtre&lt;br /&gt;
&lt;br /&gt;
x : signal d’entrée du filtre&lt;br /&gt;
&lt;br /&gt;
w : les coefficients du filtre&lt;br /&gt;
&lt;br /&gt;
e : l’erreur récupérée&lt;br /&gt;
&lt;br /&gt;
d : le signal désiré&lt;br /&gt;
&lt;br /&gt;
µ : pas d’adaptation de l’algorithme&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Schema_adaptation_lms.PNG]]&lt;br /&gt;
&lt;br /&gt;
Cet algorithme est très efficace mais ne nous permet pas de modéliser correctement notre système&lt;br /&gt;
&lt;br /&gt;
3) Algorithme d'adaptation FX-LMS&lt;br /&gt;
&lt;br /&gt;
Reprenons notre système :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Schéma_canaux.PNG]]&lt;br /&gt;
&lt;br /&gt;
Sur ce schéma, on retrouve deux canaux de propagation du son. Or l'algorithme LMS ne prend en compte un seul canal de propagation. Nous allons donc utiliser l’algorithme FX-LMS.&lt;br /&gt;
L’introduction du nouveau canal dans notre algorithme peut être traitée de plusieurs manières. Dans notre cas, nous allons procéder en deux : une estimation du canal S puis une modélisation du canal P. &lt;br /&gt;
Cette méthode engendre une hypothèse :&lt;br /&gt;
Le canal S est considéré comme stable et ne change jamais&lt;br /&gt;
Du coup, on pourra modéliser le canal S avec un premier filtre FIR-LMS en mode identification de système puis on utilisera un filtre FIR-FX-LMS en mode modélisation inverse.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Schema_fx-lms1.PNG]]&lt;br /&gt;
&lt;br /&gt;
La partie verte correspond au domaine acoustique et la partie bleue correspond au domaine électronique, c’est le système que l’on va implanter dans notre FPGA. Le bloc Ŝ(z) correspond à notre canal de propagation S(z) estimé. L’ajout de ce bloc entraine donc une modification de l’équation de l’algorithme :&lt;br /&gt;
&lt;br /&gt;
d(n)=X(n)×P(z)&lt;br /&gt;
&lt;br /&gt;
e(n)=d(n)-S(z)×W(n)×X(n)&lt;br /&gt;
&lt;br /&gt;
W(n+1)=W(n)+ μ ×e(n)×X'(n)&lt;br /&gt;
&lt;br /&gt;
X'(n)= Ŝ(z)×X(n)&lt;br /&gt;
&lt;br /&gt;
Il va à présent nous falloir décrire ces équations dans notre FPGA.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Semaine 2 : du 18/01 au 24/01 ===&lt;br /&gt;
====Simulation du filtre sous Matlab====&lt;br /&gt;
&lt;br /&gt;
Pour simuler notre filtre, nous allons coder les équations de notre filtre dans Matlab en appliquant des signaux théoriques. Le code va se décomposer en deux parties : la première partie permettra de simuler notre filtre en virgule flottante, c’est-à-dire de garder une précisions maximales sur les chiffres puis la deuxième partie sera de simuler cette fois ci en virgule fixe, cela nous permet d’arrondir nos chiffres en fonction d’un nombre de bit prédéfini. La simulation en virgule fixe nous permet de simuler notre schéma électrique, cela dans le but de générer des fichiers de résultats que nous pourrons comparer avec notre code VHDL grâce à un transfert de fichier.&lt;br /&gt;
&lt;br /&gt;
1) Simulation en virgule flotante&lt;br /&gt;
&lt;br /&gt;
Pour simuler notre système, nous allons utiliser des signaux sinusoïdaux. Les canaux de propagation seront modéliser par des tableaux de coefficients générés aléatoirement par Matlab. Nous allons donc faire passer nos signaux d'entrés dans les canaux de propagation grâce à un produit de convolution puis ensuite nous allons utiliser notre algorithme pour modéliser notre système. Voici les résultats des Simulations :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Resultat_sim_virgule_flotante_1.PNG]]&lt;br /&gt;
&lt;br /&gt;
Sur le premier graphique, on retrouve le signal déformé par le canal en rouge et le signal multiplier par les coefficients modélisé en bleue. Sur le deuxième graphique, on retrouve l’erreur entre le signal modélisé et le signal déformé.&lt;br /&gt;
On remarque bien la convergence entre notre signal modélisé et notre signal réel ainsi que la valeur extrêmement faible de notre erreur.&lt;br /&gt;
Maintenant que la modélisation de notre canal S est validée, nous pouvons utiliser l’algorithme du FX-LMS, voici le résultat :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Resultat_sim_virgule_flotante_2.PNG]]&lt;br /&gt;
&lt;br /&gt;
Sur le premier graphique, le signal rouge correspond à notre signal déformé par le canal P et le signal bleu le signal envoyé à notre haut-parleur1. Sur le deuxième graphique, on retrouve notre erreur entre les deux signaux.&lt;br /&gt;
&lt;br /&gt;
2) Simulation en virgule flotante&lt;br /&gt;
&lt;br /&gt;
Le but de cette simulation est de se placer en situation réelle, c’est-à-dire de simuler le même comportement que ce qu’il va se passer dans notre FPGA. Pour cela, nous allons fixer chaque valeur sur 16 bits. Cela nous permet de traiter les valeurs avec la même précision que notre FPGA.&lt;br /&gt;
&lt;br /&gt;
De même que précédemment, voici les résultats de la modélisation du canal S :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Resultat_sim_virgule_fixe1.PNG]]&lt;br /&gt;
&lt;br /&gt;
Et le résultat de simulation de l'algorithme total :&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Resultat_sim_virgule_fixe2.PNG]]&lt;/div&gt;</summary>
		<author><name>Vpiat</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Fichier:Resultat_sim_virgule_fixe1.PNG&amp;diff=25428</id>
		<title>Fichier:Resultat sim virgule fixe1.PNG</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Fichier:Resultat_sim_virgule_fixe1.PNG&amp;diff=25428"/>
				<updated>2016-01-26T14:47:51Z</updated>
		
		<summary type="html">&lt;p&gt;Vpiat : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Vpiat</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Fichier:Resultat_sim_virgule_flotante_2.PNG&amp;diff=25427</id>
		<title>Fichier:Resultat sim virgule flotante 2.PNG</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Fichier:Resultat_sim_virgule_flotante_2.PNG&amp;diff=25427"/>
				<updated>2016-01-26T14:45:18Z</updated>
		
		<summary type="html">&lt;p&gt;Vpiat : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Vpiat</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Fichier:Resultat_sim_virgule_flotante_1.PNG&amp;diff=25426</id>
		<title>Fichier:Resultat sim virgule flotante 1.PNG</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Fichier:Resultat_sim_virgule_flotante_1.PNG&amp;diff=25426"/>
				<updated>2016-01-26T14:42:05Z</updated>
		
		<summary type="html">&lt;p&gt;Vpiat : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Vpiat</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Implantation_d%27un_filtre_FIR-FX-LMS_sur_FPGA_pour_l%27annulation_de_Bruit_Acoustique&amp;diff=25424</id>
		<title>Implantation d'un filtre FIR-FX-LMS sur FPGA pour l'annulation de Bruit Acoustique</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Implantation_d%27un_filtre_FIR-FX-LMS_sur_FPGA_pour_l%27annulation_de_Bruit_Acoustique&amp;diff=25424"/>
				<updated>2016-01-26T14:26:27Z</updated>
		
		<summary type="html">&lt;p&gt;Vpiat : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=='''Cahier des Charges'''==&lt;br /&gt;
===Présentation générale du projet===&lt;br /&gt;
&lt;br /&gt;
====Contexte====&lt;br /&gt;
Les problèmes de bruit acoustiques sont de plus en plus présents en industrie avec de plus en plus de moteurs, de transformateurs, de compresseurs, de ventilateur, etc… La plus part du temps, on utilise des moyens passifs pour réduire le bruit, comme des murs, des enclos, des silencieux… Ces systèmes passifs sont utilisés pour leur forte atténuation de bruit sur une large gamme de fréquence. Cependant, ils sont relativement imposants, coûteux et inefficace dans les basses fréquences.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
L'utilisation d'un filtre actif permet de résoudre ces problèmes. En effet, grâce au système de Contrôle Actif du bruit (Active Noise Control – ANC), on peut annuler les bruits primaires en superposant un signal inverse à ce bruit primaire. Ce signal inverse possède la même amplitude avec une opposition de phase. La conception d’un ANC est rapide et efficace, il suffit d’un micro pour recueillir le bruit primaire et d’un haut-parleur pour envoyer l’inverse de ce bruit. &lt;br /&gt;
&lt;br /&gt;
====Description du projet====&lt;br /&gt;
&lt;br /&gt;
On propose ici de réaliser un filtre actif (ANC) permettant d'annuler une source de bruit. Pour cela, nous utiliserons un filtre numérique de type FIR (Finite Impulse Response) avec une adaptation des coefficients par l'algorithme Filtered X Least Mean Square (FX-LMS). Ce filtre sera implémenté sur FPGA permettant de traiter les données en temps réel.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Objectif ====&lt;br /&gt;
&lt;br /&gt;
Notre objectif est d'annuler un bruit primaire envoyé par un Haut-parleur grâce à un second Haut parleur :&lt;br /&gt;
[[Fichier:Schéma_maquette.PNG]]&lt;br /&gt;
&lt;br /&gt;
Le Haut-parleur 2 envoi un bruit primaire qui sera déformé par le tube. Le Haut-parleur 1 devra donc envoyé l'inverse du son du Haut-parleur 2 déformé.&lt;br /&gt;
Le micro 2 permet de récupérer le bruit primaire et le micro 1 permet de récupéré le son déformé moins le son inverse, c'est à dire à notre erreur de notre filtre.&lt;br /&gt;
&lt;br /&gt;
== '''Etapes du Projet''' ==&lt;br /&gt;
&lt;br /&gt;
=== Choix techniques : matériel, logiciels, sources === &lt;br /&gt;
&lt;br /&gt;
== '''Tableau de bord''' ==&lt;br /&gt;
&lt;br /&gt;
===Semaine 1 : du 11/01 au 17/01 ===&lt;br /&gt;
====Etude théorique du filtre FIR avec adaptation par l'algorithme FX-LMS====&lt;br /&gt;
1) Le filtre FIR&lt;br /&gt;
&lt;br /&gt;
Un filtre FIR (Finite Impulse Response) est un filtre numérique qui est caractérisé par une réponse basée sur un nombre fini de valeurs du signal d’entrées. Un filtre FIR est décrit par une somme de coefficient multiplié par les valeurs d’entrées.&lt;br /&gt;
Si 〖x[i]〗_(1≤i≤n) représente les valeurs du signal d'entrée, bk les valeurs des coefficients et 〖y[i]〗_(1≤i≤n) les valeurs du signal de sortie pour n échantillons, alors un filtre FIR se défit par la combinaison linéaire :&lt;br /&gt;
[[Fichier:Equation_fir.PNG]]&lt;br /&gt;
&lt;br /&gt;
2) Algorithme d'adaptation LMS (Least MeanSqare)&lt;br /&gt;
&lt;br /&gt;
Nous allons utiliser un algorithme adaptatif de type LMS (Least MeanSqare). Cet algorithme est le plus utilisé dans le milieu de l’industrie en raison de sa simplicité. Cet algorithme est une approximation de l’algorithme du gradient déterministe. Le principe de cet algorithme est de trouver les coefficients optimums permettant de décrire le système à modéliser. Il commence par mettre tous les coefficients à zéro puis à chaque étape, calcule les nouveaux coefficients en fonction de l’erreur. Si l’erreur est nulle, alors les coefficients modélisent le système. Voici les équations de cet algorithme :&lt;br /&gt;
&lt;br /&gt;
y(n)=w^T (n)×x(n)&lt;br /&gt;
&lt;br /&gt;
e(n)=d(n)-y(n)&lt;br /&gt;
&lt;br /&gt;
w(n+1)=w(n)+ μ×x(n)×e(n)&lt;br /&gt;
&lt;br /&gt;
Avec : &lt;br /&gt;
&lt;br /&gt;
y : signal de sortie du filtre&lt;br /&gt;
&lt;br /&gt;
x : signal d’entrée du filtre&lt;br /&gt;
&lt;br /&gt;
w : les coefficients du filtre&lt;br /&gt;
&lt;br /&gt;
e : l’erreur récupérée&lt;br /&gt;
&lt;br /&gt;
d : le signal désiré&lt;br /&gt;
&lt;br /&gt;
µ : pas d’adaptation de l’algorithme&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Schema_adaptation_lms.PNG]]&lt;br /&gt;
&lt;br /&gt;
Cet algorithme est très efficace mais ne nous permet pas de modéliser correctement notre système&lt;br /&gt;
&lt;br /&gt;
3) Algorithme d'adaptation FX-LMS&lt;br /&gt;
&lt;br /&gt;
Reprenons notre système :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Schéma_canaux.PNG]]&lt;br /&gt;
&lt;br /&gt;
Sur ce schéma, on retrouve deux canaux de propagation du son. Or l'algorithme LMS ne prend en compte un seul canal de propagation. Nous allons donc utiliser l’algorithme FX-LMS.&lt;br /&gt;
L’introduction du nouveau canal dans notre algorithme peut être traitée de plusieurs manières. Dans notre cas, nous allons procéder en deux : une estimation du canal S puis une modélisation du canal P. &lt;br /&gt;
Cette méthode engendre une hypothèse :&lt;br /&gt;
Le canal S est considéré comme stable et ne change jamais&lt;br /&gt;
Du coup, on pourra modéliser le canal S avec un premier filtre FIR-LMS en mode identification de système puis on utilisera un filtre FIR-FX-LMS en mode modélisation inverse.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Schema_fx-lms1.PNG]]&lt;br /&gt;
&lt;br /&gt;
La partie verte correspond au domaine acoustique et la partie bleue correspond au domaine électronique, c’est le système que l’on va implanter dans notre FPGA. Le bloc Ŝ(z) correspond à notre canal de propagation S(z) estimé. L’ajout de ce bloc entraine donc une modification de l’équation de l’algorithme :&lt;br /&gt;
&lt;br /&gt;
d(n)=X(n)×P(z)&lt;br /&gt;
&lt;br /&gt;
e(n)=d(n)-S(z)×W(n)×X(n)&lt;br /&gt;
&lt;br /&gt;
W(n+1)=W(n)+ μ ×e(n)×X'(n)&lt;br /&gt;
&lt;br /&gt;
X'(n)= Ŝ(z)×X(n)&lt;br /&gt;
&lt;br /&gt;
Il va à présent nous falloir décrire ces équations dans notre FPGA.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Semaine 2 : du 18/01 au 24/01 ===&lt;br /&gt;
====Simulation du filtre sous Matlab====&lt;br /&gt;
&lt;br /&gt;
Pour simuler notre filtre, nous allons coder les équations de notre filtre dans Matlab en appliquant des signaux théoriques. Le code va se décomposer en deux parties : la première partie permettra de simuler notre filtre en virgule flottante, c’est-à-dire de garder une précisions maximales sur les chiffres puis la deuxième partie sera de simuler cette fois ci en virgule fixe, cela nous permet d’arrondir nos chiffres en fonction d’un nombre de bit prédéfini. La simulation en virgule fixe nous permet de simuler notre schéma électrique, cela dans le but de générer des fichiers de résultats que nous pourrons comparer avec notre code VHDL grâce à un transfert de fichier.&lt;br /&gt;
&lt;br /&gt;
1) Simulation en virgule flotante&lt;br /&gt;
&lt;br /&gt;
Pour simuler notre système, nous allons utiliser des signaux sinusoïdaux. Les canaux de propagation seront modéliser par des tableaux de coefficients générés aléatoirement par Matlab. Nous allons donc faire&lt;/div&gt;</summary>
		<author><name>Vpiat</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Implantation_d%27un_filtre_FIR-FX-LMS_sur_FPGA_pour_l%27annulation_de_Bruit_Acoustique&amp;diff=25420</id>
		<title>Implantation d'un filtre FIR-FX-LMS sur FPGA pour l'annulation de Bruit Acoustique</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Implantation_d%27un_filtre_FIR-FX-LMS_sur_FPGA_pour_l%27annulation_de_Bruit_Acoustique&amp;diff=25420"/>
				<updated>2016-01-26T14:10:35Z</updated>
		
		<summary type="html">&lt;p&gt;Vpiat : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=='''Cahier des Charges'''==&lt;br /&gt;
===Présentation générale du projet===&lt;br /&gt;
&lt;br /&gt;
====Contexte====&lt;br /&gt;
Les problèmes de bruit acoustiques sont de plus en plus présents en industrie avec de plus en plus de moteurs, de transformateurs, de compresseurs, de ventilateur, etc… La plus part du temps, on utilise des moyens passifs pour réduire le bruit, comme des murs, des enclos, des silencieux… Ces systèmes passifs sont utilisés pour leur forte atténuation de bruit sur une large gamme de fréquence. Cependant, ils sont relativement imposants, coûteux et inefficace dans les basses fréquences.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
L'utilisation d'un filtre actif permet de résoudre ces problèmes. En effet, grâce au système de Contrôle Actif du bruit (Active Noise Control – ANC), on peut annuler les bruits primaires en superposant un signal inverse à ce bruit primaire. Ce signal inverse possède la même amplitude avec une opposition de phase. La conception d’un ANC est rapide et efficace, il suffit d’un micro pour recueillir le bruit primaire et d’un haut-parleur pour envoyer l’inverse de ce bruit. &lt;br /&gt;
&lt;br /&gt;
====Description du projet====&lt;br /&gt;
&lt;br /&gt;
On propose ici de réaliser un filtre actif (ANC) permettant d'annuler une source de bruit. Pour cela, nous utiliserons un filtre numérique de type FIR (Finite Impulse Response) avec une adaptation des coefficients par l'algorithme Filtered X Least Mean Square (FX-LMS). Ce filtre sera implémenté sur FPGA permettant de traiter les données en temps réel.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Objectif ====&lt;br /&gt;
&lt;br /&gt;
Notre objectif est d'annuler un bruit primaire envoyé par un Haut-parleur grâce à un second Haut parleur :&lt;br /&gt;
[[Fichier:Schéma_maquette.PNG]]&lt;br /&gt;
&lt;br /&gt;
Le Haut-parleur 2 envoi un bruit primaire qui sera déformé par le tube. Le Haut-parleur 1 devra donc envoyé l'inverse du son du Haut-parleur 2 déformé.&lt;br /&gt;
Le micro 2 permet de récupérer le bruit primaire et le micro 1 permet de récupéré le son déformé moins le son inverse, c'est à dire à notre erreur de notre filtre.&lt;br /&gt;
&lt;br /&gt;
== '''Etapes du Projet''' ==&lt;br /&gt;
&lt;br /&gt;
=== Choix techniques : matériel, logiciels, sources === &lt;br /&gt;
&lt;br /&gt;
== '''Tableau de bord''' ==&lt;br /&gt;
&lt;br /&gt;
===Semaine 1 : du 18/01 au 24/01 ===&lt;br /&gt;
====Etude théorique du filtre FIR avec adaptation par l'algorithme FX-LMS====&lt;br /&gt;
1) Le filtre FIR&lt;br /&gt;
&lt;br /&gt;
Un filtre FIR (Finite Impulse Response) est un filtre numérique qui est caractérisé par une réponse basée sur un nombre fini de valeurs du signal d’entrées. Un filtre FIR est décrit par une somme de coefficient multiplié par les valeurs d’entrées.&lt;br /&gt;
Si 〖x[i]〗_(1≤i≤n) représente les valeurs du signal d'entrée, bk les valeurs des coefficients et 〖y[i]〗_(1≤i≤n) les valeurs du signal de sortie pour n échantillons, alors un filtre FIR se défit par la combinaison linéaire :&lt;br /&gt;
[[Fichier:Equation_fir.PNG]]&lt;br /&gt;
&lt;br /&gt;
2) Algorithme d'adaptation LMS (Least MeanSqare)&lt;br /&gt;
&lt;br /&gt;
Nous allons utiliser un algorithme adaptatif de type LMS (Least MeanSqare). Cet algorithme est le plus utilisé dans le milieu de l’industrie en raison de sa simplicité. Cet algorithme est une approximation de l’algorithme du gradient déterministe. Le principe de cet algorithme est de trouver les coefficients optimums permettant de décrire le système à modéliser. Il commence par mettre tous les coefficients à zéro puis à chaque étape, calcule les nouveaux coefficients en fonction de l’erreur. Si l’erreur est nulle, alors les coefficients modélisent le système. Voici les équations de cet algorithme :&lt;br /&gt;
&lt;br /&gt;
y(n)=w^T (n)×x(n)&lt;br /&gt;
&lt;br /&gt;
e(n)=d(n)-y(n)&lt;br /&gt;
&lt;br /&gt;
w(n+1)=w(n)+ μ×x(n)×e(n)&lt;br /&gt;
&lt;br /&gt;
Avec : &lt;br /&gt;
&lt;br /&gt;
y : signal de sortie du filtre&lt;br /&gt;
&lt;br /&gt;
x : signal d’entrée du filtre&lt;br /&gt;
&lt;br /&gt;
w : les coefficients du filtre&lt;br /&gt;
&lt;br /&gt;
e : l’erreur récupérée&lt;br /&gt;
&lt;br /&gt;
d : le signal désiré&lt;br /&gt;
&lt;br /&gt;
µ : pas d’adaptation de l’algorithme&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Schema_adaptation_lms.PNG]]&lt;br /&gt;
&lt;br /&gt;
Cet algorithme est très efficace mais ne nous permet pas de modéliser correctement notre système&lt;br /&gt;
&lt;br /&gt;
3) Algorithme d'adaptation FX-LMS&lt;br /&gt;
&lt;br /&gt;
Reprenons notre système :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Schéma_canaux.PNG]]&lt;br /&gt;
&lt;br /&gt;
Sur ce schéma, on retrouve deux canaux de propagation du son. Or l'algorithme LMS ne prend en compte un seul canal de propagation. Nous allons donc utiliser l’algorithme FX-LMS.&lt;br /&gt;
L’introduction du nouveau canal dans notre algorithme peut être traitée de plusieurs manières. Dans notre cas, nous allons procéder en deux : une estimation du canal S puis une modélisation du canal P. &lt;br /&gt;
Cette méthode engendre une hypothèse :&lt;br /&gt;
Le canal S est considéré comme stable et ne change jamais&lt;br /&gt;
Du coup, on pourra modéliser le canal S avec un premier filtre FIR-LMS en mode identification de système puis on utilisera un filtre FIR-FX-LMS en mode modélisation inverse.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Schema_fx-lms1.PNG]]&lt;br /&gt;
&lt;br /&gt;
La partie verte correspond au domaine acoustique et la partie bleue correspond au domaine électronique, c’est le système que l’on va implanter dans notre FPGA. Le bloc Ŝ(z) correspond à notre canal de propagation S(z) estimé. L’ajout de ce bloc entraine donc une modification de l’équation de l’algorithme :&lt;br /&gt;
&lt;br /&gt;
d(n)=X(n)×P(z)&lt;br /&gt;
&lt;br /&gt;
e(n)=d(n)-S(z)×W(n)×X(n)&lt;br /&gt;
&lt;br /&gt;
W(n+1)=W(n)+ μ ×e(n)×X'(n)&lt;br /&gt;
&lt;br /&gt;
X'(n)= Ŝ(z)×X(n)&lt;br /&gt;
&lt;br /&gt;
Il va à présent nous falloir décrire ces équations dans notre FPGA.&lt;/div&gt;</summary>
		<author><name>Vpiat</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Implantation_d%27un_filtre_FIR-FX-LMS_sur_FPGA_pour_l%27annulation_de_Bruit_Acoustique&amp;diff=25418</id>
		<title>Implantation d'un filtre FIR-FX-LMS sur FPGA pour l'annulation de Bruit Acoustique</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Implantation_d%27un_filtre_FIR-FX-LMS_sur_FPGA_pour_l%27annulation_de_Bruit_Acoustique&amp;diff=25418"/>
				<updated>2016-01-26T14:05:52Z</updated>
		
		<summary type="html">&lt;p&gt;Vpiat : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Cahier des Charges==&lt;br /&gt;
===Présentation générale du projet===&lt;br /&gt;
&lt;br /&gt;
====Contexte====&lt;br /&gt;
Les problèmes de bruit acoustiques sont de plus en plus présents en industrie avec de plus en plus de moteurs, de transformateurs, de compresseurs, de ventilateur, etc… La plus part du temps, on utilise des moyens passifs pour réduire le bruit, comme des murs, des enclos, des silencieux… Ces systèmes passifs sont utilisés pour leur forte atténuation de bruit sur une large gamme de fréquence. Cependant, ils sont relativement imposants, coûteux et inefficace dans les basses fréquences.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
L'utilisation d'un filtre actif permet de résoudre ces problèmes. En effet, grâce au système de Contrôle Actif du bruit (Active Noise Control – ANC), on peut annuler les bruits primaires en superposant un signal inverse à ce bruit primaire. Ce signal inverse possède la même amplitude avec une opposition de phase. La conception d’un ANC est rapide et efficace, il suffit d’un micro pour recueillir le bruit primaire et d’un haut-parleur pour envoyer l’inverse de ce bruit. &lt;br /&gt;
&lt;br /&gt;
====Description du projet====&lt;br /&gt;
&lt;br /&gt;
On propose ici de réaliser un filtre actif (ANC) permettant d'annuler une source de bruit. Pour cela, nous utiliserons un filtre numérique de type FIR (Finite Impulse Response) avec une adaptation des coefficients par l'algorithme Filtered X Least Mean Square (FX-LMS). Ce filtre sera implémenté sur FPGA permettant de traiter les données en temps réel.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Objectif ====&lt;br /&gt;
&lt;br /&gt;
Notre objectif est d'annuler un bruit primaire envoyé par un Haut-parleur grâce à un second Haut parleur :&lt;br /&gt;
[[Fichier:Schéma_maquette.PNG]]&lt;br /&gt;
&lt;br /&gt;
Le Haut-parleur 2 envoi un bruit primaire qui sera déformé par le tube. Le Haut-parleur 1 devra donc envoyé l'inverse du son du Haut-parleur 2 déformé.&lt;br /&gt;
Le micro 2 permet de récupérer le bruit primaire et le micro 1 permet de récupéré le son déformé moins le son inverse, c'est à dire à notre erreur de notre filtre.&lt;br /&gt;
&lt;br /&gt;
== '''Etapes du Projet''' ==&lt;br /&gt;
&lt;br /&gt;
=== Choix techniques : matériel, logiciels, sources === &lt;br /&gt;
&lt;br /&gt;
== '''Tableau de bord''' ==&lt;br /&gt;
&lt;br /&gt;
===Semaine 1 : du 18/01 au 24/01 ===&lt;br /&gt;
====Etude théorique du filtre FIR avec adaptation par l'algorithme FX-LMS====&lt;br /&gt;
1) Le filtre FIR&lt;br /&gt;
&lt;br /&gt;
Un filtre FIR (Finite Impulse Response) est un filtre numérique qui est caractérisé par une réponse basée sur un nombre fini de valeurs du signal d’entrées. Un filtre FIR est décrit par une somme de coefficient multiplié par les valeurs d’entrées.&lt;br /&gt;
Si 〖x[i]〗_(1≤i≤n) représente les valeurs du signal d'entrée, bk les valeurs des coefficients et 〖y[i]〗_(1≤i≤n) les valeurs du signal de sortie pour n échantillons, alors un filtre FIR se défit par la combinaison linéaire :&lt;br /&gt;
[[Fichier:Equation_fir.PNG]]&lt;br /&gt;
&lt;br /&gt;
2) Algorithme d'adaptation LMS (Least MeanSqare)&lt;br /&gt;
&lt;br /&gt;
Nous allons utiliser un algorithme adaptatif de type LMS (Least MeanSqare). Cet algorithme est le plus utilisé dans le milieu de l’industrie en raison de sa simplicité. Cet algorithme est une approximation de l’algorithme du gradient déterministe. Le principe de cet algorithme est de trouver les coefficients optimums permettant de décrire le système à modéliser. Il commence par mettre tous les coefficients à zéro puis à chaque étape, calcule les nouveaux coefficients en fonction de l’erreur. Si l’erreur est nulle, alors les coefficients modélisent le système. Voici les équations de cet algorithme :&lt;br /&gt;
&lt;br /&gt;
y(n)=w^T (n)×x(n)&lt;br /&gt;
&lt;br /&gt;
e(n)=d(n)-y(n)&lt;br /&gt;
&lt;br /&gt;
w(n+1)=w(n)+ μ×x(n)×e(n)&lt;br /&gt;
&lt;br /&gt;
Avec : &lt;br /&gt;
&lt;br /&gt;
y : signal de sortie du filtre&lt;br /&gt;
&lt;br /&gt;
x : signal d’entrée du filtre&lt;br /&gt;
&lt;br /&gt;
w : les coefficients du filtre&lt;br /&gt;
&lt;br /&gt;
e : l’erreur récupérée&lt;br /&gt;
&lt;br /&gt;
d : le signal désiré&lt;br /&gt;
&lt;br /&gt;
µ : pas d’adaptation de l’algorithme&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Schema_adaptation_lms.PNG]]&lt;br /&gt;
&lt;br /&gt;
Cet algorithme est très efficace mais ne nous permet pas de modéliser correctement notre système&lt;br /&gt;
&lt;br /&gt;
3) Algorithme d'adaptation FX-LMS&lt;br /&gt;
&lt;br /&gt;
Reprenons notre système :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Schéma_canaux.PNG]]&lt;br /&gt;
&lt;br /&gt;
Sur ce schéma, on retrouve deux canaux de propagation du son. Or l'algorithme LMS ne prend en compte un seul canal de propagation. Nous allons donc utiliser l’algorithme FX-LMS.&lt;br /&gt;
L’introduction du nouveau canal dans notre algorithme peut être traitée de plusieurs manières. Dans notre cas, nous allons procéder en deux : une estimation du canal S puis une modélisation du canal P. &lt;br /&gt;
Cette méthode engendre une hypothèse :&lt;br /&gt;
Le canal S est considéré comme stable et ne change jamais&lt;br /&gt;
Du coup, on pourra modéliser le canal S avec un premier filtre FIR-LMS en mode identification de système puis on utilisera un filtre FIR-FX-LMS en mode modélisation inverse.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Schema_fx-lms1.PNG]]&lt;br /&gt;
&lt;br /&gt;
La partie verte correspond au domaine acoustique et la partie bleue correspond au domaine électronique, c’est le système que l’on va implanter dans notre FPGA. Le bloc Ŝ(z) correspond à notre canal de propagation S(z) estimé. L’ajout de ce bloc entraine donc une modification de l’équation de l’algorithme :&lt;br /&gt;
&lt;br /&gt;
d(n)=X(n)*P(z)&lt;br /&gt;
&lt;br /&gt;
e(n)=d(n)-S(z)*W(n)*X(n)&lt;br /&gt;
&lt;br /&gt;
W(n+1)=W(n)+ μ ×e(n)×X'(n)&lt;br /&gt;
&lt;br /&gt;
X'(n)= Ŝ(z)*X(n)&lt;br /&gt;
&lt;br /&gt;
Il va à présent nous falloir décrire ces équations dans notre FPGA.&lt;/div&gt;</summary>
		<author><name>Vpiat</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Implantation_d%27un_filtre_FIR-FX-LMS_sur_FPGA_pour_l%27annulation_de_Bruit_Acoustique&amp;diff=25417</id>
		<title>Implantation d'un filtre FIR-FX-LMS sur FPGA pour l'annulation de Bruit Acoustique</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Implantation_d%27un_filtre_FIR-FX-LMS_sur_FPGA_pour_l%27annulation_de_Bruit_Acoustique&amp;diff=25417"/>
				<updated>2016-01-26T14:04:17Z</updated>
		
		<summary type="html">&lt;p&gt;Vpiat : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Cahier des Charges==&lt;br /&gt;
===Présentation générale du projet===&lt;br /&gt;
&lt;br /&gt;
====Contexte====&lt;br /&gt;
Les problèmes de bruit acoustiques sont de plus en plus présents en industrie avec de plus en plus de moteurs, de transformateurs, de compresseurs, de ventilateur, etc… La plus part du temps, on utilise des moyens passifs pour réduire le bruit, comme des murs, des enclos, des silencieux… Ces systèmes passifs sont utilisés pour leur forte atténuation de bruit sur une large gamme de fréquence. Cependant, ils sont relativement imposants, coûteux et inefficace dans les basses fréquences.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
L'utilisation d'un filtre actif permet de résoudre ces problèmes. En effet, grâce au système de Contrôle Actif du bruit (Active Noise Control – ANC), on peut annuler les bruits primaires en superposant un signal inverse à ce bruit primaire. Ce signal inverse possède la même amplitude avec une opposition de phase. La conception d’un ANC est rapide et efficace, il suffit d’un micro pour recueillir le bruit primaire et d’un haut-parleur pour envoyer l’inverse de ce bruit. &lt;br /&gt;
&lt;br /&gt;
====Description du projet====&lt;br /&gt;
&lt;br /&gt;
On propose ici de réaliser un filtre actif (ANC) permettant d'annuler une source de bruit. Pour cela, nous utiliserons un filtre numérique de type FIR (Finite Impulse Response) avec une adaptation des coefficients par l'algorithme Filtered X Least Mean Square (FX-LMS). Ce filtre sera implémenté sur FPGA permettant de traiter les données en temps réel.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Objectif ====&lt;br /&gt;
&lt;br /&gt;
Notre objectif est d'annuler un bruit primaire envoyé par un Haut-parleur grâce à un second Haut parleur :&lt;br /&gt;
[[Fichier:Schéma_maquette.PNG]]&lt;br /&gt;
&lt;br /&gt;
Le Haut-parleur 2 envoi un bruit primaire qui sera déformé par le tube. Le Haut-parleur 1 devra donc envoyé l'inverse du son du Haut-parleur 2 déformé.&lt;br /&gt;
Le micro 2 permet de récupérer le bruit primaire et le micro 1 permet de récupéré le son déformé moins le son inverse, c'est à dire à notre erreur de notre filtre.&lt;br /&gt;
&lt;br /&gt;
== '''Etapes du Projet''' ==&lt;br /&gt;
&lt;br /&gt;
=== Choix techniques : matériel, logiciels, sources === &lt;br /&gt;
&lt;br /&gt;
== '''Tableau de bord''' ==&lt;br /&gt;
&lt;br /&gt;
===Semaine 1 : du 18/01 au 24/01 ===&lt;br /&gt;
====Etude théorique du filtre FIR avec adaptation par l'algorithme FX-LMS====&lt;br /&gt;
1) Le filtre FIR&lt;br /&gt;
&lt;br /&gt;
Un filtre FIR (Finite Impulse Response) est un filtre numérique qui est caractérisé par une réponse basée sur un nombre fini de valeurs du signal d’entrées. Un filtre FIR est décrit par une somme de coefficient multiplié par les valeurs d’entrées.&lt;br /&gt;
Si 〖x[i]〗_(1≤i≤n) représente les valeurs du signal d'entrée, bk les valeurs des coefficients et 〖y[i]〗_(1≤i≤n) les valeurs du signal de sortie pour n échantillons, alors un filtre FIR se défit par la combinaison linéaire :&lt;br /&gt;
[[Fichier:Equation_fir.PNG]]&lt;br /&gt;
&lt;br /&gt;
2) Algorithme d'adaptation LMS (Least MeanSqare)&lt;br /&gt;
&lt;br /&gt;
Nous allons utiliser un algorithme adaptatif de type LMS (Least MeanSqare). Cet algorithme est le plus utilisé dans le milieu de l’industrie en raison de sa simplicité. Cet algorithme est une approximation de l’algorithme du gradient déterministe. Le principe de cet algorithme est de trouver les coefficients optimums permettant de décrire le système à modéliser. Il commence par mettre tous les coefficients à zéro puis à chaque étape, calcule les nouveaux coefficients en fonction de l’erreur. Si l’erreur est nulle, alors les coefficients modélisent le système. Voici les équations de cet algorithme :&lt;br /&gt;
y(n)=w^T (n)  ×x(n)&lt;br /&gt;
e(n)=d(n)-y(n)&lt;br /&gt;
w(n+1)=w(n)+ μ×x(n)×e(n)&lt;br /&gt;
Avec : &lt;br /&gt;
y : signal de sortie du filtre&lt;br /&gt;
x : signal d’entrée du filtre&lt;br /&gt;
w : les coefficients du filtre&lt;br /&gt;
e : l’erreur récupérée&lt;br /&gt;
d : le signal désiré&lt;br /&gt;
µ : pas d’adaptation de l’algorithme&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Schema_adaptation_lms.PNG]]&lt;br /&gt;
&lt;br /&gt;
Cet algorithme est très efficace mais ne nous permet pas de modéliser correctement notre système&lt;br /&gt;
&lt;br /&gt;
3) Algorithme d'adaptation FX-LMS&lt;br /&gt;
&lt;br /&gt;
Reprenons notre système :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Schéma_canaux.PNG]]&lt;br /&gt;
&lt;br /&gt;
Sur ce schéma, on retrouve deux canaux de propagation du son. Or l'algorithme LMS ne prend en compte un seul canal de propagation. Nous allons donc utiliser l’algorithme FX-LMS.&lt;br /&gt;
L’introduction du nouveau canal dans notre algorithme peut être traitée de plusieurs manières. Dans notre cas, nous allons procéder en deux : une estimation du canal S puis une modélisation du canal P. &lt;br /&gt;
Cette méthode engendre une hypothèse :&lt;br /&gt;
Le canal S est considéré comme stable et ne change jamais&lt;br /&gt;
Du coup, on pourra modéliser le canal S avec un premier filtre FIR-LMS en mode identification de système puis on utilisera un filtre FIR-FX-LMS en mode modélisation inverse.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Schema_fx-lms1.PNG]]&lt;br /&gt;
&lt;br /&gt;
La partie verte correspond au domaine acoustique et la partie bleue correspond au domaine électronique, c’est le système que l’on va implanter dans notre FPGA. Le bloc Ŝ(z) correspond à notre canal de propagation S(z) estimé. L’ajout de ce bloc entraine donc une modification de l’équation de l’algorithme :&lt;br /&gt;
&lt;br /&gt;
d(n)=X(n)*P(z)&lt;br /&gt;
e(n)=d(n)-S(z)*W(n)*X(n)&lt;br /&gt;
W(n+1)=W(n)+ μ ×e(n)×X^' (n)&lt;br /&gt;
X^' (n)= Ŝ(z)*X(n)&lt;/div&gt;</summary>
		<author><name>Vpiat</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Fichier:Schema_fx-lms1.PNG&amp;diff=25416</id>
		<title>Fichier:Schema fx-lms1.PNG</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Fichier:Schema_fx-lms1.PNG&amp;diff=25416"/>
				<updated>2016-01-26T14:02:13Z</updated>
		
		<summary type="html">&lt;p&gt;Vpiat : a téléversé une nouvelle version de « Fichier:Schema fx-lms1.PNG »&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Vpiat</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Implantation_d%27un_filtre_FIR-FX-LMS_sur_FPGA_pour_l%27annulation_de_Bruit_Acoustique&amp;diff=25415</id>
		<title>Implantation d'un filtre FIR-FX-LMS sur FPGA pour l'annulation de Bruit Acoustique</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Implantation_d%27un_filtre_FIR-FX-LMS_sur_FPGA_pour_l%27annulation_de_Bruit_Acoustique&amp;diff=25415"/>
				<updated>2016-01-26T13:52:02Z</updated>
		
		<summary type="html">&lt;p&gt;Vpiat : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Cahier des Charges==&lt;br /&gt;
===Présentation générale du projet===&lt;br /&gt;
&lt;br /&gt;
====Contexte====&lt;br /&gt;
Les problèmes de bruit acoustiques sont de plus en plus présents en industrie avec de plus en plus de moteurs, de transformateurs, de compresseurs, de ventilateur, etc… La plus part du temps, on utilise des moyens passifs pour réduire le bruit, comme des murs, des enclos, des silencieux… Ces systèmes passifs sont utilisés pour leur forte atténuation de bruit sur une large gamme de fréquence. Cependant, ils sont relativement imposants, coûteux et inefficace dans les basses fréquences.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
L'utilisation d'un filtre actif permet de résoudre ces problèmes. En effet, grâce au système de Contrôle Actif du bruit (Active Noise Control – ANC), on peut annuler les bruits primaires en superposant un signal inverse à ce bruit primaire. Ce signal inverse possède la même amplitude avec une opposition de phase. La conception d’un ANC est rapide et efficace, il suffit d’un micro pour recueillir le bruit primaire et d’un haut-parleur pour envoyer l’inverse de ce bruit. &lt;br /&gt;
&lt;br /&gt;
====Description du projet====&lt;br /&gt;
&lt;br /&gt;
On propose ici de réaliser un filtre actif (ANC) permettant d'annuler une source de bruit. Pour cela, nous utiliserons un filtre numérique de type FIR (Finite Impulse Response) avec une adaptation des coefficients par l'algorithme Filtered X Least Mean Square (FX-LMS). Ce filtre sera implémenté sur FPGA permettant de traiter les données en temps réel.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Objectif ====&lt;br /&gt;
&lt;br /&gt;
Notre objectif est d'annuler un bruit primaire envoyé par un Haut-parleur grâce à un second Haut parleur :&lt;br /&gt;
[[Fichier:Schéma_maquette.PNG]]&lt;br /&gt;
&lt;br /&gt;
Le Haut-parleur 2 envoi un bruit primaire qui sera déformé par le tube. Le Haut-parleur 1 devra donc envoyé l'inverse du son du Haut-parleur 2 déformé.&lt;br /&gt;
Le micro 2 permet de récupérer le bruit primaire et le micro 1 permet de récupéré le son déformé moins le son inverse, c'est à dire à notre erreur de notre filtre.&lt;br /&gt;
&lt;br /&gt;
== '''Etapes du Projet''' ==&lt;br /&gt;
&lt;br /&gt;
=== Choix techniques : matériel, logiciels, sources === &lt;br /&gt;
&lt;br /&gt;
== '''Tableau de bord''' ==&lt;br /&gt;
&lt;br /&gt;
===Semaine 1 : du 18/01 au 24/01 ===&lt;br /&gt;
====Etude théorique du filtre FIR avec adaptation par l'algorithme FX-LMS====&lt;br /&gt;
1) Le filtre FIR&lt;br /&gt;
&lt;br /&gt;
Un filtre FIR (Finite Impulse Response) est un filtre numérique qui est caractérisé par une réponse basée sur un nombre fini de valeurs du signal d’entrées. Un filtre FIR est décrit par une somme de coefficient multiplié par les valeurs d’entrées.&lt;br /&gt;
Si 〖x[i]〗_(1≤i≤n) représente les valeurs du signal d'entrée, bk les valeurs des coefficients et 〖y[i]〗_(1≤i≤n) les valeurs du signal de sortie pour n échantillons, alors un filtre FIR se défit par la combinaison linéaire :&lt;br /&gt;
[[Fichier:Equation_fir.PNG]]&lt;br /&gt;
&lt;br /&gt;
2) Algorithme d'adaptation LMS (Least MeanSqare)&lt;br /&gt;
&lt;br /&gt;
Nous allons utiliser un algorithme adaptatif de type LMS (Least MeanSqare). Cet algorithme est le plus utilisé dans le milieu de l’industrie en raison de sa simplicité. Cet algorithme est une approximation de l’algorithme du gradient déterministe. Le principe de cet algorithme est de trouver les coefficients optimums permettant de décrire le système à modéliser. Il commence par mettre tous les coefficients à zéro puis à chaque étape, calcule les nouveaux coefficients en fonction de l’erreur. Si l’erreur est nulle, alors les coefficients modélisent le système. Voici les équations de cet algorithme :&lt;br /&gt;
y(n)=w^T (n)  ×x(n)&lt;br /&gt;
e(n)=d(n)-y(n)&lt;br /&gt;
w(n+1)=w(n)+ μ×x(n)×e(n)&lt;br /&gt;
Avec : &lt;br /&gt;
	y : signal de sortie du filtre&lt;br /&gt;
	x : signal d’entrée du filtre&lt;br /&gt;
	w : les coefficients du filtre&lt;br /&gt;
	e : l’erreur récupérée&lt;br /&gt;
	d : le signal désiré&lt;br /&gt;
        µ : pas d’adaptation de l’algorithme&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Schema_adaptation_lms.PNG]]&lt;br /&gt;
&lt;br /&gt;
Cet algorithme est très efficace mais ne nous permet pas de modéliser correctement notre système&lt;br /&gt;
&lt;br /&gt;
3) Algorithme d'adaptation FX-LMS&lt;br /&gt;
&lt;br /&gt;
Reprenons notre système :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Schéma_canaux.PNG]]&lt;br /&gt;
&lt;br /&gt;
Sur ce schéma, on retrouve deux canaux de propagation du son. Or l'algorithme LMS ne prend en compte un seul canal de propagation. Nous allons donc utiliser l’algorithme FX-LMS.&lt;br /&gt;
L’introduction du nouveau canal dans notre algorithme peut être traitée de plusieurs manières. Dans notre cas, nous allons procéder en deux : une estimation du canal S puis une modélisation du canal P. &lt;br /&gt;
Cette méthode engendre une hypothèse :&lt;br /&gt;
Le canal S est considéré comme stable et ne change jamais&lt;br /&gt;
Du coup, on pourra modéliser le canal S avec un premier filtre FIR-LMS en mode identification de système puis on utilisera un filtre FIR-FX-LMS en mode modélisation inverse.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Schema_fx-lms1.PNG]]&lt;/div&gt;</summary>
		<author><name>Vpiat</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Fichier:Schema_fx-lms1.PNG&amp;diff=25414</id>
		<title>Fichier:Schema fx-lms1.PNG</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Fichier:Schema_fx-lms1.PNG&amp;diff=25414"/>
				<updated>2016-01-26T13:51:40Z</updated>
		
		<summary type="html">&lt;p&gt;Vpiat : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Vpiat</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Fichier:Sch%C3%A9ma_canaux.PNG&amp;diff=25413</id>
		<title>Fichier:Schéma canaux.PNG</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Fichier:Sch%C3%A9ma_canaux.PNG&amp;diff=25413"/>
				<updated>2016-01-26T13:48:23Z</updated>
		
		<summary type="html">&lt;p&gt;Vpiat : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Vpiat</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Fichier:Schema_adaptation_lms.PNG&amp;diff=25412</id>
		<title>Fichier:Schema adaptation lms.PNG</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Fichier:Schema_adaptation_lms.PNG&amp;diff=25412"/>
				<updated>2016-01-26T13:44:53Z</updated>
		
		<summary type="html">&lt;p&gt;Vpiat : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Vpiat</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Implantation_d%27un_filtre_FIR-FX-LMS_sur_FPGA_pour_l%27annulation_de_Bruit_Acoustique&amp;diff=25411</id>
		<title>Implantation d'un filtre FIR-FX-LMS sur FPGA pour l'annulation de Bruit Acoustique</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Implantation_d%27un_filtre_FIR-FX-LMS_sur_FPGA_pour_l%27annulation_de_Bruit_Acoustique&amp;diff=25411"/>
				<updated>2016-01-26T13:40:47Z</updated>
		
		<summary type="html">&lt;p&gt;Vpiat : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Cahier des Charges==&lt;br /&gt;
===Présentation générale du projet===&lt;br /&gt;
&lt;br /&gt;
====Contexte====&lt;br /&gt;
Les problèmes de bruit acoustiques sont de plus en plus présents en industrie avec de plus en plus de moteurs, de transformateurs, de compresseurs, de ventilateur, etc… La plus part du temps, on utilise des moyens passifs pour réduire le bruit, comme des murs, des enclos, des silencieux… Ces systèmes passifs sont utilisés pour leur forte atténuation de bruit sur une large gamme de fréquence. Cependant, ils sont relativement imposants, coûteux et inefficace dans les basses fréquences.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
L'utilisation d'un filtre actif permet de résoudre ces problèmes. En effet, grâce au système de Contrôle Actif du bruit (Active Noise Control – ANC), on peut annuler les bruits primaires en superposant un signal inverse à ce bruit primaire. Ce signal inverse possède la même amplitude avec une opposition de phase. La conception d’un ANC est rapide et efficace, il suffit d’un micro pour recueillir le bruit primaire et d’un haut-parleur pour envoyer l’inverse de ce bruit. &lt;br /&gt;
&lt;br /&gt;
====Description du projet====&lt;br /&gt;
&lt;br /&gt;
On propose ici de réaliser un filtre actif (ANC) permettant d'annuler une source de bruit. Pour cela, nous utiliserons un filtre numérique de type FIR (Finite Impulse Response) avec une adaptation des coefficients par l'algorithme Filtered X Least Mean Square (FX-LMS). Ce filtre sera implémenté sur FPGA permettant de traiter les données en temps réel.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Objectif ====&lt;br /&gt;
&lt;br /&gt;
Notre objectif est d'annuler un bruit primaire envoyé par un Haut-parleur grâce à un second Haut parleur :&lt;br /&gt;
[[Fichier:Schéma_maquette.PNG]]&lt;br /&gt;
&lt;br /&gt;
Le Haut-parleur 2 envoi un bruit primaire qui sera déformé par le tube. Le Haut-parleur 1 devra donc envoyé l'inverse du son du Haut-parleur 2 déformé.&lt;br /&gt;
Le micro 2 permet de récupérer le bruit primaire et le micro 1 permet de récupéré le son déformé moins le son inverse, c'est à dire à notre erreur de notre filtre.&lt;br /&gt;
&lt;br /&gt;
== '''Etapes du Projet''' ==&lt;br /&gt;
&lt;br /&gt;
=== Choix techniques : matériel, logiciels, sources === &lt;br /&gt;
&lt;br /&gt;
== '''Tableau de bord''' ==&lt;br /&gt;
&lt;br /&gt;
===Semaine 1 : du 18/01 au 24/01 ===&lt;br /&gt;
====Etude théorique du filtre FIR avec adaptation par l'algorithme FX-LMS====&lt;br /&gt;
1) Le filtre FIR&lt;br /&gt;
Un filtre FIR (Finite Impulse Response) est un filtre numérique qui est caractérisé par une réponse basée sur un nombre fini de valeurs du signal d’entrées. Un filtre FIR est décrit par une somme de coefficient multiplié par les valeurs d’entrées.&lt;br /&gt;
Si 〖x[i]〗_(1≤i≤n) représente les valeurs du signal d'entrée, bk les valeurs des coefficients et 〖y[i]〗_(1≤i≤n) les valeurs du signal de sortie pour n échantillons, alors un filtre FIR se défit par la combinaison linéaire :&lt;br /&gt;
[[Fichier:Equation_fir.PNG]]&lt;/div&gt;</summary>
		<author><name>Vpiat</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Fichier:Equation_fir.PNG&amp;diff=25410</id>
		<title>Fichier:Equation fir.PNG</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Fichier:Equation_fir.PNG&amp;diff=25410"/>
				<updated>2016-01-26T13:40:29Z</updated>
		
		<summary type="html">&lt;p&gt;Vpiat : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Vpiat</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Implantation_d%27un_filtre_FIR-FX-LMS_sur_FPGA_pour_l%27annulation_de_Bruit_Acoustique&amp;diff=24654</id>
		<title>Implantation d'un filtre FIR-FX-LMS sur FPGA pour l'annulation de Bruit Acoustique</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Implantation_d%27un_filtre_FIR-FX-LMS_sur_FPGA_pour_l%27annulation_de_Bruit_Acoustique&amp;diff=24654"/>
				<updated>2016-01-06T03:11:44Z</updated>
		
		<summary type="html">&lt;p&gt;Vpiat : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Cahier des Charges==&lt;br /&gt;
===Présentation générale du projet===&lt;br /&gt;
&lt;br /&gt;
====Contexte====&lt;br /&gt;
Les problèmes de bruit acoustiques sont de plus en plus présents en industrie avec de plus en plus de moteurs, de transformateurs, de compresseurs, de ventilateur, etc… La plus part du temps, on utilise des moyens passifs pour réduire le bruit, comme des murs, des enclos, des silencieux… Ces systèmes passifs sont utilisés pour leur forte atténuation de bruit sur une large gamme de fréquence. Cependant, ils sont relativement imposants, coûteux et inefficace dans les basses fréquences.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
L'utilisation d'un filtre actif permet de résoudre ces problèmes. En effet, grâce au système de Contrôle Actif du bruit (Active Noise Control – ANC), on peut annuler les bruits primaires en superposant un signal inverse à ce bruit primaire. Ce signal inverse possède la même amplitude avec une opposition de phase. La conception d’un ANC est rapide et efficace, il suffit d’un micro pour recueillir le bruit primaire et d’un haut-parleur pour envoyer l’inverse de ce bruit. &lt;br /&gt;
&lt;br /&gt;
====Description du projet====&lt;br /&gt;
&lt;br /&gt;
On propose ici de réaliser un filtre actif (ANC) permettant d'annuler une source de bruit. Pour cela, nous utiliserons un filtre numérique de type FIR (Finite Impulse Response) avec une adaptation des coefficients par l'algorithme Filtered X Least Mean Square (FX-LMS). Ce filtre sera implémenté sur FPGA permettant de traiter les données en temps réel.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Objectif ====&lt;br /&gt;
&lt;br /&gt;
Notre objectif est d'annuler un bruit primaire envoyé par un Haut-parleur grâce à un second Haut parleur :&lt;br /&gt;
[[Fichier:Schéma_maquette.PNG]]&lt;br /&gt;
&lt;br /&gt;
Le Haut-parleur 2 envoi un bruit primaire qui sera déformé par le tube. Le Haut-parleur 1 devra donc envoyé l'inverse du son du Haut-parleur 2 déformé.&lt;br /&gt;
Le micro 2 permet de récupérer le bruit primaire et le micro 1 permet de récupéré le son déformé moins le son inverse, c'est à dire à notre erreur de notre filtre.&lt;br /&gt;
&lt;br /&gt;
== '''Etapes du Projet''' ==&lt;br /&gt;
&lt;br /&gt;
=== Choix techniques : matériel, logiciels, sources === &lt;br /&gt;
&lt;br /&gt;
== '''Tableau de bord''' ==&lt;br /&gt;
&lt;br /&gt;
===Semaine 1===&lt;/div&gt;</summary>
		<author><name>Vpiat</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Fichier:Sch%C3%A9ma_maquette.PNG&amp;diff=24653</id>
		<title>Fichier:Schéma maquette.PNG</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Fichier:Sch%C3%A9ma_maquette.PNG&amp;diff=24653"/>
				<updated>2016-01-06T03:08:25Z</updated>
		
		<summary type="html">&lt;p&gt;Vpiat : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Vpiat</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Implantation_d%27un_filtre_FIR-FX-LMS_sur_FPGA_pour_l%27annulation_de_Bruit_Acoustique&amp;diff=24652</id>
		<title>Implantation d'un filtre FIR-FX-LMS sur FPGA pour l'annulation de Bruit Acoustique</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Implantation_d%27un_filtre_FIR-FX-LMS_sur_FPGA_pour_l%27annulation_de_Bruit_Acoustique&amp;diff=24652"/>
				<updated>2016-01-06T03:07:32Z</updated>
		
		<summary type="html">&lt;p&gt;Vpiat : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Cahier des Charges==&lt;br /&gt;
===Présentation générale du projet===&lt;br /&gt;
&lt;br /&gt;
====Contexte====&lt;br /&gt;
Les problèmes de bruit acoustiques sont de plus en plus présents en industrie avec de plus en plus de moteurs, de transformateurs, de compresseurs, de ventilateur, etc… La plus part du temps, on utilise des moyens passifs pour réduire le bruit, comme des murs, des enclos, des silencieux… Ces systèmes passifs sont utilisés pour leur forte atténuation de bruit sur une large gamme de fréquence. Cependant, ils sont relativement imposants, coûteux et inefficace dans les basses fréquences.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
L'utilisation d'un filtre actif permet de résoudre ces problèmes. En effet, grâce au système de Contrôle Actif du bruit (Active Noise Control – ANC), on peut annuler les bruits primaires en superposant un signal inverse à ce bruit primaire. Ce signal inverse possède la même amplitude avec une opposition de phase. La conception d’un ANC est rapide et efficace, il suffit d’un micro pour recueillir le bruit primaire et d’un haut-parleur pour envoyer l’inverse de ce bruit. &lt;br /&gt;
&lt;br /&gt;
====Description du projet====&lt;br /&gt;
&lt;br /&gt;
On propose ici de réaliser un filtre actif (ANC) permettant d'annuler une source de bruit. Pour cela, nous utiliserons un filtre numérique de type FIR (Finite Impulse Response) avec une adaptation des coefficients par l'algorithme Filtered X Least Mean Square (FX-LMS). Ce filtre sera implémenté sur FPGA permettant de traiter les données en temps réel.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Objectif ===&lt;br /&gt;
&lt;br /&gt;
Notre objectif est d'annuler un bruit primaire envoyé par un Haut-parleur grâce à un second Haut parleur :&lt;br /&gt;
[[Fichier:Exemple.jpg]]&lt;br /&gt;
&lt;br /&gt;
=== '''Description du projet''' ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== '''Etapes du Projet''' ==&lt;br /&gt;
&lt;br /&gt;
=== Choix techniques : matériel, logiciels, sources === &lt;br /&gt;
&lt;br /&gt;
== '''Tableau de bord''' ==&lt;br /&gt;
&lt;br /&gt;
===Semaine 1===&lt;/div&gt;</summary>
		<author><name>Vpiat</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=V%C3%AAtements_intelligents&amp;diff=21164</id>
		<title>Vêtements intelligents</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=V%C3%AAtements_intelligents&amp;diff=21164"/>
				<updated>2015-05-11T21:45:26Z</updated>
		
		<summary type="html">&lt;p&gt;Vpiat : /* Rapport */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Cahier des Charges==&lt;br /&gt;
===Présentation générale du projet===&lt;br /&gt;
&lt;br /&gt;
=== Objectif ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Concevoir un système d'interaction avec des objets connectés sur les vêtements ou le corps.&lt;br /&gt;
&lt;br /&gt;
=== '''Description du projet''' ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Les systèmes embarqués sur les humains commencent à se développer (lunettes Google, montres connectées).&lt;br /&gt;
&lt;br /&gt;
Nous proposons ici de réaliser une plateforme basée sur la '''technologie BLE''' (Bluetooth Low Energy ou Bluetooth 4.0).&lt;br /&gt;
&lt;br /&gt;
Deux parties seront mise en oeuvre :&lt;br /&gt;
    &lt;br /&gt;
* un système embarqué compact permettant de recevoir des informations et en transmettre ;&lt;br /&gt;
* une application Android permettant de communiquer avec le système.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Le système sera intégré sur un t-shirt en utilisant notamment la machine à coudre numérique disponible au Fabricarium de Polytech Lille.&lt;br /&gt;
&lt;br /&gt;
===Contexte===&lt;br /&gt;
&lt;br /&gt;
==== Informations à traiter ====&lt;br /&gt;
&lt;br /&gt;
Pour que notre projet soit intéressant, aux yeux des consommateurs, nous devons définir l'utilité que pourrait avoir un vêtement connecté.&lt;br /&gt;
Notre application ne doit pas être un simple gadget mais un objet qui semble utile et faire en sorte qu'il soit indispensable dans le futur. &amp;quot;Il faut créer le besoin si l'on veut vendre un objet et faire du profit.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Dans un premier temps nous devons faire une étude du marché pour savoir ce qui a déjà été fait. &lt;br /&gt;
Nous devons savoir quels types d'informations les vêtements et objets connectés transmettent, pour quels usages et pour quels publics.&lt;br /&gt;
&lt;br /&gt;
====Le Sport====&lt;br /&gt;
&lt;br /&gt;
La plupart des objets connectés à l'Homme sont utilisés pour l'informer de ses performances physiques: &lt;br /&gt;
Combien de kilomètres ils ont parcouru, combien de pas ont été effectués, combien de calories ont été perdues.&lt;br /&gt;
&lt;br /&gt;
Ce sont principalement des performances liées à la marche et la course à pied. De nouveaux objets connectés ont vu récemment le jour, notamment les bracelets connectés permettant de récolter des informations sur les nageurs, toujours dans le but d'avoir un suivi sur ses performances (nombres de mètres nagés par rapport à un certain temps).&lt;br /&gt;
&lt;br /&gt;
====Santé et bien être====&lt;br /&gt;
&lt;br /&gt;
Encore en pleine expansion que très peu d'objets connectés se sont intéressés au domaine de la santé: ici un exemple de t-shirt connecté permettant de contrôler le rythme cardiaque: [http://pulse.edf.com/fr/les-textiles-intelligents-peuvent-surveiller-notre-coeur?gclid=Cj0KEQiAiamlBRCgj83PiYm6--gBEiQArnojD4QntiVq9cLZeZDRGqMckMIQzkr6RH3cFxJnxJk0tE0aApoA8P8HAQ]&lt;br /&gt;
&lt;br /&gt;
Beaucoup d'application ont déjà vu le jour: [http://www.techniques-ingenieur.fr/actualite/materiaux-innovants-nano-thematique_6342/ces-textiles-intelligents-qui-prennent-soin-de-nous-article_286868/]&lt;br /&gt;
&lt;br /&gt;
Quelles sont les applications que l'on pourrait faire? Quels suivis sont à faire pour quels types de maladie etc..?&lt;br /&gt;
&lt;br /&gt;
====La régulation de température====&lt;br /&gt;
&lt;br /&gt;
Grâce aux fibres électroniques tissées il est possible de chauffer un t-shirt ou de le refroidir cela pourrait se régler en fonction de la température du corps ou bien par simple commande de l'utilisateur (cela pourrait s'avérer très utile avec le réchauffement climatique qui est en train d'arriver, winter is comming..).&lt;br /&gt;
&lt;br /&gt;
===Notre Projet===&lt;br /&gt;
&lt;br /&gt;
Ce que nous voulons faire nous: Un T-shirt permettant à la fois de calculer les performances sportives mais aussi d'avoir un suivi sur notre santé et pourquoi pas faire en sorte de réguler la température du corps lors d'un effort..&lt;br /&gt;
&lt;br /&gt;
-&amp;gt;Calculer le nombre de pas (Podomètre)&lt;br /&gt;
&lt;br /&gt;
-&amp;gt;Calculer une distance, la vitesse, la position sur une carte? (GPS)&lt;br /&gt;
&lt;br /&gt;
-&amp;gt;Calculer la fréquence cardiaque ? (Cardiofréquencemètre)&lt;br /&gt;
&lt;br /&gt;
-&amp;gt;Afficher la fréquence cardiaque sur LED&lt;br /&gt;
&lt;br /&gt;
-&amp;gt;Mesurer la température du corps&lt;br /&gt;
&lt;br /&gt;
-&amp;gt;Transférer toutes ses informations sur l'application mobile (Android)&lt;br /&gt;
&lt;br /&gt;
== '''Etapes du Projet''' ==&lt;br /&gt;
&lt;br /&gt;
*Partie électronique&lt;br /&gt;
** Définition des différents modules (Capteurs de températures, accéléromètre..)&lt;br /&gt;
** Connecter et programmer les différents modules au microprocesseur Lilypad&lt;br /&gt;
** Créer un programme pour ordonnancer les différents modules&lt;br /&gt;
** Connecter le module Bluetooth BLE et le configurer&lt;br /&gt;
** Intégrer les composants au tee-shirt&lt;br /&gt;
&lt;br /&gt;
*Partie informatique&lt;br /&gt;
** Créer une application Android simple (Par exemple HelloWorld)&lt;br /&gt;
** Importer l'application sur smart-phone&lt;br /&gt;
** Faire un menu et sous-menu [http://a-renouard.developpez.com/tutoriels/android/menu-sous-menu/]&lt;br /&gt;
** Comprendre les Services [http://nbenbourahla.developpez.com/tutoriels/android/services-sous-android/], les maîtriser: [http://blog.developpez.com/ndruet/p8571/android/creation_de_service]&lt;br /&gt;
** Comprendre les vues sous Android [http://nbenbourahla.developpez.com/tutoriels/android/introduction-vues-sous-android/]&lt;br /&gt;
** Comment utiliser SQLite sur Android [http://a-renouard.developpez.com/tutoriels/android/sqlite/]&lt;br /&gt;
** Créer les programmes principaux:&lt;br /&gt;
*** Intégration Google Map sur Android (pour utiliser le GPS) [http://michel-dirix.developpez.com/tutoriels/android/integration-google-maps-android/]&lt;br /&gt;
*** Ajouter les protocoles nécessaires pour communiquer en Bluetooth [http://sberfini.developpez.com/tutoriaux/android/bluetooth/], utilisation du NFC [http://sberfini.developpez.com/tutoriaux/android/nfc/bluetooth/]&lt;br /&gt;
*** Une vue pour afficher les différentes applications (activités)&lt;br /&gt;
*** Une activité pour gérer l'affichage des informations envoyé depuis le microprocesseur&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Matériel possédé ===&lt;br /&gt;
&lt;br /&gt;
* LilyPad Accelerometer ADXL335 [https://www.sparkfun.com/products/9267] [&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;fourni le 28/1/2015&amp;lt;/span&amp;gt;]&lt;br /&gt;
&lt;br /&gt;
* LilyPad Temperature Sensor [https://www.sparkfun.com/products/8777] [&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;fourni le 28/1/2015&amp;lt;/span&amp;gt;]&lt;br /&gt;
&lt;br /&gt;
* Arduino Lilypad Atmega 328P [http://arduino.cc/en/Main/ArduinoBoardLilyPad] [&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;fourni le 28/1/2015&amp;lt;/span&amp;gt;]&lt;br /&gt;
&lt;br /&gt;
* SparkFun FTDI Basic Breakout - 3.3V [https://www.sparkfun.com/products/9873] [&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;fourni le 28/1/2015&amp;lt;/span&amp;gt;]&lt;br /&gt;
&lt;br /&gt;
* Une dizaine de LilyPad LED Red [https://www.sparkfun.com/products/10044] [&amp;lt;span style=&amp;quot;color: lightgreen;&amp;quot;&amp;gt;LEDs LilyPad blanches disponibles&amp;lt;/span&amp;gt;]&lt;br /&gt;
&lt;br /&gt;
* Interrupteur [&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;fourni le 28/1/2015&amp;lt;/span&amp;gt;]&lt;br /&gt;
&lt;br /&gt;
* BLE nRF8001 [http://www.nordicsemi.com/eng/Products/Bluetooth-Smart-Bluetooth-low-energy/nRF8001] [&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;1 fourni le 9/2/2015&amp;lt;/span&amp;gt;]&lt;br /&gt;
&lt;br /&gt;
=== Matériel nécessaire === &lt;br /&gt;
&lt;br /&gt;
* Olimex platine ECG&lt;br /&gt;
&lt;br /&gt;
* [&amp;lt;span style=&amp;quot;color: blue;&amp;quot;&amp;gt; Du fil conducteur en bobine &amp;lt;/span&amp;gt;]&lt;br /&gt;
&lt;br /&gt;
== '''Tableau de bord''' ==&lt;br /&gt;
&lt;br /&gt;
===Semaine 1===&lt;br /&gt;
&lt;br /&gt;
Nous avons fait le point sur les capacités qu'aura notre t-shirt connecté.&lt;br /&gt;
&lt;br /&gt;
Après discussion avec M.Boë nous avons décidé d'utiliser dans un premier temps deux capteurs, Accéléromètre et capteur de température (emprunté à M.Redon), pour nous concentrer plus rapidement sur les deux problèmes majeur que nous allons rencontrer, celle de la communication entre l'arduino (Lilypad), le BLE et l'application androïde du téléphone et celle de l'énergie où le problème réside dans l'alimentation système embarqué. Nous devons trouver un composant à la fois petit, pour pouvoir être porté, et assez puissant pour délivrer de l'énergie au microprocesseur pendant plusieurs mois. Nous devons nous demander quand éteindre le microcontrôleur et à quel moment le Bluetooth sera connecté. Nous allons pour cela ajouter un interrupteur glissière au tee-shirt.&lt;br /&gt;
&lt;br /&gt;
Nous nous sommes informés sur le bluetooth de type BLE :&lt;br /&gt;
&lt;br /&gt;
Histoire du Bluetooth: [http://www.frandroid.com/maison-connectee/232622_dossier-bluetooth-fonctionnement-interet-les-objets-connectes]&lt;br /&gt;
&lt;br /&gt;
Projet de conception d'une liaison bluetooh 2.0 : [file:///tmp/P12Rap_bluetooth.pdf]&lt;br /&gt;
&lt;br /&gt;
Protocole Bluetooth: SIG (Special Interest Group)&lt;br /&gt;
&lt;br /&gt;
'''Bluetooth 2.0 :'''&lt;br /&gt;
&lt;br /&gt;
Appairage facile et sécurisé : le SSP (Secure Simple Pairing)&lt;br /&gt;
&lt;br /&gt;
Protocole?: EDR (Enhanced Data Rate)&lt;br /&gt;
&lt;br /&gt;
'''Bluetooth 3.0: '''&lt;br /&gt;
&lt;br /&gt;
Protocole: HS (High Speed)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Bluetooth 4.0'''&lt;br /&gt;
&lt;br /&gt;
Conception d'un module bluetooth : [http://www.digikey.fr/fr/articles/techzone/2014/jun/how-to-build-low-power-wireless-systems-using-bluetooth-smart-4]&lt;br /&gt;
&lt;br /&gt;
Classic Bluetooth: Regroupe les versions 1.0 -&amp;gt; 3.0&lt;br /&gt;
&lt;br /&gt;
Protocole: LE (Bluetooth Low Energy)  --&amp;gt; Réduit fortement la consommation de la puce Bluetooth avec un protocole différent&lt;br /&gt;
&lt;br /&gt;
Dans le 4.0 le constructeur peut décider d'implémenter deux modes: Bluetooth Low Energy seul (single mode) ou avec le Classic Bluetooth (dual mode) qui lui permet de conserver la compatibilité avec les autres appareils.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Semaine 2===&lt;br /&gt;
&lt;br /&gt;
Nous avons établi une connexion avec l'Atmega 328P et communiqué avec l'accéléromètre et le capteur de température. Malheureusement le capteur de température LyliPad n'est pas très précis, nous avons donc opté pour un capteur DS18B20, c'est un capteur 1-wire. Nous avons donc commencé par comprendre cette technologie puis grâce à un programme trouvé sur internet, nous essayons de l'adapter à notre microprocesseur lillypad pour communiquer avec le DS18B20.&lt;br /&gt;
&lt;br /&gt;
Parallèlement nous avons débuté la programmation d'application Android. Nous utilisons pour cela l'IDE Eclipse. Nous rencontrons actuellement des problèmes d'environnement pour compiler un programme Android simple comme &amp;quot;Hello World&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===Semaine 3===&lt;br /&gt;
*'''Partie Hardware'''&lt;br /&gt;
**Toujours des problèmes avec le capteur de température DS18B20. Nous arrivons à envoyer le programme C sur l'arduino mais la communication avec le capteur ne se fait pas. Nous avons donc décortiqué le programme et comprendre son fonctionnement.&lt;br /&gt;
&lt;br /&gt;
*'''Partie application'''&lt;br /&gt;
**Après de nombreux bug d’installation des plateformes (Eclipse, JDK, SDK, Bibliothèque etc..) nous réussissons à lancer l'application &amp;quot;HelloWorld&amp;quot; dans un émulateur de téléphone Android. Nous pouvons maintenant nous concentrer vers la programmation orienté objet Android et détailler plus spécifiquement les étapes à réaliser avant de pouvoir coder notre programme final (cf &amp;quot;Etapes du Projet&amp;quot;).&lt;br /&gt;
Notions à connaitre:&lt;br /&gt;
*Introduction aux ressources Android (les éléments qui s'afficheront à l'écran ou avec lesquels l'utilisateur pourra interagir [http://openclassrooms.com/courses/creez-des-applications-pour-android/les-ressources-2])&lt;br /&gt;
*Introduction à la notion de &amp;quot;Style&amp;quot; et de &amp;quot;Thèmes&amp;quot; [http://cyril-mottier.developpez.com/tutoriels/android/introduction-styles-themes/]&lt;br /&gt;
&lt;br /&gt;
===Semaine 4===&lt;br /&gt;
*'''Partie Hardware'''&lt;br /&gt;
** Nous arrivons à communiquer avec le capteur DS18B20. Notre programme détecte le capteur, arrive à l'initialiser mais nous avons à présent des problèmes d'envoi de données pour connaitre la température.&lt;br /&gt;
&lt;br /&gt;
*'''Partie application'''&lt;br /&gt;
** Nous essayons dans un premier temps d'afficher un menu simple dans lequel nous pouvons naviguer [http://www.tutomobile.fr/faire-des-menus-et-sous-menus-tutoriel-android-n%C2%B012/27/07/2010/] cependant nous rencontrons des problèmes de librairies, en effet nous ne disposons pas de toutes les images publique qu'Android nous offre [http://developer.android.com/guide/topics/resources/drawable-resource.html], nous devrons donc ajouter les images nous même [http://androiddrawableexplorer.appspot.com/] dans la librairie..&lt;br /&gt;
&lt;br /&gt;
===Semaine 5===&lt;br /&gt;
*'''Partie Hardware'''&lt;br /&gt;
**Toujours des problèmes de communication avec le capteur de température. Le programme avec l'IDE fonctionne mais nous ne comprenons pas pourquoi cela ne marche pas avec le programme en c.&lt;br /&gt;
&lt;br /&gt;
*'''Partie application'''&lt;br /&gt;
Nous avons réussis à afficher un menu simple dans lequel figure quelques boutons qui nous serviront à naviguer entre les activités:&lt;br /&gt;
** Entrainement&lt;br /&gt;
** Historique&lt;br /&gt;
** Paramètres&lt;br /&gt;
** Connexion&lt;br /&gt;
&lt;br /&gt;
Voici à quoi ressemble notre menu pour le moment:&lt;br /&gt;
[[Fichier:Main activity Avant.png|250px|gauche]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Définition des différentes activités:====&lt;br /&gt;
=====L'activité &amp;quot;Entrainement&amp;quot;=====&lt;br /&gt;
Une fois connecté via Bluetooth grâce à l'activité &amp;quot;Connexion&amp;quot;, l'utilisateur devra appuyer sur le bouton &amp;quot;Start&amp;quot; pour commencer son entrainement. L'application affichera en temps réel les données envoyées depuis le-t-shirt et indiquera à l'utilisateur le temps qui s'est écoulé. En background elle écrira dans un fichier texte situé dans un dossier spécifique afin de traiter ces données par la suite.&lt;br /&gt;
Lorsque l'utilisateur termine son entrainement il devra appuyer sur le bouton &amp;quot;Stop&amp;quot;, une fenêtre s'ouvrira et lui demandera s'il souhaite enregistrer ou supprimer les données de l'entrainement qu'il vient d'effectuer. S'il décide d'enregistrer il sera automatiquement redirigé vers l'activité &amp;quot;Stats&amp;quot; (non pas accessible depuis le menu) qui affichera le bilan de son entrainement.&lt;br /&gt;
&lt;br /&gt;
=====L'activité &amp;quot;Historique&amp;quot;=====&lt;br /&gt;
Recense tout  les entrainements effectués par l'utilisateur. De cette activité il pourra décider de supprimer ses anciens entrainements (cela supprimera le fichier texte associé en background) ou bien d'en afficher ses statistiques (&amp;quot;Activité Stats&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
=====L'activité &amp;quot;Paramètre&amp;quot;=====&lt;br /&gt;
Activité optionnel, servira à récupérer certaines informations sur l'utilisateur qui pourrait nous être utile pour certains calculs. Comme le nombre de calories dépensé lors de l'entrainement ou autre... Nous n'avons pas encore défini les calculs que nous effectuerons&lt;br /&gt;
&lt;br /&gt;
=====L'activité &amp;quot;Connexion&amp;quot;=====&lt;br /&gt;
Servira à connecter l'application au T-Shirt via Bluetooth&lt;br /&gt;
&lt;br /&gt;
===Semaine 6===&lt;br /&gt;
*'''Partie Hardware'''&lt;br /&gt;
** Nous avons essayé de télécharger d'autres programmes pour communiquer avec le capteur de température mais sans aucun succès. Nous avons donc essayé de traduire le programme de l'IDE (écrit en c++) en c mais toujours pas de résultat. Nous avons donc décidé de laisser tomber ce capteur 1-WIRE et de prendre un capteur analogique, le TMP36. Nous sommes donc passés à la communication Bluetooth sur le lilypad avec le BLE nrf8001.&lt;br /&gt;
&lt;br /&gt;
*'''Partie application'''&lt;br /&gt;
**Nous avons configuré l'activité &amp;quot;Paramètre&amp;quot;. Elle demande quelques informations à l'utilisateur comme son Nom, son âge, sa taille et son poids, utile pour calculer certains paramètres qui reste toujours à définir. (Savoir son nom ne nous est pas vraiment utile, il sert à créer une affinité entre l'utilisateur et l'application)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:ParamPref.png|gauche]] [[Fichier:ParamPref Nom.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Semaine 7===&lt;br /&gt;
*'''Partie Hardware'''&lt;br /&gt;
** Après avoir étudié le fonctionnement du BLE, nous avons téléchargé un code source sur internet pour l'IDE d'arduino que nous avons retranscrit en C. Le programme comportait à ce moment beaucoup de bugs que nous devions résoudre.&lt;br /&gt;
&lt;br /&gt;
*'''Partie application'''&lt;br /&gt;
** Découverte et apprentissage des fonctions permettant la communication Bluetooth.&lt;br /&gt;
&lt;br /&gt;
Nous avons rajouté une &amp;quot;actionbar&amp;quot; et également redéfini l'affichage du menu qui maintenant est plus sobre:&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Menu apres.png|250px]]&lt;br /&gt;
&lt;br /&gt;
===Semaine 8=== &lt;br /&gt;
*'''Partie Hardware'''&lt;br /&gt;
** Après avoir débogué la communication I2C sur le programme arduino et les quelques autres bogs, nous avons pu commencer à utiliser la communication Bluetooth avec l'application téléphone. Nous avons donc établi un protocole de communication entre l'application et le lilypad pour pouvoir communiquer.&lt;br /&gt;
*'''Partie application'''&lt;br /&gt;
** Problème avec la connexion Bluetooth, certaines fonctions ne sont pas reconnues par l'IDE. Cela est peut être dû à une mauvaise installation des bibliothèques? Nous avons donc transféré notre projet vers un nouveaux projet qui maintenant compile, allez savoir comment..&lt;br /&gt;
&lt;br /&gt;
===Semaine 9===&lt;br /&gt;
*'''Partie Hardware'''&lt;br /&gt;
** Premier essai d'un programme pour mettre le lilypad en mode veille lorsqu'aucun appareil n'est connecté au Bluetooth. Reste à faire des tests de consommation électriques pour valider le code.&lt;br /&gt;
&lt;br /&gt;
*'''Partie application'''&lt;br /&gt;
** Premiers test de la connexion Bluetooth effectué. Nous avons abandonné l'idée d'utiliser l'émulateur de téléphone car il ne supporte pas le Bluetooth. Nous arrivons à communiquer avec le T-shirt, nous pouvons émettre et recevoir des caractères. Pour une question pratique la connexion ne se fera plus depuis le bouton &amp;quot;Connexion&amp;quot; du menu mais directement dans l'activité &amp;quot;Entrainement&amp;quot;. Lorsque l'utilisateur appuiera sur ce bouton depuis le menu, l'application lui demandera de se connecter au T-shirt. Une fois connecté le bouton &amp;quot;Start&amp;quot; apparait puis la communication débutera lorsqu'il appuiera dessus.&lt;br /&gt;
&lt;br /&gt;
===Semaine 10===&lt;br /&gt;
*'''Partie Hardware'''&lt;br /&gt;
** Ajout du capteur de température sur le lilypad pour envoyer les données. Nous avons également testé de nouveau la communication Bluetooth suite à une modification de l'application.&lt;br /&gt;
&lt;br /&gt;
*'''Partie application'''&lt;br /&gt;
**Définition de l'activité &amp;quot;Historique&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
Cette activité va scanner tous les fichiers créés par l'utilisateur et les afficher à l'aide d'une listView [http://www.tutomobile.fr/personnaliser-une-listview-tutoriel-android-n%C2%B07/04/07/2010/]. Lorsque l'on cliquera sur l'un des fichiers l'activité &amp;quot;Stats&amp;quot; se lancera. Nous avons également configuré une AlertDialog [http://www.tutomobile.fr/personnaliser-un-alertdialog-tutoriel-android-n%C2%B020/04/11/2010/] qui s'affiche lorsque l'on clique longuement sur un Item, celle-ci demande alors si l'on veut supprimer ou afficher les statistiques.&lt;br /&gt;
&lt;br /&gt;
Voici à quoi ressemble cette activité:&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Historique.png|250px]] [[Fichier:Historique possibilite de supprimer les fichier.png|250px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous devons encore déterminer les détails que chaque Item aura et ajouter un TextView à la AlertDialog qui indiquera quelle Entrainement a été sélectionné.&lt;br /&gt;
&lt;br /&gt;
===Semaine 11===&lt;br /&gt;
*'''Partie Hardware'''&lt;br /&gt;
** Ajout de l'accéléromètre pour réaliser le podomètre. C'est un accéléromètre numérique (MMA8452Q), cet accéléromètre va nous permettre de générer une interruption à chaque fois qu'une accélération est détectée. Quelques petits problèmes lors de l'initialisation de celui ci mais les problèmes ont été résolu rapidement. Nous allons pouvoir commencer la construction du tee-shirt.&lt;br /&gt;
[[Fichier:Mma8452q.jpg|200px]]&lt;br /&gt;
*'''Partie application'''&lt;br /&gt;
**Définition de l'activité &amp;quot;Stats&amp;quot;.&lt;br /&gt;
Cette activité va lire tout le fichier écris au préalable lors de l'entrainement, calculera des moyennes et permettra d'afficher des graphiques de certains paramètres en fonction du temps, pour cela nous avons utilisé la librairie GraphView, disponible via ce lien: [http://www.android-graphview.org/]&lt;br /&gt;
&lt;br /&gt;
En voici un premier jet, dans cet exemple nous avons affiché le graphique de la fréquence cardiaque en fonction du temps.&lt;br /&gt;
:&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Stats 2.png|250px]]&lt;br /&gt;
&lt;br /&gt;
===Semaine 12===&lt;br /&gt;
*'''Partie Hardware'''&lt;br /&gt;
*Nous avons cousu les composants électroniques sur le T-shirt&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Exterrieur.jpg|250px]]  [[Fichier:Interrieur.jpg|265px]] [[Fichier:Exterrieur Lily.jpg|250px]] [[Fichier:Interrieur Lily.jpg|235px]]&lt;br /&gt;
&lt;br /&gt;
*Il ne reste qu'a effectuer des tests sur le code globale avec le tee-shirt, quelques problèmes sur les connections entre les fils et les composants mais cela fonctionne. Encore des tests à effectuer sur la consommation électrique de l'ensemble en mode veille et en mode connecté. Nous avons ajouté une poche sur le tee-shirt pour pouvoir y placer une batterie.&lt;br /&gt;
&lt;br /&gt;
*'''Partie application'''&lt;br /&gt;
**Redéfinition du Menu&lt;br /&gt;
Nous avons apporté quelques modifications à l'application, désormais le menu ne comporte plus le bouton connexion. La connexion Bluetooth sera établie lorsque l'utilisateur sélectionnera le bouton &amp;quot;Entrainement&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Menu.png|250px]]&lt;br /&gt;
&lt;br /&gt;
* Entrainement:&lt;br /&gt;
Si l'utilisateur n'a pas activé son bluetooth l'application lui demande automatiquement de l'activer, s'il ne le fait pas il ne pourra faire l'entrainement. Il devra ensuite sélectionner le T-Shirt pour s'y connecter, une fois la connexion établi l'entrainement pourra commencer. Il pourra alors constater en temps réels les données envoyé par le T-shirt, c'est à dire [...]&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Entrainement demande de connection bluetooth.png|250px]] [[Fichier:Entrainement Start.png|250px]] [[Fichier:Entrainement 1km.png|250px]] [[Fichier:Entrainement fini.png|250px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Redéfinition de la page Historique&lt;br /&gt;
Il est désormais possible de sélectionner plusieurs éléments afin de les supprimer en même temps. Nous avons modifié l'affichage, seul la date, l'heure ainsi que le numéro de l'entrainement sont affiché.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Historique 2.png|250px]] [[Fichier:Historique selection.png|250px]] [[Fichier:Historique suppression.png|250px]]&lt;br /&gt;
&lt;br /&gt;
* Ajout d'information sur la page &amp;quot;Détails&amp;quot;&lt;br /&gt;
L'utilisateur peut désormais connaitre la distance parcouru lors de son entrainement (en supposant qu'un pas vaut 70cm). Il peut également passer d'un graphique à l'autre pour voir l'évolution de la température de son corps ou de sa fréquence cardiaque lors de l'entrainement. Nous affichons maintenant la vraie date (et non le nom du fichier), nous indiquons aussi l'heure de début de l'entrainement.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Détails Freq.png|250px]] [[Fichier:Détails temp.png|250px]]&lt;br /&gt;
&lt;br /&gt;
== Liens ==&lt;br /&gt;
&lt;br /&gt;
RFDUINO [www.rfduino.com/] : RFD22102 RFduino DIP [http://www.rfduino.com/product/rfd22102-rfduino-dip/index.html]&lt;br /&gt;
&lt;br /&gt;
Nordic rf8001 (BLE) [http://www.nordicsemi.com/eng/Products/Bluetooth-Smart-Bluetooth-low-energy/nRF8001]&lt;br /&gt;
&lt;br /&gt;
Arduino SHIELD-EKG-EMG: [https://www.olimex.com/Products/Duino/Shields/SHIELD-EKG-EMG/]&lt;br /&gt;
&lt;br /&gt;
Électrocardiogramme [http://fab.cba.mit.edu/classes/863.12/people/Adam.Marblestone/AHM_week05.html]&lt;br /&gt;
&lt;br /&gt;
LED [http://www.adafruit.com/] --&amp;gt; Fil de LED Bleu [http://www.adafruit.com/products/895] ---&amp;gt; Lot de 25 LED [http://www.adafruit.com/products/388] ---&amp;gt; [http://www.adafruit.com/products/780]&lt;br /&gt;
&lt;br /&gt;
GraphView: [https://github.com/jjoe64/GraphView]&lt;br /&gt;
&lt;br /&gt;
Library for DS18B20 [http://sourceforge.net/projects/davidegironi/files/avr-lib/avr_lib_ds18b20_01b.zip/download]&lt;br /&gt;
&lt;br /&gt;
== Tuto ==&lt;br /&gt;
&lt;br /&gt;
Tuto arduino : [https://tutoarduino.com/choix-tutoriels/]&lt;br /&gt;
&lt;br /&gt;
Tuto capteur de température: [https://tutoarduino.com/portfolio-items/tpbd2-2-detecteur-de-temperature/]&lt;br /&gt;
&lt;br /&gt;
Tuto Bluetooth: [https://tutoarduino.com/portfolio-items/le-bluetooth/] connexion app [http://nononux.free.fr/index.php?page=elec-brico-bluetooth-android-microcontroleur]&lt;br /&gt;
&lt;br /&gt;
Tuto Android: [http://android.developpez.com/cours/] [https://sites.google.com/site/redezzahir/coursJAVA/tp10] [http://sampleprogramz.com/android/] fiche: [http://www.iutbayonne.univ-pau.fr/~dalmau/documents/cours/android/Guide%20TPs%20Android%20avec%20Eclipse.pdf]&lt;br /&gt;
&lt;br /&gt;
Tuto BLE Android: [http://developer.android.com/guide/topics/connectivity/bluetooth-le.html]&lt;br /&gt;
&lt;br /&gt;
Tuto ListView: [http://www.ltm.fr/creez-une-vue-en-liste-listview-avec-texte-image/]  GraphView: [http://www.android-graphview.org/download--getting-started.html]&lt;br /&gt;
&lt;br /&gt;
Tuto GPS android: [http://www.tutomobile.fr/geolocalisation-grace-au-gps-ou-au-reseau-mobile-tutoriel-android-n%C2%B015/13/08/2010/]&lt;br /&gt;
&lt;br /&gt;
== Fin du Projet ==&lt;br /&gt;
&lt;br /&gt;
===Vidéo de présentation===&lt;br /&gt;
&lt;br /&gt;
Vidéo du projet disponible via ce [https://drive.google.com/folderview?id=0ByMLCar3e2e0fkxidU11cjA5Qy16MU8zXzBtTUFNQ3BvWmtYUWVjSm5ZVHBEdFh1eVNXaDQ&amp;amp;usp=sharing_eid lien]&lt;br /&gt;
&lt;br /&gt;
===Rapport===&lt;br /&gt;
&lt;br /&gt;
Vous pouvez trouver notre rapport de stage ici : [[Fichier:Rapport_de_projet.pdf]]&lt;br /&gt;
&lt;br /&gt;
===Fichiers Codes===&lt;br /&gt;
&lt;br /&gt;
Vous pouvez accéder au code Java de l'application Android ici et au code C du microprocesseur ici.&lt;br /&gt;
&lt;br /&gt;
Code C pour le microprocesseur : [[Fichier:BLE.zip]]&lt;/div&gt;</summary>
		<author><name>Vpiat</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Fichier:Rapport_de_projet.pdf&amp;diff=21163</id>
		<title>Fichier:Rapport de projet.pdf</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Fichier:Rapport_de_projet.pdf&amp;diff=21163"/>
				<updated>2015-05-11T21:44:17Z</updated>
		
		<summary type="html">&lt;p&gt;Vpiat : rapport de notre projet sur les vêtements connectés&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;rapport de notre projet sur les vêtements connectés&lt;/div&gt;</summary>
		<author><name>Vpiat</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=V%C3%AAtements_intelligents&amp;diff=21144</id>
		<title>Vêtements intelligents</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=V%C3%AAtements_intelligents&amp;diff=21144"/>
				<updated>2015-05-11T20:04:38Z</updated>
		
		<summary type="html">&lt;p&gt;Vpiat : /* Fichiers Codes */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Cahier des Charges==&lt;br /&gt;
===Présentation générale du projet===&lt;br /&gt;
&lt;br /&gt;
=== Objectif ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Concevoir un système d'interaction avec des objets connectés sur les vêtements ou le corps.&lt;br /&gt;
&lt;br /&gt;
=== '''Description du projet''' ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Les systèmes embarqués sur les humains commencent à se développer (lunettes Google, montres connectées).&lt;br /&gt;
&lt;br /&gt;
Nous proposons ici de réaliser une plateforme basée sur la '''technologie BLE''' (Bluetooth Low Energy ou Bluetooth 4.0).&lt;br /&gt;
&lt;br /&gt;
Deux parties seront mise en oeuvre :&lt;br /&gt;
    &lt;br /&gt;
* un système embarqué compact permettant de recevoir des informations et en transmettre ;&lt;br /&gt;
* une application Android permettant de communiquer avec le système.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Le système sera intégré sur un t-shirt en utilisant notamment la machine à coudre numérique disponible au Fabricarium de Polytech Lille.&lt;br /&gt;
&lt;br /&gt;
===Contexte===&lt;br /&gt;
&lt;br /&gt;
==== Informations à traiter ====&lt;br /&gt;
&lt;br /&gt;
Pour que notre projet soit intéressant, aux yeux des consommateurs, nous devons définir l'utilité que pourrait avoir un vêtement connecté.&lt;br /&gt;
Notre application ne doit pas être un simple gadget mais un objet qui semble utile et faire en sorte qu'il soit indispensable dans le futur. &amp;quot;Il faut créer le besoin si l'on veut vendre un objet et faire du profit.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Dans un premier temps nous devons faire une étude du marché pour savoir ce qui a déjà été fait. &lt;br /&gt;
Nous devons savoir quels types d'informations les vêtements et objets connectés transmettent, pour quels usages et pour quels publics.&lt;br /&gt;
&lt;br /&gt;
====Le Sport====&lt;br /&gt;
&lt;br /&gt;
La plupart des objets connectés à l'Homme sont utilisés pour l'informer de ses performances physiques: &lt;br /&gt;
Combien de kilomètres ils ont parcouru, combien de pas ont été effectués, combien de calories ont été perdues.&lt;br /&gt;
&lt;br /&gt;
Ce sont principalement des performances liées à la marche et la course à pied. De nouveaux objets connectés ont vu récemment le jour, notamment les bracelets connectés permettant de récolter des informations sur les nageurs, toujours dans le but d'avoir un suivi sur ses performances (nombres de mètres nagés par rapport à un certain temps).&lt;br /&gt;
&lt;br /&gt;
====Santé et bien être====&lt;br /&gt;
&lt;br /&gt;
Encore en pleine expansion que très peu d'objets connectés se sont intéressés au domaine de la santé: ici un exemple de t-shirt connecté permettant de contrôler le rythme cardiaque: [http://pulse.edf.com/fr/les-textiles-intelligents-peuvent-surveiller-notre-coeur?gclid=Cj0KEQiAiamlBRCgj83PiYm6--gBEiQArnojD4QntiVq9cLZeZDRGqMckMIQzkr6RH3cFxJnxJk0tE0aApoA8P8HAQ]&lt;br /&gt;
&lt;br /&gt;
Beaucoup d'application ont déjà vu le jour: [http://www.techniques-ingenieur.fr/actualite/materiaux-innovants-nano-thematique_6342/ces-textiles-intelligents-qui-prennent-soin-de-nous-article_286868/]&lt;br /&gt;
&lt;br /&gt;
Quelles sont les applications que l'on pourrait faire? Quels suivis sont à faire pour quels types de maladie etc..?&lt;br /&gt;
&lt;br /&gt;
====La régulation de température====&lt;br /&gt;
&lt;br /&gt;
Grâce aux fibres électroniques tissées il est possible de chauffer un t-shirt ou de le refroidir cela pourrait se régler en fonction de la température du corps ou bien par simple commande de l'utilisateur (cela pourrait s'avérer très utile avec le réchauffement climatique qui est en train d'arriver, winter is comming..).&lt;br /&gt;
&lt;br /&gt;
===Notre Projet===&lt;br /&gt;
&lt;br /&gt;
Ce que nous voulons faire nous: Un T-shirt permettant à la fois de calculer les performances sportives mais aussi d'avoir un suivi sur notre santé et pourquoi pas faire en sorte de réguler la température du corps lors d'un effort..&lt;br /&gt;
&lt;br /&gt;
-&amp;gt;Calculer le nombre de pas (Podomètre)&lt;br /&gt;
&lt;br /&gt;
-&amp;gt;Calculer une distance, la vitesse, la position sur une carte? (GPS)&lt;br /&gt;
&lt;br /&gt;
-&amp;gt;Calculer la fréquence cardiaque ? (Cardiofréquencemètre)&lt;br /&gt;
&lt;br /&gt;
-&amp;gt;Afficher la fréquence cardiaque sur LED&lt;br /&gt;
&lt;br /&gt;
-&amp;gt;Mesurer la température du corps&lt;br /&gt;
&lt;br /&gt;
-&amp;gt;Transférer toutes ses informations sur l'application mobile (Android)&lt;br /&gt;
&lt;br /&gt;
== '''Etapes du Projet''' ==&lt;br /&gt;
&lt;br /&gt;
*Partie électronique&lt;br /&gt;
** Définition des différents modules (Capteurs de températures, accéléromètre..)&lt;br /&gt;
** Connecter et programmer les différents modules au microprocesseur Lilypad&lt;br /&gt;
** Créer un programme pour ordonnancer les différents modules&lt;br /&gt;
** Connecter le module Bluetooth BLE et le configurer&lt;br /&gt;
** Intégrer les composants au tee-shirt&lt;br /&gt;
&lt;br /&gt;
*Partie informatique&lt;br /&gt;
** Créer une application Android simple (Par exemple HelloWorld)&lt;br /&gt;
** Importer l'application sur smart-phone&lt;br /&gt;
** Faire un menu et sous-menu [http://a-renouard.developpez.com/tutoriels/android/menu-sous-menu/]&lt;br /&gt;
** Comprendre les Services [http://nbenbourahla.developpez.com/tutoriels/android/services-sous-android/], les maîtriser: [http://blog.developpez.com/ndruet/p8571/android/creation_de_service]&lt;br /&gt;
** Comprendre les vues sous Android [http://nbenbourahla.developpez.com/tutoriels/android/introduction-vues-sous-android/]&lt;br /&gt;
** Comment utiliser SQLite sur Android [http://a-renouard.developpez.com/tutoriels/android/sqlite/]&lt;br /&gt;
** Créer les programmes principaux:&lt;br /&gt;
*** Intégration Google Map sur Android (pour utiliser le GPS) [http://michel-dirix.developpez.com/tutoriels/android/integration-google-maps-android/]&lt;br /&gt;
*** Ajouter les protocoles nécessaires pour communiquer en Bluetooth [http://sberfini.developpez.com/tutoriaux/android/bluetooth/], utilisation du NFC [http://sberfini.developpez.com/tutoriaux/android/nfc/bluetooth/]&lt;br /&gt;
*** Une vue pour afficher les différentes applications (activités)&lt;br /&gt;
*** Une activité pour gérer l'affichage des informations envoyé depuis le microprocesseur&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Matériel possédé ===&lt;br /&gt;
&lt;br /&gt;
* LilyPad Accelerometer ADXL335 [https://www.sparkfun.com/products/9267] [&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;fourni le 28/1/2015&amp;lt;/span&amp;gt;]&lt;br /&gt;
&lt;br /&gt;
* LilyPad Temperature Sensor [https://www.sparkfun.com/products/8777] [&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;fourni le 28/1/2015&amp;lt;/span&amp;gt;]&lt;br /&gt;
&lt;br /&gt;
* Arduino Lilypad Atmega 328P [http://arduino.cc/en/Main/ArduinoBoardLilyPad] [&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;fourni le 28/1/2015&amp;lt;/span&amp;gt;]&lt;br /&gt;
&lt;br /&gt;
* SparkFun FTDI Basic Breakout - 3.3V [https://www.sparkfun.com/products/9873] [&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;fourni le 28/1/2015&amp;lt;/span&amp;gt;]&lt;br /&gt;
&lt;br /&gt;
* Une dizaine de LilyPad LED Red [https://www.sparkfun.com/products/10044] [&amp;lt;span style=&amp;quot;color: lightgreen;&amp;quot;&amp;gt;LEDs LilyPad blanches disponibles&amp;lt;/span&amp;gt;]&lt;br /&gt;
&lt;br /&gt;
* Interrupteur [&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;fourni le 28/1/2015&amp;lt;/span&amp;gt;]&lt;br /&gt;
&lt;br /&gt;
* BLE nRF8001 [http://www.nordicsemi.com/eng/Products/Bluetooth-Smart-Bluetooth-low-energy/nRF8001] [&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;1 fourni le 9/2/2015&amp;lt;/span&amp;gt;]&lt;br /&gt;
&lt;br /&gt;
=== Matériel nécessaire === &lt;br /&gt;
&lt;br /&gt;
* Olimex platine ECG&lt;br /&gt;
&lt;br /&gt;
* [&amp;lt;span style=&amp;quot;color: blue;&amp;quot;&amp;gt; Du fil conducteur en bobine &amp;lt;/span&amp;gt;]&lt;br /&gt;
&lt;br /&gt;
== '''Tableau de bord''' ==&lt;br /&gt;
&lt;br /&gt;
===Semaine 1===&lt;br /&gt;
&lt;br /&gt;
Nous avons fait le point sur les capacités qu'aura notre t-shirt connecté.&lt;br /&gt;
&lt;br /&gt;
Après discussion avec M.Boë nous avons décidé d'utiliser dans un premier temps deux capteurs, Accéléromètre et capteur de température (emprunté à M.Redon), pour nous concentrer plus rapidement sur les deux problèmes majeur que nous allons rencontrer, celle de la communication entre l'arduino (Lilypad), le BLE et l'application androïde du téléphone et celle de l'énergie où le problème réside dans l'alimentation système embarqué. Nous devons trouver un composant à la fois petit, pour pouvoir être porté, et assez puissant pour délivrer de l'énergie au microprocesseur pendant plusieurs mois. Nous devons nous demander quand éteindre le microcontrôleur et à quel moment le Bluetooth sera connecté. Nous allons pour cela ajouter un interrupteur glissière au tee-shirt.&lt;br /&gt;
&lt;br /&gt;
Nous nous sommes informés sur le bluetooth de type BLE :&lt;br /&gt;
&lt;br /&gt;
Histoire du Bluetooth: [http://www.frandroid.com/maison-connectee/232622_dossier-bluetooth-fonctionnement-interet-les-objets-connectes]&lt;br /&gt;
&lt;br /&gt;
Projet de conception d'une liaison bluetooh 2.0 : [file:///tmp/P12Rap_bluetooth.pdf]&lt;br /&gt;
&lt;br /&gt;
Protocole Bluetooth: SIG (Special Interest Group)&lt;br /&gt;
&lt;br /&gt;
'''Bluetooth 2.0 :'''&lt;br /&gt;
&lt;br /&gt;
Appairage facile et sécurisé : le SSP (Secure Simple Pairing)&lt;br /&gt;
&lt;br /&gt;
Protocole?: EDR (Enhanced Data Rate)&lt;br /&gt;
&lt;br /&gt;
'''Bluetooth 3.0: '''&lt;br /&gt;
&lt;br /&gt;
Protocole: HS (High Speed)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Bluetooth 4.0'''&lt;br /&gt;
&lt;br /&gt;
Conception d'un module bluetooth : [http://www.digikey.fr/fr/articles/techzone/2014/jun/how-to-build-low-power-wireless-systems-using-bluetooth-smart-4]&lt;br /&gt;
&lt;br /&gt;
Classic Bluetooth: Regroupe les versions 1.0 -&amp;gt; 3.0&lt;br /&gt;
&lt;br /&gt;
Protocole: LE (Bluetooth Low Energy)  --&amp;gt; Réduit fortement la consommation de la puce Bluetooth avec un protocole différent&lt;br /&gt;
&lt;br /&gt;
Dans le 4.0 le constructeur peut décider d'implémenter deux modes: Bluetooth Low Energy seul (single mode) ou avec le Classic Bluetooth (dual mode) qui lui permet de conserver la compatibilité avec les autres appareils.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Semaine 2===&lt;br /&gt;
&lt;br /&gt;
Nous avons établi une connexion avec l'Atmega 328P et communiqué avec l'accéléromètre et le capteur de température. Malheureusement le capteur de température LyliPad n'est pas très précis, nous avons donc opté pour un capteur DS18B20, c'est un capteur 1-wire. Nous avons donc commencé par comprendre cette technologie puis grâce à un programme trouvé sur internet, nous essayons de l'adapter à notre microprocesseur lillypad pour communiquer avec le DS18B20.&lt;br /&gt;
&lt;br /&gt;
Parallèlement nous avons débuté la programmation d'application Android. Nous utilisons pour cela l'IDE Eclipse. Nous rencontrons actuellement des problèmes d'environnement pour compiler un programme Android simple comme &amp;quot;Hello World&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===Semaine 3===&lt;br /&gt;
*'''Partie Hardware'''&lt;br /&gt;
**Toujours des problèmes avec le capteur de température DS18B20. Nous arrivons à envoyer le programme C sur l'arduino mais la communication avec le capteur ne se fait pas. Nous avons donc décortiqué le programme et comprendre son fonctionnement.&lt;br /&gt;
&lt;br /&gt;
*'''Partie application'''&lt;br /&gt;
**Après de nombreux bug d’installation des plateformes (Eclipse, JDK, SDK, Bibliothèque etc..) nous réussissons à lancer l'application &amp;quot;HelloWorld&amp;quot; dans un émulateur de téléphone Android. Nous pouvons maintenant nous concentrer vers la programmation orienté objet Android et détailler plus spécifiquement les étapes à réaliser avant de pouvoir coder notre programme final (cf &amp;quot;Etapes du Projet&amp;quot;).&lt;br /&gt;
Notions à connaitre:&lt;br /&gt;
*Introduction aux ressources Android (les éléments qui s'afficheront à l'écran ou avec lesquels l'utilisateur pourra interagir [http://openclassrooms.com/courses/creez-des-applications-pour-android/les-ressources-2])&lt;br /&gt;
*Introduction à la notion de &amp;quot;Style&amp;quot; et de &amp;quot;Thèmes&amp;quot; [http://cyril-mottier.developpez.com/tutoriels/android/introduction-styles-themes/]&lt;br /&gt;
&lt;br /&gt;
===Semaine 4===&lt;br /&gt;
*'''Partie Hardware'''&lt;br /&gt;
** Nous arrivons à communiquer avec le capteur DS18B20. Notre programme détecte le capteur, arrive à l'initialiser mais nous avons à présent des problèmes d'envoi de données pour connaitre la température.&lt;br /&gt;
&lt;br /&gt;
*'''Partie application'''&lt;br /&gt;
** Nous essayons dans un premier temps d'afficher un menu simple dans lequel nous pouvons naviguer [http://www.tutomobile.fr/faire-des-menus-et-sous-menus-tutoriel-android-n%C2%B012/27/07/2010/] cependant nous rencontrons des problèmes de librairies, en effet nous ne disposons pas de toutes les images publique qu'Android nous offre [http://developer.android.com/guide/topics/resources/drawable-resource.html], nous devrons donc ajouter les images nous même [http://androiddrawableexplorer.appspot.com/] dans la librairie..&lt;br /&gt;
&lt;br /&gt;
===Semaine 5===&lt;br /&gt;
*'''Partie Hardware'''&lt;br /&gt;
**Toujours des problèmes de communication avec le capteur de température. Le programme avec l'IDE fonctionne mais nous ne comprenons pas pourquoi cela ne marche pas avec le programme en c.&lt;br /&gt;
&lt;br /&gt;
*'''Partie application'''&lt;br /&gt;
Nous avons réussis à afficher un menu simple dans lequel figure quelques boutons qui nous serviront à naviguer entre les activités:&lt;br /&gt;
** Entrainement&lt;br /&gt;
** Historique&lt;br /&gt;
** Paramètres&lt;br /&gt;
** Connexion&lt;br /&gt;
&lt;br /&gt;
Voici à quoi ressemble notre menu pour le moment:&lt;br /&gt;
[[Fichier:Main activity Avant.png|250px|gauche]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Définition des différentes activités:====&lt;br /&gt;
=====L'activité &amp;quot;Entrainement&amp;quot;=====&lt;br /&gt;
Une fois connecté via Bluetooth grâce à l'activité &amp;quot;Connexion&amp;quot;, l'utilisateur devra appuyer sur le bouton &amp;quot;Start&amp;quot; pour commencer son entrainement. L'application affichera en temps réel les données envoyées depuis le-t-shirt et indiquera à l'utilisateur le temps qui s'est écoulé. En background elle écrira dans un fichier texte situé dans un dossier spécifique afin de traiter ces données par la suite.&lt;br /&gt;
Lorsque l'utilisateur termine son entrainement il devra appuyer sur le bouton &amp;quot;Stop&amp;quot;, une fenêtre s'ouvrira et lui demandera s'il souhaite enregistrer ou supprimer les données de l'entrainement qu'il vient d'effectuer. S'il décide d'enregistrer il sera automatiquement redirigé vers l'activité &amp;quot;Stats&amp;quot; (non pas accessible depuis le menu) qui affichera le bilan de son entrainement.&lt;br /&gt;
&lt;br /&gt;
=====L'activité &amp;quot;Historique&amp;quot;=====&lt;br /&gt;
Recense tout  les entrainements effectués par l'utilisateur. De cette activité il pourra décider de supprimer ses anciens entrainements (cela supprimera le fichier texte associé en background) ou bien d'en afficher ses statistiques (&amp;quot;Activité Stats&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
=====L'activité &amp;quot;Paramètre&amp;quot;=====&lt;br /&gt;
Activité optionnel, servira à récupérer certaines informations sur l'utilisateur qui pourrait nous être utile pour certains calculs. Comme le nombre de calories dépensé lors de l'entrainement ou autre... Nous n'avons pas encore défini les calculs que nous effectuerons&lt;br /&gt;
&lt;br /&gt;
=====L'activité &amp;quot;Connexion&amp;quot;=====&lt;br /&gt;
Servira à connecter l'application au T-Shirt via Bluetooth&lt;br /&gt;
&lt;br /&gt;
===Semaine 6===&lt;br /&gt;
*'''Partie Hardware'''&lt;br /&gt;
** Nous avons essayé de télécharger d'autres programmes pour communiquer avec le capteur de température mais sans aucun succès. Nous avons donc essayé de traduire le programme de l'IDE (écrit en c++) en c mais toujours pas de résultat. Nous avons donc décidé de laisser tomber ce capteur 1-WIRE et de prendre un capteur analogique, le TMP36. Nous sommes donc passés à la communication Bluetooth sur le lilypad avec le BLE nrf8001.&lt;br /&gt;
&lt;br /&gt;
*'''Partie application'''&lt;br /&gt;
**Nous avons configuré l'activité &amp;quot;Paramètre&amp;quot;. Elle demande quelques informations à l'utilisateur comme son Nom, son âge, sa taille et son poids, utile pour calculer certains paramètres qui reste toujours à définir. (Savoir son nom ne nous est pas vraiment utile, il sert à créer une affinité entre l'utilisateur et l'application)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:ParamPref.png|gauche]] [[Fichier:ParamPref Nom.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Semaine 7===&lt;br /&gt;
*'''Partie Hardware'''&lt;br /&gt;
** Après avoir étudié le fonctionnement du BLE, nous avons téléchargé un code source sur internet pour l'IDE d'arduino que nous avons retranscrit en C. Le programme comportait à ce moment beaucoup de bugs que nous devions résoudre.&lt;br /&gt;
&lt;br /&gt;
*'''Partie application'''&lt;br /&gt;
** Découverte et apprentissage des fonctions permettant la communication Bluetooth.&lt;br /&gt;
&lt;br /&gt;
Nous avons rajouté une &amp;quot;actionbar&amp;quot; et également redéfini l'affichage du menu qui maintenant est plus sobre:&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Menu apres.png|250px]]&lt;br /&gt;
&lt;br /&gt;
===Semaine 8=== &lt;br /&gt;
*'''Partie Hardware'''&lt;br /&gt;
** Après avoir débogué la communication I2C sur le programme arduino et les quelques autres bogs, nous avons pu commencer à utiliser la communication Bluetooth avec l'application téléphone. Nous avons donc établi un protocole de communication entre l'application et le lilypad pour pouvoir communiquer.&lt;br /&gt;
*'''Partie application'''&lt;br /&gt;
** Problème avec la connexion Bluetooth, certaines fonctions ne sont pas reconnues par l'IDE. Cela est peut être dû à une mauvaise installation des bibliothèques? Nous avons donc transféré notre projet vers un nouveaux projet qui maintenant compile, allez savoir comment..&lt;br /&gt;
&lt;br /&gt;
===Semaine 9===&lt;br /&gt;
*'''Partie Hardware'''&lt;br /&gt;
** Premier essai d'un programme pour mettre le lilypad en mode veille lorsqu'aucun appareil n'est connecté au Bluetooth. Reste à faire des tests de consommation électriques pour valider le code.&lt;br /&gt;
&lt;br /&gt;
*'''Partie application'''&lt;br /&gt;
** Premiers test de la connexion Bluetooth effectué. Nous avons abandonné l'idée d'utiliser l'émulateur de téléphone car il ne supporte pas le Bluetooth. Nous arrivons à communiquer avec le T-shirt, nous pouvons émettre et recevoir des caractères. Pour une question pratique la connexion ne se fera plus depuis le bouton &amp;quot;Connexion&amp;quot; du menu mais directement dans l'activité &amp;quot;Entrainement&amp;quot;. Lorsque l'utilisateur appuiera sur ce bouton depuis le menu, l'application lui demandera de se connecter au T-shirt. Une fois connecté le bouton &amp;quot;Start&amp;quot; apparait puis la communication débutera lorsqu'il appuiera dessus.&lt;br /&gt;
&lt;br /&gt;
===Semaine 10===&lt;br /&gt;
*'''Partie Hardware'''&lt;br /&gt;
** Ajout du capteur de température sur le lilypad pour envoyer les données. Nous avons également testé de nouveau la communication Bluetooth suite à une modification de l'application.&lt;br /&gt;
&lt;br /&gt;
*'''Partie application'''&lt;br /&gt;
**Définition de l'activité &amp;quot;Historique&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
Cette activité va scanner tous les fichiers créés par l'utilisateur et les afficher à l'aide d'une listView [http://www.tutomobile.fr/personnaliser-une-listview-tutoriel-android-n%C2%B07/04/07/2010/]. Lorsque l'on cliquera sur l'un des fichiers l'activité &amp;quot;Stats&amp;quot; se lancera. Nous avons également configuré une AlertDialog [http://www.tutomobile.fr/personnaliser-un-alertdialog-tutoriel-android-n%C2%B020/04/11/2010/] qui s'affiche lorsque l'on clique longuement sur un Item, celle-ci demande alors si l'on veut supprimer ou afficher les statistiques.&lt;br /&gt;
&lt;br /&gt;
Voici à quoi ressemble cette activité:&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Historique.png|250px]] [[Fichier:Historique possibilite de supprimer les fichier.png|250px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous devons encore déterminer les détails que chaque Item aura et ajouter un TextView à la AlertDialog qui indiquera quelle Entrainement a été sélectionné.&lt;br /&gt;
&lt;br /&gt;
===Semaine 11===&lt;br /&gt;
*'''Partie Hardware'''&lt;br /&gt;
** Ajout de l'accéléromètre pour réaliser le podomètre. C'est un accéléromètre numérique (MMA8452Q), cet accéléromètre va nous permettre de générer une interruption à chaque fois qu'une accélération est détectée. Quelques petits problèmes lors de l'initialisation de celui ci mais les problèmes ont été résolu rapidement. Nous allons pouvoir commencer la construction du tee-shirt.&lt;br /&gt;
[[Fichier:Mma8452q.jpg|200px]]&lt;br /&gt;
*'''Partie application'''&lt;br /&gt;
**Définition de l'activité &amp;quot;Stats&amp;quot;.&lt;br /&gt;
Cette activité va lire tout le fichier écris au préalable lors de l'entrainement, calculera des moyennes et permettra d'afficher des graphiques de certains paramètres en fonction du temps, pour cela nous avons utilisé la librairie GraphView, disponible via ce lien: [http://www.android-graphview.org/]&lt;br /&gt;
&lt;br /&gt;
En voici un premier jet, dans cet exemple nous avons affiché le graphique de la fréquence cardiaque en fonction du temps.&lt;br /&gt;
:&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Stats 2.png|250px]]&lt;br /&gt;
&lt;br /&gt;
===Semaine 12===&lt;br /&gt;
*'''Partie Hardware'''&lt;br /&gt;
*Nous avons cousu les composants électroniques sur le T-shirt&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Exterrieur.jpg|250px]]  [[Fichier:Interrieur.jpg|265px]] [[Fichier:Exterrieur Lily.jpg|250px]] [[Fichier:Interrieur Lily.jpg|235px]]&lt;br /&gt;
&lt;br /&gt;
*Il ne reste qu'a effectuer des tests sur le code globale avec le tee-shirt, quelques problèmes sur les connections entre les fils et les composants mais cela fonctionne. Encore des tests à effectuer sur la consommation électrique de l'ensemble en mode veille et en mode connecté. Nous avons ajouté une poche sur le tee-shirt pour pouvoir y placer une batterie.&lt;br /&gt;
&lt;br /&gt;
*'''Partie application'''&lt;br /&gt;
**Redéfinition du Menu&lt;br /&gt;
Nous avons apporté quelques modifications à l'application, désormais le menu ne comporte plus le bouton connexion. La connexion Bluetooth sera établie lorsque l'utilisateur sélectionnera le bouton &amp;quot;Entrainement&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Menu.png|250px]]&lt;br /&gt;
&lt;br /&gt;
* Entrainement:&lt;br /&gt;
Si l'utilisateur n'a pas activé son bluetooth l'application lui demande automatiquement de l'activer, s'il ne le fait pas il ne pourra faire l'entrainement. Il devra ensuite sélectionner le T-Shirt pour s'y connecter, une fois la connexion établi l'entrainement pourra commencer. Il pourra alors constater en temps réels les données envoyé par le T-shirt, c'est à dire [...]&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Entrainement demande de connection bluetooth.png|250px]] [[Fichier:Entrainement Start.png|250px]] [[Fichier:Entrainement 1km.png|250px]] [[Fichier:Entrainement fini.png|250px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Redéfinition de la page Historique&lt;br /&gt;
Il est désormais possible de sélectionner plusieurs éléments afin de les supprimer en même temps. Nous avons modifié l'affichage, seul la date, l'heure ainsi que le numéro de l'entrainement sont affiché.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Historique 2.png|250px]] [[Fichier:Historique selection.png|250px]] [[Fichier:Historique suppression.png|250px]]&lt;br /&gt;
&lt;br /&gt;
* Ajout d'information sur la page &amp;quot;Détails&amp;quot;&lt;br /&gt;
L'utilisateur peut désormais connaitre la distance parcouru lors de son entrainement (en supposant qu'un pas vaut 70cm). Il peut également passer d'un graphique à l'autre pour voir l'évolution de la température de son corps ou de sa fréquence cardiaque lors de l'entrainement. Nous affichons maintenant la vraie date (et non le nom du fichier), nous indiquons aussi l'heure de début de l'entrainement.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Détails Freq.png|250px]] [[Fichier:Détails temp.png|250px]]&lt;br /&gt;
&lt;br /&gt;
== Liens ==&lt;br /&gt;
&lt;br /&gt;
RFDUINO [www.rfduino.com/] : RFD22102 RFduino DIP [http://www.rfduino.com/product/rfd22102-rfduino-dip/index.html]&lt;br /&gt;
&lt;br /&gt;
Nordic rf8001 (BLE) [http://www.nordicsemi.com/eng/Products/Bluetooth-Smart-Bluetooth-low-energy/nRF8001]&lt;br /&gt;
&lt;br /&gt;
Arduino SHIELD-EKG-EMG: [https://www.olimex.com/Products/Duino/Shields/SHIELD-EKG-EMG/]&lt;br /&gt;
&lt;br /&gt;
Électrocardiogramme [http://fab.cba.mit.edu/classes/863.12/people/Adam.Marblestone/AHM_week05.html]&lt;br /&gt;
&lt;br /&gt;
LED [http://www.adafruit.com/] --&amp;gt; Fil de LED Bleu [http://www.adafruit.com/products/895] ---&amp;gt; Lot de 25 LED [http://www.adafruit.com/products/388] ---&amp;gt; [http://www.adafruit.com/products/780]&lt;br /&gt;
&lt;br /&gt;
GraphView: [https://github.com/jjoe64/GraphView]&lt;br /&gt;
&lt;br /&gt;
Library for DS18B20 [http://sourceforge.net/projects/davidegironi/files/avr-lib/avr_lib_ds18b20_01b.zip/download]&lt;br /&gt;
&lt;br /&gt;
== Tuto ==&lt;br /&gt;
&lt;br /&gt;
Tuto arduino : [https://tutoarduino.com/choix-tutoriels/]&lt;br /&gt;
&lt;br /&gt;
Tuto capteur de température: [https://tutoarduino.com/portfolio-items/tpbd2-2-detecteur-de-temperature/]&lt;br /&gt;
&lt;br /&gt;
Tuto Bluetooth: [https://tutoarduino.com/portfolio-items/le-bluetooth/] connexion app [http://nononux.free.fr/index.php?page=elec-brico-bluetooth-android-microcontroleur]&lt;br /&gt;
&lt;br /&gt;
Tuto Android: [http://android.developpez.com/cours/] [https://sites.google.com/site/redezzahir/coursJAVA/tp10] [http://sampleprogramz.com/android/] fiche: [http://www.iutbayonne.univ-pau.fr/~dalmau/documents/cours/android/Guide%20TPs%20Android%20avec%20Eclipse.pdf]&lt;br /&gt;
&lt;br /&gt;
Tuto BLE Android: [http://developer.android.com/guide/topics/connectivity/bluetooth-le.html]&lt;br /&gt;
&lt;br /&gt;
Tuto ListView: [http://www.ltm.fr/creez-une-vue-en-liste-listview-avec-texte-image/]  GraphView: [http://www.android-graphview.org/download--getting-started.html]&lt;br /&gt;
&lt;br /&gt;
Tuto GPS android: [http://www.tutomobile.fr/geolocalisation-grace-au-gps-ou-au-reseau-mobile-tutoriel-android-n%C2%B015/13/08/2010/]&lt;br /&gt;
&lt;br /&gt;
== Fin du Projet ==&lt;br /&gt;
&lt;br /&gt;
===Vidéo de présentation===&lt;br /&gt;
&lt;br /&gt;
Vidéo du projet disponible via ce [https://drive.google.com/folderview?id=0ByMLCar3e2e0fkxidU11cjA5Qy16MU8zXzBtTUFNQ3BvWmtYUWVjSm5ZVHBEdFh1eVNXaDQ&amp;amp;usp=sharing_eid lien]&lt;br /&gt;
&lt;br /&gt;
===Rapport===&lt;br /&gt;
&lt;br /&gt;
Vous pouvez trouver notre rapport de stage ici.&lt;br /&gt;
&lt;br /&gt;
===Fichiers Codes===&lt;br /&gt;
&lt;br /&gt;
Vous pouvez accéder au code Java de l'application Android ici et au code C du microprocesseur ici.&lt;br /&gt;
&lt;br /&gt;
Code C pour le microprocesseur : [[Fichier:BLE.zip]]&lt;/div&gt;</summary>
		<author><name>Vpiat</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Fichier:BLE.zip&amp;diff=21143</id>
		<title>Fichier:BLE.zip</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Fichier:BLE.zip&amp;diff=21143"/>
				<updated>2015-05-11T20:02:57Z</updated>
		
		<summary type="html">&lt;p&gt;Vpiat : Bibliothèque Arduino pour la communication BLE&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Bibliothèque Arduino pour la communication BLE&lt;/div&gt;</summary>
		<author><name>Vpiat</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Fichier:Exterrieur_Lily.jpg&amp;diff=20795</id>
		<title>Fichier:Exterrieur Lily.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Fichier:Exterrieur_Lily.jpg&amp;diff=20795"/>
				<updated>2015-05-08T17:44:34Z</updated>
		
		<summary type="html">&lt;p&gt;Vpiat : a téléversé une nouvelle version de « Fichier:Exterrieur Lily.jpg »&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Vpiat</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=V%C3%AAtements_intelligents&amp;diff=20794</id>
		<title>Vêtements intelligents</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=V%C3%AAtements_intelligents&amp;diff=20794"/>
				<updated>2015-05-08T17:35:33Z</updated>
		
		<summary type="html">&lt;p&gt;Vpiat : /* Semaine 12 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Cahier des Charges==&lt;br /&gt;
===Présentation générale du projet===&lt;br /&gt;
&lt;br /&gt;
=== Objectif ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Concevoir un système d'interaction avec des objets connectés sur les vêtements ou le corps.&lt;br /&gt;
&lt;br /&gt;
=== '''Description du projet''' ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Les systèmes embarqués sur les humains commencent à se développer (lunettes Google, montres connectées).&lt;br /&gt;
&lt;br /&gt;
Nous proposons ici de réaliser une plateforme basée sur la '''technologie BLE''' (Bluetooth Low Energy ou Bluetooth 4.0).&lt;br /&gt;
&lt;br /&gt;
Deux parties seront mise en oeuvre :&lt;br /&gt;
    &lt;br /&gt;
* un système embarqué compact permettant de recevoir des information et en transmettre ;&lt;br /&gt;
* une application Android permettant de communiquer avec le système.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Le système sera intégré sur un t-shirt en utilisant notamment la machine à coudre numérique disponible au Fabricarium de Polytech Lille.&lt;br /&gt;
&lt;br /&gt;
===Contexte===&lt;br /&gt;
&lt;br /&gt;
==== Informations à traiter ====&lt;br /&gt;
&lt;br /&gt;
Pour que notre projet soit intéressant, aux yeux des consommateurs, nous devons définir l'utilité que pourrait avoir un vêtement connecté.&lt;br /&gt;
Notre application ne doit pas être un simple gadget mais un objet qui semble utile et faire en sorte qu'il soit indispensable dans le futur. &amp;quot;Il faut créer le besoin si l'on veut vendre un objet et faire du profit.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Dans un premier temps nous devons faire une étude du marché pour savoir ce qui a déjà été fait. &lt;br /&gt;
Nous devons savoir quelles types d'informations les vêtements et objets connectés transmettent, pour quels usages et pour quels publics.&lt;br /&gt;
&lt;br /&gt;
====Le Sport====&lt;br /&gt;
&lt;br /&gt;
La plupart des objets connectés à l'Homme sont utilisés pour l'informer de ses performances physiques: &lt;br /&gt;
Combien de kilomètres ils ont parcouru, combien de pas ont été effectués, combien de calories ont été perdues.&lt;br /&gt;
&lt;br /&gt;
Ce sont principalement des performances liées à la marche et la course à pied. De nouveaux objets connectés ont vu récemment le jour, notamment les bracelets connectés permettant de récolter des informations sur les nageurs, toujours dans le but d'avoir un suivi sur ses performances (nombres de mètres nagés par rapport à un certain temps).&lt;br /&gt;
&lt;br /&gt;
====Santé et bien être====&lt;br /&gt;
&lt;br /&gt;
Encore en pleine expansion que très peu d'objets connectés se sont intéressés au domaine de la santé: ici un exemple de t-shirt connecté permettant de contrôler le rythme cardiaque: [http://pulse.edf.com/fr/les-textiles-intelligents-peuvent-surveiller-notre-coeur?gclid=Cj0KEQiAiamlBRCgj83PiYm6--gBEiQArnojD4QntiVq9cLZeZDRGqMckMIQzkr6RH3cFxJnxJk0tE0aApoA8P8HAQ]&lt;br /&gt;
&lt;br /&gt;
Beaucoup d'application ont déjà vu le jour: [http://www.techniques-ingenieur.fr/actualite/materiaux-innovants-nano-thematique_6342/ces-textiles-intelligents-qui-prennent-soin-de-nous-article_286868/]&lt;br /&gt;
&lt;br /&gt;
Quelles sont les applications que l'on pourrait faire? Quels suivis sont à faire pour quels types de maladie etc..?&lt;br /&gt;
&lt;br /&gt;
====La régulation de température====&lt;br /&gt;
&lt;br /&gt;
Grâce aux fibres électroniques tissées il est possible de chauffer un t-shirt ou de le refroidir cela pourrait se régler en fonction de la température du corps ou bien par simple commande de l'utilisateur (cela pourrait s'avérer très utile avec le réchauffement climatique qui est en train d'arriver, winter is comming..).&lt;br /&gt;
&lt;br /&gt;
===Notre Projet===&lt;br /&gt;
&lt;br /&gt;
Ce que nous voulons faire nous: Un T-shirt permettant à la fois de calculer les performances sportives mais aussi d'avoir un suivi sur notre santé et pourquoi pas faire en sorte de réguler la température du corps lors d'un effort..&lt;br /&gt;
&lt;br /&gt;
-&amp;gt;Calculer le nombre de pas (Podomètre)&lt;br /&gt;
&lt;br /&gt;
-&amp;gt;Calculer une distance, la vitesse, la position sur un carte? (GPS)&lt;br /&gt;
&lt;br /&gt;
-&amp;gt;Calculer la fréquence cardiaque ? (Cardiofréquencemètre)&lt;br /&gt;
&lt;br /&gt;
-&amp;gt;Afficher la fréquence cardiaque sur LED&lt;br /&gt;
&lt;br /&gt;
-&amp;gt;Mesurer la température du corps&lt;br /&gt;
&lt;br /&gt;
-&amp;gt;Transférer toutes ses informations sur l'application mobile (Android)&lt;br /&gt;
&lt;br /&gt;
== '''Etapes du Projet''' ==&lt;br /&gt;
&lt;br /&gt;
*Partie électronique&lt;br /&gt;
** Définition des différents modules (Capteurs de températures, accéléromètre..)&lt;br /&gt;
** Connecter et programmer les différents modules au microprocesseur Lilypad&lt;br /&gt;
** Créer un programme pour ordonnancer les différents modules&lt;br /&gt;
** Connecter le module Bluetooth BLE et le configurer&lt;br /&gt;
** Intégrer les composants au tee-shirt&lt;br /&gt;
&lt;br /&gt;
*Partie informatique&lt;br /&gt;
** Créer une application Android simple (Par exemple HelloWorld)&lt;br /&gt;
** Importer l'application sur smart-phone&lt;br /&gt;
** Savoir faire un menu et sous-menu [http://a-renouard.developpez.com/tutoriels/android/menu-sous-menu/]&lt;br /&gt;
** Comprendre les Services [http://nbenbourahla.developpez.com/tutoriels/android/services-sous-android/], les maîtriser: [http://blog.developpez.com/ndruet/p8571/android/creation_de_service]&lt;br /&gt;
** Comprendre les vues sous Android [http://nbenbourahla.developpez.com/tutoriels/android/introduction-vues-sous-android/]&lt;br /&gt;
** Comment utiliser SQLite sur Android [http://a-renouard.developpez.com/tutoriels/android/sqlite/]&lt;br /&gt;
** Créer les programmes principaux:&lt;br /&gt;
*** Intégration Google Map sur Android (pour utiliser le GPS) [http://michel-dirix.developpez.com/tutoriels/android/integration-google-maps-android/]&lt;br /&gt;
*** Ajouter les protocoles nécessaires pour communiquer en Bluetooth [http://sberfini.developpez.com/tutoriaux/android/bluetooth/], utilisation du NFC [http://sberfini.developpez.com/tutoriaux/android/nfc/bluetooth/]&lt;br /&gt;
*** Une vue pour afficher les différentes applications (activités)&lt;br /&gt;
*** Une activité pour gérer l'affichage des informations envoyé depuis le microprocesseur&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Matériel possédé ===&lt;br /&gt;
&lt;br /&gt;
* LilyPad Accelerometer ADXL335 [https://www.sparkfun.com/products/9267] [&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;fourni le 28/1/2015&amp;lt;/span&amp;gt;]&lt;br /&gt;
&lt;br /&gt;
* LilyPad Temperature Sensor [https://www.sparkfun.com/products/8777] [&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;fourni le 28/1/2015&amp;lt;/span&amp;gt;]&lt;br /&gt;
&lt;br /&gt;
* Arduino Lilypad Atmega 328P [http://arduino.cc/en/Main/ArduinoBoardLilyPad] [&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;fourni le 28/1/2015&amp;lt;/span&amp;gt;]&lt;br /&gt;
&lt;br /&gt;
* SparkFun FTDI Basic Breakout - 3.3V [https://www.sparkfun.com/products/9873] [&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;fourni le 28/1/2015&amp;lt;/span&amp;gt;]&lt;br /&gt;
&lt;br /&gt;
* Une dizaine de LilyPad LED Red [https://www.sparkfun.com/products/10044] [&amp;lt;span style=&amp;quot;color: lightgreen;&amp;quot;&amp;gt;LEDs LilyPad blanches disponibles&amp;lt;/span&amp;gt;]&lt;br /&gt;
&lt;br /&gt;
* Interrupteur [&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;fourni le 28/1/2015&amp;lt;/span&amp;gt;]&lt;br /&gt;
&lt;br /&gt;
* BLE nRF8001 [http://www.nordicsemi.com/eng/Products/Bluetooth-Smart-Bluetooth-low-energy/nRF8001] [&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;1 fourni le 9/2/2015&amp;lt;/span&amp;gt;]&lt;br /&gt;
&lt;br /&gt;
=== Matériel nécessaire === &lt;br /&gt;
&lt;br /&gt;
* Olimex platine ECG&lt;br /&gt;
&lt;br /&gt;
* [&amp;lt;span style=&amp;quot;color: blue;&amp;quot;&amp;gt; Du fil conducteur en bobine &amp;lt;/span&amp;gt;]&lt;br /&gt;
&lt;br /&gt;
== '''Tableau de bord''' ==&lt;br /&gt;
&lt;br /&gt;
===Semaine 1===&lt;br /&gt;
&lt;br /&gt;
Nous avons fait le point sur les capacités qu'aura notre t-shirt connecté.&lt;br /&gt;
&lt;br /&gt;
Après discussion avec M.Boë nous avons décidé d'utiliser dans un premier temps deux capteurs, Accéléromètre et capteur de température (emprunté à M.Redon), pour nous concentrer plus rapidement sur les deux problèmes majeur que nous allons rencontrer, celle de la communication entre l'arduino (Lilypad), le BLE et l'application androïde du téléphone et celle de l'énergie où le problème réside dans l'alimentation système embarqué. Nous devons trouver un composant à la fois petit, pour pouvoir être porté, et assez puissant pour délivrer de l'énergie au microprocesseur pendant plusieurs mois. Nous devons nous demander quand éteindre le micro-contrôleur et à quel moment le Bluetooth sera connecté. Nous allons pour cela ajouter un interrupteur glissière au tee-shirt.&lt;br /&gt;
&lt;br /&gt;
Nous nous sommes informés sur le bluetooth de type BLE :&lt;br /&gt;
&lt;br /&gt;
Histoire du Bluetooth: [http://www.frandroid.com/maison-connectee/232622_dossier-bluetooth-fonctionnement-interet-les-objets-connectes]&lt;br /&gt;
&lt;br /&gt;
Projet de conception d'une liaison bluetooh 2.0 : [file:///tmp/P12Rap_bluetooth.pdf]&lt;br /&gt;
&lt;br /&gt;
Protocole Bluetooth: SIG (Special Interest Group)&lt;br /&gt;
&lt;br /&gt;
'''Bluetooth 2.0 :'''&lt;br /&gt;
&lt;br /&gt;
Appairage facile et sécurisé : le SSP (Secure Simple Pairing)&lt;br /&gt;
&lt;br /&gt;
Protocole?: EDR (Enhanced Data Rate)&lt;br /&gt;
&lt;br /&gt;
'''Bluetooth 3.0: '''&lt;br /&gt;
&lt;br /&gt;
Protocole: HS (High Speed)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Bluetooth 4.0'''&lt;br /&gt;
&lt;br /&gt;
Conception d'un module bluetooth : [http://www.digikey.fr/fr/articles/techzone/2014/jun/how-to-build-low-power-wireless-systems-using-bluetooth-smart-4]&lt;br /&gt;
&lt;br /&gt;
Classic Bluetooth: Regroupe les versions 1.0 -&amp;gt; 3.0&lt;br /&gt;
&lt;br /&gt;
Protocole: LE (Bluetooth Low Energy)  --&amp;gt; Réduit fortement la consommation de la puce Bluetooth avec un protocole différent&lt;br /&gt;
&lt;br /&gt;
Dans le 4.0 le constructeur peut décider d'implémenter deux modes: Bluetooth Low Energy seul (single mode) ou avec le Classic Bluetooth (dual mode) qui lui permet de conserver la compatibilité avec les autres appareils.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Semaine 2===&lt;br /&gt;
&lt;br /&gt;
Nous avons établi une connexion avec l'Atmega 328P et communiqué avec l'accéléromètre et le capteur de température. Malheureusement le capteur de température LyliPad n'est pas très précis, nous avons donc opté pour un capteur DS18B20, c'est un capteur 1-wire. Nous avons donc commencé par comprendre cette technologie puis grâce à un programme trouvé sur internet, nous essayons de l'adapter à notre microprocesseur lillypad pour communiquer avec le DS18B20.&lt;br /&gt;
&lt;br /&gt;
Parallèlement nous avons débuté la programmation d'application Android. Nous utilisons pour cela l'IDE Eclipse. Nous rencontrons actuellement des problèmes d'environnement pour compiler un programme Android simple comme &amp;quot;Hello World&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===Semaine 3===&lt;br /&gt;
*'''Partie Hardware'''&lt;br /&gt;
**Toujours des problèmes avec le capteur de température DS18B20. Nous arrivons à envoyer le programme C sur l'arduino mais la communication avec le capteur ne se fait pas. Nous avons donc décortiqué le programme et comprendre son fonctionnement.&lt;br /&gt;
&lt;br /&gt;
*'''Partie application'''&lt;br /&gt;
**Après de nombreux bug d’installation des plateformes (Eclipse, JDK, SDK, Bibliothèque etc..) nous réussissons à lancer l'application &amp;quot;HelloWorld&amp;quot; dans un émulateur de téléphone Android. Nous pouvons maintenant nous concentrer vers la programmation orienté objet Android et détailler plus spécifiquement les étapes à réaliser avant de pouvoir coder notre programme final (cf &amp;quot;Etapes du Projet&amp;quot;).&lt;br /&gt;
Notions à connaitre:&lt;br /&gt;
*Introduction aux ressources Android (les éléments qui s'afficheront à l'écran ou avec lesquels l'utilisateur pourra interagir [http://openclassrooms.com/courses/creez-des-applications-pour-android/les-ressources-2])&lt;br /&gt;
*Introduction à la notion de &amp;quot;Style&amp;quot; et de &amp;quot;Thèmes&amp;quot; [http://cyril-mottier.developpez.com/tutoriels/android/introduction-styles-themes/]&lt;br /&gt;
&lt;br /&gt;
===Semaine 4===&lt;br /&gt;
*'''Partie Hardware'''&lt;br /&gt;
** Nous arrivons à communiquer avec le capteur DS18B20. Notre programme détecte le capteur, arrive à l'initialiser mais nous avons à présent des problèmes d'envoi de données pour connaitre la température.&lt;br /&gt;
&lt;br /&gt;
*'''Partie application'''&lt;br /&gt;
** Nous essayons dans un premier temps d'afficher un menu simple dans lequel nous pouvons naviguer [http://www.tutomobile.fr/faire-des-menus-et-sous-menus-tutoriel-android-n%C2%B012/27/07/2010/] cependant nous rencontrons des problèmes de librairies, en effet nous ne disposons pas de toutes les images publique qu'Android nous offre [http://developer.android.com/guide/topics/resources/drawable-resource.html], nous devrons donc ajouter les images nous même [http://androiddrawableexplorer.appspot.com/] dans la librairie..&lt;br /&gt;
&lt;br /&gt;
===Semaine 5===&lt;br /&gt;
*'''Partie Hardware'''&lt;br /&gt;
**Toujours des problèmes de communication avec le capteur de température. Le programme avec l'IDE fonctionne mais nous ne comprennons pas pourquoi cela ne marche pas avec le programme en c.&lt;br /&gt;
&lt;br /&gt;
*'''Partie application'''&lt;br /&gt;
Nous avons réussis à afficher un menu simple dans lequel figure quelques boutons qui nous serviront à naviguer entre les activités:&lt;br /&gt;
** Entrainement&lt;br /&gt;
** Historique&lt;br /&gt;
** Paramètres&lt;br /&gt;
** Connexion&lt;br /&gt;
&lt;br /&gt;
Voici à quoi ressemble notre menu pour le moment:&lt;br /&gt;
[[Fichier:Main activity Avant.png|250px|gauche]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Définition des différentes activités:====&lt;br /&gt;
=====L'activité &amp;quot;Entrainement&amp;quot;=====&lt;br /&gt;
Une fois connecté via Bluetooth grâce à l'activité &amp;quot;Connexion&amp;quot;, l'utilisateur devra appuyer sur le bouton &amp;quot;Start&amp;quot; pour commencer son entrainement. L'application affichera en temps réel les données envoyé depuis le t-shirt et indiquera à l'utilisateur le temps qui c'est écoulé. En background elle écrira dans un fichier texte situé dans un dossier spécifique afin de traiter ces données par la suite.&lt;br /&gt;
Lorsque l'utilisateur termine son entrainement il devra appuyer sur le bouton &amp;quot;Stop&amp;quot;, une fenêtre s'ouvrira et lui demandera s'il souhaite enregistrer ou supprimer les données de l'entrainement qu'il vient d'effectuer. S'il décide d'enregistrer il sera automatiquement redirigé vers l'activité &amp;quot;Stats&amp;quot; (non pas accessible depuis le menu) qui affichera le bilan de son entrainement.&lt;br /&gt;
&lt;br /&gt;
=====L'activité &amp;quot;Historique&amp;quot;=====&lt;br /&gt;
Recense tout les entrainements effectué par l'utilisateur. De cette activité il pourra décider de supprimer ses anciens entrainements (cela supprimera le fichier texte associé en background) ou bien d'en afficher ses statistiques (&amp;quot;Activité Stats&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
=====L'activité &amp;quot;Paramètre&amp;quot;=====&lt;br /&gt;
Activité optionnel, servira à récupérer certaines informations sur l'utilisateur qui pourrait nous être utile pour certains calcul. Comme le nombre de calories dépensé lors de l'entrainement ou autre.. Nous n'avons pas encore défini les calculs que nous effectuerons&lt;br /&gt;
&lt;br /&gt;
=====L'activité &amp;quot;Connexion&amp;quot;=====&lt;br /&gt;
Servira à connecter l'application au T-Shirt via Bluetooth&lt;br /&gt;
&lt;br /&gt;
===Semaine 6===&lt;br /&gt;
*'''Partie Hardware'''&lt;br /&gt;
** Nous avons essayé de télécharger d'autres programmes pour communiquer avec le capteur de température mais sans aucun succès. Nous avons donc essayé de traduire le programme de l'IDE (écrit en c++) en c mais toujours pas de résultat. Nous avons donc décider de laisser tomber ce capteur 1-WIRE et de prendre un capteur analogique, le TMP36. Nous sommes donc passés à la communication Bluetooth sur le lilypad avec le BLE nrf8001.&lt;br /&gt;
&lt;br /&gt;
*'''Partie application'''&lt;br /&gt;
**Nous avons configuré l'activité &amp;quot;Paramètre&amp;quot;. Elle demande quelques information à l'utilisateur comme son Nom, son âge, sa taille et son poids, utile pour calculer certains paramètres qui reste toujours à définir. (Savoir son nom ne nous est pas vraiment utile, il sert à créer une affinité entre l'utilisateur et l'application)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:ParamPref.png|gauche]] [[Fichier:ParamPref Nom.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Semaine 7===&lt;br /&gt;
*'''Partie Hardware'''&lt;br /&gt;
** Après avoir étudier le fonctionnement du BLE, nous avons téléchargé un code source sur internet pour l'IDE d'arduino que nous avons retranscrit en C. Le programme comportait à ce moment beaucoup de bogs que nous devions résoudre.&lt;br /&gt;
&lt;br /&gt;
*'''Partie application'''&lt;br /&gt;
** Découverte et apprentissage des fonctions permettant la communication Bluetooth.&lt;br /&gt;
&lt;br /&gt;
Nous avons rajouter une &amp;quot;actionbar&amp;quot; et également redéfini l'affichage du menu qui maintenant est plus sobre:&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Menu apres.png|250px]]&lt;br /&gt;
&lt;br /&gt;
===Semaine 8=== &lt;br /&gt;
*'''Partie Hardware'''&lt;br /&gt;
** Après avoir déboguer la communication I2C sur le programme arduino et les quelques autres bogs, nous avons pu commencer à utiliser la communication Bluetooth avec l'application téléphone. Nous avons donc établi un protocole de communication entre l'application et le lilypad pour pouvoir communiquer.&lt;br /&gt;
*'''Partie application'''&lt;br /&gt;
** Problème avec la connexion Bluetooth, certaines fonctions ne sont pas reconnu par l'IDE. Cela est peut être dû à une mauvaise installation des bibliothèques? Nous avons donc transféré notre projet vers un nouveaux projet qui maintenant compile, allez savoir comment..&lt;br /&gt;
&lt;br /&gt;
===Semaine 9===&lt;br /&gt;
*'''Partie Hardware'''&lt;br /&gt;
** Premier essai d'un programme pour mettre le lilypad en mode veille lorsque aucun appareil n'est connecté au Bluetooth. Reste à faire des tests de consommation électriques pour valider le code.&lt;br /&gt;
&lt;br /&gt;
*'''Partie application'''&lt;br /&gt;
** Premiers test de la connexion Bluetooth effectué. Nous avons abandonné l'idée d'utiliser l'émulateur de téléphone car il ne supporte pas le Bluetooth. Nous arrivons à communiquer avec le T-shirt, nous pouvons émettre et recevoir des caractères. Pour une question pratique la connexion ne se fera plus depuis le bouton &amp;quot;Connexion&amp;quot; du menu mais directement dans l'activité &amp;quot;Entrainement&amp;quot;. Lorsque l'utilisateur appuiera sur ce bouton depuis le menu, l'application lui demandera de se connecter au T-shirt. Une fois connecté le bouton &amp;quot;Start&amp;quot; apparait puis la communication débutera lorsqu'il appuiera dessus.&lt;br /&gt;
&lt;br /&gt;
===Semaine 10===&lt;br /&gt;
*'''Partie Hardware'''&lt;br /&gt;
** Ajout du capteur de température sur le lilypad pour envoyer les données. Nous avons également tester de nouveau la communication Bluetooth suite à une modification de l'application.&lt;br /&gt;
&lt;br /&gt;
*'''Partie application'''&lt;br /&gt;
**Définition de l'activité &amp;quot;Historique&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
Cette activité va scanner tous les fichiers créés par l'utilisateur et les afficher à l'aide d'une listView [http://www.tutomobile.fr/personnaliser-une-listview-tutoriel-android-n%C2%B07/04/07/2010/]. Lorsque l'on cliquera sur l'un des fichiers l'activité &amp;quot;Stats&amp;quot; se lancera. Nous avons également configuré une AlertDialog [http://www.tutomobile.fr/personnaliser-un-alertdialog-tutoriel-android-n%C2%B020/04/11/2010/] qui s'affiche lorsque l'on clique longuement sur un Item, celle-ci demande alors si l'on veut supprimer ou afficher les statistiques.&lt;br /&gt;
&lt;br /&gt;
Voici à quoi ressemble cette activité:&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Historique.png|gauche|250px]]  [[Fichier:Historique possibilite de supprimer les fichier.png|250px|centre]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous devons encore déterminer les détails que chaque Item aura et ajouter un TextView à la AlertDialog qui indiquera quelle Entrainement a été sélectionné.&lt;br /&gt;
&lt;br /&gt;
===Semaine 11===&lt;br /&gt;
*'''Partie Hardware'''&lt;br /&gt;
** Ajout de l'accéléromètre pour réaliser le podomètre. C'est un accéléromètre numérique (MMA8452Q), cet accéléromètre va nous permettre de générer une interruption à chaque fois qu'une accélération est détectée. Quelques petits problèmes lors de l'initialisation de celui ci mais les problèmes ont été résolu rapidement. Nous allons pouvoir commencer la construction du tee-shirt.&lt;br /&gt;
[[Fichier:Mma8452q.jpg|200px]]&lt;br /&gt;
*'''Partie application'''&lt;br /&gt;
**Définition de l'activité &amp;quot;Stats&amp;quot;.&lt;br /&gt;
Cette activité va lire tout le fichier écris au préalable lors de l'entrainement, calculera des moyennes et permettra d'afficher des graphiques de certains paramètres en fonction du temps, pour cela nous avons utilisé la librairie GraphView, disponible via ce lien: [http://www.android-graphview.org/]&lt;br /&gt;
&lt;br /&gt;
En voici un premier jet, dans cet exemple nous avons affiché le graphique de la fréquence cardiaque en fonction du temps.&lt;br /&gt;
:&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Stats 2.png|250px]]&lt;br /&gt;
&lt;br /&gt;
===Semaine 12===&lt;br /&gt;
*'''Partie Hardware'''&lt;br /&gt;
*Nous avons cousu les composants électroniques sur le T-shirt&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Exterrieur.jpg|250px]]  [[Fichier:Interrieur.jpg|265px]] [[Fichier:Exterrieur Lily.jpg|250px]] [[Fichier:Interrieur Lily.jpg|235px]]&lt;br /&gt;
&lt;br /&gt;
*Il ne reste qu'a effectuer des tests sur le code globale avec le tee-shirt, quelques problèmes sur les connections entre les fils et les composants mais cela fonctionne. Encore des tests à effectuer sur la consommation électrique de l'ensemble en mode veille et en mode connecté. Nous avons ajouté une poche sur le tee-shirt pour pouvoir y placer une batterie.&lt;br /&gt;
&lt;br /&gt;
*'''Partie application'''&lt;br /&gt;
**Redéfinition du Menu&lt;br /&gt;
Nous avons apporté quelques modifications à l'application, désormais le menu ne comporte plus le bouton connexion. La connexion Bluetooth sera établi lorsque l'utilisateur sélectionnera le bouton &amp;quot;Entrainement&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Menu.png|250px]]&lt;br /&gt;
&lt;br /&gt;
* Entrainement:&lt;br /&gt;
Si l'utilisateur n'a pas activé son bluetooth l'application lui demande automatiquement de l'activer, s'il ne le fait pas il ne pourra faire l'entrainement. Il devra ensuite sélectionner le T-Shirt pour s'y connecter, une fois la connexion établi l'entrainement pourra commencer. Il pourra alors constater en temps réels les données envoyé par le T-shirt, c'est à dire [...]&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Entrainement demande de connection bluetooth.png|250px]] &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Redéfinition de la page Historique&lt;br /&gt;
Il est désormais possible de sélectionner plusieurs éléments afin de les supprimer en même temps. Nous avons modifié l'affichage, seul la date, l'heure ainsi que le numéro de l'entrainement sont affiché.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Historique 2.png|250px]] [[Fichier:Historique selection.png|250px]] [[Fichier:Historique suppression.png|250px]]&lt;br /&gt;
&lt;br /&gt;
* Ajout d'information sur la page &amp;quot;Détails&amp;quot;&lt;br /&gt;
L'utilisateur peut désormais connaitre la distance parcouru lors de son entrainement (en supposant qu'un pas vaut 70cm). Il peut également passer d'un graphique à l'autre pour voir l'évolution de la température de son corps ou de sa fréquence cardiaque lors de l'entrainement. Nous affichons maintenant la vraie date (et non le nom du fichier), nous indiquons aussi l'heure de début de l'entrainement.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Détails Freq.png|250px]] [[Fichier:Détails temp.png|250px]]&lt;br /&gt;
&lt;br /&gt;
== Liens ==&lt;br /&gt;
&lt;br /&gt;
RFDUINO [www.rfduino.com/] : RFD22102 RFduino DIP [http://www.rfduino.com/product/rfd22102-rfduino-dip/index.html]&lt;br /&gt;
&lt;br /&gt;
Nordic rf8001 (BLE) [http://www.nordicsemi.com/eng/Products/Bluetooth-Smart-Bluetooth-low-energy/nRF8001]&lt;br /&gt;
&lt;br /&gt;
Arduino SHIELD-EKG-EMG: [https://www.olimex.com/Products/Duino/Shields/SHIELD-EKG-EMG/]&lt;br /&gt;
&lt;br /&gt;
Électrocardiogramme [http://fab.cba.mit.edu/classes/863.12/people/Adam.Marblestone/AHM_week05.html]&lt;br /&gt;
&lt;br /&gt;
LED [http://www.adafruit.com/] --&amp;gt; Fil de LED Bleu [http://www.adafruit.com/products/895] ---&amp;gt; Lot de 25 LED [http://www.adafruit.com/products/388] ---&amp;gt; [http://www.adafruit.com/products/780]&lt;br /&gt;
&lt;br /&gt;
GraphView: [https://github.com/jjoe64/GraphView]&lt;br /&gt;
&lt;br /&gt;
Library for DS18B20 [http://sourceforge.net/projects/davidegironi/files/avr-lib/avr_lib_ds18b20_01b.zip/download]&lt;br /&gt;
&lt;br /&gt;
== Tuto ==&lt;br /&gt;
&lt;br /&gt;
Tuto arduino : [https://tutoarduino.com/choix-tutoriels/]&lt;br /&gt;
&lt;br /&gt;
Tuto capteur de température: [https://tutoarduino.com/portfolio-items/tpbd2-2-detecteur-de-temperature/]&lt;br /&gt;
&lt;br /&gt;
Tuto Bluetooth: [https://tutoarduino.com/portfolio-items/le-bluetooth/] connexion app [http://nononux.free.fr/index.php?page=elec-brico-bluetooth-android-microcontroleur]&lt;br /&gt;
&lt;br /&gt;
Tuto Android: [http://android.developpez.com/cours/] [https://sites.google.com/site/redezzahir/coursJAVA/tp10] [http://sampleprogramz.com/android/] fiche: [http://www.iutbayonne.univ-pau.fr/~dalmau/documents/cours/android/Guide%20TPs%20Android%20avec%20Eclipse.pdf]&lt;br /&gt;
&lt;br /&gt;
Tuto BLE Android: [http://developer.android.com/guide/topics/connectivity/bluetooth-le.html]&lt;br /&gt;
&lt;br /&gt;
Tuto ListView: [http://www.ltm.fr/creez-une-vue-en-liste-listview-avec-texte-image/]  GraphView: [http://www.android-graphview.org/download--getting-started.html]&lt;br /&gt;
&lt;br /&gt;
Tuto GPS android: [http://www.tutomobile.fr/geolocalisation-grace-au-gps-ou-au-reseau-mobile-tutoriel-android-n%C2%B015/13/08/2010/]&lt;/div&gt;</summary>
		<author><name>Vpiat</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=V%C3%AAtements_intelligents&amp;diff=20793</id>
		<title>Vêtements intelligents</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=V%C3%AAtements_intelligents&amp;diff=20793"/>
				<updated>2015-05-08T17:30:11Z</updated>
		
		<summary type="html">&lt;p&gt;Vpiat : /* Semaine 11 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Cahier des Charges==&lt;br /&gt;
===Présentation générale du projet===&lt;br /&gt;
&lt;br /&gt;
=== Objectif ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Concevoir un système d'interaction avec des objets connectés sur les vêtements ou le corps.&lt;br /&gt;
&lt;br /&gt;
=== '''Description du projet''' ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Les systèmes embarqués sur les humains commencent à se développer (lunettes Google, montres connectées).&lt;br /&gt;
&lt;br /&gt;
Nous proposons ici de réaliser une plateforme basée sur la '''technologie BLE''' (Bluetooth Low Energy ou Bluetooth 4.0).&lt;br /&gt;
&lt;br /&gt;
Deux parties seront mise en oeuvre :&lt;br /&gt;
    &lt;br /&gt;
* un système embarqué compact permettant de recevoir des information et en transmettre ;&lt;br /&gt;
* une application Android permettant de communiquer avec le système.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Le système sera intégré sur un t-shirt en utilisant notamment la machine à coudre numérique disponible au Fabricarium de Polytech Lille.&lt;br /&gt;
&lt;br /&gt;
===Contexte===&lt;br /&gt;
&lt;br /&gt;
==== Informations à traiter ====&lt;br /&gt;
&lt;br /&gt;
Pour que notre projet soit intéressant, aux yeux des consommateurs, nous devons définir l'utilité que pourrait avoir un vêtement connecté.&lt;br /&gt;
Notre application ne doit pas être un simple gadget mais un objet qui semble utile et faire en sorte qu'il soit indispensable dans le futur. &amp;quot;Il faut créer le besoin si l'on veut vendre un objet et faire du profit.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Dans un premier temps nous devons faire une étude du marché pour savoir ce qui a déjà été fait. &lt;br /&gt;
Nous devons savoir quelles types d'informations les vêtements et objets connectés transmettent, pour quels usages et pour quels publics.&lt;br /&gt;
&lt;br /&gt;
====Le Sport====&lt;br /&gt;
&lt;br /&gt;
La plupart des objets connectés à l'Homme sont utilisés pour l'informer de ses performances physiques: &lt;br /&gt;
Combien de kilomètres ils ont parcouru, combien de pas ont été effectués, combien de calories ont été perdues.&lt;br /&gt;
&lt;br /&gt;
Ce sont principalement des performances liées à la marche et la course à pied. De nouveaux objets connectés ont vu récemment le jour, notamment les bracelets connectés permettant de récolter des informations sur les nageurs, toujours dans le but d'avoir un suivi sur ses performances (nombres de mètres nagés par rapport à un certain temps).&lt;br /&gt;
&lt;br /&gt;
====Santé et bien être====&lt;br /&gt;
&lt;br /&gt;
Encore en pleine expansion que très peu d'objets connectés se sont intéressés au domaine de la santé: ici un exemple de t-shirt connecté permettant de contrôler le rythme cardiaque: [http://pulse.edf.com/fr/les-textiles-intelligents-peuvent-surveiller-notre-coeur?gclid=Cj0KEQiAiamlBRCgj83PiYm6--gBEiQArnojD4QntiVq9cLZeZDRGqMckMIQzkr6RH3cFxJnxJk0tE0aApoA8P8HAQ]&lt;br /&gt;
&lt;br /&gt;
Beaucoup d'application ont déjà vu le jour: [http://www.techniques-ingenieur.fr/actualite/materiaux-innovants-nano-thematique_6342/ces-textiles-intelligents-qui-prennent-soin-de-nous-article_286868/]&lt;br /&gt;
&lt;br /&gt;
Quelles sont les applications que l'on pourrait faire? Quels suivis sont à faire pour quels types de maladie etc..?&lt;br /&gt;
&lt;br /&gt;
====La régulation de température====&lt;br /&gt;
&lt;br /&gt;
Grâce aux fibres électroniques tissées il est possible de chauffer un t-shirt ou de le refroidir cela pourrait se régler en fonction de la température du corps ou bien par simple commande de l'utilisateur (cela pourrait s'avérer très utile avec le réchauffement climatique qui est en train d'arriver, winter is comming..).&lt;br /&gt;
&lt;br /&gt;
===Notre Projet===&lt;br /&gt;
&lt;br /&gt;
Ce que nous voulons faire nous: Un T-shirt permettant à la fois de calculer les performances sportives mais aussi d'avoir un suivi sur notre santé et pourquoi pas faire en sorte de réguler la température du corps lors d'un effort..&lt;br /&gt;
&lt;br /&gt;
-&amp;gt;Calculer le nombre de pas (Podomètre)&lt;br /&gt;
&lt;br /&gt;
-&amp;gt;Calculer une distance, la vitesse, la position sur un carte? (GPS)&lt;br /&gt;
&lt;br /&gt;
-&amp;gt;Calculer la fréquence cardiaque ? (Cardiofréquencemètre)&lt;br /&gt;
&lt;br /&gt;
-&amp;gt;Afficher la fréquence cardiaque sur LED&lt;br /&gt;
&lt;br /&gt;
-&amp;gt;Mesurer la température du corps&lt;br /&gt;
&lt;br /&gt;
-&amp;gt;Transférer toutes ses informations sur l'application mobile (Android)&lt;br /&gt;
&lt;br /&gt;
== '''Etapes du Projet''' ==&lt;br /&gt;
&lt;br /&gt;
*Partie électronique&lt;br /&gt;
** Définition des différents modules (Capteurs de températures, accéléromètre..)&lt;br /&gt;
** Connecter et programmer les différents modules au microprocesseur Lilypad&lt;br /&gt;
** Créer un programme pour ordonnancer les différents modules&lt;br /&gt;
** Connecter le module Bluetooth BLE et le configurer&lt;br /&gt;
** Intégrer les composants au tee-shirt&lt;br /&gt;
&lt;br /&gt;
*Partie informatique&lt;br /&gt;
** Créer une application Android simple (Par exemple HelloWorld)&lt;br /&gt;
** Importer l'application sur smart-phone&lt;br /&gt;
** Savoir faire un menu et sous-menu [http://a-renouard.developpez.com/tutoriels/android/menu-sous-menu/]&lt;br /&gt;
** Comprendre les Services [http://nbenbourahla.developpez.com/tutoriels/android/services-sous-android/], les maîtriser: [http://blog.developpez.com/ndruet/p8571/android/creation_de_service]&lt;br /&gt;
** Comprendre les vues sous Android [http://nbenbourahla.developpez.com/tutoriels/android/introduction-vues-sous-android/]&lt;br /&gt;
** Comment utiliser SQLite sur Android [http://a-renouard.developpez.com/tutoriels/android/sqlite/]&lt;br /&gt;
** Créer les programmes principaux:&lt;br /&gt;
*** Intégration Google Map sur Android (pour utiliser le GPS) [http://michel-dirix.developpez.com/tutoriels/android/integration-google-maps-android/]&lt;br /&gt;
*** Ajouter les protocoles nécessaires pour communiquer en Bluetooth [http://sberfini.developpez.com/tutoriaux/android/bluetooth/], utilisation du NFC [http://sberfini.developpez.com/tutoriaux/android/nfc/bluetooth/]&lt;br /&gt;
*** Une vue pour afficher les différentes applications (activités)&lt;br /&gt;
*** Une activité pour gérer l'affichage des informations envoyé depuis le microprocesseur&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Matériel possédé ===&lt;br /&gt;
&lt;br /&gt;
* LilyPad Accelerometer ADXL335 [https://www.sparkfun.com/products/9267] [&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;fourni le 28/1/2015&amp;lt;/span&amp;gt;]&lt;br /&gt;
&lt;br /&gt;
* LilyPad Temperature Sensor [https://www.sparkfun.com/products/8777] [&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;fourni le 28/1/2015&amp;lt;/span&amp;gt;]&lt;br /&gt;
&lt;br /&gt;
* Arduino Lilypad Atmega 328P [http://arduino.cc/en/Main/ArduinoBoardLilyPad] [&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;fourni le 28/1/2015&amp;lt;/span&amp;gt;]&lt;br /&gt;
&lt;br /&gt;
* SparkFun FTDI Basic Breakout - 3.3V [https://www.sparkfun.com/products/9873] [&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;fourni le 28/1/2015&amp;lt;/span&amp;gt;]&lt;br /&gt;
&lt;br /&gt;
* Une dizaine de LilyPad LED Red [https://www.sparkfun.com/products/10044] [&amp;lt;span style=&amp;quot;color: lightgreen;&amp;quot;&amp;gt;LEDs LilyPad blanches disponibles&amp;lt;/span&amp;gt;]&lt;br /&gt;
&lt;br /&gt;
* Interrupteur [&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;fourni le 28/1/2015&amp;lt;/span&amp;gt;]&lt;br /&gt;
&lt;br /&gt;
* BLE nRF8001 [http://www.nordicsemi.com/eng/Products/Bluetooth-Smart-Bluetooth-low-energy/nRF8001] [&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;1 fourni le 9/2/2015&amp;lt;/span&amp;gt;]&lt;br /&gt;
&lt;br /&gt;
=== Matériel nécessaire === &lt;br /&gt;
&lt;br /&gt;
* Olimex platine ECG&lt;br /&gt;
&lt;br /&gt;
* [&amp;lt;span style=&amp;quot;color: blue;&amp;quot;&amp;gt; Du fil conducteur en bobine &amp;lt;/span&amp;gt;]&lt;br /&gt;
&lt;br /&gt;
== '''Tableau de bord''' ==&lt;br /&gt;
&lt;br /&gt;
===Semaine 1===&lt;br /&gt;
&lt;br /&gt;
Nous avons fait le point sur les capacités qu'aura notre t-shirt connecté.&lt;br /&gt;
&lt;br /&gt;
Après discussion avec M.Boë nous avons décidé d'utiliser dans un premier temps deux capteurs, Accéléromètre et capteur de température (emprunté à M.Redon), pour nous concentrer plus rapidement sur les deux problèmes majeur que nous allons rencontrer, celle de la communication entre l'arduino (Lilypad), le BLE et l'application androïde du téléphone et celle de l'énergie où le problème réside dans l'alimentation système embarqué. Nous devons trouver un composant à la fois petit, pour pouvoir être porté, et assez puissant pour délivrer de l'énergie au microprocesseur pendant plusieurs mois. Nous devons nous demander quand éteindre le micro-contrôleur et à quel moment le Bluetooth sera connecté. Nous allons pour cela ajouter un interrupteur glissière au tee-shirt.&lt;br /&gt;
&lt;br /&gt;
Nous nous sommes informés sur le bluetooth de type BLE :&lt;br /&gt;
&lt;br /&gt;
Histoire du Bluetooth: [http://www.frandroid.com/maison-connectee/232622_dossier-bluetooth-fonctionnement-interet-les-objets-connectes]&lt;br /&gt;
&lt;br /&gt;
Projet de conception d'une liaison bluetooh 2.0 : [file:///tmp/P12Rap_bluetooth.pdf]&lt;br /&gt;
&lt;br /&gt;
Protocole Bluetooth: SIG (Special Interest Group)&lt;br /&gt;
&lt;br /&gt;
'''Bluetooth 2.0 :'''&lt;br /&gt;
&lt;br /&gt;
Appairage facile et sécurisé : le SSP (Secure Simple Pairing)&lt;br /&gt;
&lt;br /&gt;
Protocole?: EDR (Enhanced Data Rate)&lt;br /&gt;
&lt;br /&gt;
'''Bluetooth 3.0: '''&lt;br /&gt;
&lt;br /&gt;
Protocole: HS (High Speed)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Bluetooth 4.0'''&lt;br /&gt;
&lt;br /&gt;
Conception d'un module bluetooth : [http://www.digikey.fr/fr/articles/techzone/2014/jun/how-to-build-low-power-wireless-systems-using-bluetooth-smart-4]&lt;br /&gt;
&lt;br /&gt;
Classic Bluetooth: Regroupe les versions 1.0 -&amp;gt; 3.0&lt;br /&gt;
&lt;br /&gt;
Protocole: LE (Bluetooth Low Energy)  --&amp;gt; Réduit fortement la consommation de la puce Bluetooth avec un protocole différent&lt;br /&gt;
&lt;br /&gt;
Dans le 4.0 le constructeur peut décider d'implémenter deux modes: Bluetooth Low Energy seul (single mode) ou avec le Classic Bluetooth (dual mode) qui lui permet de conserver la compatibilité avec les autres appareils.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Semaine 2===&lt;br /&gt;
&lt;br /&gt;
Nous avons établi une connexion avec l'Atmega 328P et communiqué avec l'accéléromètre et le capteur de température. Malheureusement le capteur de température LyliPad n'est pas très précis, nous avons donc opté pour un capteur DS18B20, c'est un capteur 1-wire. Nous avons donc commencé par comprendre cette technologie puis grâce à un programme trouvé sur internet, nous essayons de l'adapter à notre microprocesseur lillypad pour communiquer avec le DS18B20.&lt;br /&gt;
&lt;br /&gt;
Parallèlement nous avons débuté la programmation d'application Android. Nous utilisons pour cela l'IDE Eclipse. Nous rencontrons actuellement des problèmes d'environnement pour compiler un programme Android simple comme &amp;quot;Hello World&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===Semaine 3===&lt;br /&gt;
*'''Partie Hardware'''&lt;br /&gt;
**Toujours des problèmes avec le capteur de température DS18B20. Nous arrivons à envoyer le programme C sur l'arduino mais la communication avec le capteur ne se fait pas. Nous avons donc décortiqué le programme et comprendre son fonctionnement.&lt;br /&gt;
&lt;br /&gt;
*'''Partie application'''&lt;br /&gt;
**Après de nombreux bug d’installation des plateformes (Eclipse, JDK, SDK, Bibliothèque etc..) nous réussissons à lancer l'application &amp;quot;HelloWorld&amp;quot; dans un émulateur de téléphone Android. Nous pouvons maintenant nous concentrer vers la programmation orienté objet Android et détailler plus spécifiquement les étapes à réaliser avant de pouvoir coder notre programme final (cf &amp;quot;Etapes du Projet&amp;quot;).&lt;br /&gt;
Notions à connaitre:&lt;br /&gt;
*Introduction aux ressources Android (les éléments qui s'afficheront à l'écran ou avec lesquels l'utilisateur pourra interagir [http://openclassrooms.com/courses/creez-des-applications-pour-android/les-ressources-2])&lt;br /&gt;
*Introduction à la notion de &amp;quot;Style&amp;quot; et de &amp;quot;Thèmes&amp;quot; [http://cyril-mottier.developpez.com/tutoriels/android/introduction-styles-themes/]&lt;br /&gt;
&lt;br /&gt;
===Semaine 4===&lt;br /&gt;
*'''Partie Hardware'''&lt;br /&gt;
** Nous arrivons à communiquer avec le capteur DS18B20. Notre programme détecte le capteur, arrive à l'initialiser mais nous avons à présent des problèmes d'envoi de données pour connaitre la température.&lt;br /&gt;
&lt;br /&gt;
*'''Partie application'''&lt;br /&gt;
** Nous essayons dans un premier temps d'afficher un menu simple dans lequel nous pouvons naviguer [http://www.tutomobile.fr/faire-des-menus-et-sous-menus-tutoriel-android-n%C2%B012/27/07/2010/] cependant nous rencontrons des problèmes de librairies, en effet nous ne disposons pas de toutes les images publique qu'Android nous offre [http://developer.android.com/guide/topics/resources/drawable-resource.html], nous devrons donc ajouter les images nous même [http://androiddrawableexplorer.appspot.com/] dans la librairie..&lt;br /&gt;
&lt;br /&gt;
===Semaine 5===&lt;br /&gt;
*'''Partie Hardware'''&lt;br /&gt;
**Toujours des problèmes de communication avec le capteur de température. Le programme avec l'IDE fonctionne mais nous ne comprennons pas pourquoi cela ne marche pas avec le programme en c.&lt;br /&gt;
&lt;br /&gt;
*'''Partie application'''&lt;br /&gt;
Nous avons réussis à afficher un menu simple dans lequel figure quelques boutons qui nous serviront à naviguer entre les activités:&lt;br /&gt;
** Entrainement&lt;br /&gt;
** Historique&lt;br /&gt;
** Paramètres&lt;br /&gt;
** Connexion&lt;br /&gt;
&lt;br /&gt;
Voici à quoi ressemble notre menu pour le moment:&lt;br /&gt;
[[Fichier:Main activity Avant.png|250px|gauche]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Définition des différentes activités:====&lt;br /&gt;
=====L'activité &amp;quot;Entrainement&amp;quot;=====&lt;br /&gt;
Une fois connecté via Bluetooth grâce à l'activité &amp;quot;Connexion&amp;quot;, l'utilisateur devra appuyer sur le bouton &amp;quot;Start&amp;quot; pour commencer son entrainement. L'application affichera en temps réel les données envoyé depuis le t-shirt et indiquera à l'utilisateur le temps qui c'est écoulé. En background elle écrira dans un fichier texte situé dans un dossier spécifique afin de traiter ces données par la suite.&lt;br /&gt;
Lorsque l'utilisateur termine son entrainement il devra appuyer sur le bouton &amp;quot;Stop&amp;quot;, une fenêtre s'ouvrira et lui demandera s'il souhaite enregistrer ou supprimer les données de l'entrainement qu'il vient d'effectuer. S'il décide d'enregistrer il sera automatiquement redirigé vers l'activité &amp;quot;Stats&amp;quot; (non pas accessible depuis le menu) qui affichera le bilan de son entrainement.&lt;br /&gt;
&lt;br /&gt;
=====L'activité &amp;quot;Historique&amp;quot;=====&lt;br /&gt;
Recense tout les entrainements effectué par l'utilisateur. De cette activité il pourra décider de supprimer ses anciens entrainements (cela supprimera le fichier texte associé en background) ou bien d'en afficher ses statistiques (&amp;quot;Activité Stats&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
=====L'activité &amp;quot;Paramètre&amp;quot;=====&lt;br /&gt;
Activité optionnel, servira à récupérer certaines informations sur l'utilisateur qui pourrait nous être utile pour certains calcul. Comme le nombre de calories dépensé lors de l'entrainement ou autre.. Nous n'avons pas encore défini les calculs que nous effectuerons&lt;br /&gt;
&lt;br /&gt;
=====L'activité &amp;quot;Connexion&amp;quot;=====&lt;br /&gt;
Servira à connecter l'application au T-Shirt via Bluetooth&lt;br /&gt;
&lt;br /&gt;
===Semaine 6===&lt;br /&gt;
*'''Partie Hardware'''&lt;br /&gt;
** Nous avons essayé de télécharger d'autres programmes pour communiquer avec le capteur de température mais sans aucun succès. Nous avons donc essayé de traduire le programme de l'IDE (écrit en c++) en c mais toujours pas de résultat. Nous avons donc décider de laisser tomber ce capteur 1-WIRE et de prendre un capteur analogique, le TMP36. Nous sommes donc passés à la communication Bluetooth sur le lilypad avec le BLE nrf8001.&lt;br /&gt;
&lt;br /&gt;
*'''Partie application'''&lt;br /&gt;
**Nous avons configuré l'activité &amp;quot;Paramètre&amp;quot;. Elle demande quelques information à l'utilisateur comme son Nom, son âge, sa taille et son poids, utile pour calculer certains paramètres qui reste toujours à définir. (Savoir son nom ne nous est pas vraiment utile, il sert à créer une affinité entre l'utilisateur et l'application)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:ParamPref.png|gauche]] [[Fichier:ParamPref Nom.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Semaine 7===&lt;br /&gt;
*'''Partie Hardware'''&lt;br /&gt;
** Après avoir étudier le fonctionnement du BLE, nous avons téléchargé un code source sur internet pour l'IDE d'arduino que nous avons retranscrit en C. Le programme comportait à ce moment beaucoup de bogs que nous devions résoudre.&lt;br /&gt;
&lt;br /&gt;
*'''Partie application'''&lt;br /&gt;
** Découverte et apprentissage des fonctions permettant la communication Bluetooth.&lt;br /&gt;
&lt;br /&gt;
Nous avons rajouter une &amp;quot;actionbar&amp;quot; et également redéfini l'affichage du menu qui maintenant est plus sobre:&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Menu apres.png|250px]]&lt;br /&gt;
&lt;br /&gt;
===Semaine 8=== &lt;br /&gt;
*'''Partie Hardware'''&lt;br /&gt;
** Après avoir déboguer la communication I2C sur le programme arduino et les quelques autres bogs, nous avons pu commencer à utiliser la communication Bluetooth avec l'application téléphone. Nous avons donc établi un protocole de communication entre l'application et le lilypad pour pouvoir communiquer.&lt;br /&gt;
*'''Partie application'''&lt;br /&gt;
** Problème avec la connexion Bluetooth, certaines fonctions ne sont pas reconnu par l'IDE. Cela est peut être dû à une mauvaise installation des bibliothèques? Nous avons donc transféré notre projet vers un nouveaux projet qui maintenant compile, allez savoir comment..&lt;br /&gt;
&lt;br /&gt;
===Semaine 9===&lt;br /&gt;
*'''Partie Hardware'''&lt;br /&gt;
** Premier essai d'un programme pour mettre le lilypad en mode veille lorsque aucun appareil n'est connecté au Bluetooth. Reste à faire des tests de consommation électriques pour valider le code.&lt;br /&gt;
&lt;br /&gt;
*'''Partie application'''&lt;br /&gt;
** Premiers test de la connexion Bluetooth effectué. Nous avons abandonné l'idée d'utiliser l'émulateur de téléphone car il ne supporte pas le Bluetooth. Nous arrivons à communiquer avec le T-shirt, nous pouvons émettre et recevoir des caractères. Pour une question pratique la connexion ne se fera plus depuis le bouton &amp;quot;Connexion&amp;quot; du menu mais directement dans l'activité &amp;quot;Entrainement&amp;quot;. Lorsque l'utilisateur appuiera sur ce bouton depuis le menu, l'application lui demandera de se connecter au T-shirt. Une fois connecté le bouton &amp;quot;Start&amp;quot; apparait puis la communication débutera lorsqu'il appuiera dessus.&lt;br /&gt;
&lt;br /&gt;
===Semaine 10===&lt;br /&gt;
*'''Partie Hardware'''&lt;br /&gt;
** Ajout du capteur de température sur le lilypad pour envoyer les données. Nous avons également tester de nouveau la communication Bluetooth suite à une modification de l'application.&lt;br /&gt;
&lt;br /&gt;
*'''Partie application'''&lt;br /&gt;
**Définition de l'activité &amp;quot;Historique&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
Cette activité va scanner tous les fichiers créés par l'utilisateur et les afficher à l'aide d'une listView [http://www.tutomobile.fr/personnaliser-une-listview-tutoriel-android-n%C2%B07/04/07/2010/]. Lorsque l'on cliquera sur l'un des fichiers l'activité &amp;quot;Stats&amp;quot; se lancera. Nous avons également configuré une AlertDialog [http://www.tutomobile.fr/personnaliser-un-alertdialog-tutoriel-android-n%C2%B020/04/11/2010/] qui s'affiche lorsque l'on clique longuement sur un Item, celle-ci demande alors si l'on veut supprimer ou afficher les statistiques.&lt;br /&gt;
&lt;br /&gt;
Voici à quoi ressemble cette activité:&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Historique.png|gauche|250px]]  [[Fichier:Historique possibilite de supprimer les fichier.png|250px|centre]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous devons encore déterminer les détails que chaque Item aura et ajouter un TextView à la AlertDialog qui indiquera quelle Entrainement a été sélectionné.&lt;br /&gt;
&lt;br /&gt;
===Semaine 11===&lt;br /&gt;
*'''Partie Hardware'''&lt;br /&gt;
** Ajout de l'accéléromètre pour réaliser le podomètre. C'est un accéléromètre numérique (MMA8452Q), cet accéléromètre va nous permettre de générer une interruption à chaque fois qu'une accélération est détectée. Quelques petits problèmes lors de l'initialisation de celui ci mais les problèmes ont été résolu rapidement. Nous allons pouvoir commencer la construction du tee-shirt.&lt;br /&gt;
[[Fichier:Mma8452q.jpg|200px]]&lt;br /&gt;
*'''Partie application'''&lt;br /&gt;
**Définition de l'activité &amp;quot;Stats&amp;quot;.&lt;br /&gt;
Cette activité va lire tout le fichier écris au préalable lors de l'entrainement, calculera des moyennes et permettra d'afficher des graphiques de certains paramètres en fonction du temps, pour cela nous avons utilisé la librairie GraphView, disponible via ce lien: [http://www.android-graphview.org/]&lt;br /&gt;
&lt;br /&gt;
En voici un premier jet, dans cet exemple nous avons affiché le graphique de la fréquence cardiaque en fonction du temps.&lt;br /&gt;
:&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Stats 2.png|250px]]&lt;br /&gt;
&lt;br /&gt;
===Semaine 12===&lt;br /&gt;
*'''Partie Hardware'''&lt;br /&gt;
*Nous avons cousu les composants électroniques sur le T-shirt&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Exterrieur.jpg|250px]]  [[Fichier:Interrieur.jpg|265px]] [[Fichier:Exterrieur Lily.jpg|250px]] [[Fichier:Interrieur Lily.jpg|235px]]&lt;br /&gt;
&lt;br /&gt;
*'''Partie application'''&lt;br /&gt;
**Redéfinition du Menu&lt;br /&gt;
Nous avons apporté quelques modifications à l'application, désormais le menu ne comporte plus le bouton connexion. La connexion Bluetooth sera établi lorsque l'utilisateur sélectionnera le bouton &amp;quot;Entrainement&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Menu.png|250px]]&lt;br /&gt;
&lt;br /&gt;
* Entrainement:&lt;br /&gt;
Si l'utilisateur n'a pas activé son bluetooth l'application lui demande automatiquement de l'activer, s'il ne le fait pas il ne pourra faire l'entrainement. Il devra ensuite sélectionner le T-Shirt pour s'y connecter, une fois la connexion établi l'entrainement pourra commencer. Il pourra alors constater en temps réels les données envoyé par le T-shirt, c'est à dire [...]&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Entrainement demande de connection bluetooth.png|250px]] &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Redéfinition de la page Historique&lt;br /&gt;
Il est désormais possible de sélectionner plusieurs éléments afin de les supprimer en même temps. Nous avons modifié l'affichage, seul la date, l'heure ainsi que le numéro de l'entrainement sont affiché.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Historique 2.png|250px]] [[Fichier:Historique selection.png|250px]] [[Fichier:Historique suppression.png|250px]]&lt;br /&gt;
&lt;br /&gt;
* Ajout d'information sur la page &amp;quot;Détails&amp;quot;&lt;br /&gt;
L'utilisateur peut désormais connaitre la distance parcouru lors de son entrainement (en supposant qu'un pas vaut 70cm). Il peut également passer d'un graphique à l'autre pour voir l'évolution de la température de son corps ou de sa fréquence cardiaque lors de l'entrainement. Nous affichons maintenant la vraie date (et non le nom du fichier), nous indiquons aussi l'heure de début de l'entrainement.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Détails Freq.png|250px]] [[Fichier:Détails temp.png|250px]]&lt;br /&gt;
&lt;br /&gt;
== Liens ==&lt;br /&gt;
&lt;br /&gt;
RFDUINO [www.rfduino.com/] : RFD22102 RFduino DIP [http://www.rfduino.com/product/rfd22102-rfduino-dip/index.html]&lt;br /&gt;
&lt;br /&gt;
Nordic rf8001 (BLE) [http://www.nordicsemi.com/eng/Products/Bluetooth-Smart-Bluetooth-low-energy/nRF8001]&lt;br /&gt;
&lt;br /&gt;
Arduino SHIELD-EKG-EMG: [https://www.olimex.com/Products/Duino/Shields/SHIELD-EKG-EMG/]&lt;br /&gt;
&lt;br /&gt;
Électrocardiogramme [http://fab.cba.mit.edu/classes/863.12/people/Adam.Marblestone/AHM_week05.html]&lt;br /&gt;
&lt;br /&gt;
LED [http://www.adafruit.com/] --&amp;gt; Fil de LED Bleu [http://www.adafruit.com/products/895] ---&amp;gt; Lot de 25 LED [http://www.adafruit.com/products/388] ---&amp;gt; [http://www.adafruit.com/products/780]&lt;br /&gt;
&lt;br /&gt;
GraphView: [https://github.com/jjoe64/GraphView]&lt;br /&gt;
&lt;br /&gt;
Library for DS18B20 [http://sourceforge.net/projects/davidegironi/files/avr-lib/avr_lib_ds18b20_01b.zip/download]&lt;br /&gt;
&lt;br /&gt;
== Tuto ==&lt;br /&gt;
&lt;br /&gt;
Tuto arduino : [https://tutoarduino.com/choix-tutoriels/]&lt;br /&gt;
&lt;br /&gt;
Tuto capteur de température: [https://tutoarduino.com/portfolio-items/tpbd2-2-detecteur-de-temperature/]&lt;br /&gt;
&lt;br /&gt;
Tuto Bluetooth: [https://tutoarduino.com/portfolio-items/le-bluetooth/] connexion app [http://nononux.free.fr/index.php?page=elec-brico-bluetooth-android-microcontroleur]&lt;br /&gt;
&lt;br /&gt;
Tuto Android: [http://android.developpez.com/cours/] [https://sites.google.com/site/redezzahir/coursJAVA/tp10] [http://sampleprogramz.com/android/] fiche: [http://www.iutbayonne.univ-pau.fr/~dalmau/documents/cours/android/Guide%20TPs%20Android%20avec%20Eclipse.pdf]&lt;br /&gt;
&lt;br /&gt;
Tuto BLE Android: [http://developer.android.com/guide/topics/connectivity/bluetooth-le.html]&lt;br /&gt;
&lt;br /&gt;
Tuto ListView: [http://www.ltm.fr/creez-une-vue-en-liste-listview-avec-texte-image/]  GraphView: [http://www.android-graphview.org/download--getting-started.html]&lt;br /&gt;
&lt;br /&gt;
Tuto GPS android: [http://www.tutomobile.fr/geolocalisation-grace-au-gps-ou-au-reseau-mobile-tutoriel-android-n%C2%B015/13/08/2010/]&lt;/div&gt;</summary>
		<author><name>Vpiat</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=V%C3%AAtements_intelligents&amp;diff=20792</id>
		<title>Vêtements intelligents</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=V%C3%AAtements_intelligents&amp;diff=20792"/>
				<updated>2015-05-08T17:30:00Z</updated>
		
		<summary type="html">&lt;p&gt;Vpiat : /* Semaine 11 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Cahier des Charges==&lt;br /&gt;
===Présentation générale du projet===&lt;br /&gt;
&lt;br /&gt;
=== Objectif ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Concevoir un système d'interaction avec des objets connectés sur les vêtements ou le corps.&lt;br /&gt;
&lt;br /&gt;
=== '''Description du projet''' ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Les systèmes embarqués sur les humains commencent à se développer (lunettes Google, montres connectées).&lt;br /&gt;
&lt;br /&gt;
Nous proposons ici de réaliser une plateforme basée sur la '''technologie BLE''' (Bluetooth Low Energy ou Bluetooth 4.0).&lt;br /&gt;
&lt;br /&gt;
Deux parties seront mise en oeuvre :&lt;br /&gt;
    &lt;br /&gt;
* un système embarqué compact permettant de recevoir des information et en transmettre ;&lt;br /&gt;
* une application Android permettant de communiquer avec le système.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Le système sera intégré sur un t-shirt en utilisant notamment la machine à coudre numérique disponible au Fabricarium de Polytech Lille.&lt;br /&gt;
&lt;br /&gt;
===Contexte===&lt;br /&gt;
&lt;br /&gt;
==== Informations à traiter ====&lt;br /&gt;
&lt;br /&gt;
Pour que notre projet soit intéressant, aux yeux des consommateurs, nous devons définir l'utilité que pourrait avoir un vêtement connecté.&lt;br /&gt;
Notre application ne doit pas être un simple gadget mais un objet qui semble utile et faire en sorte qu'il soit indispensable dans le futur. &amp;quot;Il faut créer le besoin si l'on veut vendre un objet et faire du profit.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Dans un premier temps nous devons faire une étude du marché pour savoir ce qui a déjà été fait. &lt;br /&gt;
Nous devons savoir quelles types d'informations les vêtements et objets connectés transmettent, pour quels usages et pour quels publics.&lt;br /&gt;
&lt;br /&gt;
====Le Sport====&lt;br /&gt;
&lt;br /&gt;
La plupart des objets connectés à l'Homme sont utilisés pour l'informer de ses performances physiques: &lt;br /&gt;
Combien de kilomètres ils ont parcouru, combien de pas ont été effectués, combien de calories ont été perdues.&lt;br /&gt;
&lt;br /&gt;
Ce sont principalement des performances liées à la marche et la course à pied. De nouveaux objets connectés ont vu récemment le jour, notamment les bracelets connectés permettant de récolter des informations sur les nageurs, toujours dans le but d'avoir un suivi sur ses performances (nombres de mètres nagés par rapport à un certain temps).&lt;br /&gt;
&lt;br /&gt;
====Santé et bien être====&lt;br /&gt;
&lt;br /&gt;
Encore en pleine expansion que très peu d'objets connectés se sont intéressés au domaine de la santé: ici un exemple de t-shirt connecté permettant de contrôler le rythme cardiaque: [http://pulse.edf.com/fr/les-textiles-intelligents-peuvent-surveiller-notre-coeur?gclid=Cj0KEQiAiamlBRCgj83PiYm6--gBEiQArnojD4QntiVq9cLZeZDRGqMckMIQzkr6RH3cFxJnxJk0tE0aApoA8P8HAQ]&lt;br /&gt;
&lt;br /&gt;
Beaucoup d'application ont déjà vu le jour: [http://www.techniques-ingenieur.fr/actualite/materiaux-innovants-nano-thematique_6342/ces-textiles-intelligents-qui-prennent-soin-de-nous-article_286868/]&lt;br /&gt;
&lt;br /&gt;
Quelles sont les applications que l'on pourrait faire? Quels suivis sont à faire pour quels types de maladie etc..?&lt;br /&gt;
&lt;br /&gt;
====La régulation de température====&lt;br /&gt;
&lt;br /&gt;
Grâce aux fibres électroniques tissées il est possible de chauffer un t-shirt ou de le refroidir cela pourrait se régler en fonction de la température du corps ou bien par simple commande de l'utilisateur (cela pourrait s'avérer très utile avec le réchauffement climatique qui est en train d'arriver, winter is comming..).&lt;br /&gt;
&lt;br /&gt;
===Notre Projet===&lt;br /&gt;
&lt;br /&gt;
Ce que nous voulons faire nous: Un T-shirt permettant à la fois de calculer les performances sportives mais aussi d'avoir un suivi sur notre santé et pourquoi pas faire en sorte de réguler la température du corps lors d'un effort..&lt;br /&gt;
&lt;br /&gt;
-&amp;gt;Calculer le nombre de pas (Podomètre)&lt;br /&gt;
&lt;br /&gt;
-&amp;gt;Calculer une distance, la vitesse, la position sur un carte? (GPS)&lt;br /&gt;
&lt;br /&gt;
-&amp;gt;Calculer la fréquence cardiaque ? (Cardiofréquencemètre)&lt;br /&gt;
&lt;br /&gt;
-&amp;gt;Afficher la fréquence cardiaque sur LED&lt;br /&gt;
&lt;br /&gt;
-&amp;gt;Mesurer la température du corps&lt;br /&gt;
&lt;br /&gt;
-&amp;gt;Transférer toutes ses informations sur l'application mobile (Android)&lt;br /&gt;
&lt;br /&gt;
== '''Etapes du Projet''' ==&lt;br /&gt;
&lt;br /&gt;
*Partie électronique&lt;br /&gt;
** Définition des différents modules (Capteurs de températures, accéléromètre..)&lt;br /&gt;
** Connecter et programmer les différents modules au microprocesseur Lilypad&lt;br /&gt;
** Créer un programme pour ordonnancer les différents modules&lt;br /&gt;
** Connecter le module Bluetooth BLE et le configurer&lt;br /&gt;
** Intégrer les composants au tee-shirt&lt;br /&gt;
&lt;br /&gt;
*Partie informatique&lt;br /&gt;
** Créer une application Android simple (Par exemple HelloWorld)&lt;br /&gt;
** Importer l'application sur smart-phone&lt;br /&gt;
** Savoir faire un menu et sous-menu [http://a-renouard.developpez.com/tutoriels/android/menu-sous-menu/]&lt;br /&gt;
** Comprendre les Services [http://nbenbourahla.developpez.com/tutoriels/android/services-sous-android/], les maîtriser: [http://blog.developpez.com/ndruet/p8571/android/creation_de_service]&lt;br /&gt;
** Comprendre les vues sous Android [http://nbenbourahla.developpez.com/tutoriels/android/introduction-vues-sous-android/]&lt;br /&gt;
** Comment utiliser SQLite sur Android [http://a-renouard.developpez.com/tutoriels/android/sqlite/]&lt;br /&gt;
** Créer les programmes principaux:&lt;br /&gt;
*** Intégration Google Map sur Android (pour utiliser le GPS) [http://michel-dirix.developpez.com/tutoriels/android/integration-google-maps-android/]&lt;br /&gt;
*** Ajouter les protocoles nécessaires pour communiquer en Bluetooth [http://sberfini.developpez.com/tutoriaux/android/bluetooth/], utilisation du NFC [http://sberfini.developpez.com/tutoriaux/android/nfc/bluetooth/]&lt;br /&gt;
*** Une vue pour afficher les différentes applications (activités)&lt;br /&gt;
*** Une activité pour gérer l'affichage des informations envoyé depuis le microprocesseur&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Matériel possédé ===&lt;br /&gt;
&lt;br /&gt;
* LilyPad Accelerometer ADXL335 [https://www.sparkfun.com/products/9267] [&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;fourni le 28/1/2015&amp;lt;/span&amp;gt;]&lt;br /&gt;
&lt;br /&gt;
* LilyPad Temperature Sensor [https://www.sparkfun.com/products/8777] [&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;fourni le 28/1/2015&amp;lt;/span&amp;gt;]&lt;br /&gt;
&lt;br /&gt;
* Arduino Lilypad Atmega 328P [http://arduino.cc/en/Main/ArduinoBoardLilyPad] [&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;fourni le 28/1/2015&amp;lt;/span&amp;gt;]&lt;br /&gt;
&lt;br /&gt;
* SparkFun FTDI Basic Breakout - 3.3V [https://www.sparkfun.com/products/9873] [&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;fourni le 28/1/2015&amp;lt;/span&amp;gt;]&lt;br /&gt;
&lt;br /&gt;
* Une dizaine de LilyPad LED Red [https://www.sparkfun.com/products/10044] [&amp;lt;span style=&amp;quot;color: lightgreen;&amp;quot;&amp;gt;LEDs LilyPad blanches disponibles&amp;lt;/span&amp;gt;]&lt;br /&gt;
&lt;br /&gt;
* Interrupteur [&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;fourni le 28/1/2015&amp;lt;/span&amp;gt;]&lt;br /&gt;
&lt;br /&gt;
* BLE nRF8001 [http://www.nordicsemi.com/eng/Products/Bluetooth-Smart-Bluetooth-low-energy/nRF8001] [&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;1 fourni le 9/2/2015&amp;lt;/span&amp;gt;]&lt;br /&gt;
&lt;br /&gt;
=== Matériel nécessaire === &lt;br /&gt;
&lt;br /&gt;
* Olimex platine ECG&lt;br /&gt;
&lt;br /&gt;
* [&amp;lt;span style=&amp;quot;color: blue;&amp;quot;&amp;gt; Du fil conducteur en bobine &amp;lt;/span&amp;gt;]&lt;br /&gt;
&lt;br /&gt;
== '''Tableau de bord''' ==&lt;br /&gt;
&lt;br /&gt;
===Semaine 1===&lt;br /&gt;
&lt;br /&gt;
Nous avons fait le point sur les capacités qu'aura notre t-shirt connecté.&lt;br /&gt;
&lt;br /&gt;
Après discussion avec M.Boë nous avons décidé d'utiliser dans un premier temps deux capteurs, Accéléromètre et capteur de température (emprunté à M.Redon), pour nous concentrer plus rapidement sur les deux problèmes majeur que nous allons rencontrer, celle de la communication entre l'arduino (Lilypad), le BLE et l'application androïde du téléphone et celle de l'énergie où le problème réside dans l'alimentation système embarqué. Nous devons trouver un composant à la fois petit, pour pouvoir être porté, et assez puissant pour délivrer de l'énergie au microprocesseur pendant plusieurs mois. Nous devons nous demander quand éteindre le micro-contrôleur et à quel moment le Bluetooth sera connecté. Nous allons pour cela ajouter un interrupteur glissière au tee-shirt.&lt;br /&gt;
&lt;br /&gt;
Nous nous sommes informés sur le bluetooth de type BLE :&lt;br /&gt;
&lt;br /&gt;
Histoire du Bluetooth: [http://www.frandroid.com/maison-connectee/232622_dossier-bluetooth-fonctionnement-interet-les-objets-connectes]&lt;br /&gt;
&lt;br /&gt;
Projet de conception d'une liaison bluetooh 2.0 : [file:///tmp/P12Rap_bluetooth.pdf]&lt;br /&gt;
&lt;br /&gt;
Protocole Bluetooth: SIG (Special Interest Group)&lt;br /&gt;
&lt;br /&gt;
'''Bluetooth 2.0 :'''&lt;br /&gt;
&lt;br /&gt;
Appairage facile et sécurisé : le SSP (Secure Simple Pairing)&lt;br /&gt;
&lt;br /&gt;
Protocole?: EDR (Enhanced Data Rate)&lt;br /&gt;
&lt;br /&gt;
'''Bluetooth 3.0: '''&lt;br /&gt;
&lt;br /&gt;
Protocole: HS (High Speed)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Bluetooth 4.0'''&lt;br /&gt;
&lt;br /&gt;
Conception d'un module bluetooth : [http://www.digikey.fr/fr/articles/techzone/2014/jun/how-to-build-low-power-wireless-systems-using-bluetooth-smart-4]&lt;br /&gt;
&lt;br /&gt;
Classic Bluetooth: Regroupe les versions 1.0 -&amp;gt; 3.0&lt;br /&gt;
&lt;br /&gt;
Protocole: LE (Bluetooth Low Energy)  --&amp;gt; Réduit fortement la consommation de la puce Bluetooth avec un protocole différent&lt;br /&gt;
&lt;br /&gt;
Dans le 4.0 le constructeur peut décider d'implémenter deux modes: Bluetooth Low Energy seul (single mode) ou avec le Classic Bluetooth (dual mode) qui lui permet de conserver la compatibilité avec les autres appareils.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Semaine 2===&lt;br /&gt;
&lt;br /&gt;
Nous avons établi une connexion avec l'Atmega 328P et communiqué avec l'accéléromètre et le capteur de température. Malheureusement le capteur de température LyliPad n'est pas très précis, nous avons donc opté pour un capteur DS18B20, c'est un capteur 1-wire. Nous avons donc commencé par comprendre cette technologie puis grâce à un programme trouvé sur internet, nous essayons de l'adapter à notre microprocesseur lillypad pour communiquer avec le DS18B20.&lt;br /&gt;
&lt;br /&gt;
Parallèlement nous avons débuté la programmation d'application Android. Nous utilisons pour cela l'IDE Eclipse. Nous rencontrons actuellement des problèmes d'environnement pour compiler un programme Android simple comme &amp;quot;Hello World&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===Semaine 3===&lt;br /&gt;
*'''Partie Hardware'''&lt;br /&gt;
**Toujours des problèmes avec le capteur de température DS18B20. Nous arrivons à envoyer le programme C sur l'arduino mais la communication avec le capteur ne se fait pas. Nous avons donc décortiqué le programme et comprendre son fonctionnement.&lt;br /&gt;
&lt;br /&gt;
*'''Partie application'''&lt;br /&gt;
**Après de nombreux bug d’installation des plateformes (Eclipse, JDK, SDK, Bibliothèque etc..) nous réussissons à lancer l'application &amp;quot;HelloWorld&amp;quot; dans un émulateur de téléphone Android. Nous pouvons maintenant nous concentrer vers la programmation orienté objet Android et détailler plus spécifiquement les étapes à réaliser avant de pouvoir coder notre programme final (cf &amp;quot;Etapes du Projet&amp;quot;).&lt;br /&gt;
Notions à connaitre:&lt;br /&gt;
*Introduction aux ressources Android (les éléments qui s'afficheront à l'écran ou avec lesquels l'utilisateur pourra interagir [http://openclassrooms.com/courses/creez-des-applications-pour-android/les-ressources-2])&lt;br /&gt;
*Introduction à la notion de &amp;quot;Style&amp;quot; et de &amp;quot;Thèmes&amp;quot; [http://cyril-mottier.developpez.com/tutoriels/android/introduction-styles-themes/]&lt;br /&gt;
&lt;br /&gt;
===Semaine 4===&lt;br /&gt;
*'''Partie Hardware'''&lt;br /&gt;
** Nous arrivons à communiquer avec le capteur DS18B20. Notre programme détecte le capteur, arrive à l'initialiser mais nous avons à présent des problèmes d'envoi de données pour connaitre la température.&lt;br /&gt;
&lt;br /&gt;
*'''Partie application'''&lt;br /&gt;
** Nous essayons dans un premier temps d'afficher un menu simple dans lequel nous pouvons naviguer [http://www.tutomobile.fr/faire-des-menus-et-sous-menus-tutoriel-android-n%C2%B012/27/07/2010/] cependant nous rencontrons des problèmes de librairies, en effet nous ne disposons pas de toutes les images publique qu'Android nous offre [http://developer.android.com/guide/topics/resources/drawable-resource.html], nous devrons donc ajouter les images nous même [http://androiddrawableexplorer.appspot.com/] dans la librairie..&lt;br /&gt;
&lt;br /&gt;
===Semaine 5===&lt;br /&gt;
*'''Partie Hardware'''&lt;br /&gt;
**Toujours des problèmes de communication avec le capteur de température. Le programme avec l'IDE fonctionne mais nous ne comprennons pas pourquoi cela ne marche pas avec le programme en c.&lt;br /&gt;
&lt;br /&gt;
*'''Partie application'''&lt;br /&gt;
Nous avons réussis à afficher un menu simple dans lequel figure quelques boutons qui nous serviront à naviguer entre les activités:&lt;br /&gt;
** Entrainement&lt;br /&gt;
** Historique&lt;br /&gt;
** Paramètres&lt;br /&gt;
** Connexion&lt;br /&gt;
&lt;br /&gt;
Voici à quoi ressemble notre menu pour le moment:&lt;br /&gt;
[[Fichier:Main activity Avant.png|250px|gauche]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Définition des différentes activités:====&lt;br /&gt;
=====L'activité &amp;quot;Entrainement&amp;quot;=====&lt;br /&gt;
Une fois connecté via Bluetooth grâce à l'activité &amp;quot;Connexion&amp;quot;, l'utilisateur devra appuyer sur le bouton &amp;quot;Start&amp;quot; pour commencer son entrainement. L'application affichera en temps réel les données envoyé depuis le t-shirt et indiquera à l'utilisateur le temps qui c'est écoulé. En background elle écrira dans un fichier texte situé dans un dossier spécifique afin de traiter ces données par la suite.&lt;br /&gt;
Lorsque l'utilisateur termine son entrainement il devra appuyer sur le bouton &amp;quot;Stop&amp;quot;, une fenêtre s'ouvrira et lui demandera s'il souhaite enregistrer ou supprimer les données de l'entrainement qu'il vient d'effectuer. S'il décide d'enregistrer il sera automatiquement redirigé vers l'activité &amp;quot;Stats&amp;quot; (non pas accessible depuis le menu) qui affichera le bilan de son entrainement.&lt;br /&gt;
&lt;br /&gt;
=====L'activité &amp;quot;Historique&amp;quot;=====&lt;br /&gt;
Recense tout les entrainements effectué par l'utilisateur. De cette activité il pourra décider de supprimer ses anciens entrainements (cela supprimera le fichier texte associé en background) ou bien d'en afficher ses statistiques (&amp;quot;Activité Stats&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
=====L'activité &amp;quot;Paramètre&amp;quot;=====&lt;br /&gt;
Activité optionnel, servira à récupérer certaines informations sur l'utilisateur qui pourrait nous être utile pour certains calcul. Comme le nombre de calories dépensé lors de l'entrainement ou autre.. Nous n'avons pas encore défini les calculs que nous effectuerons&lt;br /&gt;
&lt;br /&gt;
=====L'activité &amp;quot;Connexion&amp;quot;=====&lt;br /&gt;
Servira à connecter l'application au T-Shirt via Bluetooth&lt;br /&gt;
&lt;br /&gt;
===Semaine 6===&lt;br /&gt;
*'''Partie Hardware'''&lt;br /&gt;
** Nous avons essayé de télécharger d'autres programmes pour communiquer avec le capteur de température mais sans aucun succès. Nous avons donc essayé de traduire le programme de l'IDE (écrit en c++) en c mais toujours pas de résultat. Nous avons donc décider de laisser tomber ce capteur 1-WIRE et de prendre un capteur analogique, le TMP36. Nous sommes donc passés à la communication Bluetooth sur le lilypad avec le BLE nrf8001.&lt;br /&gt;
&lt;br /&gt;
*'''Partie application'''&lt;br /&gt;
**Nous avons configuré l'activité &amp;quot;Paramètre&amp;quot;. Elle demande quelques information à l'utilisateur comme son Nom, son âge, sa taille et son poids, utile pour calculer certains paramètres qui reste toujours à définir. (Savoir son nom ne nous est pas vraiment utile, il sert à créer une affinité entre l'utilisateur et l'application)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:ParamPref.png|gauche]] [[Fichier:ParamPref Nom.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Semaine 7===&lt;br /&gt;
*'''Partie Hardware'''&lt;br /&gt;
** Après avoir étudier le fonctionnement du BLE, nous avons téléchargé un code source sur internet pour l'IDE d'arduino que nous avons retranscrit en C. Le programme comportait à ce moment beaucoup de bogs que nous devions résoudre.&lt;br /&gt;
&lt;br /&gt;
*'''Partie application'''&lt;br /&gt;
** Découverte et apprentissage des fonctions permettant la communication Bluetooth.&lt;br /&gt;
&lt;br /&gt;
Nous avons rajouter une &amp;quot;actionbar&amp;quot; et également redéfini l'affichage du menu qui maintenant est plus sobre:&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Menu apres.png|250px]]&lt;br /&gt;
&lt;br /&gt;
===Semaine 8=== &lt;br /&gt;
*'''Partie Hardware'''&lt;br /&gt;
** Après avoir déboguer la communication I2C sur le programme arduino et les quelques autres bogs, nous avons pu commencer à utiliser la communication Bluetooth avec l'application téléphone. Nous avons donc établi un protocole de communication entre l'application et le lilypad pour pouvoir communiquer.&lt;br /&gt;
*'''Partie application'''&lt;br /&gt;
** Problème avec la connexion Bluetooth, certaines fonctions ne sont pas reconnu par l'IDE. Cela est peut être dû à une mauvaise installation des bibliothèques? Nous avons donc transféré notre projet vers un nouveaux projet qui maintenant compile, allez savoir comment..&lt;br /&gt;
&lt;br /&gt;
===Semaine 9===&lt;br /&gt;
*'''Partie Hardware'''&lt;br /&gt;
** Premier essai d'un programme pour mettre le lilypad en mode veille lorsque aucun appareil n'est connecté au Bluetooth. Reste à faire des tests de consommation électriques pour valider le code.&lt;br /&gt;
&lt;br /&gt;
*'''Partie application'''&lt;br /&gt;
** Premiers test de la connexion Bluetooth effectué. Nous avons abandonné l'idée d'utiliser l'émulateur de téléphone car il ne supporte pas le Bluetooth. Nous arrivons à communiquer avec le T-shirt, nous pouvons émettre et recevoir des caractères. Pour une question pratique la connexion ne se fera plus depuis le bouton &amp;quot;Connexion&amp;quot; du menu mais directement dans l'activité &amp;quot;Entrainement&amp;quot;. Lorsque l'utilisateur appuiera sur ce bouton depuis le menu, l'application lui demandera de se connecter au T-shirt. Une fois connecté le bouton &amp;quot;Start&amp;quot; apparait puis la communication débutera lorsqu'il appuiera dessus.&lt;br /&gt;
&lt;br /&gt;
===Semaine 10===&lt;br /&gt;
*'''Partie Hardware'''&lt;br /&gt;
** Ajout du capteur de température sur le lilypad pour envoyer les données. Nous avons également tester de nouveau la communication Bluetooth suite à une modification de l'application.&lt;br /&gt;
&lt;br /&gt;
*'''Partie application'''&lt;br /&gt;
**Définition de l'activité &amp;quot;Historique&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
Cette activité va scanner tous les fichiers créés par l'utilisateur et les afficher à l'aide d'une listView [http://www.tutomobile.fr/personnaliser-une-listview-tutoriel-android-n%C2%B07/04/07/2010/]. Lorsque l'on cliquera sur l'un des fichiers l'activité &amp;quot;Stats&amp;quot; se lancera. Nous avons également configuré une AlertDialog [http://www.tutomobile.fr/personnaliser-un-alertdialog-tutoriel-android-n%C2%B020/04/11/2010/] qui s'affiche lorsque l'on clique longuement sur un Item, celle-ci demande alors si l'on veut supprimer ou afficher les statistiques.&lt;br /&gt;
&lt;br /&gt;
Voici à quoi ressemble cette activité:&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Historique.png|gauche|250px]]  [[Fichier:Historique possibilite de supprimer les fichier.png|250px|centre]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous devons encore déterminer les détails que chaque Item aura et ajouter un TextView à la AlertDialog qui indiquera quelle Entrainement a été sélectionné.&lt;br /&gt;
&lt;br /&gt;
===Semaine 11===&lt;br /&gt;
*'''Partie Hardware'''&lt;br /&gt;
** Ajout de l'accéléromètre pour réaliser le podomètre. C'est un accéléromètre numérique (MMA8452Q), cet accéléromètre va nous permettre de générer une interruption à chaque fois qu'une accélération est détectée. Quelques petits problèmes lors de l'initialisation de celui ci mais les problèmes ont été résolu rapidement. Nous allons pouvoir commencer la construction du tee-shirt.&lt;br /&gt;
[[Fichier:Mma8452q.jpg|100px]]&lt;br /&gt;
*'''Partie application'''&lt;br /&gt;
**Définition de l'activité &amp;quot;Stats&amp;quot;.&lt;br /&gt;
Cette activité va lire tout le fichier écris au préalable lors de l'entrainement, calculera des moyennes et permettra d'afficher des graphiques de certains paramètres en fonction du temps, pour cela nous avons utilisé la librairie GraphView, disponible via ce lien: [http://www.android-graphview.org/]&lt;br /&gt;
&lt;br /&gt;
En voici un premier jet, dans cet exemple nous avons affiché le graphique de la fréquence cardiaque en fonction du temps.&lt;br /&gt;
:&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Stats 2.png|250px]]&lt;br /&gt;
&lt;br /&gt;
===Semaine 12===&lt;br /&gt;
*'''Partie Hardware'''&lt;br /&gt;
*Nous avons cousu les composants électroniques sur le T-shirt&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Exterrieur.jpg|250px]]  [[Fichier:Interrieur.jpg|265px]] [[Fichier:Exterrieur Lily.jpg|250px]] [[Fichier:Interrieur Lily.jpg|235px]]&lt;br /&gt;
&lt;br /&gt;
*'''Partie application'''&lt;br /&gt;
**Redéfinition du Menu&lt;br /&gt;
Nous avons apporté quelques modifications à l'application, désormais le menu ne comporte plus le bouton connexion. La connexion Bluetooth sera établi lorsque l'utilisateur sélectionnera le bouton &amp;quot;Entrainement&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Menu.png|250px]]&lt;br /&gt;
&lt;br /&gt;
* Entrainement:&lt;br /&gt;
Si l'utilisateur n'a pas activé son bluetooth l'application lui demande automatiquement de l'activer, s'il ne le fait pas il ne pourra faire l'entrainement. Il devra ensuite sélectionner le T-Shirt pour s'y connecter, une fois la connexion établi l'entrainement pourra commencer. Il pourra alors constater en temps réels les données envoyé par le T-shirt, c'est à dire [...]&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Entrainement demande de connection bluetooth.png|250px]] &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Redéfinition de la page Historique&lt;br /&gt;
Il est désormais possible de sélectionner plusieurs éléments afin de les supprimer en même temps. Nous avons modifié l'affichage, seul la date, l'heure ainsi que le numéro de l'entrainement sont affiché.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Historique 2.png|250px]] [[Fichier:Historique selection.png|250px]] [[Fichier:Historique suppression.png|250px]]&lt;br /&gt;
&lt;br /&gt;
* Ajout d'information sur la page &amp;quot;Détails&amp;quot;&lt;br /&gt;
L'utilisateur peut désormais connaitre la distance parcouru lors de son entrainement (en supposant qu'un pas vaut 70cm). Il peut également passer d'un graphique à l'autre pour voir l'évolution de la température de son corps ou de sa fréquence cardiaque lors de l'entrainement. Nous affichons maintenant la vraie date (et non le nom du fichier), nous indiquons aussi l'heure de début de l'entrainement.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Détails Freq.png|250px]] [[Fichier:Détails temp.png|250px]]&lt;br /&gt;
&lt;br /&gt;
== Liens ==&lt;br /&gt;
&lt;br /&gt;
RFDUINO [www.rfduino.com/] : RFD22102 RFduino DIP [http://www.rfduino.com/product/rfd22102-rfduino-dip/index.html]&lt;br /&gt;
&lt;br /&gt;
Nordic rf8001 (BLE) [http://www.nordicsemi.com/eng/Products/Bluetooth-Smart-Bluetooth-low-energy/nRF8001]&lt;br /&gt;
&lt;br /&gt;
Arduino SHIELD-EKG-EMG: [https://www.olimex.com/Products/Duino/Shields/SHIELD-EKG-EMG/]&lt;br /&gt;
&lt;br /&gt;
Électrocardiogramme [http://fab.cba.mit.edu/classes/863.12/people/Adam.Marblestone/AHM_week05.html]&lt;br /&gt;
&lt;br /&gt;
LED [http://www.adafruit.com/] --&amp;gt; Fil de LED Bleu [http://www.adafruit.com/products/895] ---&amp;gt; Lot de 25 LED [http://www.adafruit.com/products/388] ---&amp;gt; [http://www.adafruit.com/products/780]&lt;br /&gt;
&lt;br /&gt;
GraphView: [https://github.com/jjoe64/GraphView]&lt;br /&gt;
&lt;br /&gt;
Library for DS18B20 [http://sourceforge.net/projects/davidegironi/files/avr-lib/avr_lib_ds18b20_01b.zip/download]&lt;br /&gt;
&lt;br /&gt;
== Tuto ==&lt;br /&gt;
&lt;br /&gt;
Tuto arduino : [https://tutoarduino.com/choix-tutoriels/]&lt;br /&gt;
&lt;br /&gt;
Tuto capteur de température: [https://tutoarduino.com/portfolio-items/tpbd2-2-detecteur-de-temperature/]&lt;br /&gt;
&lt;br /&gt;
Tuto Bluetooth: [https://tutoarduino.com/portfolio-items/le-bluetooth/] connexion app [http://nononux.free.fr/index.php?page=elec-brico-bluetooth-android-microcontroleur]&lt;br /&gt;
&lt;br /&gt;
Tuto Android: [http://android.developpez.com/cours/] [https://sites.google.com/site/redezzahir/coursJAVA/tp10] [http://sampleprogramz.com/android/] fiche: [http://www.iutbayonne.univ-pau.fr/~dalmau/documents/cours/android/Guide%20TPs%20Android%20avec%20Eclipse.pdf]&lt;br /&gt;
&lt;br /&gt;
Tuto BLE Android: [http://developer.android.com/guide/topics/connectivity/bluetooth-le.html]&lt;br /&gt;
&lt;br /&gt;
Tuto ListView: [http://www.ltm.fr/creez-une-vue-en-liste-listview-avec-texte-image/]  GraphView: [http://www.android-graphview.org/download--getting-started.html]&lt;br /&gt;
&lt;br /&gt;
Tuto GPS android: [http://www.tutomobile.fr/geolocalisation-grace-au-gps-ou-au-reseau-mobile-tutoriel-android-n%C2%B015/13/08/2010/]&lt;/div&gt;</summary>
		<author><name>Vpiat</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=V%C3%AAtements_intelligents&amp;diff=20791</id>
		<title>Vêtements intelligents</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=V%C3%AAtements_intelligents&amp;diff=20791"/>
				<updated>2015-05-08T17:29:40Z</updated>
		
		<summary type="html">&lt;p&gt;Vpiat : /* Semaine 11 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Cahier des Charges==&lt;br /&gt;
===Présentation générale du projet===&lt;br /&gt;
&lt;br /&gt;
=== Objectif ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Concevoir un système d'interaction avec des objets connectés sur les vêtements ou le corps.&lt;br /&gt;
&lt;br /&gt;
=== '''Description du projet''' ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Les systèmes embarqués sur les humains commencent à se développer (lunettes Google, montres connectées).&lt;br /&gt;
&lt;br /&gt;
Nous proposons ici de réaliser une plateforme basée sur la '''technologie BLE''' (Bluetooth Low Energy ou Bluetooth 4.0).&lt;br /&gt;
&lt;br /&gt;
Deux parties seront mise en oeuvre :&lt;br /&gt;
    &lt;br /&gt;
* un système embarqué compact permettant de recevoir des information et en transmettre ;&lt;br /&gt;
* une application Android permettant de communiquer avec le système.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Le système sera intégré sur un t-shirt en utilisant notamment la machine à coudre numérique disponible au Fabricarium de Polytech Lille.&lt;br /&gt;
&lt;br /&gt;
===Contexte===&lt;br /&gt;
&lt;br /&gt;
==== Informations à traiter ====&lt;br /&gt;
&lt;br /&gt;
Pour que notre projet soit intéressant, aux yeux des consommateurs, nous devons définir l'utilité que pourrait avoir un vêtement connecté.&lt;br /&gt;
Notre application ne doit pas être un simple gadget mais un objet qui semble utile et faire en sorte qu'il soit indispensable dans le futur. &amp;quot;Il faut créer le besoin si l'on veut vendre un objet et faire du profit.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Dans un premier temps nous devons faire une étude du marché pour savoir ce qui a déjà été fait. &lt;br /&gt;
Nous devons savoir quelles types d'informations les vêtements et objets connectés transmettent, pour quels usages et pour quels publics.&lt;br /&gt;
&lt;br /&gt;
====Le Sport====&lt;br /&gt;
&lt;br /&gt;
La plupart des objets connectés à l'Homme sont utilisés pour l'informer de ses performances physiques: &lt;br /&gt;
Combien de kilomètres ils ont parcouru, combien de pas ont été effectués, combien de calories ont été perdues.&lt;br /&gt;
&lt;br /&gt;
Ce sont principalement des performances liées à la marche et la course à pied. De nouveaux objets connectés ont vu récemment le jour, notamment les bracelets connectés permettant de récolter des informations sur les nageurs, toujours dans le but d'avoir un suivi sur ses performances (nombres de mètres nagés par rapport à un certain temps).&lt;br /&gt;
&lt;br /&gt;
====Santé et bien être====&lt;br /&gt;
&lt;br /&gt;
Encore en pleine expansion que très peu d'objets connectés se sont intéressés au domaine de la santé: ici un exemple de t-shirt connecté permettant de contrôler le rythme cardiaque: [http://pulse.edf.com/fr/les-textiles-intelligents-peuvent-surveiller-notre-coeur?gclid=Cj0KEQiAiamlBRCgj83PiYm6--gBEiQArnojD4QntiVq9cLZeZDRGqMckMIQzkr6RH3cFxJnxJk0tE0aApoA8P8HAQ]&lt;br /&gt;
&lt;br /&gt;
Beaucoup d'application ont déjà vu le jour: [http://www.techniques-ingenieur.fr/actualite/materiaux-innovants-nano-thematique_6342/ces-textiles-intelligents-qui-prennent-soin-de-nous-article_286868/]&lt;br /&gt;
&lt;br /&gt;
Quelles sont les applications que l'on pourrait faire? Quels suivis sont à faire pour quels types de maladie etc..?&lt;br /&gt;
&lt;br /&gt;
====La régulation de température====&lt;br /&gt;
&lt;br /&gt;
Grâce aux fibres électroniques tissées il est possible de chauffer un t-shirt ou de le refroidir cela pourrait se régler en fonction de la température du corps ou bien par simple commande de l'utilisateur (cela pourrait s'avérer très utile avec le réchauffement climatique qui est en train d'arriver, winter is comming..).&lt;br /&gt;
&lt;br /&gt;
===Notre Projet===&lt;br /&gt;
&lt;br /&gt;
Ce que nous voulons faire nous: Un T-shirt permettant à la fois de calculer les performances sportives mais aussi d'avoir un suivi sur notre santé et pourquoi pas faire en sorte de réguler la température du corps lors d'un effort..&lt;br /&gt;
&lt;br /&gt;
-&amp;gt;Calculer le nombre de pas (Podomètre)&lt;br /&gt;
&lt;br /&gt;
-&amp;gt;Calculer une distance, la vitesse, la position sur un carte? (GPS)&lt;br /&gt;
&lt;br /&gt;
-&amp;gt;Calculer la fréquence cardiaque ? (Cardiofréquencemètre)&lt;br /&gt;
&lt;br /&gt;
-&amp;gt;Afficher la fréquence cardiaque sur LED&lt;br /&gt;
&lt;br /&gt;
-&amp;gt;Mesurer la température du corps&lt;br /&gt;
&lt;br /&gt;
-&amp;gt;Transférer toutes ses informations sur l'application mobile (Android)&lt;br /&gt;
&lt;br /&gt;
== '''Etapes du Projet''' ==&lt;br /&gt;
&lt;br /&gt;
*Partie électronique&lt;br /&gt;
** Définition des différents modules (Capteurs de températures, accéléromètre..)&lt;br /&gt;
** Connecter et programmer les différents modules au microprocesseur Lilypad&lt;br /&gt;
** Créer un programme pour ordonnancer les différents modules&lt;br /&gt;
** Connecter le module Bluetooth BLE et le configurer&lt;br /&gt;
** Intégrer les composants au tee-shirt&lt;br /&gt;
&lt;br /&gt;
*Partie informatique&lt;br /&gt;
** Créer une application Android simple (Par exemple HelloWorld)&lt;br /&gt;
** Importer l'application sur smart-phone&lt;br /&gt;
** Savoir faire un menu et sous-menu [http://a-renouard.developpez.com/tutoriels/android/menu-sous-menu/]&lt;br /&gt;
** Comprendre les Services [http://nbenbourahla.developpez.com/tutoriels/android/services-sous-android/], les maîtriser: [http://blog.developpez.com/ndruet/p8571/android/creation_de_service]&lt;br /&gt;
** Comprendre les vues sous Android [http://nbenbourahla.developpez.com/tutoriels/android/introduction-vues-sous-android/]&lt;br /&gt;
** Comment utiliser SQLite sur Android [http://a-renouard.developpez.com/tutoriels/android/sqlite/]&lt;br /&gt;
** Créer les programmes principaux:&lt;br /&gt;
*** Intégration Google Map sur Android (pour utiliser le GPS) [http://michel-dirix.developpez.com/tutoriels/android/integration-google-maps-android/]&lt;br /&gt;
*** Ajouter les protocoles nécessaires pour communiquer en Bluetooth [http://sberfini.developpez.com/tutoriaux/android/bluetooth/], utilisation du NFC [http://sberfini.developpez.com/tutoriaux/android/nfc/bluetooth/]&lt;br /&gt;
*** Une vue pour afficher les différentes applications (activités)&lt;br /&gt;
*** Une activité pour gérer l'affichage des informations envoyé depuis le microprocesseur&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Matériel possédé ===&lt;br /&gt;
&lt;br /&gt;
* LilyPad Accelerometer ADXL335 [https://www.sparkfun.com/products/9267] [&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;fourni le 28/1/2015&amp;lt;/span&amp;gt;]&lt;br /&gt;
&lt;br /&gt;
* LilyPad Temperature Sensor [https://www.sparkfun.com/products/8777] [&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;fourni le 28/1/2015&amp;lt;/span&amp;gt;]&lt;br /&gt;
&lt;br /&gt;
* Arduino Lilypad Atmega 328P [http://arduino.cc/en/Main/ArduinoBoardLilyPad] [&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;fourni le 28/1/2015&amp;lt;/span&amp;gt;]&lt;br /&gt;
&lt;br /&gt;
* SparkFun FTDI Basic Breakout - 3.3V [https://www.sparkfun.com/products/9873] [&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;fourni le 28/1/2015&amp;lt;/span&amp;gt;]&lt;br /&gt;
&lt;br /&gt;
* Une dizaine de LilyPad LED Red [https://www.sparkfun.com/products/10044] [&amp;lt;span style=&amp;quot;color: lightgreen;&amp;quot;&amp;gt;LEDs LilyPad blanches disponibles&amp;lt;/span&amp;gt;]&lt;br /&gt;
&lt;br /&gt;
* Interrupteur [&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;fourni le 28/1/2015&amp;lt;/span&amp;gt;]&lt;br /&gt;
&lt;br /&gt;
* BLE nRF8001 [http://www.nordicsemi.com/eng/Products/Bluetooth-Smart-Bluetooth-low-energy/nRF8001] [&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;1 fourni le 9/2/2015&amp;lt;/span&amp;gt;]&lt;br /&gt;
&lt;br /&gt;
=== Matériel nécessaire === &lt;br /&gt;
&lt;br /&gt;
* Olimex platine ECG&lt;br /&gt;
&lt;br /&gt;
* [&amp;lt;span style=&amp;quot;color: blue;&amp;quot;&amp;gt; Du fil conducteur en bobine &amp;lt;/span&amp;gt;]&lt;br /&gt;
&lt;br /&gt;
== '''Tableau de bord''' ==&lt;br /&gt;
&lt;br /&gt;
===Semaine 1===&lt;br /&gt;
&lt;br /&gt;
Nous avons fait le point sur les capacités qu'aura notre t-shirt connecté.&lt;br /&gt;
&lt;br /&gt;
Après discussion avec M.Boë nous avons décidé d'utiliser dans un premier temps deux capteurs, Accéléromètre et capteur de température (emprunté à M.Redon), pour nous concentrer plus rapidement sur les deux problèmes majeur que nous allons rencontrer, celle de la communication entre l'arduino (Lilypad), le BLE et l'application androïde du téléphone et celle de l'énergie où le problème réside dans l'alimentation système embarqué. Nous devons trouver un composant à la fois petit, pour pouvoir être porté, et assez puissant pour délivrer de l'énergie au microprocesseur pendant plusieurs mois. Nous devons nous demander quand éteindre le micro-contrôleur et à quel moment le Bluetooth sera connecté. Nous allons pour cela ajouter un interrupteur glissière au tee-shirt.&lt;br /&gt;
&lt;br /&gt;
Nous nous sommes informés sur le bluetooth de type BLE :&lt;br /&gt;
&lt;br /&gt;
Histoire du Bluetooth: [http://www.frandroid.com/maison-connectee/232622_dossier-bluetooth-fonctionnement-interet-les-objets-connectes]&lt;br /&gt;
&lt;br /&gt;
Projet de conception d'une liaison bluetooh 2.0 : [file:///tmp/P12Rap_bluetooth.pdf]&lt;br /&gt;
&lt;br /&gt;
Protocole Bluetooth: SIG (Special Interest Group)&lt;br /&gt;
&lt;br /&gt;
'''Bluetooth 2.0 :'''&lt;br /&gt;
&lt;br /&gt;
Appairage facile et sécurisé : le SSP (Secure Simple Pairing)&lt;br /&gt;
&lt;br /&gt;
Protocole?: EDR (Enhanced Data Rate)&lt;br /&gt;
&lt;br /&gt;
'''Bluetooth 3.0: '''&lt;br /&gt;
&lt;br /&gt;
Protocole: HS (High Speed)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Bluetooth 4.0'''&lt;br /&gt;
&lt;br /&gt;
Conception d'un module bluetooth : [http://www.digikey.fr/fr/articles/techzone/2014/jun/how-to-build-low-power-wireless-systems-using-bluetooth-smart-4]&lt;br /&gt;
&lt;br /&gt;
Classic Bluetooth: Regroupe les versions 1.0 -&amp;gt; 3.0&lt;br /&gt;
&lt;br /&gt;
Protocole: LE (Bluetooth Low Energy)  --&amp;gt; Réduit fortement la consommation de la puce Bluetooth avec un protocole différent&lt;br /&gt;
&lt;br /&gt;
Dans le 4.0 le constructeur peut décider d'implémenter deux modes: Bluetooth Low Energy seul (single mode) ou avec le Classic Bluetooth (dual mode) qui lui permet de conserver la compatibilité avec les autres appareils.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Semaine 2===&lt;br /&gt;
&lt;br /&gt;
Nous avons établi une connexion avec l'Atmega 328P et communiqué avec l'accéléromètre et le capteur de température. Malheureusement le capteur de température LyliPad n'est pas très précis, nous avons donc opté pour un capteur DS18B20, c'est un capteur 1-wire. Nous avons donc commencé par comprendre cette technologie puis grâce à un programme trouvé sur internet, nous essayons de l'adapter à notre microprocesseur lillypad pour communiquer avec le DS18B20.&lt;br /&gt;
&lt;br /&gt;
Parallèlement nous avons débuté la programmation d'application Android. Nous utilisons pour cela l'IDE Eclipse. Nous rencontrons actuellement des problèmes d'environnement pour compiler un programme Android simple comme &amp;quot;Hello World&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===Semaine 3===&lt;br /&gt;
*'''Partie Hardware'''&lt;br /&gt;
**Toujours des problèmes avec le capteur de température DS18B20. Nous arrivons à envoyer le programme C sur l'arduino mais la communication avec le capteur ne se fait pas. Nous avons donc décortiqué le programme et comprendre son fonctionnement.&lt;br /&gt;
&lt;br /&gt;
*'''Partie application'''&lt;br /&gt;
**Après de nombreux bug d’installation des plateformes (Eclipse, JDK, SDK, Bibliothèque etc..) nous réussissons à lancer l'application &amp;quot;HelloWorld&amp;quot; dans un émulateur de téléphone Android. Nous pouvons maintenant nous concentrer vers la programmation orienté objet Android et détailler plus spécifiquement les étapes à réaliser avant de pouvoir coder notre programme final (cf &amp;quot;Etapes du Projet&amp;quot;).&lt;br /&gt;
Notions à connaitre:&lt;br /&gt;
*Introduction aux ressources Android (les éléments qui s'afficheront à l'écran ou avec lesquels l'utilisateur pourra interagir [http://openclassrooms.com/courses/creez-des-applications-pour-android/les-ressources-2])&lt;br /&gt;
*Introduction à la notion de &amp;quot;Style&amp;quot; et de &amp;quot;Thèmes&amp;quot; [http://cyril-mottier.developpez.com/tutoriels/android/introduction-styles-themes/]&lt;br /&gt;
&lt;br /&gt;
===Semaine 4===&lt;br /&gt;
*'''Partie Hardware'''&lt;br /&gt;
** Nous arrivons à communiquer avec le capteur DS18B20. Notre programme détecte le capteur, arrive à l'initialiser mais nous avons à présent des problèmes d'envoi de données pour connaitre la température.&lt;br /&gt;
&lt;br /&gt;
*'''Partie application'''&lt;br /&gt;
** Nous essayons dans un premier temps d'afficher un menu simple dans lequel nous pouvons naviguer [http://www.tutomobile.fr/faire-des-menus-et-sous-menus-tutoriel-android-n%C2%B012/27/07/2010/] cependant nous rencontrons des problèmes de librairies, en effet nous ne disposons pas de toutes les images publique qu'Android nous offre [http://developer.android.com/guide/topics/resources/drawable-resource.html], nous devrons donc ajouter les images nous même [http://androiddrawableexplorer.appspot.com/] dans la librairie..&lt;br /&gt;
&lt;br /&gt;
===Semaine 5===&lt;br /&gt;
*'''Partie Hardware'''&lt;br /&gt;
**Toujours des problèmes de communication avec le capteur de température. Le programme avec l'IDE fonctionne mais nous ne comprennons pas pourquoi cela ne marche pas avec le programme en c.&lt;br /&gt;
&lt;br /&gt;
*'''Partie application'''&lt;br /&gt;
Nous avons réussis à afficher un menu simple dans lequel figure quelques boutons qui nous serviront à naviguer entre les activités:&lt;br /&gt;
** Entrainement&lt;br /&gt;
** Historique&lt;br /&gt;
** Paramètres&lt;br /&gt;
** Connexion&lt;br /&gt;
&lt;br /&gt;
Voici à quoi ressemble notre menu pour le moment:&lt;br /&gt;
[[Fichier:Main activity Avant.png|250px|gauche]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Définition des différentes activités:====&lt;br /&gt;
=====L'activité &amp;quot;Entrainement&amp;quot;=====&lt;br /&gt;
Une fois connecté via Bluetooth grâce à l'activité &amp;quot;Connexion&amp;quot;, l'utilisateur devra appuyer sur le bouton &amp;quot;Start&amp;quot; pour commencer son entrainement. L'application affichera en temps réel les données envoyé depuis le t-shirt et indiquera à l'utilisateur le temps qui c'est écoulé. En background elle écrira dans un fichier texte situé dans un dossier spécifique afin de traiter ces données par la suite.&lt;br /&gt;
Lorsque l'utilisateur termine son entrainement il devra appuyer sur le bouton &amp;quot;Stop&amp;quot;, une fenêtre s'ouvrira et lui demandera s'il souhaite enregistrer ou supprimer les données de l'entrainement qu'il vient d'effectuer. S'il décide d'enregistrer il sera automatiquement redirigé vers l'activité &amp;quot;Stats&amp;quot; (non pas accessible depuis le menu) qui affichera le bilan de son entrainement.&lt;br /&gt;
&lt;br /&gt;
=====L'activité &amp;quot;Historique&amp;quot;=====&lt;br /&gt;
Recense tout les entrainements effectué par l'utilisateur. De cette activité il pourra décider de supprimer ses anciens entrainements (cela supprimera le fichier texte associé en background) ou bien d'en afficher ses statistiques (&amp;quot;Activité Stats&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
=====L'activité &amp;quot;Paramètre&amp;quot;=====&lt;br /&gt;
Activité optionnel, servira à récupérer certaines informations sur l'utilisateur qui pourrait nous être utile pour certains calcul. Comme le nombre de calories dépensé lors de l'entrainement ou autre.. Nous n'avons pas encore défini les calculs que nous effectuerons&lt;br /&gt;
&lt;br /&gt;
=====L'activité &amp;quot;Connexion&amp;quot;=====&lt;br /&gt;
Servira à connecter l'application au T-Shirt via Bluetooth&lt;br /&gt;
&lt;br /&gt;
===Semaine 6===&lt;br /&gt;
*'''Partie Hardware'''&lt;br /&gt;
** Nous avons essayé de télécharger d'autres programmes pour communiquer avec le capteur de température mais sans aucun succès. Nous avons donc essayé de traduire le programme de l'IDE (écrit en c++) en c mais toujours pas de résultat. Nous avons donc décider de laisser tomber ce capteur 1-WIRE et de prendre un capteur analogique, le TMP36. Nous sommes donc passés à la communication Bluetooth sur le lilypad avec le BLE nrf8001.&lt;br /&gt;
&lt;br /&gt;
*'''Partie application'''&lt;br /&gt;
**Nous avons configuré l'activité &amp;quot;Paramètre&amp;quot;. Elle demande quelques information à l'utilisateur comme son Nom, son âge, sa taille et son poids, utile pour calculer certains paramètres qui reste toujours à définir. (Savoir son nom ne nous est pas vraiment utile, il sert à créer une affinité entre l'utilisateur et l'application)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:ParamPref.png|gauche]] [[Fichier:ParamPref Nom.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Semaine 7===&lt;br /&gt;
*'''Partie Hardware'''&lt;br /&gt;
** Après avoir étudier le fonctionnement du BLE, nous avons téléchargé un code source sur internet pour l'IDE d'arduino que nous avons retranscrit en C. Le programme comportait à ce moment beaucoup de bogs que nous devions résoudre.&lt;br /&gt;
&lt;br /&gt;
*'''Partie application'''&lt;br /&gt;
** Découverte et apprentissage des fonctions permettant la communication Bluetooth.&lt;br /&gt;
&lt;br /&gt;
Nous avons rajouter une &amp;quot;actionbar&amp;quot; et également redéfini l'affichage du menu qui maintenant est plus sobre:&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Menu apres.png|250px]]&lt;br /&gt;
&lt;br /&gt;
===Semaine 8=== &lt;br /&gt;
*'''Partie Hardware'''&lt;br /&gt;
** Après avoir déboguer la communication I2C sur le programme arduino et les quelques autres bogs, nous avons pu commencer à utiliser la communication Bluetooth avec l'application téléphone. Nous avons donc établi un protocole de communication entre l'application et le lilypad pour pouvoir communiquer.&lt;br /&gt;
*'''Partie application'''&lt;br /&gt;
** Problème avec la connexion Bluetooth, certaines fonctions ne sont pas reconnu par l'IDE. Cela est peut être dû à une mauvaise installation des bibliothèques? Nous avons donc transféré notre projet vers un nouveaux projet qui maintenant compile, allez savoir comment..&lt;br /&gt;
&lt;br /&gt;
===Semaine 9===&lt;br /&gt;
*'''Partie Hardware'''&lt;br /&gt;
** Premier essai d'un programme pour mettre le lilypad en mode veille lorsque aucun appareil n'est connecté au Bluetooth. Reste à faire des tests de consommation électriques pour valider le code.&lt;br /&gt;
&lt;br /&gt;
*'''Partie application'''&lt;br /&gt;
** Premiers test de la connexion Bluetooth effectué. Nous avons abandonné l'idée d'utiliser l'émulateur de téléphone car il ne supporte pas le Bluetooth. Nous arrivons à communiquer avec le T-shirt, nous pouvons émettre et recevoir des caractères. Pour une question pratique la connexion ne se fera plus depuis le bouton &amp;quot;Connexion&amp;quot; du menu mais directement dans l'activité &amp;quot;Entrainement&amp;quot;. Lorsque l'utilisateur appuiera sur ce bouton depuis le menu, l'application lui demandera de se connecter au T-shirt. Une fois connecté le bouton &amp;quot;Start&amp;quot; apparait puis la communication débutera lorsqu'il appuiera dessus.&lt;br /&gt;
&lt;br /&gt;
===Semaine 10===&lt;br /&gt;
*'''Partie Hardware'''&lt;br /&gt;
** Ajout du capteur de température sur le lilypad pour envoyer les données. Nous avons également tester de nouveau la communication Bluetooth suite à une modification de l'application.&lt;br /&gt;
&lt;br /&gt;
*'''Partie application'''&lt;br /&gt;
**Définition de l'activité &amp;quot;Historique&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
Cette activité va scanner tous les fichiers créés par l'utilisateur et les afficher à l'aide d'une listView [http://www.tutomobile.fr/personnaliser-une-listview-tutoriel-android-n%C2%B07/04/07/2010/]. Lorsque l'on cliquera sur l'un des fichiers l'activité &amp;quot;Stats&amp;quot; se lancera. Nous avons également configuré une AlertDialog [http://www.tutomobile.fr/personnaliser-un-alertdialog-tutoriel-android-n%C2%B020/04/11/2010/] qui s'affiche lorsque l'on clique longuement sur un Item, celle-ci demande alors si l'on veut supprimer ou afficher les statistiques.&lt;br /&gt;
&lt;br /&gt;
Voici à quoi ressemble cette activité:&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Historique.png|gauche|250px]]  [[Fichier:Historique possibilite de supprimer les fichier.png|250px|centre]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous devons encore déterminer les détails que chaque Item aura et ajouter un TextView à la AlertDialog qui indiquera quelle Entrainement a été sélectionné.&lt;br /&gt;
&lt;br /&gt;
===Semaine 11===&lt;br /&gt;
*'''Partie Hardware'''&lt;br /&gt;
** Ajout de l'accéléromètre pour réaliser le podomètre. C'est un accéléromètre numérique (MMA8452Q), cet accéléromètre va nous permettre de générer une interruption à chaque fois qu'une accélération est détectée. Quelques petits problèmes lors de l'initialisation de celui ci mais les problèmes ont été résolu rapidement. Nous allons pouvoir commencer la construction du tee-shirt.&lt;br /&gt;
[[Fichier:Mma8452q.jpg|150x]]&lt;br /&gt;
*'''Partie application'''&lt;br /&gt;
**Définition de l'activité &amp;quot;Stats&amp;quot;.&lt;br /&gt;
Cette activité va lire tout le fichier écris au préalable lors de l'entrainement, calculera des moyennes et permettra d'afficher des graphiques de certains paramètres en fonction du temps, pour cela nous avons utilisé la librairie GraphView, disponible via ce lien: [http://www.android-graphview.org/]&lt;br /&gt;
&lt;br /&gt;
En voici un premier jet, dans cet exemple nous avons affiché le graphique de la fréquence cardiaque en fonction du temps.&lt;br /&gt;
:&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Stats 2.png|250px]]&lt;br /&gt;
&lt;br /&gt;
===Semaine 12===&lt;br /&gt;
*'''Partie Hardware'''&lt;br /&gt;
*Nous avons cousu les composants électroniques sur le T-shirt&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Exterrieur.jpg|250px]]  [[Fichier:Interrieur.jpg|265px]] [[Fichier:Exterrieur Lily.jpg|250px]] [[Fichier:Interrieur Lily.jpg|235px]]&lt;br /&gt;
&lt;br /&gt;
*'''Partie application'''&lt;br /&gt;
**Redéfinition du Menu&lt;br /&gt;
Nous avons apporté quelques modifications à l'application, désormais le menu ne comporte plus le bouton connexion. La connexion Bluetooth sera établi lorsque l'utilisateur sélectionnera le bouton &amp;quot;Entrainement&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Menu.png|250px]]&lt;br /&gt;
&lt;br /&gt;
* Entrainement:&lt;br /&gt;
Si l'utilisateur n'a pas activé son bluetooth l'application lui demande automatiquement de l'activer, s'il ne le fait pas il ne pourra faire l'entrainement. Il devra ensuite sélectionner le T-Shirt pour s'y connecter, une fois la connexion établi l'entrainement pourra commencer. Il pourra alors constater en temps réels les données envoyé par le T-shirt, c'est à dire [...]&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Entrainement demande de connection bluetooth.png|250px]] &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Redéfinition de la page Historique&lt;br /&gt;
Il est désormais possible de sélectionner plusieurs éléments afin de les supprimer en même temps. Nous avons modifié l'affichage, seul la date, l'heure ainsi que le numéro de l'entrainement sont affiché.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Historique 2.png|250px]] [[Fichier:Historique selection.png|250px]] [[Fichier:Historique suppression.png|250px]]&lt;br /&gt;
&lt;br /&gt;
* Ajout d'information sur la page &amp;quot;Détails&amp;quot;&lt;br /&gt;
L'utilisateur peut désormais connaitre la distance parcouru lors de son entrainement (en supposant qu'un pas vaut 70cm). Il peut également passer d'un graphique à l'autre pour voir l'évolution de la température de son corps ou de sa fréquence cardiaque lors de l'entrainement. Nous affichons maintenant la vraie date (et non le nom du fichier), nous indiquons aussi l'heure de début de l'entrainement.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Détails Freq.png|250px]] [[Fichier:Détails temp.png|250px]]&lt;br /&gt;
&lt;br /&gt;
== Liens ==&lt;br /&gt;
&lt;br /&gt;
RFDUINO [www.rfduino.com/] : RFD22102 RFduino DIP [http://www.rfduino.com/product/rfd22102-rfduino-dip/index.html]&lt;br /&gt;
&lt;br /&gt;
Nordic rf8001 (BLE) [http://www.nordicsemi.com/eng/Products/Bluetooth-Smart-Bluetooth-low-energy/nRF8001]&lt;br /&gt;
&lt;br /&gt;
Arduino SHIELD-EKG-EMG: [https://www.olimex.com/Products/Duino/Shields/SHIELD-EKG-EMG/]&lt;br /&gt;
&lt;br /&gt;
Électrocardiogramme [http://fab.cba.mit.edu/classes/863.12/people/Adam.Marblestone/AHM_week05.html]&lt;br /&gt;
&lt;br /&gt;
LED [http://www.adafruit.com/] --&amp;gt; Fil de LED Bleu [http://www.adafruit.com/products/895] ---&amp;gt; Lot de 25 LED [http://www.adafruit.com/products/388] ---&amp;gt; [http://www.adafruit.com/products/780]&lt;br /&gt;
&lt;br /&gt;
GraphView: [https://github.com/jjoe64/GraphView]&lt;br /&gt;
&lt;br /&gt;
Library for DS18B20 [http://sourceforge.net/projects/davidegironi/files/avr-lib/avr_lib_ds18b20_01b.zip/download]&lt;br /&gt;
&lt;br /&gt;
== Tuto ==&lt;br /&gt;
&lt;br /&gt;
Tuto arduino : [https://tutoarduino.com/choix-tutoriels/]&lt;br /&gt;
&lt;br /&gt;
Tuto capteur de température: [https://tutoarduino.com/portfolio-items/tpbd2-2-detecteur-de-temperature/]&lt;br /&gt;
&lt;br /&gt;
Tuto Bluetooth: [https://tutoarduino.com/portfolio-items/le-bluetooth/] connexion app [http://nononux.free.fr/index.php?page=elec-brico-bluetooth-android-microcontroleur]&lt;br /&gt;
&lt;br /&gt;
Tuto Android: [http://android.developpez.com/cours/] [https://sites.google.com/site/redezzahir/coursJAVA/tp10] [http://sampleprogramz.com/android/] fiche: [http://www.iutbayonne.univ-pau.fr/~dalmau/documents/cours/android/Guide%20TPs%20Android%20avec%20Eclipse.pdf]&lt;br /&gt;
&lt;br /&gt;
Tuto BLE Android: [http://developer.android.com/guide/topics/connectivity/bluetooth-le.html]&lt;br /&gt;
&lt;br /&gt;
Tuto ListView: [http://www.ltm.fr/creez-une-vue-en-liste-listview-avec-texte-image/]  GraphView: [http://www.android-graphview.org/download--getting-started.html]&lt;br /&gt;
&lt;br /&gt;
Tuto GPS android: [http://www.tutomobile.fr/geolocalisation-grace-au-gps-ou-au-reseau-mobile-tutoriel-android-n%C2%B015/13/08/2010/]&lt;/div&gt;</summary>
		<author><name>Vpiat</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=V%C3%AAtements_intelligents&amp;diff=20790</id>
		<title>Vêtements intelligents</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=V%C3%AAtements_intelligents&amp;diff=20790"/>
				<updated>2015-05-08T17:29:26Z</updated>
		
		<summary type="html">&lt;p&gt;Vpiat : /* Semaine 11 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Cahier des Charges==&lt;br /&gt;
===Présentation générale du projet===&lt;br /&gt;
&lt;br /&gt;
=== Objectif ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Concevoir un système d'interaction avec des objets connectés sur les vêtements ou le corps.&lt;br /&gt;
&lt;br /&gt;
=== '''Description du projet''' ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Les systèmes embarqués sur les humains commencent à se développer (lunettes Google, montres connectées).&lt;br /&gt;
&lt;br /&gt;
Nous proposons ici de réaliser une plateforme basée sur la '''technologie BLE''' (Bluetooth Low Energy ou Bluetooth 4.0).&lt;br /&gt;
&lt;br /&gt;
Deux parties seront mise en oeuvre :&lt;br /&gt;
    &lt;br /&gt;
* un système embarqué compact permettant de recevoir des information et en transmettre ;&lt;br /&gt;
* une application Android permettant de communiquer avec le système.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Le système sera intégré sur un t-shirt en utilisant notamment la machine à coudre numérique disponible au Fabricarium de Polytech Lille.&lt;br /&gt;
&lt;br /&gt;
===Contexte===&lt;br /&gt;
&lt;br /&gt;
==== Informations à traiter ====&lt;br /&gt;
&lt;br /&gt;
Pour que notre projet soit intéressant, aux yeux des consommateurs, nous devons définir l'utilité que pourrait avoir un vêtement connecté.&lt;br /&gt;
Notre application ne doit pas être un simple gadget mais un objet qui semble utile et faire en sorte qu'il soit indispensable dans le futur. &amp;quot;Il faut créer le besoin si l'on veut vendre un objet et faire du profit.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Dans un premier temps nous devons faire une étude du marché pour savoir ce qui a déjà été fait. &lt;br /&gt;
Nous devons savoir quelles types d'informations les vêtements et objets connectés transmettent, pour quels usages et pour quels publics.&lt;br /&gt;
&lt;br /&gt;
====Le Sport====&lt;br /&gt;
&lt;br /&gt;
La plupart des objets connectés à l'Homme sont utilisés pour l'informer de ses performances physiques: &lt;br /&gt;
Combien de kilomètres ils ont parcouru, combien de pas ont été effectués, combien de calories ont été perdues.&lt;br /&gt;
&lt;br /&gt;
Ce sont principalement des performances liées à la marche et la course à pied. De nouveaux objets connectés ont vu récemment le jour, notamment les bracelets connectés permettant de récolter des informations sur les nageurs, toujours dans le but d'avoir un suivi sur ses performances (nombres de mètres nagés par rapport à un certain temps).&lt;br /&gt;
&lt;br /&gt;
====Santé et bien être====&lt;br /&gt;
&lt;br /&gt;
Encore en pleine expansion que très peu d'objets connectés se sont intéressés au domaine de la santé: ici un exemple de t-shirt connecté permettant de contrôler le rythme cardiaque: [http://pulse.edf.com/fr/les-textiles-intelligents-peuvent-surveiller-notre-coeur?gclid=Cj0KEQiAiamlBRCgj83PiYm6--gBEiQArnojD4QntiVq9cLZeZDRGqMckMIQzkr6RH3cFxJnxJk0tE0aApoA8P8HAQ]&lt;br /&gt;
&lt;br /&gt;
Beaucoup d'application ont déjà vu le jour: [http://www.techniques-ingenieur.fr/actualite/materiaux-innovants-nano-thematique_6342/ces-textiles-intelligents-qui-prennent-soin-de-nous-article_286868/]&lt;br /&gt;
&lt;br /&gt;
Quelles sont les applications que l'on pourrait faire? Quels suivis sont à faire pour quels types de maladie etc..?&lt;br /&gt;
&lt;br /&gt;
====La régulation de température====&lt;br /&gt;
&lt;br /&gt;
Grâce aux fibres électroniques tissées il est possible de chauffer un t-shirt ou de le refroidir cela pourrait se régler en fonction de la température du corps ou bien par simple commande de l'utilisateur (cela pourrait s'avérer très utile avec le réchauffement climatique qui est en train d'arriver, winter is comming..).&lt;br /&gt;
&lt;br /&gt;
===Notre Projet===&lt;br /&gt;
&lt;br /&gt;
Ce que nous voulons faire nous: Un T-shirt permettant à la fois de calculer les performances sportives mais aussi d'avoir un suivi sur notre santé et pourquoi pas faire en sorte de réguler la température du corps lors d'un effort..&lt;br /&gt;
&lt;br /&gt;
-&amp;gt;Calculer le nombre de pas (Podomètre)&lt;br /&gt;
&lt;br /&gt;
-&amp;gt;Calculer une distance, la vitesse, la position sur un carte? (GPS)&lt;br /&gt;
&lt;br /&gt;
-&amp;gt;Calculer la fréquence cardiaque ? (Cardiofréquencemètre)&lt;br /&gt;
&lt;br /&gt;
-&amp;gt;Afficher la fréquence cardiaque sur LED&lt;br /&gt;
&lt;br /&gt;
-&amp;gt;Mesurer la température du corps&lt;br /&gt;
&lt;br /&gt;
-&amp;gt;Transférer toutes ses informations sur l'application mobile (Android)&lt;br /&gt;
&lt;br /&gt;
== '''Etapes du Projet''' ==&lt;br /&gt;
&lt;br /&gt;
*Partie électronique&lt;br /&gt;
** Définition des différents modules (Capteurs de températures, accéléromètre..)&lt;br /&gt;
** Connecter et programmer les différents modules au microprocesseur Lilypad&lt;br /&gt;
** Créer un programme pour ordonnancer les différents modules&lt;br /&gt;
** Connecter le module Bluetooth BLE et le configurer&lt;br /&gt;
** Intégrer les composants au tee-shirt&lt;br /&gt;
&lt;br /&gt;
*Partie informatique&lt;br /&gt;
** Créer une application Android simple (Par exemple HelloWorld)&lt;br /&gt;
** Importer l'application sur smart-phone&lt;br /&gt;
** Savoir faire un menu et sous-menu [http://a-renouard.developpez.com/tutoriels/android/menu-sous-menu/]&lt;br /&gt;
** Comprendre les Services [http://nbenbourahla.developpez.com/tutoriels/android/services-sous-android/], les maîtriser: [http://blog.developpez.com/ndruet/p8571/android/creation_de_service]&lt;br /&gt;
** Comprendre les vues sous Android [http://nbenbourahla.developpez.com/tutoriels/android/introduction-vues-sous-android/]&lt;br /&gt;
** Comment utiliser SQLite sur Android [http://a-renouard.developpez.com/tutoriels/android/sqlite/]&lt;br /&gt;
** Créer les programmes principaux:&lt;br /&gt;
*** Intégration Google Map sur Android (pour utiliser le GPS) [http://michel-dirix.developpez.com/tutoriels/android/integration-google-maps-android/]&lt;br /&gt;
*** Ajouter les protocoles nécessaires pour communiquer en Bluetooth [http://sberfini.developpez.com/tutoriaux/android/bluetooth/], utilisation du NFC [http://sberfini.developpez.com/tutoriaux/android/nfc/bluetooth/]&lt;br /&gt;
*** Une vue pour afficher les différentes applications (activités)&lt;br /&gt;
*** Une activité pour gérer l'affichage des informations envoyé depuis le microprocesseur&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Matériel possédé ===&lt;br /&gt;
&lt;br /&gt;
* LilyPad Accelerometer ADXL335 [https://www.sparkfun.com/products/9267] [&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;fourni le 28/1/2015&amp;lt;/span&amp;gt;]&lt;br /&gt;
&lt;br /&gt;
* LilyPad Temperature Sensor [https://www.sparkfun.com/products/8777] [&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;fourni le 28/1/2015&amp;lt;/span&amp;gt;]&lt;br /&gt;
&lt;br /&gt;
* Arduino Lilypad Atmega 328P [http://arduino.cc/en/Main/ArduinoBoardLilyPad] [&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;fourni le 28/1/2015&amp;lt;/span&amp;gt;]&lt;br /&gt;
&lt;br /&gt;
* SparkFun FTDI Basic Breakout - 3.3V [https://www.sparkfun.com/products/9873] [&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;fourni le 28/1/2015&amp;lt;/span&amp;gt;]&lt;br /&gt;
&lt;br /&gt;
* Une dizaine de LilyPad LED Red [https://www.sparkfun.com/products/10044] [&amp;lt;span style=&amp;quot;color: lightgreen;&amp;quot;&amp;gt;LEDs LilyPad blanches disponibles&amp;lt;/span&amp;gt;]&lt;br /&gt;
&lt;br /&gt;
* Interrupteur [&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;fourni le 28/1/2015&amp;lt;/span&amp;gt;]&lt;br /&gt;
&lt;br /&gt;
* BLE nRF8001 [http://www.nordicsemi.com/eng/Products/Bluetooth-Smart-Bluetooth-low-energy/nRF8001] [&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;1 fourni le 9/2/2015&amp;lt;/span&amp;gt;]&lt;br /&gt;
&lt;br /&gt;
=== Matériel nécessaire === &lt;br /&gt;
&lt;br /&gt;
* Olimex platine ECG&lt;br /&gt;
&lt;br /&gt;
* [&amp;lt;span style=&amp;quot;color: blue;&amp;quot;&amp;gt; Du fil conducteur en bobine &amp;lt;/span&amp;gt;]&lt;br /&gt;
&lt;br /&gt;
== '''Tableau de bord''' ==&lt;br /&gt;
&lt;br /&gt;
===Semaine 1===&lt;br /&gt;
&lt;br /&gt;
Nous avons fait le point sur les capacités qu'aura notre t-shirt connecté.&lt;br /&gt;
&lt;br /&gt;
Après discussion avec M.Boë nous avons décidé d'utiliser dans un premier temps deux capteurs, Accéléromètre et capteur de température (emprunté à M.Redon), pour nous concentrer plus rapidement sur les deux problèmes majeur que nous allons rencontrer, celle de la communication entre l'arduino (Lilypad), le BLE et l'application androïde du téléphone et celle de l'énergie où le problème réside dans l'alimentation système embarqué. Nous devons trouver un composant à la fois petit, pour pouvoir être porté, et assez puissant pour délivrer de l'énergie au microprocesseur pendant plusieurs mois. Nous devons nous demander quand éteindre le micro-contrôleur et à quel moment le Bluetooth sera connecté. Nous allons pour cela ajouter un interrupteur glissière au tee-shirt.&lt;br /&gt;
&lt;br /&gt;
Nous nous sommes informés sur le bluetooth de type BLE :&lt;br /&gt;
&lt;br /&gt;
Histoire du Bluetooth: [http://www.frandroid.com/maison-connectee/232622_dossier-bluetooth-fonctionnement-interet-les-objets-connectes]&lt;br /&gt;
&lt;br /&gt;
Projet de conception d'une liaison bluetooh 2.0 : [file:///tmp/P12Rap_bluetooth.pdf]&lt;br /&gt;
&lt;br /&gt;
Protocole Bluetooth: SIG (Special Interest Group)&lt;br /&gt;
&lt;br /&gt;
'''Bluetooth 2.0 :'''&lt;br /&gt;
&lt;br /&gt;
Appairage facile et sécurisé : le SSP (Secure Simple Pairing)&lt;br /&gt;
&lt;br /&gt;
Protocole?: EDR (Enhanced Data Rate)&lt;br /&gt;
&lt;br /&gt;
'''Bluetooth 3.0: '''&lt;br /&gt;
&lt;br /&gt;
Protocole: HS (High Speed)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Bluetooth 4.0'''&lt;br /&gt;
&lt;br /&gt;
Conception d'un module bluetooth : [http://www.digikey.fr/fr/articles/techzone/2014/jun/how-to-build-low-power-wireless-systems-using-bluetooth-smart-4]&lt;br /&gt;
&lt;br /&gt;
Classic Bluetooth: Regroupe les versions 1.0 -&amp;gt; 3.0&lt;br /&gt;
&lt;br /&gt;
Protocole: LE (Bluetooth Low Energy)  --&amp;gt; Réduit fortement la consommation de la puce Bluetooth avec un protocole différent&lt;br /&gt;
&lt;br /&gt;
Dans le 4.0 le constructeur peut décider d'implémenter deux modes: Bluetooth Low Energy seul (single mode) ou avec le Classic Bluetooth (dual mode) qui lui permet de conserver la compatibilité avec les autres appareils.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Semaine 2===&lt;br /&gt;
&lt;br /&gt;
Nous avons établi une connexion avec l'Atmega 328P et communiqué avec l'accéléromètre et le capteur de température. Malheureusement le capteur de température LyliPad n'est pas très précis, nous avons donc opté pour un capteur DS18B20, c'est un capteur 1-wire. Nous avons donc commencé par comprendre cette technologie puis grâce à un programme trouvé sur internet, nous essayons de l'adapter à notre microprocesseur lillypad pour communiquer avec le DS18B20.&lt;br /&gt;
&lt;br /&gt;
Parallèlement nous avons débuté la programmation d'application Android. Nous utilisons pour cela l'IDE Eclipse. Nous rencontrons actuellement des problèmes d'environnement pour compiler un programme Android simple comme &amp;quot;Hello World&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===Semaine 3===&lt;br /&gt;
*'''Partie Hardware'''&lt;br /&gt;
**Toujours des problèmes avec le capteur de température DS18B20. Nous arrivons à envoyer le programme C sur l'arduino mais la communication avec le capteur ne se fait pas. Nous avons donc décortiqué le programme et comprendre son fonctionnement.&lt;br /&gt;
&lt;br /&gt;
*'''Partie application'''&lt;br /&gt;
**Après de nombreux bug d’installation des plateformes (Eclipse, JDK, SDK, Bibliothèque etc..) nous réussissons à lancer l'application &amp;quot;HelloWorld&amp;quot; dans un émulateur de téléphone Android. Nous pouvons maintenant nous concentrer vers la programmation orienté objet Android et détailler plus spécifiquement les étapes à réaliser avant de pouvoir coder notre programme final (cf &amp;quot;Etapes du Projet&amp;quot;).&lt;br /&gt;
Notions à connaitre:&lt;br /&gt;
*Introduction aux ressources Android (les éléments qui s'afficheront à l'écran ou avec lesquels l'utilisateur pourra interagir [http://openclassrooms.com/courses/creez-des-applications-pour-android/les-ressources-2])&lt;br /&gt;
*Introduction à la notion de &amp;quot;Style&amp;quot; et de &amp;quot;Thèmes&amp;quot; [http://cyril-mottier.developpez.com/tutoriels/android/introduction-styles-themes/]&lt;br /&gt;
&lt;br /&gt;
===Semaine 4===&lt;br /&gt;
*'''Partie Hardware'''&lt;br /&gt;
** Nous arrivons à communiquer avec le capteur DS18B20. Notre programme détecte le capteur, arrive à l'initialiser mais nous avons à présent des problèmes d'envoi de données pour connaitre la température.&lt;br /&gt;
&lt;br /&gt;
*'''Partie application'''&lt;br /&gt;
** Nous essayons dans un premier temps d'afficher un menu simple dans lequel nous pouvons naviguer [http://www.tutomobile.fr/faire-des-menus-et-sous-menus-tutoriel-android-n%C2%B012/27/07/2010/] cependant nous rencontrons des problèmes de librairies, en effet nous ne disposons pas de toutes les images publique qu'Android nous offre [http://developer.android.com/guide/topics/resources/drawable-resource.html], nous devrons donc ajouter les images nous même [http://androiddrawableexplorer.appspot.com/] dans la librairie..&lt;br /&gt;
&lt;br /&gt;
===Semaine 5===&lt;br /&gt;
*'''Partie Hardware'''&lt;br /&gt;
**Toujours des problèmes de communication avec le capteur de température. Le programme avec l'IDE fonctionne mais nous ne comprennons pas pourquoi cela ne marche pas avec le programme en c.&lt;br /&gt;
&lt;br /&gt;
*'''Partie application'''&lt;br /&gt;
Nous avons réussis à afficher un menu simple dans lequel figure quelques boutons qui nous serviront à naviguer entre les activités:&lt;br /&gt;
** Entrainement&lt;br /&gt;
** Historique&lt;br /&gt;
** Paramètres&lt;br /&gt;
** Connexion&lt;br /&gt;
&lt;br /&gt;
Voici à quoi ressemble notre menu pour le moment:&lt;br /&gt;
[[Fichier:Main activity Avant.png|250px|gauche]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Définition des différentes activités:====&lt;br /&gt;
=====L'activité &amp;quot;Entrainement&amp;quot;=====&lt;br /&gt;
Une fois connecté via Bluetooth grâce à l'activité &amp;quot;Connexion&amp;quot;, l'utilisateur devra appuyer sur le bouton &amp;quot;Start&amp;quot; pour commencer son entrainement. L'application affichera en temps réel les données envoyé depuis le t-shirt et indiquera à l'utilisateur le temps qui c'est écoulé. En background elle écrira dans un fichier texte situé dans un dossier spécifique afin de traiter ces données par la suite.&lt;br /&gt;
Lorsque l'utilisateur termine son entrainement il devra appuyer sur le bouton &amp;quot;Stop&amp;quot;, une fenêtre s'ouvrira et lui demandera s'il souhaite enregistrer ou supprimer les données de l'entrainement qu'il vient d'effectuer. S'il décide d'enregistrer il sera automatiquement redirigé vers l'activité &amp;quot;Stats&amp;quot; (non pas accessible depuis le menu) qui affichera le bilan de son entrainement.&lt;br /&gt;
&lt;br /&gt;
=====L'activité &amp;quot;Historique&amp;quot;=====&lt;br /&gt;
Recense tout les entrainements effectué par l'utilisateur. De cette activité il pourra décider de supprimer ses anciens entrainements (cela supprimera le fichier texte associé en background) ou bien d'en afficher ses statistiques (&amp;quot;Activité Stats&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
=====L'activité &amp;quot;Paramètre&amp;quot;=====&lt;br /&gt;
Activité optionnel, servira à récupérer certaines informations sur l'utilisateur qui pourrait nous être utile pour certains calcul. Comme le nombre de calories dépensé lors de l'entrainement ou autre.. Nous n'avons pas encore défini les calculs que nous effectuerons&lt;br /&gt;
&lt;br /&gt;
=====L'activité &amp;quot;Connexion&amp;quot;=====&lt;br /&gt;
Servira à connecter l'application au T-Shirt via Bluetooth&lt;br /&gt;
&lt;br /&gt;
===Semaine 6===&lt;br /&gt;
*'''Partie Hardware'''&lt;br /&gt;
** Nous avons essayé de télécharger d'autres programmes pour communiquer avec le capteur de température mais sans aucun succès. Nous avons donc essayé de traduire le programme de l'IDE (écrit en c++) en c mais toujours pas de résultat. Nous avons donc décider de laisser tomber ce capteur 1-WIRE et de prendre un capteur analogique, le TMP36. Nous sommes donc passés à la communication Bluetooth sur le lilypad avec le BLE nrf8001.&lt;br /&gt;
&lt;br /&gt;
*'''Partie application'''&lt;br /&gt;
**Nous avons configuré l'activité &amp;quot;Paramètre&amp;quot;. Elle demande quelques information à l'utilisateur comme son Nom, son âge, sa taille et son poids, utile pour calculer certains paramètres qui reste toujours à définir. (Savoir son nom ne nous est pas vraiment utile, il sert à créer une affinité entre l'utilisateur et l'application)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:ParamPref.png|gauche]] [[Fichier:ParamPref Nom.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Semaine 7===&lt;br /&gt;
*'''Partie Hardware'''&lt;br /&gt;
** Après avoir étudier le fonctionnement du BLE, nous avons téléchargé un code source sur internet pour l'IDE d'arduino que nous avons retranscrit en C. Le programme comportait à ce moment beaucoup de bogs que nous devions résoudre.&lt;br /&gt;
&lt;br /&gt;
*'''Partie application'''&lt;br /&gt;
** Découverte et apprentissage des fonctions permettant la communication Bluetooth.&lt;br /&gt;
&lt;br /&gt;
Nous avons rajouter une &amp;quot;actionbar&amp;quot; et également redéfini l'affichage du menu qui maintenant est plus sobre:&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Menu apres.png|250px]]&lt;br /&gt;
&lt;br /&gt;
===Semaine 8=== &lt;br /&gt;
*'''Partie Hardware'''&lt;br /&gt;
** Après avoir déboguer la communication I2C sur le programme arduino et les quelques autres bogs, nous avons pu commencer à utiliser la communication Bluetooth avec l'application téléphone. Nous avons donc établi un protocole de communication entre l'application et le lilypad pour pouvoir communiquer.&lt;br /&gt;
*'''Partie application'''&lt;br /&gt;
** Problème avec la connexion Bluetooth, certaines fonctions ne sont pas reconnu par l'IDE. Cela est peut être dû à une mauvaise installation des bibliothèques? Nous avons donc transféré notre projet vers un nouveaux projet qui maintenant compile, allez savoir comment..&lt;br /&gt;
&lt;br /&gt;
===Semaine 9===&lt;br /&gt;
*'''Partie Hardware'''&lt;br /&gt;
** Premier essai d'un programme pour mettre le lilypad en mode veille lorsque aucun appareil n'est connecté au Bluetooth. Reste à faire des tests de consommation électriques pour valider le code.&lt;br /&gt;
&lt;br /&gt;
*'''Partie application'''&lt;br /&gt;
** Premiers test de la connexion Bluetooth effectué. Nous avons abandonné l'idée d'utiliser l'émulateur de téléphone car il ne supporte pas le Bluetooth. Nous arrivons à communiquer avec le T-shirt, nous pouvons émettre et recevoir des caractères. Pour une question pratique la connexion ne se fera plus depuis le bouton &amp;quot;Connexion&amp;quot; du menu mais directement dans l'activité &amp;quot;Entrainement&amp;quot;. Lorsque l'utilisateur appuiera sur ce bouton depuis le menu, l'application lui demandera de se connecter au T-shirt. Une fois connecté le bouton &amp;quot;Start&amp;quot; apparait puis la communication débutera lorsqu'il appuiera dessus.&lt;br /&gt;
&lt;br /&gt;
===Semaine 10===&lt;br /&gt;
*'''Partie Hardware'''&lt;br /&gt;
** Ajout du capteur de température sur le lilypad pour envoyer les données. Nous avons également tester de nouveau la communication Bluetooth suite à une modification de l'application.&lt;br /&gt;
&lt;br /&gt;
*'''Partie application'''&lt;br /&gt;
**Définition de l'activité &amp;quot;Historique&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
Cette activité va scanner tous les fichiers créés par l'utilisateur et les afficher à l'aide d'une listView [http://www.tutomobile.fr/personnaliser-une-listview-tutoriel-android-n%C2%B07/04/07/2010/]. Lorsque l'on cliquera sur l'un des fichiers l'activité &amp;quot;Stats&amp;quot; se lancera. Nous avons également configuré une AlertDialog [http://www.tutomobile.fr/personnaliser-un-alertdialog-tutoriel-android-n%C2%B020/04/11/2010/] qui s'affiche lorsque l'on clique longuement sur un Item, celle-ci demande alors si l'on veut supprimer ou afficher les statistiques.&lt;br /&gt;
&lt;br /&gt;
Voici à quoi ressemble cette activité:&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Historique.png|gauche|250px]]  [[Fichier:Historique possibilite de supprimer les fichier.png|250px|centre]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous devons encore déterminer les détails que chaque Item aura et ajouter un TextView à la AlertDialog qui indiquera quelle Entrainement a été sélectionné.&lt;br /&gt;
&lt;br /&gt;
===Semaine 11===&lt;br /&gt;
*'''Partie Hardware'''&lt;br /&gt;
** Ajout de l'accéléromètre pour réaliser le podomètre. C'est un accéléromètre numérique (MMA8452Q), cet accéléromètre va nous permettre de générer une interruption à chaque fois qu'une accélération est détectée. Quelques petits problèmes lors de l'initialisation de celui ci mais les problèmes ont été résolu rapidement. Nous allons pouvoir commencer la construction du tee-shirt.&lt;br /&gt;
[[Fichier:Mma8452q.jpg|250x]]&lt;br /&gt;
*'''Partie application'''&lt;br /&gt;
**Définition de l'activité &amp;quot;Stats&amp;quot;.&lt;br /&gt;
Cette activité va lire tout le fichier écris au préalable lors de l'entrainement, calculera des moyennes et permettra d'afficher des graphiques de certains paramètres en fonction du temps, pour cela nous avons utilisé la librairie GraphView, disponible via ce lien: [http://www.android-graphview.org/]&lt;br /&gt;
&lt;br /&gt;
En voici un premier jet, dans cet exemple nous avons affiché le graphique de la fréquence cardiaque en fonction du temps.&lt;br /&gt;
:&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Stats 2.png|250px]]&lt;br /&gt;
&lt;br /&gt;
===Semaine 12===&lt;br /&gt;
*'''Partie Hardware'''&lt;br /&gt;
*Nous avons cousu les composants électroniques sur le T-shirt&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Exterrieur.jpg|250px]]  [[Fichier:Interrieur.jpg|265px]] [[Fichier:Exterrieur Lily.jpg|250px]] [[Fichier:Interrieur Lily.jpg|235px]]&lt;br /&gt;
&lt;br /&gt;
*'''Partie application'''&lt;br /&gt;
**Redéfinition du Menu&lt;br /&gt;
Nous avons apporté quelques modifications à l'application, désormais le menu ne comporte plus le bouton connexion. La connexion Bluetooth sera établi lorsque l'utilisateur sélectionnera le bouton &amp;quot;Entrainement&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Menu.png|250px]]&lt;br /&gt;
&lt;br /&gt;
* Entrainement:&lt;br /&gt;
Si l'utilisateur n'a pas activé son bluetooth l'application lui demande automatiquement de l'activer, s'il ne le fait pas il ne pourra faire l'entrainement. Il devra ensuite sélectionner le T-Shirt pour s'y connecter, une fois la connexion établi l'entrainement pourra commencer. Il pourra alors constater en temps réels les données envoyé par le T-shirt, c'est à dire [...]&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Entrainement demande de connection bluetooth.png|250px]] &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Redéfinition de la page Historique&lt;br /&gt;
Il est désormais possible de sélectionner plusieurs éléments afin de les supprimer en même temps. Nous avons modifié l'affichage, seul la date, l'heure ainsi que le numéro de l'entrainement sont affiché.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Historique 2.png|250px]] [[Fichier:Historique selection.png|250px]] [[Fichier:Historique suppression.png|250px]]&lt;br /&gt;
&lt;br /&gt;
* Ajout d'information sur la page &amp;quot;Détails&amp;quot;&lt;br /&gt;
L'utilisateur peut désormais connaitre la distance parcouru lors de son entrainement (en supposant qu'un pas vaut 70cm). Il peut également passer d'un graphique à l'autre pour voir l'évolution de la température de son corps ou de sa fréquence cardiaque lors de l'entrainement. Nous affichons maintenant la vraie date (et non le nom du fichier), nous indiquons aussi l'heure de début de l'entrainement.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Détails Freq.png|250px]] [[Fichier:Détails temp.png|250px]]&lt;br /&gt;
&lt;br /&gt;
== Liens ==&lt;br /&gt;
&lt;br /&gt;
RFDUINO [www.rfduino.com/] : RFD22102 RFduino DIP [http://www.rfduino.com/product/rfd22102-rfduino-dip/index.html]&lt;br /&gt;
&lt;br /&gt;
Nordic rf8001 (BLE) [http://www.nordicsemi.com/eng/Products/Bluetooth-Smart-Bluetooth-low-energy/nRF8001]&lt;br /&gt;
&lt;br /&gt;
Arduino SHIELD-EKG-EMG: [https://www.olimex.com/Products/Duino/Shields/SHIELD-EKG-EMG/]&lt;br /&gt;
&lt;br /&gt;
Électrocardiogramme [http://fab.cba.mit.edu/classes/863.12/people/Adam.Marblestone/AHM_week05.html]&lt;br /&gt;
&lt;br /&gt;
LED [http://www.adafruit.com/] --&amp;gt; Fil de LED Bleu [http://www.adafruit.com/products/895] ---&amp;gt; Lot de 25 LED [http://www.adafruit.com/products/388] ---&amp;gt; [http://www.adafruit.com/products/780]&lt;br /&gt;
&lt;br /&gt;
GraphView: [https://github.com/jjoe64/GraphView]&lt;br /&gt;
&lt;br /&gt;
Library for DS18B20 [http://sourceforge.net/projects/davidegironi/files/avr-lib/avr_lib_ds18b20_01b.zip/download]&lt;br /&gt;
&lt;br /&gt;
== Tuto ==&lt;br /&gt;
&lt;br /&gt;
Tuto arduino : [https://tutoarduino.com/choix-tutoriels/]&lt;br /&gt;
&lt;br /&gt;
Tuto capteur de température: [https://tutoarduino.com/portfolio-items/tpbd2-2-detecteur-de-temperature/]&lt;br /&gt;
&lt;br /&gt;
Tuto Bluetooth: [https://tutoarduino.com/portfolio-items/le-bluetooth/] connexion app [http://nononux.free.fr/index.php?page=elec-brico-bluetooth-android-microcontroleur]&lt;br /&gt;
&lt;br /&gt;
Tuto Android: [http://android.developpez.com/cours/] [https://sites.google.com/site/redezzahir/coursJAVA/tp10] [http://sampleprogramz.com/android/] fiche: [http://www.iutbayonne.univ-pau.fr/~dalmau/documents/cours/android/Guide%20TPs%20Android%20avec%20Eclipse.pdf]&lt;br /&gt;
&lt;br /&gt;
Tuto BLE Android: [http://developer.android.com/guide/topics/connectivity/bluetooth-le.html]&lt;br /&gt;
&lt;br /&gt;
Tuto ListView: [http://www.ltm.fr/creez-une-vue-en-liste-listview-avec-texte-image/]  GraphView: [http://www.android-graphview.org/download--getting-started.html]&lt;br /&gt;
&lt;br /&gt;
Tuto GPS android: [http://www.tutomobile.fr/geolocalisation-grace-au-gps-ou-au-reseau-mobile-tutoriel-android-n%C2%B015/13/08/2010/]&lt;/div&gt;</summary>
		<author><name>Vpiat</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Fichier:Mma8452q.jpg&amp;diff=20789</id>
		<title>Fichier:Mma8452q.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Fichier:Mma8452q.jpg&amp;diff=20789"/>
				<updated>2015-05-08T17:27:55Z</updated>
		
		<summary type="html">&lt;p&gt;Vpiat : Accéléromètre numérique MMA8452Q&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Accéléromètre numérique MMA8452Q&lt;/div&gt;</summary>
		<author><name>Vpiat</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=V%C3%AAtements_intelligents&amp;diff=20788</id>
		<title>Vêtements intelligents</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=V%C3%AAtements_intelligents&amp;diff=20788"/>
				<updated>2015-05-08T17:26:27Z</updated>
		
		<summary type="html">&lt;p&gt;Vpiat : /* Semaine 11 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Cahier des Charges==&lt;br /&gt;
===Présentation générale du projet===&lt;br /&gt;
&lt;br /&gt;
=== Objectif ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Concevoir un système d'interaction avec des objets connectés sur les vêtements ou le corps.&lt;br /&gt;
&lt;br /&gt;
=== '''Description du projet''' ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Les systèmes embarqués sur les humains commencent à se développer (lunettes Google, montres connectées).&lt;br /&gt;
&lt;br /&gt;
Nous proposons ici de réaliser une plateforme basée sur la '''technologie BLE''' (Bluetooth Low Energy ou Bluetooth 4.0).&lt;br /&gt;
&lt;br /&gt;
Deux parties seront mise en oeuvre :&lt;br /&gt;
    &lt;br /&gt;
* un système embarqué compact permettant de recevoir des information et en transmettre ;&lt;br /&gt;
* une application Android permettant de communiquer avec le système.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Le système sera intégré sur un t-shirt en utilisant notamment la machine à coudre numérique disponible au Fabricarium de Polytech Lille.&lt;br /&gt;
&lt;br /&gt;
===Contexte===&lt;br /&gt;
&lt;br /&gt;
==== Informations à traiter ====&lt;br /&gt;
&lt;br /&gt;
Pour que notre projet soit intéressant, aux yeux des consommateurs, nous devons définir l'utilité que pourrait avoir un vêtement connecté.&lt;br /&gt;
Notre application ne doit pas être un simple gadget mais un objet qui semble utile et faire en sorte qu'il soit indispensable dans le futur. &amp;quot;Il faut créer le besoin si l'on veut vendre un objet et faire du profit.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Dans un premier temps nous devons faire une étude du marché pour savoir ce qui a déjà été fait. &lt;br /&gt;
Nous devons savoir quelles types d'informations les vêtements et objets connectés transmettent, pour quels usages et pour quels publics.&lt;br /&gt;
&lt;br /&gt;
====Le Sport====&lt;br /&gt;
&lt;br /&gt;
La plupart des objets connectés à l'Homme sont utilisés pour l'informer de ses performances physiques: &lt;br /&gt;
Combien de kilomètres ils ont parcouru, combien de pas ont été effectués, combien de calories ont été perdues.&lt;br /&gt;
&lt;br /&gt;
Ce sont principalement des performances liées à la marche et la course à pied. De nouveaux objets connectés ont vu récemment le jour, notamment les bracelets connectés permettant de récolter des informations sur les nageurs, toujours dans le but d'avoir un suivi sur ses performances (nombres de mètres nagés par rapport à un certain temps).&lt;br /&gt;
&lt;br /&gt;
====Santé et bien être====&lt;br /&gt;
&lt;br /&gt;
Encore en pleine expansion que très peu d'objets connectés se sont intéressés au domaine de la santé: ici un exemple de t-shirt connecté permettant de contrôler le rythme cardiaque: [http://pulse.edf.com/fr/les-textiles-intelligents-peuvent-surveiller-notre-coeur?gclid=Cj0KEQiAiamlBRCgj83PiYm6--gBEiQArnojD4QntiVq9cLZeZDRGqMckMIQzkr6RH3cFxJnxJk0tE0aApoA8P8HAQ]&lt;br /&gt;
&lt;br /&gt;
Beaucoup d'application ont déjà vu le jour: [http://www.techniques-ingenieur.fr/actualite/materiaux-innovants-nano-thematique_6342/ces-textiles-intelligents-qui-prennent-soin-de-nous-article_286868/]&lt;br /&gt;
&lt;br /&gt;
Quelles sont les applications que l'on pourrait faire? Quels suivis sont à faire pour quels types de maladie etc..?&lt;br /&gt;
&lt;br /&gt;
====La régulation de température====&lt;br /&gt;
&lt;br /&gt;
Grâce aux fibres électroniques tissées il est possible de chauffer un t-shirt ou de le refroidir cela pourrait se régler en fonction de la température du corps ou bien par simple commande de l'utilisateur (cela pourrait s'avérer très utile avec le réchauffement climatique qui est en train d'arriver, winter is comming..).&lt;br /&gt;
&lt;br /&gt;
===Notre Projet===&lt;br /&gt;
&lt;br /&gt;
Ce que nous voulons faire nous: Un T-shirt permettant à la fois de calculer les performances sportives mais aussi d'avoir un suivi sur notre santé et pourquoi pas faire en sorte de réguler la température du corps lors d'un effort..&lt;br /&gt;
&lt;br /&gt;
-&amp;gt;Calculer le nombre de pas (Podomètre)&lt;br /&gt;
&lt;br /&gt;
-&amp;gt;Calculer une distance, la vitesse, la position sur un carte? (GPS)&lt;br /&gt;
&lt;br /&gt;
-&amp;gt;Calculer la fréquence cardiaque ? (Cardiofréquencemètre)&lt;br /&gt;
&lt;br /&gt;
-&amp;gt;Afficher la fréquence cardiaque sur LED&lt;br /&gt;
&lt;br /&gt;
-&amp;gt;Mesurer la température du corps&lt;br /&gt;
&lt;br /&gt;
-&amp;gt;Transférer toutes ses informations sur l'application mobile (Android)&lt;br /&gt;
&lt;br /&gt;
== '''Etapes du Projet''' ==&lt;br /&gt;
&lt;br /&gt;
*Partie électronique&lt;br /&gt;
** Définition des différents modules (Capteurs de températures, accéléromètre..)&lt;br /&gt;
** Connecter et programmer les différents modules au microprocesseur Lilypad&lt;br /&gt;
** Créer un programme pour ordonnancer les différents modules&lt;br /&gt;
** Connecter le module Bluetooth BLE et le configurer&lt;br /&gt;
** Intégrer les composants au tee-shirt&lt;br /&gt;
&lt;br /&gt;
*Partie informatique&lt;br /&gt;
** Créer une application Android simple (Par exemple HelloWorld)&lt;br /&gt;
** Importer l'application sur smart-phone&lt;br /&gt;
** Savoir faire un menu et sous-menu [http://a-renouard.developpez.com/tutoriels/android/menu-sous-menu/]&lt;br /&gt;
** Comprendre les Services [http://nbenbourahla.developpez.com/tutoriels/android/services-sous-android/], les maîtriser: [http://blog.developpez.com/ndruet/p8571/android/creation_de_service]&lt;br /&gt;
** Comprendre les vues sous Android [http://nbenbourahla.developpez.com/tutoriels/android/introduction-vues-sous-android/]&lt;br /&gt;
** Comment utiliser SQLite sur Android [http://a-renouard.developpez.com/tutoriels/android/sqlite/]&lt;br /&gt;
** Créer les programmes principaux:&lt;br /&gt;
*** Intégration Google Map sur Android (pour utiliser le GPS) [http://michel-dirix.developpez.com/tutoriels/android/integration-google-maps-android/]&lt;br /&gt;
*** Ajouter les protocoles nécessaires pour communiquer en Bluetooth [http://sberfini.developpez.com/tutoriaux/android/bluetooth/], utilisation du NFC [http://sberfini.developpez.com/tutoriaux/android/nfc/bluetooth/]&lt;br /&gt;
*** Une vue pour afficher les différentes applications (activités)&lt;br /&gt;
*** Une activité pour gérer l'affichage des informations envoyé depuis le microprocesseur&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Matériel possédé ===&lt;br /&gt;
&lt;br /&gt;
* LilyPad Accelerometer ADXL335 [https://www.sparkfun.com/products/9267] [&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;fourni le 28/1/2015&amp;lt;/span&amp;gt;]&lt;br /&gt;
&lt;br /&gt;
* LilyPad Temperature Sensor [https://www.sparkfun.com/products/8777] [&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;fourni le 28/1/2015&amp;lt;/span&amp;gt;]&lt;br /&gt;
&lt;br /&gt;
* Arduino Lilypad Atmega 328P [http://arduino.cc/en/Main/ArduinoBoardLilyPad] [&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;fourni le 28/1/2015&amp;lt;/span&amp;gt;]&lt;br /&gt;
&lt;br /&gt;
* SparkFun FTDI Basic Breakout - 3.3V [https://www.sparkfun.com/products/9873] [&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;fourni le 28/1/2015&amp;lt;/span&amp;gt;]&lt;br /&gt;
&lt;br /&gt;
* Une dizaine de LilyPad LED Red [https://www.sparkfun.com/products/10044] [&amp;lt;span style=&amp;quot;color: lightgreen;&amp;quot;&amp;gt;LEDs LilyPad blanches disponibles&amp;lt;/span&amp;gt;]&lt;br /&gt;
&lt;br /&gt;
* Interrupteur [&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;fourni le 28/1/2015&amp;lt;/span&amp;gt;]&lt;br /&gt;
&lt;br /&gt;
* BLE nRF8001 [http://www.nordicsemi.com/eng/Products/Bluetooth-Smart-Bluetooth-low-energy/nRF8001] [&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;1 fourni le 9/2/2015&amp;lt;/span&amp;gt;]&lt;br /&gt;
&lt;br /&gt;
=== Matériel nécessaire === &lt;br /&gt;
&lt;br /&gt;
* Olimex platine ECG&lt;br /&gt;
&lt;br /&gt;
* [&amp;lt;span style=&amp;quot;color: blue;&amp;quot;&amp;gt; Du fil conducteur en bobine &amp;lt;/span&amp;gt;]&lt;br /&gt;
&lt;br /&gt;
== '''Tableau de bord''' ==&lt;br /&gt;
&lt;br /&gt;
===Semaine 1===&lt;br /&gt;
&lt;br /&gt;
Nous avons fait le point sur les capacités qu'aura notre t-shirt connecté.&lt;br /&gt;
&lt;br /&gt;
Après discussion avec M.Boë nous avons décidé d'utiliser dans un premier temps deux capteurs, Accéléromètre et capteur de température (emprunté à M.Redon), pour nous concentrer plus rapidement sur les deux problèmes majeur que nous allons rencontrer, celle de la communication entre l'arduino (Lilypad), le BLE et l'application androïde du téléphone et celle de l'énergie où le problème réside dans l'alimentation système embarqué. Nous devons trouver un composant à la fois petit, pour pouvoir être porté, et assez puissant pour délivrer de l'énergie au microprocesseur pendant plusieurs mois. Nous devons nous demander quand éteindre le micro-contrôleur et à quel moment le Bluetooth sera connecté. Nous allons pour cela ajouter un interrupteur glissière au tee-shirt.&lt;br /&gt;
&lt;br /&gt;
Nous nous sommes informés sur le bluetooth de type BLE :&lt;br /&gt;
&lt;br /&gt;
Histoire du Bluetooth: [http://www.frandroid.com/maison-connectee/232622_dossier-bluetooth-fonctionnement-interet-les-objets-connectes]&lt;br /&gt;
&lt;br /&gt;
Projet de conception d'une liaison bluetooh 2.0 : [file:///tmp/P12Rap_bluetooth.pdf]&lt;br /&gt;
&lt;br /&gt;
Protocole Bluetooth: SIG (Special Interest Group)&lt;br /&gt;
&lt;br /&gt;
'''Bluetooth 2.0 :'''&lt;br /&gt;
&lt;br /&gt;
Appairage facile et sécurisé : le SSP (Secure Simple Pairing)&lt;br /&gt;
&lt;br /&gt;
Protocole?: EDR (Enhanced Data Rate)&lt;br /&gt;
&lt;br /&gt;
'''Bluetooth 3.0: '''&lt;br /&gt;
&lt;br /&gt;
Protocole: HS (High Speed)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Bluetooth 4.0'''&lt;br /&gt;
&lt;br /&gt;
Conception d'un module bluetooth : [http://www.digikey.fr/fr/articles/techzone/2014/jun/how-to-build-low-power-wireless-systems-using-bluetooth-smart-4]&lt;br /&gt;
&lt;br /&gt;
Classic Bluetooth: Regroupe les versions 1.0 -&amp;gt; 3.0&lt;br /&gt;
&lt;br /&gt;
Protocole: LE (Bluetooth Low Energy)  --&amp;gt; Réduit fortement la consommation de la puce Bluetooth avec un protocole différent&lt;br /&gt;
&lt;br /&gt;
Dans le 4.0 le constructeur peut décider d'implémenter deux modes: Bluetooth Low Energy seul (single mode) ou avec le Classic Bluetooth (dual mode) qui lui permet de conserver la compatibilité avec les autres appareils.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Semaine 2===&lt;br /&gt;
&lt;br /&gt;
Nous avons établi une connexion avec l'Atmega 328P et communiqué avec l'accéléromètre et le capteur de température. Malheureusement le capteur de température LyliPad n'est pas très précis, nous avons donc opté pour un capteur DS18B20, c'est un capteur 1-wire. Nous avons donc commencé par comprendre cette technologie puis grâce à un programme trouvé sur internet, nous essayons de l'adapter à notre microprocesseur lillypad pour communiquer avec le DS18B20.&lt;br /&gt;
&lt;br /&gt;
Parallèlement nous avons débuté la programmation d'application Android. Nous utilisons pour cela l'IDE Eclipse. Nous rencontrons actuellement des problèmes d'environnement pour compiler un programme Android simple comme &amp;quot;Hello World&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===Semaine 3===&lt;br /&gt;
*'''Partie Hardware'''&lt;br /&gt;
**Toujours des problèmes avec le capteur de température DS18B20. Nous arrivons à envoyer le programme C sur l'arduino mais la communication avec le capteur ne se fait pas. Nous avons donc décortiqué le programme et comprendre son fonctionnement.&lt;br /&gt;
&lt;br /&gt;
*'''Partie application'''&lt;br /&gt;
**Après de nombreux bug d’installation des plateformes (Eclipse, JDK, SDK, Bibliothèque etc..) nous réussissons à lancer l'application &amp;quot;HelloWorld&amp;quot; dans un émulateur de téléphone Android. Nous pouvons maintenant nous concentrer vers la programmation orienté objet Android et détailler plus spécifiquement les étapes à réaliser avant de pouvoir coder notre programme final (cf &amp;quot;Etapes du Projet&amp;quot;).&lt;br /&gt;
Notions à connaitre:&lt;br /&gt;
*Introduction aux ressources Android (les éléments qui s'afficheront à l'écran ou avec lesquels l'utilisateur pourra interagir [http://openclassrooms.com/courses/creez-des-applications-pour-android/les-ressources-2])&lt;br /&gt;
*Introduction à la notion de &amp;quot;Style&amp;quot; et de &amp;quot;Thèmes&amp;quot; [http://cyril-mottier.developpez.com/tutoriels/android/introduction-styles-themes/]&lt;br /&gt;
&lt;br /&gt;
===Semaine 4===&lt;br /&gt;
*'''Partie Hardware'''&lt;br /&gt;
** Nous arrivons à communiquer avec le capteur DS18B20. Notre programme détecte le capteur, arrive à l'initialiser mais nous avons à présent des problèmes d'envoi de données pour connaitre la température.&lt;br /&gt;
&lt;br /&gt;
*'''Partie application'''&lt;br /&gt;
** Nous essayons dans un premier temps d'afficher un menu simple dans lequel nous pouvons naviguer [http://www.tutomobile.fr/faire-des-menus-et-sous-menus-tutoriel-android-n%C2%B012/27/07/2010/] cependant nous rencontrons des problèmes de librairies, en effet nous ne disposons pas de toutes les images publique qu'Android nous offre [http://developer.android.com/guide/topics/resources/drawable-resource.html], nous devrons donc ajouter les images nous même [http://androiddrawableexplorer.appspot.com/] dans la librairie..&lt;br /&gt;
&lt;br /&gt;
===Semaine 5===&lt;br /&gt;
*'''Partie Hardware'''&lt;br /&gt;
**Toujours des problèmes de communication avec le capteur de température. Le programme avec l'IDE fonctionne mais nous ne comprennons pas pourquoi cela ne marche pas avec le programme en c.&lt;br /&gt;
&lt;br /&gt;
*'''Partie application'''&lt;br /&gt;
Nous avons réussis à afficher un menu simple dans lequel figure quelques boutons qui nous serviront à naviguer entre les activités:&lt;br /&gt;
** Entrainement&lt;br /&gt;
** Historique&lt;br /&gt;
** Paramètres&lt;br /&gt;
** Connexion&lt;br /&gt;
&lt;br /&gt;
Voici à quoi ressemble notre menu pour le moment:&lt;br /&gt;
[[Fichier:Main activity Avant.png|250px|gauche]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Définition des différentes activités:====&lt;br /&gt;
=====L'activité &amp;quot;Entrainement&amp;quot;=====&lt;br /&gt;
Une fois connecté via Bluetooth grâce à l'activité &amp;quot;Connexion&amp;quot;, l'utilisateur devra appuyer sur le bouton &amp;quot;Start&amp;quot; pour commencer son entrainement. L'application affichera en temps réel les données envoyé depuis le t-shirt et indiquera à l'utilisateur le temps qui c'est écoulé. En background elle écrira dans un fichier texte situé dans un dossier spécifique afin de traiter ces données par la suite.&lt;br /&gt;
Lorsque l'utilisateur termine son entrainement il devra appuyer sur le bouton &amp;quot;Stop&amp;quot;, une fenêtre s'ouvrira et lui demandera s'il souhaite enregistrer ou supprimer les données de l'entrainement qu'il vient d'effectuer. S'il décide d'enregistrer il sera automatiquement redirigé vers l'activité &amp;quot;Stats&amp;quot; (non pas accessible depuis le menu) qui affichera le bilan de son entrainement.&lt;br /&gt;
&lt;br /&gt;
=====L'activité &amp;quot;Historique&amp;quot;=====&lt;br /&gt;
Recense tout les entrainements effectué par l'utilisateur. De cette activité il pourra décider de supprimer ses anciens entrainements (cela supprimera le fichier texte associé en background) ou bien d'en afficher ses statistiques (&amp;quot;Activité Stats&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
=====L'activité &amp;quot;Paramètre&amp;quot;=====&lt;br /&gt;
Activité optionnel, servira à récupérer certaines informations sur l'utilisateur qui pourrait nous être utile pour certains calcul. Comme le nombre de calories dépensé lors de l'entrainement ou autre.. Nous n'avons pas encore défini les calculs que nous effectuerons&lt;br /&gt;
&lt;br /&gt;
=====L'activité &amp;quot;Connexion&amp;quot;=====&lt;br /&gt;
Servira à connecter l'application au T-Shirt via Bluetooth&lt;br /&gt;
&lt;br /&gt;
===Semaine 6===&lt;br /&gt;
*'''Partie Hardware'''&lt;br /&gt;
** Nous avons essayé de télécharger d'autres programmes pour communiquer avec le capteur de température mais sans aucun succès. Nous avons donc essayé de traduire le programme de l'IDE (écrit en c++) en c mais toujours pas de résultat. Nous avons donc décider de laisser tomber ce capteur 1-WIRE et de prendre un capteur analogique, le TMP36. Nous sommes donc passés à la communication Bluetooth sur le lilypad avec le BLE nrf8001.&lt;br /&gt;
&lt;br /&gt;
*'''Partie application'''&lt;br /&gt;
**Nous avons configuré l'activité &amp;quot;Paramètre&amp;quot;. Elle demande quelques information à l'utilisateur comme son Nom, son âge, sa taille et son poids, utile pour calculer certains paramètres qui reste toujours à définir. (Savoir son nom ne nous est pas vraiment utile, il sert à créer une affinité entre l'utilisateur et l'application)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:ParamPref.png|gauche]] [[Fichier:ParamPref Nom.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Semaine 7===&lt;br /&gt;
*'''Partie Hardware'''&lt;br /&gt;
** Après avoir étudier le fonctionnement du BLE, nous avons téléchargé un code source sur internet pour l'IDE d'arduino que nous avons retranscrit en C. Le programme comportait à ce moment beaucoup de bogs que nous devions résoudre.&lt;br /&gt;
&lt;br /&gt;
*'''Partie application'''&lt;br /&gt;
** Découverte et apprentissage des fonctions permettant la communication Bluetooth.&lt;br /&gt;
&lt;br /&gt;
Nous avons rajouter une &amp;quot;actionbar&amp;quot; et également redéfini l'affichage du menu qui maintenant est plus sobre:&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Menu apres.png|250px]]&lt;br /&gt;
&lt;br /&gt;
===Semaine 8=== &lt;br /&gt;
*'''Partie Hardware'''&lt;br /&gt;
** Après avoir déboguer la communication I2C sur le programme arduino et les quelques autres bogs, nous avons pu commencer à utiliser la communication Bluetooth avec l'application téléphone. Nous avons donc établi un protocole de communication entre l'application et le lilypad pour pouvoir communiquer.&lt;br /&gt;
*'''Partie application'''&lt;br /&gt;
** Problème avec la connexion Bluetooth, certaines fonctions ne sont pas reconnu par l'IDE. Cela est peut être dû à une mauvaise installation des bibliothèques? Nous avons donc transféré notre projet vers un nouveaux projet qui maintenant compile, allez savoir comment..&lt;br /&gt;
&lt;br /&gt;
===Semaine 9===&lt;br /&gt;
*'''Partie Hardware'''&lt;br /&gt;
** Premier essai d'un programme pour mettre le lilypad en mode veille lorsque aucun appareil n'est connecté au Bluetooth. Reste à faire des tests de consommation électriques pour valider le code.&lt;br /&gt;
&lt;br /&gt;
*'''Partie application'''&lt;br /&gt;
** Premiers test de la connexion Bluetooth effectué. Nous avons abandonné l'idée d'utiliser l'émulateur de téléphone car il ne supporte pas le Bluetooth. Nous arrivons à communiquer avec le T-shirt, nous pouvons émettre et recevoir des caractères. Pour une question pratique la connexion ne se fera plus depuis le bouton &amp;quot;Connexion&amp;quot; du menu mais directement dans l'activité &amp;quot;Entrainement&amp;quot;. Lorsque l'utilisateur appuiera sur ce bouton depuis le menu, l'application lui demandera de se connecter au T-shirt. Une fois connecté le bouton &amp;quot;Start&amp;quot; apparait puis la communication débutera lorsqu'il appuiera dessus.&lt;br /&gt;
&lt;br /&gt;
===Semaine 10===&lt;br /&gt;
*'''Partie Hardware'''&lt;br /&gt;
** Ajout du capteur de température sur le lilypad pour envoyer les données. Nous avons également tester de nouveau la communication Bluetooth suite à une modification de l'application.&lt;br /&gt;
&lt;br /&gt;
*'''Partie application'''&lt;br /&gt;
**Définition de l'activité &amp;quot;Historique&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
Cette activité va scanner tous les fichiers créés par l'utilisateur et les afficher à l'aide d'une listView [http://www.tutomobile.fr/personnaliser-une-listview-tutoriel-android-n%C2%B07/04/07/2010/]. Lorsque l'on cliquera sur l'un des fichiers l'activité &amp;quot;Stats&amp;quot; se lancera. Nous avons également configuré une AlertDialog [http://www.tutomobile.fr/personnaliser-un-alertdialog-tutoriel-android-n%C2%B020/04/11/2010/] qui s'affiche lorsque l'on clique longuement sur un Item, celle-ci demande alors si l'on veut supprimer ou afficher les statistiques.&lt;br /&gt;
&lt;br /&gt;
Voici à quoi ressemble cette activité:&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Historique.png|gauche|250px]]  [[Fichier:Historique possibilite de supprimer les fichier.png|250px|centre]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous devons encore déterminer les détails que chaque Item aura et ajouter un TextView à la AlertDialog qui indiquera quelle Entrainement a été sélectionné.&lt;br /&gt;
&lt;br /&gt;
===Semaine 11===&lt;br /&gt;
*'''Partie Hardware'''&lt;br /&gt;
** Ajout de l'accéléromètre pour réaliser le podomètre. C'est un accéléromètre numérique (MMA8452Q), cet accéléromètre va nous permettre de générer une interruption à chaque fois qu'une accélération est détectée. Quelques petits problèmes lors de l'initialisation de celui ci mais les problèmes ont été résolu rapidement. Nous allons pouvoir commencer la construction du tee-shirt.&lt;br /&gt;
*'''Partie application'''&lt;br /&gt;
**Définition de l'activité &amp;quot;Stats&amp;quot;.&lt;br /&gt;
Cette activité va lire tout le fichier écris au préalable lors de l'entrainement, calculera des moyennes et permettra d'afficher des graphiques de certains paramètres en fonction du temps, pour cela nous avons utilisé la librairie GraphView, disponible via ce lien: [http://www.android-graphview.org/]&lt;br /&gt;
&lt;br /&gt;
En voici un premier jet, dans cet exemple nous avons affiché le graphique de la fréquence cardiaque en fonction du temps.&lt;br /&gt;
:&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Stats 2.png|250px]]&lt;br /&gt;
&lt;br /&gt;
===Semaine 12===&lt;br /&gt;
*'''Partie Hardware'''&lt;br /&gt;
*Nous avons cousu les composants électroniques sur le T-shirt&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Exterrieur.jpg|250px]]  [[Fichier:Interrieur.jpg|265px]] [[Fichier:Exterrieur Lily.jpg|250px]] [[Fichier:Interrieur Lily.jpg|235px]]&lt;br /&gt;
&lt;br /&gt;
*'''Partie application'''&lt;br /&gt;
**Redéfinition du Menu&lt;br /&gt;
Nous avons apporté quelques modifications à l'application, désormais le menu ne comporte plus le bouton connexion. La connexion Bluetooth sera établi lorsque l'utilisateur sélectionnera le bouton &amp;quot;Entrainement&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Menu.png|250px]]&lt;br /&gt;
&lt;br /&gt;
* Entrainement:&lt;br /&gt;
Si l'utilisateur n'a pas activé son bluetooth l'application lui demande automatiquement de l'activer, s'il ne le fait pas il ne pourra faire l'entrainement. Il devra ensuite sélectionner le T-Shirt pour s'y connecter, une fois la connexion établi l'entrainement pourra commencer. Il pourra alors constater en temps réels les données envoyé par le T-shirt, c'est à dire [...]&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Entrainement demande de connection bluetooth.png|250px]] &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Redéfinition de la page Historique&lt;br /&gt;
Il est désormais possible de sélectionner plusieurs éléments afin de les supprimer en même temps. Nous avons modifié l'affichage, seul la date, l'heure ainsi que le numéro de l'entrainement sont affiché.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Historique 2.png|250px]] [[Fichier:Historique selection.png|250px]] [[Fichier:Historique suppression.png|250px]]&lt;br /&gt;
&lt;br /&gt;
* Ajout d'information sur la page &amp;quot;Détails&amp;quot;&lt;br /&gt;
L'utilisateur peut désormais connaitre la distance parcouru lors de son entrainement (en supposant qu'un pas vaut 70cm). Il peut également passer d'un graphique à l'autre pour voir l'évolution de la température de son corps ou de sa fréquence cardiaque lors de l'entrainement. Nous affichons maintenant la vraie date (et non le nom du fichier), nous indiquons aussi l'heure de début de l'entrainement.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Détails Freq.png|250px]] [[Fichier:Détails temp.png|250px]]&lt;br /&gt;
&lt;br /&gt;
== Liens ==&lt;br /&gt;
&lt;br /&gt;
RFDUINO [www.rfduino.com/] : RFD22102 RFduino DIP [http://www.rfduino.com/product/rfd22102-rfduino-dip/index.html]&lt;br /&gt;
&lt;br /&gt;
Nordic rf8001 (BLE) [http://www.nordicsemi.com/eng/Products/Bluetooth-Smart-Bluetooth-low-energy/nRF8001]&lt;br /&gt;
&lt;br /&gt;
Arduino SHIELD-EKG-EMG: [https://www.olimex.com/Products/Duino/Shields/SHIELD-EKG-EMG/]&lt;br /&gt;
&lt;br /&gt;
Électrocardiogramme [http://fab.cba.mit.edu/classes/863.12/people/Adam.Marblestone/AHM_week05.html]&lt;br /&gt;
&lt;br /&gt;
LED [http://www.adafruit.com/] --&amp;gt; Fil de LED Bleu [http://www.adafruit.com/products/895] ---&amp;gt; Lot de 25 LED [http://www.adafruit.com/products/388] ---&amp;gt; [http://www.adafruit.com/products/780]&lt;br /&gt;
&lt;br /&gt;
GraphView: [https://github.com/jjoe64/GraphView]&lt;br /&gt;
&lt;br /&gt;
Library for DS18B20 [http://sourceforge.net/projects/davidegironi/files/avr-lib/avr_lib_ds18b20_01b.zip/download]&lt;br /&gt;
&lt;br /&gt;
== Tuto ==&lt;br /&gt;
&lt;br /&gt;
Tuto arduino : [https://tutoarduino.com/choix-tutoriels/]&lt;br /&gt;
&lt;br /&gt;
Tuto capteur de température: [https://tutoarduino.com/portfolio-items/tpbd2-2-detecteur-de-temperature/]&lt;br /&gt;
&lt;br /&gt;
Tuto Bluetooth: [https://tutoarduino.com/portfolio-items/le-bluetooth/] connexion app [http://nononux.free.fr/index.php?page=elec-brico-bluetooth-android-microcontroleur]&lt;br /&gt;
&lt;br /&gt;
Tuto Android: [http://android.developpez.com/cours/] [https://sites.google.com/site/redezzahir/coursJAVA/tp10] [http://sampleprogramz.com/android/] fiche: [http://www.iutbayonne.univ-pau.fr/~dalmau/documents/cours/android/Guide%20TPs%20Android%20avec%20Eclipse.pdf]&lt;br /&gt;
&lt;br /&gt;
Tuto BLE Android: [http://developer.android.com/guide/topics/connectivity/bluetooth-le.html]&lt;br /&gt;
&lt;br /&gt;
Tuto ListView: [http://www.ltm.fr/creez-une-vue-en-liste-listview-avec-texte-image/]  GraphView: [http://www.android-graphview.org/download--getting-started.html]&lt;br /&gt;
&lt;br /&gt;
Tuto GPS android: [http://www.tutomobile.fr/geolocalisation-grace-au-gps-ou-au-reseau-mobile-tutoriel-android-n%C2%B015/13/08/2010/]&lt;/div&gt;</summary>
		<author><name>Vpiat</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=V%C3%AAtements_intelligents&amp;diff=20787</id>
		<title>Vêtements intelligents</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=V%C3%AAtements_intelligents&amp;diff=20787"/>
				<updated>2015-05-08T17:26:10Z</updated>
		
		<summary type="html">&lt;p&gt;Vpiat : /* Semaine 11 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Cahier des Charges==&lt;br /&gt;
===Présentation générale du projet===&lt;br /&gt;
&lt;br /&gt;
=== Objectif ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Concevoir un système d'interaction avec des objets connectés sur les vêtements ou le corps.&lt;br /&gt;
&lt;br /&gt;
=== '''Description du projet''' ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Les systèmes embarqués sur les humains commencent à se développer (lunettes Google, montres connectées).&lt;br /&gt;
&lt;br /&gt;
Nous proposons ici de réaliser une plateforme basée sur la '''technologie BLE''' (Bluetooth Low Energy ou Bluetooth 4.0).&lt;br /&gt;
&lt;br /&gt;
Deux parties seront mise en oeuvre :&lt;br /&gt;
    &lt;br /&gt;
* un système embarqué compact permettant de recevoir des information et en transmettre ;&lt;br /&gt;
* une application Android permettant de communiquer avec le système.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Le système sera intégré sur un t-shirt en utilisant notamment la machine à coudre numérique disponible au Fabricarium de Polytech Lille.&lt;br /&gt;
&lt;br /&gt;
===Contexte===&lt;br /&gt;
&lt;br /&gt;
==== Informations à traiter ====&lt;br /&gt;
&lt;br /&gt;
Pour que notre projet soit intéressant, aux yeux des consommateurs, nous devons définir l'utilité que pourrait avoir un vêtement connecté.&lt;br /&gt;
Notre application ne doit pas être un simple gadget mais un objet qui semble utile et faire en sorte qu'il soit indispensable dans le futur. &amp;quot;Il faut créer le besoin si l'on veut vendre un objet et faire du profit.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Dans un premier temps nous devons faire une étude du marché pour savoir ce qui a déjà été fait. &lt;br /&gt;
Nous devons savoir quelles types d'informations les vêtements et objets connectés transmettent, pour quels usages et pour quels publics.&lt;br /&gt;
&lt;br /&gt;
====Le Sport====&lt;br /&gt;
&lt;br /&gt;
La plupart des objets connectés à l'Homme sont utilisés pour l'informer de ses performances physiques: &lt;br /&gt;
Combien de kilomètres ils ont parcouru, combien de pas ont été effectués, combien de calories ont été perdues.&lt;br /&gt;
&lt;br /&gt;
Ce sont principalement des performances liées à la marche et la course à pied. De nouveaux objets connectés ont vu récemment le jour, notamment les bracelets connectés permettant de récolter des informations sur les nageurs, toujours dans le but d'avoir un suivi sur ses performances (nombres de mètres nagés par rapport à un certain temps).&lt;br /&gt;
&lt;br /&gt;
====Santé et bien être====&lt;br /&gt;
&lt;br /&gt;
Encore en pleine expansion que très peu d'objets connectés se sont intéressés au domaine de la santé: ici un exemple de t-shirt connecté permettant de contrôler le rythme cardiaque: [http://pulse.edf.com/fr/les-textiles-intelligents-peuvent-surveiller-notre-coeur?gclid=Cj0KEQiAiamlBRCgj83PiYm6--gBEiQArnojD4QntiVq9cLZeZDRGqMckMIQzkr6RH3cFxJnxJk0tE0aApoA8P8HAQ]&lt;br /&gt;
&lt;br /&gt;
Beaucoup d'application ont déjà vu le jour: [http://www.techniques-ingenieur.fr/actualite/materiaux-innovants-nano-thematique_6342/ces-textiles-intelligents-qui-prennent-soin-de-nous-article_286868/]&lt;br /&gt;
&lt;br /&gt;
Quelles sont les applications que l'on pourrait faire? Quels suivis sont à faire pour quels types de maladie etc..?&lt;br /&gt;
&lt;br /&gt;
====La régulation de température====&lt;br /&gt;
&lt;br /&gt;
Grâce aux fibres électroniques tissées il est possible de chauffer un t-shirt ou de le refroidir cela pourrait se régler en fonction de la température du corps ou bien par simple commande de l'utilisateur (cela pourrait s'avérer très utile avec le réchauffement climatique qui est en train d'arriver, winter is comming..).&lt;br /&gt;
&lt;br /&gt;
===Notre Projet===&lt;br /&gt;
&lt;br /&gt;
Ce que nous voulons faire nous: Un T-shirt permettant à la fois de calculer les performances sportives mais aussi d'avoir un suivi sur notre santé et pourquoi pas faire en sorte de réguler la température du corps lors d'un effort..&lt;br /&gt;
&lt;br /&gt;
-&amp;gt;Calculer le nombre de pas (Podomètre)&lt;br /&gt;
&lt;br /&gt;
-&amp;gt;Calculer une distance, la vitesse, la position sur un carte? (GPS)&lt;br /&gt;
&lt;br /&gt;
-&amp;gt;Calculer la fréquence cardiaque ? (Cardiofréquencemètre)&lt;br /&gt;
&lt;br /&gt;
-&amp;gt;Afficher la fréquence cardiaque sur LED&lt;br /&gt;
&lt;br /&gt;
-&amp;gt;Mesurer la température du corps&lt;br /&gt;
&lt;br /&gt;
-&amp;gt;Transférer toutes ses informations sur l'application mobile (Android)&lt;br /&gt;
&lt;br /&gt;
== '''Etapes du Projet''' ==&lt;br /&gt;
&lt;br /&gt;
*Partie électronique&lt;br /&gt;
** Définition des différents modules (Capteurs de températures, accéléromètre..)&lt;br /&gt;
** Connecter et programmer les différents modules au microprocesseur Lilypad&lt;br /&gt;
** Créer un programme pour ordonnancer les différents modules&lt;br /&gt;
** Connecter le module Bluetooth BLE et le configurer&lt;br /&gt;
** Intégrer les composants au tee-shirt&lt;br /&gt;
&lt;br /&gt;
*Partie informatique&lt;br /&gt;
** Créer une application Android simple (Par exemple HelloWorld)&lt;br /&gt;
** Importer l'application sur smart-phone&lt;br /&gt;
** Savoir faire un menu et sous-menu [http://a-renouard.developpez.com/tutoriels/android/menu-sous-menu/]&lt;br /&gt;
** Comprendre les Services [http://nbenbourahla.developpez.com/tutoriels/android/services-sous-android/], les maîtriser: [http://blog.developpez.com/ndruet/p8571/android/creation_de_service]&lt;br /&gt;
** Comprendre les vues sous Android [http://nbenbourahla.developpez.com/tutoriels/android/introduction-vues-sous-android/]&lt;br /&gt;
** Comment utiliser SQLite sur Android [http://a-renouard.developpez.com/tutoriels/android/sqlite/]&lt;br /&gt;
** Créer les programmes principaux:&lt;br /&gt;
*** Intégration Google Map sur Android (pour utiliser le GPS) [http://michel-dirix.developpez.com/tutoriels/android/integration-google-maps-android/]&lt;br /&gt;
*** Ajouter les protocoles nécessaires pour communiquer en Bluetooth [http://sberfini.developpez.com/tutoriaux/android/bluetooth/], utilisation du NFC [http://sberfini.developpez.com/tutoriaux/android/nfc/bluetooth/]&lt;br /&gt;
*** Une vue pour afficher les différentes applications (activités)&lt;br /&gt;
*** Une activité pour gérer l'affichage des informations envoyé depuis le microprocesseur&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Matériel possédé ===&lt;br /&gt;
&lt;br /&gt;
* LilyPad Accelerometer ADXL335 [https://www.sparkfun.com/products/9267] [&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;fourni le 28/1/2015&amp;lt;/span&amp;gt;]&lt;br /&gt;
&lt;br /&gt;
* LilyPad Temperature Sensor [https://www.sparkfun.com/products/8777] [&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;fourni le 28/1/2015&amp;lt;/span&amp;gt;]&lt;br /&gt;
&lt;br /&gt;
* Arduino Lilypad Atmega 328P [http://arduino.cc/en/Main/ArduinoBoardLilyPad] [&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;fourni le 28/1/2015&amp;lt;/span&amp;gt;]&lt;br /&gt;
&lt;br /&gt;
* SparkFun FTDI Basic Breakout - 3.3V [https://www.sparkfun.com/products/9873] [&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;fourni le 28/1/2015&amp;lt;/span&amp;gt;]&lt;br /&gt;
&lt;br /&gt;
* Une dizaine de LilyPad LED Red [https://www.sparkfun.com/products/10044] [&amp;lt;span style=&amp;quot;color: lightgreen;&amp;quot;&amp;gt;LEDs LilyPad blanches disponibles&amp;lt;/span&amp;gt;]&lt;br /&gt;
&lt;br /&gt;
* Interrupteur [&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;fourni le 28/1/2015&amp;lt;/span&amp;gt;]&lt;br /&gt;
&lt;br /&gt;
* BLE nRF8001 [http://www.nordicsemi.com/eng/Products/Bluetooth-Smart-Bluetooth-low-energy/nRF8001] [&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;1 fourni le 9/2/2015&amp;lt;/span&amp;gt;]&lt;br /&gt;
&lt;br /&gt;
=== Matériel nécessaire === &lt;br /&gt;
&lt;br /&gt;
* Olimex platine ECG&lt;br /&gt;
&lt;br /&gt;
* [&amp;lt;span style=&amp;quot;color: blue;&amp;quot;&amp;gt; Du fil conducteur en bobine &amp;lt;/span&amp;gt;]&lt;br /&gt;
&lt;br /&gt;
== '''Tableau de bord''' ==&lt;br /&gt;
&lt;br /&gt;
===Semaine 1===&lt;br /&gt;
&lt;br /&gt;
Nous avons fait le point sur les capacités qu'aura notre t-shirt connecté.&lt;br /&gt;
&lt;br /&gt;
Après discussion avec M.Boë nous avons décidé d'utiliser dans un premier temps deux capteurs, Accéléromètre et capteur de température (emprunté à M.Redon), pour nous concentrer plus rapidement sur les deux problèmes majeur que nous allons rencontrer, celle de la communication entre l'arduino (Lilypad), le BLE et l'application androïde du téléphone et celle de l'énergie où le problème réside dans l'alimentation système embarqué. Nous devons trouver un composant à la fois petit, pour pouvoir être porté, et assez puissant pour délivrer de l'énergie au microprocesseur pendant plusieurs mois. Nous devons nous demander quand éteindre le micro-contrôleur et à quel moment le Bluetooth sera connecté. Nous allons pour cela ajouter un interrupteur glissière au tee-shirt.&lt;br /&gt;
&lt;br /&gt;
Nous nous sommes informés sur le bluetooth de type BLE :&lt;br /&gt;
&lt;br /&gt;
Histoire du Bluetooth: [http://www.frandroid.com/maison-connectee/232622_dossier-bluetooth-fonctionnement-interet-les-objets-connectes]&lt;br /&gt;
&lt;br /&gt;
Projet de conception d'une liaison bluetooh 2.0 : [file:///tmp/P12Rap_bluetooth.pdf]&lt;br /&gt;
&lt;br /&gt;
Protocole Bluetooth: SIG (Special Interest Group)&lt;br /&gt;
&lt;br /&gt;
'''Bluetooth 2.0 :'''&lt;br /&gt;
&lt;br /&gt;
Appairage facile et sécurisé : le SSP (Secure Simple Pairing)&lt;br /&gt;
&lt;br /&gt;
Protocole?: EDR (Enhanced Data Rate)&lt;br /&gt;
&lt;br /&gt;
'''Bluetooth 3.0: '''&lt;br /&gt;
&lt;br /&gt;
Protocole: HS (High Speed)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Bluetooth 4.0'''&lt;br /&gt;
&lt;br /&gt;
Conception d'un module bluetooth : [http://www.digikey.fr/fr/articles/techzone/2014/jun/how-to-build-low-power-wireless-systems-using-bluetooth-smart-4]&lt;br /&gt;
&lt;br /&gt;
Classic Bluetooth: Regroupe les versions 1.0 -&amp;gt; 3.0&lt;br /&gt;
&lt;br /&gt;
Protocole: LE (Bluetooth Low Energy)  --&amp;gt; Réduit fortement la consommation de la puce Bluetooth avec un protocole différent&lt;br /&gt;
&lt;br /&gt;
Dans le 4.0 le constructeur peut décider d'implémenter deux modes: Bluetooth Low Energy seul (single mode) ou avec le Classic Bluetooth (dual mode) qui lui permet de conserver la compatibilité avec les autres appareils.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Semaine 2===&lt;br /&gt;
&lt;br /&gt;
Nous avons établi une connexion avec l'Atmega 328P et communiqué avec l'accéléromètre et le capteur de température. Malheureusement le capteur de température LyliPad n'est pas très précis, nous avons donc opté pour un capteur DS18B20, c'est un capteur 1-wire. Nous avons donc commencé par comprendre cette technologie puis grâce à un programme trouvé sur internet, nous essayons de l'adapter à notre microprocesseur lillypad pour communiquer avec le DS18B20.&lt;br /&gt;
&lt;br /&gt;
Parallèlement nous avons débuté la programmation d'application Android. Nous utilisons pour cela l'IDE Eclipse. Nous rencontrons actuellement des problèmes d'environnement pour compiler un programme Android simple comme &amp;quot;Hello World&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===Semaine 3===&lt;br /&gt;
*'''Partie Hardware'''&lt;br /&gt;
**Toujours des problèmes avec le capteur de température DS18B20. Nous arrivons à envoyer le programme C sur l'arduino mais la communication avec le capteur ne se fait pas. Nous avons donc décortiqué le programme et comprendre son fonctionnement.&lt;br /&gt;
&lt;br /&gt;
*'''Partie application'''&lt;br /&gt;
**Après de nombreux bug d’installation des plateformes (Eclipse, JDK, SDK, Bibliothèque etc..) nous réussissons à lancer l'application &amp;quot;HelloWorld&amp;quot; dans un émulateur de téléphone Android. Nous pouvons maintenant nous concentrer vers la programmation orienté objet Android et détailler plus spécifiquement les étapes à réaliser avant de pouvoir coder notre programme final (cf &amp;quot;Etapes du Projet&amp;quot;).&lt;br /&gt;
Notions à connaitre:&lt;br /&gt;
*Introduction aux ressources Android (les éléments qui s'afficheront à l'écran ou avec lesquels l'utilisateur pourra interagir [http://openclassrooms.com/courses/creez-des-applications-pour-android/les-ressources-2])&lt;br /&gt;
*Introduction à la notion de &amp;quot;Style&amp;quot; et de &amp;quot;Thèmes&amp;quot; [http://cyril-mottier.developpez.com/tutoriels/android/introduction-styles-themes/]&lt;br /&gt;
&lt;br /&gt;
===Semaine 4===&lt;br /&gt;
*'''Partie Hardware'''&lt;br /&gt;
** Nous arrivons à communiquer avec le capteur DS18B20. Notre programme détecte le capteur, arrive à l'initialiser mais nous avons à présent des problèmes d'envoi de données pour connaitre la température.&lt;br /&gt;
&lt;br /&gt;
*'''Partie application'''&lt;br /&gt;
** Nous essayons dans un premier temps d'afficher un menu simple dans lequel nous pouvons naviguer [http://www.tutomobile.fr/faire-des-menus-et-sous-menus-tutoriel-android-n%C2%B012/27/07/2010/] cependant nous rencontrons des problèmes de librairies, en effet nous ne disposons pas de toutes les images publique qu'Android nous offre [http://developer.android.com/guide/topics/resources/drawable-resource.html], nous devrons donc ajouter les images nous même [http://androiddrawableexplorer.appspot.com/] dans la librairie..&lt;br /&gt;
&lt;br /&gt;
===Semaine 5===&lt;br /&gt;
*'''Partie Hardware'''&lt;br /&gt;
**Toujours des problèmes de communication avec le capteur de température. Le programme avec l'IDE fonctionne mais nous ne comprennons pas pourquoi cela ne marche pas avec le programme en c.&lt;br /&gt;
&lt;br /&gt;
*'''Partie application'''&lt;br /&gt;
Nous avons réussis à afficher un menu simple dans lequel figure quelques boutons qui nous serviront à naviguer entre les activités:&lt;br /&gt;
** Entrainement&lt;br /&gt;
** Historique&lt;br /&gt;
** Paramètres&lt;br /&gt;
** Connexion&lt;br /&gt;
&lt;br /&gt;
Voici à quoi ressemble notre menu pour le moment:&lt;br /&gt;
[[Fichier:Main activity Avant.png|250px|gauche]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Définition des différentes activités:====&lt;br /&gt;
=====L'activité &amp;quot;Entrainement&amp;quot;=====&lt;br /&gt;
Une fois connecté via Bluetooth grâce à l'activité &amp;quot;Connexion&amp;quot;, l'utilisateur devra appuyer sur le bouton &amp;quot;Start&amp;quot; pour commencer son entrainement. L'application affichera en temps réel les données envoyé depuis le t-shirt et indiquera à l'utilisateur le temps qui c'est écoulé. En background elle écrira dans un fichier texte situé dans un dossier spécifique afin de traiter ces données par la suite.&lt;br /&gt;
Lorsque l'utilisateur termine son entrainement il devra appuyer sur le bouton &amp;quot;Stop&amp;quot;, une fenêtre s'ouvrira et lui demandera s'il souhaite enregistrer ou supprimer les données de l'entrainement qu'il vient d'effectuer. S'il décide d'enregistrer il sera automatiquement redirigé vers l'activité &amp;quot;Stats&amp;quot; (non pas accessible depuis le menu) qui affichera le bilan de son entrainement.&lt;br /&gt;
&lt;br /&gt;
=====L'activité &amp;quot;Historique&amp;quot;=====&lt;br /&gt;
Recense tout les entrainements effectué par l'utilisateur. De cette activité il pourra décider de supprimer ses anciens entrainements (cela supprimera le fichier texte associé en background) ou bien d'en afficher ses statistiques (&amp;quot;Activité Stats&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
=====L'activité &amp;quot;Paramètre&amp;quot;=====&lt;br /&gt;
Activité optionnel, servira à récupérer certaines informations sur l'utilisateur qui pourrait nous être utile pour certains calcul. Comme le nombre de calories dépensé lors de l'entrainement ou autre.. Nous n'avons pas encore défini les calculs que nous effectuerons&lt;br /&gt;
&lt;br /&gt;
=====L'activité &amp;quot;Connexion&amp;quot;=====&lt;br /&gt;
Servira à connecter l'application au T-Shirt via Bluetooth&lt;br /&gt;
&lt;br /&gt;
===Semaine 6===&lt;br /&gt;
*'''Partie Hardware'''&lt;br /&gt;
** Nous avons essayé de télécharger d'autres programmes pour communiquer avec le capteur de température mais sans aucun succès. Nous avons donc essayé de traduire le programme de l'IDE (écrit en c++) en c mais toujours pas de résultat. Nous avons donc décider de laisser tomber ce capteur 1-WIRE et de prendre un capteur analogique, le TMP36. Nous sommes donc passés à la communication Bluetooth sur le lilypad avec le BLE nrf8001.&lt;br /&gt;
&lt;br /&gt;
*'''Partie application'''&lt;br /&gt;
**Nous avons configuré l'activité &amp;quot;Paramètre&amp;quot;. Elle demande quelques information à l'utilisateur comme son Nom, son âge, sa taille et son poids, utile pour calculer certains paramètres qui reste toujours à définir. (Savoir son nom ne nous est pas vraiment utile, il sert à créer une affinité entre l'utilisateur et l'application)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:ParamPref.png|gauche]] [[Fichier:ParamPref Nom.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Semaine 7===&lt;br /&gt;
*'''Partie Hardware'''&lt;br /&gt;
** Après avoir étudier le fonctionnement du BLE, nous avons téléchargé un code source sur internet pour l'IDE d'arduino que nous avons retranscrit en C. Le programme comportait à ce moment beaucoup de bogs que nous devions résoudre.&lt;br /&gt;
&lt;br /&gt;
*'''Partie application'''&lt;br /&gt;
** Découverte et apprentissage des fonctions permettant la communication Bluetooth.&lt;br /&gt;
&lt;br /&gt;
Nous avons rajouter une &amp;quot;actionbar&amp;quot; et également redéfini l'affichage du menu qui maintenant est plus sobre:&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Menu apres.png|250px]]&lt;br /&gt;
&lt;br /&gt;
===Semaine 8=== &lt;br /&gt;
*'''Partie Hardware'''&lt;br /&gt;
** Après avoir déboguer la communication I2C sur le programme arduino et les quelques autres bogs, nous avons pu commencer à utiliser la communication Bluetooth avec l'application téléphone. Nous avons donc établi un protocole de communication entre l'application et le lilypad pour pouvoir communiquer.&lt;br /&gt;
*'''Partie application'''&lt;br /&gt;
** Problème avec la connexion Bluetooth, certaines fonctions ne sont pas reconnu par l'IDE. Cela est peut être dû à une mauvaise installation des bibliothèques? Nous avons donc transféré notre projet vers un nouveaux projet qui maintenant compile, allez savoir comment..&lt;br /&gt;
&lt;br /&gt;
===Semaine 9===&lt;br /&gt;
*'''Partie Hardware'''&lt;br /&gt;
** Premier essai d'un programme pour mettre le lilypad en mode veille lorsque aucun appareil n'est connecté au Bluetooth. Reste à faire des tests de consommation électriques pour valider le code.&lt;br /&gt;
&lt;br /&gt;
*'''Partie application'''&lt;br /&gt;
** Premiers test de la connexion Bluetooth effectué. Nous avons abandonné l'idée d'utiliser l'émulateur de téléphone car il ne supporte pas le Bluetooth. Nous arrivons à communiquer avec le T-shirt, nous pouvons émettre et recevoir des caractères. Pour une question pratique la connexion ne se fera plus depuis le bouton &amp;quot;Connexion&amp;quot; du menu mais directement dans l'activité &amp;quot;Entrainement&amp;quot;. Lorsque l'utilisateur appuiera sur ce bouton depuis le menu, l'application lui demandera de se connecter au T-shirt. Une fois connecté le bouton &amp;quot;Start&amp;quot; apparait puis la communication débutera lorsqu'il appuiera dessus.&lt;br /&gt;
&lt;br /&gt;
===Semaine 10===&lt;br /&gt;
*'''Partie Hardware'''&lt;br /&gt;
** Ajout du capteur de température sur le lilypad pour envoyer les données. Nous avons également tester de nouveau la communication Bluetooth suite à une modification de l'application.&lt;br /&gt;
&lt;br /&gt;
*'''Partie application'''&lt;br /&gt;
**Définition de l'activité &amp;quot;Historique&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
Cette activité va scanner tous les fichiers créés par l'utilisateur et les afficher à l'aide d'une listView [http://www.tutomobile.fr/personnaliser-une-listview-tutoriel-android-n%C2%B07/04/07/2010/]. Lorsque l'on cliquera sur l'un des fichiers l'activité &amp;quot;Stats&amp;quot; se lancera. Nous avons également configuré une AlertDialog [http://www.tutomobile.fr/personnaliser-un-alertdialog-tutoriel-android-n%C2%B020/04/11/2010/] qui s'affiche lorsque l'on clique longuement sur un Item, celle-ci demande alors si l'on veut supprimer ou afficher les statistiques.&lt;br /&gt;
&lt;br /&gt;
Voici à quoi ressemble cette activité:&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Historique.png|gauche|250px]]  [[Fichier:Historique possibilite de supprimer les fichier.png|250px|centre]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous devons encore déterminer les détails que chaque Item aura et ajouter un TextView à la AlertDialog qui indiquera quelle Entrainement a été sélectionné.&lt;br /&gt;
&lt;br /&gt;
===Semaine 11===&lt;br /&gt;
*'''Partie Hardware'''&lt;br /&gt;
** Ajout de l'accéléromètre pour réaliser le podomètre. C'est un accéléromètre numérique (MMA8452Q), cet accéléromètre va nous permettre de générer une interruption à chaque fois qu'une accélération est détectée. Quelques petitsd problèmes lors de l'initialisation de celui ci mais les problèmes ont été résolu rapidement. Nous allons pouvoir commencer la construction du tee-shirt.&lt;br /&gt;
*'''Partie application'''&lt;br /&gt;
**Définition de l'activité &amp;quot;Stats&amp;quot;.&lt;br /&gt;
Cette activité va lire tout le fichier écris au préalable lors de l'entrainement, calculera des moyennes et permettra d'afficher des graphiques de certains paramètres en fonction du temps, pour cela nous avons utilisé la librairie GraphView, disponible via ce lien: [http://www.android-graphview.org/]&lt;br /&gt;
&lt;br /&gt;
En voici un premier jet, dans cet exemple nous avons affiché le graphique de la fréquence cardiaque en fonction du temps.&lt;br /&gt;
:&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Stats 2.png|250px]]&lt;br /&gt;
&lt;br /&gt;
===Semaine 12===&lt;br /&gt;
*'''Partie Hardware'''&lt;br /&gt;
*Nous avons cousu les composants électroniques sur le T-shirt&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Exterrieur.jpg|250px]]  [[Fichier:Interrieur.jpg|265px]] [[Fichier:Exterrieur Lily.jpg|250px]] [[Fichier:Interrieur Lily.jpg|235px]]&lt;br /&gt;
&lt;br /&gt;
*'''Partie application'''&lt;br /&gt;
**Redéfinition du Menu&lt;br /&gt;
Nous avons apporté quelques modifications à l'application, désormais le menu ne comporte plus le bouton connexion. La connexion Bluetooth sera établi lorsque l'utilisateur sélectionnera le bouton &amp;quot;Entrainement&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Menu.png|250px]]&lt;br /&gt;
&lt;br /&gt;
* Entrainement:&lt;br /&gt;
Si l'utilisateur n'a pas activé son bluetooth l'application lui demande automatiquement de l'activer, s'il ne le fait pas il ne pourra faire l'entrainement. Il devra ensuite sélectionner le T-Shirt pour s'y connecter, une fois la connexion établi l'entrainement pourra commencer. Il pourra alors constater en temps réels les données envoyé par le T-shirt, c'est à dire [...]&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Entrainement demande de connection bluetooth.png|250px]] &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Redéfinition de la page Historique&lt;br /&gt;
Il est désormais possible de sélectionner plusieurs éléments afin de les supprimer en même temps. Nous avons modifié l'affichage, seul la date, l'heure ainsi que le numéro de l'entrainement sont affiché.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Historique 2.png|250px]] [[Fichier:Historique selection.png|250px]] [[Fichier:Historique suppression.png|250px]]&lt;br /&gt;
&lt;br /&gt;
* Ajout d'information sur la page &amp;quot;Détails&amp;quot;&lt;br /&gt;
L'utilisateur peut désormais connaitre la distance parcouru lors de son entrainement (en supposant qu'un pas vaut 70cm). Il peut également passer d'un graphique à l'autre pour voir l'évolution de la température de son corps ou de sa fréquence cardiaque lors de l'entrainement. Nous affichons maintenant la vraie date (et non le nom du fichier), nous indiquons aussi l'heure de début de l'entrainement.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Détails Freq.png|250px]] [[Fichier:Détails temp.png|250px]]&lt;br /&gt;
&lt;br /&gt;
== Liens ==&lt;br /&gt;
&lt;br /&gt;
RFDUINO [www.rfduino.com/] : RFD22102 RFduino DIP [http://www.rfduino.com/product/rfd22102-rfduino-dip/index.html]&lt;br /&gt;
&lt;br /&gt;
Nordic rf8001 (BLE) [http://www.nordicsemi.com/eng/Products/Bluetooth-Smart-Bluetooth-low-energy/nRF8001]&lt;br /&gt;
&lt;br /&gt;
Arduino SHIELD-EKG-EMG: [https://www.olimex.com/Products/Duino/Shields/SHIELD-EKG-EMG/]&lt;br /&gt;
&lt;br /&gt;
Électrocardiogramme [http://fab.cba.mit.edu/classes/863.12/people/Adam.Marblestone/AHM_week05.html]&lt;br /&gt;
&lt;br /&gt;
LED [http://www.adafruit.com/] --&amp;gt; Fil de LED Bleu [http://www.adafruit.com/products/895] ---&amp;gt; Lot de 25 LED [http://www.adafruit.com/products/388] ---&amp;gt; [http://www.adafruit.com/products/780]&lt;br /&gt;
&lt;br /&gt;
GraphView: [https://github.com/jjoe64/GraphView]&lt;br /&gt;
&lt;br /&gt;
Library for DS18B20 [http://sourceforge.net/projects/davidegironi/files/avr-lib/avr_lib_ds18b20_01b.zip/download]&lt;br /&gt;
&lt;br /&gt;
== Tuto ==&lt;br /&gt;
&lt;br /&gt;
Tuto arduino : [https://tutoarduino.com/choix-tutoriels/]&lt;br /&gt;
&lt;br /&gt;
Tuto capteur de température: [https://tutoarduino.com/portfolio-items/tpbd2-2-detecteur-de-temperature/]&lt;br /&gt;
&lt;br /&gt;
Tuto Bluetooth: [https://tutoarduino.com/portfolio-items/le-bluetooth/] connexion app [http://nononux.free.fr/index.php?page=elec-brico-bluetooth-android-microcontroleur]&lt;br /&gt;
&lt;br /&gt;
Tuto Android: [http://android.developpez.com/cours/] [https://sites.google.com/site/redezzahir/coursJAVA/tp10] [http://sampleprogramz.com/android/] fiche: [http://www.iutbayonne.univ-pau.fr/~dalmau/documents/cours/android/Guide%20TPs%20Android%20avec%20Eclipse.pdf]&lt;br /&gt;
&lt;br /&gt;
Tuto BLE Android: [http://developer.android.com/guide/topics/connectivity/bluetooth-le.html]&lt;br /&gt;
&lt;br /&gt;
Tuto ListView: [http://www.ltm.fr/creez-une-vue-en-liste-listview-avec-texte-image/]  GraphView: [http://www.android-graphview.org/download--getting-started.html]&lt;br /&gt;
&lt;br /&gt;
Tuto GPS android: [http://www.tutomobile.fr/geolocalisation-grace-au-gps-ou-au-reseau-mobile-tutoriel-android-n%C2%B015/13/08/2010/]&lt;/div&gt;</summary>
		<author><name>Vpiat</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=V%C3%AAtements_intelligents&amp;diff=20053</id>
		<title>Vêtements intelligents</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=V%C3%AAtements_intelligents&amp;diff=20053"/>
				<updated>2015-04-15T15:26:08Z</updated>
		
		<summary type="html">&lt;p&gt;Vpiat : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Cahier des Charges==&lt;br /&gt;
===Présentation générale du projet===&lt;br /&gt;
&lt;br /&gt;
=== Objectif ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Concevoir un système d'interaction avec des objets connectés sur les vêtements ou le corps.&lt;br /&gt;
&lt;br /&gt;
=== '''Description du projet''' ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Les systèmes embarqués sur les humains commencent à se développer (lunettes Google, montres connectées).&lt;br /&gt;
&lt;br /&gt;
Nous proposons ici de réaliser une plateforme basée sur la '''technologie BLE''' (Bluetooth Low Energy ou Bluetooth 4.0).&lt;br /&gt;
&lt;br /&gt;
Deux parties seront mise en oeuvre :&lt;br /&gt;
    &lt;br /&gt;
* un système embarqué compact permettant de recevoir des information et en transmettre ;&lt;br /&gt;
* une application Android permettant de communiquer avec le système.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Le système sera intégré sur un t-shirt en utilisant notamment la machine à coudre numérique disponible au Fabricarium de Polytech Lille.&lt;br /&gt;
&lt;br /&gt;
===Contexte===&lt;br /&gt;
&lt;br /&gt;
==== Informations à traiter ====&lt;br /&gt;
&lt;br /&gt;
Pour que notre projet soit intéressant, aux yeux des consommateurs, nous devons définir l'utilité que pourrait avoir un vêtement connecté.&lt;br /&gt;
Notre application ne doit pas être un simple gadget mais un objet qui semble utile et faire en sorte qu'il soit indispensable dans le futur. &amp;quot;Il faut créer le besoin si l'on veut vendre un objet et faire du profit.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Dans un premier temps nous devons faire une étude du marché pour savoir ce qui a déjà été fait. &lt;br /&gt;
Nous devons savoir quelles types d'informations les vêtements et objets connectés transmettent, pour quels usages et pour quels publics.&lt;br /&gt;
&lt;br /&gt;
====Le Sport====&lt;br /&gt;
&lt;br /&gt;
La plupart des objets connectés à l'Homme sont utilisés pour l'informer de ses performances physiques: &lt;br /&gt;
Combien de kilomètres ils ont parcouru, combien de pas ont été effectués, combien de calories ont été perdues.&lt;br /&gt;
&lt;br /&gt;
Ce sont principalement des performances liées à la marche et la course à pied. De nouveaux objets connectés ont vu récemment le jour, notamment les bracelets connectés permettant de récolter des informations sur les nageurs, toujours dans le but d'avoir un suivi sur ses performances (nombres de mètres nagés par rapport à un certain temps).&lt;br /&gt;
&lt;br /&gt;
====Santé et bien être====&lt;br /&gt;
&lt;br /&gt;
Encore en pleine expansion que très peu d'objets connectés se sont intéressés au domaine de la santé: ici un exemple de t-shirt connecté permettant de contrôler le rythme cardiaque: [http://pulse.edf.com/fr/les-textiles-intelligents-peuvent-surveiller-notre-coeur?gclid=Cj0KEQiAiamlBRCgj83PiYm6--gBEiQArnojD4QntiVq9cLZeZDRGqMckMIQzkr6RH3cFxJnxJk0tE0aApoA8P8HAQ]&lt;br /&gt;
&lt;br /&gt;
Beaucoup d'application ont déjà vu le jour: [http://www.techniques-ingenieur.fr/actualite/materiaux-innovants-nano-thematique_6342/ces-textiles-intelligents-qui-prennent-soin-de-nous-article_286868/]&lt;br /&gt;
&lt;br /&gt;
Quelles sont les applications que l'on pourrait faire? Quels suivis sont à faire pour quels types de maladie etc..?&lt;br /&gt;
&lt;br /&gt;
====La régulation de température====&lt;br /&gt;
&lt;br /&gt;
Grâce aux fibres électroniques tissées il est possible de chauffer un t-shirt ou de le refroidir cela pourrait se régler en fonction de la température du corps ou bien par simple commande de l'utilisateur (cela pourrait s'avérer très utile avec le réchauffement climatique qui est en train d'arriver, winter is comming..).&lt;br /&gt;
&lt;br /&gt;
===Notre Projet===&lt;br /&gt;
&lt;br /&gt;
Ce que nous voulons faire nous: Un T-shirt permettant à la fois de calculer les performances sportives mais aussi d'avoir un suivi sur notre santé et pourquoi pas faire en sorte de réguler la température du corps lors d'un effort..&lt;br /&gt;
&lt;br /&gt;
-&amp;gt;Calculer le nombre de pas (Podomètre)&lt;br /&gt;
&lt;br /&gt;
-&amp;gt;Calculer une distance, la vitesse, la position sur un carte? (GPS)&lt;br /&gt;
&lt;br /&gt;
-&amp;gt;Calculer la fréquence cardiaque ? (Cardiofréquencemètre)&lt;br /&gt;
&lt;br /&gt;
-&amp;gt;Afficher la fréquence cardiaque sur LED&lt;br /&gt;
&lt;br /&gt;
-&amp;gt;Mesurer la température du corps&lt;br /&gt;
&lt;br /&gt;
-&amp;gt;Transférer toutes ses informations sur l'application mobile (Android)&lt;br /&gt;
&lt;br /&gt;
== '''Etapes du Projet''' ==&lt;br /&gt;
&lt;br /&gt;
*Partie électronique&lt;br /&gt;
** Définition des différents modules (Capteurs de températures, accéléromètre..)&lt;br /&gt;
** Connecter et programmer les différents modules au microprocesseur Lilypad&lt;br /&gt;
** Créer un programme pour ordonnancer les différents modules&lt;br /&gt;
** Connecter le module Bluetooth BLE et le configurer&lt;br /&gt;
** Intégrer les composants au tee-shirt&lt;br /&gt;
&lt;br /&gt;
*Partie informatique&lt;br /&gt;
** Créer une application Android simple (Par exemple HelloWorld)&lt;br /&gt;
** Importer l'application sur smart-phone&lt;br /&gt;
** Savoir faire un menu et sous-menu [http://a-renouard.developpez.com/tutoriels/android/menu-sous-menu/]&lt;br /&gt;
** Comprendre les Services [http://nbenbourahla.developpez.com/tutoriels/android/services-sous-android/], les maîtriser: [http://blog.developpez.com/ndruet/p8571/android/creation_de_service]&lt;br /&gt;
** Comprendre les vues sous Android [http://nbenbourahla.developpez.com/tutoriels/android/introduction-vues-sous-android/]&lt;br /&gt;
** Comment utiliser SQLite sur Android [http://a-renouard.developpez.com/tutoriels/android/sqlite/]&lt;br /&gt;
** Créer les programmes principaux:&lt;br /&gt;
*** Intégration Google Map sur Android (pour utiliser le GPS) [http://michel-dirix.developpez.com/tutoriels/android/integration-google-maps-android/]&lt;br /&gt;
*** Ajouter les protocoles nécessaires pour communiquer en Bluetooth [http://sberfini.developpez.com/tutoriaux/android/bluetooth/], utilisation du NFC [http://sberfini.developpez.com/tutoriaux/android/nfc/bluetooth/]&lt;br /&gt;
*** Une vue pour afficher les différentes applications (activités)&lt;br /&gt;
*** Une activité pour gérer l'affichage des informations envoyé depuis le microprocesseur&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Matériel possédé ===&lt;br /&gt;
&lt;br /&gt;
* LilyPad Accelerometer ADXL335 [https://www.sparkfun.com/products/9267] [&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;fourni le 28/1/2015&amp;lt;/span&amp;gt;]&lt;br /&gt;
&lt;br /&gt;
* LilyPad Temperature Sensor [https://www.sparkfun.com/products/8777] [&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;fourni le 28/1/2015&amp;lt;/span&amp;gt;]&lt;br /&gt;
&lt;br /&gt;
* Arduino Lilypad Atmega 328P [http://arduino.cc/en/Main/ArduinoBoardLilyPad] [&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;fourni le 28/1/2015&amp;lt;/span&amp;gt;]&lt;br /&gt;
&lt;br /&gt;
* SparkFun FTDI Basic Breakout - 3.3V [https://www.sparkfun.com/products/9873] [&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;fourni le 28/1/2015&amp;lt;/span&amp;gt;]&lt;br /&gt;
&lt;br /&gt;
* Une dizaine de LilyPad LED Red [https://www.sparkfun.com/products/10044] [&amp;lt;span style=&amp;quot;color: lightgreen;&amp;quot;&amp;gt;LEDs LilyPad blanches disponibles&amp;lt;/span&amp;gt;]&lt;br /&gt;
&lt;br /&gt;
* Interrupteur [&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;fourni le 28/1/2015&amp;lt;/span&amp;gt;]&lt;br /&gt;
&lt;br /&gt;
* BLE nRF8001 [http://www.nordicsemi.com/eng/Products/Bluetooth-Smart-Bluetooth-low-energy/nRF8001] [&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;1 fourni le 9/2/2015&amp;lt;/span&amp;gt;]&lt;br /&gt;
&lt;br /&gt;
=== Matériel nécessaire === &lt;br /&gt;
&lt;br /&gt;
* Olimex platine ECG&lt;br /&gt;
&lt;br /&gt;
* [&amp;lt;span style=&amp;quot;color: blue;&amp;quot;&amp;gt; Du fil conducteur en bobine &amp;lt;/span&amp;gt;]&lt;br /&gt;
&lt;br /&gt;
== '''Tableau de bord''' ==&lt;br /&gt;
&lt;br /&gt;
===Semaine 1===&lt;br /&gt;
&lt;br /&gt;
Nous avons fait le point sur les capacités qu'aura notre t-shirt connecté.&lt;br /&gt;
&lt;br /&gt;
Après discussion avec M.Boë nous avons décidé d'utiliser dans un premier temps deux capteurs, Accéléromètre et capteur de température (emprunté à M.Redon), pour nous concentrer plus rapidement sur les deux problèmes majeur que nous allons rencontrer, celle de la communication entre l'arduino (Lilypad), le BLE et l'application androïde du téléphone et celle de l'énergie où le problème réside dans l'alimentation système embarqué. Nous devons trouver un composant à la fois petit, pour pouvoir être porté, et assez puissant pour délivrer de l'énergie au microprocesseur pendant plusieurs mois. Nous devons nous demander quand éteindre le micro-contrôleur et à quel moment le Bluetooth sera connecté. Nous allons pour cela ajouter un interrupteur glissière au tee-shirt.&lt;br /&gt;
&lt;br /&gt;
Nous nous sommes informés sur le bluetooth de type BLE :&lt;br /&gt;
&lt;br /&gt;
Histoire du Bluetooth: [http://www.frandroid.com/maison-connectee/232622_dossier-bluetooth-fonctionnement-interet-les-objets-connectes]&lt;br /&gt;
&lt;br /&gt;
Projet de conception d'une liaison bluetooh 2.0 : [file:///tmp/P12Rap_bluetooth.pdf]&lt;br /&gt;
&lt;br /&gt;
Protocole Bluetooth: SIG (Special Interest Group)&lt;br /&gt;
&lt;br /&gt;
'''Bluetooth 2.0 :'''&lt;br /&gt;
&lt;br /&gt;
Appairage facile et sécurisé : le SSP (Secure Simple Pairing)&lt;br /&gt;
&lt;br /&gt;
Protocole?: EDR (Enhanced Data Rate)&lt;br /&gt;
&lt;br /&gt;
'''Bluetooth 3.0: '''&lt;br /&gt;
&lt;br /&gt;
Protocole: HS (High Speed)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Bluetooth 4.0'''&lt;br /&gt;
&lt;br /&gt;
Conception d'un module bluetooth : [http://www.digikey.fr/fr/articles/techzone/2014/jun/how-to-build-low-power-wireless-systems-using-bluetooth-smart-4]&lt;br /&gt;
&lt;br /&gt;
Classic Bluetooth: Regroupe les versions 1.0 -&amp;gt; 3.0&lt;br /&gt;
&lt;br /&gt;
Protocole: LE (Bluetooth Low Energy)  --&amp;gt; Réduit fortement la consommation de la puce Bluetooth avec un protocole différent&lt;br /&gt;
&lt;br /&gt;
Dans le 4.0 le constructeur peut décider d'implémenter deux modes: Bluetooth Low Energy seul (single mode) ou avec le Classic Bluetooth (dual mode) qui lui permet de conserver la compatibilité avec les autres appareils.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Semaine 2===&lt;br /&gt;
&lt;br /&gt;
Nous avons établi une connexion avec l'Atmega 328P et communiqué avec l'accéléromètre et le capteur de température. Malheureusement le capteur de température LyliPad n'est pas très précis, nous avons donc opté pour un capteur DS18B20, c'est un capteur 1-wire. Nous avons donc commencé par comprendre cette technologie puis grâce à un programme trouvé sur internet, nous essayons de l'adapter à notre microprocesseur lillypad pour communiquer avec le DS18B20.&lt;br /&gt;
&lt;br /&gt;
Parallèlement nous avons débuté la programmation d'application Android. Nous utilisons pour cela l'IDE Eclipse. Nous rencontrons actuellement des problèmes pour compiler un programme Android simple comme &amp;quot;Hello World&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Semaine 3===&lt;br /&gt;
**Toujours des problèmes avec le capteur de température DS18B20. Nous arrivons à envoyer le programme C sur l'arduino mais la communication avec le capteur ne se fait pas. Nous avons donc décortiqué le programme et comprendre son fonctionnement.&lt;br /&gt;
&lt;br /&gt;
**Après de nombreux bug d’installation des plateformes (Eclipse, JDK, SDK, Bibliothèque etc..) nous réussissons à lancer l'application &amp;quot;HelloWorld&amp;quot; dans un émulateur de téléphone Android. Nous pouvons maintenant nous concentrer vers la programmation orienté objet Android et détailler plus spécifiquement les étapes à réaliser avant de pouvoir coder notre programme final (cf &amp;quot;Etapes du Projet&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
Notions à connaitre:&lt;br /&gt;
   *Introduction aux ressources Android (les éléments qui s'afficheront à l'écran ou avec lesquels l'utilisateur pourra interagir [http://openclassrooms.com/courses/creez-des-applications-pour-android/les-ressources-2])&lt;br /&gt;
   *Introduction à la notion de &amp;quot;Style&amp;quot; et de &amp;quot;Thèmes&amp;quot; [http://cyril-mottier.developpez.com/tutoriels/android/introduction-styles-themes/]&lt;br /&gt;
&lt;br /&gt;
===Semaine 4===&lt;br /&gt;
** Nous arrivons à communiquer avec le capteur DS18B20. Notre programme détecte le capteur, arrive à l'initialiser mais nous avons à présent des problèmes d'envoi de données pour connaitre la température.&lt;br /&gt;
&lt;br /&gt;
** Nous essayons dans un premier temps d'afficher un menu simple dans lequel nous pouvons naviguer [http://www.tutomobile.fr/faire-des-menus-et-sous-menus-tutoriel-android-n%C2%B012/27/07/2010/] cependant nous rencontrons des problèmes de librairies, en effet nous ne disposons pas de toutes les images publique qu'Android nous offre [http://developer.android.com/guide/topics/resources/drawable-resource.html], nous devrons donc ajouter les images nous même [http://androiddrawableexplorer.appspot.com/] dans la librairie..&lt;br /&gt;
&lt;br /&gt;
===Semaine 5===&lt;br /&gt;
**Toujours des problèmes de communication avec le capteur de température. Le programme avec l'IDE fonctionne mais nous ne comprennons pas pourquoi cela ne marche pas avec le programme en c.&lt;br /&gt;
&lt;br /&gt;
===Semaine 6===&lt;br /&gt;
** Nous avons essayé de télécharger d'autres programmes pour communiquer avec le capteur de température mais sans aucun succès. Nous avons donc essayé de traduire le programme de l'IDE (écrit en c++) en c mais toujours pas de résultat. Nous avons donc décider de laisser tomber ce capteur 1-WIRE et de prendre un capteur analogique, le TMP36. Nous sommes donc passés à la communication Bluetooth sur le lilypad avec le BLE nrf8001.&lt;br /&gt;
&lt;br /&gt;
===Semaine 7===&lt;br /&gt;
** Après avoir étudier le fonctionnement du BLE, nous avons téléchargé un code source sur internet pour l'IDE d'arduino que nous avons retranscrit en C. Le programme comportait à ce moment beaucoup de bogs que nous deviez résoudre.&lt;br /&gt;
&lt;br /&gt;
===Semaine 8=== &lt;br /&gt;
** Après avoir déboguer la communication I2C sur le programme arduino et les quelques autres bogs, nous avons pu commencer à utiliser la communication Bluetooth avec l'application téléphone. Nous avons donc établi un protocole de communication entre l'application et le lilypad pour pouvoir communiquer.&lt;br /&gt;
&lt;br /&gt;
===Semaine 9===&lt;br /&gt;
** Premier essai d'un programme pour mettre le lilypad en mode veille lorsque aucun appareil n'est connecté au Bluetooth. Reste à faire des tests de consommation électriques pour valider le code.&lt;br /&gt;
&lt;br /&gt;
===Semaine 10===&lt;br /&gt;
** Ajout du capteur de température sur le lilypad pour envoyer les données. Nous avons également tester de nouveau la communication Bluetooth suite à une modification de l'application.&lt;br /&gt;
&lt;br /&gt;
===Semaine 11===&lt;br /&gt;
** Ajout de l'accéléromètre pour réaliser le podomètre. Nous allons pouvoir commencer la construction du tee-shirt.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Liens ==&lt;br /&gt;
&lt;br /&gt;
RFDUINO [www.rfduino.com/] : RFD22102 RFduino DIP [http://www.rfduino.com/product/rfd22102-rfduino-dip/index.html]&lt;br /&gt;
&lt;br /&gt;
Nordic rf8001 (BLE) [http://www.nordicsemi.com/eng/Products/Bluetooth-Smart-Bluetooth-low-energy/nRF8001]&lt;br /&gt;
&lt;br /&gt;
Arduino SHIELD-EKG-EMG: [https://www.olimex.com/Products/Duino/Shields/SHIELD-EKG-EMG/]&lt;br /&gt;
&lt;br /&gt;
Électrocardiogramme [http://fab.cba.mit.edu/classes/863.12/people/Adam.Marblestone/AHM_week05.html]&lt;br /&gt;
&lt;br /&gt;
LED [http://www.adafruit.com/] --&amp;gt; Fil de LED Bleu [http://www.adafruit.com/products/895] ---&amp;gt; Lot de 25 LED [http://www.adafruit.com/products/388] ---&amp;gt; [http://www.adafruit.com/products/780]&lt;br /&gt;
&lt;br /&gt;
== Tuto ==&lt;br /&gt;
&lt;br /&gt;
Tuto arduino : [https://tutoarduino.com/choix-tutoriels/]&lt;br /&gt;
&lt;br /&gt;
Tuto capteur de température: [https://tutoarduino.com/portfolio-items/tpbd2-2-detecteur-de-temperature/]&lt;br /&gt;
&lt;br /&gt;
Tuto Bluetooth: [https://tutoarduino.com/portfolio-items/le-bluetooth/] connexion app [http://nononux.free.fr/index.php?page=elec-brico-bluetooth-android-microcontroleur]&lt;br /&gt;
&lt;br /&gt;
Tuto Android: [http://android.developpez.com/cours/] [https://sites.google.com/site/redezzahir/coursJAVA/tp10] [http://sampleprogramz.com/android/] fiche: [http://www.iutbayonne.univ-pau.fr/~dalmau/documents/cours/android/Guide%20TPs%20Android%20avec%20Eclipse.pdf]&lt;br /&gt;
&lt;br /&gt;
Tuto BLE Android: [http://developer.android.com/guide/topics/connectivity/bluetooth-le.html]&lt;br /&gt;
&lt;br /&gt;
Tuto ListView: [http://www.ltm.fr/creez-une-vue-en-liste-listview-avec-texte-image/]&lt;/div&gt;</summary>
		<author><name>Vpiat</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Discussion:V%C3%AAtements_intelligents&amp;diff=19159</id>
		<title>Discussion:Vêtements intelligents</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Discussion:V%C3%AAtements_intelligents&amp;diff=19159"/>
				<updated>2015-03-23T10:30:28Z</updated>
		
		<summary type="html">&lt;p&gt;Vpiat : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Histoire du Bluetooth: [http://www.frandroid.com/maison-connectee/232622_dossier-bluetooth-fonctionnement-interet-les-objets-connectes]&lt;br /&gt;
&lt;br /&gt;
Projet de conception d'une liaison bluetooh 2.0 : file:///tmp/P12Rap_bluetooth.pdf&lt;br /&gt;
&lt;br /&gt;
Protocole Bluetooth: SIG (Special Interest Group)&lt;br /&gt;
&lt;br /&gt;
'''Bluetooth 2.0 :'''&lt;br /&gt;
&lt;br /&gt;
Appairage facile et sécurisé : le SSP (Secure Simple Pairing)&lt;br /&gt;
&lt;br /&gt;
Protocole?: EDR (Enhanced Data Rate)&lt;br /&gt;
&lt;br /&gt;
'''Bluetooth 3.0: '''&lt;br /&gt;
&lt;br /&gt;
Protocole: HS (High Speed)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Bluetooth 4.0'''&lt;br /&gt;
&lt;br /&gt;
Conception d'un module bluetooth : [http://www.digikey.fr/fr/articles/techzone/2014/jun/how-to-build-low-power-wireless-systems-using-bluetooth-smart-4]&lt;br /&gt;
&lt;br /&gt;
Classic Bluetooth: Regroupe les versions 1.0 -&amp;gt; 3.0&lt;br /&gt;
&lt;br /&gt;
Protocole: LE (Bluetooth Low Energy)  --&amp;gt; Réduit fortement la consommation de la puce Bluetooth avec un protocole différent&lt;br /&gt;
&lt;br /&gt;
Dans le 4.0 le constructeur peut décider d'implémenter deux modes: Bluetooth Low Energy seul (single mode) ou avec le Classic Bluetooth (dual mode) qui lui permet de conserver la compatibilité avec les autres appareils.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Module Blutooth 4.0'''&lt;br /&gt;
&lt;br /&gt;
Datasheet : [http://lm-technologies.com/wp-content/downloads/modules/LM910/Datasheet/LM910-0630_Datasheet.pdf]&lt;br /&gt;
Liens constructeur : [http://lm-technologies.com/modules/lm910-bluetooth-ble-usb-module/]&lt;br /&gt;
&lt;br /&gt;
Module cc2540 : [http://www.aliexpress.com/item/New-Portable-4-0-BLE-Bluetooth-Uart-Transceiver-Module-cc2540-cc2541-Central-Switching-60146/2038137520.html#magnet-ads]&lt;br /&gt;
[http://imall.iteadstudio.com/im130614001.html]&lt;br /&gt;
&lt;br /&gt;
datasheet : [http://www.ti.com/tool/cc2540emk#buy]&lt;br /&gt;
&lt;br /&gt;
http://www.macg.co/tags/bluetooth-40&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''BLE MOD-nRF8001'''&lt;br /&gt;
&lt;br /&gt;
datasheet : [https://www.olimex.com/Products/Modules/RF/MOD-nRF8001/resources/MOD-nRF8001_sch.pdf]&lt;br /&gt;
&lt;br /&gt;
bibliotheque : [https://github.com/NordicSemiconductor/ble-sdk-arduino]&lt;br /&gt;
&lt;br /&gt;
http://www.nordicsemi.com/eng/Products/Bluetooth-R-low-energy/nRF8001&lt;br /&gt;
&lt;br /&gt;
http://web.it.kth.se/~axel/papers/2013/MSc-LinlinXu.pdf&lt;br /&gt;
&lt;br /&gt;
code C : https://github.com/NordicSemiconductor/ble-optiboot&lt;br /&gt;
&lt;br /&gt;
'''Tuto Android'''&lt;br /&gt;
&lt;br /&gt;
Tuto installer Android sans eclipse:[http://wiki.kywyxy.net/doku.php?id=debian:android] [http://blog.freelan.org/2010/11/22/developper-pour-android-sans-utiliser-eclipse/]&lt;br /&gt;
Tuto OpenClassRoom: [http://openclassrooms.com/courses/creez-des-applications-pour-android/installation-et-configuration-des-outils]&lt;br /&gt;
Installer Eclipse: [http://developer.android.com/sdk/installing/installing-adt.html]&lt;br /&gt;
Programmer en Java : [http://openclassrooms.com/courses/apprenez-a-programmer-en-java]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
''' Explication one wire '''&lt;br /&gt;
&lt;br /&gt;
http://www.framboise314.fr/mesure-de-temperature-1-wire-ds18b20-avec-le-raspberry-pi/&lt;br /&gt;
&lt;br /&gt;
http://daniel.menesplier.free.fr/Doc/BUS%201%20WIRE.pdf&lt;br /&gt;
&lt;br /&gt;
http://www.mon-club-elec.fr/pmwiki_reference_arduino/pmwiki.php?n=Main.LibrairieOneWire --&amp;gt;Bon lien !!!&lt;br /&gt;
&lt;br /&gt;
http://perso-laris.univ-angers.fr/~cottenceau/ArduinoCottenceau1112.pdf&lt;/div&gt;</summary>
		<author><name>Vpiat</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Discussion:V%C3%AAtements_intelligents&amp;diff=18379</id>
		<title>Discussion:Vêtements intelligents</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Discussion:V%C3%AAtements_intelligents&amp;diff=18379"/>
				<updated>2015-03-09T14:11:37Z</updated>
		
		<summary type="html">&lt;p&gt;Vpiat : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Histoire du Bluetooth: [http://www.frandroid.com/maison-connectee/232622_dossier-bluetooth-fonctionnement-interet-les-objets-connectes]&lt;br /&gt;
&lt;br /&gt;
Projet de conception d'une liaison bluetooh 2.0 : file:///tmp/P12Rap_bluetooth.pdf&lt;br /&gt;
&lt;br /&gt;
Protocole Bluetooth: SIG (Special Interest Group)&lt;br /&gt;
&lt;br /&gt;
'''Bluetooth 2.0 :'''&lt;br /&gt;
&lt;br /&gt;
Appairage facile et sécurisé : le SSP (Secure Simple Pairing)&lt;br /&gt;
&lt;br /&gt;
Protocole?: EDR (Enhanced Data Rate)&lt;br /&gt;
&lt;br /&gt;
'''Bluetooth 3.0: '''&lt;br /&gt;
&lt;br /&gt;
Protocole: HS (High Speed)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Bluetooth 4.0'''&lt;br /&gt;
&lt;br /&gt;
Conception d'un module bluetooth : [http://www.digikey.fr/fr/articles/techzone/2014/jun/how-to-build-low-power-wireless-systems-using-bluetooth-smart-4]&lt;br /&gt;
&lt;br /&gt;
Classic Bluetooth: Regroupe les versions 1.0 -&amp;gt; 3.0&lt;br /&gt;
&lt;br /&gt;
Protocole: LE (Bluetooth Low Energy)  --&amp;gt; Réduit fortement la consommation de la puce Bluetooth avec un protocole différent&lt;br /&gt;
&lt;br /&gt;
Dans le 4.0 le constructeur peut décider d'implémenter deux modes: Bluetooth Low Energy seul (single mode) ou avec le Classic Bluetooth (dual mode) qui lui permet de conserver la compatibilité avec les autres appareils.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Module Blutooth 4.0'''&lt;br /&gt;
&lt;br /&gt;
Datasheet : [http://lm-technologies.com/wp-content/downloads/modules/LM910/Datasheet/LM910-0630_Datasheet.pdf]&lt;br /&gt;
Liens constructeur : [http://lm-technologies.com/modules/lm910-bluetooth-ble-usb-module/]&lt;br /&gt;
&lt;br /&gt;
Module cc2540 : [http://www.aliexpress.com/item/New-Portable-4-0-BLE-Bluetooth-Uart-Transceiver-Module-cc2540-cc2541-Central-Switching-60146/2038137520.html#magnet-ads]&lt;br /&gt;
[http://imall.iteadstudio.com/im130614001.html]&lt;br /&gt;
&lt;br /&gt;
datasheet : [http://www.ti.com/tool/cc2540emk#buy]&lt;br /&gt;
&lt;br /&gt;
http://www.macg.co/tags/bluetooth-40&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''BLE MOD-nRF8001'''&lt;br /&gt;
&lt;br /&gt;
datasheet : [https://www.olimex.com/Products/Modules/RF/MOD-nRF8001/resources/MOD-nRF8001_sch.pdf]&lt;br /&gt;
&lt;br /&gt;
bibliotheque : [https://github.com/NordicSemiconductor/ble-sdk-arduino]&lt;br /&gt;
&lt;br /&gt;
http://www.nordicsemi.com/eng/Products/Bluetooth-R-low-energy/nRF8001&lt;br /&gt;
&lt;br /&gt;
http://web.it.kth.se/~axel/papers/2013/MSc-LinlinXu.pdf&lt;br /&gt;
&lt;br /&gt;
'''Tuto Android'''&lt;br /&gt;
&lt;br /&gt;
Tuto installer Android sans eclipse:[http://wiki.kywyxy.net/doku.php?id=debian:android] [http://blog.freelan.org/2010/11/22/developper-pour-android-sans-utiliser-eclipse/]&lt;br /&gt;
Tuto OpenClassRoom: [http://openclassrooms.com/courses/creez-des-applications-pour-android/installation-et-configuration-des-outils]&lt;br /&gt;
Installer Eclipse: [http://developer.android.com/sdk/installing/installing-adt.html]&lt;br /&gt;
Programmer en Java : [http://openclassrooms.com/courses/apprenez-a-programmer-en-java]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
''' Explication one wire '''&lt;br /&gt;
&lt;br /&gt;
http://www.framboise314.fr/mesure-de-temperature-1-wire-ds18b20-avec-le-raspberry-pi/&lt;br /&gt;
&lt;br /&gt;
http://daniel.menesplier.free.fr/Doc/BUS%201%20WIRE.pdf&lt;br /&gt;
&lt;br /&gt;
http://www.mon-club-elec.fr/pmwiki_reference_arduino/pmwiki.php?n=Main.LibrairieOneWire --&amp;gt;Bon lien !!!&lt;br /&gt;
&lt;br /&gt;
http://perso-laris.univ-angers.fr/~cottenceau/ArduinoCottenceau1112.pdf&lt;/div&gt;</summary>
		<author><name>Vpiat</name></author>	</entry>

	</feed>